From c60743428d9c47af1f18a331ebeadaebb23e3d4c Mon Sep 17 00:00:00 2001 From: qsm-odoo Date: Thu, 30 Mar 2017 11:51:45 +0200 Subject: [PATCH] [FIX] web: typo in function name (FieldBoolean._onKeydown) When focusing a checkbox field and hitting the "enter" key, the checkbox should change its status. Before this commit, this produced a traceback instead as it was trying to call the `_onKeyDown` function while it was defined as `_onKeydown`. Also the `_onKeydown` method is in fact declared in the `AbstractField` parent implementation, so there is no point in declaring the event binding twice. Also, part of the `FieldBoolean._onKeydown` code was in common with its parent `AbstractField._onKeydown` code so remove it as there is no point in duplicating it. Note: this `_onKeydown` method has to be refactored as it is breaking form view navigation anyway. Also modify an existing test to check the checkbox keyboard navigation. --- addons/web/static/src/js/fields/basic_fields.js | 6 +----- addons/web/static/test/fields/basic_fields_tests.js | 11 +++++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 3a2aa23e0e0..245643ece57 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -373,7 +373,6 @@ var FieldBoolean = AbstractField.extend({ className: 'o_field_boolean', events: _.extend({}, AbstractField.prototype.events, { change: '_onChange', - keydown: '_onKeyDown', }), replace_element: true, supportedFieldTypes: ['boolean'], @@ -455,6 +454,7 @@ var FieldBoolean = AbstractField.extend({ * @param {KeyEvent} event */ _onKeydown: function (event) { + this._super.apply(this, arguments); switch (event.which) { case $.ui.keyCode.DOWN: this.trigger_up('move_down'); @@ -468,10 +468,6 @@ var FieldBoolean = AbstractField.extend({ case $.ui.keyCode.RIGHT: this.trigger_up('move_right'); break; - case $.ui.keyCode.TAB: - this.trigger_up('move_next'); - event.preventDefault(); - break; case $.ui.keyCode.ENTER: this.$input.prop('checked', !this.value); this._setValue(!this.value); diff --git a/addons/web/static/test/fields/basic_fields_tests.js b/addons/web/static/test/fields/basic_fields_tests.js index 004653ab680..b1488e72a0b 100644 --- a/addons/web/static/test/fields/basic_fields_tests.js +++ b/addons/web/static/test/fields/basic_fields_tests.js @@ -109,7 +109,7 @@ QUnit.module('basic_fields', { QUnit.module('FieldBoolean'); - QUnit.test('boolean field in form view', function(assert) { + QUnit.test('boolean field in form view', function (assert) { assert.expect(7); var form = createView({ @@ -142,8 +142,11 @@ QUnit.module('basic_fields', { form.$buttons.find('.o_form_button_edit').click(); assert.strictEqual(form.$('.o_field_boolean input:checked').length, 0, "checkbox should still be unchecked"); - // check the checkbox - form.$('.o_field_boolean input').click(); + // check the checkbox by hitting the "enter" key after focusing it + form.$('.o_field_boolean input') + .trigger("focusin") + .trigger({type: "keydown", which: $.ui.keyCode.ENTER}) + .trigger({type: "keyup", which: $.ui.keyCode.ENTER}); assert.strictEqual(form.$('.o_field_boolean input:checked').length, 1, "checkbox should now be checked"); @@ -154,7 +157,7 @@ QUnit.module('basic_fields', { form.destroy(); }); - QUnit.test('boolean field in editable list view', function(assert) { + QUnit.test('boolean field in editable list view', function (assert) { assert.expect(11); var list = createView({