2013-02-20 22:36:16 +00:00
|
|
|
|
2013-02-22 23:19:40 +00:00
|
|
|
/*
|
|
|
|
import JavaScript
|
|
|
|
import List
|
|
|
|
import Signal
|
|
|
|
*/
|
|
|
|
|
|
|
|
(function() {
|
|
|
|
'use strict';
|
2013-02-20 22:36:16 +00:00
|
|
|
|
|
|
|
function registerReq(queue,responses) { return function(req) {
|
|
|
|
if (req.url !== "") { sendReq(queue,responses,req); }
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateQueue(queue,responses) {
|
|
|
|
if (queue.length > 0) {
|
|
|
|
Dispatcher.notify(responses.id, queue[0].value);
|
|
|
|
if (queue[0].value.ctor !== Waiting) {
|
|
|
|
queue.shift();
|
|
|
|
setTimeout(function() { updateQueue(queue,responses); }, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function setHeader(pair) {
|
2013-02-21 23:33:53 +00:00
|
|
|
request.setRequestHeader(Elm.JavaScript.castStringToJSString(pair._0),
|
|
|
|
Elm.JavaScript.castStringToJSString(pair._1));
|
2013-02-20 22:36:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function sendReq(queue,responses,req) {
|
2013-02-21 23:33:53 +00:00
|
|
|
var JS = Elm.JavaScript;
|
2013-02-20 22:36:16 +00:00
|
|
|
var response = { value: Elm.HTTP.Waiting };
|
|
|
|
queue.push(response);
|
|
|
|
|
|
|
|
var request = null;
|
|
|
|
if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
|
|
|
|
if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
|
|
|
|
request.onreadystatechange = function(e) {
|
|
|
|
if (request.readyState === 4) {
|
|
|
|
response.value = (request.status === 200
|
2013-02-21 23:33:53 +00:00
|
|
|
? Elm.HTTP.Success(JS.castJSStringToString(request.responseText))
|
|
|
|
: Elm.HTTP.Failure(request.status)(JS.castJSStringToString(request.statusText)));
|
2013-02-20 22:36:16 +00:00
|
|
|
setTimeout(function() { updateQueue(queue,responses); }, 0);
|
|
|
|
}
|
|
|
|
};
|
2013-02-21 23:33:53 +00:00
|
|
|
request.open(JS.castStringToJSString(req.verb),
|
|
|
|
JS.castStringToJSString(req.url),
|
|
|
|
true);
|
2013-02-20 22:36:16 +00:00
|
|
|
Elm.List.map(setHeader)(req.headers);
|
2013-02-21 23:33:53 +00:00
|
|
|
request.send(JS.castStringToJSString(req.body));
|
2013-02-20 22:36:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function send(requests) {
|
|
|
|
var responses = Elm.Signal.constant(Elm.HTTP.Waiting);
|
|
|
|
var sender = Elm.Signal.lift(registerReq([],responses))(requests);
|
|
|
|
function f(x) { return function(y) { return x; } }
|
|
|
|
return Elm.Signal.lift2(f)(responses)(sender);
|
|
|
|
}
|
|
|
|
|
2013-02-21 23:33:53 +00:00
|
|
|
Elm.Native.HTTP = {send:send};
|
2013-02-22 23:19:40 +00:00
|
|
|
}());
|