This is an automated email from the ASF dual-hosted git repository.

danwatford pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new c7bdaf1605 Improved: MacroFormRenderer refactoring of datefind fields 
(OFBIZ-12712)
c7bdaf1605 is described below

commit c7bdaf160599187f87a8a90e9f39e6aa0dec800c
Author: Daniel Watford <dan...@watfordconsulting.com>
AuthorDate: Fri Nov 18 17:59:38 2022 +0000

    Improved: MacroFormRenderer refactoring of datefind fields (OFBIZ-12712)
    
    Part of the OFBIZ-11456 MacroFormRenderer refactoring effort.
    
    Rather than MacroFormRenderer producing and evaulating FTL strings, it now 
uses
    RenderableFtlElementsBuilder to create RenderableFtlMacroCall objects for
    datefind fields which are then passed to an FtlWriter for evaluation.
    
    Removed unused parameters from the renderDateFindField FTL macro definition.
    Set defaults for several parameters, simplifying generation of macro calls.
    
    Synchronised the parameter list of rendateDateFindField macros across all
    output types - i.e. html, xml, text, etc.
---
 .../widget/content/StaticContentUrlProvider.java   |  63 ++++++++
 .../widget/renderer/macro/MacroFormRenderer.java   | 158 +--------------------
 .../macro/RenderableFtlFormElementsBuilder.java    | 107 +++++++++++++-
 .../renderer/macro/MacroFormRendererTest.java      |  23 ---
 ...nderableFtlFormElementsBuilderDatetimeTest.java |   4 +
 .../RenderableFtlFormElementsBuilderTest.java      |   4 +
 .../template/macro/CsvFormMacroLibrary.ftl         |   2 +-
 .../template/macro/FoFormMacroLibrary.ftl          |   2 +-
 .../template/macro/HtmlFormMacroLibrary.ftl        |   6 +-
 .../template/macro/TextFormMacroLibrary.ftl        |   2 +-
 .../template/macro/XlsFormMacroLibrary.ftl         |   2 +-
 .../template/macro/XmlFormMacroLibrary.ftl         |   2 +-
 12 files changed, 191 insertions(+), 184 deletions(-)

diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/content/StaticContentUrlProvider.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/content/StaticContentUrlProvider.java
new file mode 100644
index 0000000000..213b10f830
--- /dev/null
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/content/StaticContentUrlProvider.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ 
*******************************************************************************/
+package org.apache.ofbiz.widget.content;
+
+import org.apache.ofbiz.webapp.taglib.ContentUrlTag;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Generates URL strings for addressing static content based properties 
configured on an HttpRequest's website or
+ * configured properties in url.properties.
+ *
+ * @see ContentUrlTag
+ */
+public class StaticContentUrlProvider {
+    // HttpServletRequest used to find the URL of the current website.
+    private final HttpServletRequest request;
+
+    // Cached copy of the URL prefix to use for static content.
+    private String prefix;
+
+    /**
+     * Create a new URL provider for given HttpServletRequest's website.
+     *
+     * @param request The HttpServletRequest request to look up the website 
for.
+     */
+    public StaticContentUrlProvider(final HttpServletRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * Given a path to a static content resource, return the URL string that a 
client can use to retrieve that resource.
+     *
+     * @param resourcePath Path to static resource
+     * @return String representation of the URL which can be used to retrieve 
the static resource.
+     */
+    public String pathAsContentUrlString(final String resourcePath) {
+        return getPrefix() + resourcePath;
+    }
+
+    private String getPrefix() {
+        if (prefix == null) {
+            this.prefix = ContentUrlTag.getContentPrefix(this.request);
+        }
+        return prefix;
+    }
+}
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
index a97bf72fa3..06042ad5e8 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
@@ -52,6 +52,7 @@ import org.apache.ofbiz.security.CsrfUtil;
 import org.apache.ofbiz.webapp.control.RequestHandler;
 import org.apache.ofbiz.webapp.taglib.ContentUrlTag;
 import org.apache.ofbiz.widget.WidgetWorker;
+import org.apache.ofbiz.widget.content.StaticContentUrlProvider;
 import org.apache.ofbiz.widget.model.CommonWidgetModels;
 import org.apache.ofbiz.widget.model.FieldInfo;
 import org.apache.ofbiz.widget.model.ModelForm;
@@ -125,9 +126,10 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
         this.javaScriptEnabled = UtilHttp.isJavaScriptEnabled(request);
         internalEncoder = UtilCodec.getEncoder("string");
         this.ftlWriter = ftlWriter != null ? ftlWriter : new 
FtlWriter(macroLibraryPath, this.visualTheme);
+        final StaticContentUrlProvider staticContentUrlProvider = new 
StaticContentUrlProvider(request);
         this.renderableFtlFormElementsBuilder = 
renderableFtlFormElementsBuilder != null
                 ? renderableFtlFormElementsBuilder
-                : new RenderableFtlFormElementsBuilder(this.visualTheme, rh, 
request, response);
+                : new RenderableFtlFormElementsBuilder(this.visualTheme, rh, 
request, response, staticContentUrlProvider);
     }
 
     private static String encodeDoubleQuotes(String htmlString) {
@@ -1579,158 +1581,10 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
     }
 
     @Override
