Skip to content

Commit 910ad00

Browse files
committed
[FIX] document_page_reference: fix Markup escaping in _get_page_index
html_escape() returns markupsafe.Markup, which auto-escapes plain str when concatenated. Use Markup() for HTML literals to prevent the index links from being double-escaped. Also add sanitize=False to content_parsed field to match content field.
1 parent b50fb70 commit 910ad00

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

document_page_reference/models/document_page.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import logging
55

6+
from markupsafe import Markup
7+
68
from odoo import _, api, fields, models, tools
79
from odoo.exceptions import ValidationError
810
from odoo.tools.misc import html_escape
@@ -52,24 +54,31 @@ class DocumentPage(models.Model):
5254
reference = fields.Char(
5355
help="Used to find the document, it can contain letters, numbers and _"
5456
)
55-
content_parsed = fields.Html(compute="_compute_content_parsed")
57+
content_parsed = fields.Html(compute="_compute_content_parsed", sanitize=False)
5658

5759
def _get_page_index(self, link=True):
5860
"""Override to use oe_direct_line links compatible with the widget."""
5961
self.ensure_one()
6062
index = [
61-
"<li>" + subpage._get_page_index() + "</li>" for subpage in self.child_ids
63+
Markup("<li>") + subpage._get_page_index() + Markup("</li>")
64+
for subpage in self.child_ids
6265
]
63-
r = ""
66+
r = Markup("")
6467
if link:
6568
r = (
66-
'<a href="#" class="oe_direct_line"'
67-
f' data-oe-model="{self._name}" data-oe-id="{self.id}">'
69+
Markup(
70+
'<a href="#" class="oe_direct_line"'
71+
' data-oe-model="%s" data-oe-id="%s">'
72+
)
73+
% (
74+
self._name,
75+
self.id,
76+
)
6877
+ html_escape(self.name)
69-
+ "</a>"
78+
+ Markup("</a>")
7079
)
7180
if index:
72-
r += "<ul>" + "".join(index) + "</ul>"
81+
r += Markup("<ul>") + Markup("").join(index) + Markup("</ul>")
7382
return r
7483

7584
def get_formview_action(self, access_uid=None):

document_page_reference/tests/test_document_reference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,4 @@ def test_get_formview_action(self):
7575
def test_compute_content_parsed(self):
7676
self.page1.content = "<p>"
7777
self.page1._compute_content_parsed()
78-
self.assertEqual(str(self.page1.content_parsed), "<p></p>")
78+
self.assertEqual(str(self.page1.content_parsed), "<p>")

0 commit comments

Comments
 (0)