diff --git a/js/legacy/app.js b/js/legacy/app.js index 0e5e0046e5..ca0a3bfe88 100644 --- a/js/legacy/app.js +++ b/js/legacy/app.js @@ -134,8 +134,7 @@ function redirect_to_login() { } // default print style -_p.def_print_style_body = "html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }" - +"\npre { margin:0; padding:0;}" +_p.def_print_style_body = "html, body, div, span, td { font-family: Arial, Helvetica; font-size: 12px; }" + "\npre { margin:0; padding:0;}" _p.def_print_style_other = "\n.simpletable, .noborder { border-collapse: collapse; margin-bottom: 10px;}" +"\n.simpletable td {border: 1pt solid #000; vertical-align: top; padding: 2px; }" diff --git a/js/legacy/form.compressed.js b/js/legacy/form.compressed.js index 3a78902891..e19b8ce61c 100644 --- a/js/legacy/form.compressed.js +++ b/js/legacy/form.compressed.js @@ -340,74 +340,81 @@ _f.FormGrid.prototype.move_row=function(up){if(!this.check_selected())return;var len=len-1;if(r.rowIndex<(len-1)) var swap_row=this.tab.rows[r.rowIndex+1];} if(swap_row){var cidx=_f.cur_grid_cell.cellIndex;this.cell_deselect();var aidx=locals[this.doctype][r.docname].idx;locals[this.doctype][r.docname].idx=locals[this.doctype][swap_row.docname].idx;locals[this.doctype][swap_row.docname].idx=aidx;var adocname=swap_row.docname;this.refresh_row(swap_row.rowIndex,r.docname);this.refresh_row(r.rowIndex,adocname);this.cell_select(this.tab.rows[swap_row.rowIndex].cells[cidx]);this.set_unsaved();}} -_p.show_dialog=function(){if(!_p.dialog){_p.make_dialog();} -_p.dialog.show();} -_p.make_dialog=function(){var d=new Dialog(360,140,"Print Formats");d.make_body([['HTML','Select'],['Check','No Letterhead','Will ignore letterhead if it can be set. May not work for all formats'],['HTML','Buttons']]);d.widgets['No Letterhead'].checked=1;$btn(d.widgets.Buttons,'Print',function(){_p.build(sel_val(cur_frm.print_sel),_p.go,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px',marginLeft:'7px'},'green');$btn(d.widgets.Buttons,'Preview',function(){_p.build(sel_val(cur_frm.print_sel),_p.preview,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px'},'');_p.dialog=d;d.onshow=function(){var c=d.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.field_tab=function(layout_cell){var t=$a(layout_cell,'table','',{width:'100%'});var r=t.insertRow(0);this.r=r;r.insertCell(0);r.insertCell(1);r.cells[0].className='datalabelcell';r.cells[1].className='datainputcell';return r} -_p.print_std_add_table=function(t,layout,pf_list,dt,no_letterhead){if(t.appendChild){layout.cur_cell.appendChild(t);}else{for(var ti=0;ti';layout=_p.add_layout(dt,no_letterhead);pf_list[pf_list.length]=layout;layout.addrow();layout.addcell();var div=$a(layout.cur_cell,'div');div.innerHTML='Continued from previous page...';div.style.padding='4px';} +$.extend(_p,{show_dialog:function(){if(!_p.dialog){_p.make_dialog();} +_p.dialog.show();},make_dialog:function(){var d=new Dialog(360,140,'Print Formats',[['HTML','Select'],['Check','No Letterhead'],['HTML','Buttons']]);$btn(d.widgets.Buttons,'Print',function(){_p.build(sel_val(cur_frm.print_sel),_p.go,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px',marginLeft:'7px'},'green');$btn(d.widgets.Buttons,'Preview',function(){_p.build(sel_val(cur_frm.print_sel),_p.preview,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px'},'');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;},formats:{},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;} +var doc=locals[cur_frm.doctype][cur_frm.docname];if(args.fmtname=='Standard'){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]){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{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}));}}},render:function(args){var container=document.createElement('div');var stat='';stat+=_p.show_draft(args);stat+=_p.show_archived(args);container.innerHTML=args.body;_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"\ +
\ +
\ + {{HEAD}}\ +
\ + {{DESCRIPTION}}\ +
"},show_draft:function(args){if(args.doc&&cint(args.doc.docstatus)==0&&cur_frm.perm[0][SUBMIT]){draft=_p.head_banner_format();draft=draft.replace("{{HEAD}}","DRAFT");draft=draft.replace("{{DESCRIPTION}}","This box will go away after the document is submitted.");return draft;}else{return"";}},show_archived:function(args){if(args.doc&&args.doc.__archived){archived=_p.head_banner_format();archived=archived.replace("{{HEAD}}","ARCHIVED");archived=archived.replace("{{DESCRIPTION}}","You must restore this document to make it editable.");}else{return"";}},consolidate_css:function(container,args){var body_style='';var style_list=container.getElementsByTagName('style');while(style_list&&style_list.length>0){for(i in style_list){if(style_list[i]&&style_list[i].innerHTML){body_style+=style_list[i].innerHTML;var parent=style_list[i].parentNode;if(parent){parent.removeChild(style_list[i]);}else{container.removeChild(style_list[i]);}}} +style_list=container.getElementsByTagName('style');} +style_concat=(args.only_body?'':_p.def_print_style_body) ++_p.def_print_style_other+args.style+body_style;return style_concat;},run_embedded_js:function(container,doc){var jslist=container.getElementsByTagName('script');while(jslist&&jslist.length>0){for(i in jslist){if(jslist[i]&&jslist[i].innerHTML){var code=jslist[i].innerHTML;var parent=jslist[i].parentNode;var span=$a(parent,'span');parent.replaceChild(span,jslist[i]);var val=code?eval(code):'';if(!val||typeof(val)=='object'){val='';} +span.innerHTML=val;}} +jslist=container.getElementsByTagName('script');}},show_letterhead:function(container,args){if(!(args.no_letterhead||args.only_body)){container.innerHTML='
'+_p.get_letter_head()+'
' ++container.innerHTML;}},render_header_on_break:function(container,args){var page_set=container.getElementsByClassName('page-settings');if(page_set.length){for(var i=0;i\ + \ + \ + \n'+header;footer=footer+'\n\n\ + ';} +var finished=header ++stat ++container.innerHTML.replace(/
'+field.label+':
'+(val?val:'')+'
';break;case'Text Editor':var div=$a(me.layout.cur_cell,'div');var val=_f.get_value(doctype,docname,field.fieldname);div.innerHTML=val?val:'';break;default:_p.print_std_add_field(doctype,docname,field,me.layout);break;}}});for(var i=0;i'+f.label+': '+'
'+(v?v:'')+'
';break;case'Text Editor':var tmp=$a(layout.cur_cell,'div');var v=_f.get_value(dt,dn,f.fieldname);tmp.innerHTML=v?v:'';break;default:_p.print_std_add_field(dt,dn,f,layout);}}}} -layout.close_borders();var html='';for(var i=0;i0){for(var i=0;i'+block.innerHTML;} -if(only_body){return tmp_html+block.innerHTML.replace(/\n' -+'' -+''+title+'' -+'' -+'' -+tmp_html -+block.innerHTML.replace(/';}} -print_table=function(dt,dn,fieldname,tabletype,cols,head_labels,widths,condition,cssClass){var fl=fields_list[tabletype];var ds=getchildren(tabletype,dn,fieldname,dt);var tl=[];var cell_style={border:'1px solid #000',padding:'2px',verticalAlign:'top'};var head_cell_style={border:'1px solid #000',padding:'2px',verticalAlign:'top',backgroundColor:'#ddd'};var make_table=function(fl){var w=document.createElement('div');var t=$a(w,'table','',{width:'100%',borderCollapse:'collapse',marginBottom:'10px'});t.wrapper=w;t.insertRow(0);var c_start=0;if(fl[0]=='SR'){var cell=t.rows[0].insertCell(0) -cell.innerHTML=head_labels?head_labels[0]:'Sr';$y(cell,{width:'30px'});$y(cell,head_cell_style) -c_start=1;} -for(var c=c_start;c1)return tl;else return tl[0];} +return layout;},print_std_add_field:function(dt,dn,f,layout){var val=_f.get_value(dt,dn,f.fieldname);if(f.fieldtype!='Button'){if(val||in_list(['Float','Int','Currency'],f.fieldtype)){row=_p.field_tab(layout.cur_cell);row.cells[0].innerHTML=f.label?f.label:f.fieldname;$s(row.cells[1],val,f.fieldtype);if(f.fieldtype=='Currency'){$y(row.cells[1],{textAlign:'left'});}}}},field_tab:function(layout_cell){var tab=$a(layout_cell,'table','',{width:'100%'});var row=tab.insertRow(0);_p.row=row;row.insertCell(0);row.insertCell(1);row.cells[0].className='datalabelcell';row.cells[1].className='datainputcell';return row;}});print_table=function(dt,dn,fieldname,tabletype,cols,head_labels,widths,condition,cssClass,modifier){var me=this;$.extend(this,{flist:fields_list[tabletype],data:getchildren(tabletype,dn,fieldname,dt),cell_style:{border:'1px solid #000',padding:'2px',verticalAlign:'top'},head_cell_style:{border:'1px solid #000',padding:'2px',verticalAlign:'top',backgroundColor:'#ddd',fontWeight:'bold'},table_style:{width:'100%',borderCollapse:'collapse',marginBottom:'10px'},prepare_col_heads:function(flist){var new_flist=[];if(cols&&cols.length){if(cols[0]=='SR'){new_flist.push('SR')} +for(var i=0;iSR';$y(cell,{width:'30px'});$y(cell,me.head_cell_style);col_start++;} +for(var c=col_start;c1)?me.table_list:me.table_list[0];} _e.email_as_field='email_id';_e.email_as_dt='Contact';_e.email_as_in='email_id,contact_name';sendmail=function(emailto,emailfrom,cc,subject,message,fmt,with_attachments){var fn=function(html){$c('webnotes.utils.email_lib.send_form',{'sendto':emailto,'sendfrom':emailfrom?emailfrom:'','cc':cc?cc:'','subject':subject,'message':replace_newlines(message),'body':html,'full_domain':wn.urllib.get_base_url(),'with_attachments':with_attachments?1:0,'dt':cur_frm.doctype,'dn':cur_frm.docname},function(r,rtxt){});} _p.build(fmt,fn);} _e.make=function(){var d=new Dialog(440,440,"Send Email");var email_go=function(){var emailfrom=d.widgets['From'].value;var emailto=d.widgets['To'].value;if(!emailfrom) diff --git a/js/legacy/widgets/form/print_format.js b/js/legacy/widgets/form/print_format.js index 3d519417cf..f7e0c74ce0 100644 --- a/js/legacy/widgets/form/print_format.js +++ b/js/legacy/widgets/form/print_format.js @@ -1,416 +1,725 @@ -_p.show_dialog = function() { - if(!_p.dialog) { - _p.make_dialog(); - } - _p.dialog.show(); -} - -_p.make_dialog = function() { - var d = new Dialog(360, 140, "Print Formats"); - d.make_body( - [['HTML','Select'] - ,['Check','No Letterhead','Will ignore letterhead if it can be set. May not work for all formats'] - ,['HTML', 'Buttons'] - ]); +// _p can be referenced as this inside $.extend +$.extend(_p, { + show_dialog: function() { + if(!_p.dialog) { + _p.make_dialog(); + } + _p.dialog.show(); + }, - d.widgets['No Letterhead'].checked = 1; + 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; + }, - // prints - $btn(d.widgets.Buttons, 'Print', - function() { _p.build(sel_val(cur_frm.print_sel), _p.go, d.widgets['No Letterhead'].checked); }, - {cssFloat:'right', marginBottom:'16px', marginLeft:'7px'}, 'green'); - - // preview - $btn(d.widgets.Buttons, 'Preview', - function() { _p.build(sel_val(cur_frm.print_sel), _p.preview, d.widgets['No Letterhead'].checked); }, - {cssFloat:'right', marginBottom:'16px'}, ''); + // Define formats dict + formats: {}, - _p.dialog = d; - d.onshow = function() { - var c = d.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.field_tab = function(layout_cell) { - var t = $a(layout_cell, 'table', '', {width:'100%'}); - var r = t.insertRow(0); this.r = r; - r.insertCell(0); r.insertCell(1); - r.cells[0].className='datalabelcell'; - r.cells[1].className='datainputcell'; - return r -} - - -// standard layout -// ========================================================================== - -_p.print_std_add_table = function(t, layout, pf_list, dt, no_letterhead) { - if(t.appendChild) { - // one table only - layout.cur_cell.appendChild(t); - } else { - // multiple tables - for(var ti=0;ti 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 + }; - layout.addrow(); - layout.addcell(); - - var div = $a(layout.cur_cell, 'div'); - div.innerHTML = 'Continued from previous page...'; - div.style.padding = '4px'; + if(!cur_frm) { + alert('No Document Selected'); + return; } - // last table - layout.cur_cell.appendChild(t[t.length-1]); - } - return layout; -} - -// -------------------------------------------------------------------- - -_p.print_std_add_field = function(dt, dn, f, layout) { - - var v = _f.get_value(dt,dn,f.fieldname); - if(f.fieldtype!="Button") { - if(!v && !in_list(['Float','Int','Currency'], f.fieldtype)) { - // no value and non-numberic - do nothing - } else { - r = _p.field_tab(layout.cur_cell) - // label - r.cells[0].innerHTML=f.label?f.label:f.fieldname; - - $s(r.cells[1], v, f.fieldtype); + + // 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 = ''; - // left align currency in normal display - if(f.fieldtype=='Currency') - $y(r.cells[1],{textAlign: 'left'}); - } - } -} - -_p.get_letter_head = function() { - // add letter head - var cp = locals['Control Panel']['Control Panel']; - if(cur_frm.doc.letter_head) - var lh= cstr(_p.letter_heads[cur_frm.doc.letter_head]); - else if(cp.letter_head) - var lh= cp.letter_head; - else - var lh= ''; + // if draft/archived, show draft/archived banner + stat += _p.show_draft(args); + stat += _p.show_archived(args); - return lh; -} - -// -------------------------------------------------------------------- - -_p.add_layout = function(dt, no_letterhead) { - var l = new Layout(); - l.addrow(); - - if(locals['DocType'][dt].print_outline=='Yes') l.with_border = 1; + // 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); + }, - return l; -} - -// -------------------------------------------------------------------- - -_p.print_std = function(no_letterhead) { - var dn = cur_frm.docname; - var dt = cur_frm.doctype; - var pf_list = []; - - var layout = _p.add_layout(dt, no_letterhead); - pf_list[pf_list.length]=layout; - // heading - var h1 = $a(layout.cur_row.header, 'h1', '', {fontSize:'22px', marginBottom:'8px'}); - h1.innerHTML = cur_frm.pformat[dn] ? cur_frm.pformat[dn] : get_doctype_label(dt); + head_banner_format: function() { + return "\ +
\ +
\ + {{HEAD}}\ +
\ + {{DESCRIPTION}}\ +
" + }, + + /* + Check if doc's status is not submitted (docstatus == 0) + and submission is pending + + Display draft in header if true + */ + show_draft: function(args) { + if(args.doc && cint(args.doc.docstatus)==0 && cur_frm.perm[0][SUBMIT]) { + draft = _p.head_banner_format(); + draft = draft.replace("{{HEAD}}", "DRAFT"); + draft = draft.replace("{{DESCRIPTION}}", "This box will go away after the document is submitted."); + return draft; + } else { + return ""; + } + }, - var h2 = $a(layout.cur_row.header, 'div', '', {fontSize:'16px', color:'#888', marginBottom:'8px', paddingBottom:'8px', borderBottom:(layout.with_border ? '0px' : '1px solid #000' )}); - h2.innerHTML = dn; - var fl = getchildren('DocField', dt, 'fields', 'DocType'); - - if(fl[0]&&fl[0].fieldtype!="Section Break") { - layout.addrow(); // default section break - if(fl[0].fieldtype!="Column Break") // without column too - layout.addcell(); - } - - // build each field - for(var i=0;i content from container + var body_style = ''; + var style_list = container.getElementsByTagName('style'); + while(style_list && style_list.length>0) { + for(i in style_list) { + if(style_list[i] && style_list[i].innerHTML) { + body_style += style_list[i].innerHTML; + var parent = style_list[i].parentNode; + if(parent) { + parent.removeChild(style_list[i]); + } else { + container.removeChild(style_list[i]); + } + } + } + style_list = container.getElementsByTagName('style'); + } + + // Concatenate all styles + //style_concat = _p.def_print_style_other + args.style + body_style; + style_concat = (args.only_body ? '' : _p.def_print_style_body) + + _p.def_print_style_other + args.style + body_style; - switch(f.fieldtype){ - case 'Section Break': - layout.addrow(); - // if no column break after this field then add a column - if(fl[i+1]&&(fl[i+1].fieldtype!='Column Break')) { - layout.addcell(); } - - // add label ---- no labels for section breaks! - //if(f.label) layout.cur_row.header.innerHTML = '
'+f.label+'
'; - break; - case 'Column Break': - layout.addcell(f.width, f.label); - //if(f.label) layout.cur_cell.header.innerHTML = '
'+f.label+'
'; - break; - case 'Table': - var t = print_table(dt, dn,f.fieldname,f.options,null,null,null,null); - layout = _p.print_std_add_table(t, layout, pf_list, dt, no_letterhead); - break; - case 'HTML': - var tmp = $a(layout.cur_cell, 'div'); - tmp.innerHTML = f.options; - break; - case 'Code': - var tmp = $a(layout.cur_cell, 'div'); - var v= _f.get_value(dt,dn,f.fieldname); - tmp.innerHTML = '
'+ f.label + ':
' + '
'+(v?v:'')+'
'; - break; - case 'Text Editor': - var tmp = $a(layout.cur_cell, 'div'); - var v= _f.get_value(dt,dn,f.fieldname); - tmp.innerHTML = v?v:''; - break; - default: - // add cell data - _p.print_std_add_field(dt, dn, f, layout); - + return style_concat; + }, + + + // This is used to calculate and substitude values in the HTML + run_embedded_js: function(container, doc) { + var jslist = container.getElementsByTagName('script'); + while(jslist && jslist.length > 0) { + for(i in jslist) { + if(jslist[i] && jslist[i].innerHTML) { + var code = jslist[i].innerHTML; + var parent = jslist[i].parentNode; + var span = $a(parent, 'span'); + parent.replaceChild(span, jslist[i]); + var val = code ? eval(code) : ''; + if(!val || typeof(val)=='object') { val = ''; } + span.innerHTML = val; } } + jslist = container.getElementsByTagName('script'); } - } - - layout.close_borders(); + }, - // build html for each page - var html = ''; - for(var i=0;i' + + container.innerHTML; } - } - - pf_list = []; // cleanup - return html; -} - -_p.print_style = ".datalabelcell {padding: 2px 0px; width: 38%;vertical-align:top; }" - +".datainputcell { padding: 2px 0px; width: 62%; text-align:left; }" - +".sectionHeading { font-size: 16px; font-weight: bold; margin: 8px 0px }" - +".columnHeading { font-size: 14px; font-weight: bold; margin: 8px 0px; }" - -_p.formats = {} - -_p.build = function(fmtname, onload, no_letterhead, only_body) { - if(!cur_frm) { alert('No Document Selected'); return; } - var doc = locals[cur_frm.doctype][cur_frm.docname]; - if(fmtname=='Standard') { - onload(_p.render(_p.print_std(no_letterhead), _p.print_style, doc, doc.name, no_letterhead, only_body)); - } else { - if(!_p.formats[fmtname]) // not loaded, get data - $c('webnotes.widgets.form.get_print_format', {'name':fmtname }, - function(r,rt) { - _p.formats[fmtname] = r.message; - onload(_p.render(_p.formats[fmtname], '', doc, doc.name, no_letterhead, only_body)); - } - ); - else // loaded - onload(_p.render(_p.formats[fmtname], '', doc, doc.name, no_letterhead, only_body)); - } -} - -_p.render = function(body, style, doc, title, no_letterhead, only_body) { - var block = document.createElement('div'); - var tmp_html = ''; + }, - if(doc && cint(doc.docstatus)==0 && cur_frm.perm[0][SUBMIT]) { - var tmp_html = '
DRAFT
This box will go away after the document is submitted.
'; - } - if(doc && doc.__archived) { - var tmp_html = '
ARCHIVED
You must restore this document to make it editable.
'; - } - - style = (only_body ? '' : _p.def_print_style_body) + _p.def_print_style_other + style; - block.innerHTML = body; - - // run embedded javascript - var jslist = block.getElementsByTagName('script'); - while(jslist.length>0) { - for(var i=0; i' + block.innerHTML; - } + // called by _p.render for final render of print + render_final: function(style, stat, container, args) { + var header = '
\n'; + var footer = '\n
'; + if(!args.only_body) { + header = '\n\ + \ + \ + ' + args.title + '\ + \ + \ + \n' + header; + + footer = footer + '\n\n\ + '; + } + var finished = header + + stat + + container.innerHTML.replace(/
' + (val ? val : '') +
+									'
'; + break; + + case 'Text Editor': + var div = $a(me.layout.cur_cell, 'div'); + var val = _f.get_value(doctype, docname, + field.fieldname); + div.innerHTML = val ? val : ''; + break; + + default: + // Add Cell Data + _p.print_std_add_field(doctype, docname, field, me.layout); + break; + } + } + }); + + // Then build each field + for(var i = 0; i < data.length; i++) { + var fieldname = data[i].fieldname ? data[i].fieldname : + data[i].label; + var field = fieldname ? + get_field(doctype, fieldname, docname) : data[i]; + if(!field.print_hide) { + if(cur_frm.pformat[field.fieldname]) { + // If there is a custom method to generate the HTML, then use it + this.generate_custom_html(field, doctype, docname); + } else { + // Do the normal rendering + this.render_normal(field); + } + } + } + me.layout.close_borders(); + }, + + build_html: function() { + var html = ''; + for(var i = 0; i < me.pf_list.length; i++) { + if(me.pf_list[i].wrapper) { + html += me.pf_list[i].wrapper.innerHTML; + } else if(me.pf_list[i].innerHTML) { + html += me.pf_list[i].innerHTML; + } else { + html += me.pf_list[i]; + } + } + this.pf_list = []; + return html; + } + }); + + this.build_head(doctype, docname); - if(only_body) { - return tmp_html + block.innerHTML.replace(/\n' - + '' - + ''+title+'' - + '' - + '' - + tmp_html - + block.innerHTML.replace(/'; - } -} + this.build_data(data, doctype, docname); -print_table = function(dt, dn, fieldname, tabletype, cols, head_labels, widths, condition, cssClass) { - var fl = fields_list[tabletype]; - var ds = getchildren(tabletype, dn, fieldname, dt); - var tl = []; - var cell_style = {border:'1px solid #000', padding:'2px', verticalAlign:'top'}; - var head_cell_style = {border:'1px solid #000', padding:'2px', verticalAlign:'top', backgroundColor:'#ddd'}; + var html = this.build_html(); + return html; + }, - var make_table = function(fl) { - var w = document.createElement('div'); - var t = $a(w, 'table', '', {width:'100%', borderCollapse:'collapse', marginBottom:'10px'}); - t.wrapper = w; + add_layout: function(doctype) { + var layout = new Layout(); + layout.addrow(); - // head row - t.insertRow(0); - var c_start = 0; - if(fl[0]=='SR') { - var cell = t.rows[0].insertCell(0) - cell.innerHTML = head_labels?head_labels[0]:'Sr'; - $y(cell, {width:'30px'}); - $y(cell, head_cell_style) - - c_start = 1; + if(locals['DocType'][doctype].print_outline == 'Yes') { + layout.with_border = 1 } - - for(var c=c_start;c