on master help sign in
Properly attach mouse events to `document`
82d753aevancz
libraries/Native/Signal/Mouse.js+10−8
@@ -38,33 +38,35 @@ Elm.Native.Mouse = function(elm) {
38 return Utils.Tuple2(posx, posy);
38 return Utils.Tuple2(posx, posy);
39 }
39 }
40
40
41+ var node = elm.node.tagName === "BODY" ? document : elm.node;
42+
41 function click(e) {
43 function click(e) {
42 var hasListener1 = elm.notify(isClicked.id, true);
44 var hasListener1 = elm.notify(isClicked.id, true);
43 var hasListener2 = elm.notify(clicks.id, Utils.Tuple0);
45 var hasListener2 = elm.notify(clicks.id, Utils.Tuple0);
44 elm.notify(isClicked.id, false);
46 elm.notify(isClicked.id, false);
45 if (!hasListener1 && !hasListener2)
47 if (!hasListener1 && !hasListener2)
46− elm.node.removeEventListener('click', click);
48+ node.removeEventListener('click', click);
47 }
49 }
48
50
49 function down(e) {
51 function down(e) {
50 var hasListener = elm.notify(isDown.id, true);
52 var hasListener = elm.notify(isDown.id, true);
51− if (!hasListener) elm.node.removeEventListener('mousedown', down);
53+ if (!hasListener) node.removeEventListener('mousedown', down);
52 }
54 }
53
55
54 function up(e) {
56 function up(e) {
55 var hasListener = elm.notify(isDown.id, false);
57 var hasListener = elm.notify(isDown.id, false);
56− if (!hasListener) elm.node.removeEventListener('mouseup', up);
58+ if (!hasListener) node.removeEventListener('mouseup', up);
57 }
59 }
58
60
59 function move(e) {
61 function move(e) {
60 var hasListener = elm.notify(position.id, getXY(e));
62 var hasListener = elm.notify(position.id, getXY(e));
61− if (!hasListener) elm.node.removeEventListener('mousemove', move);
63+ if (!hasListener) node.removeEventListener('mousemove', move);
62 }
64 }
63
65
64− elm.node.addEventListener('click' , click);
66+ node.addEventListener('click' , click);
65− elm.node.addEventListener('mousedown', down);
67+ node.addEventListener('mousedown', down);
66− elm.node.addEventListener('mouseup' , up);
68+ node.addEventListener('mouseup' , up);
67− elm.node.addEventListener('mousemove', move);
69+ node.addEventListener('mousemove', move);
68
70
69 return elm.Native.Mouse = {
71 return elm.Native.Mouse = {
70 position: position,
72 position: position,