Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.TextBox"] = true;
dojo.provide("dijit.form.TextBox");

dojo.require("dijit.form._FormWidget");

dojo.declare(
        "dijit.form.TextBox",
        dijit.form._FormWidget,
        {
                // summary:
                //              A generic textbox field.
                //              Serves as a base class to derive more specialized functionality in subclasses.

                //      trim: Boolean
                //              Removes leading and trailing whitespace if true.  Default is false.
                trim: false,

                //      uppercase: Boolean
                //              Converts all characters to uppercase if true.  Default is false.
                uppercase: false,

                //      lowercase: Boolean
                //              Converts all characters to lowercase if true.  Default is false.
                lowercase: false,

                //      propercase: Boolean
                //              Converts the first character of each word to uppercase if true.
                propercase: false,

                // maxLength: String
                //              HTML INPUT tag maxLength declaration.
                maxLength: "",

                templateString:"<input class=\"dojoTextBox\" dojoAttachPoint='textbox,focusNode' name=\"${name}\"\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress'\n\tautocomplete=\"off\" type=\"${type}\"\n\t/>\n",
                baseClass: "dijitTextBox",

                attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
                        {maxLength:"focusNode"}),

                getDisplayedValue: function(){
                        return this.filter(this.textbox.value);
                },

                getValue: function(){
                        return this.parse(this.getDisplayedValue(), this.constraints);
                },

                setValue: function(value, /*Boolean, optional*/ priorityChange, /*String, optional*/ formattedValue){
                        var filteredValue = this.filter(value);
                        if((typeof filteredValue == typeof value) && (formattedValue == null || formattedValue == undefined)){
                                formattedValue = this.format(filteredValue, this.constraints);
                        }
                        if(formattedValue != null && formattedValue != undefined){
                                this.textbox.value = formattedValue;
                        }
                        dijit.form.TextBox.superclass.setValue.call(this, filteredValue, priorityChange);
                },

                setDisplayedValue: function(/*String*/value){
                        this.textbox.value = value;
                        this.setValue(this.getValue(), true);
                },

                forWaiValuenow: function(){
                        return this.getDisplayedValue();
                },

                format: function(/* String */ value, /* Object */ constraints){
                        // summary: Replacable function to convert a value to a properly formatted string
                        return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
                },

                parse: function(/* String */ value, /* Object */ constraints){
                        // summary: Replacable function to convert a formatted string to a value
                        return value;
                },

                postCreate: function(){
                        // setting the value here is needed since value="" in the template causes "undefined"
                        // and setting in the DOM (instead of the JS object) helps with form reset actions
                        this.textbox.setAttribute("value", this.getDisplayedValue());
                        this.inherited('postCreate', arguments);

                        if(this.srcNodeRef){
                                dojo.style(this.textbox, "cssText", this.style);
                                this.textbox.className += " " + this["class"];
                        }
                        this._layoutHack();
                },

                _layoutHack: function(){
                        // summary: work around table sizing bugs on FF2 by forcing redraw
                        if(dojo.isFF == 2 && this.domNode.tagName=="TABLE"){
                                var node=this.domNode;
                                var old = node.style.opacity;
                                node.style.opacity = "0.999";
                                setTimeout(function(){
                                        node.style.opacity = old;
                                }, 0);
                        }                       
                },

                filter: function(val){
                        // summary: Apply various filters to textbox value
                        if(val == undefined || val == null){ return ""; }
                        else if(typeof val != "string"){ return val; }
                        if(this.trim){
                                val = dojo.trim(val);
                        }
                        if(this.uppercase){
                                val = val.toUpperCase();
                        }
                        if(this.lowercase){
                                val = val.toLowerCase();
                        }
                        if(this.propercase){
                                val = val.replace(/[^\s]+/g, function(word){
                                        return word.substring(0,1).toUpperCase() + word.substring(1);
                                });
                        }
                        return val;
                },

                // event handlers, you can over-ride these in your own subclasses
                _onBlur: function(){
                        this.setValue(this.getValue(), (this.isValid ? this.isValid() : true));
                },

                onkeyup: function(){
                        // TODO: it would be nice to massage the value (ie: automatic uppercase, etc) as the user types
                        // but this messes up the cursor position if you are typing into the middle of a word, and
                        // also trimming doesn't work correctly (it prevents spaces between words too!)
                        // this.setValue(this.getValue());
                }
        }
);

}