You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

224 line
5.9 KiB

  1. // Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com)
  2. //
  3. // MIT License (MIT)
  4. //
  5. // Permission is hereby granted, free of charge, to any person obtaining a
  6. // copy of this software and associated documentation files (the "Software"),
  7. // to deal in the Software without restriction, including without limitation
  8. // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9. // and/or sell copies of the Software, and to permit persons to whom the
  10. // Software is furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in
  13. // all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  16. // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  17. // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  18. // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
  19. // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  20. // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  21. //
  22. // My HTTP Request
  23. var outUrl = "index.cgi";
  24. var NULL_CHAR = '^\5*';
  25. // check response of HTTP request, only if ready
  26. function checkResponse(r, on_timeout, no_spinner, freeze_msg) {
  27. try {
  28. if (r.readyState==4 && r.status==200) return true; else return false;
  29. } catch(e) {
  30. // $i("icon_loading").style.visibility = "hidden"; WAINING MESSAGE
  31. msgprint("error:Request timed out, try again");
  32. if(on_timeout)
  33. on_timeout();
  34. hide_loading();
  35. if(freeze_msg)
  36. unfreeze();
  37. return false;
  38. }
  39. }
  40. var pending_req = 0;
  41. // new XMLHttpRequest object
  42. function newHttpReq() {
  43. if (!isIE)
  44. var r=new XMLHttpRequest();
  45. else if (window.ActiveXObject)
  46. var r=new ActiveXObject("Microsoft.XMLHTTP");
  47. return r;
  48. }
  49. // call execute serverside request
  50. function $c(command, args, fn, on_timeout, no_spinner, freeze_msg, btn) {
  51. var req=newHttpReq();
  52. ret_fn=function() {
  53. if (checkResponse(req, on_timeout, no_spinner, freeze_msg)) {
  54. if(btn)$(btn).done_working();
  55. if(!no_spinner)
  56. hide_loading(); // Loaded
  57. var rtxt = req.responseText;
  58. try {
  59. var r = JSON.parse(rtxt);
  60. } catch(e) {
  61. msgprint('Handler Exception:' + rtxt);
  62. return;
  63. }
  64. // unfreeze
  65. if(freeze_msg)unfreeze();
  66. if(!validate_session(r,rtxt)) return;
  67. if(r.exc) {
  68. errprint(r.exc);
  69. console.log(r.exc);
  70. };
  71. if(r.server_messages) { msgprint(r.server_messages);};
  72. if(r.docs) { LocalDB.sync(r.docs); }
  73. saveAllowed = true;
  74. if(fn)fn(r, rtxt);
  75. }
  76. }
  77. if(btn) $(btn).set_working();
  78. req.onreadystatechange=ret_fn;
  79. req.open("POST",outUrl,true);
  80. req.setRequestHeader("ENCTYPE", "multipart/form-data");
  81. req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  82. args['cmd']=command;
  83. req.send(makeArgString(args));
  84. if(!no_spinner)set_loading(); // Loading
  85. if(freeze_msg)freeze(freeze_msg,1);
  86. }
  87. function validate_session(r,rt) {
  88. // check for midway change in session
  89. if(r.message=='Logged In') {
  90. start_sid = get_cookie('sid');
  91. return true;
  92. }
  93. if(start_sid && start_sid != get_cookie('sid') && user && user!='Guest') {
  94. page_body.set_session_changed();
  95. return;
  96. }
  97. // check for expired session
  98. if(r.exc && r.session_status=='Session Expired') {
  99. resume_session();
  100. return;
  101. }
  102. // check for logged out sesion
  103. if(r.exc && r.session_status=='Logged Out') {
  104. msgprint('You have been logged out');
  105. setTimeout('redirect_to_login()', 3000);
  106. return;
  107. }
  108. if(r.exc && r.exc_type && r.exc_type=='PermissionError') {
  109. loadpage('_home');
  110. }
  111. return true;
  112. }
  113. // For calling an object
  114. function $c_obj(doclist, method, arg, call_back, no_spinner, freeze_msg, btn) {
  115. var args = { 'method':method, 'arg': (typeof arg=='string' ? arg : JSON.stringify(arg)) }
  116. if(typeof doclist=='string') args.doctype = doclist;
  117. else args.docs = compress_doclist(doclist)
  118. // single
  119. $c('runserverobj',args, call_back, null, no_spinner, freeze_msg, btn);
  120. }
  121. // For call a page metho
  122. function $c_page(module, page, method, arg, call_back, no_spinner, freeze_msg, btn) {
  123. if(arg && !arg.substr) arg = JSON.stringify(arg);
  124. $c(module+'.page.'+page+'.'+page+'.'+method,{'arg':arg},
  125. call_back, null, no_spinner, freeze_msg, btn);
  126. }
  127. // generic server call (call page, object)
  128. wn.call = function(args) {
  129. if(!args.args) args.args = {};
  130. if(args.module && args.page) {
  131. $c_page(args.module, args.page, args.method, args.args, args.callback,
  132. args.no_spinner, false, args.btn);
  133. } else if(args.docs) {
  134. $c_obj(args.doc, args.method, args.args, args.callback, args.no_spinner,
  135. false, args.btn);
  136. } else {
  137. $c(args.method, args.args, args.callback, false, args.no_spinner, false, args.btn);
  138. }
  139. }
  140. // For calling an for output as csv
  141. function $c_obj_csv(doclist, method, arg) {
  142. // single
  143. var args = {}
  144. args.cmd = 'runserverobj';
  145. args.as_csv = 1;
  146. args.method = method;
  147. args.arg = arg;
  148. if(doclist.substr)
  149. args.doctype = doclist;
  150. else
  151. args.docs = compress_doclist(doclist);
  152. // open
  153. open_url_post(outUrl, args);
  154. }
  155. function my_eval(co) {
  156. var w = window;
  157. // Evaluate script
  158. if (!w.execScript) {
  159. if (/Gecko/.test(navigator.userAgent)) {
  160. eval(co, w); // Firefox 3.0
  161. } else {
  162. eval.call(w, co);
  163. }
  164. } else {
  165. w.execScript(co); // IE
  166. }
  167. }
  168. function makeArgString(dict) {
  169. var varList = [];
  170. for(key in dict){
  171. varList[varList.length] = key + '=' + encodeURIComponent(dict[key]);
  172. }
  173. return varList.join('&');
  174. }
  175. // call a url as POST
  176. function open_url_post(URL, PARAMS, new_window) {
  177. var temp=document.createElement("form");
  178. temp.action=URL;
  179. temp.method="POST";
  180. temp.style.display="none";
  181. if(new_window){
  182. temp.target = '_blank';
  183. }
  184. for(var x in PARAMS) {
  185. var opt=document.createElement("textarea");
  186. opt.name=x;
  187. opt.value=PARAMS[x];
  188. temp.appendChild(opt);
  189. }
  190. document.body.appendChild(temp);
  191. temp.submit();
  192. return temp;
  193. }