@@ -1,61 +1,59 @@
1Elm.Native.Http = {};
1Elm.Native.Http = {};
2Elm.Native.Http.make = function(elm) {
2Elm.Native.Http.make = function(elm) {
4− elm.Native = elm.Native || {};
4+ elm.Native = elm.Native || {};
5− elm.Native.Http = elm.Native.Http || {};
5+ elm.Native.Http = elm.Native.Http || {};
6− if (elm.Native.Http.values) return elm.Native.Http.values;
6+ if (elm.Native.Http.values) return elm.Native.Http.values;
9− var JS = Elm.JavaScript.make(elm);
8+ var JS = Elm.JavaScript.make(elm);
10− var List = Elm.List.make(elm);
9+ var List = Elm.List.make(elm);
11− var Signal = Elm.Signal.make(elm);
10+ var Signal = Elm.Signal.make(elm);
14− function registerReq(queue,responses) { return function(req) {
12+ function registerReq(queue,responses) {
13+ return function(req) {
15− if (req.url.ctor !== '[]') { sendReq(queue,responses,req); }
14+ if (req.url.ctor !== '[]') { sendReq(queue,responses,req); }
19− function updateQueue(queue,responses) {
20− if (queue.length > 0) {
21− elm.notify(responses.id, queue[0].value);
22− if (queue[0].value.ctor !== 'Waiting') {
24− setTimeout(function() { updateQueue(queue,responses); }, 0);
29− function sendReq(queue,responses,req) {
18+ function updateQueue(queue,responses) {
19+ if (queue.length > 0) {
20+ elm.notify(responses.id, queue[0].value);
30− var response = { value: { ctor:'Waiting' } };
21+ if (queue[0].value.ctor !== 'Waiting') {
31− queue.push(response);
22+ queue.shift();
34− if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
35− if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
36− request.onreadystatechange = function(e) {
37− if (request.readyState === 4) {
38− response.value = (request.status >= 200 && request.status < 300 ?
39− { ctor:'Success', _0:JS.toString(request.responseText) } :
40− { ctor:'Failure', _0:request.status, _1:JS.toString(request.statusText) });
41− setTimeout(function() { updateQueue(queue,responses); }, 0);
23+ setTimeout(function() { updateQueue(queue,responses); }, 0);
44− request.open(JS.fromString(req.verb), JS.fromString(req.url), true);
45− function setHeader(pair) {
46− request.setRequestHeader( JS.fromString(pair._0), JS.fromString(pair._1) );
48− List.map(setHeader)(req.headers);
49− request.send(JS.fromString(req.body));
52− function send(requests) {
28+ function sendReq(queue,responses,req) {
53− var responses = Signal.constant(elm.Http.values.Waiting);
29+ var response = { value: { ctor:'Waiting' } };
54− var sender = A2( Signal.lift, registerReq([],responses), requests );
30+ queue.push(response);
55− function f(x) { return function(y) { return x; } }
31+
56− return A3( Signal.lift2, f, responses, sender );
32+ var request = null;
33+ if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
34+ if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
35+ request.onreadystatechange = function(e) {
36+ if (request.readyState === 4) {
37+ response.value = (request.status >= 200 && request.status < 300 ?
38+ { ctor:'Success', _0:JS.toString(request.responseText) } :
39+ { ctor:'Failure', _0:request.status, _1:JS.toString(request.statusText) });
40+ setTimeout(function() { updateQueue(queue,responses); }, 0);
43+ request.open(JS.fromString(req.verb), JS.fromString(req.url), true);
44+ function setHeader(pair) {
45+ request.setRequestHeader( JS.fromString(pair._0), JS.fromString(pair._1) );
47+ List.map(setHeader)(req.headers);
48+ request.send(JS.fromString(req.body));
59− return elm.Native.Http.values = {send:send};
51+ function send(requests) {
52+ var responses = Signal.constant(elm.Http.values.Waiting);
53+ var sender = A2( Signal.lift, registerReq([],responses), requests );
54+ function f(x) { return function(y) { return x; } }
55+ return A3( Signal.lift2, f, responses, sender );
58+ return elm.Native.Http.values = {send:send};