diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index ee49fd01dfa..2def70e7071 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -69,6 +69,7 @@ 'project/static/src/js/project_activity.js', 'project/static/src/js/project_control_panel.js', 'project/static/src/js/project_form.js', + 'project/static/src/js/project_form_html_field_expander_mixin.js', 'project/static/src/js/project_graph_view.js', 'project/static/src/js/project_kanban.js', 'project/static/src/js/project_list.js', diff --git a/addons/project/static/src/css/project.css b/addons/project/static/src/css/project.css index 5366b7d8e17..5bcdb719187 100644 --- a/addons/project/static/src/css/project.css +++ b/addons/project/static/src/css/project.css @@ -15,10 +15,6 @@ } .o_form_project_tasks .o_wysiwyg_resizer { border: 0; - margin: 0 0px -40px 0px; -} -.o_form_project_tasks .o_form_sheet, .o_form_project_tasks .oe_form_field_html, .o_form_project_tasks .o_wysiwyg_wrapper { - margin-bottom: 0 !important; } .o_kanban_project_tasks .oe_kanban_align.badge { diff --git a/addons/project/static/src/js/project_form.js b/addons/project/static/src/js/project_form.js index 8b8691ee8ea..32c9b8d47b3 100644 --- a/addons/project/static/src/js/project_form.js +++ b/addons/project/static/src/js/project_form.js @@ -3,29 +3,12 @@ import Dialog from 'web.Dialog'; import FormView from 'web.FormView'; import FormController from 'web.FormController'; -import { bus, _t } from 'web.core'; -import { device } from 'web.config'; +import FormRenderer from 'web.FormRenderer'; +import { _t } from 'web.core'; import viewRegistry from 'web.view_registry'; +import FormHtmlFieldExpanderMixin from './project_form_html_field_expander_mixin' const ProjectFormController = FormController.extend({ - on_attach_callback() { - this._super(...arguments); - if (!device.isMobile) { - bus.on("DOM_updated", this, this._onDomUpdated); - } - }, - _onDomUpdated() { - const $editable = this.$el.find('.note-editable'); - if ($editable.length) { - const resizerHeight = this.$el.find('.o_wysiwyg_resizer').outerHeight(); - const newHeight = window.innerHeight - $editable.offset().top - resizerHeight - 1; - $editable.outerHeight(newHeight); - } - }, - on_detach_callback() { - this._super(...arguments); - bus.off('DOM_updated', this._onDomUpdated); - }, _getActionMenuItems(state) { if (!this.archiveEnabled || !state.data['recurrence_id']) { return this._super(...arguments); @@ -112,10 +95,24 @@ const ProjectFormController = FormController.extend({ } }); -export const ProjectFormView = FormView.extend({ +const FormDescriptionExpanderRenderer = FormRenderer.extend(Object.assign({}, FormHtmlFieldExpanderMixin, { + // 58px is the sum of the top margin of o_form_sheet 12 px + the bottom padding of o_form_sheet 24px + // + 5px margin bottom (o_field_widget) + 1px border + the bottom padding of tab-pane 16 px. + bottomDistance: 58, +})); + +export const FormDescriptionExpanderView = FormView.extend({ config: Object.assign({}, FormView.prototype.config, { + Renderer: FormDescriptionExpanderRenderer, + }), +}) + +export const ProjectFormView = FormDescriptionExpanderView.extend({ + config: Object.assign({}, FormDescriptionExpanderView.prototype.config, { Controller: ProjectFormController, }), }); viewRegistry.add('project_form', ProjectFormView); + +viewRegistry.add('form_description_expander', FormDescriptionExpanderView) diff --git a/addons/project/static/src/js/project_form_html_field_expander_mixin.js b/addons/project/static/src/js/project_form_html_field_expander_mixin.js new file mode 100644 index 00000000000..2ee9c7ba929 --- /dev/null +++ b/addons/project/static/src/js/project_form_html_field_expander_mixin.js @@ -0,0 +1,29 @@ +/** @odoo-module **/ + +import { device } from 'web.config'; + +const FormHtmlFieldExpanderMixin = { + bottomDistance: 0, + fieldQuerySelector: '.o_xxl_form_view .oe_form_field.oe_form_field_html', + on_attach_callback() { + this._super(...arguments); + this._fixDescriptionHeight(); + }, + _fixDescriptionHeight() { + if (device.isMobile) return; + + const descriptionField = this.el.querySelector(this.fieldQuerySelector); + if (descriptionField) { + const editor = descriptionField.querySelector('.note-editable') + const elementToResize = editor || descriptionField + const minHeight = document.documentElement.clientHeight - elementToResize.getBoundingClientRect().top - this.bottomDistance; + elementToResize.style.minHeight = `${minHeight}px` + } + }, + _updateView() { + this._super(...arguments); + this._fixDescriptionHeight(); + }, +} + +export default FormHtmlFieldExpanderMixin diff --git a/addons/project/static/src/scss/project_form.scss b/addons/project/static/src/scss/project_form.scss index 81a9a5710f7..84602ce6e3d 100644 --- a/addons/project/static/src/scss/project_form.scss +++ b/addons/project/static/src/scss/project_form.scss @@ -13,18 +13,10 @@ padding: $o-horizontal-padding $o-horizontal-padding; } -.o_form_view.o_form_project_update:not(.o_form_readonly), .o_form_view.o_form_project_update:not(.o_form_readonly) .o_form_sheet { - padding-bottom: 0; - margin-bottom: 0; -} - .o_project_update_description { .note-editable, .o_wysiwyg_resizer { border: 0; } - &.oe_form_field_html, .o_wysiwyg_wrapper { - margin-bottom: 0; - } &.oe_form_field_html .o_readonly { padding: $o-horizontal-padding $o-horizontal-padding; } diff --git a/addons/project/views/project_update_views.xml b/addons/project/views/project_update_views.xml index 6d5217074a4..2fb4eddc65b 100644 --- a/addons/project/views/project_update_views.xml +++ b/addons/project/views/project_update_views.xml @@ -15,7 +15,7 @@ project.update.view.form project.update -
+

@@ -37,7 +37,7 @@ - + diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml index 9e30401b7b5..c497762a17c 100644 --- a/addons/project/views/project_views.xml +++ b/addons/project/views/project_views.xml @@ -286,7 +286,7 @@ project.project.form project.project - +