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();