inputEx Documentation Back to homepage

### inputEx Documentation > BirthdateField.js 0.2.2

This is the source view for BirthdateField.js

(function() { var inputEx = YAHOO.inputEx, lang = YAHOO.lang; /** * @class A field to enter a date with 2 strings and a select * @extends inputEx.CombineField */ inputEx.BirthdateField = function(options) { if(!options.dateFormat) {options.dateFormat = inputEx.messages.defaultDateFormat; } var formatSplit = options.dateFormat.split("/"); this.yearIndex = inputEx.indexOf('Y',formatSplit); this.monthIndex = inputEx.indexOf('m',formatSplit); this.dayIndex = inputEx.indexOf('d',formatSplit); options.fields = []; for(var i = 0 ; i < 3 ; i++) { if(i == this.dayIndex) { options.fields.push({type: 'string', inputParams: { typeInvite: inputEx.messages.dayTypeInvite, size: 2} }); } else if(i == this.yearIndex) { options.fields.push({type: 'string', inputParams: { typeInvite: inputEx.messages.yearTypeInvite, size: 4} }); } else { options.fields.push({type: 'select', inputParams: {selectOptions: ([inputEx.messages.selectMonth]).concat(inputEx.messages.months), selectValues: [-1,0,1,2,3,4,5,6,7,8,9,10,11], value: -1} }); } } options.separators = options.separators || [false," "," ",false]; inputEx.BirthdateField.superclass.constructor.call(this,options); }; lang.extend(inputEx.BirthdateField, inputEx.CombineField, { setValue: function(value, sendUpdatedEvt) { var values = []; // !value catches "" (empty field), other tests invalid dates (Invalid Date, or NaN) if(!value || !(value instanceof Date) || !lang.isNumber(value.getTime()) ) { values[this.monthIndex] = -1; values[this.yearIndex] = ""; values[this.dayIndex] = ""; } else { for(var i = 0 ; i < 3 ; i++) { values.push( i == this.dayIndex ? value.getDate() : (i==this.yearIndex ? value.getFullYear() : value.getMonth() ) ); } } inputEx.BirthdateField.superclass.setValue.call(this, values, sendUpdatedEvt); }, getValue: function() { if (this.isEmpty()) return ""; var values = inputEx.BirthdateField.superclass.getValue.call(this); // if selected month index is -1, new Date(..) would create a valid date with month == December !!!) if (values[this.monthIndex] == -1) { return new Date(NaN,NaN,NaN); // -> Invalid Date (Firefox) or NaN (IE) (both instanceof Date ...) } return new Date(parseInt(values[this.yearIndex],10), values[this.monthIndex], parseInt(values[this.dayIndex],10) ); }, validate: function() { var val = this.getValue(); // empty field if (val === '') { // validate only if not required return !this.options.required; } // val is : // -> a Date, when valid // -> an Invalid Date (== "Invalid Date"), when invalid on FF // -> NaN, when invalid on IE // // These 3 cases would pass the "val instanceof Date" test, // but last 2 cases return NaN on val.getDate(), so "isFinite" test fails. return (val instanceof Date && lang.isNumber(val.getTime())); }, isEmpty: function() { var values = inputEx.BirthdateField.superclass.getValue.call(this); return (values[this.monthIndex] == -1 && values[this.yearIndex] == "" && values[this.dayIndex] == ""); } }); inputEx.messages.selectMonth = "- Select Month -"; inputEx.messages.dayTypeInvite = "Day"; inputEx.messages.yearTypeInvite = "Year"; /** * Register this class as "birthdate" type */ inputEx.registerType("birthdate", inputEx.BirthdateField); })();

Copyright (c) 2007-2009 Eric Abouaf. All rights reserved.
Generated by JsDoc Toolkit 2.0.0 on Wed, 04 Mar 2009 15:41:29 GMT using neyricjslibs-template.