]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/mouse.js.uncompressed.js
update dojo to 1.7.3
[tt-rss.git] / lib / dojo / mouse.js.uncompressed.js
1 define("dojo/mouse", ["./_base/kernel", "./on", "./has", "./dom", "./_base/window"], function(dojo, on, has, dom, win){
2
3 /*=====
4 dojo.mouse = {
5 // summary:
6 // This module provide mouse event handling utility functions and exports
7 // mouseenter and mouseleave event emulation.
8 // enter: Synthetic Event
9 // This is an extension event for the mouseenter that IE provides, emulating the
10 // behavior on other browsers.
11 // leave: Synthetic Event
12 // This is an extension event for the mouseleave that IE provides, emulating the
13 // behavior on other browsers.
14 // isLeft: Function
15 // Test an event object (from a mousedown event) to see if the left button was pressed.
16 // isMiddle: Function
17 // Test an event object (from a mousedown event) to see if the middle button was pressed.
18 // isRight: Function
19 // Test an event object (from a mousedown event) to see if the right button was pressed.
20 // example:
21 // To use these events, you register a mouseenter like this:
22 // | define(["dojo/on", dojo/mouse"], function(on, mouse){
23 // | on(targetNode, mouse.enter, function(event){
24 // | dojo.addClass(targetNode, "highlighted");
25 // | });
26 // | on(targetNode, mouse.leave, function(event){
27 // | dojo.removeClass(targetNode, "highlighted");
28 // | });
29 };
30 ======*/
31
32 has.add("dom-quirks", win.doc && win.doc.compatMode == "BackCompat");
33 has.add("events-mouseenter", win.doc && "onmouseenter" in win.doc.createElement("div"));
34
35 var mouseButtons;
36 if(has("dom-quirks") || !has("dom-addeventlistener")){
37 mouseButtons = {
38 LEFT: 1,
39 MIDDLE: 4,
40 RIGHT: 2,
41 // helper functions
42 isButton: function(e, button){ return e.button & button; },
43 isLeft: function(e){ return e.button & 1; },
44 isMiddle: function(e){ return e.button & 4; },
45 isRight: function(e){ return e.button & 2; }
46 };
47 }else{
48 mouseButtons = {
49 LEFT: 0,
50 MIDDLE: 1,
51 RIGHT: 2,
52 // helper functions
53 isButton: function(e, button){ return e.button == button; },
54 isLeft: function(e){ return e.button == 0; },
55 isMiddle: function(e){ return e.button == 1; },
56 isRight: function(e){ return e.button == 2; }
57 };
58 }
59 dojo.mouseButtons = mouseButtons;
60
61 /*=====
62 dojo.mouseButtons = {
63 // LEFT: Number
64 // Numeric value of the left mouse button for the platform.
65 LEFT: 0,
66 // MIDDLE: Number
67 // Numeric value of the middle mouse button for the platform.
68 MIDDLE: 1,
69 // RIGHT: Number
70 // Numeric value of the right mouse button for the platform.
71 RIGHT: 2,
72
73 isButton: function(e, button){
74 // summary:
75 // Checks an event object for a pressed button
76 // e: Event
77 // Event object to examine
78 // button: Number
79 // The button value (example: dojo.mouseButton.LEFT)
80 return e.button == button; // Boolean
81 },
82 isLeft: function(e){
83 // summary:
84 // Checks an event object for the pressed left button
85 // e: Event
86 // Event object to examine
87 return e.button == 0; // Boolean
88 },
89 isMiddle: function(e){
90 // summary:
91 // Checks an event object for the pressed middle button
92 // e: Event
93 // Event object to examine
94 return e.button == 1; // Boolean
95 },
96 isRight: function(e){
97 // summary:
98 // Checks an event object for the pressed right button
99 // e: Event
100 // Event object to examine
101 return e.button == 2; // Boolean
102 }
103 };
104 =====*/
105
106 function eventHandler(type, mustBubble){
107 // emulation of mouseenter/leave with mouseover/out using descendant checking
108 var handler = function(node, listener){
109 return on(node, type, function(evt){
110 if(!dom.isDescendant(evt.relatedTarget, mustBubble ? evt.target : node)){
111 return listener.call(this, evt);
112 }
113 });
114 };
115 if(!mustBubble){
116 handler.bubble = eventHandler(type, true);
117 }
118 return handler;
119 }
120 return {
121 enter: eventHandler("mouseover"),
122 leave: eventHandler("mouseout"),
123 isLeft: mouseButtons.isLeft,
124 isMiddle: mouseButtons.isMiddle,
125 isRight: mouseButtons.isRight
126 };
127 });