This is an automated email from the ASF dual-hosted git repository.
jamesyong 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 bc5b0d5 Improved: Load language js for date.js only when required
(OFBIZ-12064)
bc5b0d5 is described below
commit bc5b0d595cab9103e9ec0c03234cec81c80f47c3
Author: James Yong <[email protected]>
AuthorDate: Fri Nov 27 21:51:35 2020 +0800
Improved: Load language js for date.js only when required (OFBIZ-12064)
Tested on
1) date time field at /ordermgr/control/orderentry and
2) date find field at /ordermgr/control/findreturn
---
.../ofbiz/common/JsLanguageFilesMappingUtil.java | 44 +++++++
.../ftl/JsLanguageFilesMappingTransform.java | 20 +--
.../template/macro/HtmlFormMacroLibrary.ftl | 5 +
.../webapp/common/js/util/OfbizUtil.js | 139 +++++++++++----------
themes/common-theme/widget/CommonScreens.xml | 2 -
5 files changed, 122 insertions(+), 88 deletions(-)
diff --git
a/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFilesMappingUtil.java
b/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFilesMappingUtil.java
new file mode 100644
index 0000000..aa0699a
--- /dev/null
+++
b/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFilesMappingUtil.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.common;
+
+/**
+ * Allow access to language files mapping from freemarker template
+ */
+public final class JsLanguageFilesMappingUtil {
+
+ private JsLanguageFilesMappingUtil() { }
+
+ public static String getFile(String libraryName, String localeString) {
+ switch (libraryName) {
+ case "datejs":
+ return JsLanguageFilesMapping.DateJs.getFilePath(localeString);
+ case "dateTime":
+ return JsLanguageFilesMapping.DateTime.getFilePath(localeString);
+ case "jquery":
+ return JsLanguageFilesMapping.JQuery.getFilePath(localeString);
+ case "select2":
+ return JsLanguageFilesMapping.Select2.getFilePath(localeString);
+ case "validation":
+ return JsLanguageFilesMapping.Validation.getFilePath(localeString);
+ default:
+ return "";
+ }
+ }
+}
diff --git
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/JsLanguageFilesMappingTransform.java
b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/JsLanguageFilesMappingTransform.java
index 05198b6..53243e4 100644
---
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/JsLanguageFilesMappingTransform.java
+++
b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/JsLanguageFilesMappingTransform.java
@@ -31,6 +31,7 @@ import org.apache.ofbiz.common.JsLanguageFilesMapping;
import freemarker.core.Environment;
import freemarker.ext.beans.BeanModel;
import freemarker.template.TemplateTransformModel;
+import org.apache.ofbiz.common.JsLanguageFilesMappingUtil;
/**
* access JsLanguageFilesMapping from ftl using macro
@@ -52,24 +53,7 @@ public class JsLanguageFilesMappingTransform implements
TemplateTransformModel {
if (!libraryName.isEmpty()) {
HttpServletRequest request = (HttpServletRequest)
req.getWrappedObject();
String localeString =
UtilHttp.getLocale(request).toString();
- switch (libraryName) {
- case "datejs":
-
out.write(JsLanguageFilesMapping.DateJs.getFilePath(localeString));
- break;
- case "dateTime":
-
out.write(JsLanguageFilesMapping.DateTime.getFilePath(localeString));
- break;
- case "jquery":
-
out.write(JsLanguageFilesMapping.JQuery.getFilePath(localeString));
- break;
- case "select2":
-
out.write(JsLanguageFilesMapping.Select2.getFilePath(localeString));
- break;
- case "validation":
-
out.write(JsLanguageFilesMapping.Validation.getFilePath(localeString));
- break;
- default:
- }
+
out.write(JsLanguageFilesMappingUtil.getFile(libraryName, localeString));
}
} catch (Exception e) {
Debug.logWarning(e, "Exception thrown while running " +
MODULE, MODULE);
diff --git a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
index b174450..bec17c0 100644
--- a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
@@ -92,6 +92,7 @@ under the License.
<#macro renderDateTimeField name className alert dateType
timeDropdownParamName defaultDateTimeString localizedIconTitle timeHourName
timeMinutesName minutes isTwelveHour ampmName amSelected pmSelected
compositeType timeDropdown="" classString="" hour1="" hour2=""
shortDateInput="" title="" value="" size="" maxlength="" id="" formName=""
mask="" event="" action="" step="" timeValues="" tabindex="" disabled="">
<span class="view-calendar">
+ <#local cultureInfo =
Static["org.apache.ofbiz.common.JsLanguageFilesMappingUtil"].getFile("datejs",
locale)/>
<#if dateType!="time" >
<input type="text" <#if tabindex?has_content>
tabindex="${tabindex}"</#if> name="${name}_i18n" <@renderClass className alert
/><#rt/>
<#if title?has_content> title="${title}"</#if>
@@ -108,6 +109,7 @@ under the License.
<#if size?has_content> size="${size}"</#if><#rt/>
<#if maxlength?has_content> maxlength="${maxlength}"</#if>
<#if mask?has_content> data-mask="${mask}"</#if><#rt/>
+ <#if cultureInfo?has_content>
data-cultureinfo="${cultureInfo}"</#if><#rt/>
data-shortdate="${shortDateInput?string}"
<#if id?has_content> id="${id}"</#if>/><#rt/>
<#if timeDropdown?has_content && timeDropdown=="time-dropdown">
@@ -407,6 +409,7 @@ under the License.
<#local className = className + " date-time-picker"/>
</#if>
<#local shortDateInput = "date" == dateType/>
+ <#local cultureInfo =
Static["org.apache.ofbiz.common.JsLanguageFilesMappingUtil"].getFile("datejs",
locale)/>
<span class="view-calendar">
<input id="${id}_fld0_value" type="text" <@renderClass className alert />
<#if name?has_content> name="${name?html}_fld0_value"</#if>
@@ -415,6 +418,7 @@ under the License.
<#if size?has_content> size="${size}"</#if>
<#if maxlength?has_content> maxlength="${maxlength}"</#if>
<#if tabindex?has_content> tabindex="${tabindex}"</#if><#rt/>
+ <#if cultureInfo?has_content>
data-cultureinfo="${cultureInfo}"</#if><#rt/>
data-shortdate="${shortDateInput?string}"
/>
<#if titleStyle?has_content>
@@ -436,6 +440,7 @@ under the License.
<#if value2?has_content> value="${value2}"</#if>
<#if size?has_content> size="${size}"</#if>
<#if maxlength?has_content> maxlength="${maxlength}"</#if>
+ <#if cultureInfo?has_content>
data-cultureinfo="${cultureInfo}"</#if><#rt/>
data-shortdate="${shortDateInput?string}"
/><#rt/>
<#if titleStyle?has_content>
diff --git a/themes/common-theme/webapp/common/js/util/OfbizUtil.js
b/themes/common-theme/webapp/common/js/util/OfbizUtil.js
index c96ddb7..73c31f3 100644
--- a/themes/common-theme/webapp/common/js/util/OfbizUtil.js
+++ b/themes/common-theme/webapp/common/js/util/OfbizUtil.js
@@ -315,77 +315,80 @@ function bindObservers(bind_element) {
var id = element.attr("id");
var element_i18n = jQuery("#" + id + "_i18n");
var shortDate = element.data("shortdate");
- //If language specific lib is found, use date / time converter else
just copy the value fields
- if (Date.CultureInfo != undefined) {
- var initDate = element.val();
- if (initDate != "") {
- var dateFormat;
- var ofbizTime;
- if (shortDate) {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate;
- ofbizTime = "yyyy-MM-dd";
- } else {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate + "
" + Date.CultureInfo.formatPatterns.longTime;
- ofbizTime = "yyyy-MM-dd HH:mm:ss"
- }
- // The JS date parser doesn't understand the dot before ms in
the date/time string. The ms here should be always 000
- if (initDate.indexOf('.') != -1) {
- initDate = initDate.substring(0, initDate.indexOf('.'));
+ var libCultureInfo = [element.data("cultureinfo")];
+ importLibrary(libCultureInfo, function () {
+ //If language specific lib is found, use date / time converter
else just copy the value fields
+ if (Date.CultureInfo != undefined) {
+ var initDate = element.val();
+ if (initDate != "") {
+ var dateFormat;
+ var ofbizTime;
+ if (shortDate) {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate;
+ ofbizTime = "yyyy-MM-dd";
+ } else {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate
+ " " + Date.CultureInfo.formatPatterns.longTime;
+ ofbizTime = "yyyy-MM-dd HH:mm:ss"
+ }
+ // The JS date parser doesn't understand the dot before ms
in the date/time string. The ms here should be always 000
+ if (initDate.indexOf('.') != -1) {
+ initDate = initDate.substring(0,
initDate.indexOf('.'));
+ }
+ element.val(initDate);
+ var dateObj = Date.parseExact(initDate, ofbizTime);
+ var formatedObj = dateObj.toString(dateFormat);
+ element_i18n.val(formatedObj);
}
- element.val(initDate);
- var dateObj = Date.parseExact(initDate, ofbizTime);
- var formatedObj = dateObj.toString(dateFormat);
- element_i18n.val(formatedObj);
- }
- element.change(function() {
- var value = element.val();
- var dateFormat;
- var ofbizTime;
- if (shortDate) {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate;
- ofbizTime = "yyyy-MM-dd";
- } else {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate + "
" + Date.CultureInfo.formatPatterns.longTime;
- ofbizTime = "yyyy-MM-dd HH:mm:ss"
- }
- var newValue = ""
- if (value != "") {
- var dateObj = Date.parseExact(value, ofbizTime);
- newValue = dateObj.toString(dateFormat);
- }
- element_i18n.val(newValue);
- });
+ element.change(function () {
+ var value = element.val();
+ var dateFormat;
+ var ofbizTime;
+ if (shortDate) {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate;
+ ofbizTime = "yyyy-MM-dd";
+ } else {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate
+ " " + Date.CultureInfo.formatPatterns.longTime;
+ ofbizTime = "yyyy-MM-dd HH:mm:ss"
+ }
+ var newValue = ""
+ if (value != "") {
+ var dateObj = Date.parseExact(value, ofbizTime);
+ newValue = dateObj.toString(dateFormat);
+ }
+ element_i18n.val(newValue);
+ });
- element_i18n.change(function() {
- var value = element_i18n.val();
- var dateFormat;
- var ofbizTime;
- if (shortDate) {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate;
- ofbizTime = "yyyy-MM-dd";
- } else {
- dateFormat = Date.CultureInfo.formatPatterns.shortDate + "
" + Date.CultureInfo.formatPatterns.longTime;
- ofbizTime = "yyyy-MM-dd HH:mm:ss"
- }
- var newValue = "";
- var dateObj = Date.parseExact(this.value, dateFormat);
- if (value != "" && dateObj !== null) {
- newValue = dateObj.toString(ofbizTime);
- } else { // invalid input
- element_i18n.val("");
- }
- element.val(newValue);
- });
- } else {
- //fallback if no language specific js date file is found
- element.change(function() {
- element_i18n.val(this.value);
- });
- element_i18n.change(function() {
- element.val(this.value);
- });
- }
+ element_i18n.change(function () {
+ var value = element_i18n.val();
+ var dateFormat;
+ var ofbizTime;
+ if (shortDate) {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate;
+ ofbizTime = "yyyy-MM-dd";
+ } else {
+ dateFormat = Date.CultureInfo.formatPatterns.shortDate
+ " " + Date.CultureInfo.formatPatterns.longTime;
+ ofbizTime = "yyyy-MM-dd HH:mm:ss"
+ }
+ var newValue = "";
+ var dateObj = Date.parseExact(this.value, dateFormat);
+ if (value != "" && dateObj !== null) {
+ newValue = dateObj.toString(ofbizTime);
+ } else { // invalid input
+ element_i18n.val("");
+ }
+ element.val(newValue);
+ });
+ } else {
+ //fallback if no language specific js date file is found
+ element.change(function () {
+ element_i18n.val(this.value);
+ });
+ element_i18n.change(function () {
+ element.val(this.value);
+ });
+ }
+ });
if (shortDate) {
element.datepicker({
showWeek: true,
diff --git a/themes/common-theme/widget/CommonScreens.xml
b/themes/common-theme/widget/CommonScreens.xml
index 5a51420..381e5eb 100644
--- a/themes/common-theme/widget/CommonScreens.xml
+++ b/themes/common-theme/widget/CommonScreens.xml
@@ -122,7 +122,6 @@ under the License.
<screen name="GlobalActions">
<section>
<actions>
- <set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.DateJs.getFilePath(initialLocaleComplete)}"
global="true" />
<set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.JQuery.getFilePath(initialLocaleComplete)}"
global="true" />
<set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.Validation.getFilePath(initialLocaleComplete)}"
global="true" />
<set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.DateTime.getFilePath(initialLocaleComplete)}"
global="true" />
@@ -431,7 +430,6 @@ under the License.
<!-- The default (global) java scripts -->
<!-- jQuery part -->
<!-- Load available JS Language Files -->
- <set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.DateJs.getFilePath(initialLocaleComplete)}"
global="true"/>
<set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.JQuery.getFilePath(initialLocaleComplete)}"
global="true"/>
<set field="layoutSettings.javaScripts[+0]" value="${groovy:
org.apache.ofbiz.common.JsLanguageFilesMapping.Validation.getFilePath(initialLocaleComplete)}"
global="true"/>