on master help sign in
Switch module structure to permit on-demand initialization and multiple runtimes working simultaneously.
9084db2evancz
libraries/Native/Signal/HTTP.js → libraries/Native/Signal/Http.jsrenamed+21−16
@@ -1,12 +1,16 @@
1
1
2−/*
2+/**
3import JavaScript
3import JavaScript
4import List
4import List
5import Signal
5import Signal
6−*/
6+**/
7
7
8−(function() {
8+Elm.Native.Signal.Http = function(elm) {
9 'use strict';
9 'use strict';
10+ elm.Native = elm.Native || {};
11+ elm.Native.Signal = elm.Native.Signal || {};
12+ if (elm.Native.Signal.Http) return elm.Native.Signal.Http;
13+
10
14
11 function registerReq(queue,responses) { return function(req) {
15 function registerReq(queue,responses) { return function(req) {
12 if (req.url !== "") { sendReq(queue,responses,req); }
16 if (req.url !== "") { sendReq(queue,responses,req); }
@@ -15,7 +19,7 @@ import Signal
15
19
16 function updateQueue(queue,responses) {
20 function updateQueue(queue,responses) {
17 if (queue.length > 0) {
21 if (queue.length > 0) {
18− Dispatcher.notify(responses.id, queue[0].value);
22+ elm.notify(responses.id, queue[0].value);
19 if (queue[0].value.ctor !== Waiting) {
23 if (queue[0].value.ctor !== Waiting) {
20 queue.shift();
24 queue.shift();
21 setTimeout(function() { updateQueue(queue,responses); }, 0);
25 setTimeout(function() { updateQueue(queue,responses); }, 0);
@@ -24,13 +28,13 @@ import Signal
24 }
28 }
25
29
26 function setHeader(pair) {
30 function setHeader(pair) {
27− request.setRequestHeader(Elm.JavaScript.castStringToJSString(pair._0),
31+ request.setRequestHeader(elm.JavaScript.fomString(pair._0),
28− Elm.JavaScript.castStringToJSString(pair._1));
32+ elm.JavaScript.fromString(pair._1));
29 }
33 }
30
34
31 function sendReq(queue,responses,req) {
35 function sendReq(queue,responses,req) {
32− var JS = Elm.JavaScript;
36+ var JS = elm.JavaScript;
33− var response = { value: Elm.HTTP.Waiting };
37+ var response = { value: elm.Http.Waiting };
34 queue.push(response);
38 queue.push(response);
35
39
36 var request = null;
40 var request = null;
@@ -39,24 +43,25 @@ import Signal
39 request.onreadystatechange = function(e) {
43 request.onreadystatechange = function(e) {
40 if (request.readyState === 4) {
44 if (request.readyState === 4) {
41 response.value = (request.status === 200
45 response.value = (request.status === 200
42− ? Elm.HTTP.Success(JS.castJSStringToString(request.responseText))
46+ ? elm.Http.Success(JS.castJSStringToString(request.responseText))
43− : Elm.HTTP.Failure(request.status)(JS.castJSStringToString(request.statusText)));
47+ : elm.Http.Failure(request.status)(JS.castJSStringToString(request.statusText)));
44 setTimeout(function() { updateQueue(queue,responses); }, 0);
48 setTimeout(function() { updateQueue(queue,responses); }, 0);
45 }
49 }
46 };
50 };
47 request.open(JS.castStringToJSString(req.verb),
51 request.open(JS.castStringToJSString(req.verb),
48 JS.castStringToJSString(req.url),
52 JS.castStringToJSString(req.url),
49 true);
53 true);
50− Elm.List.map(setHeader)(req.headers);
54+ elm.List.map(setHeader)(req.headers);
51 request.send(JS.castStringToJSString(req.body));
55 request.send(JS.castStringToJSString(req.body));
52 }
56 }
53
57
54 function send(requests) {
58 function send(requests) {
55− var responses = Elm.Signal.constant(Elm.HTTP.Waiting);
59+ var responses = elm.Signal.constant(elm.Http.Waiting);
56− var sender = Elm.Signal.lift(registerReq([],responses))(requests);
60+ var sender = elm.Signal.lift(registerReq([],responses))(requests);
57 function f(x) { return function(y) { return x; } }
61 function f(x) { return function(y) { return x; } }
58− return Elm.Signal.lift2(f)(responses)(sender);
62+ return elm.Signal.lift2(f)(responses)(sender);
59 }
63 }
60
64
61− Elm.Native.HTTP = {send:send};
65+ return elm.Native.Signal.Http = {send:send};
66+
62−}());
67+};
libraries/Native/Signal/Keyboard.js+13−9
@@ -1,15 +1,19 @@
1/*
1/*
2−import Signal
3−import Keyboard.Raw
4−import List
5*/
2*/
6
3
7−(function() {
4+Elm.Native.Signal.Keyboard = function(elm) {
8 'use strict';
5 'use strict';
6+ elm.Native = elm.Native || {};
7+ elm.Native.Signal = elm.Native.Signal || {};
8+ if (elm.Native.Signal.Keyboard) return elm.Native.Signal.Keyboard;
9+
10+ var Signal = Elm.Signal(elm);
11+ var KR = Elm.Keyboard.Raw(elm);
12+ var List = Elm.List(elm);
9
13
10 function keySignal(f) {
14 function keySignal(f) {
11− var signal = Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
15+ var signal = Signal.lift(f)(elm.Keyboard.Raw.keysDown);
12− Elm.Keyboard.Raw.keysDown.defaultNumberOfKids += 1;
16+ KR.keysDown.defaultNumberOfKids += 1;
13 signal.defaultNumberOfKids = 0;
17 signal.defaultNumberOfKids = 0;
14 return signal;
18 return signal;
15 }
19 }
@@ -31,8 +35,8 @@ import List
31 return keySignal(f);
35 return keySignal(f);
32 }
36 }
33
37
34− function is(key) { return keySignal(Elm.List.member(key)); }
38+ function is(key) { return keySignal(List.member(key)); }
35
39
36− Elm.Native.Keyboard = { isDown:is, dir:F4(dir) };
40+ return elm.Native.Signal.Keyboard = { isDown:is, dir:F4(dir) };
37
41
38−}());
42+};
libraries/Native/Signal/Mouse.js+48−51
@@ -1,27 +1,27 @@
1−/*
2−import Signal
3−import Native.Misc
4−*/
5
1
6−(function() {
2+Elm.Native.Signal.Mouse = function(elm) {
7 'use strict';
3 'use strict';
4+ elm.Native = elm.Native || {};
5+ elm.Native.Signal = elm.Native.Signal || {};
6+ if (elm.Native.Signal.Mouse) return elm.Native.Signal.Mouse;
8
7
8+ var Signal = Elm.Signal(elm);
9− var Misc = Elm.Native.Misc;
9+ var Misc = Elm.Native.Misc(elm);
10
10
11− var position = Elm.Signal.constant(Misc.Tuple(0,0));
11+ var position = Signal.constant(Misc.Tuple(0,0));
12 position.defaultNumberOfKids = 2;
12 position.defaultNumberOfKids = 2;
13
13
14 // do not get rid of x and y. By setting their default number
14 // do not get rid of x and y. 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 = Elm.Signal.lift(function(p){return p._0})(position);
17+ var x = Signal.lift(function(p){return p._0})(position);
18 x.defaultNumberOfKids = 0;
18 x.defaultNumberOfKids = 0;
19− var y = Elm.Signal.lift(function(p){return p._1})(position);
19+ var y = Signal.lift(function(p){return p._1})(position);
20 y.defaultNumberOfKids = 0;
20 y.defaultNumberOfKids = 0;
21
21
22− var isDown = Elm.Signal.constant(false);
22+ var isDown = Signal.constant(false);
23− var isClicked = Elm.Signal.constant(false);
23+ var isClicked = Signal.constant(false);
24− var clicks = Elm.Signal.constant(Misc.Tuple());
24+ var clicks = Signal.constant(Misc.Tuple0);
25
25
26 function getXY(e) {
26 function getXY(e) {
27 var posx = 0;
27 var posx = 0;
@@ -36,46 +36,43 @@ import Native.Misc
36 posy = e.clientY + document.body.scrollTop +
36 posy = e.clientY + document.body.scrollTop +
37 document.documentElement.scrollTop;
37 document.documentElement.scrollTop;
38 }
38 }
39− return Misc.Tuple(posx, posy);
39+ return Misc.Tuple2(posx, posy);
40 }
40 }
41
41
42− Misc.addListener(document, 'click', function(e) {
42+ function click(e) {
43− var hasListener1 = Dispatcher.notify(isClicked.id, true);
43+ var hasListener1 = elm.notify(isClicked.id, true);
44− var hasListener2 = Dispatcher.notify(clicks.id, Misc.Tuple());
44+ var hasListener2 = elm.notify(clicks.id, Misc.Tuple0);
45− Dispatcher.notify(isClicked.id, false);
45+ elm.notify(isClicked.id, false);
46− if (!hasListener1 && !hasListener2)
46+ if (!hasListener1 && !hasListener2)
47− this.removeEventListener('click',arguments.callee,false);
47+ this.removeEventListener('click',arguments.callee,false);
48− });
48+ }
49− Misc.addListener(document, 'mousedown', function(e) {
49+
50+ function down(e) {
50− var hasListener = Dispatcher.notify(isDown.id, true);
51+ var hasListener = elm.notify(isDown.id, true);
51− if (!hasListener)
52− this.removeEventListener('mousedown',arguments.callee,false);
52+ if (!hasListener) this.removeEventListener('mousedown',arguments.callee,false);
53− });
53+ }
54− Misc.addListener(document, 'mouseup', function(e) {
54+
55+ function up(e) {
55− var hasListener = Dispatcher.notify(isDown.id, false);
56+ var hasListener = elm.notify(isDown.id, false);
56− if (!hasListener)
57− this.removeEventListener('mouseup',arguments.callee,false);
57+ if (!hasListener) this.removeEventListener('mouseup',arguments.callee,false);
58− });
58+ }
59− Misc.addListener(document, 'mousemove', function(e) {
59+
60+ function move(e) {
60− var hasListener = Dispatcher.notify(position.id, getXY(e));
61+ var hasListener = elm.notify(position.id, getXY(e));
61− if (!hasListener)
62− this.removeEventListener('mousemove',arguments.callee,false);
62+ if (!hasListener) this.removeEventListener('mousemove',arguments.callee,false);
63− });
63+ }
64+
65+ Misc.addListener(elm.node, 'click' , click);
66+ Misc.addListener(elm.node, 'mousedown', down);
67+ Misc.addListener(elm.node, 'mouseup' , up);
68+ Misc.addListener(elm.node, 'mousemove', move);
64
69
65− var clickedOn = function(elem) {
70+ return elm.Native.Signal.Mouse = {
66− var node = Render.render(elem);
71+ position: position,
67− var click = Elm.Signal.constant(false);
72+ x:x,
68− Misc.addListener(node, 'click', function(e) {
73+ y:y,
69− Dispatcher.notify(click.id, true);
74+ isClicked: isClicked,
70− Dispatcher.notify(click.id, false);
75+ isDown: isDown,
71− });
76+ clicks: clicks
72− return Misc.Tuple(Misc.wrap(node), click);
73 };
77 };
74− Elm.Native.Mouse = {position: position,
75− x:x,
76− y:y,
77− isClicked: isClicked,
78− isDown: isDown,
79− clicks: clicks,
80− isClickedOn: clickedOn};
81−}());
78+};