"use strict"; // Texts: i18n/license/.json, languages: i18n/languages.json (injected by the Rust Core). // The license itself is never translated; the operational guidance exists in CS/DE/EN only. const i18nData = globalThis.__CHJ_I18N__ || { manifest: { languages: [] }, catalogs: { license: {} } }; const fallbackCopy = i18nData.catalogs.license.en || i18nData.catalogs.license.cs || {}; const copy = new Proxy(i18nData.catalogs.license, { get: (target, language) => ({ ...fallbackCopy, ...(target[language] || {}) }) }); const knownLanguage = language => Boolean(i18nData.catalogs.license[language]); const el = id => document.getElementById(id); for (const language of i18nData.manifest.languages || []) { if (!knownLanguage(language.code)) continue; const option = document.createElement("option"); option.value = language.code; option.textContent = language.name; el("language").append(option); } let license; let showingLicense = false; function translate() { const language = el("language").value; const text = copy[language]; document.documentElement.lang = language; for (const [id, key] of [["consentLicense", "consent"], ["consentRisk", "risk"], ["accept", "accept"], ["decline", "decline"], ["continue", "next"], ["back", "back"]]) el(id).textContent = text[key]; el("heading").textContent = text[showingLicense ? "heading" : "guidanceHeading"]; el("intro").textContent = text[showingLicense ? "intro" : "guidanceIntro"]; el("guidanceText").textContent = license?.guidance[language] || license?.guidance.en || ""; el("guidanceText").setAttribute("aria-label", text.guidanceHeading); el("guidanceText").hidden = showingLicense; for (const id of ["licenseText", "consentRow", "accept", "back"]) el(id).hidden = !showingLicense; el("continue").hidden = showingLicense; el("continue").disabled = !license; } el("language").addEventListener("change", translate); el("consent").addEventListener("change", () => { el("accept").disabled = !license || !showingLicense || !el("consent").checked; }); el("decline").addEventListener("click", () => window.licenseApi.decline()); el("continue").addEventListener("click", async () => { if (!license) return; el("continue").disabled = true; try { await window.licenseApi.showLicense({ guidanceSha256: license.guidanceSha256 }); showingLicense = true; el("error").textContent = ""; translate(); el("licenseText").focus(); } catch { el("error").textContent = copy[el("language").value].error; el("continue").disabled = false; } }); el("back").addEventListener("click", () => { showingLicense = false; el("consent").checked = false; el("accept").disabled = true; translate(); }); el("accept").addEventListener("click", async () => { if (!license || !showingLicense || !el("consent").checked) return; el("accept").disabled = true; try { await window.licenseApi.accept({ accepted: true, sha256: license.sha256, guidanceSha256: license.guidanceSha256 }); } catch { el("error").textContent = copy[el("language").value].error; el("accept").disabled = !el("consent").checked; } }); translate(); window.licenseApi.read().then(value => { license = value; // The license and the safety guidance exist only in Czech, German and English (never translated further): // another UI language shows them in its base language when available, otherwise in English. const base = String(value.language || "").split("-")[0]; el("language").value = knownLanguage(value.language) ? value.language : knownLanguage(base) ? base : value.language && knownLanguage("en") ? "en" : (knownLanguage("cs") ? "cs" : "en"); el("licenseText").textContent = value.text; el("release").textContent = `CH-J Proprietary Software License ${value.licenseVersion} · v${value.appVersion} · ${value.buildId}`; translate(); }).catch(() => { el("error").textContent = copy[el("language").value].error; });