aboutsummaryrefslogtreecommitdiffstats
path: root/pelican-bootstrap3/static/js/jXHR.js
diff options
context:
space:
mode:
authorDaan Debie <daan.debie@info.nl>2013-08-23 00:44:51 +0200
committerDaan Debie <daan.debie@info.nl>2013-08-23 00:44:51 +0200
commit5d9619c81b1ccccf71340aae544a66f62c103f64 (patch)
tree18600bed40dfaebc439ae2a4b48b18336989059b /pelican-bootstrap3/static/js/jXHR.js
parent543532ce68ac584ab33102adab578bf63e98ca42 (diff)
downloadpelican-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.js84
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);