This is an automated email from the ASF dual-hosted git repository. dashorst pushed a commit to branch wicket-10.x in repository https://gitbox.apache.org/repos/asf/wicket.git
commit e21266a8533e213f43c0143727fcee34d9987553 Author: Pedro Santos <[email protected]> AuthorDate: Sat Oct 3 12:03:39 2026 -0300 Keep the upload progress bar instance in a map keyed by the markup id UploadProgressBar named the global variable that holds its client-side instance after the markup id of its bar (window.upb_<id>), an identifier position, so a legal markup id carrying a hyphen or a dot broke the generated script. The instance now lives in Wicket.WUPB.instances with the markup id as the key, where the id is written as a string. A markup id is a value: script generated from it may quote it, never paste it into an identifier position. Co-Authored-By: Claude Fable 5 <[email protected]> --- .../markup/html/form/upload/UploadProgressBar.java | 2 +- .../ajax/markup/html/form/upload/progressbar.js | 1 + .../html/form/upload/UploadProgressBarTest.java | 45 ++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java index 513e962f06..887f3a4c3d 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java @@ -285,7 +285,7 @@ public class UploadProgressBar extends Panel } private String getVarName() { - return "window.upb_" + barDiv.getMarkupId(); + return "Wicket.WUPB.instances['" + barDiv.getMarkupId() + "']"; } diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js index f540347786..84b5893cfe 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js @@ -23,6 +23,7 @@ } Wicket.WUPB = Wicket.Class.create(); + Wicket.WUPB.instances = {}; Wicket.WUPB.prototype = { initialize : function(formid, statusid, barid, url, fileid, initialStatus, onProgressUpdated) { diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBarTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBarTest.java index 137b04c212..3d16398ebc 100644 --- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBarTest.java +++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBarTest.java @@ -66,6 +66,20 @@ class UploadProgressBarTest extends WicketTestCase assertTrue(response.contains("'l\\'\\\\envoi'"), response); } + /** + * The progress bar instance is kept in a map keyed by the markup id of the bar, so an id that + * is not a legal JavaScript identifier, e.g. one carrying a hyphen or a dot, still works. + */ + @Test + void barMarkupIdNeedNotBeAJavaScriptIdentifier() + { + tester.startPage(new CustomBarIdPage()); + + String response = tester.getLastResponseAsString(); + assertTrue(response.contains("Wicket.WUPB.instances['my-bar.1'] = new Wicket.WUPB("), + response); + } + private static class TestPage extends WebPage implements IMarkupResourceStreamProvider { private static final long serialVersionUID = 1L; @@ -85,4 +99,35 @@ class UploadProgressBarTest extends WicketTestCase "<form wicket:id=\"form\"><div wicket:id=\"bar\"></div></form></body></html>"); } } + + private static class CustomBarIdPage extends WebPage implements IMarkupResourceStreamProvider + { + private static final long serialVersionUID = 1L; + + CustomBarIdPage() + { + Form<Void> form = new Form<>("form"); + add(form); + form.add(new UploadProgressBar("bar", form) + { + private static final long serialVersionUID = 1L; + + @Override + protected MarkupContainer newBarComponent(String id) + { + MarkupContainer bar = super.newBarComponent(id); + bar.setMarkupId("my-bar.1"); + return bar; + } + }); + } + + @Override + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + return new StringResourceStream("<html><head></head><body>" + + "<form wicket:id=\"form\"><div wicket:id=\"bar\"></div></form></body></html>"); + } + } }
