X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/docs/source/DateTimeField.html diff --git a/docs/source/DateTimeField.html b/docs/source/DateTimeField.html new file mode 100644 index 00000000..e9be87a6 --- /dev/null +++ b/docs/source/DateTimeField.html @@ -0,0 +1,385 @@ + + + The source code + + + + +
Ext.namespace('Ext.ux.form');
+
+
/** + * Ext.ux.form.DateTime Extension Class for Ext 2.x Library + * + * @author Ing. Jozef Sakalos + * @copyright (c) 2008, Ing. Jozef Sakalos + * @version $Id: Ext.ux.form.DateTime.js 645 2008-01-27 21:53:01Z jozo $ + * + * @class Ext.ux.form.DateTime + * @extends Ext.form.Field + * + * @history + * 2008-1-31 Jack Slocum + * Updated for reformatting and code edits + */ +Ext.ux.form.DateTime = Ext.extend(Ext.form.Field, { + defaultAutoCreate: { + tag: 'input', + type: 'hidden' + }, + dateWidth: 135, + timeWidth: 100, + dtSeparator: ' ', + hiddenFormat: 'Y-m-d H:i:s', + otherToNow: true, + timePosition: 'right', + + initComponent: function(){ + // call parent initComponent + Ext.ux.form.DateTime.superclass.initComponent.call(this); + + // create DateField + var dateConfig = Ext.apply({}, { + id: this.id + '-date', + format: this.dateFormat, + width: this.dateWidth, + listeners: { + blur: { + scope: this, + fn: this.onBlur + }, + focus: { + scope: this, + fn: this.onFocus + } + } + }, this.dateConfig); + this.df = new Ext.form.DateField(dateConfig); + delete (this.dateFormat); + + // create TimeField + var timeConfig = Ext.apply({}, { + id: this.id + '-time', + format: this.timeFormat, + width: this.timeWidth, + listeners: { + blur: { + scope: this, + fn: this.onBlur + }, + focus: { + scope: this, + fn: this.onFocus + } + } + }, this.timeConfig); + this.tf = new Ext.form.TimeField(timeConfig); + delete (this.timeFormat); + + // relay events + this.relayEvents(this.df, ['focus', 'specialkey', 'invalid', 'valid']); + this.relayEvents(this.tf, ['focus', 'specialkey', 'invalid', 'valid']); + + }, + onRender: function(ct, position){ + if (this.isRendered) { + return; + } + + // render underlying field + Ext.ux.form.DateTime.superclass.onRender.call(this, ct, position); + + // render DateField and TimeField + // create bounding table + if ('below' === this.timePosition) { + var t = Ext.DomHelper.append(ct, { + tag: 'table', + style: 'border-collapse:collapse', + children: [{ + tag: 'tr', + children: [{ + tag: 'td', + style: 'padding-bottom:1px', + cls: 'ux-datetime-date' + }] + }, { + tag: 'tr', + children: [{ + tag: 'td', + cls: 'ux-datetime-time' + }] + }] + }, true); + } + else { + var t = Ext.DomHelper.append(ct, { + tag: 'table', + style: 'border-collapse:collapse', + children: [{ + tag: 'tr', + children: [{ + tag: 'td', + style: 'padding-right:4px', + cls: 'ux-datetime-date' + }, { + tag: 'td', + cls: 'ux-datetime-time' + }] + }] + }, true); + } + + this.tableEl = t; + this.wrap = t.wrap({ + cls: 'x-form-field-wrap' + }); + this.wrap.on("mousedown", this.onMouseDown, this, { + delay: 10 + }); + + // render DateField & TimeField + this.df.render(t.child('td.ux-datetime-date')); + this.tf.render(t.child('td.ux-datetime-time')); + + if (Ext.isIE && Ext.isStrict) { + t.select('input').applyStyles({ + top: 0 + }); + } + + this.on('specialkey', this.onSpecialKey, this); + + this.df.el.swallowEvent(['keydown', 'keypress']); + this.tf.el.swallowEvent(['keydown', 'keypress']); + + // create errorIcon for side invalid + if ('side' === this.msgTarget) { + var elp = this.el.findParent('.x-form-element', 10, true); + this.errorIcon = elp.createChild({ + cls: 'x-form-invalid-icon' + }); + + this.df.errorIcon = this.errorIcon; + this.tf.errorIcon = this.errorIcon; + } + + this.isRendered = true; + + }, + getPositionEl: function(){ + return this.wrap; + }, + getResizeEl: function(){ + return this.wrap; + }, + + adjustSize: Ext.BoxComponent.prototype.adjustSize, + + alignErrorIcon: function(){ + this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]); + }, + + onSpecialKey: function(t, e){ + if (e.getKey() == e.TAB) { + if (t === this.df && !e.shiftKey) { + e.stopEvent(); + this.tf.focus(); + } + if (t === this.tf && e.shiftKey) { + e.stopEvent(); + this.df.focus(); + } + } + }, + + setSize: function(w, h){ + if (!w) { + return; + } + if ('below' == this.timePosition) { + this.df.setSize(w, h); + this.tf.setSize(w, h) + if (Ext.isIE) { + this.df.el.up('td').setWidth(w); + this.tf.el.up('td').setWidth(w); + } + } + else { + this.df.setSize(w - this.timeWidth - 4, h); + this.tf.setSize(this.timeWidth, h); + + if (Ext.isIE) { + this.df.el.up('td').setWidth(w - this.timeWidth - 4); + this.tf.el.up('td').setWidth(this.timeWidth); + } + } + + }, + + setValue: function(val){ + if (!val) { + this.setDate(''); + this.setTime(''); + this.updateValue(); + return; + } + // clear cross frame AIR nonsense + val = new Date(val.getTime()); + var da, time; + if (Ext.isDate(val)) { + this.setDate(val); + this.setTime(val); + this.dateValue = new Date(val); + } + else { + da = val.split(this.dtSeparator); + this.setDate(da[0]); + if (da[1]) { + this.setTime(da[1]); + } + } + this.updateValue(); + }, + + getValue: function(){ + // create new instance of date + return this.dateValue ? new Date(this.dateValue) : ''; + }, + + onMouseDown: function(e){ + // just to prevent blur event when clicked in the middle of fields + this.wrapClick = 'td' === e.target.nodeName.toLowerCase(); + }, + + onFocus: function(){ + if (!this.hasFocus) { + this.hasFocus = true; + this.startValue = this.getValue(); + this.fireEvent("focus", this); + } + }, + + onBlur: function(f){ + // called by both DateField and TimeField blur events + + // revert focus to previous field if clicked in between + if (this.wrapClick) { + f.focus(); + this.wrapClick = false; + } + + // update underlying value + if (f === this.df) { + this.updateDate(); + } + else { + this.updateTime(); + } + this.updateHidden(); + + // fire events later + (function(){ + if (!this.df.hasFocus && !this.tf.hasFocus) { + var v = this.getValue(); + if (String(v) !== String(this.startValue)) { + this.fireEvent("change", this, v, this.startValue); + } + this.hasFocus = false; + this.fireEvent('blur', this); + } + }).defer(100, this); + + }, + updateDate: function(){ + + var d = this.df.getValue(); + if (d) { + if (!Ext.isDate(this.dateValue)) { + this.initDateValue(); + if (!this.tf.getValue()) { + this.setTime(this.dateValue); + } + } + this.dateValue.setFullYear(d.getFullYear()); + this.dateValue.setMonth(d.getMonth()); + this.dateValue.setDate(d.getDate()); + } + else { + this.dateValue = ''; + this.setTime(''); + } + }, + updateTime: function(){ + var t = this.tf.getValue(); + if (t && !Ext.isDate(t)) { + t = Date.parseDate(t, this.tf.format); + } + if (t && !this.df.getValue()) { + this.initDateValue(); + this.setDate(this.dateValue); + } + if (Ext.isDate(this.dateValue)) { + if (t) { + this.dateValue.setHours(t.getHours()); + this.dateValue.setMinutes(t.getMinutes()); + this.dateValue.setSeconds(t.getSeconds()); + } + else { + this.dateValue.setHours(0); + this.dateValue.setMinutes(0); + this.dateValue.setSeconds(0); + } + } + }, + initDateValue: function(){ + this.dateValue = this.otherToNow ? new Date() : new Date(1970, 0, 1, 0, 0, 0); + }, + updateHidden: function(){ + if (this.isRendered) { + var value = Ext.isDate(this.dateValue) ? this.dateValue.format(this.hiddenFormat) : ''; + this.el.dom.value = value; + } + }, + updateValue: function(){ + + this.updateDate(); + this.updateTime(); + this.updateHidden(); + + return; + + }, + setDate: function(date){ + this.df.setValue(date); + }, + setTime: function(date){ + this.tf.setValue(date); + }, + isValid: function(){ + return this.df.isValid() && this.tf.isValid(); + }, + validate: function(){ + return this.df.validate() && this.tf.validate(); + }, + focus: function(){ + this.df.focus(); + }, + + onDisable : function(){ + if(this.rendered){ + this.df.disable(); + this.tf.disable(); + } + }, + + onEnable : function(){ + if(this.rendered){ + this.df.enable(); + this.tf.enable(); + } + } +}); + +// register xtype +Ext.reg('xdatetime', Ext.ux.form.DateTime);
+ + \ No newline at end of file