-    public void renderDateFindField(Appendable writer, Map<String, Object> 
context, DateFindField dateFindField) throws IOException {
-        ModelFormField modelFormField = dateFindField.getModelFormField();
-        Locale locale = (Locale) context.get("locale");
-        String opEquals = UtilProperties.getMessage("conditionalUiLabels", 
"equals", locale);
-        String opGreaterThan = 
UtilProperties.getMessage("conditionalUiLabels", "greater_than", locale);
-        String opSameDay = UtilProperties.getMessage("conditionalUiLabels", 
"same_day", locale);
-        String opGreaterThanFromDayStart = 
UtilProperties.getMessage("conditionalUiLabels", "greater_than_from_day_start", 
locale);
-        String opLessThan = UtilProperties.getMessage("conditionalUiLabels", 
"less_than", locale);
-        String opUpToDay = UtilProperties.getMessage("conditionalUiLabels", 
"up_to_day", locale);
-        String opUpThruDay = UtilProperties.getMessage("conditionalUiLabels", 
"up_thru_day", locale);
-        String opIsEmpty = UtilProperties.getMessage("conditionalUiLabels", 
"is_empty", locale);
-        String conditionGroup = modelFormField.getConditionGroup();
-        Map<String, String> uiLabelMap = 
UtilGenerics.cast(context.get("uiLabelMap"));
-        if (uiLabelMap == null) {
-            Debug.logWarning("Could not find uiLabelMap in context", MODULE);
-        }
-        String localizedInputTitle = "";
-        String localizedIconTitle = "";
-        String className = "";
-        String alert = "false";
-        if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
-            className = modelFormField.getWidgetStyle();
-            if (modelFormField.shouldBeRed(context)) {
-                alert = "true";
-            }
-        }
-        String name = modelFormField.getParameterName(context);
-        // the default values for a timestamp
-        int size = 25;
-        int maxlength = 30;
-        if (dateFindField.isDateType()) {
-            maxlength = 10;
-            size = maxlength;
-            if (uiLabelMap != null) {
-                localizedInputTitle = uiLabelMap.get("CommonFormatDate");
-            }
-        } else if (dateFindField.isTimeType()) {
-            maxlength = 8;
-            size = maxlength;
-            if (uiLabelMap != null) {
-                localizedInputTitle = uiLabelMap.get("CommonFormatTime");
-            }
-        } else {
-            if (uiLabelMap != null) {
-                localizedInputTitle = uiLabelMap.get("CommonFormatDateTime");
-            }
-        }
-        String value = modelFormField.getEntry(context, 
dateFindField.getDefaultValue(context));
-        if (value == null) {
-            value = "";
-        }
-        // search for a localized label for the icon
-        if (uiLabelMap != null) {
-            localizedIconTitle = uiLabelMap.get("CommonViewCalendar");
-        }
-        String formName = "";
-        String defaultDateTimeString = "";
-        StringBuilder imgSrc = new StringBuilder();
-        // add calendar pop-up button and seed data IF this is not a "time" 
type date-find
-        if (!dateFindField.isTimeType()) {
-            ModelForm modelForm = modelFormField.getModelForm();
-            formName = FormRenderer.getCurrentFormName(modelForm, context);
-            defaultDateTimeString = 
UtilHttp.encodeBlanks(modelFormField.getEntry(context, 
dateFindField.getDefaultDateTimeString(context)));
-            this.appendContentUrl(imgSrc, "/images/cal.gif");
-        }
-        String defaultOptionFrom = dateFindField.getDefaultOptionFrom(context);
-        String defaultOptionThru = dateFindField.getDefaultOptionThru(context);
-        String value2 = modelFormField.getEntry(context);
-        if (value2 == null) {
-            value2 = "";
-        }
-        if (context.containsKey("parameters")) {
-            Map<String, Object> parameters = 
UtilGenerics.cast(context.get("parameters"));
-            if (parameters.containsKey(name + "_fld0_value")) {
-                value = (String) parameters.get(name + "_fld0_value");
-            }
-            if (parameters.containsKey(name + "_fld1_value")) {
-                value2 = (String) parameters.get(name + "_fld1_value");
-            }
-        }
+    public void renderDateFindField(Appendable writer, Map<String, Object> 
context, DateFindField dateFindField) {
+        writeFtlElement(writer, 
renderableFtlFormElementsBuilder.dateFind(context, dateFindField));
 
-        String titleStyle = "";
-        if (UtilValidate.isNotEmpty(modelFormField.getTitleStyle())) {
-            titleStyle = modelFormField.getTitleStyle();
-        }
-        String id = modelFormField.getCurrentContainerId(context);
-        String tabindex = modelFormField.getTabindex();
-        boolean disabled = modelFormField.getDisabled(context);
-        StringWriter sr = new StringWriter();
-        sr.append("<@renderDateFindField ");
-        sr.append(" className=\"");
-        sr.append(className);
-        sr.append("\" alert=\"");
-        sr.append(alert);
-        sr.append("\" id=\"");
-        sr.append(id);
-        sr.append("\" name=\"");
-        sr.append(name);
-        sr.append("\" localizedInputTitle=\"");
-        sr.append(localizedInputTitle);
-        sr.append("\" value=\"");
-        sr.append(value);
-        sr.append("\" value2=\"");
-        sr.append(value2);
-        sr.append("\" size=\"");
-        sr.append(Integer.toString(size));
-        sr.append("\" maxlength=\"");
-        sr.append(Integer.toString(maxlength));
-        sr.append("\" isDateType=");
-        sr.append(Boolean.toString(dateFindField.isDateType()));
-        sr.append(" isTimeType=");
-        sr.append(Boolean.toString(dateFindField.isTimeType()));
-        sr.append(" formName=\"");
-        sr.append(formName);
-        sr.append("\" defaultDateTimeString=\"");
-        sr.append(defaultDateTimeString);
-        sr.append("\" imgSrc=\"");
-        sr.append(imgSrc.toString());
-        sr.append("\" conditionGroup=\"");
-        sr.append(conditionGroup);
-        sr.append("\" localizedIconTitle=\"");
-        sr.append(localizedIconTitle);
-        sr.append("\" titleStyle=\"");
-        sr.append(titleStyle);
-        sr.append("\" defaultOptionFrom=\"");
-        sr.append(defaultOptionFrom);
-        sr.append("\" defaultOptionThru=\"");
-        sr.append(defaultOptionThru);
-        sr.append("\" opEquals=\"");
-        sr.append(opEquals);
-        sr.append("\" opSameDay=\"");
-        sr.append(opSameDay);
-        sr.append("\" opGreaterThanFromDayStart=\"");
-        sr.append(opGreaterThanFromDayStart);
-        sr.append("\" opGreaterThan=\"");
-        sr.append(opGreaterThan);
-        sr.append("\" opGreaterThan=\"");
-        sr.append(opGreaterThan);
-        sr.append("\" opLessThan=\"");
-        sr.append(opLessThan);
-        sr.append("\" opUpToDay=\"");
-        sr.append(opUpToDay);
-        sr.append("\" opUpThruDay=\"");
-        sr.append(opUpThruDay);
-        sr.append("\" opIsEmpty=\"");
-        sr.append(opIsEmpty);
-        sr.append("\" tabindex=\"");
-        sr.append(tabindex);
-        sr.append("\" disabled=");
-        sr.append(Boolean.toString(disabled));
-        sr.append(" />");
-        executeMacro(writer, locale, sr.toString());
+        final ModelFormField modelFormField = 
dateFindField.getModelFormField();
         this.appendTooltip(writer, context, modelFormField);
     }
 
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
index db0725f96e..ee72f7eeb6 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
@@ -28,6 +28,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -41,10 +42,12 @@ import org.apache.ofbiz.base.util.UtilFormatOut;
 import org.apache.ofbiz.base.util.UtilGenerics;
 import org.apache.ofbiz.base.util.UtilHttp;
 import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.UtilProperties;
 import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.base.util.string.FlexibleStringExpander;
 import org.apache.ofbiz.webapp.control.RequestHandler;
 import org.apache.ofbiz.widget.WidgetWorker;
