|
- // Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com)
- //
- // MIT License (MIT)
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the "Software"),
- // to deal in the Software without restriction, including without limitation
- // the rights to use, copy, modify, merge, publish, distribute, sublicense,
- // and/or sell copies of the Software, and to permit persons to whom the
- // Software is furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
-
- // My HTTP Request
-
- var outUrl = "index.cgi";
- var NULL_CHAR = '^\5*';
-
- // check response of HTTP request, only if ready
- function checkResponse(r, on_timeout, no_spinner, freeze_msg) {
- try {
- if (r.readyState==4 && r.status==200) return true; else return false;
- } catch(e) {
- // $i("icon_loading").style.visibility = "hidden"; WAINING MESSAGE
- msgprint("error:Request timed out, try again");
- if(on_timeout)
- on_timeout();
-
- hide_loading();
-
- if(freeze_msg)
- unfreeze();
- return false;
- }
- }
-
- var pending_req = 0;
-
- // new XMLHttpRequest object
- function newHttpReq() {
- if (!isIE)
- var r=new XMLHttpRequest();
- else if (window.ActiveXObject)
- var r=new ActiveXObject("Microsoft.XMLHTTP");
- return r;
- }
-
- // call execute serverside request
- function $c(command, args, fn, on_timeout, no_spinner, freeze_msg, btn) {
- var req=newHttpReq();
- ret_fn=function() {
- if (checkResponse(req, on_timeout, no_spinner, freeze_msg)) {
- if(btn)$(btn).done_working();
- if(!no_spinner)
- hide_loading(); // Loaded
-
- var rtxt = req.responseText;
-
- try {
- var r = JSON.parse(rtxt);
- } catch(e) {
- msgprint('Handler Exception:' + rtxt);
- return;
- }
- // unfreeze
- if(freeze_msg)unfreeze();
-
- if(!validate_session(r,rtxt)) return;
- if(r.exc) {
- errprint(r.exc);
- console.log(r.exc);
- };
- if(r.server_messages) { msgprint(r.server_messages);};
- if(r.docs) { LocalDB.sync(r.docs); }
- saveAllowed = true;
- if(fn)fn(r, rtxt);
- }
- }
- if(btn) $(btn).set_working();
- req.onreadystatechange=ret_fn;
- req.open("POST",outUrl,true);
- req.setRequestHeader("ENCTYPE", "multipart/form-data");
- req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
- args['cmd']=command;
- req.send(makeArgString(args));
- if(!no_spinner)set_loading(); // Loading
- if(freeze_msg)freeze(freeze_msg,1);
- }
-
- function validate_session(r,rt) {
- // check for midway change in session
- if(r.message=='Logged In') {
- start_sid = get_cookie('sid');
- return true;
- }
- if(start_sid && start_sid != get_cookie('sid') && user && user!='Guest') {
- page_body.set_session_changed();
- return;
- }
-
- // check for expired session
- if(r.exc && r.session_status=='Session Expired') {
- resume_session();
- return;
- }
-
- // check for logged out sesion
- if(r.exc && r.session_status=='Logged Out') {
- msgprint('You have been logged out');
- setTimeout('redirect_to_login()', 3000);
- return;
- }
-
- if(r.exc && r.exc_type && r.exc_type=='PermissionError') {
- loadpage('_home');
- }
-
- return true;
- }
-
- // For calling an object
- function $c_obj(doclist, method, arg, call_back, no_spinner, freeze_msg, btn) {
- var args = { 'method':method, 'arg': (typeof arg=='string' ? arg : JSON.stringify(arg)) }
-
- if(typeof doclist=='string') args.doctype = doclist;
- else args.docs = compress_doclist(doclist)
-
- // single
- $c('runserverobj',args, call_back, null, no_spinner, freeze_msg, btn);
- }
-
- // For call a page metho
- function $c_page(module, page, method, arg, call_back, no_spinner, freeze_msg, btn) {
- if(arg && !arg.substr) arg = JSON.stringify(arg);
- $c(module+'.page.'+page+'.'+page+'.'+method,{'arg':arg},
- call_back, null, no_spinner, freeze_msg, btn);
- }
-
- // generic server call (call page, object)
- wn.call = function(args) {
- if(!args.args) args.args = {};
- if(args.module && args.page) {
- $c_page(args.module, args.page, args.method, args.args, args.callback,
- args.no_spinner, false, args.btn);
- } else if(args.docs) {
- $c_obj(args.doc, args.method, args.args, args.callback, args.no_spinner,
- false, args.btn);
- } else {
- $c(args.method, args.args, args.callback, false, args.no_spinner, false, args.btn);
- }
- }
-
-
- // For calling an for output as csv
- function $c_obj_csv(doclist, method, arg) {
- // single
-
- var args = {}
- args.cmd = 'runserverobj';
- args.as_csv = 1;
- args.method = method;
- args.arg = arg;
-
- if(doclist.substr)
- args.doctype = doclist;
- else
- args.docs = compress_doclist(doclist);
-
- // open
- open_url_post(outUrl, args);
- }
-
- function my_eval(co) {
- var w = window;
-
- // Evaluate script
- if (!w.execScript) {
- if (/Gecko/.test(navigator.userAgent)) {
- eval(co, w); // Firefox 3.0
- } else {
- eval.call(w, co);
- }
- } else {
- w.execScript(co); // IE
- }
- }
-
- function makeArgString(dict) {
- var varList = [];
-
- for(key in dict){
- varList[varList.length] = key + '=' + encodeURIComponent(dict[key]);
- }
- return varList.join('&');
- }
-
- // call a url as POST
- function open_url_post(URL, PARAMS, new_window) {
- var temp=document.createElement("form");
- temp.action=URL;
- temp.method="POST";
- temp.style.display="none";
- if(new_window){
- temp.target = '_blank';
- }
- for(var x in PARAMS) {
- var opt=document.createElement("textarea");
- opt.name=x;
- opt.value=PARAMS[x];
- temp.appendChild(opt);
- }
- document.body.appendChild(temp);
- temp.submit();
- return temp;
- }
|