[FIX] odoo_theme: correctly consider baseurl

urlBase was only containing the domain name, not the /documentation/

closes odoo/documentation#2062

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
This commit is contained in:
Martin Trigaux 2022-05-20 06:14:35 +00:00 committed by Antoine Vandevenne (anv)
parent a81e0623b0
commit 3901e3b241

View File

@ -91,24 +91,32 @@ const _prepareAccordion = (tocElement) => {
const _generateFallbackUrls = async (targetUrl) => {
const _deconstructUrl = (urlObject) => {
let urlBase = urlObject.origin;
let version = '';
let language = '';
const originalPathParts = [];
for (let fragment of urlObject.pathname.split('/').reverse()) {
if (fragment.match(/^(?:saas-)?\d{2}\.\d$|^master$/)) {
version = fragment;
} else if (fragment.match(/^[a-z]{2}(?:_[A-Z]{2})?$/)) {
language = fragment;
} else if (fragment.length > 0) {
originalPathParts.unshift(fragment);
if (fragment.length > 0) {
if (fragment.match(/^(?:saas-)?\d{2}\.\d$|^master$/)) {
// Try to match the version before considering the fragment part of the path.
version = fragment;
} else if (fragment.match(/^[a-z]{2}(?:_[A-Z]{2})?$/)) {
// Try to match the language before considering the fragment part of the path.
language = fragment;
} else if (version || language) {
// The fragment is part of the base URL but cannot be part of the part anymore.
urlBase += `/${fragment}`;
} else {
// The fragment is part of the original path.
originalPathParts.unshift(fragment);
}
}
}
return [version, language, originalPathParts];
return [urlBase, version, language, originalPathParts];
};
const targetUrlObject = new URL(targetUrl);
const [version, language, originalPathParts] = _deconstructUrl(targetUrlObject);
const urlBase = targetUrlObject.origin;
const [urlBase, version, language, originalPathParts] = _deconstructUrl(targetUrlObject);
// Generate the fallback URLs.
const fallbackUrls = [];
@ -124,21 +132,23 @@ const _generateFallbackUrls = async (targetUrl) => {
}
// Build the fallback URL from the version, language and path parts, if any.
if (version && language)
if (version && language) {
fallbackUrls.push(
`${urlBase}/${version}/${language}/${fallbackPathParts.join('/')}`,
`${urlBase}/${version}/${fallbackPathParts.join('/')}`,
);
else if (version && !language)
} else if (version && !language) {
fallbackUrls.push(`${urlBase}/${version}/${fallbackPathParts.join('/')}`);
else if (!version && language)
} else if (!version && language) {
fallbackUrls.push(
`${urlBase}/${language}/${fallbackPathParts.join('/')}`,
`${urlBase}/${fallbackPathParts.join('/')}`,
);
else if (!version && !language)
} else if (!version && !language) {
fallbackUrls.push(`${urlBase}/${fallbackPathParts.join('/')}`);
}
}
fallbackUrls.push(`${urlBase}/`);
return fallbackUrls;
};