From 9b72743cf8377f814fa069ffc28d15317e0a2cc8 Mon Sep 17 00:00:00 2001 From: reiern70 Date: Wed, 3 Jun 2026 21:25:34 -0500 Subject: [PATCH] add possibility to use templates based on https://github.com/BorisMoore/jsrender. The JS render file is adapted to jQuery 4 --- wicketstuff-jquery-ui-parent/pom.xml | 5 + .../JQueryAbstractTemplateBehavior.java | 8 ++ .../TemplateAutoCompletePage.html | 9 ++ .../TemplateAutoCompletePage.java | 69 +++++++++++++- .../autocomplete/AutoCompleteTextField.java | 32 +++++-- .../JQueryJsRenderTemplateBehavior.java | 93 +++++++++++++++++++ .../ui/template/JQueryTemplateBehavior.java | 6 ++ .../jquery/ui/template/jsrender.min.js | 3 + 8 files changed, 214 insertions(+), 11 deletions(-) create mode 100644 wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui/src/main/java/org/wicketstuff/jquery/ui/template/JQueryJsRenderTemplateBehavior.java create mode 100644 wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui/src/main/resources/org/wicketstuff/jquery/ui/template/jsrender.min.js diff --git a/wicketstuff-jquery-ui-parent/pom.xml b/wicketstuff-jquery-ui-parent/pom.xml index c281e65500..94bb4647f9 100644 --- a/wicketstuff-jquery-ui-parent/pom.xml +++ b/wicketstuff-jquery-ui-parent/pom.xml @@ -39,6 +39,11 @@ Martin Grigorov mgrigorov@apache.org + + reiern70 + Ernesto Reinaldo Barreiro + reiern70@apache.org + diff --git a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-core/src/main/java/org/wicketstuff/jquery/core/template/JQueryAbstractTemplateBehavior.java b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-core/src/main/java/org/wicketstuff/jquery/core/template/JQueryAbstractTemplateBehavior.java index 7cdc5a6660..4b9ad00663 100644 --- a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-core/src/main/java/org/wicketstuff/jquery/core/template/JQueryAbstractTemplateBehavior.java +++ b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-core/src/main/java/org/wicketstuff/jquery/core/template/JQueryAbstractTemplateBehavior.java @@ -58,4 +58,12 @@ public void renderHead(Component component, IHeaderResponse response) * @return the {@link JQueryTemplateResourceStream} */ protected abstract JQueryTemplateResourceStream newResourceStream(); + + /** + * @return The JavaScript code rendering the template. + */ + public String getTemplateRenderingCode() + { + return null; + } } diff --git a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.html b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.html index bbe971aa14..73e74b0ae8 100644 --- a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.html +++ b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.html @@ -19,6 +19,15 @@
+
+
+
Select a metal genre: (containing any char)
+
+
+
+
+
+
diff --git a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.java b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.java index 2483dc5f32..a3f97778b8 100644 --- a/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.java +++ b/wicketstuff-jquery-ui-parent/wicketstuff-jquery-ui-samples/src/main/java/org/wicketstuff/jquery/ui/samples/jqueryui/autocomplete/TemplateAutoCompletePage.java @@ -14,11 +14,13 @@ import org.apache.wicket.model.Model; import org.wicketstuff.jquery.core.resource.StyleSheetPackageHeaderItem; import org.wicketstuff.jquery.core.template.IJQueryTemplate; +import org.wicketstuff.jquery.core.template.JQueryAbstractTemplateBehavior; import org.wicketstuff.jquery.core.utils.ListUtils; import org.wicketstuff.jquery.ui.form.autocomplete.AutoCompleteTextField; import org.wicketstuff.jquery.ui.panel.JQueryFeedbackPanel; import org.wicketstuff.jquery.ui.samples.data.bean.Genre; import org.wicketstuff.jquery.ui.samples.data.dao.GenresDAO; +import org.wicketstuff.jquery.ui.template.JQueryJsRenderTemplateBehavior; public class TemplateAutoCompletePage extends AbstractAutoCompletePage { @@ -30,7 +32,7 @@ public TemplateAutoCompletePage() final IModel model = Model.of(GenresDAO.newGenre()); // Form // - final Form form = new Form("form"); + final Form form = new Form<>("form"); this.add(form); // FeedbackPanel // @@ -38,7 +40,7 @@ public TemplateAutoCompletePage() form.add(feedback.setOutputMarkupId(true)); // Auto-complete // - form.add(new AutoCompleteTextField("autocomplete", model) { + form.add(new AutoCompleteTextField<>("autocomplete", model) { private static final long serialVersionUID = 1L; @@ -86,6 +88,69 @@ public List getTextProperties() }; } }); + + // Form // + final Form form1 = new Form<>("form1"); + this.add(form1); + + // FeedbackPanel // + final FeedbackPanel feedback1 = new JQueryFeedbackPanel("feedback1"); + form1.add(feedback.setOutputMarkupId(true)); + + // Auto-complete // + form1.add(new AutoCompleteTextField<>("autocomplete1", model) { + + private static final long serialVersionUID = 1L; + + @Override + protected List getChoices(String input) + { + return ListUtils.contains(input, GenresDAO.all()); + } + + @Override + protected void onSelected(AjaxRequestTarget target) + { + info("Your favorite rock genre is: " + this.getModelObject()); + target.add(feedback); + } + + @Override + protected JQueryAbstractTemplateBehavior createTemplateBehavior(IJQueryTemplate template) { + return new JQueryJsRenderTemplateBehavior(template); + } + + @Override + protected IJQueryTemplate newTemplate() + { + return new IJQueryTemplate() { + + private static final long serialVersionUID = 1L; + + /** + * The template text will be enclosed in a