Skip to content

Commit

Permalink
[FIX] web: fix date picker fields do not capture the focus event when…
Browse files Browse the repository at this point in the history
… invisible

Before this fix, in form view, when a datepicker was not visible (because
they were on another page or literally invisible), when the user pressed
TAB and the datepicker was positionned after the current field in the
form, it was capturing the focus during the activate phase of the
navigation_move.
This is not correct for invisible elements.

After this fix, only focusable datepickers get the focus during the
activation phase of the navigation_move.

co-author: aab-odoo ([email protected])
  • Loading branch information
VincentSchippefilt committed Sep 26, 2018
1 parent 046837b commit c2b4790
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 10 deletions.
2 changes: 1 addition & 1 deletion addons/web/static/src/js/fields/basic_fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ var FieldDate = InputField.extend({
* @override
*/
activate: function () {
if (this.datewidget) {
if (this.isFocusable() && this.datewidget) {
this.datewidget.focus();
return true;
}
Expand Down
43 changes: 34 additions & 9 deletions addons/web/static/tests/fields/basic_fields_tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ QUnit.module('basic_fields', {
'<field name="qux" options="{\'type\': \'number\'}"/>' +
'</form>',
res_id: 4,
translateParameters: {
translateParameters: {
thousands_sep: ",",
grouping: [3, 0],
},
Expand Down Expand Up @@ -752,7 +752,7 @@ QUnit.module('basic_fields', {
'<field name="qux"/>' +
'</form>',
res_id: 4,
translateParameters: {
translateParameters: {
thousands_sep: ",",
grouping: [3, 0],
},
Expand All @@ -761,7 +761,7 @@ QUnit.module('basic_fields', {
form.$buttons.find('.o_form_button_edit').click();
assert.strictEqual(form.$('.o_field_widget').attr('type'), 'text',
'Float field with option type must have a text type (default type).');

form.$('input').val('123456.7890').trigger('input');
form.$buttons.find('.o_form_button_save').click();
form.$buttons.find('.o_form_button_edit').click();
Expand Down Expand Up @@ -2772,7 +2772,32 @@ QUnit.module('basic_fields', {
form.destroy();
});

QUnit.test('datetime field in form view 2', function (assert) {

QUnit.test('datetime field not visible in form view should not capture the focus on keyboard navigation', function (assert) {
assert.expect(1);

var form = createView({
View: FormView,
model: 'partner',
data: this.data,
arch:'<form string="Partners"><field name="txt"/>' +
'<field name="datetime" invisible="True"/></form>',
res_id: 1,
viewOptions: {
mode: 'edit',
},
});

form.$el.find('textarea[name=txt]').trigger($.Event('keydown', {
which: $.ui.keyCode.TAB,
keyCode: $.ui.keyCode.TAB,
}));
assert.strictEqual(document.activeElement, form.$buttons.find('.o_form_button_save')[0],
"the save button should be selected, because the datepicker did not capture the focus");
form.destroy();
});

QUnit.test('datetime field with datetime formatted without second', function (assert) {
assert.expect(2);

this.data.partner.fields.datetime.default = "2017-08-02 12:00:05";
Expand Down Expand Up @@ -3514,7 +3539,7 @@ QUnit.module('basic_fields', {
'<field name="int_field" options="{\'type\': \'number\'}"/>' +
'</form>',
res_id: 4,
translateParameters: {
translateParameters: {
thousands_sep: ",",
grouping: [3, 0],
},
Expand All @@ -3525,7 +3550,7 @@ QUnit.module('basic_fields', {
'Integer field with option type must have a type attribute.');
assert.strictEqual(form.$('.o_field_widget').attr('type'), 'number',
'Integer field with option type must have a type attribute equals to "number".');

form.$('input').val('1234567890').trigger('input');
form.$buttons.find('.o_form_button_save').click();
form.$buttons.find('.o_form_button_edit').click();
Expand All @@ -3534,7 +3559,7 @@ QUnit.module('basic_fields', {
form.$buttons.find('.o_form_button_save').click();
assert.strictEqual(form.$('.o_field_widget').text(), '1,234,567,890',
'Integer value must be formatted in readonly view even if the input type is number.');

form.destroy();
});

Expand All @@ -3549,7 +3574,7 @@ QUnit.module('basic_fields', {
'<field name="int_field"/>' +
'</form>',
res_id: 4,
translateParameters: {
translateParameters: {
thousands_sep: ",",
grouping: [3, 0],
},
Expand All @@ -3558,7 +3583,7 @@ QUnit.module('basic_fields', {
form.$buttons.find('.o_form_button_edit').click();
assert.strictEqual(form.$('.o_field_widget').attr('type'), 'text',
'Integer field without option type must have a text type (default type).');

form.$('input').val('1234567890').trigger('input');
form.$buttons.find('.o_form_button_save').click();
form.$buttons.find('.o_form_button_edit').click();
Expand Down

0 comments on commit c2b4790

Please sign in to comment.