You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/03/20 16:28:35 UTC

wicket git commit: WICKET-6286 Add support for success callback to 'NewWindow' location

Repository: wicket
Updated Branches:
  refs/heads/WICKET-6286-ajax-download bb46817f2 -> 7f646712c


WICKET-6286 Add support for success callback to 'NewWindow' location

Add 'onDownloadCompleted()' callback that is executed after any success or failure callback. Like in jQuery - do something in all cases.

WICKET-6340 Use XHTML friendly markup when creating the iframe


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7f646712
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7f646712
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7f646712

Branch: refs/heads/WICKET-6286-ajax-download
Commit: 7f646712c9b1c0ca5817d7a3a4badec1da087a22
Parents: bb46817
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Mar 20 17:26:23 2017 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Mar 20 17:26:23 2017 +0100

----------------------------------------------------------------------
 .../examples/ajax/builtin/AjaxDownloadPage.java |  9 ++++++-
 .../wicket/extensions/ajax/AjaxDownload.java    | 28 +++++++++++++++++++-
 .../extensions/ajax/wicket-ajaxdownload.js      | 24 ++++++++++-------
 3 files changed, 50 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/7f646712/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
index 3a7ccb5..b339b64 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
@@ -252,8 +252,15 @@ public class AjaxDownloadPage extends BasePage
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
 			}
+
+			@Override
+			protected void onDownloadCompleted(AjaxRequestTarget target)
+			{
+				downloadingContainer.setVisible(false);
+				target.add(downloadingContainer);
+			}
 		};
-		download.setLocation(AjaxDownload.Location.NewWindow);
+		download.setLocation(AjaxDownload.Location.SameWindow);
 		add(download);
 
 		add(new AjaxLink<Void>("downloadInNewWindow")

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f646712/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownload.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownload.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownload.java
index aacbfd9..34595e6 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownload.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownload.java
@@ -72,18 +72,23 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
 		 * The resource will be downloaded via a temporary created iframe.
 		 * This is recommended when there are resources in the DOM which will be
 		 * closed automatically on JavaScript <em>unload</em> event, like WebSockets.
+		 * Supports both <em>success</em> and <em>failure</em> callbacks!
 		 */
 		IFrame,
 
 		/**
 		 * The resource will be downloaded by changing the location of the current DOM document.
 		 * Note: This will trigger JavaScript <em>unload</em> event on the page!
+		 * Supports only <em>success</em> callback, i.e. it is not possible to detect whether
+		 * the download has finished successfully or not.
 		 */
-		Self,
+		SameWindow,
 
 		/**
 		 * The resource will be downloaded in a new browser window by using JavaScript
 		 * <code>window.open()</code> API.
+		 * Supports only <em>success</em> callback, i.e. it is not possible to detect whether
+		 * the download has finished successfully or not.
 		 */
 		NewWindow
 	}
@@ -230,14 +235,34 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
 	{
 	}
 
+	/**
+	 * A callback executed when the download of the resource finished successfully.
+	 *
+	 * @param target The Ajax request handler
+	 */
 	protected void onDownloadSuccess(AjaxRequestTarget target)
 	{
 	}
 
+	/**
+	 * A callback executed when the download of the resource failed for some reason,
+	 * e.g. an error at the server side.
+	 *
+	 * @param target The Ajax request handler
+	 */
 	protected void onDownloadFailed(AjaxRequestTarget target)
 	{
 	}
 
+	/**
+	 * A callback executed when the download of the resource finished successfully or with a failure.
+	 *
+	 * @param target The Ajax request handler
+	 */
+	protected void onDownloadCompleted(AjaxRequestTarget target)
+	{
+	}
+
 	@Override
 	public void renderHead(Component component, IHeaderResponse response)
 	{
@@ -255,6 +280,7 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
 		} else if ("failed".equals(result)) {
 			onDownloadFailed(target);
 		}
+		onDownloadCompleted(target);
 	}
 
 	public final Location getLocation() {

http://git-wip-us.apache.org/repos/asf/wicket/blob/7f646712/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
index 4c5d554..26de71e 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js
@@ -28,6 +28,12 @@
 	Wicket.AjaxDownload = {
 		initiate : function(settings) {
 
+			var notifyServer = function (result) {
+                settings.attributes.ep = settings.attributes.ep || {};
+                settings.attributes.ep.result = result;
+                Wicket.Ajax.ajax(settings.attributes);
+            };
+
 			var checkComplete = function (frame) {
 				var result;
 
@@ -47,9 +53,7 @@
 						}, 0);
 					}
 
-					settings.attributes.ep = settings.attributes.ep || {};
-					settings.attributes.ep.result = result;
-					Wicket.Ajax.ajax(settings.attributes);
+					notifyServer(result);
 				} else {
 					setTimeout(function() {
 						checkComplete(frame);
@@ -57,16 +61,18 @@
 				}
 			};
 
-			if (settings.method === 'self') {
+			if (settings.method === 'samewindow') {
 				setTimeout(function () {
-					window.location.href = settings.downloadUrl;
+					window.location.assign(settings.downloadUrl);
 					checkComplete();
-				}, 100);
+				}, 10);
 			} else if (settings.method === 'newwindow') {
-				window.open(settings.downloadUrl, 'ajax-download');
-				checkComplete();
+				var wo = window.open(settings.downloadUrl, 'ajax-download');
+				jQuery(wo).load(function(evt) {
+					notifyServer(undefined);
+				});
 			} else {
-				var frame = jQuery("<iframe>").hide().prop("src", settings.downloadUrl).appendTo("body");
+				var frame = jQuery("<iframe></iframe>").hide().prop("src", settings.downloadUrl).appendTo("body");
 				checkComplete(frame);
 			}
 		}