import HtmlControl from "../../core/HtmlControl.js"; import { isInsideHtmlEditor } from "../../core/HtmlEditor.js"; import { XNode } from "../../core/XNode.js"; const getName = (code: string) => { try { return (new Intl.DisplayNames([code], { type: 'language' })).of(code); } catch (error) { return code; } }; const installLanguageStyle = (code: string) => { if(document.querySelector(`[data-lang-selector="${code}"]`)) { return; } const style = document.createElement("style"); style.setAttribute("data-lang-selector", code); style.textContent = `body[data-lang=${code}] *[lang]:not([lang=${code}]) { display: none; }`; document.head.appendChild(style); }; export default class LanguageChooser extends HtmlControl { root: ShadowRoot; editing = false; async prepare() { let langs = this.getAttribute("languages"); if (!langs) { // detect langs... console.warn(`Attribute languages not set, set to disable language detection.`) const ls = new Set(); for (const element of Array.from(document.querySelectorAll(`[lang]`))) { const l = element.getAttribute("lang"); ls.add(l.trim().toLocaleLowerCase()); } langs = Array.from(ls).join(","); } const root = this.root = this.attachShadow({ mode: "open"}); const container = XNode.append(root,