// Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) // // MIT License (MIT) // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // // Form Input // ====================================================================================== _f.ColumnBreak = function() { this.set_input = function() { }; } _f.ColumnBreak.prototype.make_body = function() { if((!this.perm[this.df.permlevel]) || (!this.perm[this.df.permlevel][READ]) || this.df.hidden) { // no display return; } this.cell = this.frm.layout.addcell(this.df.width); $y(this.cell.wrapper, {padding: '8px'}); _f.cur_col_break_width = this.df.width; var fn = this.df.fieldname?this.df.fieldname:this.df.label; // header if(this.df&&this.df.label){ this.label = $a(this.cell.wrapper, 'div', '', '', this.df.label); } } _f.ColumnBreak.prototype.refresh = function(layout) { if(!this.cell)return; // no perm // hidden if(this.set_hidden!=this.df.hidden) { if(this.df.hidden) this.cell.hide(); else this.cell.show(); this.set_hidden = this.df.hidden; } } // ====================================================================================== _f.SectionBreak = function() { this.fields = []; this.set_input = function() { }; this.make_row = function() { this.row = this.df.label ? this.frm.layout.addrow() : this.frm.layout.addsubrow(); } } _f.SectionBreak.prototype.make_body = function() { var me = this; if((!this.perm[this.df.permlevel]) || (!this.perm[this.df.permlevel][READ]) || this.df.hidden) { // no display return; } this.make_row(); if(this.df.label) { if(!this.df.description) this.df.description = ''; $(this.row.main_head).html(repl('
\

%(label)s

\
%(description)s
\
', this.df)); } else { // simple $(this.wrapper).html('
'); } // collapse section this.section_collapse = function() { $(me.row.main_head).find('.head') .html(' \ Show "' + me.df.label + '"'); $(me.row.main_body).toggle(false); } // expand section this.section_expand = function(no_animation) { $(me.row.main_head).find('.head') .html('

' + me.df.label + '

