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.

clientscriptAPI.js 6.9 KiB

11 years ago
11 years ago
12 years ago
12 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. get_server_fields = function(method, arg, table_field, doc, dt, dn, allow_edit, call_back) {
  4. wn.dom.freeze();
  5. return $c('runserverobj',
  6. args={'method':method,
  7. 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name)),
  8. 'arg':arg
  9. },
  10. function(r, rt) {
  11. wn.dom.unfreeze();
  12. if (r.message) {
  13. var d = locals[dt][dn];
  14. var field_dict = r.message;
  15. for(var key in field_dict) {
  16. d[key] = field_dict[key];
  17. if (table_field)
  18. refresh_field(key, d.name, table_field);
  19. else
  20. refresh_field(key);
  21. }
  22. }
  23. if(call_back){
  24. doc = locals[doc.doctype][doc.name];
  25. call_back(doc, dt, dn);
  26. }
  27. }
  28. );
  29. }
  30. set_multiple = function (dt, dn, dict, table_field) {
  31. var d = locals[dt][dn];
  32. for(var key in dict) {
  33. d[key] = dict[key];
  34. if (table_field)
  35. refresh_field(key, d.name, table_field);
  36. else
  37. refresh_field(key);
  38. }
  39. }
  40. refresh_many = function (flist, dn, table_field) {
  41. for(var i in flist) {
  42. if (table_field)
  43. refresh_field(flist[i], dn, table_field);
  44. else
  45. refresh_field(flist[i]);
  46. }
  47. }
  48. set_field_tip = function(n,txt) {
  49. var df = wn.meta.get_docfield(cur_frm.doctype, n, cur_frm.docname);
  50. if(df)df.description = txt;
  51. if(cur_frm && cur_frm.fields_dict) {
  52. if(cur_frm.fields_dict[n])
  53. cur_frm.fields_dict[n].comment_area.innerHTML = replace_newlines(txt);
  54. else
  55. console.log('[set_field_tip] Unable to set field tip: ' + n);
  56. }
  57. }
  58. refresh_field = function(n, docname, table_field) {
  59. // multiple
  60. if(typeof n==typeof [])
  61. refresh_many(n, docname, table_field);
  62. if(table_field && cur_frm.fields_dict[table_field].grid.grid_rows_by_docname) { // for table
  63. cur_frm.fields_dict[table_field].grid.grid_rows_by_docname[docname].refresh_field(n);
  64. } else if(cur_frm) {
  65. cur_frm.refresh_field(n)
  66. }
  67. }
  68. set_field_options = function(n, txt) {
  69. cur_frm.set_df_property(n, 'options', txt)
  70. }
  71. set_field_permlevel = function(n, level) {
  72. cur_frm.set_df_property(n, 'permlevel', level)
  73. }
  74. toggle_field = function(n, hidden) {
  75. var df = wn.meta.get_docfield(cur_frm.doctype, n, cur_frm.docname);
  76. if(df) {
  77. df.hidden = hidden;
  78. refresh_field(n);
  79. }
  80. else {
  81. console.log((hidden ? "hide_field" : "unhide_field") + " cannot find field " + n);
  82. }
  83. }
  84. hide_field = function(n) {
  85. if(cur_frm) {
  86. if(n.substr) toggle_field(n, 1);
  87. else { for(var i in n) toggle_field(n[i], 1) }
  88. }
  89. }
  90. unhide_field = function(n) {
  91. if(cur_frm) {
  92. if(n.substr) toggle_field(n, 0);
  93. else { for(var i in n) toggle_field(n[i], 0) }
  94. }
  95. }
  96. get_field_obj = function(fn) {
  97. return cur_frm.fields_dict[fn];
  98. }
  99. // set missing values in given doc
  100. set_missing_values = function(doc, dict) {
  101. // dict contains fieldname as key and "default value" as value
  102. var fields_to_set = {};
  103. $.each(dict, function(i, v) { if (!doc[i]) { fields_to_set[i] = v; } });
  104. if (fields_to_set) { set_multiple(doc.doctype, doc.name, fields_to_set); }
  105. }
  106. _f.Frm.prototype.get_doc = function() {
  107. return locals[this.doctype][this.docname];
  108. }
  109. _f.Frm.prototype.get_doclist = function(filters) {
  110. return wn.model.get_doclist(this.doctype, this.docname, filters);
  111. }
  112. _f.Frm.prototype.field_map = function(fnames, fn) {
  113. if(typeof fnames==='string') {
  114. if(fnames == '*') {
  115. fnames = keys(this.fields_dict);
  116. } else {
  117. fnames = [fnames];
  118. }
  119. }
  120. $.each(fnames, function(i,fieldname) {
  121. //var field = cur_frm.fields_dict[f]; - much better design
  122. var field = wn.meta.get_docfield(cur_frm.doctype, fieldname, cur_frm.docname);
  123. if(field) {
  124. fn(field);
  125. cur_frm.refresh_field(fieldname);
  126. };
  127. })
  128. }
  129. _f.Frm.prototype.set_df_property = function(fieldname, property, value) {
  130. var field = wn.meta.get_docfield(cur_frm.doctype, fieldname, cur_frm.docname)
  131. if(field) {
  132. field[property] = value;
  133. cur_frm.refresh_field(fieldname);
  134. };
  135. }
  136. _f.Frm.prototype.toggle_enable = function(fnames, enable) {
  137. cur_frm.field_map(fnames, function(field) {
  138. field.read_only = enable ? 0 : 1; });
  139. }
  140. _f.Frm.prototype.toggle_reqd = function(fnames, mandatory) {
  141. cur_frm.field_map(fnames, function(field) { field.reqd = mandatory ? true : false; });
  142. }
  143. _f.Frm.prototype.toggle_display = function(fnames, show) {
  144. cur_frm.field_map(fnames, function(field) { field.hidden = show ? 0 : 1; });
  145. }
  146. _f.Frm.prototype.call_server = function(method, args, callback) {
  147. return $c_obj(cur_frm.get_doclist(), method, args, callback);
  148. }
  149. _f.Frm.prototype.get_files = function() {
  150. return cur_frm.attachments
  151. ? keys(cur_frm.attachments.get_attachments()).sort()
  152. : [] ;
  153. }
  154. _f.Frm.prototype.set_query = function(fieldname, opt1, opt2) {
  155. var func = (typeof opt1=="function") ? opt1 : opt2;
  156. if(opt2) {
  157. this.fields_dict[opt1].grid.get_field(fieldname).get_query = func;
  158. } else {
  159. this.fields_dict[fieldname].get_query = func;
  160. }
  161. }
  162. _f.Frm.prototype.set_value_if_missing = function(field, value) {
  163. this.set_value(field, value, true);
  164. }
  165. _f.Frm.prototype.set_value = function(field, value, if_missing) {
  166. var me = this;
  167. var _set = function(f, v) {
  168. var fieldobj = me.fields_dict[f];
  169. if(fieldobj) {
  170. if(!if_missing || !wn.model.has_value(me.doctype, me.doc.name, f)) {
  171. if(fieldobj.df.fieldtype==="Table" && $.isArray(v)) {
  172. wn.model.clear_table(fieldobj.df.options, me.doctype,
  173. me.doc.name, fieldobj.df.fieldname);
  174. $.each(v, function(i, d) {
  175. var child = wn.model.add_child(me.doc, fieldobj.df.options,
  176. fieldobj.df.fieldname, i+1);
  177. $.extend(child, d);
  178. });
  179. me.refresh_field(f);
  180. } else {
  181. wn.model.set_value(me.doctype, me.doc.name, f, v);
  182. }
  183. }
  184. }
  185. }
  186. if(typeof field=="string") {
  187. _set(field, value)
  188. } else if($.isPlainObject(field)) {
  189. $.each(field, function(f, v) {
  190. _set(f, v);
  191. })
  192. }
  193. }
  194. _f.Frm.prototype.call = function(opts) {
  195. var me = this;
  196. if(!opts.doc) {
  197. if(opts.method.indexOf(".")===-1)
  198. opts.method = wn.model.get_server_module_name(me.doctype) + "." + opts.method;
  199. opts.original_callback = opts.callback;
  200. opts.callback = function(r) {
  201. if($.isPlainObject(r.message)) {
  202. if(opts.child) {
  203. // update child doc
  204. opts.child = locals[opts.child.doctype][opts.child.name];
  205. $.extend(opts.child, r.message);
  206. me.fields_dict[opts.child.parentfield].refresh();
  207. } else {
  208. // update parent doc
  209. me.set_value(r.message);
  210. }
  211. }
  212. opts.original_callback && opts.original_callback(r);
  213. }
  214. } else {
  215. opts.original_callback = opts.callback;
  216. opts.callback = function(r) {
  217. if(!r.exc) me.refresh_fields();
  218. opts.original_callback && opts.original_callback(r);
  219. }
  220. }
  221. return wn.call(opts);
  222. }
  223. _f.Frm.prototype.get_field = function(field) {
  224. return cur_frm.fields_dict[field];
  225. };
  226. _f.Frm.prototype.new_doc = function(doctype, field) {
  227. wn._from_link = field; wn._from_link_scrollY = scrollY;
  228. new_doc(doctype);
  229. }
  230. _f.Frm.prototype.set_read_only = function() {
  231. var perm = [];
  232. $.each(wn.perm.get_perm(cur_frm.doc.doctype, cur_frm.doc.name), function(i, permlevel) {
  233. if(permlevel!=null) perm[permlevel] = {read:1};
  234. });
  235. cur_frm.perm = perm;
  236. }