diff options
author | Richard Beales <[email protected]> | 2013-03-18 07:32:01 +0000 |
---|---|---|
committer | Richard Beales <[email protected]> | 2013-03-18 07:32:01 +0000 |
commit | 7c97d17aaf373339a8bcd917ad59ca6018148f0d (patch) | |
tree | 5a3c04f0f9529be392c1263d3feb75806eb43797 /lib/dijit/form/_ListMouseMixin.js.uncompressed.js | |
parent | 70db7424e7068701e60cc5bcdfe8f858be508179 (diff) | |
parent | c670a80ddd9b03bd4ea6d940a9ed682fd26248d7 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'lib/dijit/form/_ListMouseMixin.js.uncompressed.js')
-rw-r--r-- | lib/dijit/form/_ListMouseMixin.js.uncompressed.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/dijit/form/_ListMouseMixin.js.uncompressed.js b/lib/dijit/form/_ListMouseMixin.js.uncompressed.js new file mode 100644 index 000000000..118f6fdfb --- /dev/null +++ b/lib/dijit/form/_ListMouseMixin.js.uncompressed.js @@ -0,0 +1,79 @@ +define("dijit/form/_ListMouseMixin", [ + "dojo/_base/declare", // declare + "dojo/mouse", + "dojo/on", + "dojo/touch", + "./_ListBase" +], function(declare, mouse, on, touch, _ListBase){ + +// module: +// dijit/form/_ListMouseMixin + +return declare( "dijit.form._ListMouseMixin", _ListBase, { + // summary: + // a Mixin to handle mouse or touch events for a focus-less menu + // Abstract methods that must be defined externally: + // + // - onClick: item was chosen (mousedown somewhere on the menu and mouseup somewhere on the menu) + // tags: + // private + + postCreate: function(){ + this.inherited(arguments); + + this.own(on(this.domNode, touch.press, function(evt){ evt.preventDefault(); })); // prevent focus shift on list scrollbar press + + this._listConnect(touch.press, "_onMouseDown"); + this._listConnect(touch.release, "_onMouseUp"); + this._listConnect(mouse.enter, "_onMouseOver"); + this._listConnect(mouse.leave, "_onMouseOut"); + }, + + _onMouseDown: function(/*Event*/ evt, /*DomNode*/ target){ + if(this._hoveredNode){ + this.onUnhover(this._hoveredNode); + this._hoveredNode = null; + } + this._isDragging = true; + this._setSelectedAttr(target); + }, + + _onMouseUp: function(/*Event*/ evt, /*DomNode*/ target){ + this._isDragging = false; + var selectedNode = this.selected; + var hoveredNode = this._hoveredNode; + if(selectedNode && target == selectedNode){ + this.onClick(selectedNode); + }else if(hoveredNode && target == hoveredNode){ // drag to select + this._setSelectedAttr(hoveredNode); + this.onClick(hoveredNode); + } + }, + + _onMouseOut: function(/*Event*/ evt, /*DomNode*/ target){ + if(this._hoveredNode){ + this.onUnhover(this._hoveredNode); + this._hoveredNode = null; + } + if(this._isDragging){ + this._cancelDrag = (new Date()).getTime() + 1000; // cancel in 1 second if no _onMouseOver fires + } + }, + + _onMouseOver: function(/*Event*/ evt, /*DomNode*/ target){ + if(this._cancelDrag){ + var time = (new Date()).getTime(); + if(time > this._cancelDrag){ + this._isDragging = false; + } + this._cancelDrag = null; + } + this._hoveredNode = target; + this.onHover(target); + if(this._isDragging){ + this._setSelectedAttr(target); + } + } +}); + +}); |