diff --git a/changelog.md b/changelog.md index 53f1e34b0..446cc57fe 100644 --- a/changelog.md +++ b/changelog.md @@ -1,7 +1,8 @@ # 更新日志 2.0(2019-05) -- 日期/时间/日期区间/时间区间支持自定义日期选择范围 -- 日期/时间/日期区间/时间区间支持自定义日期显示格式 +- 时分秒控件支持自定义时间显示格式和是否可编辑 +- 日期/时间/日期区间/时间区间支持自定义日期选择范围和是否可编辑 +- 日期/时间/日期区间/时间区间支持自定义日期显示格式和是否可编辑 - 增加less函数: 字体资源添加函数addFontRe和字体激活函数activeFont > @fontList: "dec", "report"; diff --git a/demo/js/config/widget.js b/demo/js/config/widget.js index 32139ce0b..0b6ddc771 100644 --- a/demo/js/config/widget.js +++ b/demo/js/config/widget.js @@ -170,6 +170,10 @@ Demo.WIDGET_CONFIG = [{ pId: 412, text: "bi.date_time", value: "demo.date_time" +}, { + pId: 412, + text: "bi.time_combo", + value: "demo.time_combo" }, { pId: 412, text: "bi.time_interval", diff --git a/demo/js/widget/date/demo.multidate_combo.js b/demo/js/widget/date/demo.multidate_combo.js index 604a4a4ae..61b20892c 100644 --- a/demo/js/widget/date/demo.multidate_combo.js +++ b/demo/js/widget/date/demo.multidate_combo.js @@ -21,6 +21,7 @@ Demo.Date = BI.inherit(BI.Widget, { self.datecombo = this; }, width: 300, + // allowEdit: false, // format: "%Y-%X-%d", // yyyy-MM-dd // format: "%Y/%X/%d", // yyyy/MM/dd // format: "%Y-%x-%e", // yyyy-M-d @@ -51,6 +52,7 @@ Demo.Date = BI.inherit(BI.Widget, { self.datetimecombo = this; }, width: 300, + // allowEdit: false, // format: "%Y-%X-%d %H:%M:%S", // yyyy-MM-dd HH:mm:ss // format: "%Y/%X/%d %H:%M:%S", // yyyy/MM/dd HH:mm:ss // format: "%Y-%X-%d %I:%M:%S", // yyyy-MM-dd hh:mm:ss diff --git a/demo/js/widget/timecombo/demo.timecombo.js b/demo/js/widget/timecombo/demo.timecombo.js new file mode 100644 index 000000000..4808c6c33 --- /dev/null +++ b/demo/js/widget/timecombo/demo.timecombo.js @@ -0,0 +1,48 @@ +/** + * Created by Dailer on 2017/7/13. + */ +Demo.TimeCombo = BI.inherit(BI.Widget, { + props: { + baseCls: "" + }, + + render: function () { + var self = this; + return { + type: "bi.horizontal_auto", + items: [{ + type: "bi.time_combo", + ref: function (_ref) { + self.timeCombo = _ref; + }, + // allowEdit: true, + // format: "%H:%M:%S", // HH:mm:ss + // format: "%I:%M:%S", // hh:mm:ss + // format: "%l:%M:%S", // h:mm:ss + // format: "%k:%M:%S", // H:mm:ss + // format: "%l:%M:%S %p", // h:mm:ss a + // format: "%l:%M", // h:mm + // format: "%k:%M", // H:mm + // format: "%I:%M", // hh:mm + // format: "%H:%M", // HH:mm + // format: "%M:%S", // mm:ss + value: { + hour: 12, + minute: 0, + second: 0 + }, + width: 300 + }, { + type: "bi.button", + text: "getValue", + handler: function () { + BI.Msg.toast(JSON.stringify(self.timeCombo.getValue())); + }, + width: 300 + }], + vgap: 20 + }; + } +}); + +BI.shortcut("demo.time_combo", Demo.TimeCombo); \ No newline at end of file diff --git a/dist/2.0/fineui.css b/dist/2.0/fineui.css index a29f9f3b8..967df169d 100644 --- a/dist/2.0/fineui.css +++ b/dist/2.0/fineui.css @@ -4442,6 +4442,10 @@ ul.ztree.zTreeDragUL { -moz-border-radius: 3px; border-radius: 3px; } +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} .bi-date-interval.time-error .bi-input { color: #ff4949; } diff --git a/dist/2.0/fineui.ie.js b/dist/2.0/fineui.ie.js index 23485cc08..718b781ba 100644 --- a/dist/2.0/fineui.ie.js +++ b/dist/2.0/fineui.ie.js @@ -80423,12 +80423,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -80471,10 +80473,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -80498,7 +80564,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -80558,42 +80624,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/2.0/fineui.js b/dist/2.0/fineui.js index cfce0a672..0995d48a8 100644 --- a/dist/2.0/fineui.js +++ b/dist/2.0/fineui.js @@ -80827,12 +80827,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -80875,10 +80877,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -80902,7 +80968,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -80962,42 +81028,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/bundle.css b/dist/bundle.css index a29f9f3b8..967df169d 100644 --- a/dist/bundle.css +++ b/dist/bundle.css @@ -4442,6 +4442,10 @@ ul.ztree.zTreeDragUL { -moz-border-radius: 3px; border-radius: 3px; } +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} .bi-date-interval.time-error .bi-input { color: #ff4949; } diff --git a/dist/bundle.ie.js b/dist/bundle.ie.js index 23485cc08..718b781ba 100644 --- a/dist/bundle.ie.js +++ b/dist/bundle.ie.js @@ -80423,12 +80423,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -80471,10 +80473,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -80498,7 +80564,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -80558,42 +80624,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/bundle.js b/dist/bundle.js index cfce0a672..0995d48a8 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -80827,12 +80827,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -80875,10 +80877,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -80902,7 +80968,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -80962,42 +81028,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/demo.js b/dist/demo.js index 1334dd664..d966b1ef4 100644 --- a/dist/demo.js +++ b/dist/demo.js @@ -3504,6 +3504,10 @@ Demo.COMPONENT_CONFIG = [{ pId: 412, text: "bi.date_time", value: "demo.date_time" +}, { + pId: 412, + text: "bi.time_combo", + value: "demo.time_combo" }, { pId: 412, text: "bi.time_interval", @@ -10087,6 +10091,53 @@ Demo.Slider = BI.inherit(BI.Widget, { BI.shortcut("demo.slider", Demo.Slider);/** * Created by Dailer on 2017/7/13. */ +Demo.TimeCombo = BI.inherit(BI.Widget, { + props: { + baseCls: "" + }, + + render: function () { + var self = this; + return { + type: "bi.horizontal_auto", + items: [{ + type: "bi.time_combo", + ref: function (_ref) { + self.timeCombo = _ref; + }, + // allowEdit: true, + // format: "%H:%M:%S", // HH:mm:ss + // format: "%I:%M:%S", // hh:mm:ss + // format: "%l:%M:%S", // h:mm:ss + // format: "%k:%M:%S", // H:mm:ss + // format: "%l:%M:%S %p", // h:mm:ss a + // format: "%l:%M", // h:mm + // format: "%k:%M", // H:mm + // format: "%I:%M", // hh:mm + // format: "%H:%M", // HH:mm + // format: "%M:%S", // mm:ss + value: { + hour: 12, + minute: 0, + second: 0 + }, + width: 300 + }, { + type: "bi.button", + text: "getValue", + handler: function () { + BI.Msg.toast(JSON.stringify(self.timeCombo.getValue())); + }, + width: 300 + }], + vgap: 20 + }; + } +}); + +BI.shortcut("demo.time_combo", Demo.TimeCombo);/** + * Created by Dailer on 2017/7/13. + */ Demo.TimeInterval = BI.inherit(BI.Widget, { props: { baseCls: "" diff --git a/dist/fineui.css b/dist/fineui.css index ee428831f..fb098b586 100644 --- a/dist/fineui.css +++ b/dist/fineui.css @@ -4442,6 +4442,10 @@ ul.ztree.zTreeDragUL { -moz-border-radius: 3px; border-radius: 3px; } +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} .bi-date-interval.time-error .bi-input { color: #ff4949; } diff --git a/dist/fineui.ie.js b/dist/fineui.ie.js index 8f1753429..b64dfbbad 100644 --- a/dist/fineui.ie.js +++ b/dist/fineui.ie.js @@ -80668,12 +80668,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -80716,10 +80718,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -80743,7 +80809,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -80803,42 +80869,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/fineui.js b/dist/fineui.js index 5fa1e5030..d0245f978 100644 --- a/dist/fineui.js +++ b/dist/fineui.js @@ -81072,12 +81072,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -81120,10 +81122,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -81147,7 +81213,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -81207,42 +81273,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/fineui_without_jquery_polyfill.js b/dist/fineui_without_jquery_polyfill.js index 22ac07707..4859725fb 100644 --- a/dist/fineui_without_jquery_polyfill.js +++ b/dist/fineui_without_jquery_polyfill.js @@ -63464,12 +63464,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -63512,10 +63514,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -63539,7 +63605,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -63599,42 +63665,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/dist/widget.css b/dist/widget.css index 502de3336..2659dc5e2 100644 --- a/dist/widget.css +++ b/dist/widget.css @@ -320,6 +320,10 @@ -moz-border-radius: 3px; border-radius: 3px; } +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} .bi-date-interval.time-error .bi-input { color: #ff4949; } diff --git a/dist/widget.js b/dist/widget.js index 4b93b3960..affd07b78 100644 --- a/dist/widget.js +++ b/dist/widget.js @@ -20430,12 +20430,14 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -20478,10 +20480,74 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -20505,7 +20571,7 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { @@ -20565,42 +20631,164 @@ BI.shortcut("bi.single_tree_trigger", BI.SingleTreeTrigger);!(function () { BI.shortcut("bi.time_combo", BI.TimeCombo); })();!(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + return BI.print(BI.getDate(storeValue.year, (storeValue.month - 1), storeValue.day), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } }); diff --git a/src/css/widget/timecombo/timecombo.css b/src/css/widget/timecombo/timecombo.css new file mode 100644 index 000000000..487b89486 --- /dev/null +++ b/src/css/widget/timecombo/timecombo.css @@ -0,0 +1,4 @@ +.bi-time-trigger .show-text { + background-color: rgba(255, 255, 255, 0); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff); +} diff --git a/src/less/widget/timecombo/timecombo.less b/src/less/widget/timecombo/timecombo.less new file mode 100644 index 000000000..e1ed24438 --- /dev/null +++ b/src/less/widget/timecombo/timecombo.less @@ -0,0 +1,8 @@ +@import "../../index"; + +.bi-time-trigger{ + & .show-text { + // ie10一下无背景色会鼠标穿透 + .background-color(@background-color-default, 0); + } +} \ No newline at end of file diff --git a/src/widget/dynamicdate/dynamicdate.combo.js b/src/widget/dynamicdate/dynamicdate.combo.js index e53ad57c5..b93cd6394 100644 --- a/src/widget/dynamicdate/dynamicdate.combo.js +++ b/src/widget/dynamicdate/dynamicdate.combo.js @@ -11,7 +11,8 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, { height: 22, minDate: "1900-01-01", maxDate: "2099-12-31", - format: "" + format: "", + allowEdit: true }, @@ -50,6 +51,7 @@ BI.DynamicDateCombo = BI.inherit(BI.Single, { min: opts.minDate, max: opts.maxDate, format: opts.format, + allowEdit: opts.allowEdit, height: opts.height, value: opts.value, ref: function () { diff --git a/src/widget/dynamicdate/dynamicdate.trigger.js b/src/widget/dynamicdate/dynamicdate.trigger.js index e2f695457..d896c4539 100644 --- a/src/widget/dynamicdate/dynamicdate.trigger.js +++ b/src/widget/dynamicdate/dynamicdate.trigger.js @@ -13,7 +13,8 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 height: 24, - format: "" // 显示的日期格式化方式 + format: "", // 显示的日期格式化方式 + allowEdit: true // 是否允许编辑 }, _init: function () { @@ -47,25 +48,7 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { } return str; }, - title: function () { - var storeValue = self.storeValue || {}; - var type = storeValue.type || BI.DynamicDateCombo.Static; - var value = storeValue.value; - switch (type) { - case BI.DynamicDateCombo.Dynamic: - var text = self._getText(value); - var date = BI.getDate(); - date = BI.DynamicDateHelper.getCalculation(value); - var dateStr = BI.print(date, self._getFormatString()); - return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr); - case BI.DynamicDateCombo.Static: - default: - if (BI.isNull(value) || BI.isNull(value.day)) { - return ""; - } - return BI.print(BI.getDate(value.year, (value.month - 1), value.day), self._getFormatString()); - } - } + title: BI.bind(this._getTitle, this) }); this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () { self.fireEvent(BI.DynamicDateTrigger.EVENT_KEY_DOWN); @@ -124,9 +107,43 @@ BI.DynamicDateTrigger = BI.inherit(BI.Trigger, { width: 24 }] }); + !o.allowEdit && BI.createWidget({ + type: "bi.absolute", + element: this, + items: [{ + el: { + type: "bi.text", + title: BI.bind(this._getTitle, this) + }, + left: 0, + right: 24, + top: 0, + bottom: 0 + }] + }); this.setValue(o.value); }, + _getTitle: function () { + var storeValue = this.storeValue || {}; + var type = storeValue.type || BI.DynamicDateCombo.Static; + var value = storeValue.value; + switch (type) { + case BI.DynamicDateCombo.Dynamic: + var text = this._getText(value); + var date = BI.getDate(); + date = BI.DynamicDateHelper.getCalculation(value); + var dateStr = BI.print(date, this._getFormatString()); + return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr); + case BI.DynamicDateCombo.Static: + default: + if (BI.isNull(value) || BI.isNull(value.day)) { + return ""; + } + return BI.print(BI.getDate(value.year, (value.month - 1), value.day), this._getFormatString()); + } + }, + _getStandardDateStr: function (v) { var c = this._const; var result = [0, 1, 2]; diff --git a/src/widget/dynamicdatetime/dynamicdatetime.combo.js b/src/widget/dynamicdatetime/dynamicdatetime.combo.js index 531e18f98..ee5e9429b 100644 --- a/src/widget/dynamicdatetime/dynamicdatetime.combo.js +++ b/src/widget/dynamicdatetime/dynamicdatetime.combo.js @@ -11,7 +11,8 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, { height: 22, minDate: "1900-01-01", maxDate: "2099-12-31", - format: "" + format: "", + allowEdit: true }, @@ -49,6 +50,7 @@ BI.DynamicDateTimeCombo = BI.inherit(BI.Single, { type: "bi.dynamic_date_time_trigger", min: opts.minDate, max: opts.maxDate, + allowEdit: opts.allowEdit, format: opts.format, height: opts.height, value: opts.value, diff --git a/src/widget/dynamicdatetime/dynamicdatetime.trigger.js b/src/widget/dynamicdatetime/dynamicdatetime.trigger.js index 228c8f0d4..d73e65296 100644 --- a/src/widget/dynamicdatetime/dynamicdatetime.trigger.js +++ b/src/widget/dynamicdatetime/dynamicdatetime.trigger.js @@ -13,7 +13,8 @@ BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, { min: "1900-01-01", // 最小日期 max: "2099-12-31", // 最大日期 height: 24, - format: "" // 显示的日期格式化方式 + format: "", // 显示的日期格式化方式 + allowEdit: true // 是否允许编辑 }, _init: function () { @@ -47,25 +48,7 @@ BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, { } return str; }, - title: function () { - var storeValue = self.storeValue || {}; - var type = storeValue.type || BI.DynamicDateCombo.Static; - var value = storeValue.value; - switch (type) { - case BI.DynamicDateCombo.Dynamic: - var text = self._getText(value); - var date = BI.DynamicDateHelper.getCalculation(value); - var dateStr = BI.print(date, self._getFormatString()); - return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr); - case BI.DynamicDateCombo.Static: - default: - if (BI.isNull(value) || BI.isNull(value.day)) { - return ""; - } - return BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0, - value.second || 0), self._getFormatString()); - } - } + title: BI.bind(this._getTitle, this) }); this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () { self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN); @@ -122,9 +105,44 @@ BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, { width: 24 }] }); + + !o.allowEdit && BI.createWidget({ + type: "bi.absolute", + element: this, + items: [{ + el: { + type: "bi.text", + title: BI.bind(this._getTitle, this) + }, + left: 0, + right: 24, + top: 0, + bottom: 0 + }] + }); this.setValue(o.value); }, + _getTitle: function () { + var storeValue = this.storeValue || {}; + var type = storeValue.type || BI.DynamicDateCombo.Static; + var value = storeValue.value; + switch (type) { + case BI.DynamicDateCombo.Dynamic: + var text = this._getText(value); + var date = BI.DynamicDateHelper.getCalculation(value); + var dateStr = BI.print(date, this._getFormatString()); + return BI.isEmptyString(text) ? dateStr : (text + ":" + dateStr); + case BI.DynamicDateCombo.Static: + default: + if (BI.isNull(value) || BI.isNull(value.day)) { + return ""; + } + return BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0, + value.second || 0), this._getFormatString()); + } + }, + _getStandardDateStr: function (v) { var result = []; var hasSecond = false; diff --git a/src/widget/time/time.combo.js b/src/widget/time/time.combo.js index 644ccbd08..2d4693504 100644 --- a/src/widget/time/time.combo.js +++ b/src/widget/time/time.combo.js @@ -15,12 +15,14 @@ props: { baseCls: "bi-time-combo bi-border bi-border-radius", width: 78, - height: 22 + height: 22, + format: "", + allowEdit: false }, render: function () { var self = this, opts = this.options; - + this.storeTriggerValue = ""; this.storeValue = opts.value; var popup = { @@ -63,10 +65,74 @@ isNeedAdjustWidth: false, el: { type: "bi.time_trigger", + allowEdit: opts.allowEdit, + format: opts.format, value: opts.value, ref: function (_ref) { self.trigger = _ref; - } + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); + } + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + if (self.combo.isViewVisible()) { + return; + } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); + } + }] }, adjustLength: this.constants.comboAdjustHeight, popup: { @@ -90,7 +156,7 @@ }, top: 0, left: 0, - right: 0, + right: 22, bottom: 0 }, { el: { diff --git a/src/widget/time/time.trigger.js b/src/widget/time/time.trigger.js index 860d2f6d7..f61dfe718 100644 --- a/src/widget/time/time.trigger.js +++ b/src/widget/time/time.trigger.js @@ -1,41 +1,164 @@ !(function () { BI.TimeTrigger = BI.inherit(BI.Trigger, { + + _const: { + COMPARE_FORMAT: "%H:%M:%S", + COMPLETE_COMPARE_FORMAT: "%Y-%M-%d %H:%M:%S", + FORMAT_ARRAY: [ + "%H:%M:%S", // HH:mm:ss + "%I:%M:%S", // hh:mm:ss + "%l:%M:%S", // h:mm:ss + "%k:%M:%S", // H:mm:ss + "%l:%M:%S %p", // h:mm:ss a + "%l:%M:%S %P", // h:mm:ss a + "%l:%M", // h:mm + "%k:%M", // H:mm + "%I:%M", // hh:mm + "%H:%M", // HH:mm + "%M:%S" // mm:ss + ], + DEFAULT_DATE_STRING: "2000-01-01" + }, + props: { extraCls: "bi-time-trigger", - height: 22, - width: 80, - value: {} + value: {}, + format: "", + allowEdit: false }, + render: function () { var self = this, o = this.options; + this.storeTriggerValue = ""; + this.storeValue = o.value; return { - type: "bi.htape", + type: "bi.absolute", items: [{ el: { - type: "bi.label", - title: function () { - return self.text.getText(); - }, - textAlign: "left", + type: "bi.sign_editor", height: o.height, - width: o.width, - text: this._formatValue(o.value), + validationChecker: function (v) { + return self._dateCheck(v); + }, + quitChecker: function () { + return false; + }, ref: function (_ref) { - self.text = _ref; - } + self.editor = _ref; + }, + value: this._formatValue(o.value), + hgap: 4, + allowBlank: true, + watermark: BI.i18nText("BI-Basic_Unrestricted"), + title: BI.bind(this._getTitle, this), + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + self.fireEvent("EVENT_KEY_DOWN"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.getKey(); + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_STOP", + action: function () { + self.fireEvent("EVENT_STOP"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_ERROR", + action: function () { + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_CONFIRM", + action: function () { + var value = self.editor.getValue(); + if (BI.isNotNull(value)) { + self.editor.setState(value); + } + if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) { + var date = value.match(/\d+/g); + self.storeValue = { + hour: date[0] | 0, + minute: date[1] | 0, + second: date[2] | 0 + }; + } + self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_START", + action: function () { + self.fireEvent("EVENT_START"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }] }, - hgap: 4 + left: 0, + right: 0, + top: 0, + bottom: 0 + }, { + el: { + type: "bi.text", + invisible: o.allowEdit, + cls: "show-text", + title: BI.bind(this._getTitle, this), + hgap: 4 + }, + left: 0, + right: 0, + top: 0, + bottom: 0 }] }; }, - setValue: function (v) { - this.text.setText(this._formatValue(v)); + _dateCheck: function (date) { + var c = this._const; + return BI.any(c.FORMAT_ARRAY, function (idx, format) { + return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + " " + date, c.COMPLETE_COMPARE_FORMAT), format) === date; + }); + }, + + _getTitle: function () { + var storeValue = this.storeValue || {}; + var date = BI.getDate(); + return BI.print(BI.getDate(date.getFullYear(), 0, 1, storeValue.hour, storeValue.minute, storeValue.second), this._getFormatString()); + }, + + _getFormatString: function () { + return this.options.format || this._const.COMPARE_FORMAT; }, _formatValue: function (v) { var now = BI.getDate(); - return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), "%H:%M:%S") : BI.i18nText("BI-Basic_Unrestricted"); + return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : BI.i18nText("BI-Basic_Unrestricted"); + }, + + getKey: function () { + return this.editor.getValue(); + }, + + setValue: function (v) { + this.storeValue = v; + this.editor.setValue(this._formatValue(v)); + }, + + getValue: function () { + return this.storeValue; } });