@@ -1,67 +1,67 @@
1Elm.Native.Mouse = {};
1Elm.Native.Mouse = {};
2Elm.Native.Mouse.make = function(elm) {
2Elm.Native.Mouse.make = function(elm) {
4− elm.Native = elm.Native || {};
4+ elm.Native = elm.Native || {};
5− elm.Native.Mouse = elm.Native.Mouse || {};
5+ elm.Native.Mouse = elm.Native.Mouse || {};
6− if (elm.Native.Mouse.values) return elm.Native.Mouse.values;
6+ if (elm.Native.Mouse.values) return elm.Native.Mouse.values;
8− var Signal = Elm.Signal.make(elm);
8+ var Signal = Elm.Signal.make(elm);
9− var Utils = Elm.Native.Utils.make(elm);
9+ var Utils = Elm.Native.Utils.make(elm);
11− var position = Signal.constant(Utils.Tuple2(0,0));
11+ var position = Signal.constant(Utils.Tuple2(0,0));
12− position.defaultNumberOfKids = 2;
12+ position.defaultNumberOfKids = 2;
14− // do not move x and y into Elm. By setting their default number
14+ // do not move x and y into Elm. By setting their default number
15− // of kids, it is possible to detatch the mouse listeners if
15+ // of kids, it is possible to detatch the mouse listeners if
16− // they are not needed.
16+ // they are not needed.
17− var x = A2( Signal.lift, function(p){return p._0}, position);
17+ var x = A2( Signal.lift, function(p){return p._0}, position);
18− x.defaultNumberOfKids = 0;
18+ x.defaultNumberOfKids = 0;
19− var y = A2( Signal.lift, function(p){return p._1}, position);
19+ var y = A2( Signal.lift, function(p){return p._1}, position);
20− y.defaultNumberOfKids = 0;
20+ y.defaultNumberOfKids = 0;
22− var isDown = Signal.constant(false);
22+ var isDown = Signal.constant(false);
23− var isClicked = Signal.constant(false);
23+ var isClicked = Signal.constant(false);
24− var clicks = Signal.constant(Utils.Tuple0);
24+ var clicks = Signal.constant(Utils.Tuple0);
26− function getXY(e) {
26+ function getXY(e) {
27− var posx = 0;
27+ var posx = 0;
28− var posy = 0;
28+ var posy = 0;
29− if (!e) e = window.event;
29+ if (!e) e = window.event;
30− if (e.pageX || e.pageY) {
30+ if (e.pageX || e.pageY) {
31− posx = e.pageX;
31+ posx = e.pageX;
32− posy = e.pageY;
32+ posy = e.pageY;
33− } else if (e.clientX || e.clientY) {
33+ } else if (e.clientX || e.clientY) {
34− posx = e.clientX + document.body.scrollLeft +
34+ posx = e.clientX + document.body.scrollLeft +
35− document.documentElement.scrollLeft;
35+ document.documentElement.scrollLeft;
36− posy = e.clientY + document.body.scrollTop +
36+ posy = e.clientY + document.body.scrollTop +
37− document.documentElement.scrollTop;
37+ document.documentElement.scrollTop;
39+ return Utils.Tuple2(posx-elm.node.offsetX, posy-elm.node.offsetY);
39− return Utils.Tuple2(posx-elm.node.offsetX, posy-elm.node.offsetY);
42− var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
42+ var node = elm.display === ElmRuntime.Display.FULLSCREEN ? document : elm.node;
44− elm.addListener([isClicked.id, clicks.id], node, 'click', function click() {
44+ elm.addListener([isClicked.id, clicks.id], node, 'click', function click() {
45− elm.notify(isClicked.id, true);
45+ elm.notify(isClicked.id, true);
46− elm.notify(clicks.id, Utils.Tuple0);
46+ elm.notify(clicks.id, Utils.Tuple0);
47− elm.notify(isClicked.id, false);
47+ elm.notify(isClicked.id, false);
49− elm.addListener([isDown.id], node, 'mousedown', function down() {
49+ elm.addListener([isDown.id], node, 'mousedown', function down() {
50− elm.notify(isDown.id, true);
50+ elm.notify(isDown.id, true);
52− elm.addListener([isDown.id], node, 'mouseup', function up() {
52+ elm.addListener([isDown.id], node, 'mouseup', function up() {
53− elm.notify(isDown.id, false);
53+ elm.notify(isDown.id, false);
55− elm.addListener([position.id], node, 'mousemove', function move(e) {
55+ elm.addListener([position.id], node, 'mousemove', function move(e) {
56− elm.notify(position.id, getXY(e));
56+ elm.notify(position.id, getXY(e));
59− return elm.Native.Mouse.values = {
59+ return elm.Native.Mouse.values = {
60− position: position,
60+ position: position,
63− isClicked: isClicked,
63+ isClicked: isClicked,
64− isDown: isDown,
64+ isDown: isDown,
65− clicks: clicks
65+ clicks: clicks