X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/ff81ee6e8304a1982a3ec4f5b134764a29d502cf..b925718b4bf2dd47a8429f844d0a255ca6e35bd1:/wp-includes/js/tw-sack.js diff --git a/wp-includes/js/tw-sack.js b/wp-includes/js/tw-sack.js index 956b3f07..f93f2a42 100644 --- a/wp-includes/js/tw-sack.js +++ b/wp-includes/js/tw-sack.js @@ -1,133 +1,193 @@ -/* Simple AJAX Code-Kit (SACK) */ +/* Simple AJAX Code-Kit (SACK) v1.6.1 */ /* ©2005 Gregory Wild-Smith */ /* www.twilightuniverse.com */ -/* Software licenced under a modified X11 licence, see documentation or authors website for more details */ +/* Software licenced under a modified X11 licence, + see documentation or authors website for more details */ -function sack(file){ - this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n"; - this.requestFile = file; - this.method = "POST"; - this.URLString = ""; - this.encodeURIString = true; - this.execute = false; +function sack(file) { + this.xmlhttp = null; - this.onLoading = function() { }; - this.onLoaded = function() { }; - this.onInteractive = function() { }; - this.onCompletion = function() { }; + this.resetData = function() { + this.method = "POST"; + this.queryStringSeparator = "?"; + this.argumentSeparator = "&"; + this.URLString = ""; + this.encodeURIString = true; + this.execute = false; + this.element = null; + this.elementObj = null; + this.requestFile = file; + this.vars = new Object(); + this.responseStatus = new Array(2); + }; + + this.resetFunctions = function() { + this.onLoading = function() { }; + this.onLoaded = function() { }; + this.onInteractive = function() { }; + this.onCompletion = function() { }; + this.onError = function() { }; + this.onFail = function() { }; + }; + + this.reset = function() { + this.resetFunctions(); + this.resetData(); + }; this.createAJAX = function() { try { this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { + } catch (e1) { try { this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); - } catch (err) { + } catch (e2) { this.xmlhttp = null; } } - if(!this.xmlhttp && typeof XMLHttpRequest != "undefined") - this.xmlhttp = new XMLHttpRequest(); - if (!this.xmlhttp){ - this.failed = true; + + if (! this.xmlhttp) { + if (typeof XMLHttpRequest != "undefined") { + this.xmlhttp = new XMLHttpRequest(); + } else { + this.failed = true; + } } }; - + this.setVar = function(name, value){ - if (this.URLString.length < 3){ - this.URLString = name + "=" + value; + this.vars[name] = Array(value, false); + }; + + this.encVar = function(name, value, returnvars) { + if (true == returnvars) { + return Array(encodeURIComponent(name), encodeURIComponent(value)); } else { - this.URLString += "&" + name + "=" + value; + this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true); } } - - this.encVar = function(name, value){ - var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value); - return varString; - } - - this.encodeURLString = function(string){ - varArray = string.split('&'); + + this.processURLString = function(string, encode) { + encoded = encodeURIComponent(this.argumentSeparator); + regexp = new RegExp(this.argumentSeparator + "|" + encoded); + varArray = string.split(regexp); for (i = 0; i < varArray.length; i++){ - urlVars = varArray[i].split('='); - if (urlVars[0].indexOf('amp;') != -1){ - urlVars[0] = urlVars[0].substring(4); + urlVars = varArray[i].split("="); + if (true == encode){ + this.encVar(urlVars[0], urlVars[1]); + } else { + this.setVar(urlVars[0], urlVars[1]); } - varArray[i] = this.encVar(urlVars[0],urlVars[1]); } - return varArray.join('&'); } - - this.runResponse = function(){ + + this.createURLString = function(urlstring) { + if (this.encodeURIString && this.URLString.length) { + this.processURLString(this.URLString, true); + } + + if (urlstring) { + if (this.URLString.length) { + this.URLString += this.argumentSeparator + urlstring; + } else { + this.URLString = urlstring; + } + } + + // prevents caching of URLString + this.setVar("rndval", new Date().getTime()); + + urlstringtemp = new Array(); + for (key in this.vars) { + if (false == this.vars[key][1] && true == this.encodeURIString) { + encoded = this.encVar(key, this.vars[key][0], true); + delete this.vars[key]; + this.vars[encoded[0]] = Array(encoded[1], true); + key = encoded[0]; + } + + urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0]; + } + if (urlstring){ + this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator); + } else { + this.URLString += urlstringtemp.join(this.argumentSeparator); + } + } + + this.runResponse = function() { eval(this.response); } - - this.runAJAX = function(urlstring){ - this.responseStatus = new Array(2); - if(this.failed && this.AjaxFailedAlert){ - alert(this.AjaxFailedAlert); + + this.runAJAX = function(urlstring) { + if (this.failed) { + this.onFail(); } else { - if (urlstring){ - if (this.URLString.length){ - this.URLString = this.URLString + "&" + urlstring; - } else { - this.URLString = urlstring; - } - } - if (this.encodeURIString){ - var timeval = new Date().getTime(); - this.URLString = this.encodeURLString(this.URLString); - this.setVar("rndval", timeval); + this.createURLString(urlstring); + if (this.element) { + this.elementObj = document.getElementById(this.element); } - if (this.element) { this.elementObj = document.getElementById(this.element); } if (this.xmlhttp) { var self = this; if (this.method == "GET") { - var totalurlstring = this.requestFile + "?" + this.URLString; + totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString; this.xmlhttp.open(this.method, totalurlstring, true); } else { this.xmlhttp.open(this.method, this.requestFile, true); - } - if (this.method == "POST"){ - try { - this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded') - } catch (e) {} + try { + this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") + } catch (e) { } } - this.xmlhttp.send(this.URLString); this.xmlhttp.onreadystatechange = function() { - switch (self.xmlhttp.readyState){ + switch (self.xmlhttp.readyState) { case 1: self.onLoading(); - break; + break; case 2: self.onLoaded(); - break; + break; case 3: self.onInteractive(); - break; + break; case 4: self.response = self.xmlhttp.responseText; self.responseXML = self.xmlhttp.responseXML; self.responseStatus[0] = self.xmlhttp.status; self.responseStatus[1] = self.xmlhttp.statusText; - self.onCompletion(); - if(self.execute){ self.runResponse(); } + + if (self.execute) { + self.runResponse(); + } + if (self.elementObj) { - var elemNodeName = self.elementObj.nodeName; + elemNodeName = self.elementObj.nodeName; elemNodeName.toLowerCase(); - if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){ + if (elemNodeName == "input" + || elemNodeName == "select" + || elemNodeName == "option" + || elemNodeName == "textarea") { self.elementObj.value = self.response; } else { self.elementObj.innerHTML = self.response; } } + if (self.responseStatus[0] == "200") { + self.onCompletion(); + } else { + self.onError(); + } + self.URLString = ""; - break; + break; } }; + + this.xmlhttp.send(this.URLString); } } }; -this.createAJAX(); -} \ No newline at end of file + + this.reset(); + this.createAJAX(); +}