From e44a7e37b6c7b5961adaffc62b9042b8d442938e Mon Sep 17 00:00:00 2001 From: mensonge Date: Thu, 13 Nov 2008 09:49:11 +0000 Subject: New feature: basic Ajax suggestion for tags and implementation of Dojo toolkit git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f --- includes/js/dijit/form/_Spinner.js | 117 +++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 includes/js/dijit/form/_Spinner.js (limited to 'includes/js/dijit/form/_Spinner.js') diff --git a/includes/js/dijit/form/_Spinner.js b/includes/js/dijit/form/_Spinner.js new file mode 100644 index 0000000..6837552 --- /dev/null +++ b/includes/js/dijit/form/_Spinner.js @@ -0,0 +1,117 @@ +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", + 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; + }, + + _arrowState: function(/*Node*/ node, /*Boolean*/ pressed){ + this._active = pressed; + this.stateModifier = node.getAttribute("stateModifier") || ""; + this._setStateClass(); + }, + + _arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction){ + if(this.disabled || this.readOnly){ return; } + this._arrowState(nodePressed, true); + this.setValue(this.adjust(this.getValue(), direction*this.smallDelta), false); + dijit.selectInputText(this.textbox, this.textbox.value.length); + }, + + _arrowReleased: function(/*Node*/ node){ + this._wheelTimer = null; + if(this.disabled || this.readOnly){ return; } + this._arrowState(node, false); + }, + + _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; + } + var node, dir; + if(scrollAmount > 0){ + node = this.upArrowNode; + dir = +1; + }else if(scrollAmount < 0){ + node = this.downArrowNode; + 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"); + this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout)); + this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout)); + if(dojo.isIE){ + // When spinner is moved from hidden to visible, call _setStateClass to remind IE to render it. (#6123) + var _this = this; + this.connect(this.domNode, "onresize", + function(){ setTimeout(dojo.hitch(_this, + function(){ + // cause the IE expressions to rerun + this.upArrowNode.style.behavior = ''; + this.downArrowNode.style.behavior = ''; + // cause IE to rerender + this._setStateClass(); + }), 0); + } + ); + } + } +}); + +} -- cgit v1.2.3-54-g00ecf