// _p can be referenced as this inside $.extend $.extend(_p, { show_dialog: function() { if(!_p.dialog) { _p.make_dialog(); } _p.dialog.show(); }, make_dialog: function() { // Prepare Dialog Box Layout var d = new Dialog( 360, // w 140, // h 'Print Formats', // title [ // content ['HTML', 'Select'], ['Check', 'No Letterhead'], ['HTML', 'Buttons'] ]); //d.widgets['No Letterhead'].checked = 1; // Print Button $btn(d.widgets.Buttons, 'Print', function() { _p.build( sel_val(cur_frm.print_sel), // fmtname _p.go, // onload d.widgets['No Letterhead'].checked // no_letterhead ); }, { cssFloat: 'right', marginBottom: '16px', marginLeft: '7px' }, 'green'); // Print Preview $btn(d.widgets.Buttons, 'Preview', function() { _p.build( sel_val(cur_frm.print_sel), // fmtname _p.preview, // onload d.widgets['No Letterhead'].checked // no_letterhead ); }, { cssFloat: 'right', marginBottom: '16px' }, ''); // Delete previous print format select list and Reload print format list from current form d.onshow = function() { var c = _p.dialog.widgets['Select']; if(c.cur_sel && c.cur_sel.parentNode == c) { c.removeChild(c.cur_sel); } c.appendChild(cur_frm.print_sel); c.cur_sel = cur_frm.print_sel; } _p.dialog = d; }, // Define formats dict formats: {}, /* args dict can contain: + fmtname --> print format name + onload + no_letterhead + only_body */ build: function(fmtname, onload, no_letterhead, only_body) { args = { fmtname: fmtname, onload: onload, no_letterhead: no_letterhead, only_body: only_body }; if(!cur_frm) { alert('No Document Selected'); return; } // Get current doc (record) var doc = locals[cur_frm.doctype][cur_frm.docname]; if(args.fmtname == 'Standard') { /* Render standard print layout The function passed as args onload is then called using these parameters */ args.onload(_p.render({ body: _p.print_std(args.no_letterhead), style: _p.print_style, doc: doc, title: doc.name, no_letterhead: args.no_letterhead, only_body: args.only_body })); } else { if (!_p.formats[args.fmtname]) { /* If print formats are not loaded, then load them and call the args onload function on callback. I think, this case happens when preview is invoked directly */ var build_args = args; $c( command = 'webnotes.widgets.form.get_print_format', args = { 'name': build_args.fmtname }, fn = function(r, rt) { _p.formats[build_args.fmtname] = r.message; build_args.onload(_p.render({ body: _p.formats[build_args.fmtname], style: '', doc: doc, title: doc.name, no_letterhead: build_args.no_letterhead, only_body: build_args.only_body })); } ); } else { // If print format is already loaded, go ahead with args onload function call args.onload(_p.render({ body: _p.formats[args.fmtname], style: '', doc: doc, title: doc.name, no_letterhead: args.no_letterhead, only_body: args.only_body })); } } }, /* args dict can contain: + body + style + doc + title + no_letterhead + only_body */ render: function(args) { var container = document.createElement('div'); var stat = ''; // if draft/archived, show draft/archived banner stat += _p.show_draft(args); stat += _p.show_archived(args); // Append args.body's content as a child of container container.innerHTML = args.body; // Show letterhead? _p.show_letterhead(container, args); _p.run_embedded_js(container, args.doc); var style = _p.consolidate_css(container, args); _p.render_header_on_break(container, args); return _p.render_final(style, stat, container, args); }, head_banner_format: function() { return "\