Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dijit.form.ValidationTextBox"] = true;dojo.provide("dijit.form.ValidationTextBox");dojo.require("dojo.i18n");dojo.require("dijit.form.TextBox");dojo.require("dijit.Tooltip");dojo.requireLocalization("dijit.form", "validate", null, "ko,zh-cn,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{// summary:// A subclass of TextBox.// Over-ride isValid in subclasses to perform specific kinds of validation.templateString:"<table style=\"display: -moz-inline-stack;\" class=\"dijit dijitReset dijitInlineTable\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress' autocomplete=\"off\"\n\t\t\ttype='${type}' name='${name}'\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div><div class='dijitValidationIconText'>Χ</div\n\t\t></td\n\t></tr\n></table>\n",baseClass: "dijitTextBox",// default values for new subclass properties// required: Boolean// Can be true or false, default is false.required: false,// promptMessage: String// Hint stringpromptMessage: "",// invalidMessage: String// The message to display if value is invalid.invalidMessage: "$_unset_$", // read from the message file if not overridden// constraints: Object// user-defined object needed to pass parameters to the validator functionsconstraints: {},// regExp: String// regular expression string used to validate the input// Do not specify both regExp and regExpGenregExp: ".*",// regExpGen: Function// user replaceable function used to generate regExp when dependent on constraints// Do not specify both regExp and regExpGenregExpGen: function(constraints){ return this.regExp; },// state: String// Shows current state (ie, validation result) of input (Normal, Warning, or Error)state: "",setValue: function(){this.inherited('setValue', arguments);this.validate(false);},validator: function(value,constraints){// summary: user replaceable function used to validate the text input against the regular expression.return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&(!this.required || !this._isEmpty(value)) &&(this._isEmpty(value) || this.parse(value, constraints) !== null);},isValid: function(/* Boolean*/ isFocused){// summary: Need to over-ride with your own validation code in subclassesreturn this.validator(this.textbox.value, this.constraints);},_isEmpty: function(value){// summary: Checks for whitespacereturn /^\s*$/.test(value); // Boolean},getErrorMessage: function(/* Boolean*/ isFocused){// summary: return an error message to show if appropriatereturn this.invalidMessage;},getPromptMessage: function(/* Boolean*/ isFocused){// summary: return a hint to show if appropriatereturn this.promptMessage;},validate: function(/* Boolean*/ isFocused){// summary:// Called by oninit, onblur, and onkeypress.// description:// Show missing or invalid messages if appropriate, and highlight textbox field.var message = "";var isValid = this.isValid(isFocused);var isEmpty = this._isEmpty(this.textbox.value);this.state = (isValid || (!this._hasBeenBlurred && isEmpty)) ? "" : "Error";this._setStateClass();dijit.setWaiState(this.focusNode, "invalid", (isValid? "false" : "true"));if(isFocused){if(isEmpty){message = this.getPromptMessage(true);}if(!message && !isValid){message = this.getErrorMessage(true);}}this._displayMessage(message);},// currently displayed message_message: "",_displayMessage: function(/*String*/ message){if(this._message == message){ return; }this._message = message;this.displayMessage(message);},displayMessage: function(/*String*/ message){// summary:// User overridable method to display validation errors/hints.// By default uses a tooltip.if(message){dijit.showTooltip(message, this.domNode);}else{dijit.hideTooltip(this.domNode);}},_hasBeenBlurred: false,_onBlur: function(evt){this._hasBeenBlurred = true;this.validate(false);this.inherited('_onBlur', arguments);},onfocus: function(evt){// TODO: change to _onFocus?this.validate(true);this._onMouse(evt); // update CSS classes},onkeyup: function(evt){this.onfocus(evt);},//////////// INITIALIZATION METHODS ///////////////////////////////////////constructor: function(){this.constraints = {};},postMixInProperties: function(){this.inherited('postMixInProperties', arguments);this.constraints.locale=this.lang;this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }var p = this.regExpGen(this.constraints);this.regExp = p;// make value a string for all types so that form reset works well}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{// summary:// A subclass of ValidationTextBox.// Provides a hidden input field and a serialize method to overrideserialize: function(val, /*Object?*/options){// summary: user replaceable function used to convert the getValue() result to a Stringreturn (val.toString ? val.toString() : "");},toString: function(){// summary: display the widget as a printable string using the widget's valuevar val = this.filter(this.getValue());return (val!=null) ? ((typeof val == "string") ? val : this.serialize(val, this.constraints)) : "";},validate: function(){this.valueNode.value = this.toString();this.inherited('validate', arguments);},postCreate: function(){var textbox = this.textbox;var valueNode = (this.valueNode = document.createElement("input"));valueNode.setAttribute("type", textbox.type);valueNode.setAttribute("value", this.toString());dojo.style(valueNode, "display", "none");valueNode.name = this.textbox.name;this.textbox.name = "_" + this.textbox.name + "_displayed_";this.textbox.removeAttribute("name");dojo.place(valueNode, textbox, "after");this.inherited('postCreate', arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{// summary:// A subclass of MappedTextBox.// Tests for a value out-of-range/*===== contraints object:// min: Number// Minimum signed value. Default is -Infinitymin: undefined,// max: Number// Maximum signed value. Default is +Infinitymax: undefined,=====*/// rangeMessage: String// The message to display if value is out-of-rangerangeMessage: "",compare: function(val1, val2){// summary: compare 2 valuesreturn val1 - val2;},rangeCheck: function(/* Number */ primitive, /* Object */ constraints){// summary: user replaceable function used to validate the range of the numeric input valuevar isMin = (typeof constraints.min != "undefined");var isMax = (typeof constraints.max != "undefined");if(isMin || isMax){return (!isMin || this.compare(primitive,constraints.min) >= 0) &&(!isMax || this.compare(primitive,constraints.max) <= 0);}else{ return true; }},isInRange: function(/* Boolean*/ isFocused){// summary: Need to over-ride with your own validation code in subclassesreturn this.rangeCheck(this.getValue(), this.constraints);},isValid: function(/* Boolean*/ isFocused){return this.inherited('isValid', arguments) &&((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused));},getErrorMessage: function(/* Boolean*/ isFocused){if(dijit.form.RangeBoundTextBox.superclass.isValid.call(this, false) && !this.isInRange(isFocused)){ return this.rangeMessage; }else{ return this.inherited('getErrorMessage', arguments); }},postMixInProperties: function(){this.inherited('postMixInProperties', arguments);if(!this.rangeMessage){this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);this.rangeMessage = this.messages.rangeMessage;}},postCreate: function(){this.inherited('postCreate', arguments);if(typeof this.constraints.min != "undefined"){dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);}if(typeof this.constraints.max != "undefined"){dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);}}});}