/* Get current Language */ function getCookie(name) { var v = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)"); return v ? v[2] : null; } function getLanguageFromBrowser() { return navigator.languages ? navigator.languages[0] : navigator.language || navigator.userLanguage; } function compare(languages, variable) { if (!variable) { return; } for (var language in languages) { if ( languages.hasOwnProperty(language) && languages[language].test(variable) ) { return language; } } } function getCurrentLanguage() { var langFromBrowser = getLanguageFromBrowser(); var langFromCookie = getCookie("swissquote_lang"); var defaultLanguage = "en"; var lang = compare( { en: /^en?.*/i, ar: /^ar?.*/i, fr: /^fr?.*/i, it: /^it?.*/i, es: /^es?.*/i, de: /^de?.*/i, cs: /^cs.*/i, ru: /^ru.*/i, cn: /^(zh-cn|cn)$/i, tw: /^(zh.*|tw)$/i }, langFromCookie ) || compare( { en: /^en.*/i, ar: /^ar.*/i, fr: /^fr.*/i, it: /^it.*/i, es: /^es.*/i, de: /^de.*/i, cs: /^cs.*/i, ru: /^ru.*/i, cn: /^zh-cn$/i, tw: /^zh.*/i }, langFromBrowser ) || defaultLanguage; return lang; } /* Manage translations and modify DOM according to selected lang */ function changeDocumentDir(lang) { if (lang === "ar") { document.dir = "rtl"; window.isRTL = true; } else { document.dir = "ltr"; window.isRTL = false; } } function logonTranslation(lang){ var currentLang = lang ? lang : getCurrentLanguage(); changeDocumentDir(currentLang); document.getElementById("DropdownLanguagesTriggerText").innerHTML = currentLang.toUpperCase(); for (var value in loginTranslations[currentLang]) { if (loginTranslations[currentLang].hasOwnProperty(value) && document.getElementById(value)) { if (value === "usernameText" || value === "passwordText") { var isPlaceholderAvailable = "placeholder" in document.createElement("input"); if (isPlaceholderAvailable) { document.getElementById(value).setAttribute("placeholder", loginTranslations[currentLang][value]); } else { document.getElementById(value).value = loginTranslations[currentLang][value]; } } else { document.getElementById(value).innerHTML = loginTranslations[currentLang][value]; } } } } function logoutTranslation(lang){ var currentLang = lang ? lang : getCurrentLanguage(); changeDocumentDir(currentLang); document.getElementById("DropdownLanguagesTriggerText").innerHTML = currentLang.toUpperCase(); for (var value in logoutTranslations[currentLang]) { if (logoutTranslations[currentLang].hasOwnProperty(value) && document.getElementById(value)) { document.getElementById(value).innerHTML = logoutTranslations[currentLang][value]; } } } function denyTranslation(lang){ var currentLang = lang ? lang : getCurrentLanguage(); changeDocumentDir(currentLang); document.getElementById("DropdownLanguagesTriggerText").innerHTML = currentLang.toUpperCase(); for (var value in denyTranslations[currentLang]) { if (denyTranslations[currentLang].hasOwnProperty(value) && document.getElementById(value)) { document.getElementById(value).innerHTML = denyTranslations[currentLang][value]; } } } /* * Handle usage of Dropdown menu language * Click and Keyboard navigation */ function hasClass( element, className ) { return new RegExp("(\\s|^)" + className + "(\\s|$)").test(element.className); } function addClass( element, className ) { element.className += " " + className; } function removeClass( element, className ) { element.className = element.className.replace(new RegExp("(^|\\b)" + className.split(" ").join("|") + "(\\b|$)", "gi"), " "); } function isSpaceKey(ev) { return ((ev.which || ev.keyCode) === 32) || ev.key === "Space" } function isEnterKey(ev) { return ((ev.which || ev.keyCode) === 13) || ev.key === "Enter" } function isTabKey(ev) { return (ev.which || ev.keyCode) === 9 || ev.key === "TAB"; } function closeMenu(shouldKeepFocus) { var dropdown = document.getElementById("DropdownLanguages"); var menu = document.getElementById("DropdownLanguagesMenu"); var menuLastItem = document.getElementById("DropdownLanguagesMenu").querySelector(".Menu__item:last-child"); removeClass(dropdown, "is-open"); if (shouldKeepFocus) { var trigger = document.getElementById("DropdownLanguagesTrigger"); trigger.focus(); } menu.removeEventListener("keydown", handleMenuItemsNavigationByKeyboardNavigation); menu.removeEventListener("click", handleMenuItemsNavigation); menuLastItem.removeEventListener("blur", handleLastItemBlur); } function openMenu(dropdown) { addClass(dropdown, "is-open"); } function toggleActive (newActive) { var dropdown = document.getElementById("DropdownLanguages"); var activeItem = dropdown.querySelector(".Menu__item.is-active"); removeClass(activeItem,"is-active"); addClass(newActive,"is-active"); } function handleSelectLanguageFromMenu(ev) { var target = ev.target; ev.preventDefault(); var triggerText = document.getElementById("DropdownLanguagesTriggerText"); var selectedLang = target.getAttribute("data-value"); triggerText.innerHTML = selectedLang.toUpperCase(); toggleActive(target); reloadTranslation(selectedLang); } function handleMenuItemsNavigationByKeyboardNavigation(ev) { var menu = document.getElementById("DropdownLanguagesMenu"); var target = ev.target; if (!menu.contains(target) ) { closeMenu(true); return; } if (hasClass(target, "Menu__item")) { if (isSpaceKey(ev) || isEnterKey(ev)) { closeMenu(true); } if(isEnterKey(ev)) { handleSelectLanguageFromMenu(ev); } } } function handleMenuItemsNavigation(ev) { closeMenu(true); handleSelectLanguageFromMenu(ev); } function handleLastItemBlur(ev) { var dropdown = document.getElementById("DropdownLanguages"); if (!dropdown.contains(ev.relatedTarget)) { closeMenu(false); } } (function () { var dropdown = document.getElementById("DropdownLanguages"); var trigger = document.getElementById("DropdownLanguagesTrigger"); var menu = document.getElementById("DropdownLanguagesMenu"); var menuLastItem = document.getElementById("DropdownLanguagesMenu").querySelector(".Menu__item:last-child"); trigger.addEventListener("click", function() { if (hasClass(dropdown, "is-open")) { closeMenu(true); } else { openMenu(dropdown); menu.addEventListener("keydown", handleMenuItemsNavigationByKeyboardNavigation); menu.addEventListener("click", handleMenuItemsNavigation); menuLastItem.addEventListener("blur", handleLastItemBlur); } }); document.addEventListener("click", function (ev) { if (!dropdown.contains(ev.target) ) { closeMenu(false); } }); })();