]> git.mxchange.org Git - friendica-addons.git/blobdiff - jappixmini/jappix/js/jxhr.js
jappixmini: include jappix source
[friendica-addons.git] / jappixmini / jappix / js / jxhr.js
diff --git a/jappixmini/jappix/js/jxhr.js b/jappixmini/jappix/js/jxhr.js
new file mode 100644 (file)
index 0000000..deaf511
--- /dev/null
@@ -0,0 +1,116 @@
+// jXHR.js (JSON-P XHR)\r
+// v0.1 (c) Kyle Simpson\r
+// MIT License\r
+// modified by gueron Jonathan to work with strophe lib\r
+// for http://www.iadvize.com\r
+\r
+(function(global){\r
+       var SETTIMEOUT = global.setTimeout, // for better compression\r
+               doc = global.document,\r
+               callback_counter = 0;\r
+               \r
+       global.jXHR = function() {\r
+               var script_url,\r
+                       script_loaded,\r
+                       jsonp_callback,\r
+                       scriptElem,\r
+                       publicAPI = null;\r
+                       \r
+               function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }\r
+                       \r
+               function reset() {\r
+                       script_loaded = false;\r
+                       script_url = "";\r
+                       removeScript();\r
+                       scriptElem = null;\r
+                       fireReadyStateChange(0);\r
+               }\r
+               \r
+               function ThrowError(msg) {\r
+                       try { \r
+                               publicAPI.onerror.call(publicAPI,msg,script_url); \r
+                       } catch (err) { \r
+                               //throw new Error(msg); \r
+                       }\r
+               }\r
+\r
+               function handleScriptLoad() {\r
+                       if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }\r
+                       this.onload = this.onreadystatechange = null; // prevent memory leak\r
+                       script_loaded = true;\r
+                       if (publicAPI.readyState !== 4) ThrowError("handleScriptLoad: Script failed to load ["+script_url+"].");\r
+                       removeScript();\r
+               }\r
+               \r
+               function parseXMLString(xmlStr) {\r
+                       var xmlDoc = null;\r
+                       if(window.DOMParser) {\r
+                               var parser = new DOMParser();\r
+                               xmlDoc = parser.parseFromString(xmlStr,"text/xml");\r
+                       }\r
+                       else {\r
+                               xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); \r
+                               xmlDoc.async="false";\r
+                               xmlDoc.loadXML(xmlStr);\r
+                       }\r
+                       return xmlDoc;\r
+               }\r
+               \r
+               function fireReadyStateChange(rs,args) {\r
+               \r
+                       args = args || [];\r
+                       publicAPI.readyState = rs;\r
+                       if (rs == 4) {\r
+                               publicAPI.responseText = args[0].reply;\r
+                               publicAPI.responseXML = parseXMLString(args[0].reply);\r
+                       }\r
+                       if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);\r
+               }\r
+                               \r
+               publicAPI = {\r
+                       onerror:null,\r
+                       onreadystatechange:null,\r
+                       readyState:0,\r
+                       status:200,\r
+                       responseBody: null,\r
+                       responseText: null,\r
+                       responseXML: null,\r
+                       open:function(method,url){\r
+                               reset();\r
+                               var internal_callback = "cb"+(callback_counter++);\r
+                               (function(icb){\r
+                                       global.jXHR[icb] = function() {\r
+                                               try { fireReadyStateChange.call(publicAPI,4,arguments); } \r
+                                               catch(err) { \r
+                                                       publicAPI.readyState = -1;\r
+                                                       ThrowError("Script failed to run ["+script_url+"]."); \r
+                                               }\r
+                                               global.jXHR[icb] = null;\r
+                                       };\r
+                               })(internal_callback);\r
+                               script_url = url + '?callback=?jXHR&data=';\r
+                               script_url = script_url.replace(/=\?jXHR/,"=jXHR."+internal_callback);\r
+                               fireReadyStateChange(1);\r
+                       },\r
+                       send:function(data){\r
+                               script_url = script_url + encodeURIComponent(data);\r
+                               SETTIMEOUT(function(){\r
+                                       scriptElem = doc.createElement("script");\r
+                                       scriptElem.setAttribute("type","text/javascript");\r
+                                       scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};\r
+                                       scriptElem.setAttribute("src",script_url);\r
+                                       doc.getElementsByTagName("head")[0].appendChild(scriptElem);\r
+                               },0);\r
+                               fireReadyStateChange(2);\r
+                       },\r
+                       abort:function(){},\r
+                       setRequestHeader:function(){}, // noop\r
+                       getResponseHeader:function(){return "";}, // basically noop\r
+                       getAllResponseHeaders:function(){return [];} // ditto\r
+               };\r
+\r
+               reset();\r
+               \r
+               return publicAPI;\r
+       };\r
+})(window);\r