Totally redo the HTTP API. Get rid of Maybe
in types because the signal filtering functions make them unnecessary. Make requests more flexible with the request
function which lets you set the type, url, data, and set request headers.
This commit is contained in:
parent
6a4cf28866
commit
f4344dcb59
1 changed files with 55 additions and 50 deletions
|
@ -182,57 +182,62 @@ var Signal = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
var HTTP = function() {
|
var HTTP = function() {
|
||||||
var fetch = function(how) { return function(url) {
|
|
||||||
var thread = Elm.Input(["Waiting"]);
|
function request(verb) { return function(url) { return function(data) {
|
||||||
var request = {};
|
return function(headers) {
|
||||||
if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
|
return {0 : "Request",
|
||||||
else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
|
length : 1,
|
||||||
request.onreadystatechange = function(e) {
|
verb : Foreign.JavaScript.castStringToJSString(verb),
|
||||||
if (request.readyState === 4) {
|
url : Foreign.JavaScript.castStringToJSString(url),
|
||||||
Dispatcher.notify(thread.id,
|
data : data === null ? null : Foreign.JavaScript.castStringToJSString(data),
|
||||||
request.status === 200
|
headers : headers }; }; }; };
|
||||||
? ["Success", toElmString(request.responseText)]
|
}
|
||||||
: ["Failure", request.status, toElmString(request.statusText)]);
|
function get(url) { return request("GET")(url)(null)(["Nil"]); }
|
||||||
}
|
function post(url) { return function(data) {
|
||||||
};
|
return request("POST")(url)(data)(["Nil"]); }; }
|
||||||
request.open(how, Value.toText(url), true);
|
|
||||||
request.send(null);
|
function sendReq(responses) { return function(req) {
|
||||||
return thread;
|
Dispatcher.notify(responses.id,["Waiting"]);
|
||||||
};
|
var request = null;
|
||||||
|
if (window.XMLHttpRequest) {
|
||||||
|
request = new XMLHttpRequest();
|
||||||
|
} else if (window.ActiveXObject) {
|
||||||
|
request = new ActiveXObject("Microsoft.XMLHTTP");
|
||||||
|
}
|
||||||
|
request.onreadystatechange = function(e) {
|
||||||
|
if (request.readyState === 4) {
|
||||||
|
Dispatcher.notify(
|
||||||
|
responses.id,
|
||||||
|
request.status === 200
|
||||||
|
? ["Success", toElmString(request.responseText)]
|
||||||
|
: ["Failure", request.status, toElmString(request.statusText)]);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
var fetches = function(how) { return function(input) {
|
request.open(req.verb, req.url, true);
|
||||||
var output = Elm.Input(["Nothing"]);
|
List.map(function(pair) {
|
||||||
var fetcher = Elm.Lift(update, [input]);
|
request.setRequestHeader(
|
||||||
var combine = Elm.Lift(function(x) { return function(y) { return x; } }, [output,fetcher]);
|
Foreign.JavaScript.castStringToJSString(pair[1]),
|
||||||
function update(strOpt) {
|
Foreign.JavaScript.castStringToJSString(pair[2]));
|
||||||
if (strOpt[0] !== "Just") {
|
})(req.headers);
|
||||||
try { Dispatcher.notify(output.id, ["Nothing"]); } catch(e) {}
|
request.send(req.data);
|
||||||
return [];
|
return null;
|
||||||
}
|
};
|
||||||
try {
|
}
|
||||||
Dispatcher.notify(output.id, ["Just", ["Waiting"]]);
|
|
||||||
} catch(e) { output.value = ["Just", ["Waiting"]]; }
|
function send(requests) {
|
||||||
var request = {};
|
var responses = Elm.Input(["Waiting"]);
|
||||||
if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
|
var sender = Elm.Lift(sendReq(responses), [requests]);
|
||||||
else if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); }
|
var combine = Elm.Lift(function(x){return function(y){return x;}},
|
||||||
request.onreadystatechange = function(e) {
|
[responses,sender]);
|
||||||
if (request.readyState === 4) {
|
return combine;
|
||||||
Dispatcher.notify(output.id,
|
}
|
||||||
["Just", request.status === 200
|
|
||||||
? ["Success", toElmString(request.responseText)]
|
return {get : get,
|
||||||
: ["Failure", request.status, toElmString(request.statusText)]]);
|
post : post,
|
||||||
}
|
request : request,
|
||||||
};
|
send : send,
|
||||||
request.open(how, Value.toText(strOpt[1]), true);
|
sendGet : function(urls){return send(Elm.Lift(get,[urls]));}
|
||||||
request.send(null);
|
};
|
||||||
return [];
|
|
||||||
}
|
|
||||||
return combine;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return {get : fetch("GET"), post : fetch("POST"),
|
|
||||||
gets : fetches("GET"), posts : fetches("POST")
|
|
||||||
};
|
|
||||||
}();
|
}();
|
||||||
var Random = function() {
|
var Random = function() {
|
||||||
var inRange = function(min) { return function(max) {
|
var inRange = function(min) { return function(max) {
|
||||||
|
|
Loading…
Reference in a new issue