/* Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ if(!dojo._hasResource["dojox.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojox.form.DateTextBox"] = true; dojo.provide("dojox.form.DateTextBox"); dojo.experimental("dojox.form.DateTextBox"); dojo.require("dojox.widget.Calendar"); dojo.require("dojox.widget.CalendarViews"); dojo.require("dijit.form._DateTimeTextBox"); dojo.declare( "dojox.form.DateTextBox", dijit.form._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); dojo.style(this.dropDown.domNode.parentNode, "position", "absolute"); } } ); dojo.declare( "dojox.form.DayTextBox", dojox.form.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(); } } dijit.form.TextBox.prototype._setValueAttr.call(this, value, priorityChange, formattedValue); }, openDropDown: function(){ this.inherited(arguments); this.dropDown.onValueSelected = dojo.hitch(this, function(value){ this.focus(); // focus the textbox before the popup closes to avoid reopening the popup setTimeout(dojo.hitch(this, "closeDropDown"), 1); // allow focus time to take dijit.form.TextBox.prototype._setValueAttr.call(this, String(value.getDate()), true, String(value.getDate())); }); } } ); dojo.declare( "dojox.form.MonthTextBox", dojox.form.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(); } } dijit.form.TextBox.prototype._setValueAttr.call(this, value, priorityChange, formattedValue); }, openDropDown: function(){ this.inherited(arguments); this.dropDown.onValueSelected = dojo.hitch(this, function(value){ this.focus(); // focus the textbox before the popup closes to avoid reopening the popup setTimeout(dojo.hitch(this, "closeDropDown"), 1); // allow focus time to take dijit.form.TextBox.prototype._setValueAttr.call(this, value, true, value); }); } } ); dojo.declare( "dojox.form.YearTextBox", dojox.form.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(); } } dijit.form.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 = dojo.hitch(this, function(value){ this.focus(); // focus the textbox before the popup closes to avoid reopening the popup setTimeout(dojo.hitch(this, "closeDropDown"), 1); // allow focus time to take dijit.form.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); } } ); }