diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-08-24 10:53:03 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-08-24 10:53:03 +0200 |
| commit | ae4d1d5e3bdaf54121bcc9f17de06f009d0075f7 (patch) | |
| tree | fb809931962080ab9d378de93738d0e3abed4e6a /addons/base/static/src | |
| parent | 00a7458bc42f7f3f94e166cb9f656a192c4542fb (diff) | |
[IMP] to maintain correct synchro, listview should avoid relying on indexes as much as possible. Get rid on indexes on rows, and of List.row_position
bzr revid: xmo@openerp.com-20110824085303-6h3wggzynpic0mcz
Diffstat (limited to 'addons/base/static/src')
| -rw-r--r-- | addons/base/static/src/js/list-editable.js | 10 | ||||
| -rw-r--r-- | addons/base/static/src/js/list.js | 44 | ||||
| -rw-r--r-- | addons/base/static/src/xml/base.xml | 3 |
3 files changed, 24 insertions, 33 deletions
diff --git a/addons/base/static/src/js/list-editable.js b/addons/base/static/src/js/list-editable.js index e14eb02b3a2..8d94bb0f601 100644 --- a/addons/base/static/src/js/list-editable.js +++ b/addons/base/static/src/js/list-editable.js @@ -143,7 +143,6 @@ openerp.base.list_editable = function (openerp) { var $new_row = $('<tr>', { id: _.uniqueId('oe-editable-row-'), 'data-id': $(row).data('id'), - 'data-index': $(row).data('index'), 'class': $(row).attr('class') + ' oe_forms', click: function (e) {e.stopPropagation();} }) @@ -201,14 +200,16 @@ openerp.base.list_editable = function (openerp) { }); }); }, - handle_onwrite: function (record_id, index) { + handle_onwrite: function (source_record_id) { var self = this; var on_write_callback = self.view.fields_view.arch.attrs.on_write; if (!on_write_callback) { return; } - this.dataset.call(on_write_callback, [record_id], function (ids) { + this.dataset.call(on_write_callback, [source_record_id], function (ids) { _(ids).each(function (id) { var record = self.records.get(id); if (!record) { + var index = self.records.indexOf( + self.records.get(source_record_id)); record = new openerp.base.list.Record({id: id}); self.records.add(record, {at: index}); self.dataset.ids.splice(index, 0, id); @@ -231,8 +232,7 @@ openerp.base.list_editable = function (openerp) { {at: self.options.editable === 'top' ? 0 : null}); self.edition_index = self.dataset.index; } - self.handle_onwrite(self.dataset.ids[self.dataset.index], - self.dataset.index); + self.handle_onwrite(self.dataset.ids[self.dataset.index]); self.cancel_pending_edition().then(function () { $(self).trigger('saved', [self.dataset]); if (!edit_next) { diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index b2faaa55faf..aa6f960bec9 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -641,7 +641,7 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base. 'reset': $.proxy(this, 'on_records_reset'), 'change': function (event, record) { var $row = self.$current.find('[data-id=' + record.get('id') + ']'); - $row.replaceWith(self.render_record($row.data('index'))); + $row.replaceWith(self.render_record(record)); }, 'add': function (ev, records, record, index) { $('<tr>').attr({ @@ -680,7 +680,9 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base. }) .delegate('tr', 'click', function (e) { e.stopPropagation(); - self.dataset.index = self.row_position(e.currentTarget); + self.dataset.index = self.records.indexOf( + self.records.get( + self.row_id(e.currentTarget))); self.row_clicked(e); }); }, @@ -718,15 +720,6 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base. return result; }, /** - * Returns the index of the row in the list of rows. - * - * @param {Object} row the selected row - * @returns {Number} the position of the row in this.rows - */ - row_position: function (row) { - return $(row).data('index'); - }, - /** * Returns the identifier of the object displayed in the provided table * row * @@ -787,21 +780,21 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base. /** * Renders a list record to HTML * - * @param {Number} record_index index of the record to render in ``this.rows`` + * @param {Record} record index of the record to render in ``this.rows`` * @returns {String} QWeb rendering of the selected record */ - render_record: function (record_index) { + render_record: function (record) { + var index = this.records.indexOf(record); return QWeb.render('ListView.row', { columns: this.columns, options: this.options, - record: this.records.at(record_index), - row_parity: (record_index % 2 === 0) ? 'even' : 'odd', - row_index: record_index, + record: record, + row_parity: (index % 2 === 0) ? 'even' : 'odd', render_cell: openerp.base.format_cell }); }, /** - * Fixes @data-index on all table rows, and fixes the even/odd classes + * Fixes fixes the even/odd classes * * @param {Number} [from_index] index from which to resequence * @param {Number} [offset = 0] selection offset for DOM, in case there are rows to ignore in the table @@ -815,8 +808,7 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base. var index = from_index + i; // reset record-index accelerators on rows and even/odd var even = index%2 === 0; - $(e).attr('data-index', index) - .toggleClass('even', even) + $(e).toggleClass('even', even) .toggleClass('odd', !even); }); } @@ -1080,14 +1072,12 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas // ondrop, move relevant record & fix sequences list.$current.sortable({ stop: function (event, ui) { - var from = ui.item.data('index'), - to = ui.item.prev().data('index') || 0; - if (from === to) { return; } - var to_move = list.records.at(from); - list.records.remove(to_move); - list.records.add(to_move, {at: to}); + var to_move = list.records.get(ui.item.data('id')), + target_id = ui.item.prev().data('id'); - list.refresh_zebra(); + list.records.remove(to_move); + var to = target_id ? list.records.indexOf(list.records.get(target_id)) : 0; + list.records.add(to_move, { at: to }); // resequencing time! var record, index = to, @@ -1101,6 +1091,8 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas dataset.write(record.get('id'), {sequence: seq}); record.set('sequence', seq); } + + list.refresh_zebra(); } }); }, diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 89b452a6760..879d98d15a6 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -554,12 +554,11 @@ <t t-name="ListView.rows" t-foreach="records.length" t-as="index"> <t t-call="ListView.row"> <t t-set="record" t-value="records.at(index)"/> - <t t-set="row_index" t-value="index"/> <t t-set="row_parity" t-value="index_parity"/> </t> </t> <tr t-name="ListView.row" t-att-class="row_parity" - t-att-data-index="row_index" t-att-data-id="record.get('id')"> + t-att-data-id="record.get('id')"> <t t-foreach="columns" t-as="column"> <td t-if="column.meta"> |
