diff options
Diffstat (limited to 'js/dojo/dojox/form/DateTextBox.js')
| -rw-r--r-- | js/dojo/dojox/form/DateTextBox.js | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/js/dojo/dojox/form/DateTextBox.js b/js/dojo/dojox/form/DateTextBox.js new file mode 100644 index 0000000..beda716 --- /dev/null +++ b/js/dojo/dojox/form/DateTextBox.js @@ -0,0 +1,196 @@ +//>>built +define("dojox/form/DateTextBox", [ + "dojo/_base/kernel", + "dojo/_base/lang", + "dojo/dom-style", + "dojox/widget/Calendar", + "dojox/widget/CalendarViews", + "dijit/form/_DateTimeTextBox", + "dijit/form/TextBox", + "dojo/_base/declare" +], function(kernel, lang, domStyle, Calendar, CalendarViews, _DateTimeTextBox, TextBox, declare){ +kernel.experimental("dojox.form.DateTextBox"); + + /*===== + _DateTimeTextBox = dijit.form._DateTimeTextBox; + =====*/ +var DateTextBox = declare( "dojox.form.DateTextBox", _DateTimeTextBox, + { + // summary: + // A validating, serializable, range-bound date text box with a popup calendar + + // popupClass: String + // The popup widget to use. In this case, a calendar with Day, Month and Year views. + popupClass: "dojox.widget.Calendar", + _selector: "date", + + openDropDown: function(){ + this.inherited(arguments); + domStyle.set(this.dropDown.domNode.parentNode, "position", "absolute"); + } + } +); + + +declare( "dojox.form.DayTextBox", DateTextBox, + { + // summary: + // A validating, serializable, range-bound date text box with a popup calendar that contains just months. + + // popupClass: String + // The popup widget to use. In this case, a calendar with just a Month view. + popupClass: "dojox.widget.DailyCalendar", + + parse: function(displayVal){ + return displayVal; + }, + + format: function(value){ + return value.getDate ? value.getDate() : value; + }, + validator: function(value){ + var num = Number(value); + var isInt = /(^-?\d\d*$)/.test(String(value)); + return value == "" || value == null || (isInt && num >= 1 && num <= 31); + }, + + _setValueAttr: function(value, priorityChange, formattedValue){ + if(value){ + if(value.getDate){ + value = value.getDate(); + } + } + TextBox.prototype._setValueAttr.call(this, value, priorityChange, formattedValue); + }, + + openDropDown: function(){ + this.inherited(arguments); + + this.dropDown.onValueSelected = lang.hitch(this, function(value){ + this.focus(); // focus the textbox before the popup closes to avoid reopening the popup + setTimeout(lang.hitch(this, "closeDropDown"), 1); // allow focus time to take + + TextBox.prototype._setValueAttr.call(this, String(value.getDate()), true, String(value.getDate())); + }); + } + } +); + +declare( "dojox.form.MonthTextBox", DateTextBox, + { + // summary: + // A validating, serializable, range-bound date text box with a popup calendar that contains only years + + // popupClass: String + // The popup widget to use. In this case, a calendar with just a Year view. + popupClass: "dojox.widget.MonthlyCalendar", + + selector: "date", + + postMixInProperties: function(){ + this.inherited(arguments); + this.constraints.datePattern = "MM"; + }, + + format: function(value){ + if(!value && value !== 0){ + return 1; + } + if(value.getMonth){ + return value.getMonth() + 1; + } + return Number(value) + 1; + }, + + parse: function(value, constraints){ + return Number(value) - 1; + }, + + serialize: function(value, constraints){ + return String(value); + }, + + validator: function(value){ + var num = Number(value); + var isInt = /(^-?\d\d*$)/.test(String(value)); + return value == "" || value == null || (isInt && num >= 1 && num <= 12); + }, + + _setValueAttr: function(value, priorityChange, formattedValue){ + if(value){ + if(value.getMonth){ + value = value.getMonth(); + } + } + TextBox.prototype._setValueAttr.call(this, value, priorityChange, formattedValue); + }, + + openDropDown: function(){ + this.inherited(arguments); + + this.dropDown.onValueSelected = lang.hitch(this, function(value){ + this.focus(); // focus the textbox before the popup closes to avoid reopening the popup + setTimeout(lang.hitch(this, "closeDropDown"), 1); // allow focus time to take + TextBox.prototype._setValueAttr.call(this, value, true, value); + }); + } + } +); + + +declare( "dojox.form.YearTextBox", DateTextBox, + { + // summary: + // A validating, serializable, range-bound date text box with a popup calendar that contains only years + + popupClass: "dojox.widget.YearlyCalendar", + + format: function(value){ + //console.log('Year format ' + value); + if(typeof value == "string"){ + return value; + } + else if(value.getFullYear){ + return value.getFullYear(); + } + return value; + }, + + validator: function(value){ + return value == "" || value == null || /(^-?\d\d*$)/.test(String(value)); + }, + + _setValueAttr: function(value, priorityChange, formattedValue){ + if(value){ + if(value.getFullYear){ + value = value.getFullYear(); + } + } + TextBox.prototype._setValueAttr.call(this, value, priorityChange, formattedValue); + }, + + openDropDown: function(){ + this.inherited(arguments); + //console.log('yearly openDropDown and value = ' + this.get('value')); + + this.dropDown.onValueSelected = lang.hitch(this, function(value){ + this.focus(); // focus the textbox before the popup closes to avoid reopening the popup + setTimeout(lang.hitch(this, "closeDropDown"), 1); // allow focus time to take + TextBox.prototype._setValueAttr.call(this,value, true, value); + }); + }, + + parse: function(/*String*/value, /*dojo.date.locale.__FormatOptions*/constraints){ + return value || (this._isEmpty(value) ? null : undefined); // Date + }, + + filter: function(val){ + if(val && val.getFullYear){ + return val.getFullYear().toString(); + } + return this.inherited(arguments); + } + } +); +return DateTextBox; +});
\ No newline at end of file |
