/*
Copyright (c) 2004-2011, 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);
}
}
);
}