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