if (!dojo._hasResource["dijit.form._Spinner"]) { // _hasResource checks added
// by build. Do not use
// _hasResource directly in
// your code.
dojo._hasResource["dijit.form._Spinner"] = true;
dojo.provide("dijit.form._Spinner");
dojo.require("dijit.form.ValidationTextBox");
dojo.declare("dijit.form._Spinner", dijit.form.RangeBoundTextBox, {
// summary: Mixin for validation widgets with a spinner
// description: This class basically (conceptually) extends
// dijit.form.ValidationTextBox.
// It modifies the template to have up/down arrows, and provides related
// handling code.
// defaultTimeout: Number
// number of milliseconds before a held key or button becomes typematic
defaultTimeout : 500,
// timeoutChangeRate: Number
// fraction of time used to change the typematic timer between events
// 1.0 means that each typematic event fires at defaultTimeout intervals
// < 1.0 means that each typematic event fires at an increasing faster
// rate
timeoutChangeRate : 0.90,
// smallDelta: Number
// adjust the value by this much when spinning using the arrow
// keys/buttons
smallDelta : 1,
// largeDelta: Number
// adjust the value by this much when spinning using the PgUp/Dn keys
largeDelta : 10,
templateString : "
\n\n",
baseClass : "dijitSpinner",
adjust : function(/* Object */val, /* Number */delta) {
// summary: user replaceable function used to adjust a primitive
// value(Number/Date/...) by the delta amount specified
// the val is adjusted in a way that makes sense to the object type
return val;
},
_handleUpArrowEvent : function(/* Event */e) {
this._onMouse(e, this.upArrowNode);
},
_handleDownArrowEvent : function(/* Event */e) {
this._onMouse(e, this.downArrowNode);
},
_arrowPressed : function(/* Node */nodePressed, /* Number */direction) {
if (this.disabled) {
return;
}
dojo.addClass(nodePressed, "dijitSpinnerButtonActive");
this.setValue(this.adjust(this.getValue(), direction
* this.smallDelta), false);
},
_arrowReleased : function(/* Node */node) {
if (this.disabled) {
return;
}
this._wheelTimer = null;
dijit.focus(this.textbox);
dojo.removeClass(node, "dijitSpinnerButtonActive");
},
_typematicCallback : function(/* Number */count, /* DOMNode */node, /* Event */
evt) {
if (node == this.textbox) {
node = (evt.keyCode == dojo.keys.UP_ARROW)
? this.upArrowNode
: this.downArrowNode;
}
if (count == -1) {
this._arrowReleased(node);
} else {
this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1);
}
},
_wheelTimer : null,
_mouseWheeled : function(/* Event */evt) {
dojo.stopEvent(evt);
var scrollAmount = 0;
if (typeof evt.wheelDelta == 'number') { // IE
scrollAmount = evt.wheelDelta;
} else if (typeof evt.detail == 'number') { // Mozilla+Firefox
scrollAmount = -evt.detail;
}
if (scrollAmount > 0) {
var node = this.upArrowNode;
var dir = +1;
} else if (scrollAmount < 0) {
var node = this.downArrowNode;
var dir = -1;
} else {
return;
}
this._arrowPressed(node, dir);
if (this._wheelTimer != null) {
clearTimeout(this._wheelTimer);
}
var _this = this;
this._wheelTimer = setTimeout(function() {
_this._arrowReleased(node);
}, 50);
},
postCreate : function() {
this.inherited('postCreate', arguments);
// extra listeners
this.connect(this.textbox, dojo.isIE
? "onmousewheel"
: 'DOMMouseScroll', "_mouseWheeled");
dijit.typematic.addListener(this.upArrowNode, this.textbox, {
keyCode : dojo.keys.UP_ARROW,
ctrlKey : false,
altKey : false,
shiftKey : false
}, this, "_typematicCallback", this.timeoutChangeRate,
this.defaultTimeout);
dijit.typematic.addListener(this.downArrowNode, this.textbox, {
keyCode : dojo.keys.DOWN_ARROW,
ctrlKey : false,
altKey : false,
shiftKey : false
}, this, "_typematicCallback", this.timeoutChangeRate,
this.defaultTimeout);
}
});
}