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.js79
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);
+ }
+ }
+});
+
+});