// 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) { var req=newHttpReq(); ret_fn=function() { if (checkResponse(req, on_timeout, no_spinner, freeze_msg)) { if(!no_spinner)hide_loading(); // Loaded var rtxt = req.responseText; try { var r = JSON.parse(rtxt); } catch(e) { alert('Handler Exception:' + rtxt); return; } // unfreeze if(freeze_msg)unfreeze(); if(!validate_session(r,rtxt)) return; if(r.exc) { errprint(r.exc); }; if(r.server_messages) { msgprint(r.server_messages);}; if(r.docs) { LocalDB.sync(r.docs); } saveAllowed = true; if(fn)fn(r, rtxt); } } 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!='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) { 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); } // For call a page metho function $c_page(module, page, method, arg, call_back, no_spinner, freeze_msg) { if(arg && !arg.substr) arg = JSON.stringify(arg); $c(module+'.page.'+page+'.'+page+'.'+method,{'arg':arg}, call_back, null, no_spinner, freeze_msg); } // 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); } // For loading a matplotlib Plot function $c_graph(img, control_dt, method, arg) { img.src = outUrl + '?' + makeArgString({cmd:'get_graph', dt:control_dt, method:method, arg:arg}); } 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 } } // For loading javascript file on demand using AJAX function $c_js(fn, callback) { var req=newHttpReq(); ret_fn=function() { if (checkResponse(req, function() { }, 1, null)) { if(req.responseText.substr(0,9)=='Not Found') { alert(req.responseText); return; } hide_loading(); my_eval(req.responseText); callback(); } } req.onreadystatechange=ret_fn; req.open("POST",'cgi-bin/getjsfile.cgi',true); req.setRequestHeader("ENCTYPE", "multipart/form-data"); req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); req.send(makeArgString({filename:fn})); set_loading(); } var load_queue = {}; var currently_loading = {}; var widgets = {}; var single_widgets = {}; // load a widget on demand // -------------------------------------------------------------- function new_widget(widget, callback, single_type) { var namespace = ''; var widget_name = widget; if(widget.search(/\./) != -1) { namespace = widget.split('.')[0]; widget_name = widget.split('.')[1]; } var widget_loaded = function() { currently_loading[widget] = 0; for(var i in load_queue[widget]) { // callback load_queue[widget][i](create_widget()); } // clear the queue load_queue[widget] = []; } var create_widget = function() { if(single_type && single_widgets[widget_name]) return null; if(namespace) var w = new window[namespace][widget_name](); else var w = new window[widget_name](); // add to singles if(single_type) single_widgets[widget_name] = w; return w; } if(namespace ? window[namespace][widget_name] : window[widget_name]) { // loaded? callback(create_widget()); } else { // loading in process if(!load_queue[widget]) load_queue[widget] = []; load_queue[widget].push(callback); // load only if not currently loading if(!currently_loading[widget]) { $c_js(widget_files[widget], widget_loaded); } // flag it as loading currently_loading[widget] = 1; } } 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; } // Resume sessions var resume_dialog = null; function resume_session() { if(!resume_dialog) { var d = new Dialog(400,200,'Session Expired'); d.make_body([ ['Password','password','Re-enter your password to resume the session'], ['Button','Go']]); // check password d.widgets['Go'].onclick = function() { resume_dialog.widgets['Go'].set_working(); var callback = function(r, rt) { resume_dialog.widgets['Go'].done_working(); if(r.message == 'Logged In') { // okay resume_dialog.allow_close=1; resume_dialog.hide(); setTimeout('resume_dialog.allow_close=0',100); } else { // wrong password msgprint('Wrong Password, try again'); resume_dialog.wrong_count++; if(resume_dialog.wrong_count > 2) logout(); } } $c('resume_session',{pwd:resume_dialog.widgets['password'].value},callback) } d.onhide = function() { if(!resume_dialog.allow_close) logout(); } resume_dialog = d; } resume_dialog.wrong_count = 0; resume_dialog.show(); } /** * require is used for on demand loading of JavaScript * * require r1 // 2008.02.05 // jQuery 1.2.2 * * // basic usage (just like .accordion) * $.require("comp1.js"); * * @param jsFiles string array or string holding the js file names to load * @param params object holding parameter like browserType, callback, cache * @return The jQuery object * @author Manish Shanker */ (function($){ $.require = function(jsFiles, params) { var params = params || {}; var bType = params.browserType===false?false:true; if (!bType){ return $; } var cBack = params.callBack || function(){}; var eCache = params.cache===false?false:true; if (!$.require.loadedLib) $.require.loadedLib = {}; if ( !$.scriptPath ) { var path = $('script').attr('src'); $.scriptPath = path.replace(/\w+\.js$/, ''); } if (typeof jsFiles === "string") { jsFiles = new Array(jsFiles); } for (var n=0; n< jsFiles.length; n++) { if (!$.require.loadedLib[jsFiles[n]]) { $.ajax({ type: "GET", url: $.scriptPath + jsFiles[n], success: cBack, dataType: "script", cache: eCache, async: false }); $.require.loadedLib[jsFiles[n]] = true; } } //console.dir($.require.loadedLib); return $; }; })(jQuery);