Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

clientscriptAPI.js 6.9 KiB

11 år sedan
11 år sedan
12 år sedan
12 år sedan
11 år sedan
11 år sedan
11 år sedan
11 år sedan
11 år sedan
11 år sedan
11 år sedan
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. }