'); if(no_animation) $(me.row.main_body).toggle(true); else $(me.row.main_body).slideDown(); } // indent $y(this.row.body, { marginLeft:'17px' }); } _f.SectionBreak.prototype.has_data = function() { // return true if // 1. any field in the section is mandatory & not set as default // 2. any field in the section has data that is not default // 3. if table, table has rows var me = this; for(var i in me.fields) { var f = me.fields[i]; var v = f.get_value ? f.get_value() : null; // value that is not default defaultval = f.df['default'] || sys_defaults[f.fieldname] || user_defaults[f.fieldname]; if(v && v != defaultval) { return true; } // unfilled mandatory field if(f.df.reqd && !v) { return true; } // filled table if(f.df.fieldtype=='Table') { if(f.grid.get_children().length || f.df.reqd) { return true; } } } return false; } _f.SectionBreak.prototype.refresh = function(from_form) { if(this.df.hidden) { if(this.row)this.row.hide(); } else { if(this.collapsible) { //this.section_expand(from_form); //if(this.df.reqd || this.has_data()) { // this.section_expand(from_form); //} else { // this.section_collapse(); //} } } } // Image field definition // ====================================================================================== _f.ImageField = function() { this.images = {}; } _f.ImageField.prototype = new Field(); _f.ImageField.prototype.onmake = function() { this.no_img = $a(this.wrapper, 'div','no_img'); this.no_img.innerHTML = "No Image"; $dh(this.no_img); } _f.ImageField.prototype.get_image_src = function(doc) { if(doc.file_list) { file = doc.file_list.split(','); // if image extn = file[0].split('.'); extn = extn[extn.length - 1].toLowerCase(); var img_extn_list = ['gif', 'jpg', 'bmp', 'jpeg', 'jp2', 'cgm', 'ief', 'jpm', 'jpx', 'png', 'tiff', 'jpe', 'tif']; if(in_list(img_extn_list, extn)) { var src = wn.request.url + "?cmd=downloadfile&file_id="+file[1]; } } else { var src = ""; } return src; } _f.ImageField.prototype.onrefresh = function() { var me = this; if(!this.images[this.docname]) this.images[this.docname] = $a(this.wrapper, 'img'); else $di(this.images[this.docname]); var img = this.images[this.docname] // hide all other for(var dn in this.images) if(dn!=this.docname)$dh(this.images[dn]); var doc = locals[this.frm.doctype][this.frm.docname]; if(!this.df.options) var src = this.get_image_src(doc); else var src = wn.request.url + '?cmd=get_file&fname='+this.df.options+"&__account="+account_id + (__sid150 ? ("&sid150="+__sid150) : ''); if(src) { $dh(this.no_img); if(img.getAttribute('src')!=src) img.setAttribute('src',src); canvas = this.wrapper; canvas.img = this.images[this.docname]; canvas.style.overflow = "auto"; $w(canvas, "100%"); if(!this.col_break_width)this.col_break_width = '100%'; var allow_width = cint(1000 * (cint(this.col_break_width)-10) / 100); if((!img.naturalWidth) || cint(img.naturalWidth)>allow_width) $w(img, allow_width + 'px'); } else { $ds(this.no_img); } } _f.ImageField.prototype.set_disp = function (val) { } _f.ImageField.prototype.set = function (val) { } // Table // ====================================================================================== _f.TableField = function() { }; _f.TableField.prototype = new Field(); _f.TableField.prototype.with_label = 0; _f.TableField.prototype.make_body = function() { if(this.perm[this.df.permlevel] && this.perm[this.df.permlevel][READ]) { // add comment area if(this.df.description) { this.desc_area = $a(this.parent, 'div', 'help small', '', this.df.description) } this.grid = new _f.FormGrid(this); if(this.frm)this.frm.grids[this.frm.grids.length] = this; this.grid.make_buttons(); } } _f.TableField.prototype.refresh = function() { if(!this.grid)return; // hide / show grid var st = this.get_status(); if(!this.df['default']) this.df['default']=''; this.grid.can_add_rows = false; this.grid.can_edit = false if(st=='Write') { if(cur_frm.editable && this.perm[this.df.permlevel] && this.perm[this.df.permlevel][WRITE]) { this.grid.can_edit = true; if(this.df['default'].toLowerCase()!='no toolbar') this.grid.can_add_rows = true; } // submitted or cancelled if(cur_frm.editable && cur_frm.doc.docstatus > 0) { if(this.df.allow_on_submit && cur_frm.doc.docstatus==1) { this.grid.can_edit = true; if(this.df['default'].toLowerCase()=='no toolbar') { this.grid.can_add_rows = false; } else { this.grid.can_add_rows = true; } } else { this.grid.can_add_rows = false; this.grid.can_edit = false; } } if(this.df['default'].toLowerCase()=='no add rows') { this.grid.can_add_rows = false; } } //if(this.old_status!=st) { if(st=='Write') { // nothing this.grid.show(); } else if(st=='Read') { this.grid.show(); } else { this.grid.hide(); } // this.old_status = st; // save this if next time //} this.grid.refresh(); } _f.TableField.prototype.set = function(v) { }; // nothing _f.TableField.prototype.set_input = function(v) { }; // nothing // ============================================================== _f.CodeField = function() { }; _f.CodeField.prototype = new Field(); _f.CodeField.prototype.make_input = function() { var me = this; this.label_span.innerHTML = this.df.label; this.input = $a(this.input_area, 'textarea','code_text',{fontSize:'12px'}); this.myid = wn.dom.set_unique_id(this.input); this.input.set_input = function(v) { if(me.editor) { me.editor.setContent(v); } else { me.input.value = v; me.input.innerHTML = v; } } this.input.onchange = function() { if(me.editor) { //me.set(tinymce.get(me.myid).getContent()); } else { me.set(me.input.value); } me.run_trigger(); } this.get_value = function() { if(me.editor) { return me.editor.getContent(); // tinyMCE } else { return this.input.value; } } if(this.df.fieldtype=='Text Editor') { // setup tiny mce $(me.input).tinymce({ // Location of TinyMCE script script_url : 'lib/js/lib/tiny_mce_33/tiny_mce.js', // General options theme : "advanced", plugins : "style,inlinepopups,table", extended_valid_elements: "div[id|dir|class|align|style]", // w/h width: '100%', height: '360px', // buttons theme_advanced_buttons1 : "bold,italic,underline,strikethrough,hr,|,justifyleft,justifycenter,justifyright,|,formatselect,fontselect,fontsizeselect", theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,code,|,forecolor,backcolor,|,tablecontrols", theme_advanced_buttons3 : "", theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", content_css: "lib/js/lib/tiny_mce_33/custom_content.css", oninit: function() { me.init_editor(); } }); } else { $y(me.input, {fontFamily:'Courier, Fixed'}); } } _f.CodeField.prototype.init_editor = function() { // attach onchange methods var me = this; this.editor = tinymce.get(this.myid); this.editor.onKeyUp.add(function(ed, e) { me.set(ed.getContent()); }); this.editor.onPaste.add(function(ed, e) { me.set(ed.getContent()); }); this.editor.onSetContent.add(function(ed, e) { me.set(ed.getContent()); }); // reset content var c = locals[cur_frm.doctype][cur_frm.docname][this.df.fieldname]; if(cur_frm && c) { this.editor.setContent(c); } } _f.CodeField.prototype.set_disp = function(val) { $y(this.disp_area, {width:'90%'}) if(this.df.fieldtype=='Text Editor') { this.disp_area.innerHTML = val; } else { this.disp_area.innerHTML = ''; } } // ======================================================================================