From 32bccb877b711fd3cf20d290db0a8390c0e676b7 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 8 Sep 2011 14:55:10 +0200 Subject: [PATCH] [IMP] look of non-selectable or non-editable editable list views when a row is being edited dynamically add and remove padding rows lp bug: https://launchpad.net/bugs/842644 fixed bzr revid: xmo@openerp.com-20110908125510-fb7vcjsixj5sqhpz --- addons/web/static/src/js/list-editable.js | 11 ++++++ addons/web/static/src/js/list.js | 44 +++++++++++++++++++++++ addons/web/static/src/xml/base.xml | 22 ++++-------- 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/addons/web/static/src/js/list-editable.js b/addons/web/static/src/js/list-editable.js index ab78e5e0139..7b41b22e2f7 100644 --- a/addons/web/static/src/js/list-editable.js +++ b/addons/web/static/src/js/list-editable.js @@ -112,6 +112,7 @@ openerp.web.list_editable = function (openerp) { cancelled.resolve(); } cancelled.then(function () { + self.view.unpad_columns(); self.edition_form.stop(); self.edition_form.$element.remove(); delete self.edition_form; @@ -197,6 +198,16 @@ openerp.web.list_editable = function (openerp) { $new_row.prepend(''); } }); + // Add columns for the cancel and save buttons, if + // there are none in the list + if (!self.options.selectable) { + self.view.pad_columns( + 1, {except: $new_row, position: 'before'}); + } + if (!self.options.deletable) { + self.view.pad_columns( + 1, {except: $new_row}); + } self.edition_form.do_show(); }); diff --git a/addons/web/static/src/js/list.js b/addons/web/static/src/js/list.js index 6029b30f866..74f6d7b92e5 100644 --- a/addons/web/static/src/js/list.js +++ b/addons/web/static/src/js/list.js @@ -49,6 +49,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; + this.previous_colspan = null; this.columns = []; @@ -603,6 +604,49 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# get_selected_ids: function() { var ids = this.groups.get_selection().ids; return ids; + }, + /** + * Adds padding columns at the start or end of all table rows (including + * field names row) + * + * @param {Number} count number of columns to add + * @param {Object} options + * @param {"before"|"after"} [position="after"] insertion position for the new columns + * @param {Object} [except] content row to not pad + */ + pad_columns: function (count, options) { + options = options || {}; + // padding for action/pager header + var $first_header = this.$element.find('thead tr:first th'); + var colspan = $first_header.attr('colspan'); + if (colspan) { + if (!this.previous_colspan) { + this.previous_colspan = colspan; + } + $first_header.attr('colspan', parseInt(colspan, 10) + count); + } + // Padding for column titles, footer and data rows + var $rows = this.$element + .find('.oe-listview-header-columns, tr:not(thead tr)') + .not(options['except']); + var newcols = new Array(count+1).join(''); + if (options.position === 'before') { + $rows.prepend(newcols); + } else { + $rows.append(newcols); + } + }, + /** + * Removes all padding columns of the table + */ + unpad_columns: function () { + this.$element.find('.oe-listview-padding').remove(); + if (this.previous_colspan) { + this.$element + .find('thead tr:first th') + .attr('colspan', this.previous_colspan); + this.previous_colspan = null; + } } }); openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.ListView.List# */{ diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 5ac1929fce3..7a6610850b3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -566,7 +566,7 @@ - + @@ -1211,21 +1211,11 @@ - - $(document.createElement('t')) - .append(this.contents()) - .attr({ - 't-foreach': this.attr('t-foreach'), - 't-as': this.attr('t-as') - }) - .replaceAll(this) - .after($(document.createElement('td')).append( - $(document.createElement('button')).attr({ - 'class': 'oe-edit-row-save', 'type': 'button'}).text('Save'))) - .before($(document.createElement('td')).append( - $(document.createElement('button')).attr({ - 'class': 'oe-edit-row-cancel', 'type': 'button'}).text('Cancel'))) - .unwrap(); + + + + +