-
Notifications
You must be signed in to change notification settings - Fork 186
/
Copy path_FormValueMixin.js
81 lines (71 loc) · 2.74 KB
/
_FormValueMixin.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
define([
"dojo/_base/declare", // declare
"dojo/dom-attr", // domAttr.set
"dojo/keys", // keys.ESCAPE
"dojo/_base/lang",
"dojo/on",
"dojo/sniff", // has("webkit")
"./_FormWidgetMixin"
], function(declare, domAttr, keys, lang, on, has, _FormWidgetMixin){
// module:
// dijit/form/_FormValueMixin
return declare("dijit.form._FormValueMixin", _FormWidgetMixin, {
// summary:
// Mixin for widgets corresponding to native HTML elements such as `<input>` or `<select>`
// that have user changeable values.
// description:
// Each _FormValueMixin represents a single input value, and has a (possibly hidden) `<input>` element,
// to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
// works as expected.
// readOnly: Boolean
// Should this widget respond to user input?
// In markup, this is specified as "readOnly".
// Similar to disabled except readOnly form values are submitted.
readOnly: false,
_setReadOnlyAttr: function(/*Boolean*/ value){
// IE has a Caret Browsing mode (hit F7 to activate) where disabled textboxes can be modified
// focusNode enforced readonly if currently disabled to avoid this issue.
if (has('trident') && 'disabled' in this) {
domAttr.set(this.focusNode, 'readOnly', value || this.disabled);
} else {
domAttr.set(this.focusNode, 'readOnly', value);
}
this._set("readOnly", value);
},
postCreate: function(){
this.inherited(arguments);
// Update our reset value if it hasn't yet been set (because this.set()
// is only called when there *is* a value)
if(this._resetValue === undefined){
this._lastValueReported = this._resetValue = this.value;
}
},
_setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
// summary:
// Hook so set('value', value) works.
// description:
// Sets the value of the widget.
// If the value has changed, then fire onChange event, unless priorityChange
// is specified as null (or false?)
this._handleOnChange(newValue, priorityChange);
},
_handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){
// summary:
// Called when the value of the widget has changed. Saves the new value in this.value,
// and calls onChange() if appropriate. See _FormWidget._handleOnChange() for details.
this._set("value", newValue);
this.inherited(arguments);
},
undo: function(){
// summary:
// Restore the value to the last value passed to onChange
this._setValueAttr(this._lastValueReported, false);
},
reset: function(){
// summary:
// Reset the widget's value to what it was at initialization time
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, true);
}
});
});