[IMP] look of non-selectable or non-editable editable list views when a row is being edited

dynamically add and remove padding rows

lp bug: https://launchpad.net/bugs/842644 fixed

bzr revid: xmo@openerp.com-20110908125510-fb7vcjsixj5sqhpz
This commit is contained in:
Xavier Morel 2011-09-08 14:55:10 +02:00
parent b7ccdadc17
commit 32bccb877b
3 changed files with 61 additions and 16 deletions

View File

@ -112,6 +112,7 @@ openerp.web.list_editable = function (openerp) {
cancelled.resolve();
}
cancelled.then(function () {
self.view.unpad_columns();
self.edition_form.stop();
self.edition_form.$element.remove();
delete self.edition_form;
@ -197,6 +198,16 @@ openerp.web.list_editable = function (openerp) {
$new_row.prepend('<td>');
}
});
// Add columns for the cancel and save buttons, if
// there are none in the list
if (!self.options.selectable) {
self.view.pad_columns(
1, {except: $new_row, position: 'before'});
}
if (!self.options.deletable) {
self.view.pad_columns(
1, {except: $new_row});
}
self.edition_form.do_show();
});

View File

@ -49,6 +49,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
this.previous_colspan = null;
this.columns = [];
@ -603,6 +604,49 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
get_selected_ids: function() {
var ids = this.groups.get_selection().ids;
return ids;
},
/**
* Adds padding columns at the start or end of all table rows (including
* field names row)
*
* @param {Number} count number of columns to add
* @param {Object} options
* @param {"before"|"after"} [position="after"] insertion position for the new columns
* @param {Object} [except] content row to not pad
*/
pad_columns: function (count, options) {
options = options || {};
// padding for action/pager header
var $first_header = this.$element.find('thead tr:first th');
var colspan = $first_header.attr('colspan');
if (colspan) {
if (!this.previous_colspan) {
this.previous_colspan = colspan;
}
$first_header.attr('colspan', parseInt(colspan, 10) + count);
}
// Padding for column titles, footer and data rows
var $rows = this.$element
.find('.oe-listview-header-columns, tr:not(thead tr)')
.not(options['except']);
var newcols = new Array(count+1).join('<td class="oe-listview-padding"></td>');
if (options.position === 'before') {
$rows.prepend(newcols);
} else {
$rows.append(newcols);
}
},
/**
* Removes all padding columns of the table
*/
unpad_columns: function () {
this.$element.find('.oe-listview-padding').remove();
if (this.previous_colspan) {
this.$element
.find('thead tr:first th')
.attr('colspan', this.previous_colspan);
this.previous_colspan = null;
}
}
});
openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.ListView.List# */{

View File

@ -566,7 +566,7 @@
</table>
</th>
</tr>
<tr t-if="options.header">
<tr t-if="options.header" class="oe-listview-header-columns">
<t t-foreach="columns" t-as="column">
<th t-if="column.meta">
<t t-esc="column.string"/>
@ -1211,21 +1211,11 @@
<button type="button" class="oe_formopenpopup-form-close">Cancel</button>
</t>
<t t-name="ListView.row.frame" t-extend="WidgetFrame">
<t t-jquery="tr">
$(document.createElement('t'))
.append(this.contents())
.attr({
't-foreach': this.attr('t-foreach'),
't-as': this.attr('t-as')
})
.replaceAll(this)
.after($(document.createElement('td')).append(
$(document.createElement('button')).attr({
'class': 'oe-edit-row-save', 'type': 'button'}).text('Save')))
.before($(document.createElement('td')).append(
$(document.createElement('button')).attr({
'class': 'oe-edit-row-cancel', 'type': 'button'}).text('Cancel')))
.unwrap();
<t t-jquery="tr" t-operation="prepend">
<td><button type="button" class="oe-edit-row-cancel">Cancel</button></td>
</t>
<t t-jquery="tr" t-operation="append">
<td><button type="button" class="oe-edit-row-save">Save</button></td>
</t>
</t>