2022-02-14 20:07:29 +07:00
|
|
|
(function ($) {
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
|
|
// Enable fallback URLs for broken redirects from the version or language switchers.
|
|
|
|
_prepareSwitchersFallbacks();
|
|
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add event listeners on links in the version and language switchers.
|
|
|
|
*
|
|
|
|
* If a link is clicked, the user is redirected to the closest fallback URL (including the
|
|
|
|
* original target URL) that is available.
|
|
|
|
*/
|
|
|
|
const _prepareSwitchersFallbacks = () => {
|
2023-01-04 23:37:23 +07:00
|
|
|
document.querySelectorAll('a.o_switcher_item').forEach(element => {
|
2022-02-14 20:07:29 +07:00
|
|
|
element.addEventListener('click', async event => {
|
|
|
|
if (element.hasAttribute('href')) {
|
2022-06-15 14:20:45 +07:00
|
|
|
const targetUrl = element.getAttribute('href');
|
2022-06-22 21:27:12 +07:00
|
|
|
if (!targetUrl.startsWith('/')) { // Don't test for valid URLs if in localhost.
|
2022-06-15 14:20:45 +07:00
|
|
|
event.preventDefault();
|
|
|
|
const fallbackUrls = await _generateFallbackUrls(targetUrl);
|
2023-07-06 21:12:39 +07:00
|
|
|
const fallbackUrl = await _getFirstValidUrl(fallbackUrls) ?? targetUrl;
|
2022-06-15 14:20:45 +07:00
|
|
|
window.location.href = fallbackUrl;
|
|
|
|
}
|
2022-02-14 20:07:29 +07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
})();
|