async function transformTwoFactorPage() { try { if (document.readyState !== "complete") { await new Promise((resolve) => { window.addEventListener("load", resolve); }); } if (typeof loadingScreen !== "undefined") { loadingScreen.show(); } const existingForm = document.querySelector("form"); const formData = { action: existingForm?.getAttribute("action") || "", clientId: document.querySelector("#ClientId")?.value || "", rememberLogin: document.querySelector("#RememberLogin")?.value || "False", returnUrl: document.querySelector("#ReturnUrl")?.value || "", isRecoveryCode: document.querySelector("#IsRecoveryCode")?.value || "False", requestToken: document.querySelector('input[name="__RequestVerificationToken"]') ?.value || "", trustDeviceValue: document.querySelector('input[name="TrustDevice"][type="hidden"]') ?.value || "false", }; const newHTML = `

Firka

${LanguageManager.t("twofactor.title")}

${LanguageManager.t("twofactor.code_required")}
${LanguageManager.t("twofactor.no_access")}
`; const template = document.createElement('template'); template.innerHTML = newHTML; helper.clearElement(document.body); document.body.appendChild(template.content); applyTheme(); setupEventListeners(); if (typeof loadingScreen !== "undefined") { loadingScreen.hide(); } } catch (error) { if (typeof loadingScreen !== "undefined") { loadingScreen.hide(); } } } function applyTheme() { try { const theme = localStorage.getItem("themePreference") || "light-green"; document.documentElement.setAttribute("data-theme", theme); } catch (error) { } } function setupEventListeners() { const twoFactorForm = document.getElementById("twoFactorForm"); const verificationInput = document.getElementById("VerificationCode"); const togglePasswordBtn = document.querySelector(".show-password"); const formInputs = document.querySelectorAll(".form-control"); if (togglePasswordBtn && verificationInput) { togglePasswordBtn.addEventListener("click", () => { const isPassword = verificationInput.type === "password"; verificationInput.type = isPassword ? "text" : "password"; const icon = togglePasswordBtn.querySelector(".icon-eye"); icon.src = chrome.runtime.getURL( `icons/${isPassword ? "eye-on" : "eye-off"}.svg`, ); }); } formInputs.forEach((input) => { input.addEventListener("input", () => { validateInput(input); }); input.addEventListener("blur", () => { validateInput(input, true); }); }); if (twoFactorForm) { twoFactorForm.addEventListener("submit", handleSubmit); } } function validateInput(input, showError = false) { const isValid = input.value.trim().length > 0; const errorElement = input.nextElementSibling?.nextElementSibling; if (!isValid && showError) { input.classList.add("error"); errorElement?.classList.add("show"); } else { input.classList.remove("error"); errorElement?.classList.remove("show"); } return isValid; } function handleSubmit(event) { event.preventDefault(); const form = event.target; const inputs = form.querySelectorAll(".form-control[required]"); let isValid = true; inputs.forEach((input) => { if (!validateInput(input, true)) { isValid = false; } }); if (isValid) { const submitButton = form.querySelector(".btn-kreta"); if (submitButton) { submitButton.disabled = true; helper.clearElement(submitButton); const spinnerSpan = document.createElement('span'); spinnerSpan.className = 'spinner'; const textSpan = document.createElement('span'); textSpan.className = 'btn-text'; textSpan.textContent = LanguageManager.t('twofactor.verifying'); submitButton.appendChild(spinnerSpan); submitButton.appendChild(textSpan); } form.submit(); } } transformTwoFactorPage();