[FIX] web: view_list_editable, on add an item, focus on the first cell of new row

Before, the focus was set on the first row, and, thererefore, if the list was enough long, it jumped out and the actual new row was hidden
This commit is contained in:
Denis Ledoux 2014-06-12 20:03:50 +02:00
parent 28ff7e38b9
commit 4a508885ac
1 changed files with 5 additions and 35 deletions

View File

@ -127,15 +127,7 @@ openerp.web.list_editable = function (instance) {
if (this.editable()) {
this.$el.find('table:first').show();
this.$el.find('.oe_view_nocontent').remove();
this.start_edition().then(function(){
var fields = self.editor.form.fields;
self.editor.form.fields_order.some(function(field){
if (fields[field].$el.is(':visible')){
fields[field].$el.find("input").select();
return true;
}
});
});
this.start_edition();
} else {
this._super();
}
@ -240,6 +232,7 @@ openerp.web.list_editable = function (instance) {
return this.ensure_saved().then(function () {
var $recordRow = self.groups.get_row_for(record);
var cells = self.get_cells_for($recordRow);
var fields = {};
self.fields_for_resize.splice(0, self.fields_for_resize.length);
return self.with_event('edit', {
record: record.attributes,
@ -253,10 +246,13 @@ openerp.web.list_editable = function (instance) {
// FIXME: need better way to get the field back from bubbling (delegated) DOM events somehow
field.$el.attr('data-fieldname', field_name);
fields[field_name] = field;
self.fields_for_resize.push({field: field, cell: cell});
}, options).then(function () {
$recordRow.addClass('oe_edition');
self.resize_fields();
var focus_field = options && options.focus_field ? options.focus_field : (self.visible_columns.length ? self.visible_columns[0].name : undefined);
if (focus_field) fields[focus_field].$el.find('input').select();
return record.attributes;
});
}).fail(function () {
@ -750,31 +746,6 @@ openerp.web.list_editable = function (instance) {
throw new Error("is_editing's state filter must be either `new` or" +
" `edit` if provided");
},
_focus_setup: function (focus_field) {
var form = this.form;
var field;
// If a field to focus was specified
if (focus_field
// Is actually in the form
&& (field = form.fields[focus_field])
// And is visible
&& field.$el.is(':visible')) {
// focus it
field.focus();
return;
}
_(form.fields_order).detect(function (name) {
// look for first visible field in fields_order, focus it
var field = form.fields[name];
if (!field.$el.is(':visible')) {
return false;
}
// Stop as soon as a field got focused
return field.focus() !== false;
});
},
edit: function (record, configureField, options) {
// TODO: specify sequence of edit calls
var self = this;
@ -789,7 +760,6 @@ openerp.web.list_editable = function (instance) {
_(form.fields).each(function (field, name) {
configureField(name, field);
});
self._focus_setup(options && options.focus_field);
return form;
});
},