Skip to content

Commit 4f3867f

Browse files
committed
[IMP] html_editor: support frontend url in linkpopover preview
Previously, the link popover did not support frontend website pages (e.g., /contactus, /shop, etc.). Steps to reproduce: - Enter edit mode. - Click on a link to a frontend page, such as "Contact Us". - An error was thrown in the browser console. - Also, the link popover did not show the page description (even if it existed). This commit: - Fixes the error that occurred in the browser console. - Adds support for frontend website pages in the link popover. - Displays the page description in the linkpopover, if available. (The page description refers to the SEO field that can be set via: Site > This Page > Optimize SEO > Description)
1 parent a5b037f commit 4f3867f

File tree

2 files changed

+47
-7
lines changed

2 files changed

+47
-7
lines changed

addons/html_editor/controllers/main.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,14 +586,26 @@ def link_preview_metadata(self, preview_url):
586586
link_preview_data['og_description'] = html.fromstring(link_preview_data['og_description']).text_content()
587587
return link_preview_data
588588

589-
@http.route('/html_editor/link_preview_internal', type="jsonrpc", auth="user", methods=['POST'])
589+
@http.route('/html_editor/link_preview_internal', type="jsonrpc", auth="user", website=True, methods=['POST'])
590590
def link_preview_metadata_internal(self, preview_url):
591591
try:
592592
Actions = request.env['ir.actions.actions']
593593
context = dict(request.env.context)
594594
words = preview_url.strip('/').split('/')
595595

596-
record_id = int(words.pop())
596+
try:
597+
record_id = int(words.pop())
598+
except ValueError:
599+
# could be a frontend page
600+
result = {}
601+
page = self.env['website.page'].search([
602+
('website_id', 'in', (False, request.website.id)),
603+
('url', '=', preview_url),
604+
], limit=1)
605+
if page and page.view_id.website_meta_description:
606+
result['description'] = page.view_id.website_meta_description
607+
return result
608+
597609
action_name = words.pop()
598610
if (action_name.startswith('m-') or '.' in action_name) and action_name in request.env and not request.env[action_name]._abstract:
599611
# if path format is `odoo/<model>/<record_id>` so we use `action_name` as model name

addons/html_editor/tests/test_controller.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,18 +182,46 @@ def test_05_internal_link_preview(self):
182182
self.assertEqual(200, response_wrong_record.status_code)
183183
self.assertTrue('error_msg' in response_wrong_record.text)
184184

185-
# retrieve metadata of a url not directing to a record
186-
response_not_record = self.url_open(
185+
# retrieve metadata of a url directing to a frontend page (not a record)
186+
# page without seo description set
187+
view = self.env["ir.ui.view"].create({
188+
"arch": """
189+
<t t-name="website.my-page">
190+
<h1>My Page</h1>
191+
</t>""",
192+
"type": "qweb"
193+
})
194+
self.env["website.page"].create({
195+
"url": "/my-page",
196+
"view_id": view.id,
197+
})
198+
response_frontend_page_no_seo = self.url_open(
187199
'/html_editor/link_preview_internal',
188200
data=json_safe.dumps({
189201
"params": {
190-
"preview_url": "/odoo/users",
202+
"preview_url": "/my-page",
191203
}
192204
}),
193205
headers=self.headers
194206
)
195-
self.assertEqual(200, response_not_record.status_code)
196-
self.assertTrue('other_error_msg' in response_not_record.text)
207+
self.assertEqual(200, response_frontend_page_no_seo.status_code)
208+
self.assertTrue('"result": {}' in response_frontend_page_no_seo.text)
209+
210+
# page with seo description set
211+
self.env["ir.ui.view"].browse(view.id).update({
212+
"website_meta_description": "My page description"
213+
})
214+
response_frontend_page_with_seo = self.url_open(
215+
'/html_editor/link_preview_internal',
216+
data=json_safe.dumps({
217+
"params": {
218+
"preview_url": "/my-page",
219+
}
220+
}),
221+
headers=self.headers
222+
)
223+
self.assertEqual(200, response_frontend_page_with_seo.status_code)
224+
self.assertTrue('"result": {"description": "My page description"}' in response_frontend_page_with_seo.text)
197225

198226
# Attempt to retrieve metadata for path format `odoo/<model>/<record_id>`
199227
response_model_record = self.url_open(

0 commit comments

Comments
 (0)