diff --git a/addons/base/static/src/js/list-editable.js b/addons/base/static/src/js/list-editable.js index 8c66dd71dd5..d005d58022d 100644 --- a/addons/base/static/src/js/list-editable.js +++ b/addons/base/static/src/js/list-editable.js @@ -40,28 +40,59 @@ openerp.base.list.editable = function (openerp) { this.render_row_as_form(index, event.currentTarget); }, render_row_as_form: function (row_num, row) { + var self = this; var $new_row = $('', { id: _.uniqueId('oe-editable-row-'), 'class': $(row).attr('class'), onclick: function (e) {e.stopPropagation();} - }).replaceAll(row); - var editable_row_form = _.extend(new openerp.base.FormView( + }).replaceAll(row) + .keyup(function (e) { + if (e.which !== 13) { + return; + } + self.save_row(row_num, true); + }) + .delegate('button.oe-list-save', 'click', function () { + self.save_row(row_num); + }); + this.edition_form = _.extend(new openerp.base.FormView( null, this.group.view.session, $new_row.attr('id'), this.dataset, false), { template: 'ListView.row.form', registry: openerp.base.list.form.widgets }); - editable_row_form.on_loaded({fields_view: this.get_fields_view()}); - editable_row_form.on_record_loaded.add({ + this.edition_form.on_loaded({fields_view: this.get_fields_view()}); + this.edition_form.on_record_loaded.add({ position: 'last', unique: true, callback: function () { - editable_row_form.$element.find('td') - .addClass('oe-field-cell') - .removeAttr('width'); + self.edition_form.$element + .find('td') + .addClass('oe-field-cell') + .removeAttr('width') + .end() + .find('td:first').removeClass('oe-field-cell').end() + .find('td:last').removeClass('oe-field-cell').end(); + } + }); + this.edition_form.do_show(); + }, + /** + * Saves the current row, and triggers the edition of its following + * sibling if asked. + * + * @param {Number} row_num the row to save + * @param {Boolean} [edit_next=false] should the next row become editable + */ + save_row: function (row_num, edit_next) { + var self = this; + this.edition_form.do_save(function () { + // nuke form + // re-render current row + if (edit_next) { + // self.row_clicked({currentTarget: current_row.nextSibling}, row_num + 1) } }); - editable_row_form.do_show(); } }); openerp.base.list = {form: {}}; diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index d40ed614176..d1633bdb150 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -800,7 +800,9 @@ 't-as': this.attr('t-as') }) .replaceAll(this) - .before($(document.createElement('td'))) + .before($(document.createElement('td')).append( + $(document.createElement('button')).attr({ + 'class': 'oe-list-save', 'type': 'button'}).text('Save'))) .after($(document.createElement('td'))) .unwrap();