X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775..c8256059947f3aa8f5b0a9a2acf55e2142bb4742:/docs/source/DateField.html diff --git a/docs/source/DateField.html b/docs/source/DateField.html index c3482a4c..7a11fccf 100644 --- a/docs/source/DateField.html +++ b/docs/source/DateField.html @@ -1,13 +1,14 @@
+/*! - * Ext JS Library 3.0.3 - * Copyright(c) 2006-2009 Ext JS, LLC + * Ext JS Library 3.2.1 + * Copyright(c) 2006-2010 Ext JS, Inc. * licensing@extjs.com * http://www.extjs.com/license */ @@ -124,6 +125,25 @@ disabledDates: ["^03"] // private defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"}, + // in the absence of a time value, a default value of 12 noon will be used + // (note: 12 noon was chosen because it steers well clear of all DST timezone changes) + initTime: '12', // 24 hour format + + initTimeFormat: 'H', + + // PUBLIC -- to be documented + safeParse : function(value, format) { + if (/[gGhH]/.test(format.replace(/(\\.)/g, ''))) { + // if parse format contains hour information, no DST adjustment is necessary + return Date.parseDate(value, format); + } else { + // set time to 12 noon, then clear the time + var parsedDate = Date.parseDate(value + ' ' + this.initTime, format + ' ' + this.initTimeFormat); + + if (parsedDate) return parsedDate.clearTime(); + } + }, + initComponent : function(){ Ext.form.DateField.superclass.initComponent.call(this); @@ -147,13 +167,25 @@ disabledDates: ["^03"] this.initDisabledDays(); }, + initEvents: function() { + Ext.form.DateField.superclass.initEvents.call(this); + this.keyNav = new Ext.KeyNav(this.el, { + "down": function(e) { + this.onTriggerClick(); + }, + scope: this, + forceKeyDown: true + }); + }, + + // private initDisabledDays : function(){ if(this.disabledDates){ var dd = this.disabledDates, - len = dd.length - 1, + len = dd.length - 1, re = "(?:"; - + Ext.each(dd, function(d, i){ re += Ext.isDate(d) ? '^' + Ext.escapeRe(d.dateFormat(this.format)) + '$' : dd[i]; if(i != len){ @@ -210,46 +242,58 @@ disabledDates: ["^03"] this.menu.picker.setMaxDate(this.maxValue); } }, - - // private - validateValue : function(value){ - value = this.formatDate(value); - if(!Ext.form.DateField.superclass.validateValue.call(this, value)){ - return false; - } - if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid - return true; + + /** + * Runs all of NumberFields validations and returns an array of any errors. Note that this first + * runs TextField's validations, so the returned array is an amalgamation of all field errors. + * The additional validation checks are testing that the date format is valid, that the chosen + * date is within the min and max date constraints set, that the date chosen is not in the disabledDates + * regex and that the day chosed is not one of the disabledDays. + * @param {Mixed} value The value to get errors for (defaults to the current field value) + * @return {Array} All validation errors for this field + */ + getErrors: function(value) { + var errors = Ext.form.DateField.superclass.getErrors.apply(this, arguments); + + value = this.formatDate(value || this.processValue(this.getRawValue())); + + if (value.length < 1) { // if it's blank and textfield didn't flag it then it's valid + return errors; } + var svalue = value; value = this.parseDate(value); - if(!value){ - this.markInvalid(String.format(this.invalidText, svalue, this.format)); - return false; + if (!value) { + errors.push(String.format(this.invalidText, svalue, this.format)); + return errors; } + var time = value.getTime(); - if(this.minValue && time < this.minValue.getTime()){ - this.markInvalid(String.format(this.minText, this.formatDate(this.minValue))); - return false; + if (this.minValue && time < this.minValue.getTime()) { + errors.push(String.format(this.minText, this.formatDate(this.minValue))); } - if(this.maxValue && time > this.maxValue.getTime()){ - this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue))); - return false; + + if (this.maxValue && time > this.maxValue.getTime()) { + errors.push(String.format(this.maxText, this.formatDate(this.maxValue))); } - if(this.disabledDays){ + + if (this.disabledDays) { var day = value.getDay(); + for(var i = 0; i < this.disabledDays.length; i++) { - if(day === this.disabledDays[i]){ - this.markInvalid(this.disabledDaysText); - return false; + if (day === this.disabledDays[i]) { + errors.push(this.disabledDaysText); + break; } } } + var fvalue = this.formatDate(value); - if(this.disabledDatesRE && this.disabledDatesRE.test(fvalue)){ - this.markInvalid(String.format(this.disabledDatesText, fvalue)); - return false; + if (this.disabledDatesRE && this.disabledDatesRE.test(fvalue)) { + errors.push(String.format(this.disabledDatesText, fvalue)); } - return true; + + return errors; }, // private @@ -293,17 +337,20 @@ dateField.setValue('2006-05-04'); }, // private - parseDate : function(value){ + parseDate : function(value) { if(!value || Ext.isDate(value)){ return value; } - var v = Date.parseDate(value, this.format); - if(!v && this.altFormats){ - if(!this.altFormatsArray){ - this.altFormatsArray = this.altFormats.split("|"); - } - for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){ - v = Date.parseDate(value, this.altFormatsArray[i]); + + var v = this.safeParse(value, this.format), + af = this.altFormats, + afa = this.altFormatsArray; + + if (!v && af) { + afa = afa || af.split("|"); + + for (var i = 0, len = afa.length; i < len && !v; i++) { + v = this.safeParse(value, afa[i]); } } return v; @@ -311,7 +358,7 @@ dateField.setValue('2006-05-04'); // private onDestroy : function(){ - Ext.destroy(this.menu); + Ext.destroy(this.menu, this.keyNav); Ext.form.DateField.superclass.onDestroy.call(this); }, @@ -332,7 +379,8 @@ dateField.setValue('2006-05-04'); } if(this.menu == null){ this.menu = new Ext.menu.DateMenu({ - hideOnClick: false + hideOnClick: false, + focusOnSelect: false }); } this.onFocus(); @@ -352,20 +400,20 @@ dateField.setValue('2006-05-04'); this.menu.show(this.el, "tl-bl?"); this.menuEvents('on'); }, - + //private menuEvents: function(method){ this.menu[method]('select', this.onSelect, this); this.menu[method]('hide', this.onMenuHide, this); this.menu[method]('show', this.onFocus, this); }, - + onSelect: function(m, d){ this.setValue(d); this.fireEvent('select', this, d); this.menu.hide(); }, - + onMenuHide: function(){ this.focus(false, 60); this.menuEvents('un'); @@ -393,6 +441,6 @@ dateField.setValue('2006-05-04'); * @method autoSize */ }); -Ext.reg('datefield', Ext.form.DateField);+Ext.reg('datefield', Ext.form.DateField); \ No newline at end of file