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
-