summaryrefslogtreecommitdiff
path: root/lib/dijit/form/_ListMouseMixin.js.uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dijit/form/_ListMouseMixin.js.uncompressed.js')
-rw-r--r--lib/dijit/form/_ListMouseMixin.js.uncompressed.js96
1 files changed, 96 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..733a2a63f
--- /dev/null
+++ b/lib/dijit/form/_ListMouseMixin.js.uncompressed.js
@@ -0,0 +1,96 @@
+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);
+ }
+ }
+ }
+ }
+});
+
+});