This is an automated email from the ASF dual-hosted git repository. svenmeier pushed a commit to branch feature/WICKET-6681-vanilla-wicket-ajax in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/feature/WICKET-6681-vanilla-wicket-ajax by this push: new 27c1135 WICKET-6681 replace jQuery 27c1135 is described below commit 27c1135592e39c6182d000575f66707083325924 Author: Sven Meier <svenme...@apache.org> AuthorDate: Sat Jul 20 11:49:20 2019 +0200 WICKET-6681 replace jQuery --- .../wicket/ajax/res/js/wicket-ajax-vanilla.js | 88 ++++++++++++---------- .../wicket/examples/WicketExampleApplication.java | 3 + 2 files changed, 53 insertions(+), 38 deletions(-) diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-vanilla.js b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-vanilla.js index 487767d..b3162ea 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-vanilla.js +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-vanilla.js @@ -678,29 +678,18 @@ Wicket.Log.info("Executing Ajax request"); Wicket.Log.debug(attrs); - var xhr = new XMLHttpRequest(); - xhr.open(attrs.m, url, attrs.async); - xhr.setRequestHeader("Cache-Control", "no-cache"); - xhr.setRequestHeader("Wicket-Ajax", "true"); - xhr.setRequestHeader("Wicket-Ajax-BaseURL", getAjaxBaseUrl()); - if (Wicket.Focus.lastFocusId) { - // WICKET-6568 might contain non-ASCII - xhr.setRequestHeader("Wicket-FocusedElementId", Wicket.Form.encode(Wicket.Focus.lastFocusId)); - } + var body; + var contentType; if (attrs.mp) { try { - var formData = new FormData(); + body = new FormData(); for (var i = 0; i < data.length; i++) { - formData.append(data[i].name, data[i].value || ""); + body.append(data[i].name, data[i].value || ""); } - - data = formData; } catch (exception) { Wicket.Log.error("Ajax multipart not supported:", exception); } } else { - xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - var encoded = ''; for (var d = 0; d < data.length; d++) { if (encoded.length > 0) { @@ -708,7 +697,29 @@ } encoded += Wicket.Form.encode(data[d].name) + '=' + Wicket.Form.encode(data[d].value); } - data = encoded; + + if ("POST" === attrs.m) { + contentType = 'application/x-www-form-urlencoded'; + body = encoded; + } else { + if (url.indexOf("?") === -1) { + url += "?" + encoded; + } else { + url += "&" + encoded; + } + } + } + var xhr = new XMLHttpRequest(); + xhr.open(attrs.m, url, attrs.async); + if (contentType) { + xhr.setRequestHeader('Content-type', contentType); + } + xhr.setRequestHeader("Cache-Control", "no-cache"); + xhr.setRequestHeader("Wicket-Ajax", "true"); + xhr.setRequestHeader("Wicket-Ajax-BaseURL", getAjaxBaseUrl()); + if (Wicket.Focus.lastFocusId) { + // WICKET-6568 might contain non-ASCII + xhr.setRequestHeader("Wicket-FocusedElementId", Wicket.Form.encode(Wicket.Focus.lastFocusId)); } xhr.timeout = attrs.rt; xhr.addEventListener("load", function() { @@ -738,7 +749,7 @@ Wicket.DOM.showIncrementally(attrs.i); } - xhr.send(data); + xhr.send(body); // execute after handlers right after the Ajax request is fired self._executeHandlers(attrs.ah, attrs); @@ -1851,7 +1862,7 @@ // an element with same href attribute is in document, skip it return FunctionsExecuter.DONE; } else if (oldNode) { - // remove another external element with the same id but different href + // remove existing element oldNode.parentNode.removeChild(oldNode); } @@ -1859,10 +1870,8 @@ var css = Wicket.Head.createElement("link"); // copy supplied attributes only. - var attributes = jQuery(node).prop("attributes"); - var $css = jQuery(css); - Array.prototype.forEach.call(attributes, function(attr) { - $css.attr(attr.name, attr.value); + Array.prototype.forEach.call(node.attributes, function(attr) { + css[attr.name] = attr.value; }); // add element to head @@ -1932,7 +1941,7 @@ // an element with same src attribute is in document, skip it return FunctionsExecuter.DONE; } else if (oldNode) { - // remove another external element with the same id but different src + // remove existing element oldNode.parentNode.removeChild(oldNode); } } @@ -2002,16 +2011,17 @@ processMeta: function (context, node) { context.steps.push(function (notify) { - var meta = Wicket.Head.createElement("meta"), - $meta = jQuery(meta), - attrs = jQuery(node).prop("attributes"), - name = node.getAttribute("name"); - - if(name) { - jQuery('meta[name="' + name + '"]').remove(); + var res = Wicket.Head.containsElement(node, "name"); + var oldNode = res.oldNode; + if (oldNode) { + // remove existing element + oldNode.parentNode.removeChild(oldNode); } - Array.prototype.forEach.call(attrs, function(attr) { - $meta.attr(attr.name, attr.value); + + var meta = Wicket.Head.createElement("meta"); + + Array.prototype.forEach.call(node.attributes, function(attr) { + meta[attr.name] = attr.value; }); Wicket.Head.addElement(meta); @@ -2089,7 +2099,8 @@ var loadedUrl_ = node.getAttribute(mandatoryAttribute+"_"); if (loadedUrl === attr || loadedUrl_ === attr) { return { - contains: true + contains: true, + oldNode: node }; } else if (elementId && elementId === node.getAttribute("id")) { return { @@ -2372,14 +2383,13 @@ idCounter: 0, getId: function (element) { - var $el = jQuery(element), - id = $el.prop("id"); + var id = element.id; if (typeof(id) === "string" && id.length > 0) { return id; } else { id = "wicket-generated-id-" + Wicket.Event.idCounter++; - $el.prop("id", id); + element.id = id; return id; } }, @@ -2412,7 +2422,7 @@ }, fire: function (element, event) { - jQuery(element).trigger(event); + element.dispatchEvent(new Event('event', { 'bubbles': true })); }, /** @@ -2455,7 +2465,9 @@ } // FIXME: how to pass sub-selector and data to the native impl ? - el.addEventListener(type, fn, selector, data); + type.split(" ").forEach(function(t) { + el.addEventListener(t, fn, selector, data); + }); } return element; }, diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java b/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java index 3794cbf..9b2e36a 100644 --- a/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java +++ b/wicket-examples/src/main/java/org/apache/wicket/examples/WicketExampleApplication.java @@ -16,6 +16,7 @@ */ package org.apache.wicket.examples; +import org.apache.wicket.ajax.WicketAjaxVanillaResourceReference; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.resource.CssUrlReplacer; import org.apache.wicket.settings.SecuritySettings; @@ -57,5 +58,7 @@ public abstract class WicketExampleApplication extends WebApplication getDebugSettings().setDevelopmentUtilitiesEnabled(true); getResourceSettings().setCssCompressor(new CssUrlReplacer()); + + getJavaScriptLibrarySettings().setWicketAjaxReference(WicketAjaxVanillaResourceReference.get()); } }