Skip to content

Commit 6faab47

Browse files
committed
[IMP] website: adapt mega menu tours
1 parent b77e760 commit 6faab47

File tree

4 files changed

+48
-61
lines changed

4 files changed

+48
-61
lines changed

addons/html_editor/controllers/main.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,10 @@ def link_preview_metadata_internal(self, preview_url):
592592
context = dict(request.env.context)
593593
words = preview_url.strip('/').split('/')
594594

595-
record_id = int(words.pop())
595+
try:
596+
record_id = int(words.pop())
597+
except ValueError:
598+
return {}
596599
action_name = words.pop()
597600
if (action_name.startswith('m-') or '.' in action_name) and action_name in request.env and not request.env[action_name]._abstract:
598601
# if path format is `odoo/<model>/<record_id>` so we use `action_name` as model name

addons/website/static/src/js/tours/tour_utils.js

+26
Original file line numberDiff line numberDiff line change
@@ -631,3 +631,29 @@ export function toggleMobilePreview(toggleOn) {
631631
},
632632
];
633633
}
634+
635+
/**
636+
* Opens the link popup for the specified link element.
637+
*
638+
* @param {string} triggerSelector - Selector for the link element.
639+
* @param {string} [linkName=""] - Name of the link.
640+
* @returns {TourStep[]} The tour steps that opens the link popup.
641+
*/
642+
export function openLinkPopup(triggerSelector, linkName = "") {
643+
return [
644+
{
645+
content: `Open '${linkName}' link popup`,
646+
trigger: triggerSelector,
647+
async run() {
648+
const el = this.anchor;
649+
const sel = el.ownerDocument.getSelection();
650+
sel.collapse(el.childNodes[0], 1);
651+
el.focus();
652+
}
653+
},
654+
{
655+
content: "Check if the link popover opened",
656+
trigger: ".o-we-linkpopover"
657+
}
658+
];
659+
}

addons/website/static/tests/tours/edit_megamenu.js

+18-58
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {
2-
changeOption,
2+
changeOptionInPopover,
33
clickOnExtraMenuItem,
44
clickOnSave,
5+
openLinkPopup,
56
registerWebsitePreviewTour,
67
} from "@website/js/tours/tour_utils";
78

