]> git.wh0rd.org - tt-rss.git/blob - lib/dijit/form/RangeBoundTextBox.js.uncompressed.js
update dojo to 1.7.3
[tt-rss.git] / lib / dijit / form / RangeBoundTextBox.js.uncompressed.js
1 define("dijit/form/RangeBoundTextBox", [
2 "dojo/_base/declare", // declare
3 "dojo/i18n", // i18n.getLocalization
4 "./MappedTextBox"
5 ], function(declare, i18n, MappedTextBox){
6
7 /*=====
8 var MappedTextBox = dijit.form.MappedTextBox;
9 =====*/
10
11 // module:
12 // dijit/form/RangeBoundTextBox
13 // summary:
14 // Base class for textbox form widgets which defines a range of valid values.
15
16 /*=====
17 dijit.form.RangeBoundTextBox.__Constraints = function(){
18 // min: Number
19 // Minimum signed value. Default is -Infinity
20 // max: Number
21 // Maximum signed value. Default is +Infinity
22 this.min = min;
23 this.max = max;
24 }
25 =====*/
26
27 return declare("dijit.form.RangeBoundTextBox", MappedTextBox, {
28 // summary:
29 // Base class for textbox form widgets which defines a range of valid values.
30
31 // rangeMessage: String
32 // The message to display if value is out-of-range
33 rangeMessage: "",
34
35 /*=====
36 // constraints: dijit.form.RangeBoundTextBox.__Constraints
37 constraints: {},
38 ======*/
39
40 rangeCheck: function(/*Number*/ primitive, /*dijit.form.RangeBoundTextBox.__Constraints*/ constraints){
41 // summary:
42 // Overridable function used to validate the range of the numeric input value.
43 // tags:
44 // protected
45 return ("min" in constraints? (this.compare(primitive,constraints.min) >= 0) : true) &&
46 ("max" in constraints? (this.compare(primitive,constraints.max) <= 0) : true); // Boolean
47 },
48
49 isInRange: function(/*Boolean*/ /*===== isFocused =====*/){
50 // summary:
51 // Tests if the value is in the min/max range specified in constraints
52 // tags:
53 // protected
54 return this.rangeCheck(this.get('value'), this.constraints);
55 },
56
57 _isDefinitelyOutOfRange: function(){
58 // summary:
59 // Returns true if the value is out of range and will remain
60 // out of range even if the user types more characters
61 var val = this.get('value');
62 var isTooLittle = false;
63 var isTooMuch = false;
64 if("min" in this.constraints){
65 var min = this.constraints.min;
66 min = this.compare(val, ((typeof min == "number") && min >= 0 && val !=0) ? 0 : min);
67 isTooLittle = (typeof min == "number") && min < 0;
68 }
69 if("max" in this.constraints){
70 var max = this.constraints.max;
71 max = this.compare(val, ((typeof max != "number") || max > 0) ? max : 0);
72 isTooMuch = (typeof max == "number") && max > 0;
73 }
74 return isTooLittle || isTooMuch;
75 },
76
77 _isValidSubset: function(){
78 // summary:
79 // Overrides `dijit.form.ValidationTextBox._isValidSubset`.
80 // Returns true if the input is syntactically valid, and either within
81 // range or could be made in range by more typing.
82 return this.inherited(arguments) && !this._isDefinitelyOutOfRange();
83 },
84
85 isValid: function(/*Boolean*/ isFocused){
86 // Overrides dijit.form.ValidationTextBox.isValid to check that the value is also in range.
87 return this.inherited(arguments) &&
88 ((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); // Boolean
89 },
90
91 getErrorMessage: function(/*Boolean*/ isFocused){
92 // Overrides dijit.form.ValidationTextBox.getErrorMessage to print "out of range" message if appropriate
93 var v = this.get('value');
94 if(v !== null && v !== '' && v !== undefined && (typeof v != "number" || !isNaN(v)) && !this.isInRange(isFocused)){ // don't check isInRange w/o a real value
95 return this.rangeMessage; // String
96 }
97 return this.inherited(arguments);
98 },
99
100 postMixInProperties: function(){
101 this.inherited(arguments);
102 if(!this.rangeMessage){
103 this.messages = i18n.getLocalization("dijit.form", "validate", this.lang);
104 this.rangeMessage = this.messages.rangeMessage;
105 }
106 },
107
108 _setConstraintsAttr: function(/*Object*/ constraints){
109 this.inherited(arguments);
110 if(this.focusNode){ // not set when called from postMixInProperties
111 if(this.constraints.min !== undefined){
112 this.focusNode.setAttribute("aria-valuemin", this.constraints.min);
113 }else{
114 this.focusNode.removeAttribute("aria-valuemin");
115 }
116 if(this.constraints.max !== undefined){
117 this.focusNode.setAttribute("aria-valuemax", this.constraints.max);
118 }else{
119 this.focusNode.removeAttribute("aria-valuemax");
120 }
121 }
122 },
123
124 _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
125 // summary:
126 // Hook so set('value', ...) works.
127
128 this.focusNode.setAttribute("aria-valuenow", value);
129 this.inherited(arguments);
130 },
131
132 applyTextDir: function(/*===== element, text =====*/){
133 // summary:
134 // The function overridden in the _BidiSupport module,
135 // originally used for setting element.dir according to this.textDir.
136 // In this case does nothing.
137 // element: Object
138 // text: String
139 // tags:
140 // protected.
141 }
142 });
143 });