summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2019-07-01 09:29:03 +0000
committerMohammed Shekha <msh@odoo.com>2019-07-05 09:41:30 +0000
commit69ca6bd0a46e80e258db54f02bee2c03bd6bc909 (patch)
treec58e2685f4239f6e16f924e58aab98ba71c7de2d /addons
parent06c78c8dc29e5a92987787c6e4c48933c5a1bc28 (diff)
[IMP] web: resize textarea on notebook tab show
Before this commit: when textarea is on second tab of notebook and it has long value then autoresize can not compute actual height of the textarea as it is in second tab and has display: none property, it is not resized until focus comes on it After this commit: call DOM_updated event on notebook tab change, DOM_updated event will call resize method again, so when tab changes resize is called and as textarea is visible now, proper height is calculated and assigned to textarea. task-2007558 closes odoo/odoo#34503 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com> Co-authored-by: Mohammed Shekha <msh@odoo.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/web/static/src/js/views/form/form_renderer.js11
-rw-r--r--addons/web/static/tests/views/form_tests.js48
2 files changed, 59 insertions, 0 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 9efadaabe30..98331c9b409 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -16,6 +16,7 @@ var FormRenderer = BasicRenderer.extend({
'click .o_notification_box .oe_field_translate': '_onTranslate',
'click .o_notification_box .close': '_onTranslateNotificationClose',
'click .oe_title, .o_inner_group': '_onClick',
+ 'shown.bs.tab a[data-toggle="tab"]': '_onNotebookTabChanged',
}),
custom_events: _.extend({}, BasicRenderer.prototype.custom_events, {
'navigation_move':'_onNavigationMove',
@@ -1062,6 +1063,16 @@ var FormRenderer = BasicRenderer.extend({
}
},
/**
+ * Listen to notebook tab changes and trigger a DOM_updated event such that
+ * widgets in the visible tab can correctly compute their dimensions (e.g.
+ * autoresize on field text)
+ *
+ * @private
+ */
+ _onNotebookTabChanged: function () {
+ core.bus.trigger('DOM_updated');
+ },
+ /**
* open the translation view for the current field
*
* @private
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 9c603e8b051..5ce5718178b 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -7016,6 +7016,54 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('autoresize of text fields is done on notebook page show', async function (assert) {
+ assert.expect(5);
+
+ this.data.partner.fields.text_field = { string: 'Text field', type: 'text' };
+ this.data.partner.fields.text_field.default = "some\n\nmulti\n\nline\n\ntext\n";
+ this.data.partner.records[0].text_field = "a\nb\nc\nd\ne\nf";
+ this.data.partner.fields.text_field_empty = { string: 'Text field', type: 'text' };
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<sheet>' +
+ '<notebook>' +
+ '<page string="First Page">' +
+ '<field name="foo"/>' +
+ '</page>' +
+ '<page string="Second Page">' +
+ '<field name="text_field"/>' +
+ '</page>' +
+ '<page string="Third Page">' +
+ '<field name="text_field_empty"/>' +
+ '</page>' +
+ '</notebook>' +
+ '</sheet>' +
+ '</form>',
+ res_id: 1,
+ });
+
+ await testUtils.form.clickEdit(form);
+ assert.hasClass(form.$('.o_notebook .nav .nav-link:first()'), 'active');
+
+ await testUtils.dom.click(form.$('.o_notebook .nav .nav-link:nth(1)'));
+ assert.hasClass(form.$('.o_notebook .nav .nav-link:nth(1)'), 'active');
+
+ var height = form.$('.o_field_widget[name=text_field]').height();
+ assert.ok(height > 80, "textarea should have an height of at least 80px");
+
+ await testUtils.dom.click(form.$('.o_notebook .nav .nav-link:nth(2)'));
+ assert.hasClass(form.$('.o_notebook .nav .nav-link:nth(2)'), 'active');
+
+ var height = form.$('.o_field_widget[name=text_field_empty]').css('height');
+ assert.strictEqual(height, '50px', "empty textarea should have height of 50px");
+
+ form.destroy();
+ });
+
QUnit.test('check if the view destroys all widgets and instances', async function (assert) {
assert.expect(1);