_f.FrmContainer = function() { this.wrapper = page_body.add_page("Forms", function() {}, function() { }); this.last_displayed = null; // create hidden $dh(this.wrapper); this.body = $a(this.wrapper,'div','frm_container'); // make by twin _f.frm_dialog = new _f.FrmDialog(); } // FrmDialog - twin of FrmContainer // ======================================================================= _f.frm_dialog = null; _f.calling_doc_stack = []; _f.temp_access = {}; _f.FrmDialog = function() { var me = this; this.last_displayed = null; var d = new Dialog(640, null, 'Edit Row'); this.body = $a(d.body, 'div', 'dialog_frm'); $y(d.body, {backgroundColor:'#EEE'}); d.done_btn_area = $a(d.body, 'div', '', {margin:'8px'}); // done button me.on_complete = function() { if(me.table_form) { // table form, just hide the dialog (saving will be done with the parent) me.dialog.hide(); } else { // form in dialog, so save it var callback = function(r) { var dn = cur_frm.docname; if(!r.exc) { // check if there is another dialog open? me.dialog.hide(); } // callback if(me.on_save_callback) me.on_save_callback(dn); } cur_frm.save('Save', callback); } } // set title onshow // ------------------------------------------- d.onshow = function() { // set the dialog title d.done_btn_area.innerHTML = ''; d.done_btn = $btn(d.done_btn_area, 'Save', null, null, 'green'); d.done_btn.onclick = function() { me.on_complete() }; if(me.table_form) { d.set_title("Editing Row #" + (_f.cur_grid_ridx+1)); d.done_btn.innerHTML = 'Done Editing'; } else { d.set_title(cur_frm.doctype==cur_frm.doctype ? (cur_frm.doctype) : (cur_frm.doctype + ': ' + cur_frm.docname)); d.done_btn.innerHTML = 'Save'; } } // on hide, refresh grid or call onsave // ------------------------------------------- d.onhide = function() { // if called from grid, refresh the row if(_f.cur_grid) _f.cur_grid.refresh_row(_f.cur_grid_ridx, me.dn); // set the new global cur_frm (if applicable) if(page_body.cur_page_label = 'Forms') { cur_frm = _f.frm_con.cur_frm; } } this.dialog = d; } // Form Factory // ======================================================================= _f.add_frm = function(doctype, onload, opt_name, from_archive) { // dont open doctype and docname from the same session if(frms['DocType'] && frms['DocType'].opendocs[doctype]) { msgprint("error:Cannot create an instance of \"" + doctype+ "\" when the DocType is open."); return; } // form already created, done if(frms[doctype]) { return frms[doctype]; } // Load Doctype from server var callback = function(r,rt) { page_body.set_status('Done') if(!locals['DocType'][doctype]) { if(r.exc) { msgprint("Did not load " + doctype, 1); } loadpage('_home'); return; } if(r.print_access) { if(!_f.temp_access[doctype]) _f.temp_access[doctype] = {}; _f.temp_access[doctype][opt_name] = 1; } // show fullpage or in Dialog? var meta = locals['DocType'][doctype]; var in_dialog = false; // if is table, its in the Dialog! if(meta.istable) meta.in_dialog = 1; if(cint(meta.in_dialog)) { var parent = _f.frm_dialog; in_dialog = true; } else { var parent = _f.frm_con; } // create the object var f = new _f.Frm(doctype, parent); f.in_dialog = in_dialog; if(onload)onload(r,rt); } // check if record is new (called from mapper etc) var is_new = 0; if(opt_name && locals[doctype] && locals[doctype][opt_name] && locals[doctype][opt_name].__islocal) { is_new = 1; } if(opt_name && !is_new) { // get both var args = {'name':opt_name, 'doctype':doctype, 'getdoctype':1, 'user':user}; if(get_url_arg('akey')) args['akey'] = get_url_arg('akey'); if(from_archive) args['from_archive'] = 1; $c('webnotes.widgets.form.getdoc', args, callback); } else { // get doctype only $c('webnotes.widgets.form.getdoctype', args={'doctype':doctype}, callback); } }