diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-05-09 10:10:22 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-05-09 10:10:22 +0200 |
| commit | b940e26c360dc206d320e5447e2c52017f706578 (patch) | |
| tree | 7397e3c848ed7d0ce8636329b20f6e18c894a872 /addons/base/static/src | |
| parent | 27c57ef671b3553542be164fdd39570a4ae5f890 (diff) | |
[IMP] move DOM event handling for action buttons in lists to ListView.List
bzr revid: xmo@openerp.com-20110509081022-owlj38aqcdhnlr90
Diffstat (limited to 'addons/base/static/src')
| -rw-r--r-- | addons/base/static/src/js/list.js | 49 | ||||
| -rw-r--r-- | addons/base/static/src/xml/base.xml | 2 |
2 files changed, 26 insertions, 25 deletions
diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 467b9c5cde1..502b3f331a0 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -68,6 +68,16 @@ openerp.base.ListView = openerp.base.Controller.extend( }, 'deleted': function (e, ids) { self.do_delete(ids); + }, + 'action': function (e, action_name, id) { + var action = _.detect(self.columns, function (field) { + return field.name === action_name; + }); + if (!action) { return; } + // TODO: not supposed to reload everything, I think + self.execute_action( + action, self.dataset, self.session.action_manager, + id, self.do_reload); } }); @@ -163,24 +173,6 @@ openerp.base.ListView = openerp.base.Controller.extend( var $table = this.$element.find('table'); this.list.move_to($table); - // Cell events - $table.delegate( - 'td.oe-field-cell button', 'click', function (e) { - e.stopImmediatePropagation(); - - var $cell = $(e.currentTarget).closest('td'); - - var col_index = $cell.prevAll('td').length; - var field = self.visible_columns[col_index]; - - var $row = $cell.parent('tr'); - var row = self.rows[$row.prevAll().length]; - - // TODO: we should probably only reload content, also maybe diff records or something, instead of replacing every single row - self.execute_action( - field, self.dataset, self.session.action_manager, - row.data.id.value, self.do_reload); - }); // Global rows handlers $table.delegate('tr', 'click', this.on_select_row); @@ -397,10 +389,14 @@ openerp.base.ListView.List = Class.extend( * `selected` * Triggered when a row is selected (using check boxes), provides an * array of ids of all the selected records. - * * `deleted` * Triggered when deletion buttons are hit, provide an array of ids of * all the records being marked for suppression. + * `action` + * Triggered when an action button is clicked, provides two parameters: + * + * * The name of the action to execute (as a string) + * * The id of the record to execute the action on * * @constructs * @param {Object} opts display options, identical to those of :js:class:`openerp.base.ListView` @@ -421,11 +417,16 @@ openerp.base.ListView.List = Class.extend( }) .delegate('td.oe-record-delete button', 'click', function (e) { e.stopPropagation(); - var $row = $(e.target).closest('tr'), - event = $.Event('deleted'); - $(self).trigger( - event, - [[self.row_id($row)]]); + var $row = $(e.target).closest('tr'); + $(self).trigger('deleted', [[self.row_id($row)]]); + }) + .delegate('td.oe-field-cell button', 'click', function (e) { + e.stopPropagation(); + var $target = $(e.currentTarget), + field = $target.closest('td').data('field'), + record_id = self.row_id($target.closest('tr')); + + $(self).trigger('action', [field, record_id]); }); }, move_to: function (element) { diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index bcd8db9444f..87626d8c05c 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -208,7 +208,7 @@ <t t-foreach="columns" t-as="column"> <t t-set="attrs" t-value="column.attrs_for(row.data)"/> <td t-if="column.invisible !== '1'" t-att-title="column.help" - class="oe-field-cell"> + class="oe-field-cell" t-att-data-field="column.id"> <t t-if="!attrs.invisible"> <t t-set="is_button" t-value="column.tag === 'button'"/> <!-- TODO: get correct widget from form --> |