@@ -123,14 +124,10 @@ registerWebsitePreviewTour("megamenu_active_nav_link", {
123124
edition: true,
124125
}, () => [
125126
// Add a megamenu item to the top menu.
126-
{
127-
content: "Click on a menu item",
128-
trigger: ":iframe .top_menu .nav-item a",
129-
run: "click",
130-
},
127+
...openLinkPopup(":iframe .top_menu .nav-item a", "Home"),
131128
{
132129
content: "Click on 'Link' to open Link Dialog",
133-
trigger: ":iframe .o_edit_menu_popover a.js_edit_menu",
130+
trigger: ".o-we-linkpopover a.js_edit_menu",
134131
run: "click",
135132
},
136133
{
@@ -160,50 +157,24 @@ registerWebsitePreviewTour("megamenu_active_nav_link", {
160157
run: "click",
161158
},
162159
{
163-
trigger: "#oe_snippets.o_loaded",
160+
trigger: "body:not(:has(.modal))",
164161
},
165162
{
166163
content: "Check for the new mega menu",
167164
trigger: `:iframe .top_menu:has(.nav-item a.o_mega_menu_toggle:contains("Megatron"))`,
168165
},
169-
{
170-
trigger: ".o_website_preview.editor_enable.editor_has_snippets:not(.o_is_blocked)"
171-
},
172166
clickOnExtraMenuItem({}, true),
173167
toggleMegaMenu({}),
168+
...openLinkPopup(":iframe .s_mega_menu_odoo_menu .nav-link:contains('Laptops')", "Laptops"),
174169
{
175-
content: "Select the first menu link of the first column",
176-
trigger: ":iframe .s_mega_menu_odoo_menu .row > div:first-child .nav a",
177-
async run(actions) {
178-
await actions.click();
179-
const iframeDocument = document.querySelector('.o_iframe').contentDocument;
180-
const range = iframeDocument.createRange();
181-
range.selectNodeContents(this.anchor);
182-
const sel = iframeDocument.getSelection();
183-
sel.removeAllRanges();
184-
sel.addRange(range);
185-
},
186-
},
187-
{
188-
content: "Click 'edit link' button if URL input is now shown",
189-
trigger: "#create-link",
190-
async run(actions) {
191-
// Note: the 'create-link' button is always here, however the input
192-
// for the URL might not be.
193-
// We have to consider both cases:
194-
// 1. Single-app website build: a few menu, so no extra menu added
195-
// and the URL input is shown
196-
// 2. Multi-app website build: many menu, so extra menu added
197-
// and the URL input is not shown
198-
if (!document.querySelector("#o_link_dialog_url_input")) {
199-
await actions.click();
200-
}
201-
},
170+
content: "Click on 'Edit Link'",
171+
trigger: ".o-we-linkpopover a.o_we_edit_link",
172+
run: "click",
202173
},
203174
{
204175
content: "Change the link",
205-
trigger: "#o_link_dialog_url_input",
206-
run: "edit /new_page"
176+
trigger: ".o-we-linkpopover input.o_we_href_input_link",
177+
run: "edit /new_page",
207178
},
208179
...clickOnSave(),
209180
clickOnExtraMenuItem({}, true),
@@ -223,14 +194,10 @@ registerWebsitePreviewTour('edit_megamenu_big_icons_subtitles', {
223194
edition: true,
224195
}, () => [
225196
// Add a megamenu item to the top menu.
226-
{
227-
content: "Click on a menu item",
228-
trigger: ':iframe .top_menu .nav-item a',
229-
run: "click",
230-
},
197+
...openLinkPopup(":iframe .top_menu .nav-item a", "Home"),
231198
{
232199
content: "Click on 'Link' to open Link Dialog",
233-
trigger: ':iframe .o_edit_menu_popover a.js_edit_menu',
200+
trigger: ".o-we-linkpopover a.js_edit_menu",
234201
run: "click",
235202
},
236203
{
@@ -260,15 +227,12 @@ registerWebsitePreviewTour('edit_megamenu_big_icons_subtitles', {
260227
run: "click",
261228
},
262229
{
263-
trigger: '#oe_snippets.o_loaded',
230+
trigger: "body:not(:has(.modal))",
264231
},
265232
{
266233
content: "Check for the new mega menu",
267234
trigger: ':iframe .top_menu:has(.nav-item a.o_mega_menu_toggle:contains("Megaaaaa2!"))',
268235
},
269-
{
270-
trigger: ".o_website_preview.editor_enable.editor_has_snippets:not(.o_is_blocked)"
271-
},
272236
// Edit a menu item
273237
clickOnExtraMenuItem({}, true),
274238
toggleMegaMenu({}),
@@ -277,18 +241,14 @@ registerWebsitePreviewTour('edit_megamenu_big_icons_subtitles', {
277241
trigger: ':iframe .s_mega_menu_odoo_menu .row > div:first-child .nav > :first-child',
278242
run: "click",
279243
},
280-
changeOption("MegaMenuLayout", "we-toggler"),
281-
{
282-
content: "Select Big Icons Subtitles mega menu",
283-
trigger: '[data-select-label="Big Icons Subtitles"]',
284-
run: "click",
285-
},
244+
// Change MegaMenu template
245+
...changeOptionInPopover("Mega Menu", "Template", "[title='Big Icons Subtitles']"),
286246
{
287247
content: "Select the h4 of first menu link of the first column",
288248
trigger: ':iframe .s_mega_menu_big_icons_subtitles .row > div:first-child .nav > :first-child h4',
289249
async run(actions) {
290250
await actions.click();
291-
const iframeDocument = document.querySelector('.o_iframe').contentDocument;
251+
const iframeDocument = document.querySelector('.o_iframe_container iframe').contentDocument;
292252
const range = iframeDocument.createRange();
293253
range.selectNodeContents(this.anchor);
294254
const sel = iframeDocument.getSelection();
@@ -298,7 +258,7 @@ registerWebsitePreviewTour('edit_megamenu_big_icons_subtitles', {
298258
},
299259
{
300260
content: "Convert it to Bold",
301-
trigger: '#oe_snippets #toolbar #bold',
261+
trigger: ".o-we-toolbar button[name='bold']",
302262
run: "click",
303263
},
304264
...clickOnSave(),

addons/website/tests/test_ui.py

-2
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,6 @@ def test_15_website_link_tools(self):
514514
def test_16_website_edit_megamenu(self):
515515
self.start_tour(self.env['website'].get_client_action_url('/'), 'edit_megamenu', login='admin')
516516

517-
@unittest.skip
518517
def test_website_megamenu_active_nav_link(self):
519518
self.start_tour(self.env['website'].get_client_action_url('/'), 'megamenu_active_nav_link', login='admin')
520519

@@ -603,7 +602,6 @@ def test_29_website_backend_menus_redirect(self):
603602
def test_30_website_text_animations(self):
604603
self.start_tour("/", 'text_animations', login='admin')
605604

606-
@unittest.skip
607605
def test_31_website_edit_megamenu_big_icons_subtitles(self):
608606
self.start_tour(self.env['website'].get_client_action_url('/'), 'edit_megamenu_big_icons_subtitles', login='admin')
609607

0 commit comments

Comments
 (0)