+import org.apache.ofbiz.widget.content.StaticContentUrlProvider;
 import org.apache.ofbiz.widget.model.ModelForm;
 import org.apache.ofbiz.widget.model.ModelFormField;
 import org.apache.ofbiz.widget.model.ModelFormField.ContainerField;
@@ -73,12 +76,16 @@ public final class RenderableFtlFormElementsBuilder {
     private final HttpServletRequest request;
     private final HttpServletResponse response;
 
+    private final StaticContentUrlProvider staticContentUrlProvider;
+
     public RenderableFtlFormElementsBuilder(final VisualTheme visualTheme, 
final RequestHandler requestHandler,
-                                            final HttpServletRequest request, 
final HttpServletResponse response) {
+                                            final HttpServletRequest request, 
final HttpServletResponse response,
+                                            final StaticContentUrlProvider 
staticContentUrlProvider) {
         this.visualTheme = visualTheme;
         this.requestHandler = requestHandler;
         this.request = request;
         this.response = response;
+        this.staticContentUrlProvider = staticContentUrlProvider;
     }
 
     public RenderableFtl tooltip(final Map<String, Object> context, final 
ModelFormField modelFormField) {
@@ -543,6 +550,100 @@ public final class RenderableFtlFormElementsBuilder {
         return macroCallBuilder.build();
     }
 
+    public RenderableFtl dateFind(final Map<String, Object> context, final 
ModelFormField.DateFindField dateFindField) {
+        final ModelFormField modelFormField = 
dateFindField.getModelFormField();
+        final ModelForm modelForm = modelFormField.getModelForm();
+        final String name = modelFormField.getParameterName(context);
+
+        final Locale locale = (Locale) context.get("locale");
+
+        final Map<String, String> uiLabelMap = 
UtilGenerics.cast(context.get("uiLabelMap"));
+        if (uiLabelMap == null) {
+            Debug.logWarning("Could not find uiLabelMap in context", MODULE);
+        }
+
+        final Function<String, String> getOpLabel = (label) -> 
UtilProperties.getMessage("conditionalUiLabels",
+                label, locale);
+
+        final RenderableFtlMacroCallBuilder macroCallBuilder = 
RenderableFtlMacroCall.builder()
+                .name("renderDateFindField")
+                .stringParameter("name", name)
+                .stringParameter("id", 
modelFormField.getCurrentContainerId(context))
+                .stringParameter("formName", 
FormRenderer.getCurrentFormName(modelForm, context))
+                .booleanParameter("disabled", 
modelFormField.getDisabled(context))
+                .booleanParameter("isDateType", dateFindField.isDateType())
+                .booleanParameter("isTimeType", dateFindField.isTimeType())
+                .stringParameter("opEquals", getOpLabel.apply("equals"))
+                .stringParameter("opSameDay", getOpLabel.apply("same_day"))
+                .stringParameter("opGreaterThanFromDayStart", 
getOpLabel.apply("greater_than_from_day_start"))
+                .stringParameter("opGreaterThan", 
getOpLabel.apply("greater_than"))
+                .stringParameter("opLessThan", getOpLabel.apply("less_than"))
+                .stringParameter("opUpToDay", getOpLabel.apply("up_to_day"))
+                .stringParameter("opUpThruDay", 
getOpLabel.apply("up_thru_day"))
+                .stringParameter("opIsEmpty", getOpLabel.apply("is_empty"))
+                .stringParameter("tabindex", modelFormField.getTabindex())
+                .stringParameter("conditionGroup", 
modelFormField.getConditionGroup())
+                .stringParameter("defaultOptionFrom", 
dateFindField.getDefaultOptionFrom(context))
+                .stringParameter("defaultOptionThru", 
dateFindField.getDefaultOptionThru(context));
+
+        macroCallBuilder.booleanParameter("alert", false);
+        if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
+            macroCallBuilder.stringParameter("className", 
modelFormField.getWidgetStyle());
+            if (modelFormField.shouldBeRed(context)) {
+                macroCallBuilder.booleanParameter("alert", true);
+            }
+        }
+
+        // Set render properties based on the date-finds field's type.
+        final String localizedInputTitleLabelMapKey;
+        if (dateFindField.isDateType()) {
+            macroCallBuilder.intParameter("size", 10)
+                    .intParameter("maxlength", 20);
+
+            localizedInputTitleLabelMapKey = "CommonFormatDate";
+        } else if (dateFindField.isTimeType()) {
+            macroCallBuilder.intParameter("size", 8)
+                    .intParameter("maxlength", 8);
+
+            localizedInputTitleLabelMapKey = "CommonFormatTime";
+        } else {
+            macroCallBuilder.intParameter("size", 25)
+                    .intParameter("maxlength", 30);
+
+            localizedInputTitleLabelMapKey = "CommonFormatDateTime";
+        }
+
+        if (uiLabelMap != null) {
+            // search for a localized label for the icon
+            macroCallBuilder.stringParameter("localizedInputTitle", 
uiLabelMap.get(localizedInputTitleLabelMapKey));
+        }
+
+        // add calendar pop-up button IF this is not a "time" type date-find
+        if (!dateFindField.isTimeType()) {
+            macroCallBuilder.stringParameter("imgSrc", 
pathAsContentUrl("/images/cal.gif"));
+        }
+
+        macroCallBuilder.stringParameter("value",
+                modelFormField.getEntry(context, 
dateFindField.getDefaultValue(context)))
+                .stringParameter("value2", modelFormField.getEntry(context));
+
+        if (context.containsKey("parameters")) {
+            final Map<String, Object> parameters = 
UtilGenerics.cast(context.get("parameters"));
+            if (parameters.containsKey(name + "_fld0_value")) {
+                macroCallBuilder.stringParameter("value", (String) 
parameters.get(name + "_fld0_value"));
+            }
+            if (parameters.containsKey(name + "_fld1_value")) {
+                macroCallBuilder.stringParameter("value2", (String) 
parameters.get(name + "_fld1_value"));
+            }
+        }
+
+        if (UtilValidate.isNotEmpty(modelFormField.getTitleStyle())) {
+            macroCallBuilder.stringParameter("titleStyle", 
modelFormField.getTitleStyle());
+        }
+
+        return macroCallBuilder.build();
+    }
+
     public RenderableFtl makeHyperlinkString(final ModelFormField.SubHyperlink 
subHyperlink,
                                              final Map<String, Object> 
context) {
         if (subHyperlink == null || !subHyperlink.shouldUse(context)) {
@@ -896,4 +997,8 @@ public final class RenderableFtlFormElementsBuilder {
         targetParams = targetParams.replace("&amp;", "&");
         return targetParams;
     }
+
+    private String pathAsContentUrl(final String path) {
+        return staticContentUrlProvider.pathAsContentUrlString(path);
+    }
 }
diff --git 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
index 0c508c2cea..ccef82b42b 100644
--- 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
+++ 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
@@ -591,29 +591,6 @@ public class MacroFormRendererTest {
                 "value2", "BBB"));
     }
 
