mirror of
https://github.com/openresty/openresty
synced 2024-11-09 18:35:51 +01:00
446 lines
12 KiB
C
446 lines
12 KiB
C
var console, _log;
|
|
(function(){
|
|
if(typeof console == 'undefined'){
|
|
_log = function(a, b, c){/*alert('' + a + b + c)*/};
|
|
}else{
|
|
_log = function(){
|
|
console.log.apply(console, arguments)
|
|
};
|
|
}
|
|
})();
|
|
|
|
|
|
if (typeof window.OpenResty == "undefined") {
|
|
(function() {
|
|
var undefined;
|
|
var browser = (function(){
|
|
var u = navigator.userAgent.toLowerCase(), a = /(msie|firefox|camino|chrome|opera|safari|netscape|konqueror|lynx)/, b = /(msie|firefox|chrome|opera|safari|camino|netscape|netscape6|konqueror|lynx|version)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/;
|
|
var un = 'unknown', x = 'X', r = {
|
|
name: (a.exec(u) || [un, un])[1]
|
|
};
|
|
r[r.name] = true;
|
|
r.version = (b.exec(u) || [x, x, x, x])[3];
|
|
return r;
|
|
})();
|
|
|
|
var OpenResty = {
|
|
callbackMap: {},
|
|
isDone: {},
|
|
counter: 0
|
|
};
|
|
|
|
OpenResty.Client = function (params) {
|
|
if (params == undefined) params = {};
|
|
this.callback = params.callback;
|
|
var server = params.server;
|
|
if (!/^https?:\/\//.test(server)) {
|
|
server = 'http://' + server;
|
|
}
|
|
this.server = server;
|
|
this.user = params.user;
|
|
//this.password = params.password;
|
|
};
|
|
|
|
var $ClientP = OpenResty.Client.prototype;
|
|
$ClientP.isSuccess = function (res) {
|
|
// alert(JSON.stringify(res));
|
|
return !(typeof res == 'object' && res.errcode);
|
|
};
|
|
|
|
$ClientP.logout = function () {
|
|
this.get('/=/logout');
|
|
};
|
|
|
|
$ClientP.login = function (user, password) {
|
|
this.user = user;
|
|
var userCallback = this.callback;
|
|
if (typeof userCallback == 'string') {
|
|
userCallback = eval(userCallback);
|
|
}
|
|
|
|
var self = this;
|
|
this.callback = function (data) {
|
|
//alert(data.session);
|
|
self.session = data.session;
|
|
userCallback(data);
|
|
};
|
|
if (password == null)
|
|
password = '';
|
|
else
|
|
password = hex_md5(password);
|
|
//this.callback = 'save_session';
|
|
this.get('/=/login/' + user + '/' + password);
|
|
};
|
|
|
|
$ClientP.postByGet = function (url) {
|
|
var args, content;
|
|
if (arguments.length == 3) {
|
|
args = arguments[1];
|
|
content = arguments[2];
|
|
} else {
|
|
content = arguments[1];
|
|
}
|
|
if (!args) args = {};
|
|
url = url.replace(/^\/=\//, '/=/post/');
|
|
content = JSON.stringify(content);
|
|
//alert("type of content: " + typeof(content));
|
|
//alert("content: " + content);
|
|
args._data = content;
|
|
this.get(url, args);
|
|
};
|
|
|
|
$ClientP.genId = (function (n) {
|
|
//return ( Math.random() * 1000000 );
|
|
return function() { return n++ };
|
|
//return this.counter++;
|
|
})(new Date().getTime());
|
|
|
|
/*
|
|
post: for large data transform
|
|
crossdomain ~ y/n
|
|
|
|
_post_by_form({
|
|
form: form,
|
|
url: fullURL,
|
|
content: { data: content },
|
|
preventCache: true,
|
|
method: "post",
|
|
handleAs: 'html',
|
|
handle: function () {
|
|
self.get('/=/last/response/' + args._last_response);
|
|
}
|
|
});
|
|
*/
|
|
|
|
|
|
var _post_forms_div,
|
|
_post_forms = {};
|
|
|
|
OpenResty.Client._post_forms = _post_forms;
|
|
|
|
$ClientP._post_by_form = function (url, content, args) {
|
|
if (!_post_forms_div) {
|
|
_post_forms_div = document.createElement('div');
|
|
var _s = _post_forms_div.style;
|
|
_s.position = 'absolute';
|
|
_s.left = '-1000px';
|
|
_s.width = '500px';
|
|
_s.height = '1px';
|
|
_s.overflow = 'hidden';
|
|
_s = null;
|
|
document.body.appendChild(_post_forms_div);
|
|
}
|
|
|
|
var reqId = args._last_response;
|
|
|
|
if (reqId in _post_forms) {
|
|
throw "the post already exist!!";
|
|
}
|
|
|
|
var self = this;
|
|
var obj = {
|
|
reqId: reqId
|
|
};
|
|
_post_forms[reqId] = obj;
|
|
var submited = false;
|
|
// var onloadCount = 0;
|
|
obj.onload = function() {
|
|
if (!submited) return;
|
|
|
|
// alert('contentLoad ' + (++onloadCount) + ' times\n' + this);
|
|
|
|
var _iframe = obj.iframe;
|
|
|
|
// maybe we can process response under same domain
|
|
|
|
delete obj.onload;
|
|
|
|
_post_forms_div.removeChild(_iframe);
|
|
var _form = obj.form;
|
|
_post_forms_div.removeChild(obj.form);
|
|
|
|
_iframe = null;
|
|
_form = null;
|
|
|
|
delete obj.iframe;
|
|
delete obj.form;
|
|
|
|
delete _post_forms[reqId];
|
|
|
|
obj = null;
|
|
|
|
self.get('/=/last/response/' + reqId);
|
|
};
|
|
|
|
var form_id = 'OpenResty_form_' + reqId,
|
|
iframe_id = 'OpenResty_iframe_' + reqId;
|
|
|
|
var _5 = 'http://ajax.googleapis.com/ajax/libs/dojo/1.3.2/dojo/resources/blank.html';
|
|
|
|
var _iframe;
|
|
var _6 = browser.msie ? '<iframe name="' + iframe_id + '" src="' + _5 + '" onload="OpenResty.Client._post_forms[' + reqId + '].onload();">': "iframe";
|
|
|
|
_iframe = document.createElement(_6);
|
|
|
|
with(_iframe) {
|
|
name = iframe_id;
|
|
setAttribute("name", iframe_id);
|
|
id = iframe_id;
|
|
}
|
|
|
|
if (!browser.msie) {
|
|
_iframe.src = _5;
|
|
_iframe.onload = OpenResty.Client._post_forms[reqId].onload;
|
|
}
|
|
|
|
_post_forms_div.appendChild(_iframe);
|
|
obj.iframe = _iframe;
|
|
|
|
var _form = document.createElement("form");
|
|
|
|
var _22 = _form.getAttributeNode("action");
|
|
var _23 = _form.getAttributeNode("method");
|
|
var _24 = _form.getAttributeNode("target");
|
|
|
|
if (_22) {
|
|
_22.value = url;
|
|
} else {
|
|
_form.setAttribute("action", url);
|
|
}
|
|
|
|
if (_23) {
|
|
_23.value = "post";
|
|
} else {
|
|
_form.setAttribute("method", "post");
|
|
}
|
|
|
|
if (_24) {
|
|
_24.value = iframe_id;
|
|
} else {
|
|
_form.setAttribute("target", iframe_id);
|
|
}
|
|
|
|
_post_forms_div.appendChild(_form);
|
|
obj.form = _form;
|
|
|
|
var _ipt;
|
|
if (browser.msie) {
|
|
_ipt = document.createElement('<input type="hidden" name="data">');
|
|
} else {
|
|
_ipt = document.createElement("input");
|
|
_ipt.name = "data";
|
|
_ipt.type = "hidden";
|
|
}
|
|
_ipt.value = content;
|
|
_form.appendChild(_ipt);
|
|
|
|
_ipt = null;
|
|
|
|
_form.submit();
|
|
submited = true;
|
|
};
|
|
|
|
$ClientP.post = function (url) {
|
|
/*
|
|
if (browser.opera) { // work around an Opera bug
|
|
return $ClientP.postByGet.apply(this, arguments);
|
|
}*/
|
|
|
|
try{
|
|
var args, content;
|
|
if (arguments.length == 3) {
|
|
args = arguments[1];
|
|
content = arguments[2];
|
|
} else {
|
|
content = arguments[1];
|
|
}
|
|
if (!args) args = {};
|
|
//url = url.replace(/^\/=\//, '/=/post/');
|
|
//if (url.match(/\?/)) throw "URL should not contain '?'.";
|
|
if (!this.callback) throw "No callback specified for OpenResty.";
|
|
|
|
// var formId = this.formId;
|
|
// if (!formId) throw "No form specified.";
|
|
|
|
if (this.session) args._session = this.session;
|
|
if (!this.session && !args._user && this.user)
|
|
args._user = this.user;
|
|
|
|
args._last_response = this.genId();
|
|
content = JSON.stringify(content);
|
|
//alert("type of content: " + typeof(content));
|
|
//alert("content: " + content);
|
|
//args.callback = this.callback;
|
|
//args.as_html = 1;
|
|
|
|
var arg_list = new Array();
|
|
for (var key in args) {
|
|
arg_list.push(key + "=" + encodeURIComponent(args[key]));
|
|
}
|
|
//url += "?" + arg_list.join("&");
|
|
|
|
var fullURL = this.server + url;
|
|
if ( /\?$/.test(url) )
|
|
fullURL += arg_list.join("&");
|
|
else if ( /\?/.test(url) )
|
|
fullURL += '&' + arg_list.join("&");
|
|
else
|
|
fullURL += '?' + arg_list.join("&");
|
|
|
|
var self = this;
|
|
//if (browser.opera) { // work around an Opera bug
|
|
//$("#" + formId).html($("#" + formId).html());
|
|
//}
|
|
//
|
|
// var form = document.getElementById(formId);
|
|
// form.method = 'POST';
|
|
|
|
this._post_by_form(fullURL, content, args);
|
|
}catch(ex){alert('error!!!: ' + ex)}
|
|
/*
|
|
var form = document.getElementById('new_model');
|
|
form.action = this.server + url;
|
|
form.method = 'POST';
|
|
form.target = 'blah';
|
|
$("input[@name='data']").val(content);
|
|
form.submit();
|
|
*/
|
|
//this.get(url, args);
|
|
//
|
|
};
|
|
|
|
$ClientP.putByGet = function (url) {
|
|
var args, content;
|
|
if (arguments.length == 3) {
|
|
args = arguments[1];
|
|
content = arguments[2];
|
|
} else {
|
|
content = arguments[1];
|
|
}
|
|
if (!args) args = {};
|
|
url = url.replace(/^\/=\//, '/=/put/');
|
|
content = JSON.stringify(content);
|
|
//alert("type of content: " + typeof(content));
|
|
//alert("content: " + content);
|
|
args._data = content;
|
|
this.get(url, args);
|
|
};
|
|
|
|
$ClientP.put = function (url) {
|
|
//if (browser.opera) { // work around an Opera bug
|
|
//return $ClientP.putByGet.apply(this, arguments);
|
|
//}
|
|
|
|
var args, content;
|
|
if (arguments.length == 3) {
|
|
args = arguments[1];
|
|
content = arguments[2];
|
|
} else {
|
|
content = arguments[1];
|
|
}
|
|
if (!args) args = {};
|
|
url = url.replace(/^\/=\//, '/=/put/');
|
|
//alert("type of content: " + typeof(content));
|
|
//alert("content: " + content);
|
|
this.post(url, args, content);
|
|
};
|
|
|
|
|
|
$ClientP.get = function (url, args) {
|
|
if (!args) args = {};
|
|
if (!this.callback) throw "No callback specified for OpenResty.";
|
|
if (!this.server) throw "No server specified for OpenResty.";
|
|
//if (!this.user) throw "No user specified for OpenResty.";
|
|
|
|
if (this.session) args._session = this.session;
|
|
if (!this.session && !args._user && this.user)
|
|
args._user = this.user;
|
|
|
|
//args.password = this.password || '';
|
|
//if (url.match(/\?/)) throw "URL should not contain '?'.";
|
|
var reqId = this.genId();
|
|
//args._rand = reqId;
|
|
|
|
var onerror = this.onerror || function () { alert("Failed to do GET " + url) };
|
|
|
|
//alert(args._rand);
|
|
//if (!isLogin) args.user = this.user;
|
|
//args.password = this.password;
|
|
var callback = this.callback;
|
|
if (typeof callback == 'string') {
|
|
callback = eval(callback);
|
|
}
|
|
OpenResty.isDone[reqId] = false;
|
|
this.callback = function (res) {
|
|
//debug("In call back! " + reqId);
|
|
OpenResty.isDone[reqId] = true;
|
|
OpenResty.callbackMap[reqId] = null;
|
|
callback(res);
|
|
};
|
|
OpenResty.callbackMap[reqId] = this.callback;
|
|
args._callback = "OpenResty.callbackMap[" + reqId + "]";
|
|
|
|
var headTag = document.getElementsByTagName('head')[0];
|
|
|
|
var scriptTag = document.createElement("script");
|
|
scriptTag.id = "openapiScriptTag" + reqId;
|
|
scriptTag.className = '_openrestyScriptTag';
|
|
var arg_list = new Array();
|
|
for (var key in args) {
|
|
arg_list.push(key + "=" + encodeURIComponent(args[key]));
|
|
}
|
|
|
|
var fullURL = this.server + url;
|
|
if ( /\?$/.test(url) )
|
|
fullURL += arg_list.join("&");
|
|
else if ( /\?/.test(url) )
|
|
fullURL += '&' + arg_list.join("&");
|
|
else
|
|
fullURL += '?' + arg_list.join("&");
|
|
|
|
scriptTag.src = fullURL;
|
|
scriptTag.type = "text/javascript";
|
|
scriptTag.onload = scriptTag.onreadystatechange = function () {
|
|
var done = OpenResty.isDone[reqId];
|
|
if (done) {
|
|
//alert("We're done!");
|
|
setTimeout(function () {
|
|
try {
|
|
headTag.removeChild(scriptTag);
|
|
} catch (e) {}
|
|
}, 0);
|
|
return;
|
|
}
|
|
if (!this.readyState ||
|
|
this.readyState == "loaded" ||
|
|
this.readyState == "complete") {
|
|
setTimeout(function () {
|
|
if (!OpenResty.isDone[reqId]) {
|
|
//alert("reqId: " + reqId);
|
|
//debug("onerror firing... " + reqId);
|
|
onerror();
|
|
OpenResty.isDone[reqId] = true;
|
|
setTimeout(function () {
|
|
try {
|
|
headTag.removeChild(scriptTag);
|
|
} catch (e) {}
|
|
}, 0);
|
|
}
|
|
}, 50);
|
|
}
|
|
};
|
|
setTimeout( function () {
|
|
headTag.appendChild(scriptTag);
|
|
}, 0);
|
|
};
|
|
|
|
$ClientP.del = function (url, args) {
|
|
if (!args) args = {};
|
|
url = url.replace(/^\/=\//, '/=/delete/');
|
|
this.get(url, args);
|
|
};
|
|
|
|
window.OpenResty = OpenResty;
|
|
})();
|
|
}
|