{"version":3,"names":["SETTINGS_STORE_KEY","SessionService","instance","this","_instance","constructor","settings","loadSettings","data","sessionStorage","getItem","JSON","parse","e","console","error","storeSettings","setItem","stringify","setStartData","resetSession","publicId","token","isDebug","_a","debug","getI18nData","i18nData","getPublicId","getToken","getTicketUrl","ticketUrl","getBookingUrl","bookingUrl","getMagnoliaBaseUrl","magnoliaBaseUrl","getEnabledPaymentMethods","enabledPaymentMethods","useAgbCheckbox","isErvEnabled","ervEnabled","I18n","lang","fallbackLocales","document","querySelector","getInstance","setLang","getLang","getMessage","name","defaultValue","values","messageObject","keepHtml","output","getMessageString","length","forEach","value","i","replace","htmlDecode","primaryMessage","getMessageForLocale","fallbackMessage","locale","messagePart","getMessageArray","prefix","result","message","push","findLocale","element","closestElement","closest","body","documentElement","i18n","COUNTRY_NAMES","Map","translateCountryName","countryName","has","get","domParser","DOMParser","input","parseFromString","textContent"],"sources":["src/services/session.service.ts","src/utils/I18n.ts"],"sourcesContent":["import {InitStartResponse} from \"../http/nj-booking\";\n\nconst SETTINGS_STORE_KEY = \"nj-booking-settings\";\n\nexport class SessionService {\n\n\tprivate static _instance: SessionService;\n\n\tprivate settings: InitStartResponse;\n\n\tstatic get instance(): SessionService {\n\t\tif (!this._instance) {\n\t\t\tthis._instance = new SessionService();\n\t\t}\n\t\treturn this._instance;\n\t}\n\n\tprivate constructor() {\n\t\tthis.settings = this.loadSettings();\n\t}\n\n\tprivate loadSettings(): InitStartResponse {\n\t\tconst data = sessionStorage.getItem(SETTINGS_STORE_KEY);\n\t\tif (!data) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(data);\n\t\t} catch (e) {\n\t\t\tconsole.error(\"Failed to restore stored settings: \", e);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate storeSettings() {\n\t\tsessionStorage.setItem(SETTINGS_STORE_KEY, JSON.stringify(this.settings));\n\t}\n\n\tsetStartData(settings: InitStartResponse) {\n\t\tthis.settings = settings;\n\t\tthis.storeSettings();\n\t}\n\n\tresetSession() {\n\t\tthis.settings.publicId = null;\n\t\tthis.settings.token = null;\n\t\tthis.storeSettings();\n\t}\n\n\tisDebug() {\n\t\treturn this.settings?.debug;\n\t}\n\n\tgetI18nData() {\n\t\treturn this.settings?.i18nData;\n\t}\n\n\tgetPublicId() {\n\t\treturn this.settings?.publicId;\n\t}\n\n\tgetToken() {\n\t\treturn this.settings?.token;\n\t}\n\n\tgetTicketUrl() {\n\t\treturn this.settings?.ticketUrl;\n\t}\n\n\tgetBookingUrl() {\n\t\treturn this.settings?.bookingUrl;\n\t}\n\n\tgetMagnoliaBaseUrl() {\n\t\treturn this.settings?.magnoliaBaseUrl;\n\t}\n\n\tgetEnabledPaymentMethods() {\n\t\treturn this.settings?.enabledPaymentMethods;\n\t}\n\n\tuseAgbCheckbox() {\n\t\treturn this.settings?.useAgbCheckbox;\n\t}\n\n\tisErvEnabled() {\n\t\treturn this.settings?.ervEnabled;\n\t}\n}\n","import {MultilangText} from \"../api/Ticketshop\";\nimport {SessionService} from '../services/session.service';\n\nexport interface I18nData {\n [key: string]: I18nEntry;\n}\n\nexport interface I18nEntry {\n [lang: string]: string;\n}\n\nexport class I18n {\n\n\tprivate static instance: I18n;\n\n\tprivate lang: string;\n\n private readonly fallbackLocales: string[] = ['en', 'de'];\n\n\tconstructor(lang?: string) {\n\t\tthis.lang = lang\n\n\t\tif (!this.lang) {\n\t\t\tthis.lang = document.querySelector('html').lang;\n\t\t}\n\n\t\tif (!this.lang) {\n\t\t\tthis.lang = 'de';\n\t\t}\n\t}\n\n\tstatic getInstance() {\n\t\tif (!I18n.instance) {\n\t\t\tI18n.instance = new I18n();\n\t\t}\n\n\t\treturn I18n.instance;\n\t}\n\n\tsetLang(lang: string) {\n\t\tthis.lang = lang;\n\t}\n\n\tgetLang():string {\n\t\treturn this.lang;\n\t}\n\n public getMessage(name: string, defaultValue: string = '', values?: string[], messageObject?: MultilangText & any, keepHtml = false): string {\n // Get message string with fallbacks\n let output = this.getMessageString(name, defaultValue, messageObject);\n\n if (values && values.length) {\n values.forEach((value, i) => {\n output = output.replace(`{${i}}`, value);\n });\n }\n\n return keepHtml ? output : htmlDecode(output);\n }\n\n private getMessageString(name: string, defaultValue: string = '', messageObject?: MultilangText): string {\n const primaryMessage = this.getMessageForLocale(this.lang, name, messageObject);\n if (primaryMessage) {\n // Message exists in primary language, just use it\n return primaryMessage;\n }\n\n if (SessionService.instance.isDebug()) {\n // Show warning, if debug mode is active\n return `[${name} übersetzen]`;\n }\n\n for (const lang of this.fallbackLocales) {\n // Try fallback languages in order\n const fallbackMessage = this.getMessageForLocale(lang, name, messageObject);\n if (fallbackMessage) {\n return fallbackMessage;\n }\n }\n\n if (defaultValue) {\n // Use default value as fallback\n return defaultValue;\n }\n\n // Nothing found, use empty string\n return '';\n }\n\n private getMessageForLocale(locale: string, name: string, messageObject?: MultilangText): string | null {\n // Try to find message in the i18n strings\n const messagePart = SessionService.instance.getI18nData()?.[name];\n if (messagePart?.[locale]) {\n return messagePart[locale];\n }\n\n // Use the message from the MultilangText object\n if (messageObject?.[locale]) {\n return messageObject[locale];\n }\n\n // Nothing found in the specified locale\n return null;\n }\n\n public getMessageArray(prefix: string): string[] {\n const result = [];\n for (let i = 0; ; i++) {\n const name = `${prefix}.${i}`;\n const message = this.getMessage(name);\n\n if (!message) {\n // Empty result: We are done\n break;\n }\n if (SessionService.instance.isDebug() && i > 0 && message === `[${name} übersetzen]`) {\n // Debug mode: Make sure we don't end up in an endless loop\n break;\n }\n\n result.push(message);\n }\n\n return result;\n }\n}\n\nexport function findLocale(element: HTMLElement): string {\n\tconst closestElement = element.closest('[lang]') as HTMLElement;\n\tif (closestElement) {\n\t\treturn closestElement.lang;\n\t}\n\tif (document.body.lang) {\n\t\treturn document.body.lang;\n\t}\n\tif (document.documentElement.lang) {\n\t\treturn document.documentElement.lang;\n\t}\n\n\treturn 'de';\n\t// return \"en\";\n}\n\nconst i18n = I18n.getInstance();\n\nconst COUNTRY_NAMES = new Map(\n [\n [ \"Österreich\", \"reduction-cards.country-names.austria\" ],\n [ \"Deutschland\", \"reduction-cards.country-names.germany\" ],\n [ \"Italien\", \"reduction-cards.country-names.italy\" ],\n [ \"Schweiz\", \"reduction-cards.country-names.switzerland\" ],\n [ \"Slowakei\", \"reduction-cards.country-names.slovakia\" ],\n [ \"International\", \"reduction-cards.country-names.international\" ],\n [ \"Dänemark\", \"reduction-cards.country-names.denmark\" ],\n [ \"Kroatien\", \"reduction-cards.country-names.croatia\" ],\n [ \"Slowenien\", \"reduction-cards.country-names.slovenia\" ],\n [ \"Tschechien\", \"reduction-cards.country-names.czechia\" ],\n [ \"Ungarn\", \"reduction-cards.country-names.hungary\" ],\n ]\n)\n\nexport function translateCountryName(countryName: string): string {\n if (COUNTRY_NAMES.has(countryName)) {\n return COUNTRY_NAMES.get(countryName);\n } else {\n return \"reduction-cards.country-names.default\";\n }\n}\n\nexport { i18n };\n\nconst domParser = new DOMParser();\nexport function htmlDecode(input: string) {\n const element = domParser.parseFromString(input, \"text/html\");\n return element.documentElement.textContent;\n}\n"],"mappings":"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"}