diff options
author | Daan Debie <daan.debie@info.nl> | 2013-08-23 00:44:51 +0200 |
---|---|---|
committer | Daan Debie <daan.debie@info.nl> | 2013-08-23 00:44:51 +0200 |
commit | 5d9619c81b1ccccf71340aae544a66f62c103f64 (patch) | |
tree | 18600bed40dfaebc439ae2a4b48b18336989059b /pelican-bootstrap3/static/js/jXHR.js | |
parent | 543532ce68ac584ab33102adab578bf63e98ca42 (diff) | |
download | pelican-themes-5d9619c81b1ccccf71340aae544a66f62c103f64.tar.gz |
Added pelican-bootstrap3 theme
Diffstat (limited to 'pelican-bootstrap3/static/js/jXHR.js')
-rw-r--r-- | pelican-bootstrap3/static/js/jXHR.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/pelican-bootstrap3/static/js/jXHR.js b/pelican-bootstrap3/static/js/jXHR.js new file mode 100644 index 0000000..44fc65c --- /dev/null +++ b/pelican-bootstrap3/static/js/jXHR.js @@ -0,0 +1,84 @@ +// jXHR.js (JSON-P XHR) +// v0.1 (c) Kyle Simpson +// MIT License + +(function(global){ + var SETTIMEOUT = global.setTimeout, // for better compression + doc = global.document, + callback_counter = 0; + + global.jXHR = function() { + var script_url, + script_loaded, + jsonp_callback, + scriptElem, + publicAPI = null; + + function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } } + + function reset() { + script_loaded = false; + script_url = ""; + removeScript(); + scriptElem = null; + fireReadyStateChange(0); + } + + function ThrowError(msg) { + try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); } + } + + function handleScriptLoad() { + if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; } + this.onload = this.onreadystatechange = null; // prevent memory leak + script_loaded = true; + if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"]."); + removeScript(); + } + + function fireReadyStateChange(rs,args) { + args = args || []; + publicAPI.readyState = rs; + if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args); + } + + publicAPI = { + onerror:null, + onreadystatechange:null, + readyState:0, + open:function(method,url){ + reset(); + internal_callback = "cb"+(callback_counter++); + (function(icb){ + global.jXHR[icb] = function() { + try { fireReadyStateChange.call(publicAPI,4,arguments); } + catch(err) { + publicAPI.readyState = -1; + ThrowError("Script failed to run ["+script_url+"]."); + } + global.jXHR[icb] = null; + }; + })(internal_callback); + script_url = url.replace(/=\?/,"=jXHR."+internal_callback); + fireReadyStateChange(1); + }, + send:function(){ + SETTIMEOUT(function(){ + scriptElem = doc.createElement("script"); + scriptElem.setAttribute("type","text/javascript"); + scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);}; + scriptElem.setAttribute("src",script_url); + doc.getElementsByTagName("head")[0].appendChild(scriptElem); + },0); + fireReadyStateChange(2); + }, + setRequestHeader:function(){}, // noop + getResponseHeader:function(){return "";}, // basically noop + getAllResponseHeaders:function(){return [];} // ditto + }; + + reset(); + + return publicAPI; + }; +})(window); |