db981a3b27
* This moves our "development" versions from .dev.js to .js (same for css). * The compressed version then moves from .js to .min.js (same for css). By switching to the standard .min convention, it sets expectations for developers, and works nicely with existing tools such as ack. fixes #21633. git-svn-id: https://develop.svn.wordpress.org/trunk@21592 602fd350-edb4-49c9-b593-d223f7449a82
194 lines
4.9 KiB
JavaScript
194 lines
4.9 KiB
JavaScript
/* 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 */
|
|
|
|
function sack(file) {
|
|
this.xmlhttp = null;
|
|
|
|
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 (e1) {
|
|
try {
|
|
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
|
} catch (e2) {
|
|
this.xmlhttp = null;
|
|
}
|
|
}
|
|
|
|
if (! this.xmlhttp) {
|
|
if (typeof XMLHttpRequest != "undefined") {
|
|
this.xmlhttp = new XMLHttpRequest();
|
|
} else {
|
|
this.failed = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
this.setVar = function(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.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
|
|
}
|
|
}
|
|
|
|
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 (true == encode){
|
|
this.encVar(urlVars[0], urlVars[1]);
|
|
} else {
|
|
this.setVar(urlVars[0], urlVars[1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
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) {
|
|
if (this.failed) {
|
|
this.onFail();
|
|
} else {
|
|
this.createURLString(urlstring);
|
|
if (this.element) {
|
|
this.elementObj = document.getElementById(this.element);
|
|
}
|
|
if (this.xmlhttp) {
|
|
var self = this;
|
|
if (this.method == "GET") {
|
|
totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
|
|
this.xmlhttp.open(this.method, totalurlstring, true);
|
|
} else {
|
|
this.xmlhttp.open(this.method, this.requestFile, true);
|
|
try {
|
|
this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
|
} catch (e) { }
|
|
}
|
|
|
|
this.xmlhttp.onreadystatechange = function() {
|
|
switch (self.xmlhttp.readyState) {
|
|
case 1:
|
|
self.onLoading();
|
|
break;
|
|
case 2:
|
|
self.onLoaded();
|
|
break;
|
|
case 3:
|
|
self.onInteractive();
|
|
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;
|
|
|
|
if (self.execute) {
|
|
self.runResponse();
|
|
}
|
|
|
|
if (self.elementObj) {
|
|
elemNodeName = self.elementObj.nodeName;
|
|
elemNodeName.toLowerCase();
|
|
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;
|
|
}
|
|
};
|
|
|
|
this.xmlhttp.send(this.URLString);
|
|
}
|
|
}
|
|
};
|
|
|
|
this.reset();
|
|
this.createAJAX();
|
|
}
|