UNPKG

@rhds/elements

Version:

Red Hat Design System Elements

118 lines 6.67 kB
var _I18nController_instances, _I18nController_defaultLanguage, _I18nController_logger, _I18nController_mo, _I18nController_microcopy, _I18nController_getLanguage, _I18nController_updateLanguage, _I18nController_useDefaultLanguage, _I18nController_updateMicrocopy, _I18nController_ensure; import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; import { Logger } from '@patternfly/pfe-core/controllers/logger.js'; export class I18nController { constructor(host, defaults) { _I18nController_instances.add(this); this.host = host; _I18nController_defaultLanguage.set(this, 'en-US'); this.language = __classPrivateFieldGet(this, _I18nController_defaultLanguage, "f"); _I18nController_logger.set(this, void 0); _I18nController_mo.set(this, new MutationObserver(() => this.update())); _I18nController_microcopy.set(this, new Map()); __classPrivateFieldSet(this, _I18nController_logger, new Logger(host), "f"); for (const [language, copy] of Object.entries(defaults)) { __classPrivateFieldGet(this, _I18nController_microcopy, "f").set(language, new Map(Object.entries(copy))); } this.update(); } hostConnected() { __classPrivateFieldGet(this, _I18nController_mo, "f").observe(this.host, { childList: true, attributes: true, attributeFilter: ['lang'] }); this.update(); } hostDisconnected() { __classPrivateFieldGet(this, _I18nController_mo, "f").disconnect(); } update() { __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_updateLanguage).call(this); __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_updateMicrocopy).call(this); this.host.requestUpdate(); } async loadTranslation(url, lang = this.language, force = false) { if (!!url && (!!force || !__classPrivateFieldGet(this, _I18nController_microcopy, "f").has(lang))) { try { const file = await fetch(url).then(result => result.json()); return this.join(file, lang); } catch (e) { __classPrivateFieldGet(this, _I18nController_logger, "f").error(`Could not load microcopy for ${lang} from ${url}.`); __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_useDefaultLanguage).call(this); } } this.update(); } get(key, lang = this.language) { return __classPrivateFieldGet(this, _I18nController_microcopy, "f").get(lang)?.get(key) ?? key; } set(key, value, lang = this.language) { __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_ensure).call(this, lang); __classPrivateFieldGet(this, _I18nController_microcopy, "f").get(lang)?.set(key, value); this.host.requestUpdate(); return this; } clear(lang = this.language) { __classPrivateFieldGet(this, _I18nController_microcopy, "f").get(lang)?.clear(); this.host.requestUpdate(); } clearAll() { __classPrivateFieldGet(this, _I18nController_microcopy, "f").clear(); this.host.requestUpdate(); } delete(key, lang = this.language) { const r = __classPrivateFieldGet(this, _I18nController_microcopy, "f").get(lang)?.delete(key) ?? false; this.host.requestUpdate(); return r; } join(obj, lang = this.language) { __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_ensure).call(this, lang); const map = __classPrivateFieldGet(this, _I18nController_microcopy, "f").get(lang); for (const [key, value] of Object.entries(obj)) { map.set(key, value); } this.host.requestUpdate(); return this; } toJSON() { return Object.fromEntries([...__classPrivateFieldGet(this, _I18nController_microcopy, "f").entries()].map(([k, v]) => [k, Object.fromEntries(v)])); } } _I18nController_defaultLanguage = new WeakMap(), _I18nController_logger = new WeakMap(), _I18nController_mo = new WeakMap(), _I18nController_microcopy = new WeakMap(), _I18nController_instances = new WeakSet(), _I18nController_getLanguage = function _I18nController_getLanguage() { let lang = this.host.getAttribute('lang') || this.host.closest('[lang]')?.getAttribute('lang'); let root = this.host.getRootNode(); while (!lang && root instanceof ShadowRoot) { lang = root.host.closest('[lang]')?.getAttribute('lang'); root = root.host.getRootNode(); } return lang ?? this.language; }, _I18nController_updateLanguage = function _I18nController_updateLanguage() { this.language = __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_getLanguage).call(this); }, _I18nController_useDefaultLanguage = function _I18nController_useDefaultLanguage() { __classPrivateFieldGet(this, _I18nController_logger, "f").log(`Using ${__classPrivateFieldGet(this, _I18nController_defaultLanguage, "f")} instead.`); if (this.language !== __classPrivateFieldGet(this, _I18nController_defaultLanguage, "f")) { this.language = __classPrivateFieldGet(this, _I18nController_defaultLanguage, "f"); __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_updateMicrocopy).call(this); this.host.requestUpdate(); } }, _I18nController_updateMicrocopy = function _I18nController_updateMicrocopy() { __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_updateLanguage).call(this); const lightLangs = this.host.querySelectorAll('script[type="application/json"][data-language]'); for (const script of lightLangs) { const { language } = script.dataset; if (language) { let content = {}; try { content = JSON.parse(script.textContent ?? '{}'); } catch { __classPrivateFieldGet(this, _I18nController_logger, "f").error('Could not parse microcopy...', language); __classPrivateFieldGet(this, _I18nController_instances, "m", _I18nController_useDefaultLanguage).call(this); } __classPrivateFieldGet(this, _I18nController_microcopy, "f").set(language, new Map(Object.entries(content))); } } }, _I18nController_ensure = function _I18nController_ensure(lang) { if (!__classPrivateFieldGet(this, _I18nController_microcopy, "f").has(lang)) { __classPrivateFieldGet(this, _I18nController_microcopy, "f").set(lang, new Map()); } }; //# sourceMappingURL=I18nController.js.map