123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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, "onclick", function(evt){ this._onClick(evt, this._getTarget(evt)); });
- this.connect(this.domNode, "onmousedown", "_onMouseDown");
- this.connect(this.domNode, "onmouseup", "_onMouseUp");
- this.connect(this.domNode, "onmouseover", "_onMouseOver");
- this.connect(this.domNode, "onmouseout", "_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){
- if(this._hoveredNode){
- this.onUnhover(this._hoveredNode);
- this._hoveredNode = null;
- }
- this._isDragging = true;
- this._setSelectedAttr(this._getTarget(evt), false);
- },
- _onMouseUp: function(/*Event*/ evt){
- this._isDragging = false;
- var selectedNode = this._getSelectedAttr();
- var target = this._getTarget(evt);
- 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 ====*/){
- 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, false);
- }else{
- this._hoveredNode = node;
- this.onHover(node);
- }
- }
- }
- }
- });
- });
|