diff options
| author | Nicolas Lempereur <nle@odoo.com> | 2019-11-15 13:38:07 +0000 |
|---|---|---|
| committer | Nicolas Lempereur <nle@odoo.com> | 2019-11-25 18:10:30 +0000 |
| commit | 1c47f2070b76ee6c06d0c65e6a3cfc7c1ccdfbfb (patch) | |
| tree | d1ca7f8287f32ea3908c0d08590079c8387be76f /addons/web_editor/models/ir_ui_view.py | |
| parent | 70d856f2c7c0ba8358af86a243ee4b872e057e2b (diff) | |
[FIX] web_editor: update attribute of edition container
In most use case, when we edit the website we have a situation such as:
```
<div id="wrap" branding-attributes="...">
<section class="mycontent">hi!</section>
</div>
```
When we modify a part, we replace all child nodes of the branded
element.
But if we had more complex content such as:
```
<div id="wrap">
<section class="mycontent" branding-attributes="...">ho!</section>
<t t-call-assets="web.assets_common" t-js="false" t-css="false"/>
</div>
```
we have a t-call inside the div#wrap, so branding is distributed to
child that could have attribute modified (eg. changing background).
Then if `<section/>` node is saved, the possibly modified attributes
are lost.
Without the change, the added test fails with:
'<div class="nice">hoi</div>' not found in '...<div>hoi</div>...' :
saved element attributes are saved excluding branding ones
opw-2122947
closes #40345
closes odoo/odoo#40830
X-original-commit: 71b20a24c40ae9daa10076ab0fd656b043819cff
Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com>
Diffstat (limited to 'addons/web_editor/models/ir_ui_view.py')
| -rw-r--r-- | addons/web_editor/models/ir_ui_view.py | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index edda3ba6887..0d1100a0161 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -10,6 +10,8 @@ from odoo import api, fields, models _logger = logging.getLogger(__name__) +EDITING_ATTRIBUTES = ['data-oe-model', 'data-oe-id', 'data-oe-field', 'data-oe-xpath', 'data-note-id'] + class IrUiView(models.Model): _inherit = 'ir.ui.view' @@ -132,6 +134,11 @@ class IrUiView(models.Model): # Note: after a standard edition, the tail *must not* be replaced if replace_tail: root.tail = replacement.tail + # update attributes + root.attrib.clear() + root.attrib.update(replacement.attrib) + for attribute in EDITING_ATTRIBUTES: + root.attrib.pop(attribute, None) # replace all children del root[:] for child in replacement: |
