You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2020/11/27 13:53:13 UTC
[ofbiz-framework] branch trunk updated: Improved: Load language js
for date.js only when required (OFBIZ-12064)
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 <ja...@apache.org>
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"/>