summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/form/DateTextBox.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/form/DateTextBox.js')
-rw-r--r--js/dojo/dojox/form/DateTextBox.js196
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