WICKET-6286 Add Location.NewWindow - downloads the resource in a new browser 
window/tab


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

Branch: refs/heads/master
Commit: 27bb0bbfd888abb6caefaefa63b03e7c02865c22
Parents: ab5675e
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Tue Mar 7 22:05:48 2017 +0100
Committer: Sven Meier <svenme...@apache.org>
Committed: Tue Mar 21 23:23:17 2017 +0100

----------------------------------------------------------------------
 .../examples/ajax/builtin/AjaxDownloadPage.html |  6 ++
 .../examples/ajax/builtin/AjaxDownloadPage.java | 62 +++++++++++++++++++-
 .../wicket/extensions/ajax/AjaxDownload.java    |  8 ++-
 .../extensions/ajax/wicket-ajaxdownload.js      |  7 ++-
 4 files changed, 77 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/27bb0bbf/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.html
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.html
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.html
index 2764b25..670c736 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.html
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.html
@@ -34,6 +34,12 @@ This download <a wicket:id="downloadFailure">fails</a>.
 A resource reference can be <a wicket:id="downloadReference">used too</a>.
 </p>
 
+<p>
+    This example demonstrates a <a wicket:id="downloadInNewWindow">download</a>
+    initiated via Ajax and serving the response in a new browser window.
+</p>
+
+
 <div wicket:id="downloading" class="download-veil"><span>Preparing download 
...</span></div>
 
 </wicket:extend>

http://git-wip-us.apache.org/repos/asf/wicket/blob/27bb0bbf/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 a23368c..3a7ccb5 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
@@ -51,10 +51,12 @@ public class AjaxDownloadPage extends BasePage
                add(downloadingContainer);
                
                initDownload();
-               
+
                initDownloadFailure();
-               
+
                initDownloadReference();
+
+               initDownloadInNewWindow();
        }
 
        private void initDownload()
@@ -209,7 +211,61 @@ public class AjaxDownloadPage extends BasePage
                        }
                });
        }
-       
+
+       private void initDownloadInNewWindow()
+       {
+               IResource resource = new ResourceStreamResource() {
+                       protected IResourceStream getResourceStream() {
+                               // simulate delay
+                               try
+                               {
+                                       TimeUnit.MILLISECONDS.sleep(5000);
+                               }
+                               catch (InterruptedException e)
+                               {
+                               }
+
+                               return new StringResourceStream("downloaded via 
ajax in a new browser window");
+                       };
+
+               
}.setFileName("File-from-IResource.txt").setContentDisposition(ContentDisposition.INLINE).setCacheDuration(Duration.NONE);
+
+               final AjaxDownload download = new AjaxDownload(resource) {
+
+                       @Override
+                       protected void onBeforeDownload(AjaxRequestTarget 
target)
+                       {
+                               downloadingContainer.setVisible(true);
+                               target.add(downloadingContainer);
+                       }
+
+                       @Override
+                       protected void onDownloadSuccess(AjaxRequestTarget 
target)
+                       {
+                               downloadingContainer.setVisible(false);
+                               target.add(downloadingContainer);
+                       }
+
+                       @Override
+                       protected void onDownloadFailed(AjaxRequestTarget 
target)
+                       {
+                               downloadingContainer.setVisible(false);
+                               target.add(downloadingContainer);
+                       }
+               };
+               download.setLocation(AjaxDownload.Location.NewWindow);
+               add(download);
+
+               add(new AjaxLink<Void>("downloadInNewWindow")
+               {
+                       @Override
+                       public void onClick(AjaxRequestTarget target)
+                       {
+                               download.initiate(target);
+                       }
+               });
+       }
+
        public static class StaticResource extends ResourceStreamResource {
 
                StaticResource() {

http://git-wip-us.apache.org/repos/asf/wicket/blob/27bb0bbf/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 0b941de..aacbfd9 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
@@ -79,7 +79,13 @@ public class AjaxDownload extends AbstractDefaultAjaxBehavior
                 * 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
+               Self,
+
+               /**
+                * The resource will be downloaded in a new browser window by 
using JavaScript
+                * <code>window.open()</code> API.
+                */
+               NewWindow
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/27bb0bbf/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 b821883..4c5d554 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
@@ -58,10 +58,13 @@
                        };
 
                        if (settings.method === 'self') {
-                               setTimeout(function() {
-                                       
window.location.href=settings.downloadUrl;
+                               setTimeout(function () {
+                                       window.location.href = 
settings.downloadUrl;
                                        checkComplete();
                                }, 100);
+                       } else if (settings.method === 'newwindow') {
+                               window.open(settings.downloadUrl, 
'ajax-download');
+                               checkComplete();
                        } else {
                                var frame = 
jQuery("<iframe>").hide().prop("src", settings.downloadUrl).appendTo("body");
                                checkComplete(frame);

Reply via email to