dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
73 lines (66 loc) • 2.16 kB
JavaScript
define([
"dojo/_base/declare", // declare
"dojo/keys", // keys.END keys.HOME
"./_Spinner",
"./NumberTextBox"
], function(declare, keys, _Spinner, NumberTextBox){
// module:
// dijit/form/NumberSpinner
return declare("dijit.form.NumberSpinner", [_Spinner, NumberTextBox.Mixin], {
// summary:
// Extends NumberTextBox to add up/down arrows and pageup/pagedown for incremental change to the value
//
// description:
// A `dijit/form/NumberTextBox` extension to provide keyboard accessible value selection
// as well as icons for spinning direction. When using the keyboard, the typematic rules
// apply, meaning holding the key will gradually increase or decrease the value and
// accelerate.
//
// example:
// | new NumberSpinner({ constraints:{ max:300, min:100 }}, "someInput");
baseClass: "dijitTextBox dijitSpinner dijitNumberTextBox",
adjust: function(/*Object*/ val, /*Number*/ delta){
// summary:
// Change Number val by the given amount
// tags:
// protected
var tc = this.constraints,
v = isNaN(val),
gotMax = !isNaN(tc.max),
gotMin = !isNaN(tc.min)
;
if(v && delta != 0){ // blank or invalid value and they want to spin, so create defaults
val = (delta > 0) ?
gotMin ? tc.min : gotMax ? tc.max : 0 :
gotMax ? this.constraints.max : gotMin ? tc.min : 0
;
}
var newval = val + delta;
if(v || isNaN(newval)){
return val;
}
if(gotMax && (newval > tc.max)){
newval = tc.max;
}
if(gotMin && (newval < tc.min)){
newval = tc.min;
}
return newval;
},
_onKeyDown: function(e){
if(this.disabled || this.readOnly){
return;
}
if((e.keyCode == keys.HOME || e.keyCode == keys.END) && !(e.ctrlKey || e.altKey || e.metaKey)
&& typeof this.get('value') != 'undefined' /* gibberish, so HOME and END are default editing keys*/){
var value = this.constraints[(e.keyCode == keys.HOME ? "min" : "max")];
if(typeof value == "number"){
this._setValueAttr(value, false);
}
// eat home or end key whether we change the value or not
e.stopPropagation();
e.preventDefault();
}
}
});
});