diff --git a/public/js/wn/form/grid.js b/public/js/wn/form/grid.js index 292b1b075c..df17afd835 100644 --- a/public/js/wn/form/grid.js +++ b/public/js/wn/form/grid.js @@ -51,28 +51,29 @@ wn.ui.form.Grid = Class.extend({ if(!force && this.data_rows_are_same(data)) { // soft refresh this.header_row.refresh(); - $.each(this.grid_rows, function(i, g) { - g.refresh(); - }); + for(var i in this.grid_rows) { + this.grid_rows[i].refresh(); + } } else { // redraw this.wrapper.find(".grid-row").remove(); this.make_head(); this.grid_rows = []; this.grid_rows_by_docname = {}; - $.each(data || [], function(ri, d) { + for(var ri in data) { + var d = data[ri]; var grid_row = new wn.ui.form.GridRow({ parent: $rows, - parent_df: me.df, - docfields: me.docfields, + parent_df: this.df, + docfields: this.docfields, doc: d, - frm: me.frm, - grid: me + frm: this.frm, + grid: this }); - me.grid_rows.push(grid_row) - me.grid_rows_by_docname[d.name] = grid_row; - }); - + this.grid_rows.push(grid_row) + this.grid_rows_by_docname[d.name] = grid_row; + } + this.wrapper.find(".grid-add-row").toggle(this.is_editable()); if(this.is_editable()) { this.make_sortable($rows); @@ -183,9 +184,7 @@ wn.ui.form.GridRow = Class.extend({ return false; }); - this.form_panel = $('').appendTo(this.wrapper); - - $('
').appendTo(this.wrapper); + this.divider = $('
').appendTo(this.wrapper); this.set_row_index(); this.make_static_display(); @@ -220,6 +219,7 @@ wn.ui.form.GridRow = Class.extend({ this.doc = locals[this.doc.doctype][this.doc.name]; // re write columns + this.grid.static_display_template = null; this.make_static_display(); // refersh form fields @@ -230,76 +230,38 @@ wn.ui.form.GridRow = Class.extend({ } }, make_static_display: function() { - var me = this, - total_colsize = 1; - me.row.empty(); - col = $('
' + (me.doc ? me.doc.idx : "#")+ '
') - .appendTo(me.row); + var me = this; + this.make_static_display_template(); + this.row.empty(); + $('
' + (this.doc ? this.doc.idx : "#")+ '
') + .appendTo(this.row); - $.each(me.docfields, function(ci, df) { - if(!df.hidden && df.in_list_view && me.grid.frm.get_perm(df.permlevel, READ) - && !in_list(["Section Break", "Column Break"], df.fieldtype)) { - var colsize = 2, - txt = me.doc ? - wn.format(me.doc[df.fieldname], df, null, me.doc) : - wn._(df.label); - switch(df.fieldtype) { - case "Text": - case "Small Text": - colsize = 3; - break; - case "Check": - colsize = 1; - break; - case "Select": - txt = wn._(txt) - } - total_colsize += colsize - if(total_colsize > 11) - return false; - $col = $('
') - .html(txt) - .attr("data-fieldname", df.fieldname) - .data("df", df) - .appendTo(me.row) - - if(["Text", "Small Text"].indexOf(df.fieldtype)!==-1) { - $col.addClass("grid-overflow-no-ellipsis"); - } else { - $col.addClass("grid-overflow-ellipsis"); - } - - if(in_list(["Int", "Currency", "Float"], df.fieldtype)) - $col.addClass("text-right"); + for(var ci in this.static_display_template) { + var df = this.static_display_template[ci][0]; + var colsize = this.static_display_template[ci][1]; + var txt = this.doc ? + wn.format(this.doc[df.fieldname], df, null, this.doc) : + wn._(df.label); + if(df.fieldtype === "Select") { + txt = wn._(txt); } - - }); + var add_class = (["Text", "Small Text"].indexOf(df.fieldtype)===-1) ? + " grid-overflow-ellipsis" : " grid-overflow-no-ellipsis"; + add_class += (["Int", "Currency", "Float"].indexOf(df.fieldtype)!==-1) ? + " text-right": ""; - // redistribute if total-col size is less than 12 - var passes = 0; - while(total_colsize < 11 && passes < 10) { - me.row.find(".col").each(function() { - var $col = $(this); - if(!$col.hasClass("col-xs-1") - && !in_list(["Int", "Currency", "Float"], $col.data("df").fieldtype)) { - for(var i=2; i<12; i++) { - if($col.hasClass("col-xs-" + i)) { - $col.removeClass("col-xs-" + i).addClass("col-xs-" + (i+1)); - total_colsize++; - break; - } - } - } - if(total_colsize >= 11) - return false; - }); - passes++; + $col = $('
') + .html(txt) + .attr("data-fieldname", df.fieldname) + .data("df", df) + .appendTo(this.row) } + // TODO find a better solution // append button column - if(me.doc && this.grid.is_editable()) { - if(!me.grid.$row_actions) { - me.grid.$row_actions = $('
\ \ @@ -307,11 +269,12 @@ wn.ui.form.GridRow = Class.extend({ \
'); } - $col = me.grid.$row_actions.clone().appendTo(me.row); + $col = this.grid.$row_actions.clone().appendTo(this.row); if($col.width() < 50) { - $col.remove(); + $col.toggle(false); } else { + $col.toggle(true); $col.find(".grid-insert-row").click(function() { me.insert(); return false; }); $col.find(".grid-delete-row").click(function() { me.remove(); return false; }); } @@ -319,6 +282,49 @@ wn.ui.form.GridRow = Class.extend({ $(this.frm.wrapper).trigger("grid-row-render", [this]); }, + make_static_display_template: function() { + if(this.static_display_template) return; + + var total_colsize = 1; + this.static_display_template = []; + for(var ci in this.docfields) { + var df = this.docfields[ci]; + if(!df.hidden && df.in_list_view && this.grid.frm.get_perm(df.permlevel, READ) + && !in_list(["Section Break", "Column Break"], df.fieldtype)) { + var colsize = 2; + switch(df.fieldtype) { + case "Text": + case "Small Text": + colsize = 3; + break; + case "Check": + colsize = 1; + break; + } + total_colsize += colsize + if(total_colsize > 11) + return false; + this.static_display_template.push([df, colsize]); + } + } + + // redistribute if total-col size is less than 12 + var passes = 0; + while(total_colsize < 11 && passes < 10) { + for(var i in this.static_display_template) { + var df = this.static_display_template[i][0]; + var colsize = this.static_display_template[i][1]; + if(colsize>1 && colsize<12 && ["Int", "Currency", "Float"].indexOf(df.fieldtype)===-1) { + this.static_display_template[i][1] += 1; + total_colsize++; + } + + if(total_colsize >= 11) + break; + } + passes++; + } + }, toggle_view: function(show, callback) { if(!this.doc) return this; @@ -349,10 +355,15 @@ wn.ui.form.GridRow = Class.extend({ } this.wrapper.toggleClass("grid-row-open", this.show); - - this.show && this.render_form() - this.show && this.row.toggle(false); - + + if(this.show) { + if(!this.form_panel) { + this.form_panel = $('') + .insertBefore(this.divider); + } + this.render_form(); + this.row.toggle(false); + } this.form_panel.toggle(this.show); if(me.show) { if(me.frm.doc.docstatus===0)