Skip to content

Commit 3901e3b

Browse files
mart-eAntoineVDV
authored andcommitted
[FIX] odoo_theme: correctly consider baseurl
urlBase was only containing the domain name, not the /documentation/ closes #2062 Signed-off-by: Antoine Vandevenne (anv) <[email protected]>
1 parent a81e062 commit 3901e3b

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

extensions/odoo_theme/static/js/utils.js

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,24 +91,32 @@ const _prepareAccordion = (tocElement) => {
9191
const _generateFallbackUrls = async (targetUrl) => {
9292

9393
const _deconstructUrl = (urlObject) => {
94+
let urlBase = urlObject.origin;
9495
let version = '';
9596
let language = '';
9697
const originalPathParts = [];
9798
for (let fragment of urlObject.pathname.split('/').reverse()) {
98-
if (fragment.match(/^(?:saas-)?\d{2}\.\d$|^master$/)) {
99-
version = fragment;
100-
} else if (fragment.match(/^[a-z]{2}(?:_[A-Z]{2})?$/)) {
101-
language = fragment;
102-
} else if (fragment.length > 0) {
103-
originalPathParts.unshift(fragment);
99+
if (fragment.length > 0) {
100+
if (fragment.match(/^(?:saas-)?\d{2}\.\d$|^master$/)) {
101+
// Try to match the version before considering the fragment part of the path.
102+
version = fragment;
103+
} else if (fragment.match(/^[a-z]{2}(?:_[A-Z]{2})?$/)) {
104+
// Try to match the language before considering the fragment part of the path.
105+
language = fragment;
106+
} else if (version || language) {
107+
// The fragment is part of the base URL but cannot be part of the part anymore.
108+
urlBase += `/${fragment}`;
109+
} else {
110+
// The fragment is part of the original path.
111+
originalPathParts.unshift(fragment);
112+
}
104113
}
105114
}
106-
return [version, language, originalPathParts];
115+
return [urlBase, version, language, originalPathParts];
107116
};
108117

109118
const targetUrlObject = new URL(targetUrl);
110-
const [version, language, originalPathParts] = _deconstructUrl(targetUrlObject);
111-
const urlBase = targetUrlObject.origin;
119+
const [urlBase, version, language, originalPathParts] = _deconstructUrl(targetUrlObject);
112120

113121
// Generate the fallback URLs.
114122
const fallbackUrls = [];
@@ -124,21 +132,23 @@ const _generateFallbackUrls = async (targetUrl) => {
124132
}
125133

126134
// Build the fallback URL from the version, language and path parts, if any.
127-
if (version && language)
135+
if (version && language) {
128136
fallbackUrls.push(
129137
`${urlBase}/${version}/${language}/${fallbackPathParts.join('/')}`,
130138
`${urlBase}/${version}/${fallbackPathParts.join('/')}`,
131139
);
132-
else if (version && !language)
140+
} else if (version && !language) {
133141
fallbackUrls.push(`${urlBase}/${version}/${fallbackPathParts.join('/')}`);
134-
else if (!version && language)
142+
} else if (!version && language) {
135143
fallbackUrls.push(
136144
`${urlBase}/${language}/${fallbackPathParts.join('/')}`,
137145
`${urlBase}/${fallbackPathParts.join('/')}`,
138146
);
139-
else if (!version && !language)
147+
} else if (!version && !language) {
140148
fallbackUrls.push(`${urlBase}/${fallbackPathParts.join('/')}`);
149+
}
141150
}
151+
fallbackUrls.push(`${urlBase}/`);
142152
return fallbackUrls;
143153
};
144154

0 commit comments

Comments
 (0)