mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
the blog demo works now.
This commit is contained in:
445
clients/js/openresty.js
Normal file
445
clients/js/openresty.js
Normal file
@ -0,0 +1,445 @@
|
||||
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)
|
||||
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)
|
||||
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;
|
||||
})();
|
||||
}
|
Reference in New Issue
Block a user