-    @Test
-    public void dateFindFieldMacroRendered(@Mocked ModelFormField 
modelFormField,
-                                           @Mocked 
ModelFormField.DateFindField dateFindField) throws IOException {
-        new Expectations() {
-            {
-                dateFindField.getModelFormField();
-                result = modelFormField;
-
-                modelFormField.getEntry(withNotNull(), withNull());
-                result = "2020-01-01";
-
-                modelFormField.getParameterName(withNotNull());
-                result = "FIELDNAME";
-            }
-        };
-
-        ImmutableMap<String, Object> context = ImmutableMap.of();
-        macroFormRenderer.renderDateFindField(appendable, context, 
dateFindField);
-        assertAndGetMacroString("renderDateFindField", ImmutableMap.of(
-                "name", "FIELDNAME",
-                "value", "2020-01-01"));
-    }
-
     @Test
     public void lookupFieldMacroRendered(@Mocked ModelFormField modelFormField,
                                          @Mocked ModelFormField.LookupField 
lookupField) throws IOException {
diff --git 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderDatetimeTest.java
 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderDatetimeTest.java
index df577a1e5f..f0a6457c98 100644
--- 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderDatetimeTest.java
+++ 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderDatetimeTest.java
@@ -5,6 +5,7 @@ import mockit.Injectable;
 import mockit.Mocked;
 import mockit.Tested;
 import org.apache.ofbiz.webapp.control.RequestHandler;
+import org.apache.ofbiz.widget.content.StaticContentUrlProvider;
 import org.apache.ofbiz.widget.model.ModelFormField;
 import org.apache.ofbiz.widget.model.ModelTheme;
 import org.apache.ofbiz.widget.renderer.VisualTheme;
@@ -32,6 +33,9 @@ public class RenderableFtlFormElementsBuilderDatetimeTest {
     @Injectable
     private HttpServletResponse response;
 
+    @Injectable
+    private StaticContentUrlProvider staticContentUrlProvider;
+
     @Mocked
     private HttpSession httpSession;
 
diff --git 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
index 03f05ccd85..80debaed87 100644
--- 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
+++ 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
@@ -26,6 +26,7 @@ import mockit.Mocked;
 import mockit.Tested;
 import org.apache.ofbiz.webapp.control.ConfigXMLReader;
 import org.apache.ofbiz.webapp.control.RequestHandler;
+import org.apache.ofbiz.widget.content.StaticContentUrlProvider;
 import org.apache.ofbiz.widget.model.ModelForm;
 import org.apache.ofbiz.widget.model.ModelFormField;
 import org.apache.ofbiz.widget.model.ModelScreenWidget;
@@ -60,6 +61,9 @@ public class RenderableFtlFormElementsBuilderTest {
     @Injectable
     private HttpServletResponse response;
 
+    @Injectable
+    private StaticContentUrlProvider staticContentUrlProvider;
+
     @Mocked
     private HttpSession httpSession;
 
diff --git a/themes/common-theme/template/macro/CsvFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/CsvFormMacroLibrary.ftl
index de1943e253..742737de62 100644
--- a/themes/common-theme/template/macro/CsvFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/CsvFormMacroLibrary.ftl
@@ -100,7 +100,7 @@ under the License.
 
 <#macro renderTextFindField name value defaultOption opEquals opBeginsWith 
opContains opIsEmpty opNotEqual className alert size maxlength autocomplete 
titleStyle hideIgnoreCase ignCase ignoreCase conditionGroup 
tabindex><@renderField value /></#macro>
 
-<#macro renderDateFindField className alert id name localizedInputTitle value 
value2 size maxlength dateType formName defaultDateTimeString imgSrc 
localizedIconTitle titleStyle defaultOptionFrom defaultOptionThru opEquals 
opSameDay opGreaterThanFromDayStart opGreaterThan opGreaterThan opLessThan 
opUpToDay opUpThruDay opIsEmpty conditionGroup tabindex><@renderField value 
/></#macro>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false><@renderField value /></#macro>
 
 <#macro renderRangeFindField className alert name value size maxlength 
autocomplete titleStyle defaultOptionFrom opEquals opGreaterThan 
opGreaterThanEquals opLessThan opLessThanEquals value2 defaultOptionThru 
conditionGroup tabindex>
 <@renderField value />
diff --git a/themes/common-theme/template/macro/FoFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/FoFormMacroLibrary.ftl
index 1120231b91..064474c739 100644
--- a/themes/common-theme/template/macro/FoFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/FoFormMacroLibrary.ftl
@@ -124,7 +124,7 @@ under the License.
 
 <#macro renderTextFindField name value defaultOption opEquals opBeginsWith 
opContains opIsEmpty opNotEqual className alert size maxlength autocomplete 
titleStyle hideIgnoreCase ignCase ignoreCase conditionGroup 
tabindex><@makeBlock className value/></#macro>
 
-<#macro renderDateFindField className alert id name localizedInputTitle value 
value2 size maxlength dateType formName defaultDateTimeString imgSrc 
localizedIconTitle titleStyle defaultOptionFrom defaultOptionThru opEquals 
opSameDay opGreaterThanFromDayStart opGreaterThan opGreaterThan opLessThan 
opUpToDay opUpThruDay opIsEmpty conditionGroup tabindex>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false>
 <@makeBlock className value />
 </#macro>
 <#macro renderRangeFindField className alert name value size maxlength 
autocomplete titleStyle defaultOptionFrom opEquals opGreaterThan 
opGreaterThanEquals opLessThan opLessThanEquals value2 defaultOptionThru 
conditionGroup tabindex>
diff --git a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
index 5589324b6e..fba47ab0e5 100644
--- a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
@@ -442,7 +442,7 @@ under the License.
   </#if>
 </#macro>
 
-<#macro renderDateFindField className alert id name formName value 
defaultDateTimeString imgSrc localizedIconTitle defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty isTimeType=false 
isDateType=false conditionGroup="" localizedInputTitle="" value2="" size="" 
maxlength="" titleStyle="" tabindex="" disabled=false>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false>
   <#if conditionGroup?has_content>
     <input type="hidden" name="${name}_grp" value="${conditionGroup}" 
<@renderDisabled disabled />/>
   </#if>
@@ -455,7 +455,7 @@ under the License.
   <#local timePicker = 
"/common/js/node_modules/@chinchilla-software/jquery-ui-timepicker-addon/dist/jquery-ui-timepicker-addon.min.js,/common/js/node_modules/@chinchilla-software/jquery-ui-timepicker-addon/dist/jquery-ui-timepicker-addon.css"/>
   <#local timePickerLang = 
Static["org.apache.ofbiz.common.JsLanguageFilesMappingUtil"].getFile("dateTime",
 .locale)/>
   <span class="view-calendar">
-    <input id="${id}_fld0_value" type="text" <@renderClass className alert /> 
<@renderDisabled disabled />
+    <input id="${id}_fld0_value" type="text" <@renderClass className alert?c 
/> <@renderDisabled disabled />
         <#if name?has_content> name="${name?html}_fld0_value"</#if>
         <#if localizedInputTitle?has_content> 
title="${localizedInputTitle}"</#if>
         <#if value?has_content> value="${value}"</#if>
@@ -481,7 +481,7 @@ under the License.
       </span><#rt/>
     </#if>
     <#rt/>
-    <input id="${id}_fld1_value" type="text" <@renderClass className alert /> 
<@renderDisabled disabled />
+    <input id="${id}_fld1_value" type="text" <@renderClass className alert?c 
/> <@renderDisabled disabled />
         <#if name?has_content> name="${name}_fld1_value"</#if>
         <#if localizedInputTitle??> title="${localizedInputTitle?html}"</#if>
         <#if value2?has_content> value="${value2}"</#if>
diff --git a/themes/common-theme/template/macro/TextFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/TextFormMacroLibrary.ftl
index 647a7d441c..8dbe7073a0 100644
--- a/themes/common-theme/template/macro/TextFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/TextFormMacroLibrary.ftl
@@ -100,7 +100,7 @@ under the License.
 
 <#macro renderTextFindField name value defaultOption opEquals opBeginsWith 
opContains opIsEmpty opNotEqual className alert size maxlength autocomplete 
titleStyle hideIgnoreCase ignCase ignoreCase conditionGroup 
tabindex><@renderField value /></#macro>
 
-<#macro renderDateFindField className alert id name localizedInputTitle value 
value2 size maxlength dateType formName defaultDateTimeString imgSrc 
localizedIconTitle titleStyle defaultOptionFrom defaultOptionThru opEquals 
opSameDay opGreaterThanFromDayStart opGreaterThan opGreaterThan opLessThan 
opUpToDay opUpThruDay opIsEmpty conditionGroup tabindex><@renderField value 
/></#macro>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false><@renderField value /></#macro>
 
 <#macro renderRangeFindField className alert name value size maxlength 
autocomplete titleStyle defaultOptionFrom opEquals opGreaterThan 
opGreaterThanEquals opLessThan opLessThanEquals value2 defaultOptionThru 
conditionGroup tabindex>
 <@renderField value />
diff --git a/themes/common-theme/template/macro/XlsFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/XlsFormMacroLibrary.ftl
index df5b199859..04ef9942e9 100644
--- a/themes/common-theme/template/macro/XlsFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/XlsFormMacroLibrary.ftl
@@ -115,7 +115,7 @@ under the License.
 
 <#macro renderTextFindField name value defaultOption opEquals opBeginsWith 
opContains opIsEmpty opNotEqual className alert size maxlength autocomplete 
titleStyle hideIgnoreCase ignCase ignoreCase conditionGroup tabindex></#macro>
 
-<#macro renderDateFindField className alert id name localizedInputTitle value 
value2 size maxlength dateType formName defaultDateTimeString imgSrc 
localizedIconTitle titleStyle defaultOptionFrom defaultOptionThru opEquals 
opSameDay opGreaterThanFromDayStart opGreaterThan opGreaterThan opLessThan 
opUpToDay opUpThruDay opIsEmpty conditionGroup tabindex></#macro>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false></#macro>
 
 <#macro renderRangeFindField className alert name value size maxlength 
autocomplete titleStyle defaultOptionFrom opEquals opGreaterThan 
opGreaterThanEquals opLessThan opLessThanEquals value2 defaultOptionThru 
conditionGroup tabindex></#macro>
 
diff --git a/themes/common-theme/template/macro/XmlFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/XmlFormMacroLibrary.ftl
index 6f6eff5714..0b166cfd1b 100644
--- a/themes/common-theme/template/macro/XmlFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/XmlFormMacroLibrary.ftl
@@ -93,7 +93,7 @@ under the License.
 
 <#macro renderTextFindField name value defaultOption opEquals opBeginsWith 
opContains opIsEmpty opNotEqual className alert size maxlength autocomplete 
titleStyle hideIgnoreCase ignCase ignoreCase tabindex><@renderField 
value/></#macro>
 
-<#macro renderDateFindField className alert id name localizedInputTitle value 
value2 size maxlength dateType formName defaultDateTimeString imgSrc 
localizedIconTitle titleStyle defaultOptionFrom defaultOptionThru opEquals 
opSameDay opGreaterThanFromDayStart opGreaterThan opGreaterThan opLessThan 
opUpToDay opUpThruDay opIsEmpty conditionGroup tabindex></#macro>
+<#macro renderDateFindField id name formName defaultOptionFrom 
defaultOptionThru opEquals opSameDay opGreaterThanFromDayStart opGreaterThan 
opGreaterThan opLessThan opUpToDay opUpThruDay opIsEmpty className="" 
alert=false imgSrc="" value="" isTimeType=false isDateType=false 
conditionGroup="" localizedInputTitle="" value2="" size="" maxlength="" 
titleStyle="" tabindex="" disabled=false></#macro>
 
 <#macro renderRangeFindField className alert name value size maxlength 
autocomplete titleStyle defaultOptionFrom opEquals opGreaterThan 
opGreaterThanEquals opLessThan opLessThanEquals value2 defaultOptionThru 
conditionGroup tabindex>
 </#macro>


Reply via email to