[ADD] delete button per row

bzr revid: xmo@openerp.com-20110407151319-vr7sc3n497y4ily0
This commit is contained in:
Xavier Morel 2011-04-07 17:13:19 +02:00
parent f55d7b5e85
commit e8a6a4e1e2
3 changed files with 50 additions and 0 deletions

View File

@ -5,6 +5,8 @@ openerp.base.ListView = openerp.base.Controller.extend(
defaults: {
// records can be selected one by one
'selectable': true,
// list rows can be deleted
'deletable': true,
// whether the column headers should be displayed
'header': true
},
@ -18,6 +20,7 @@ openerp.base.ListView = openerp.base.Controller.extend(
* @param {Object} options A set of options used to configure the view
* @param {Boolean} [options.selectable=true] determines whether view rows are selectable (e.g. via a checkbox)
* @param {Boolean} [options.header=true] should the list's header be displayed
* @param {Boolean} [options.deletable=true] are the list rows deletable
*/
init: function(view_manager, session, element_id, dataset, view_id, options) {
this._super(session, element_id);
@ -54,6 +57,8 @@ openerp.base.ListView = openerp.base.Controller.extend(
// linking feature
e.stopImmediatePropagation();
});
this.$element.find('table').delegate(
'td.oe-record-delete button', 'click', this.do_delete);
this.$element.find('table').delegate(
'tr', 'click', this.on_select_row);
@ -147,6 +152,17 @@ openerp.base.ListView = openerp.base.Controller.extend(
var self = this;
self.dataset.fetch(self.dataset.fields, 0, self.limit, self.do_fill_table);
},
/**
* Handles the signal to delete a line from the DOM
*
* @param e
*/
do_delete: function (e) {
// don't link to forms
e.stopImmediatePropagation();
this.dataset.unlink(
[this.rows[$(e.currentTarget).closest('tr').prevAll().length].id]);
},
/**
* Gets the ids of all currently selected records, if any
* @returns a list of ids, empty if no record is selected (or the list view is not selectable

View File

@ -205,6 +205,9 @@
</button>
</td>
</t>
<td t-if="options.deletable" class='oe-record-delete'>
<button type="button" name="delete"></button>
</td>
</tr>
<t t-name="FormView">
<h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>

View File

@ -72,4 +72,35 @@ $(document).ready(function () {
start();
});
});
asyncTest('render deletion button if list is deletable', 1, function () {
var listview = new openerp.base.ListView(
{}, null, 'qunit-fixture', {model: null});
listview.on_loaded(fvg);
listview.do_fill_table([{id: 1}, {id: 2}, {id: 3}]).then(function () {
equal(
listview.$element.find('tbody tr td.oe-record-delete button').length,
3);
start();
});
});
asyncTest('deletion button should lead on deletion in the dataset',
2, function () {
var deleted;
var listview = new openerp.base.ListView(
{}, null, 'qunit-fixture', {model: null, unlink: function (ids) {
deleted = ids;
}});
listview.on_loaded(fvg);
listview.do_fill_table([{id: 1}, {id: 2}, {id: 3}]).then(function () {
listview.$element.find('tbody td.oe-record-delete:eq(2) button').click();
deepEqual(deleted, [3]);
listview.$element.find('tbody td.oe-record-delete:eq(0) button').click();
deepEqual(deleted, [1]);
start();
});
});
});