r944 - in xwiki/trunk/src/main: java/com/xpn/xwiki/web web/WEB-INF web/templates
Nguyen Viet Chung
chungnv at users.forge.objectweb.org
Mon Feb 27 12:34:33 CET 2006
Author: chungnv
Date: 2006-02-27 12:34:32 +0100 (Mon, 27 Feb 2006)
New Revision: 944
Added:
xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
Modified:
xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java
xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java
xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
xwiki/trunk/src/main/web/templates/edit.vm
xwiki/trunk/src/main/web/templates/editclass.vm
xwiki/trunk/src/main/web/templates/editobject.vm
xwiki/trunk/src/main/web/templates/editprefs.vm
xwiki/trunk/src/main/web/templates/editrights.vm
xwiki/trunk/src/main/web/templates/httpheader.vm
xwiki/trunk/src/main/web/templates/viewheader.vm
Log:
Added new LockAction and Javascript locks using XMLHttpRequest to make sure that all locks are set properly and cleaned up even if the user does not press cancel. Locks are automatically cleared when use leave the page and taken again when the user loads and edit page
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java 2006-02-27 11:34:32 UTC (rev 944)
@@ -53,11 +53,14 @@
}
String username = context.getUser();
-
XWikiLock lock = tdoc.getLock(context);
- if (lock != null && lock.getUserName().equals(username))
+ if (lock != null && lock.getUserName().equals(username)) {
+ if ("inline".equals(request.get("action")))
+ doc.removeLock(context);
+ else
tdoc.removeLock(context);
-
+ }
+
// forward to view
String redirect = Utils.getRedirect("view", context);
sendRedirect(response, redirect);
Added: xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java 2006-02-27 11:34:32 UTC (rev 944)
@@ -0,0 +1,46 @@
+package com.xpn.xwiki.web;
+
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.doc.XWikiLock;
+
+public class LockAction extends XWikiAction {
+ public boolean action(XWikiContext context) throws XWikiException {
+ XWiki xwiki = context.getWiki();
+ XWikiRequest request = context.getRequest();
+ XWikiResponse response = context.getResponse();
+ XWikiDocument doc = context.getDoc();
+ XWikiForm form = context.getForm();
+
+ String language = ((EditForm)form).getLanguage();
+ String defaultLanguage = ((EditForm)form).getDefaultLanguage();
+ XWikiDocument tdoc;
+
+ if ((language==null)||(language.equals(""))||(language.equals("default"))||(language.equals(doc.getDefaultLanguage()))) {
+ // Need to save parent and defaultLanguage if they have changed
+ tdoc = doc;
+ } else {
+ tdoc = doc.getTranslatedDocument(language, context);
+ if (tdoc == doc) {
+ tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
+ tdoc.setLanguage(language);
+ tdoc.setStore(doc.getStore());
+ }
+ tdoc.setTranslation(1);
+ }
+
+ String username = context.getUser();
+ XWikiLock lock = tdoc.getLock(context);
+ if ("inline".equals(request.get("action")))
+ doc.setLock(username, context);
+ else
+ tdoc.setLock(username, context);
+
+ // forward to view
+ String redirect = Utils.getRedirect("view", context);
+ sendRedirect(response, redirect);
+ return false;
+ }
+}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java 2006-02-27 11:34:32 UTC (rev 944)
@@ -154,6 +154,10 @@
if (action.equals("save"))
form = new EditForm();
+ else if (action.equals("lock"))
+ form = new EditForm();
+ else if (action.equals("cancel"))
+ form = new EditForm();
else if (action.equals("rollback"))
form = new RollbackForm();
else if (action.equals("objectadd"))
@@ -179,6 +183,9 @@
else if (action.equals("cancel")) {
(new CancelAction()).action(context);
}
+ else if (action.equals("lock")) {
+ (new Lockction()).action(context);
+ }
else if (action.equals("delete")) {
(new DeleteAction()).action(context);
}
Modified: xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
===================================================================
--- xwiki/trunk/src/main/web/WEB-INF/struts-config.xml 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/WEB-INF/struts-config.xml 2006-02-27 11:34:32 UTC (rev 944)
@@ -30,6 +30,8 @@
type="com.xpn.xwiki.web.PrepareEditForm"/>
<form-bean name="inline"
type="com.xpn.xwiki.web.PrepareEditForm"/>
+ <form-bean name="lock"
+ type="com.xpn.xwiki.web.EditForm"/>
<form-bean name="preview"
type="com.xpn.xwiki.web.EditForm"/>
<form-bean name="save"
@@ -300,6 +302,12 @@
scope="request">
</action>
+ <action path="/lock/"
+ type="com.xpn.xwiki.web.LockAction"
+ name="lock"
+ score="request">
+ </action>
+
</action-mappings>
<controller processorClass="com.xpn.xwiki.web.XWikiRequestProcessor"
Modified: xwiki/trunk/src/main/web/templates/edit.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/edit.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/edit.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -18,6 +18,23 @@
#else
#set($colsclass = "hide-both")
#end
+
+<script type="text/javascript">
+ function callLockAction(){
+ if($doc.getURL("save")) {
+ var surl = "$doc.getExternalURL("lockaction")";
+ var myAjax = new Ajax.Request(
+ surl,
+ {
+ method: 'get',
+ parameters: "",
+ asynchronous: false
+ });
+
+ }
+ }
+
+</script>
<div id="xwikieditcontent" class="large">
<div id="columns">
<div class="cols-wrapper">
@@ -25,7 +42,7 @@
<div id="col-a">
<div class="main-content">
#set($xredirect=$!request.getParameter("xredirect"))
-<form id="edit" method="post" action="$doc.getURL("preview")">
+<form id="edit" method="post" action="$doc.getURL("preview")" >
<p>
<input type="hidden" name="template" value="$!request.template" />
<input type="hidden" name="xredirect" value="$!xredirect" />
Modified: xwiki/trunk/src/main/web/templates/editclass.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editclass.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editclass.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -19,7 +19,7 @@
<div class="float-wrapper">
<div id="col-a">
<div class="main-content">
-<form id="propupdate" method="post" action="$doc.getURL("propupdate")">
+<form id="propupdate" method="post" action="$doc.getURL("propupdate")" onsubmit="cancelCancelEdit()">
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
<div id="intro">
$msg.get("welcometoclasseditor")
@@ -71,7 +71,7 @@
#end
<br />
<h3>$msg.get("addproperty")</h3>
-<form id="propadd" method="post" action="$doc.getURL("propadd")">
+<form id="propadd" method="post" action="$doc.getURL("propadd")" onsubmit="cancelCancelEdit()">
<p style="text-align: center">
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
$msg.get("propname"): <input type="text" name="propname" value="" size="20" />
Modified: xwiki/trunk/src/main/web/templates/editobject.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editobject.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editobject.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -22,7 +22,7 @@
<div id="intro">
$msg.get("welcometoobjecteditor")
</div>
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
<p>
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
#set ( $first = 1)
@@ -91,7 +91,7 @@
<br /><br />
#end
<h3>$msg.get("addobject")</h3>
-<form id="objectadd" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
<p style="text-align: center">
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
<select name="classname" size="1">
@@ -104,7 +104,7 @@
</p>
</form>
#if($xwiki.isVirtual())
-<form id="objectadd2" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd2" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
<p style="text-align: center">
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
<input type="text" name="classname" size="20" />
Modified: xwiki/trunk/src/main/web/templates/editprefs.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editprefs.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editprefs.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -13,6 +13,7 @@
// -->
</script>
#set($obj = $doc.getObject("XWiki.XWikiPreferences"))
+
#if(!$obj)
<form id="objectadd" method="post" action="$doc.getURL("objectadd")">
<p>
@@ -63,7 +64,7 @@
<div class="float-wrapper">
<div id="col-a">
<div class="main-content">
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
<p>
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
</p>
@@ -95,7 +96,7 @@
<h3>$msg.get("preferences")</h3>
<br />
<p style="text-align: center">
-<input type="button" value="$msg.get("saveprefs")" onclick="document.forms.update.submit()" />
+<input type="button" value="$msg.get("saveprefs")" onclick="cancelCancelEdit(); document.forms.update.submit()" />
</p>
<br />
<h3>$msg.get("sections")</h3>
Modified: xwiki/trunk/src/main/web/templates/editrights.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editrights.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editrights.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -28,7 +28,7 @@
$msg.get("welcometorightseditor")
</div>
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
<p>
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
#set ( $first = 1)
@@ -87,7 +87,7 @@
#end
<br /><br />
<h3>$msg.get("addrightentry")</h3>
-<form id="objectadd" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
<p>
<input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
<input type="hidden" name="classname" value="$classname" />
Modified: xwiki/trunk/src/main/web/templates/httpheader.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/httpheader.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/httpheader.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -16,9 +16,65 @@
$!xwiki.getWebPreference("meta")
#template("stylesheets.vm")
<script type="text/javascript" src="$xwiki.getSkinFile("skin.js")"></script>
+<script type="text/javascript" src="$xwiki.getSkinFile("prototype.js")"></script>
<script type="text/javascript" src="$xwiki.getSkinFile("xwiki.js")"></script>
</head>
+#if(($context.action=="inline")||($context.action=="edit"))
+<script type="text/javascript">
+ var cancelEditNextOnunload;
+ var cancelCancelEditFlag = true;
+ var lockEditFlag = false;
+
+ function cancelEditResponse(){
+ }
+
+ function cancelEdit(){
+ if (cancelCancelEditFlag) {
+ var surl = "$doc.getExternalURL("cancel")";
+ var myAjax = new Ajax.Request(
+ surl,
+ {
+ method: 'get',
+ parameters: "",
+ asynchronous: false
+ });
+ cancelCancelEditFlag = false;
+ }
+ if (cancelEditNextOnunload!=null)
+ cancelEditNextOnunload();
+ }
+
+ function lockEdit(){
+ if (lockEditFlag==false) {
+#if($context.action=="inline")
+ var surl = "$doc.getExternalURL("lock")?action=inline&language=${request.language}";
+#else
+ var surl = "$doc.getExternalURL("lock")?language=${request.language}";
+#end
+ var myAjax = new Ajax.Request(
+ surl,
+ {
+ method: 'get',
+ parameters: "",
+ asynchronous: false
+ });
+ lockEditFlag = false;
+ }
+ }
+
+ function prepareCancelEdit() {
+ cancelEditNextOnunload = document.onunload;
+ document.onunload = cancelEdit;
+ lockEdit();
+ }
+ function cancelCancelEdit() {
+ cancelCancelEditFlag = false;
+ }
+</script>
+<body onUnload="cancelEdit()" onLoad="prepareCancelEdit()">
+#else
<body>
+#end
#else
#template("stylesheets2.vm")
<script type="text/javascript" src="$xwiki.getSkinFile("skin.js")"></script>
Modified: xwiki/trunk/src/main/web/templates/viewheader.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/viewheader.vm 2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/viewheader.vm 2006-02-27 11:34:32 UTC (rev 944)
@@ -113,25 +113,25 @@
#end
#if (!$isReadOnly)
#xwikiitem($doc.getURL("inline") "editinline")
- #xwikiitem($doc.getURL("edit", "xpage=editobject") "editobject")
+ #xwikiitem($doc.getURL("inline", "xpage=editobject") "editobject")
#end
#if(($hasadmin||($context.user.equals($doc.creator))) && !$isReadOnly)
#xwikiitem($doc.getURL("delete") "delete")
#end
#if (!$isReadOnly)
#xwikiitem($doc.getURL("chartwizard") "chartwizard")
- #xwikiitem($doc.getURL("edit", "xpage=editrights") "editrights")
+ #xwikiitem($doc.getURL("inline", "xpage=editrights") "editrights")
#end
#end
## Admin section
#if($hasadmin && !$isReadOnly)
<div class="xwikimenutitle">$msg.get("admin")</div>
#xwikiitem($xwiki.getURL("${doc.web}.WebHome", "view") "space")
- #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "edit", "xpage=editprefs") "webprefs")
- #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "edit" , "xpage=editrights&global=1") "webrights")
- #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "edit", "xpage=editprefs") "xwikiprefs")
- #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "edit", "xpage=editrights&global=1") "xwikirights")
- #xwikiitem($doc.getURL("edit", "xpage=editclass") "classeditor")
+ #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "inline", "xpage=editprefs") "webprefs")
+ #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "inline" , "xpage=editrights&global=1") "webrights")
+ #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "inline", "xpage=editprefs") "xwikiprefs")
+ #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "inline", "xpage=editrights&global=1") "xwikirights")
+ #xwikiitem($doc.getURL("inline", "xpage=editclass") "classeditor")
#end
## Help section
<div class="xwikimenutitle">$msg.get("help")</div>
More information about the Xwiki-notifications
mailing list