summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2011-08-24 10:53:03 +0200
committerXavier Morel <xmo@openerp.com>2011-08-24 10:53:03 +0200
commitae4d1d5e3bdaf54121bcc9f17de06f009d0075f7 (patch)
treefb809931962080ab9d378de93738d0e3abed4e6a /addons/base/static/src
parent00a7458bc42f7f3f94e166cb9f656a192c4542fb (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.js10
-rw-r--r--addons/base/static/src/js/list.js44
-rw-r--r--addons/base/static/src/xml/base.xml3
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">