您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

157 行
3.9 KiB

  1. _f.FrmContainer = function() {
  2. this.wrapper = page_body.add_page("Forms", function() {}, function() { });
  3. this.last_displayed = null;
  4. // create hidden
  5. $dh(this.wrapper);
  6. this.body = $a(this.wrapper,'div','frm_container');
  7. // make by twin
  8. _f.frm_dialog = new _f.FrmDialog();
  9. }
  10. // FrmDialog - twin of FrmContainer
  11. // =======================================================================
  12. _f.frm_dialog = null;
  13. _f.calling_doc_stack = [];
  14. _f.temp_access = {};
  15. _f.FrmDialog = function() {
  16. var me = this;
  17. this.last_displayed = null;
  18. var d = new Dialog(640, null, 'Edit Row');
  19. this.body = $a(d.body, 'div', 'dialog_frm');
  20. $y(d.body, {backgroundColor:'#EEE'});
  21. d.done_btn_area = $a(d.body, 'div', '', {margin:'8px'});
  22. // done button
  23. me.on_complete = function() {
  24. if(me.table_form) {
  25. // table form, just hide the dialog (saving will be done with the parent)
  26. me.dialog.hide();
  27. } else {
  28. // form in dialog, so save it
  29. var callback = function(r) {
  30. var dn = cur_frm.docname;
  31. if(!r.exc) {
  32. // check if there is another dialog open?
  33. me.dialog.hide();
  34. }
  35. // callback
  36. if(me.on_save_callback)
  37. me.on_save_callback(dn);
  38. }
  39. cur_frm.save('Save', callback);
  40. }
  41. }
  42. // set title onshow
  43. // -------------------------------------------
  44. d.onshow = function() {
  45. // set the dialog title
  46. d.done_btn_area.innerHTML = '';
  47. d.done_btn = $btn(d.done_btn_area, 'Save', null, null, 'green');
  48. d.done_btn.onclick = function() { me.on_complete() };
  49. if(me.table_form) {
  50. d.set_title("Editing Row #" + (_f.cur_grid_ridx+1));
  51. d.done_btn.innerHTML = 'Done Editing';
  52. } else {
  53. d.set_title(cur_frm.doctype==cur_frm.doctype ? (cur_frm.doctype) : (cur_frm.doctype + ': ' + cur_frm.docname));
  54. d.done_btn.innerHTML = 'Save';
  55. }
  56. }
  57. // on hide, refresh grid or call onsave
  58. // -------------------------------------------
  59. d.onhide = function() {
  60. // if called from grid, refresh the row
  61. if(_f.cur_grid)
  62. _f.cur_grid.refresh_row(_f.cur_grid_ridx, me.dn);
  63. // set the new global cur_frm (if applicable)
  64. if(page_body.cur_page_label = 'Forms') {
  65. cur_frm = _f.frm_con.cur_frm;
  66. }
  67. }
  68. this.dialog = d;
  69. }
  70. // Form Factory
  71. // =======================================================================
  72. _f.add_frm = function(doctype, onload, opt_name, from_archive) {
  73. // dont open doctype and docname from the same session
  74. if(frms['DocType'] && frms['DocType'].opendocs[doctype]) {
  75. msgprint("error:Cannot create an instance of \"" + doctype+ "\" when the DocType is open.");
  76. return;
  77. }
  78. // form already created, done
  79. if(frms[doctype]) {
  80. return frms[doctype];
  81. }
  82. // Load Doctype from server
  83. var callback = function(r,rt) {
  84. page_body.set_status('Done')
  85. if(!locals['DocType'][doctype]) {
  86. if(r.exc) { msgprint("Did not load " + doctype, 1); }
  87. loadpage('_home');
  88. return;
  89. }
  90. if(r.print_access) {
  91. if(!_f.temp_access[doctype])
  92. _f.temp_access[doctype] = {};
  93. _f.temp_access[doctype][opt_name] = 1;
  94. }
  95. // show fullpage or in Dialog?
  96. var meta = locals['DocType'][doctype];
  97. var in_dialog = false;
  98. // if is table, its in the Dialog!
  99. if(meta.istable) meta.in_dialog = 1;
  100. if(cint(meta.in_dialog)) {
  101. var parent = _f.frm_dialog;
  102. in_dialog = true;
  103. } else {
  104. var parent = _f.frm_con;
  105. }
  106. // create the object
  107. var f = new _f.Frm(doctype, parent);
  108. f.in_dialog = in_dialog;
  109. if(onload)onload(r,rt);
  110. }
  111. // check if record is new (called from mapper etc)
  112. var is_new = 0;
  113. if(opt_name && locals[doctype] && locals[doctype][opt_name] && locals[doctype][opt_name].__islocal) {
  114. is_new = 1;
  115. }
  116. if(opt_name && !is_new) {
  117. // get both
  118. var args = {'name':opt_name, 'doctype':doctype, 'getdoctype':1, 'user':user};
  119. if(get_url_arg('akey')) args['akey'] = get_url_arg('akey');
  120. if(from_archive) args['from_archive'] = 1;
  121. $c('webnotes.widgets.form.getdoc', args, callback);
  122. } else {
  123. // get doctype only
  124. $c('webnotes.widgets.form.getdoctype', args={'doctype':doctype}, callback);
  125. }
  126. }