123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- 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());
- }
- });
- }
|