UNPKG

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

94 lines (83 loc) 2.51 kB
define([ "dojo/_base/declare", // declare "dojo/on", "dojo/touch", "./_ListBase" ], function(declare, 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); // Add flag to use normalized click handling from dojo/touch this.domNode.dojoClick = true; this._listConnect("click", "_onClick"); this._listConnect("mousedown", "_onMouseDown"); this._listConnect("mouseup", "_onMouseUp"); this._listConnect("mouseover", "_onMouseOver"); this._listConnect("mouseout", "_onMouseOut"); }, _onClick: function(/*Event*/ evt, /*DomNode*/ target){ this._setSelectedAttr(target, false); if(this._deferredClick){ this._deferredClick.remove(); } this._deferredClick = this.defer(function(){ this._deferredClick = null; this.onClick(target); }); }, _onMouseDown: function(/*Event*/ evt, /*DomNode*/ target){ if(this._hoveredNode){ this.onUnhover(this._hoveredNode); this._hoveredNode = null; } this._isDragging = true; this._setSelectedAttr(target, false); }, _onMouseUp: function(/*Event*/ evt, /*DomNode*/ target){ this._isDragging = false; var selectedNode = this.selected; var hoveredNode = this._hoveredNode; if(selectedNode && target == selectedNode){ this.defer(function(){ this._onClick(evt, selectedNode); }); }else if(hoveredNode){ // drag to select this.defer(function(){ this._onClick(evt, 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, false); } } }); });