forked from lapikud/lapikud.github.io
80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
import { getTranslatedRoute, getLanguageFromRoute } from '../../routes';
|
|
import { switchLang } from '../i18n.js';
|
|
|
|
/**
|
|
* Navigate to a path (internal or external)
|
|
* @param {string} path - The path or URL to navigate to
|
|
* @param {Object} options - Navigation options
|
|
* @param {boolean} options.external - Whether this is an external link
|
|
*/
|
|
export function navigate(path, options = {}) {
|
|
const { external = false } = options;
|
|
|
|
if (external) {
|
|
window.open(path, '_blank', 'noopener,noreferrer');
|
|
} else {
|
|
const selectedLang =
|
|
localStorage.getItem('language') ||
|
|
getLanguageFromRoute(window.location.pathname) ||
|
|
'est';
|
|
|
|
const resolvedPath = getTranslatedRoute(path, selectedLang);
|
|
|
|
window.history.pushState({}, "", resolvedPath);
|
|
window.dispatchEvent(new PopStateEvent('popstate'));
|
|
|
|
// Update language based on new route
|
|
const lang = getLanguageFromRoute(resolvedPath);
|
|
if (lang) {
|
|
switchLang(lang);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Switch language and navigate to translated route
|
|
* @param {string} targetLang - Target language ('est' or 'en')
|
|
*/
|
|
export function switchLanguageRoute(targetLang) {
|
|
const currentPath = window.location.pathname;
|
|
const translatedPath = getTranslatedRoute(currentPath, targetLang);
|
|
|
|
// Always update the language first
|
|
switchLang(targetLang);
|
|
|
|
// Only navigate if the path is different
|
|
if (translatedPath !== currentPath) {
|
|
navigate(translatedPath);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Go back in browser history
|
|
*/
|
|
export function goBack() {
|
|
window.history.back();
|
|
}
|
|
|
|
/**
|
|
* Reload the current page
|
|
*/
|
|
export function reload() {
|
|
window.location.reload();
|
|
}
|
|
|
|
/**
|
|
* Get the current pathname
|
|
* @returns {string} Current path
|
|
*/
|
|
export function getPath() {
|
|
return window.location.pathname;
|
|
}
|
|
|
|
/**
|
|
* Get URL query parameters as an object
|
|
* @returns {Object} Query parameters
|
|
*/
|
|
export function getQuery() {
|
|
const params = new URLSearchParams(window.location.search);
|
|
return Object.fromEntries(params.entries());
|
|
} |