WICKET-6517 added some CSS styling
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f1dd096c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f1dd096c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f1dd096c Branch: refs/heads/WICKET-6498_deferred_javascript_2 Commit: f1dd096c772feb9f878f783c5764a37403e82e5b Parents: 3f5c293 Author: Sven Meier <[email protected]> Authored: Thu Jan 18 22:43:21 2018 +0100 Committer: Sven Meier <[email protected]> Committed: Fri Jan 26 23:09:37 2018 +0100 ---------------------------------------------------------------------- .../examples/ajax/builtin/FileUploadPage.html | 17 +++++++++++- .../wicket/extensions/Initializer.properties | 2 ++ .../ajax/markup/html/AjaxFileDropBehavior.java | 27 ++++++++++++++------ 3 files changed, 37 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f1dd096c/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.html ---------------------------------------------------------------------- diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.html index 4642ae3..2ed083d 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.html +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.html @@ -1,5 +1,20 @@ <?xml version="1.0" encoding="UTF-8" ?> <html> +<head> + <wicket:head> + <style> + .drop-zone { + border: 1px dotted #FF9925; + width:200px; + height:200px; + } + .drop-zone.drag-over { + background: #FF9925; + color: #ffffff; + } + </style> + </wicket:head> +</head> <body> <wicket:extend xmlns:wicket="http://wicket.apache.org"> @@ -15,7 +30,7 @@ Demonstrates Wicket's ability to transparently handle multipart forms via AJAX.< <input type="submit" value="Regular Submit"/> <input wicket:id="ajaxSubmit" type="button" value="Ajax Submit"/> </form> -<div wicket:id="drop" style="border: 1px dotted black; width:200px; height:200px;"> +<div wicket:id="drop" class="drop-zone"> Drop file here. </div> http://git-wip-us.apache.org/repos/asf/wicket/blob/f1dd096c/wicket-extensions/src/main/java/org/apache/wicket/extensions/Initializer.properties ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/Initializer.properties b/wicket-extensions/src/main/java/org/apache/wicket/extensions/Initializer.properties index 98f7925..6b43d43 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/Initializer.properties +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/Initializer.properties @@ -45,3 +45,5 @@ AbstractDateTimeField.CSS.time=datetime-time TimeField.hoursSeparator=\u00a0:\u00a0 TimeField.CSS.hours=time-hours TimeField.CSS.minutes=time-minutes + +AjaxFileDropBehavior.CSS.dragover=drag-over \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/f1dd096c/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java index b8806d9..817c2f4 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java @@ -25,11 +25,12 @@ import org.apache.wicket.Component; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.attributes.AjaxCallListener; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method; +import org.apache.wicket.core.util.string.CssUtils; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; -import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.protocol.http.servlet.MultipartServletWebRequest; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; @@ -47,6 +48,8 @@ import org.apache.wicket.util.lang.Bytes; public class AjaxFileDropBehavior extends AjaxEventBehavior { + public static final String DRAG_OVER_CLASS_KEY = CssUtils.key(AjaxFileDropBehavior.class, "dragover"); + private static final ResourceReference JS = new PackageResourceReference( AjaxFileDropBehavior.class, "datatransfer.js"); @@ -62,9 +65,13 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior private String parameterName = "f"; + /** + * Listen for 'dragover' and 'drop' events and prevent them, only 'drop' will initiate + * an Ajax request. + */ public AjaxFileDropBehavior() { - super("drop"); + super("dragenter dragover dragleave drop"); } @Override @@ -73,12 +80,6 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior super.renderHead(component, response); response.render(JavaScriptHeaderItem.forReference(JS)); - - // default must be prevented for dragover event, otherwise browser will consume the - // dataTransfer - response.render(OnDomReadyHeaderItem.forScript( - String.format("jQuery('#%s').on('dragover', function(e) { e.preventDefault(); });", - component.getMarkupId()))); } @Override @@ -91,6 +92,16 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior // default must be prevented, otherwise browser will consume the dataTransfer attributes.setPreventDefault(true); + attributes.getAjaxCallListeners().add(new AjaxCallListener() { + @Override + public CharSequence getPrecondition(Component component) + { + String css = getComponent().getString(DRAG_OVER_CLASS_KEY); + + return String.format("jQuery('#' + attrs.c).toggleClass('%s', attrs.event.type === 'dragover'); return (attrs.event.type === 'drop');", css); + } + }); + attributes.getDynamicExtraParameters() .add(String.format( "return Wicket.DataTransfer.getFilesAsParamArray(attrs.event.originalEvent, '%s');",
