diff options
author | Brandon Mathis <brandon@imathis.com> | 2011-06-29 14:01:06 -0400 |
---|---|---|
committer | Brandon Mathis <brandon@imathis.com> | 2011-06-29 14:01:06 -0400 |
commit | ea349cdfbfa4d42110099e49a8ff23f7213cd5b6 (patch) | |
tree | aca4c6c7646207fe295197695b0cf87ee2a46913 /.themes/classic/source/javascripts/libs/jXHR.js | |
parent | ce6621724c8d13530681724528b22e1c381f0dc2 (diff) | |
download | my_new_personal_website-ea349cdfbfa4d42110099e49a8ff23f7213cd5b6.tar.xz my_new_personal_website-ea349cdfbfa4d42110099e49a8ff23f7213cd5b6.zip |
Moved themes to .themes to get it out of the way. Updated Rakefile to support .themes dir and remove duplication. Improved deploy task. Renamed init_deploy to cofig_deploy and rewrote it to update configurations in the Rakefile for easier deploy use
Diffstat (limited to '.themes/classic/source/javascripts/libs/jXHR.js')
-rw-r--r-- | .themes/classic/source/javascripts/libs/jXHR.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/.themes/classic/source/javascripts/libs/jXHR.js b/.themes/classic/source/javascripts/libs/jXHR.js new file mode 100644 index 00000000..6775655c --- /dev/null +++ b/.themes/classic/source/javascripts/libs/jXHR.js @@ -0,0 +1,85 @@ +// 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); + |