-
Notifications
You must be signed in to change notification settings - Fork 187
/
TextBox.js
135 lines (113 loc) · 4.1 KB
/
TextBox.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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: "",
templatePath: dojo.moduleUrl("dijit.form", "templates/TextBox.html"),
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());
}
}
);