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.
 
 
 
 
 
 

95 lines
2.8 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
  2. // MIT License. See license.txt
  3. wn.ui.form.ScriptManager = Class.extend({
  4. init: function(opts) {
  5. $.extend(this, opts);
  6. },
  7. make: function(ControllerClass) {
  8. this.frm.cscript = $.extend(this.frm.cscript, new ControllerClass({frm: this.frm}));
  9. },
  10. trigger: function(event_name, doctype, name, callback) {
  11. var me = this;
  12. doctype = doctype || this.frm.doctype;
  13. name = name || this.frm.docname;
  14. if(this.frm.cscript[event_name]) {
  15. $.when(this.frm.cscript[event_name](this.frm.doc, doctype, name, callback)).then(function() {
  16. if(me.frm.cscript["custom_" + event_name])
  17. me.frm.cscript["custom_" + event_name](me.frm.doc, doctype, name, callback);
  18. });
  19. } else if(this.frm.cscript["custom_" + event_name]) {
  20. this.frm.cscript["custom_" + event_name](this.frm.doc, doctype, name, callback);
  21. } else if(callback) {
  22. callback();
  23. }
  24. },
  25. setup: function() {
  26. var doctype = this.frm.meta;
  27. // js
  28. var cs = doctype.__js;
  29. if(cs) {
  30. var tmp = eval(cs);
  31. }
  32. // css
  33. doctype.__css && wn.dom.set_style(doctype.__css);
  34. },
  35. log_error: function(caller, e) {
  36. show_alert("Error in Client Script.");
  37. console.group && console.group();
  38. console.log("----- error in client script -----");
  39. console.log("method: " + caller);
  40. console.log(e);
  41. console.log("error message: " + e.message);
  42. console.trace && console.trace();
  43. console.log("----- end of error message -----");
  44. console.group && console.groupEnd();
  45. },
  46. validate_link_and_fetch: function(df, docname, value, callback) {
  47. var me = this;
  48. if(value) {
  49. var fetch = '';
  50. if(this.frm && this.frm.fetch_dict[df.fieldname])
  51. fetch = this.frm.fetch_dict[df.fieldname].columns.join(', ');
  52. return wn.call({
  53. method:'webnotes.widgets.form.utils.validate_link',
  54. type: "GET",
  55. args: {
  56. 'value': value,
  57. 'options': df.options,
  58. 'fetch': fetch
  59. },
  60. no_spinner: true,
  61. callback: function(r) {
  62. if(r.message=='Ok') {
  63. if(r.fetch_values)
  64. me.set_fetch_values(df, docname, r.fetch_values);
  65. if(callback) callback(value);
  66. } else {
  67. if(callback) callback("");
  68. }
  69. }
  70. });
  71. } else if(callback) {
  72. callback(value);
  73. }
  74. },
  75. set_fetch_values: function(df, docname, fetch_values) {
  76. var fl = this.frm.fetch_dict[df.fieldname].fields;
  77. for(var i=0; i < fl.length; i++) {
  78. wn.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype);
  79. }
  80. },
  81. copy_from_first_row: function(parentfield, current_row, fieldnames) {
  82. var doclist = wn.model.get_doclist(this.frm.doc.doctype, this.frm.doc.name, {parentfield: parentfield});
  83. if(doclist.length===1 || doclist[0]===current_row) return;
  84. $.each(fieldnames, function(i, fieldname) {
  85. current_row[fieldname] = doclist[0][fieldname];
  86. });
  87. }
  88. });