124 lines
5.6 KiB
JavaScript
124 lines
5.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import wTourUtils from '@website/js/tours/tour_utils';
|
|
import {FONT_SIZE_CLASSES} from '@web_editor/js/editor/odoo-editor/src/utils/utils';
|
|
|
|
const classNameInfo = new Map();
|
|
classNameInfo.set("display-1-fs", {scssVariableName: "display-1-font-size", start: 80, end: 90});
|
|
classNameInfo.set("display-2-fs", {scssVariableName: "display-2-font-size", start: 72, end: 80});
|
|
classNameInfo.set("display-3-fs", {scssVariableName: "display-3-font-size", start: 64, end: 70});
|
|
classNameInfo.set("display-4-fs", {scssVariableName: "display-4-font-size", start: 56, end: 60});
|
|
classNameInfo.set("h1-fs", {scssVariableName: "h1-font-size", start: 48, end: 50});
|
|
classNameInfo.set("h2-fs", {scssVariableName: "h2-font-size", start: 40, end: 42});
|
|
classNameInfo.set("h3-fs", {scssVariableName: "h3-font-size", start: 32, end: 38});
|
|
classNameInfo.set("h4-fs", {scssVariableName: "h4-font-size", start: 24, end: 34});
|
|
classNameInfo.set("h5-fs", {scssVariableName: "h5-font-size", start: 20, end: 30});
|
|
classNameInfo.set("h6-fs", {scssVariableName: "h6-font-size", start: 16, end: 26});
|
|
classNameInfo.set("base-fs", {scssVariableName: "font-size-base", start: 16, end: 26});
|
|
classNameInfo.set("o_small-fs", {scssVariableName: "small-font-size", start: 14, end: 24});
|
|
|
|
function checkComputedFontSize(fontSizeClass, stage) {
|
|
return {
|
|
content: `Check that the computed font size for ${fontSizeClass} is correct`,
|
|
trigger: `iframe #wrap .s_text_block .${fontSizeClass}`,
|
|
run: function () {
|
|
const computedFontSize = parseInt(getComputedStyle(this.$anchor[0]).fontSize);
|
|
const expectedFontSize = classNameInfo.get(fontSizeClass)[stage];
|
|
const gapBetweenSizes = Math.abs(computedFontSize - expectedFontSize);
|
|
const gapTolerance = 7; // Because the font size is responsive.
|
|
if (gapBetweenSizes > gapTolerance) {
|
|
console.error(`When applied class ${fontSizeClass}, the font size is ` +
|
|
`${computedFontSize} instead of ~${expectedFontSize}`);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function getFontSizeTestSteps(fontSizeClass) {
|
|
return [
|
|
wTourUtils.dragNDrop({id: "s_text_block", name: "Text"}),
|
|
{
|
|
content: `[${fontSizeClass}] Click on the text block first paragraph (to auto select)`,
|
|
trigger: "iframe .s_text_block p",
|
|
}, {
|
|
content: `Open the font size dropdown to select ${fontSizeClass}`,
|
|
trigger: "#font-size button",
|
|
}, {
|
|
content: `Select ${fontSizeClass} in the dropdown`,
|
|
trigger: `a[data-apply-class="${fontSizeClass}"]:contains(${classNameInfo.get(fontSizeClass).start})`,
|
|
},
|
|
checkComputedFontSize(fontSizeClass, "start"),
|
|
wTourUtils.goToTheme(),
|
|
{
|
|
content: `Open the collapse to see the font size of ${fontSizeClass}`,
|
|
trigger: `we-collapse:has(we-input[data-variable="` +
|
|
`${classNameInfo.get(fontSizeClass).scssVariableName}"]) we-toggler`,
|
|
}, {
|
|
content: `Check that the setting for ${fontSizeClass} is correct`,
|
|
trigger: `we-input[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"]`
|
|
+ ` input:propValue("${classNameInfo.get(fontSizeClass).start}")`,
|
|
isCheck: true,
|
|
}, {
|
|
content: `Change the setting value of ${fontSizeClass}`,
|
|
trigger: `[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"] input`,
|
|
run: `text_blur ${classNameInfo.get(fontSizeClass).end}`,
|
|
}, {
|
|
content: `[${fontSizeClass}] Go to blocks tab`,
|
|
trigger: ".o_we_add_snippet_btn",
|
|
}, {
|
|
content: `[${fontSizeClass}] Wait to be in blocks tab`,
|
|
trigger: ".o_we_add_snippet_btn.active",
|
|
},
|
|
wTourUtils.goToTheme(),
|
|
{
|
|
content: `Check that the setting of ${fontSizeClass} has been updated`,
|
|
trigger: `we-input[data-variable="${classNameInfo.get(fontSizeClass).scssVariableName}"]`
|
|
+ ` input:propValue("${classNameInfo.get(fontSizeClass).end}")`,
|
|
isCheck: true,
|
|
}, {
|
|
content: `Close the collapse to hide the font size of ${fontSizeClass}`,
|
|
trigger: `we-collapse:has(we-input[data-variable=` +
|
|
`"${classNameInfo.get(fontSizeClass).scssVariableName}"]) we-toggler`,
|
|
extra_trigger: `body:not(:has(.o_we_ui_loading))`,
|
|
},
|
|
checkComputedFontSize(fontSizeClass, "end"),
|
|
{
|
|
content: `Click again on the text with class ${fontSizeClass}`,
|
|
trigger: `iframe #wrap .s_text_block .${fontSizeClass}`,
|
|
}, {
|
|
content: `Remove the text snippet containing the text with class ${fontSizeClass}`,
|
|
trigger: `.oe_snippet_remove`,
|
|
}
|
|
];
|
|
}
|
|
|
|
function getAllFontSizesTestSteps() {
|
|
const steps = [];
|
|
for (const fontSizeClass of FONT_SIZE_CLASSES) {
|
|
if (fontSizeClass === 'h6-fs') {
|
|
// That option is hidden by default because same value as base-fs
|
|
continue;
|
|
}
|
|
if (fontSizeClass === 'small') {
|
|
// There is nothing related to that class in the UI to test anymore.
|
|
continue;
|
|
}
|
|
steps.push(...getFontSizeTestSteps(fontSizeClass));
|
|
}
|
|
return steps;
|
|
}
|
|
|
|
wTourUtils.registerWebsitePreviewTour("website_text_font_size", {
|
|
test: true,
|
|
url: "/",
|
|
edition: true,
|
|
}, () => [
|
|
...getAllFontSizesTestSteps(),
|
|
// The last step has to be a check.
|
|
{
|
|
content: "Verify that the text block has been deleted",
|
|
trigger: "iframe #wrap:not(:has(.s_text_block))",
|
|
isCheck: true,
|
|
},
|
|
]);
|