[FIX] web: keep focus on checkboxes after rerendering

Previously, when a checkbox was re-rendered, it was losing focus
since it was removed and re-created. Now, if the checkbox itself
is the origin point of the re-rendering, we give the focus to the
newly re-rendered checkbox, resulting in a seamless experience
just as if the checkbox was never removed and re-rendered.
This commit is contained in:
David Monjoie
2017-05-12 14:53:48 +02:00
parent 310588b813
commit 42d95cbfc3
2 changed files with 21 additions and 1 deletions
@@ -613,6 +613,20 @@ var FieldBoolean = AbstractField.extend({
isSet: function () {
return true;
},
/**
* When the checkbox is rerendered, we need to check if it was the actual
* origin of the reset. If it is, we need to activate it back so it looks
* like it was not rerendered but is still the same input.
*
* @override
*/
reset: function (record, event) {
var rendered = this._super.apply(this, arguments);
if (event && event.target.name === this.name) {
this.activate();
}
return rendered;
},
//--------------------------------------------------------------------------
// Private
@@ -123,7 +123,7 @@ QUnit.module('basic_fields', {
QUnit.module('FieldBoolean');
QUnit.test('boolean field in form view', function (assert) {
assert.expect(11);
assert.expect(12);
var form = createView({
View: FormView,
@@ -183,6 +183,12 @@ QUnit.module('basic_fields', {
.trigger({type: "keyup", which: $.ui.keyCode.ENTER});
assert.strictEqual(form.$('.o_field_boolean input:checked').length, 1,
"checkbox should now be checked");
// blindly press enter again, it should uncheck the checkbox
$(document.activeElement).trigger({type: "keydown", which: $.ui.keyCode.ENTER});
assert.strictEqual(form.$('.o_field_boolean input:checked').length, 0,
"checkbox should not be checked");
// blindly press enter again, it should check the checkbox back
$(document.activeElement).trigger({type: "keydown", which: $.ui.keyCode.ENTER});
// save
form.$buttons.find('.o_form_button_save').click();