Repository: wicket
Updated Branches:
  refs/heads/master fd6befd02 -> 399089927


WICKET-6286 Add setting to control how to download the resource - via iframe 
(default) or via document.location


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

Branch: refs/heads/master
Commit: ab5675ec9a364cf2b1fe483219863d233e593cba
Parents: b934944
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Tue Jan 31 22:52:09 2017 +0100
Committer: Sven Meier <svenme...@apache.org>
Committed: Tue Mar 21 23:23:16 2017 +0100

----------------------------------------------------------------------
 .../wicket/extensions/ajax/AjaxDownload.java    | 29 ++++++++++++++
 .../extensions/ajax/wicket-ajaxdownload.js      | 40 +++++++++++++-------
 2 files changed, 55 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ab5675ec/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 11c97d4..0b941de 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
@@ -40,6 +40,8 @@ import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.resource.JQueryPluginResourceReference;
 import org.apache.wicket.util.lang.Args;
 
+import java.util.Locale;
+
 /**
  * Download resources via Ajax.
  * <p>
@@ -65,6 +67,21 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
 {
        private static final long serialVersionUID = 1L;
 
+       public enum Location {
+               /**
+                * 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.
+                */
+               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!
+                */
+               Self
+       }
+
        /**
         * Name of parameter used to transfer the download identifier to the 
resource.
         *
@@ -81,6 +98,8 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
 
        private PageParameters resourceParameters;
 
+       private Location location = Location.IFrame;
+
        /**
         * Download of a {@link Resource}.
         * 
@@ -194,6 +213,7 @@ public class AjaxDownload extends 
AbstractDefaultAjaxBehavior
                settings.put("attributes", new 
JsonFunction(renderAjaxAttributes(getComponent())));
                settings.put("name", getName());
                settings.put("downloadUrl", url);
+               settings.put("method", 
location.name().toLowerCase(Locale.ENGLISH));
 
                
target.appendJavaScript(String.format("Wicket.AjaxDownload.initiate(%s);", 
settings));
 
@@ -231,6 +251,15 @@ public class AjaxDownload extends 
AbstractDefaultAjaxBehavior
                }
        }
 
+       public final Location getLocation() {
+               return location;
+       }
+
+       public AjaxDownload setLocation(final Location location) {
+               this.location = Args.notNull(location, "location");
+               return this;
+       }
+
        /**
         * Identifying name of this behavior.
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/ab5675ec/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 a383fa8..b821883 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
@@ -27,15 +27,13 @@
 
        Wicket.AjaxDownload = {
                initiate : function(settings) {
-                       
-                       var frame = jQuery("<iframe>").hide().prop("src", 
settings.downloadUrl).appendTo("body");
-                       
-                       var checkComplete = function() {
+
+                       var checkComplete = function (frame) {
                                var result;
-                               
+
                                if (document.cookie.indexOf(settings.name + 
'=') > -1) {
                                        result = "success";
-                               } else {
+                               } else if (frame) {
                                        var html = 
frame.contents().find('body').html();
                                        if (html && html.length) {
                                                result = "failed";
@@ -43,18 +41,32 @@
                                }
 
                                if (result) {
-                                       setTimeout(function() { frame.remove(); 
}, 0);
-                                       
+                                       if (frame) {
+                                               setTimeout(function () {
+                                                       frame.remove();
+                                               }, 0);
+                                       }
+
                                        settings.attributes.ep = 
settings.attributes.ep || {};
-                                       settings.attributes.ep['result'] = 
result;
+                                       settings.attributes.ep.result = result;
                                        Wicket.Ajax.ajax(settings.attributes);
                                } else {
-                                       setTimeout(checkComplete, 100);
+                                       setTimeout(function() {
+                                               checkComplete(frame);
+                                       }, 100);
                                }
-                       }; 
-                       
-                       checkComplete();
+                       };
+
+                       if (settings.method === 'self') {
+                               setTimeout(function() {
+                                       
window.location.href=settings.downloadUrl;
+                                       checkComplete();
+                               }, 100);
+                       } else {
+                               var frame = 
jQuery("<iframe>").hide().prop("src", settings.downloadUrl).appendTo("body");
+                               checkComplete(frame);
+                       }
                }
        }; 
        
-})();
\ No newline at end of file
+})();

Reply via email to