define("dojo/mouse", ["./_base/kernel", "./on", "./has", "./dom", "./_base/window"], function(dojo, on, has, dom, win){ // module: // dojo/mouse has.add("dom-quirks", win.doc && win.doc.compatMode == "BackCompat"); has.add("events-mouseenter", win.doc && "onmouseenter" in win.doc.createElement("div")); has.add("events-mousewheel", win.doc && 'onmousewheel' in win.doc); var mouseButtons; if((has("dom-quirks") && has("ie")) || !has("dom-addeventlistener")){ mouseButtons = { LEFT: 1, MIDDLE: 4, RIGHT: 2, // helper functions isButton: function(e, button){ return e.button & button; }, isLeft: function(e){ return e.button & 1; }, isMiddle: function(e){ return e.button & 4; }, isRight: function(e){ return e.button & 2; } }; }else{ mouseButtons = { LEFT: 0, MIDDLE: 1, RIGHT: 2, // helper functions isButton: function(e, button){ return e.button == button; }, isLeft: function(e){ return e.button == 0; }, isMiddle: function(e){ return e.button == 1; }, isRight: function(e){ return e.button == 2; } }; } dojo.mouseButtons = mouseButtons; /*===== dojo.mouseButtons = { // LEFT: Number // Numeric value of the left mouse button for the platform. LEFT: 0, // MIDDLE: Number // Numeric value of the middle mouse button for the platform. MIDDLE: 1, // RIGHT: Number // Numeric value of the right mouse button for the platform. RIGHT: 2, isButton: function(e, button){ // summary: // Checks an event object for a pressed button // e: Event // Event object to examine // button: Number // The button value (example: dojo.mouseButton.LEFT) return e.button == button; // Boolean }, isLeft: function(e){ // summary: // Checks an event object for the pressed left button // e: Event // Event object to examine return e.button == 0; // Boolean }, isMiddle: function(e){ // summary: // Checks an event object for the pressed middle button // e: Event // Event object to examine return e.button == 1; // Boolean }, isRight: function(e){ // summary: // Checks an event object for the pressed right button // e: Event // Event object to examine return e.button == 2; // Boolean } }; =====*/ function eventHandler(type, selectHandler){ // emulation of mouseenter/leave with mouseover/out using descendant checking var handler = function(node, listener){ return on(node, type, function(evt){ if(selectHandler){ return selectHandler(evt, listener); } if(!dom.isDescendant(evt.relatedTarget, node)){ return listener.call(this, evt); } }); }; handler.bubble = function(select){ return eventHandler(type, function(evt, listener){ // using a selector, use the select function to determine if the mouse moved inside the selector and was previously outside the selector var target = select(evt.target); var relatedTarget = evt.relatedTarget; if(target && (target != (relatedTarget && relatedTarget.nodeType == 1 && select(relatedTarget)))){ return listener.call(target, evt); } }); }; return handler; } var wheel; if(has("events-mousewheel")){ wheel = 'mousewheel'; }else{ //firefox wheel = function(node, listener){ return on(node, 'DOMMouseScroll', function(evt){ evt.wheelDelta = -evt.detail; listener.call(this, evt); }); }; } return { // summary: // This module provide mouse event handling utility functions and exports // mouseenter and mouseleave event emulation. // example: // To use these events, you register a mouseenter like this: // | define(["dojo/on", dojo/mouse"], function(on, mouse){ // | on(targetNode, mouse.enter, function(event){ // | dojo.addClass(targetNode, "highlighted"); // | }); // | on(targetNode, mouse.leave, function(event){ // | dojo.removeClass(targetNode, "highlighted"); // | }); _eventHandler: eventHandler, // for dojo/touch // enter: Synthetic Event // This is an extension event for the mouseenter that IE provides, emulating the // behavior on other browsers. enter: eventHandler("mouseover"), // leave: Synthetic Event // This is an extension event for the mouseleave that IE provides, emulating the // behavior on other browsers. leave: eventHandler("mouseout"), // wheel: Normalized Mouse Wheel Event // This is an extension event for the mousewheel that non-Mozilla browsers provide, // emulating the behavior on Mozilla based browsers. wheel: wheel, isLeft: mouseButtons.isLeft, /*===== isLeft: function(){ // summary: // Test an event object (from a mousedown event) to see if the left button was pressed. }, =====*/ isMiddle: mouseButtons.isMiddle, /*===== isMiddle: function(){ // summary: // Test an event object (from a mousedown event) to see if the middle button was pressed. }, =====*/ isRight: mouseButtons.isRight /*===== , isRight: function(){ // summary: // Test an event object (from a mousedown event) to see if the right button was pressed. } =====*/ }; });