summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorKhoi Nguyen <bng@odoo.com>2017-10-11 10:00:29 +0200
committerKhoi Nguyen <khoi@nguyen.me.uk>2017-10-16 11:34:39 +0200
commit9f7af9f9b742d08ca69a4d4d0b963f625c4b4bba (patch)
treec317468abba71a502c47bd271a1b2523bebae832 /addons/web/static/src
parentbb692c76d41bb308ef24e729f907d707c44b99ca (diff)
[FIX] web: ticking a checkbox in an x2many after onchange
This commits fixes a traceback that appears when ticking a checkbox in an x2many which triggers an onchange. The root cause of the issue is twofold: - confirmUpdate requires currentFieldIndex to be defined, but might be needed when setting currentFieldIndex; - confirmUpdate attempts to restore the selection range even if we are not dealing with a char field (e.g. checkbox). We solve the issue by ensuring that _selectCell gives a temporary value to currentFieldIndex. This value is chosen so that confirmUpdate calls _selectCell with the right parameters. Moreover, we only restore the selection range when the range is defined.
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/form/form_renderer.js1
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js14
2 files changed, 13 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js
index ab5e4beb6b5..0652ee6bc4c 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -855,6 +855,7 @@ var FormRenderer = BasicRenderer.extend({
if (ev.data.direction === "next") {
index = this.allFieldWidgets[this.state.id].indexOf(ev.data.target);
this._activateNextFieldWidget(this.state, index);
+ debugger;
} else if (ev.data.direction === "previous") {
index = this.allFieldWidgets[this.state.id].indexOf(ev.data.target);
this._activatePreviousFieldWidget(this.state, index);
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index 9027fc3c984..b0ddbdcd385 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -136,7 +136,9 @@ ListRenderer.include({
currentRowID = this.state.data[this.currentRow].id;
currentWidget = this.allFieldWidgets[currentRowID][this.currentFieldIndex];
focusedElement = currentWidget.getFocusableElement().get(0);
- selectionRange = dom.getSelectionRange(focusedElement);
+ if (currentWidget.formatType !== 'boolean') {
+ selectionRange = dom.getSelectionRange(focusedElement);
+ }
}
var oldData = this.state.data;
@@ -179,7 +181,9 @@ ListRenderer.include({
currentRowID = self.state.data[newRowIndex].id;
currentWidget = self.allFieldWidgets[currentRowID][self.currentFieldIndex];
focusedElement = currentWidget.getFocusableElement().get(0);
- dom.setSelectionRange(focusedElement, selectionRange);
+ if (selectionRange) {
+ dom.setSelectionRange(focusedElement, selectionRange);
+ }
});
}
});
@@ -585,12 +589,18 @@ ListRenderer.include({
if (fieldIndex >= (self.allFieldWidgets[record.id] || []).length) {
return $.Deferred().reject();
}
+ // _activateFieldWidget might trigger an onchange,
+ // which requires currentFieldIndex to be set
+ // so that the cursor can be restored
+ var oldFieldIndex = self.currentFieldIndex;
+ self.currentFieldIndex = fieldIndex;
fieldIndex = self._activateFieldWidget(record, fieldIndex, {
inc: 1,
wrap: wrap,
event: options && options.event,
});
if (fieldIndex < 0) {
+ self.currentFieldIndex = oldFieldIndex;
return $.Deferred().reject();
}
self.currentFieldIndex = fieldIndex;