define("dijit/form/_ListMouseMixin", [ "dojo/_base/declare", // declare "dojo/_base/event", // event.stop "dojo/touch", "./_ListBase" ], function(declare, event, touch, _ListBase){ /*===== var _ListBase = dijit.form._ListBase; =====*/ // module: // dijit/form/_ListMouseMixin // summary: // a mixin to handle mouse or touch events for a focus-less menu 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.connect(this.domNode, touch.press, "_onMouseDown"); this.connect(this.domNode, touch.release, "_onMouseUp"); this.connect(this.domNode, "onmouseover", "_onMouseOver"); this.connect(this.domNode, "onmouseout", "_onMouseOut"); }, _onMouseDown: function(/*Event*/ evt){ event.stop(evt); if(this._hoveredNode){ this.onUnhover(this._hoveredNode); this._hoveredNode = null; } this._isDragging = true; this._setSelectedAttr(this._getTarget(evt)); }, _onMouseUp: function(/*Event*/ evt){ event.stop(evt); this._isDragging = false; var selectedNode = this._getSelectedAttr(); var target = this._getTarget(evt); 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 ====*/){ if(this._hoveredNode){ this.onUnhover(this._hoveredNode); if(this._getSelectedAttr() == this._hoveredNode){ this.onSelect(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){ if(this._cancelDrag){ var time = (new Date()).getTime(); if(time > this._cancelDrag){ this._isDragging = false; } this._cancelDrag = null; } var node = this._getTarget(evt); if(!node){ return; } if(this._hoveredNode != node){ if(this._hoveredNode){ this._onMouseOut({ target: this._hoveredNode }); } if(node && node.parentNode == this.containerNode){ if(this._isDragging){ this._setSelectedAttr(node); }else{ this._hoveredNode = node; this.onHover(node); } } } } }); });