You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2011/01/17 14:38:00 UTC
svn commit: r1059922 - in
/wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload:
UploadProgressBar.java progressbar.js
Author: pedro
Date: Mon Jan 17 13:38:00 2011
New Revision: 1059922
URL: http://svn.apache.org/viewvc?rev=1059922&view=rev
Log:
Detecting if there is an ModalWindow in the hierarchy to bind the JavaScript to the correct form.
Issue: WICKET-3307
Modified:
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
Modified: wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java?rev=1059922&r1=1059921&r2=1059922&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java (original)
+++ wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java Mon Jan 17 13:38:00 2011
@@ -20,10 +20,12 @@ import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.apache.wicket.Application;
+import org.apache.wicket.Component;
import org.apache.wicket.IInitializer;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.ajax.WicketAjaxReference;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.CSSPackageResource;
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.IHeaderResponse;
@@ -33,6 +35,7 @@ import org.apache.wicket.markup.html.Wic
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -122,7 +125,6 @@ public class UploadProgressBar extends P
super(id);
uploadField = fileUploadField;
this.form = form;
- form.setOutputMarkupId(true);
setRenderBodyOnly(true);
add(JavascriptPackageResource.getHeaderContribution(WicketEventReference.INSTANCE));
@@ -153,7 +155,7 @@ public class UploadProgressBar extends P
protected void onInitialize()
{
super.onInitialize();
- form.getRootForm().setOutputMarkupId(true);
+ getCallbackForm().setOutputMarkupId(true);
}
/**
@@ -178,23 +180,38 @@ public class UploadProgressBar extends P
ByteArrayOutputStream out = new ByteArrayOutputStream();
PrintStream js = new PrintStream(out);
- js.printf("var formElement = Wicket.$('%s');", form.getRootForm().getMarkupId());
- js.append("var originalCallback = formElement.onsubmit;");
-
- js.append("var submitCallback = function() {");
- js.printf(" if (!Wicket.$('%s')) return;", statusDiv.getMarkupId());
js.printf(" var def=new Wicket.WUPB.Def('%s', '%s', '%s', '%s','%s');", getMarkupId(),
statusDiv.getMarkupId(), barDiv.getMarkupId(), urlFor(ref), uploadFieldId);
-
- js.append(" new Wicket.WUPB(def).start();");
-
- js.append(" if(originalCallback)return originalCallback(); else return true;");
- js.append("};");
-
- js.append("formElement.onsubmit = submitCallback;");
- js.close();
+ js.printf(" new Wicket.WUPB(def).bind('%s');", getCallbackForm().getMarkupId());
response.renderOnDomReadyJavascript(new String(out.toByteArray()));
+ }
+ /**
+ * Form on where will be installed the JavaScript callback to present the progress bar.
+ * {@link ModalWindow} is designed to hold nested forms and the progress bar callback JavaScript
+ * needs to be add at the form inside the {@link ModalWindow} if one is used.
+ *
+ * @return form
+ */
+ private Form<?> getCallbackForm()
+ {
+ final Model<Boolean> insideModal = new Model<Boolean>(false);
+ form.visitParents(ModalWindow.class, new IVisitor<Component>()
+ {
+ public Object component(Component component)
+ {
+ insideModal.setObject(true);
+ return IVisitor.STOP_TRAVERSAL;
+ }
+ });
+ if (insideModal.getObject())
+ {
+ return form;
+ }
+ else
+ {
+ return form.getRootForm();
+ }
}
}
Modified: wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js?rev=1059922&r1=1059921&r2=1059922&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js (original)
+++ wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js Mon Jan 17 13:38:00 2011
@@ -22,17 +22,36 @@ Wicket.WUPB.prototype = {
initialize : function(def) {
this.def = def;
+ },
+
+ bind : function(formid) {
+ formElement = Wicket.$(formid);
+ this.originalCallback = formElement.onsubmit;
+ formElement.onsubmit = this.submitCallback.bind(this);
+ },
+
+ submitCallback : function() {
+ if (this.originalCallback && !this.originalCallback()) {
+ return false;
+ } else {
+ this.start();
+ return true;
+ }
+ },
+
+ start : function(){
this.displayprogress = true;
- if (def.fileid) {
- var fileupload = Wicket.$(def.fileid);
+ if (this.def.fileid) {
+ var fileupload = Wicket.$(this.def.fileid);
this.displayprogress = fileupload && fileupload.value && fileupload.value != '';
}
if(this.displayprogress) {
this.setStatus('Upload starting...');
- Wicket.$(def.barid).firstChild.firstChild.style.width='0%';
+ Wicket.$(this.def.barid).firstChild.firstChild.style.width='0%';
- Wicket.$(def.statusid).style.display='block';
- Wicket.$(def.barid).style.display='block';
+ Wicket.$(this.def.statusid).style.display='block';
+ Wicket.$(this.def.barid).style.display='block';
+ this.scheduleUpdate();
}
},
@@ -46,16 +65,10 @@ Wicket.WUPB.prototype = {
Wicket.$(this.def.statusid).appendChild(label);
},
- start : function(){
- if(this.displayprogress) {
- this.scheduleUpdate();
- }
- },
-
scheduleUpdate : function(){
- window.setTimeout(function() { this.ajax(); }.bind(this), 1000);
+ window.setTimeout(this.ajax.bind(this), 1000);
},
-
+
ajax : function() {
var URL = this.def.url + '?anticache=' + Math.random();