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