web-internationalization 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts ADDED
@@ -0,0 +1,173 @@
1
+ import { HTMLItem, Lock, Logger, Mapping } from 'clientnode';
2
+ import { WebComponentAPI } from 'web-component-wrapper/type';
3
+ import { Web } from 'web-component-wrapper/Web';
4
+ import { DefaultOptions, Options, Replacement } from './type';
5
+ export declare const log: Logger;
6
+ /**
7
+ * This plugin holds all needed methods to extend a website for
8
+ * internationalization.
9
+ * @property _defaultOptions - Options extended by the options given to the
10
+ * initializer method.
11
+ * @property _defaultOptions.currentLanguageIndicatorClassName - Class name
12
+ * which marks current language switcher button or link.
13
+ * @property _defaultOptions.currentLanguagePattern - Saves a pattern to
14
+ * recognize current language marker.
15
+ * @property _defaultOptions.default - Initial language to use.
16
+ * @property _defaultOptions.useEffect - Indicates whether a fade effect
17
+ * should be performed.
18
+ * @property _defaultOptions.initial - Initial set language (if omitted it will
19
+ * be determined based on environment information).
20
+ * @property _defaultOptions.languageHashPrefix - Hash prefix to determine
21
+ * current active language by url.
22
+ * @property _defaultOptions.languageMapping - A mapping of alternate language
23
+ * descriptions.
24
+ * @property _defaultOptions.lockDescription - Lock description.
25
+ * @property _defaultOptions.preReplacementLanguagePattern - Pattern to
26
+ * introduce a pre replacement language node.
27
+ * @property _defaultOptions.replaceDomNodeNames - Tag names which indicates
28
+ * dom nodes which should be replaced.
29
+ * @property _defaultOptions.replacementDomNodeNames - Dom node tag name which
30
+ * should be interpreted as a hidden alternate language node (contains text in
31
+ * another language).
32
+ * @property _defaultOptions.replacementLanguagePattern - Text pattern to
33
+ * introduce a post replacement node.
34
+ * @property _defaultOptions.selection - List of all supported languages.
35
+ * @property _defaultOptions.selectors - Mapping of needed dom node selectors.
36
+ * @property _defaultOptions.selectors.knownTranslation - Selector to find
37
+ * known translation sections.
38
+ * @property _defaultOptions.sessionDescription - Description to save current
39
+ * language in session storage.
40
+ * @property _defaultOptions.templateDelimiter - Template delimiter to
41
+ * recognize dynamic content.
42
+ * @property _defaultOptions.templateDelimiter.pre - Delimiter which introduces
43
+ * a dynamic expression.
44
+ * @property _defaultOptions.templateDelimiter.post - Delimiter which finishes
45
+ * a dynamic expression.
46
+ * @property options - Finally configured given options.
47
+ * @property currentLanguage - Saves the current language.
48
+ * @property knownTranslations - Saves a mapping of known language strings and
49
+ * their corresponding translations, to boost language replacements or saves
50
+ * redundant replacements in dom tree.
51
+ * @property lock - Lock instance when updating dom noes.
52
+ * @property _domNodesToFade - Saves all dom nodes which should be animated.
53
+ * @property _replacements - Saves all text nodes which should be replaced.
54
+ * @property _textNodesWithKnownTranslation - Saves a mapping of known text
55
+ * snippets to their corresponding $-extended dom nodes.
56
+ */
57
+ export declare class Internationalization<TElement = HTMLElement, ExternalProperties extends Mapping<unknown> = Mapping<unknown>, InternalProperties extends Mapping<unknown> = Mapping<unknown>> extends Web<TElement, ExternalProperties, InternalProperties> {
58
+ static _name: string;
59
+ static _defaultOptions: DefaultOptions;
60
+ readonly self: typeof Internationalization;
61
+ switchLanguageButtonDomNodes: NodeListOf<HTMLAnchorElement> | null;
62
+ currentLanguage: string;
63
+ knownTranslations: Mapping;
64
+ lock: Lock<string | undefined>;
65
+ options: Options;
66
+ onEnsure: (language: string) => Promise<void>;
67
+ onSwitch: (oldLanguage: string, newLanguage: string) => Promise<void>;
68
+ onEnsured: (language: string) => void;
69
+ onSwitched: (oldLanguage: string, newLanguage: string) => void;
70
+ _domNodesToFade: Array<HTMLElement>;
71
+ _replacements: Array<Replacement>;
72
+ _textNodesWithKnownTranslation: Mapping<Array<HTMLItem>>;
73
+ /**
74
+ * Triggered when ever a given attribute has changed and triggers to update
75
+ * configured dom content.
76
+ * @param name - Attribute name which was updates.
77
+ * @param newValue - New updated value.
78
+ */
79
+ onUpdateAttribute(name: string, newValue: string): void;
80
+ /**
81
+ * Initializes the component. Current language is set and later needed dom
82
+ * nodes are grabbed.
83
+ */
84
+ connectedCallback(): void;
85
+ /**
86
+ * Switches the current language to given language. This method is mutual
87
+ * synchronized.
88
+ * @param language - New language as string or "true". If set to "true" it
89
+ * indicates that the dom tree should be checked again current language to
90
+ * ensure every text node has right content.
91
+ * @param ensure - Indicates if a switch effect should be avoided.
92
+ * @returns Returns the current instance wrapped in a promise.
93
+ */
94
+ switch(language: string | true, ensure?: boolean): Promise<void>;
95
+ /**
96
+ * Ensures current selected language.
97
+ * @returns Promise resolving to nothing when switching as finished.
98
+ */
99
+ refresh(): Promise<void>;
100
+ /**
101
+ * Depending on activated switching effect this method initialized the
102
+ * effect of replace all text string directly.
103
+ * @param language - New language to use.
104
+ * @param ensure - Indicates if current language should be ensured again
105
+ * every text node content.
106
+ * @returns Returns the current instance wrapped in a promise.
107
+ */
108
+ _handleSwitchEffect(language: string, ensure: boolean): Promise<void>;
109
+ /**
110
+ * Moves pre replacement dom nodes into next dom node behind translation
111
+ * text to use the same translation algorithm for both.
112
+ */
113
+ _movePreReplacementNodes(): void;
114
+ /**
115
+ * Collects all text nodes which should be replaced later.
116
+ * @param language - New language to use.
117
+ * @param ensure - Indicates if the whole dom should be checked again
118
+ * current language to ensure every text node has right content.
119
+ */
120
+ _collectTextNodesToReplace(language: string, ensure: boolean): void;
121
+ /**
122
+ * Iterates all text nodes in language known area with known translations.
123
+ */
124
+ _registerKnownTextNodes(): void;
125
+ /**
126
+ * Normalizes a given language string.
127
+ * @param language - New language to use.
128
+ * @returns Returns the normalized version of given language.
129
+ */
130
+ _normalizeLanguage(language: string): string;
131
+ /**
132
+ * Determines a useful initial language depending on session and browser
133
+ * settings.
134
+ * @returns Returns the determined language.
135
+ */
136
+ _determineUsefulLanguage(): string;
137
+ /**
138
+ * Registers a text node to change its content with given replacement.
139
+ * @param currentTextNodeToTranslate - Text node with content to
140
+ * translate.
141
+ * @param currentDomNode - A comment node with replacement content.
142
+ * @param match - A matching array of replacement's text content.
143
+ * @param currentLanguageDomNode - A potential given text node indicating
144
+ * the language of given text node.
145
+ */
146
+ _registerTextNodeToChange(currentTextNodeToTranslate: HTMLItem, currentDomNode: HTMLItem | null, match: Array<string>, currentLanguageDomNode: HTMLItem | null): void;
147
+ /**
148
+ * Checks if last text node has a language indication comment node. This
149
+ * function is called after each parsed dom text node.
150
+ * @param lastTextNodeToTranslate - Last text node to check.
151
+ * @param lastLanguageDomNode - A potential given language indication
152
+ * commend node.
153
+ * @param ensure - Indicates if current language should be ensured again
154
+ * every text node content.
155
+ * @returns Returns the retrieved or newly created language indicating
156
+ * comment node.
157
+ */
158
+ _ensureLastTextNodeHavingLanguageIndicator(lastTextNodeToTranslate: HTMLItem | null, lastLanguageDomNode: HTMLItem | null, ensure: boolean): HTMLItem | null;
159
+ /**
160
+ * Performs the low level text replacements for switching to given
161
+ * language.
162
+ * @param language - The new language to switch to.
163
+ */
164
+ _switchLanguage(language: string): void;
165
+ /**
166
+ * Switches the current language indicator in language switch triggered dom
167
+ * nodes.
168
+ * @param language - The new language to switch to.
169
+ */
170
+ _switchCurrentLanguageIndicator(language: string): void;
171
+ }
172
+ export declare const api: WebComponentAPI<HTMLElement, Mapping<unknown>, Mapping<unknown>, typeof Web>;
173
+ export default Internationalization;
package/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";if("undefined"!=typeof module&&null!==module&&"undefined"!==eval("typeof require")&&null!==eval("require")&&"main"in eval("require")&&"undefined"!==eval("typeof require.main")&&null!==eval("require.main")){var ORIGINAL_MAIN_MODULE=module;module!==eval("require.main")&&"paths"in module&&"paths"in eval("require.main")&&"undefined"!=typeof __dirname&&null!==__dirname&&(module.paths=eval("require.main.paths").concat(module.paths.filter((function(path){return eval("require.main.paths").includes(path)}))))}if(null==window)var window="undefined"==typeof global||null===global?{}:global;!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@babel/runtime/helpers/initializerDefineProperty"),require("@babel/runtime/helpers/applyDecoratedDescriptor"),require("@babel/runtime/helpers/initializerWarningHelper"),require("clientnode"),require("clientnode/property-types"),require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/helpers/inheritsLoose"),require("@babel/runtime/regenerator"));else if("function"==typeof define&&define.amd)define(["@babel/runtime/helpers/initializerDefineProperty","@babel/runtime/helpers/applyDecoratedDescriptor","@babel/runtime/helpers/initializerWarningHelper","clientnode","clientnode/property-types","@babel/runtime/helpers/extends","@babel/runtime/helpers/asyncToGenerator","@babel/runtime/helpers/inheritsLoose","@babel/runtime/regenerator"],t);else{var r="object"==typeof exports?t(require("@babel/runtime/helpers/initializerDefineProperty"),require("@babel/runtime/helpers/applyDecoratedDescriptor"),require("@babel/runtime/helpers/initializerWarningHelper"),require("clientnode"),require("clientnode/property-types"),require("@babel/runtime/helpers/extends"),require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/helpers/inheritsLoose"),require("@babel/runtime/regenerator")):t(e["@babel/runtime/helpers/initializerDefineProperty"],e["@babel/runtime/helpers/applyDecoratedDescriptor"],e["@babel/runtime/helpers/initializerWarningHelper"],e.clientnode,e["clientnode/property-types"],e["@babel/runtime/helpers/extends"],e["@babel/runtime/helpers/asyncToGenerator"],e["@babel/runtime/helpers/inheritsLoose"],e["@babel/runtime/regenerator"]);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,((__WEBPACK_EXTERNAL_MODULE__4__,__WEBPACK_EXTERNAL_MODULE__5__,__WEBPACK_EXTERNAL_MODULE__6__,__WEBPACK_EXTERNAL_MODULE__0__,__WEBPACK_EXTERNAL_MODULE__1__,__WEBPACK_EXTERNAL_MODULE__7__,__WEBPACK_EXTERNAL_MODULE__9__,__WEBPACK_EXTERNAL_MODULE__10__,__WEBPACK_EXTERNAL_MODULE__11__)=>(()=>{var __webpack_modules__=[e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__0__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__1__},function(module,__unused_webpack_exports,__webpack_require__){var __webpack_dirname__="/",e,t,r;if(module=__webpack_require__.nmd(module),null!==module&&"undefined"!==eval("typeof require")&&null!==eval("require")&&"main"in eval("require")&&"undefined"!==eval("typeof require.main")&&null!==eval("require.main")){var ORIGINAL_MAIN_MODULE=module;module!==eval("require.main")&&"paths"in module&&"paths"in eval("require.main")&&null!=__webpack_dirname__&&(module.paths=eval("require.main.paths").concat(module.paths.filter((function(path){return eval("require.main.paths").includes(path)}))))}if(null==window)var window=void 0===__webpack_require__.g||null===__webpack_require__.g?{}:__webpack_require__.g;module.exports=(e=__webpack_require__(7),t=__webpack_require__(0),r=__webpack_require__(1),function(){var n=[function(t){t.exports=e},function(e){e.exports=t},function(e){e.exports=r}],o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return n[e](r,r.exports,i),r.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};i.r(s),i.d(s,{property:function(){return c}});var a=i(0),l=i.n(a),p=i(1),_=i(2);function c(e){return void 0===e&&(e={}),e=l()({readAttribute:!0,type:_.string},e),function(t,r){if("string"==typeof r){var n,o=t.self||t.constructor;if(e.readAttribute){Object.prototype.hasOwnProperty.call(o,"observedAttributes")||(o.observedAttributes=o.observedAttributes?[].concat(o.observedAttributes):[]);var i=(0,p.camelCaseToDelimited)(r);o.observedAttributes&&!o.observedAttributes.includes(i)&&o.observedAttributes.push(i)}e.type&&(Object.prototype.hasOwnProperty.call(o,"propertyTypes")||(o.propertyTypes=o.propertyTypes?l()({},o.propertyTypes):{}),!o.propertyTypes||!e.update&&Object.prototype.hasOwnProperty.call(o,r)||(o.propertyTypes[r]=e.type)),e.writeAttribute&&(Object.prototype.hasOwnProperty.call(o,"propertiesToReflectAsAttributes")||(o.propertiesToReflectAsAttributes=o.propertiesToReflectAsAttributes?(0,p.copy)(o.propertiesToReflectAsAttributes):[]),(e.update||o.propertiesToReflectAsAttributes instanceof Map&&!o.propertiesToReflectAsAttributes.has(r)||Array.isArray(o.propertiesToReflectAsAttributes)&&!o.propertiesToReflectAsAttributes.includes(r)||"object"==typeof o.propertiesToReflectAsAttributes&&!Object.prototype.hasOwnProperty.call(o.propertiesToReflectAsAttributes,r))&&("boolean"==typeof e.writeAttribute?e.writeAttribute&&o.propertyTypes&&Object.prototype.hasOwnProperty.call(o.propertyTypes,r)&&(n=o.propertyTypes[r]):n=e.writeAttribute,void 0!==n&&(Array.isArray(o.propertiesToReflectAsAttributes)&&(!0===e.writeAttribute?o.propertiesToReflectAsAttributes.push(r):o.normalizePropertyTypeList&&(o.propertiesToReflectAsAttributes=o.normalizePropertyTypeList(o.propertiesToReflectAsAttributes))),o.propertiesToReflectAsAttributes instanceof Map&&o.propertiesToReflectAsAttributes.set(r,n),"object"==typeof o.propertiesToReflectAsAttributes&&(o.propertiesToReflectAsAttributes[r]=n)))),e.alias&&(Object.prototype.hasOwnProperty.call(o,"propertyAliases")||(o.propertyAliases=o.propertyAliases?l()({},o.propertyAliases):{}),!o.propertyAliases||!e.update&&Object.prototype.hasOwnProperty.call(o,r)||(o.propertyAliases[r]=e.alias))}}}return s.default=c,s}())},function(module,__unused_webpack_exports,__webpack_require__){var __webpack_dirname__="/",e,t,r,n,i,s,o,a,l;if(module=__webpack_require__.nmd(module),null!==module&&"undefined"!==eval("typeof require")&&null!==eval("require")&&"main"in eval("require")&&"undefined"!==eval("typeof require.main")&&null!==eval("require.main")){var ORIGINAL_MAIN_MODULE=module;module!==eval("require.main")&&"paths"in module&&"paths"in eval("require.main")&&null!=__webpack_dirname__&&(module.paths=eval("require.main.paths").concat(module.paths.filter((function(path){return eval("require.main.paths").includes(path)}))))}if(null==window)var window=void 0===__webpack_require__.g||null===__webpack_require__.g?{}:__webpack_require__.g;module.exports=(e=__webpack_require__(9),t=__webpack_require__(4),r=__webpack_require__(7),n=__webpack_require__(10),i=__webpack_require__(5),s=__webpack_require__(6),o=__webpack_require__(11),a=__webpack_require__(0),l=__webpack_require__(1),function(){var p=[function(e){e.exports=r},function(e){e.exports=a},function(e){e.exports=l},function(e){e.exports=n},function(e,t,r){var n=r(0),o=r.n(n),i=r(1),s=r(2);t.default=function(e){return void 0===e&&(e={}),e=o()({readAttribute:!0,type:s.string},e),function(t,r){if("string"==typeof r){var n,s=t.self||t.constructor;if(e.readAttribute){Object.prototype.hasOwnProperty.call(s,"observedAttributes")||(s.observedAttributes=s.observedAttributes?[].concat(s.observedAttributes):[]);var a=(0,i.camelCaseToDelimited)(r);s.observedAttributes&&!s.observedAttributes.includes(a)&&s.observedAttributes.push(a)}e.type&&(Object.prototype.hasOwnProperty.call(s,"propertyTypes")||(s.propertyTypes=s.propertyTypes?o()({},s.propertyTypes):{}),!s.propertyTypes||!e.update&&Object.prototype.hasOwnProperty.call(s,r)||(s.propertyTypes[r]=e.type)),e.writeAttribute&&(Object.prototype.hasOwnProperty.call(s,"propertiesToReflectAsAttributes")||(s.propertiesToReflectAsAttributes=s.propertiesToReflectAsAttributes?(0,i.copy)(s.propertiesToReflectAsAttributes):[]),(e.update||s.propertiesToReflectAsAttributes instanceof Map&&!s.propertiesToReflectAsAttributes.has(r)||Array.isArray(s.propertiesToReflectAsAttributes)&&!s.propertiesToReflectAsAttributes.includes(r)||"object"==typeof s.propertiesToReflectAsAttributes&&!Object.prototype.hasOwnProperty.call(s.propertiesToReflectAsAttributes,r))&&("boolean"==typeof e.writeAttribute?e.writeAttribute&&s.propertyTypes&&Object.prototype.hasOwnProperty.call(s.propertyTypes,r)&&(n=s.propertyTypes[r]):n=e.writeAttribute,void 0!==n&&(Array.isArray(s.propertiesToReflectAsAttributes)&&(!0===e.writeAttribute?s.propertiesToReflectAsAttributes.push(r):s.normalizePropertyTypeList&&(s.propertiesToReflectAsAttributes=s.normalizePropertyTypeList(s.propertiesToReflectAsAttributes))),s.propertiesToReflectAsAttributes instanceof Map&&s.propertiesToReflectAsAttributes.set(r,n),"object"==typeof s.propertiesToReflectAsAttributes&&(s.propertiesToReflectAsAttributes[r]=n)))),e.alias&&(Object.prototype.hasOwnProperty.call(s,"propertyAliases")||(s.propertyAliases=s.propertyAliases?o()({},s.propertyAliases):{}),!s.propertyAliases||!e.update&&Object.prototype.hasOwnProperty.call(s,r)||(s.propertyAliases[r]=e.alias))}}}},function(t){t.exports=e},function(e){e.exports=o},,function(e){e.exports=t},function(e){e.exports=i},function(e){e.exports=s}],_={};function c(e){var t=_[e];if(void 0!==t)return t.exports;var r=_[e]={exports:{}};return p[e](r,r.exports,c),r.exports}c.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(t,{a:t}),t},c.d=function(e,t){for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var u={};c.r(u),c.d(u,{GenericHTMLElement:function(){return I},Web:function(){return U},api:function(){return W}});var d,h,f,b,m=c(5),y=c.n(m),g=c(8),E=c.n(g),P=c(0),v=c.n(P),A=c(3),O=c.n(A),T=c(9),w=c.n(T),D=(c(10),c(6)),M=c.n(D),C=c(1),L=c(2),R=c(4);function x(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return N(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?N(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var I="undefined"==typeof HTMLElement?function(){}:HTMLElement,U=(d=(0,R.default)({type:L.boolean,writeAttribute:!0}),b=function(e){function t(){var r;return(r=e.call(this)||this).batchAttributeUpdates=!0,r.batchPropertyUpdates=!0,r.batchUpdates=!0,r.batchedAttributeUpdateRunning=!0,r.batchedPropertyUpdateRunning=!0,r.batchedUpdateRunning=!0,r.parent=null,r.rootInstance=null,r.scope=v()({},C.UTILITY_SCOPE),r.domNodeEventBindings=new Map,r.domNodeTemplateCache=new Map,r.externalProperties={},r.ignoreAttributeUpdateObservations=!1,r.internalProperties={},r.outputEventNames=new Set,r.instance=null,E()(r,"isRoot",f,r),r.root=void 0,r.runDomConnectionAndRenderingInSameEventQueue=!1,r.self=t,r.slots={},r.self=r.constructor,r.self._propertiesToReflectAsAttributes||(r.self._propertiesToReflectAsAttributes=r.self.normalizePropertyTypeList(r.self.propertiesToReflectAsAttributes)),r.generateAliasIndex(),r.root=r,r.defineGetterAndSetterInterface(),r}O()(t,e);var r=t.prototype;return r.attributeChangedCallback=function(e,t,r){this.ignoreAttributeUpdateObservations||t===r||this.onUpdateAttribute(e,r)},r.onUpdateAttribute=function(e,t){var r=this;this.evaluateStringOrNullAndSetAsProperty(e,t),this.batchAttributeUpdates?this.batchedAttributeUpdateRunning||this.batchedUpdateRunning||(this.batchedAttributeUpdateRunning=!0,this.batchedUpdateRunning=!0,(0,C.timeout)((function(){r.batchedAttributeUpdateRunning=!1,r.batchedUpdateRunning=!1,r.render("attributeChanged")}))):this.render("attributeChanged")},r.connectedCallback=function(){var e=this;try{this.isConnected=!0}catch(e){}this.parent=this,this.rootInstance=this,this.attachEventHandler(),this.self.determineRootBinding&&this.determineRootBinding(),this.self.applyRootBinding&&this.isRoot&&(this.determineRenderScope(),this.applyBinding(this,this.scope)),this.batchedAttributeUpdateRunning=!1,this.batchedPropertyUpdateRunning=!1,this.batchedUpdateRunning=!1,this.grabGivenSlots(),this.reflectExternalProperties(this.externalProperties),this.runDomConnectionAndRenderingInSameEventQueue?this.render("connected"):(0,C.timeout)((function(){e.render("connected")}))},r.disconnectedCallback=function(){try{this.isConnected=!1}catch(e){}for(var e,t=x(this.domNodeEventBindings.values());!(e=t()).done;)for(var r,n=x(e.value.values());!(r=n()).done;)(0,r.value)();this.slots={}},r.defineGetterAndSetterInterface=function(){for(var e,t=this,r=function(){var r=e.value;Object.prototype.hasOwnProperty.call(t,r)&&t.setPropertyValue(r,t[r]),Object.defineProperty(t,r,{configurable:!0,get:function(){return t.getPropertyValue(r)},set:function(e){t.setPropertyValue(r,e),t.triggerPropertySpecificRendering(r,e)}})},n=x((0,C.unique)(Object.keys(this.self.propertyTypes).concat(this.self._propertyAliasIndex?Object.keys(this.self._propertyAliasIndex):[])));!(e=n()).done;)r()},r.getPropertyAlias=function(e){return this.self._propertyAliasIndex&&Object.prototype.hasOwnProperty.call(this.self._propertyAliasIndex,e)?this.self._propertyAliasIndex[e]:null},r.getPropertyValue=function(e){var r,n,o=null!=(r=this.instance)&&null!=(r=r.current)&&r.properties&&(Object.prototype.hasOwnProperty.call(!t.propertyTypes,e)||Object.prototype.hasOwnProperty.call(this.instance.current.properties,e))?this.instance.current.properties[e]:this.externalProperties[e];return null!=(n=this.instance)&&null!=(n=n.current)&&n.state&&Object.prototype.hasOwnProperty.call(this.instance.current.state,e)?this.instance.current.state[e]:o},r.setExternalPropertyValue=function(e,t){this.externalProperties[e]=t;var r=this.getPropertyAlias(e);r&&(this.externalProperties[r]=t)},r.setInternalPropertyValue=function(e,t){this.internalProperties[e]=t;var r=this.getPropertyAlias(e);r&&(this.internalProperties[r]=t)},r.setPropertyValue=function(e,t){var r;this.reflectProperties(((r={})[e]=t,r)),this.setInternalPropertyValue(e,t)},r.triggerPropertySpecificRendering=function(e,t){var r=this;if(this.batchPropertyUpdates)this.batchedPropertyUpdateRunning||this.batchedUpdateRunning||(this.batchedPropertyUpdateRunning=!0,this.batchedUpdateRunning=!0,(0,C.timeout)((function(){void 0!==t&&r.isStateProperty(e)?(r.render("preStatePropertyChanged"),(0,C.timeout)((function(){r.setInternalPropertyValue(e,void 0),r.batchedPropertyUpdateRunning=!1,r.batchedUpdateRunning=!1,r.render("postStatePropertyChanged"),r.triggerOutputEvents()}))):(r.batchedPropertyUpdateRunning=!1,r.batchedUpdateRunning=!1,r.render("propertyChanged"),r.triggerOutputEvents())})));else{var n=this.isStateProperty(e);this.render(n?"preStatePropertyChanged":"propertyChanged"),void 0!==t&&n&&(this.setInternalPropertyValue(e,void 0),this.render("postStatePropertyChanged")),this.triggerOutputEvents()}},r.applyBinding=function(e,t){var r=this;if(e.getAttributeNames)for(var n,o=function(){var o=n.value,i="";if(o.startsWith("data-bind-")?i=o.substring(10):o.startsWith("bind-")&&(i=o.substring(5)),i){var s=e.getAttribute(o);if(null===s)return 0;if(i.startsWith("attribute-")||i.startsWith("property-")){var a=(0,C.evaluate)(s,t,!1,!0,e);if(a.error)return console.warn('Error occurred during processing given attribute binding "'+o+'" on node:',e,a.error),0;i.startsWith("attribute-")?e.setAttribute(i.substring(10),a.result):e[(0,C.delimitedToCamelCase)(i.substring(9))]=a.result}else if(i.startsWith("on-")){i=(0,C.delimitedToCamelCase)(i.substring(3)),t=v()({console,event:void 0,parameters:void 0},t);var l=(0,C.compile)(s,t,!0,!0,e);l.error?console.warn("Error occurred during compiling given event",'binding "'+o+'" on node:',e,l.error):r.addSecureEventListener(e,i,(function(){for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];t.event=n[0],t.parameters=n;try{l.templateFunction.apply(l,l.originalScopeNames.map((function(e){return t[e]})))}catch(t){console.warn("Error occurred during processing","given event binding",'"'+o+'" on node:',e,'Given expression "'+s+'" could',"not be evaluated with given scope",'names "'+l.scopeNames.join('", "')+'": '+(0,C.represent)(t))}}))}}},i=x(e.getAttributeNames());!(n=i()).done;)o()},r.applyBindings=function(e,t,r){for(void 0===r&&(r=!0);e;){var n;null==(n=e.attributes)||!n.length||!r&&e.getAttribute("slot")||this.applyBinding(e,t),e.nodeName.toLowerCase().includes("-")||this.applyBindings(e.firstChild,t),e=e.nextSibling}},r.compileDomNodeTemplate=function(e,t,r){void 0===t&&(t=[]),void 0===r&&(r={}),r=v()({ignoreComponents:!0,ignoreNestedComponents:!0,unsafe:this.self.renderUnsafe},r);var n=e.nodeName.toLowerCase();if(r.ignoreComponents&&n.includes("-"))return null;if(r.unsafe){var o=e.innerHTML;if(!o&&e.template&&(o=e.template),this.self.hasCode(o)){var i=(0,C.compile)("`"+o+"`",t);return{domNode:e,children:[],error:i.error,scopeNames:i.scopeNames,template:o,templateFunction:i.templateFunction}}return null}var s=null;if("#text"===n){var a=e.textContent;a&&this.self.hasCode(a)&&(s=a.replace(/&nbsp;/g," ").trim())}var l=[],p={children:l,domNode:e};if(s){var _=(0,C.compile)("`"+s+"`",t);p.error=_.error,p.scopeNames=_.scopeNames,p.template=s,p.templateFunction=_.templateFunction}for(var c=e.firstChild;c;){if(!r.filter||r.filter(c)){var u=this.compileDomNodeTemplate(c,t,v()({},r,{ignoreComponents:r.ignoreNestedComponents}));u&&l.push(u)}c=c.nextSibling}return p},r.evaluateCompiledDomNodeTemplate=function(e,t){var r=e.domNode,n=e.error,o=e.templateFunction,i=e.scopeNames;if(!o||!i)return null;if(n)return console.warn("Error occurred during compiling node content:",n),null;var s=null;try{s=o.apply(void 0,i.map((function(e){return t[e]})))}catch(n){console.warn('Error occurred when "'+this.self._name+'" is running','"'+String(o)+'": with bound','names "'+i.join('", "')+'":','"'+n+'". Rendering node:',r)}return s},r.evaluateDomNodeTemplate=function(e,t,r){var n=this;void 0===t&&(t={}),void 0===r&&(r={});var o=(r=v()({domNodeTemplateCache:this.domNodeTemplateCache,ignoreComponents:!0,ignoreNestedComponents:!0,unsafe:this.self.renderUnsafe},r)).domNodeTemplateCache;if(!o.has(e)){var i={filter:r.filter,ignoreComponents:r.ignoreComponents,ignoreNestedComponents:r.ignoreNestedComponents,unsafe:r.unsafe},s=this.compileDomNodeTemplate(e,t,i);s&&o.set(e,s)}if(o.has(e)){var a=o.get(e),l=this.evaluateCompiledDomNodeTemplate(a,t);if(null!==l&&(r.unsafe&&e.innerHTML?e.innerHTML=l:e.textContent=l),a.children.length){var p=function(e){for(var r,o=x(e);!(r=o()).done;){var i=r.value,s=n.evaluateCompiledDomNodeTemplate(i,t);null!==s&&(i.domNode.textContent=s),i.children.length&&p(i.children)}};p(a.children)}}r.applyBindings&&this.applyBindings(e,t)},t.replaceDomNodes=function(e,r){for(var n,o=x([].concat(r).reverse());!(n=o()).done;){var i,s=n.value;t.trimSlots&&s.nodeType===Node.TEXT_NODE&&""===(null==(i=s.nodeValue)?void 0:i.trim())||e.after(s)}e.remove()},t.unwrapDomNode=function(e){for(var t=e.parentNode,r=[];e.firstChild;)r.push(e.firstChild),t.insertBefore(e.firstChild,e);return t.removeChild(e),r},r.addSecureEventListener=function(e,t,r){var n=this;this.domNodeEventBindings.has(e)||this.domNodeEventBindings.set(e,new Map);var o=this.domNodeEventBindings.get(e),i=null==o?void 0:o.get(t);i&&i!==r&&i(),null==o||o.set(t,(function(){e.removeEventListener(t,r),o.delete(t),0===o.size&&n.domNodeEventBindings.delete(e)})),e.addEventListener(t,r)},r.determineRootBinding=function(){for(var e=this.parentNode;e;)(e instanceof t||e.nodeName.includes("-")||null===e.parentNode&&"[object ShadowRoot]"===e.toString())&&(this.rootInstance===this?(this.parent=e,this.rootInstance=e,this.setPropertyValue("isRoot",!1)):this.rootInstance=e),e=e.parentNode},t.hasCode=function(e){return"string"==typeof e&&e.includes("${")&&e.includes("}")&&/\${[\s\S]+}/.test(e)},t.normalizePropertyTypeList=function(e){if("string"==typeof e&&(e=[e]),Array.isArray(e)){for(var r,n=e,o=new Map,i=x(n);!(r=i()).done;){var s=r.value;Object.prototype.hasOwnProperty.call(t.propertyTypes,s)&&o.set(s,t.propertyTypes[s])}return o}return(0,C.convertPlainObjectToMap)(e)},r.attachEventHandler=function(){if(null!==this.self.eventToPropertyMapping){var e=this.attachExplicitDefinedOutputEventHandler();this.attachImplicitDefinedOutputEventHandler(!e)}},r.attachExplicitDefinedOutputEventHandler=function(){var e=this;if(!this.self.eventToPropertyMapping)return!1;for(var t=!1,r=function(){var r=o[n];Object.prototype.hasOwnProperty.call(e.internalProperties,r)||(t=!0,e.outputEventNames.add(r),e.setInternalPropertyValue(r,y()(M().mark((function t(){var n,o,i,s,a=arguments;return M().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:for(n=a.length,o=new Array(n),i=0;i<n;i++)o[i]=a[i];return t.next=1,e.reflectEventToProperties(r,o);case 1:(s=t.sent)&&(o[0]=s),e.forwardEvent(r,o);case 2:case"end":return t.stop()}}),t)})))))},n=0,o=Object.keys(this.self.eventToPropertyMapping);n<o.length;n++)r();return t},r.attachImplicitDefinedOutputEventHandler=function(e){var t=this;void 0===e&&(e=!0);for(var r=function(){var r=o[n],i=r[0],s=r[1];Object.prototype.hasOwnProperty.call(t.internalProperties,i)||![L.func,"function"].includes(s)||t.self.renderProperties.includes(i)||(t.outputEventNames.add(i),t.setInternalPropertyValue(i,(function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];e&&t.reflectEventToProperties(i,n),t.forwardEvent(i,n)})))},n=0,o=Object.entries(this.self.propertyTypes);n<o.length;n++)r()},r.triggerOutputEvents=function(){for(var e,t=x(this.outputEventNames);!(e=t()).done;){var r=e.value;this.forwardEvent(r,[this.externalProperties])}},r.forwardEvent=function(e,t){return e.length>3&&e.startsWith("on")&&(e=(0,C.lowerCase)(e.substring(2))),this.dispatchEvent(new CustomEvent(e,{detail:{parameters:t}}))},r.applySlots=function(e,t){for(var r=this,n=0,o=Array.from(e.querySelectorAll("slot"));n<o.length;n++){var i=o[n],s=i.getAttribute("name");if(null===s||"default"===s)if(this.slots.default){if(this.self.renderSlots){if(this.self.evaluateSlots)for(var a,l=x(this.slots.default);!(a=l()).done;){var p=a.value;this.evaluateDomNodeTemplate(p,t)}this.self.replaceDomNodes(i,this.slots.default)}}else this.slots.default=this.self.unwrapDomNode(i).map((function(e){return r.grabSlotContent(e)}));else this.slots[s]?this.self.renderSlots&&(this.self.evaluateSlots&&this.evaluateDomNodeTemplate(this.slots[s],t),this.self.replaceDomNodes(i,this.slots[s])):this.slots[s]=this.grabSlotContent(this.self.unwrapDomNode(i).filter((function(e){return"#text"!==e.nodeName.toLowerCase()}))[0])}},r.grabSlotContent=function(e){var t,r=L.node.firstElementChild?e:null;if(r&&"textarea"===(null==(t=r.firstElementChild)?void 0:t.nodeName.toLowerCase())&&(!r.firstElementChild.hasAttribute("data-no-template")||"false"===r.firstElementChild.getAttribute("data-no-template"))){var n=r.firstElementChild.value;r.classList.remove("web-component-template");var o=r.cloneNode();return r.classList.add("web-component-template"),o.innerHTML="",o.template=n,o}return this.self.cloneSlots?e.cloneNode(!0):e},r.grabGivenSlots=function(){var e=this;this.slots={};for(var t=0,r=Array.from(this.querySelectorAll("[slot]"));t<r.length;t++){for(var n,o=r[t],i=o.parentNode,s=!0;i;){if(i.nodeName.includes("-")){i===this&&(s=!1);break}i=i.parentNode}if(!s){var a=null==(n=o.getAttribute("slot"))?void 0:n.trim();this.slots[null!=a?a:o.nodeName.toLowerCase()]=this.grabSlotContent(o)}}this.slots.default?this.slots.default=[].concat(this.slots.default):this.childNodes.length>0?this.slots.default=Array.from(this.childNodes).map((function(t){return e.grabSlotContent(t)})):this.slots.default=[]},r.isStateProperty=function(e){var t;return Boolean((null==(t=this.instance)||null==(t=t.current)?void 0:t.state)&&(Object.prototype.hasOwnProperty.call(this.instance.current.state,e)||this.instance.current.state.modelState&&Object.prototype.hasOwnProperty.call(this.instance.current.state.modelState,e)))},r.generateAliasIndex=function(){if(!this.self._propertyAliasIndex){this.self._propertyAliasIndex=v()({},this.self.propertyAliases);for(var e=0,t=Object.entries(this.self._propertyAliasIndex);e<t.length;e++){var r=t[e],n=r[0],o=r[1];Object.prototype.hasOwnProperty.call(this.self._propertyAliasIndex,o)||(this.self._propertyAliasIndex[o]=n)}}},r.reflectExternalProperties=function(e){this.ignoreAttributeUpdateObservations=!0;for(var t=0,r=Object.entries(e);t<r.length;t++){var n,o=r[t],i=o[0],s=o[1];if(this.setExternalPropertyValue(i,s),this.isConnected){var a=(0,C.camelCaseToDelimited)(i);if(null!=(n=this.self._propertiesToReflectAsAttributes)&&n.has(i))switch(this.self._propertiesToReflectAsAttributes.get(i)){case L.boolean:case"boolean":s?""!==this.getAttribute(a)&&this.setAttribute(a,""):this.hasAttribute(a)&&this.removeAttribute(a);break;case L.func:case"function":break;case"json":if(s){var l=JSON.stringify(s);if(l&&this.getAttribute(a)!==l){this.setAttribute(a,l);break}}this.hasAttribute(a)&&this.removeAttribute(a);break;case L.number:case"number":if("number"!=typeof s||isNaN(s))this.hasAttribute(a)&&this.removeAttribute(a);else{var p=String(s);this.getAttribute(a)!==p&&this.setAttribute(a,p)}break;case L.string:case"string":s?this.getAttribute(a)!==s&&this.setAttribute(a,s):this.hasAttribute(a)&&this.removeAttribute(a);break;case L.any:case L.array:case L.arrayOf:case L.element:case L.elementType:case L.instanceOf:case L.node:case L.object:case"object":case L.objectOf:case L.shape:case L.exact:case L.symbol:default:if(s){var _=(0,C.represent)(s);if(_&&this.getAttribute(a)!==_){this.setAttribute(a,_);break}}this.hasAttribute(a)&&this.removeAttribute(a)}}}this.ignoreAttributeUpdateObservations=!1},r.reflectProperties=function(e){var t,r;if(this.reflectExternalProperties(e),null!=(t=this.instance)&&null!=(t=t.current)&&t.state&&"object"==typeof this.instance.current.state)for(var n,o=x(Object.keys(this.instance.current.state).concat(this.instance.current.state.modelState?Object.keys(this.instance.current.state.modelState):[]));!(n=o()).done;){var i=n.value;Object.prototype.hasOwnProperty.call(this.internalProperties,i)&&this.setInternalPropertyValue(i,void 0)}null!=(r=this.internalProperties.model)&&r.state&&(delete this.internalProperties.model.state,this.setInternalPropertyValue("model",this.internalProperties.model));for(var s,a=x(this.self.controllableProperties);!(s=a()).done;){var l=s.value;Object.prototype.hasOwnProperty.call(e,l)&&this.setInternalPropertyValue(l,e[l])}},r.reflectEventToProperties=function(){var e=y()(M().mark((function e(t,r){var n,o,i,s,a,l,p,_,c,u,d,h,f,b,m,y,g;return M().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=this.batchUpdates,this.batchUpdates=!1,o=null,i=!1,!(this.self.eventToPropertyMapping&&Object.prototype.hasOwnProperty.call(this.self.eventToPropertyMapping,t)&&(0,C.isFunction)(this.self.eventToPropertyMapping[t]))){e.next=4;break}if(!((a=(s=this.self.eventToPropertyMapping)[t].apply(s,r.concat([this])))&&"then"in a&&(0,C.isFunction)(a.then))){e.next=2;break}return e.next=1,a;case 1:g=e.sent,e.next=3;break;case 2:g=a;case 3:l=g,i=!0,Array.isArray(l)?(o=l[0],this.reflectProperties(o),(0,C.extend)(!0,this.internalProperties,l[1])):null===l?i=!1:"object"==typeof l&&(o=l,this.reflectProperties(l));case 4:if(!i&&r.length>0&&(0,C.isObject)(r[0])){if(_=r[0],"persist"in r[0]&&(0,C.isFunction)(r[0].persist))for(_={},c=0,u=Object.keys(this.self.propertyTypes);c<u.length;c++)for(d=u[c],h=x([d].concat(null!==(b=this.getPropertyAlias(d))&&void 0!==b?b:[]));!(f=h()).done;)m=f.value,(y=r[0].currentTarget&&Object.prototype.hasOwnProperty.call(r[0].currentTarget,m)?r[0].currentTarget[m]:this.getPropertyValue(m))!==this.externalProperties[m]&&(_[m]=y);else[null,void 0].includes(null==(p=_.detail)?void 0:p.value)||(_=v()({},_.detail));o=_,this.reflectProperties(_)}return this.triggerRender("propertyReflected"),this.batchUpdates=n,e.abrupt("return",o);case 5:case"end":return e.stop()}}),e,this)})));return function(t,r){return e.apply(this,arguments)}}(),r.evaluateStringOrNullAndSetAsProperty=function(e,t){var r=this,n=e.startsWith("-"),o=n?e.substring(1):e,i=(0,C.delimitedToCamelCase)(o),s=this.getPropertyAlias(i);if(s&&Object.prototype.hasOwnProperty.call(this.self.propertyTypes,s)&&(i=s),Object.prototype.hasOwnProperty.call(this.self.propertyTypes,i)){var a=this.self.propertyTypes[i];if(n){if(t){var l=(0,C.evaluate)(t,v()({},C.UTILITY_SCOPE),!1,!0,this);l.error?(console.warn('Failed to process pre-evaluation attribute "'+e+'": '+l.error+'. Will be set to "undefined".'),this.setInternalPropertyValue(i,void 0)):(this.setInternalPropertyValue(i,l.result),this.setExternalPropertyValue(i,l.result))}}else switch(a){case L.boolean:case"boolean":var p=![null,"false"].includes(t);this.setInternalPropertyValue(i,p),this.setExternalPropertyValue(i,p);break;case L.func:case"function":var _,c=null,u=["data","event","firstArgument","firstParameter","options","scope","parameters"].concat(C.UTILITY_SCOPE_NAMES);if(t){var d=(0,C.compile)(t,u);c=d.error,_=d.templateFunction,c&&console.warn('Failed to compile given handler "'+e+'": '+c+".")}this.setInternalPropertyValue(i,(function(){for(var n=arguments.length,o=new Array(n),s=0;s<n;s++)o[s]=arguments[s];r.outputEventNames.has(i)&&r.reflectEventToProperties(i,o);var a=void 0;if(!c)try{var l;a=null==(l=_)?void 0:l.call.apply(l,[r,o[0],o[0],o[0],o[0],o[0],o[0],o].concat(C.UTILITY_SCOPE_VALUES))}catch(r){console.warn('Failed to evaluate function "'+e+'" with expression "'+t+'" and scope variables "'+u.join('", "')+'" set to "'+(0,C.represent)(o)+'": '+r+'. Set property to "undefined".')}return r.self.renderProperties.includes(i)||r.forwardEvent(i,o),a})),c||this.setExternalPropertyValue(i,_);break;case"json":if(t){var h;try{h=JSON.parse(t)}catch(c){console.warn('Error occurred during parsing given json attribute "'+e+'": '+(0,C.represent)(c));break}this.setInternalPropertyValue(i,h),this.setExternalPropertyValue(i,(0,C.copy)(h,!1,1))}else this.setInternalPropertyValue(i,null),this.setExternalPropertyValue(i,null);break;case L.number:case"number":if(null===t){this.setInternalPropertyValue(i,t),this.setExternalPropertyValue(i,t);break}var f=parseFloat(t);isNaN(f)&&(f=void 0),this.setInternalPropertyValue(i,f),this.setExternalPropertyValue(i,f);break;case L.string:case"string":this.setInternalPropertyValue(i,t),this.setExternalPropertyValue(i,t);break;case L.any:case L.array:case L.arrayOf:case L.element:case L.elementType:case L.instanceOf:case L.node:case L.object:case"object":case L.objectOf:case L.oneOf:case L.oneOfType:case L.shape:case L.exact:case L.symbol:default:if(t){var b=(0,C.evaluate)(t,{},!1,!0,this);if(b.error){console.warn('Error occurred during processing given attribute configuration "'+e+'":',b.error);break}this.setInternalPropertyValue(i,b.result),this.setExternalPropertyValue(i,(0,C.copy)(b.result,!1,1))}else this.hasAttribute(e)?(this.setInternalPropertyValue(i,!0),this.setExternalPropertyValue(i,!0)):(this.setInternalPropertyValue(i,null),this.setExternalPropertyValue(i,null))}}},r.triggerRender=function(e){var t=this;this.batchUpdates?this.batchedUpdateRunning||(this.batchedUpdateRunning=!0,(0,C.timeout)((function(){t.batchedUpdateRunning=!1,t.render(e)}))):this.render(e)},r.applyShadowRootIfNotExisting=function(){this.self.shadowDOM&&this.root===this&&(this.root=(!("attachShadow"in this)&&"ShadyDOM"in window?window.ShadyDOM.wrap(this):this).attachShadow((0,C.isObject)(this.self.shadowDOM)?this.self.shadowDOM:{mode:"open"}))},r.determineRenderScope=function(e){var t,r;void 0===e&&(e={}),this.scope=v()({},(null==(t=this.parent)?void 0:t.scope)||{},this.scope,this.internalProperties,((r={parent:this.parent,root:this.rootInstance,self:this})[(0,C.lowerCase)(this.self._name)||"instance"]=this,r),e),this.scope.scope=this.scope},r.render=function(e){if(void 0===e&&(e="unknown"),this.determineRenderScope(),!this.dispatchEvent(new CustomEvent("render",{detail:{reason:e,scope:this.scope}})))return Promise.resolve();var t=(0,C.evaluate)("`"+this.self.content+"`",this.scope);if(t.error)return console.warn("Failed to process template: "+t.error),Promise.resolve();this.applyShadowRootIfNotExisting();var r=document.createElement("div");return r.innerHTML=t.result,this.applySlots(r,v()({},this.scope,{parent:this})),this.root.innerHTML=r.innerHTML,this.applyBindings(this.root.firstChild,this.scope,this.self.renderSlots),Promise.resolve()},t}(I),b.applyRootBinding=!0,b.content="<slot>Please provide a template to transclude.</slot>",b.determineRootBinding=!0,b.shadowDOM=null,b.observedAttributes=[],b.controllableProperties=[],b.eventToPropertyMapping={},b.propertyAliases={},b.propertyTypes={onClick:L.func},b.propertiesToReflectAsAttributes=[],b.renderProperties=["children"],b.cloneSlots=!1,b.evaluateSlots=!1,b.renderSlots=!0,b.trimSlots=!0,b.renderUnsafe=!1,b._name="BaseWeb",b._propertyAliasIndex=void 0,b._propertiesToReflectAsAttributes=void 0,h=b,f=w()(h.prototype,"isRoot",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!0}}),h),W={component:U,register:function(e){void 0===e&&(e=(0,C.camelCaseToDelimited)(U._name)),customElements.define(e,U)}};return u.default=U,u}())},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__4__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__5__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__6__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__7__},,e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__9__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__10__},e=>{e.exports=__WEBPACK_EXTERNAL_MODULE__11__}],__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(r.exports,r,r.exports,__webpack_require__),r.loaded=!0,r.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Internationalization:()=>Internationalization,api:()=>api,default:()=>index,log:()=>log});var _babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4),_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0__),_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(5),_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1__),_babel_runtime_helpers_initializerWarningHelper__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(6),_babel_runtime_helpers_initializerWarningHelper__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_babel_runtime_helpers_initializerWarningHelper__WEBPACK_IMPORTED_MODULE_2__),clientnode__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0),clientnode__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(clientnode__WEBPACK_IMPORTED_MODULE_3__),clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(1),clientnode_property_types__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__),web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(2),web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__),web_component_wrapper_Web__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(3),web_component_wrapper_Web__WEBPACK_IMPORTED_MODULE_6___default=__webpack_require__.n(web_component_wrapper_Web__WEBPACK_IMPORTED_MODULE_6__),_dec,_dec2,_dec3,_dec4,_dec5,_class,_descriptor,_descriptor2,_descriptor3,_descriptor4,_descriptor5,_Internationalization;const log=new clientnode__WEBPACK_IMPORTED_MODULE_3__.Logger({name:"internationalization"});let Internationalization=(_dec=(0,web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__.property)({type:clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__.object}),_dec2=(0,web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__.property)({type:clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__.func}),_dec3=(0,web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__.property)({type:clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__.func}),_dec4=(0,web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__.property)({type:clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__.func}),_dec5=(0,web_component_wrapper_decorator__WEBPACK_IMPORTED_MODULE_5__.property)({type:clientnode_property_types__WEBPACK_IMPORTED_MODULE_4__.func}),_Internationalization=class e extends web_component_wrapper_Web__WEBPACK_IMPORTED_MODULE_6__.Web{constructor(...t){super(...t),this.self=e,this.switchLanguageButtonDomNodes=null,this.currentLanguage="enUS",this.knownTranslations={},this.lock=new clientnode__WEBPACK_IMPORTED_MODULE_3__.Lock,_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this,"options",_descriptor,this),_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this,"onEnsure",_descriptor2,this),_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this,"onSwitch",_descriptor3,this),_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this,"onEnsured",_descriptor4,this),_babel_runtime_helpers_initializerDefineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this,"onSwitched",_descriptor5,this),this._domNodesToFade=[],this._replacements=[],this._textNodesWithKnownTranslation={}}onUpdateAttribute(e,t){super.onUpdateAttribute(e,t),"options"===e&&(this.options=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.extend)(!0,{},this.self._defaultOptions,this.options))}connectedCallback(){0===Object.keys(this.options).length&&this.onUpdateAttribute("options","{}"),this.options.preReplacementLanguagePattern=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.format)(this.options.preReplacementLanguagePattern,this.options.replacementLanguagePattern.substring(1,this.options.replacementLanguagePattern.length-1)),this.options.lockDescription=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.format)(this.options.lockDescription,this.self._name),this.options.sessionDescription=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.format)(this.options.sessionDescription,this.self._name),this.switchLanguageButtonDomNodes=this.root.querySelectorAll(`a[href^="#${this.options.languageHashPrefix}"]`),this._movePreReplacementNodes(),this.currentLanguage=this._normalizeLanguage(this.options.default);const e=this._determineUsefulLanguage(),t=0===this.options.selection.length;for(const e of this.switchLanguageButtonDomNodes){t&&this.options.selection.push(e.getAttribute("href").substring(`#${this.options.languageHashPrefix}`.length));const r=e=>{e.preventDefault();const t=e.target?.getAttribute("href");t&&this.switch(t.substring(this.options.languageHashPrefix.length+1))};this.addSecureEventListener(e,"click",r)}this.currentLanguage!==e?this.switch(e,!0):this._switchCurrentLanguageIndicator(e)}async switch(e,t=!1){if(!0===e||!this.options.selection.length||this.options.selection.includes(e)){if(await this.lock.acquire(this.options.lockDescription),!0===e?(t=!0,e=this.currentLanguage):e=this._normalizeLanguage(e),t&&e!==this.options.default||this.currentLanguage!==e){let r="Switch to";return t&&(r="Ensure"),log.debug(`${r} "${e}".`),this._switchCurrentLanguageIndicator(e),t?await this.onEnsure(this.currentLanguage):await this.onSwitch(this.currentLanguage,e),this._domNodesToFade=[],this._replacements=[],this._collectTextNodesToReplace(e,t),void await this._handleSwitchEffect(e,t)}log.debug(`"${e}" is already current selected language.`),this.lock.release(this.options.lockDescription)}else log.debug(`"${e}" isn't one of the allowed languages.`)}refresh(){return this._movePreReplacementNodes(),this.switch(!0)}async _handleSwitchEffect(e,t){const r=this.currentLanguage;if(!t&&this.options.useEffect&&this._domNodesToFade.length>0)return await Promise.all(this._domNodesToFade.map((e=>(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.fadeOut)(e)))),this._switchLanguage(e),await Promise.all(this._domNodesToFade.map((e=>(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.fadeIn)(e)))),this.onSwitched(r,e),void this.lock.release(this.options.lockDescription);this._switchLanguage(e),t?this.onEnsured(e):this.onSwitched(r,e),this.lock.release(this.options.lockDescription)}_movePreReplacementNodes(){const e=this;for(const t of(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getAll)(this.root)){const r=t.nodeName.toLowerCase();if(e.options.replacementDomNodeNames.includes(r)){["#comment","#text"].includes(r)||(t.style.visibility="hidden");const n=new RegExp(e.options.preReplacementLanguagePattern),o=t.textContent?.match(n);if(t.textContent&&o&&o[0]&&(t.textContent=t.textContent.replace(n,o[1]),t.parentElement)){let e=!1;for(const r of(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getAll)(t.parentElement)){if(e&&(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getText)(r).length>0){r.appendChild(t);break}t===r&&(e=!0)}}}}}_collectTextNodesToReplace(e,t){let r=null,n=null;this.knownTranslations={};for(const o of(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getAll)(this.root)){const i=o.nodeName.toLowerCase();if((0!==(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getText)(o).length||o.nodeType===Node.COMMENT_NODE&&""!==(o.nodeValue||"").trim())&&!r?.contains(o)&&!(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getParents)(o).some((e=>this.options.replaceDomNodeNames.concat(this.options.replacementDomNodeNames).includes(e.nodeName.toLowerCase()))))if(this.options.replaceDomNodeNames.includes(i))r=o;else if(r){if(this.options.replacementDomNodeNames.includes(i)){const s="#comment"===i?o.textContent:o.innerHTML,a=s?.match(new RegExp(this.options.replacementLanguagePattern));Array.isArray(a)&&a[1]===e?(this.knownTranslations[(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getText)(r).join(" ")]=a[2].trim(),n=this._ensureLastTextNodeHavingLanguageIndicator(r,n,t),this._registerTextNodeToChange(r,o,a,n),r=null,n=null):o.textContent?.match(new RegExp(this.options.currentLanguagePattern))&&(n=o);continue}r=null,n=null}}this._registerKnownTextNodes()}_registerKnownTextNodes(){this._textNodesWithKnownTranslation={};const e=this;for(const t of this.root.querySelectorAll(this.options.selectors.knownTranslation))for(const r of(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getAll)(t)){const t=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getText)(r).join(" ");t&&!e.options.replaceDomNodeNames.includes(r.nodeName.toLowerCase())&&!(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getParents)(r).some((e=>this.options.replaceDomNodeNames.includes(e.nodeName.toLowerCase())))&&Object.prototype.hasOwnProperty.call(e.knownTranslations,t)&&(this._domNodesToFade.push(r.parentElement),Object.prototype.hasOwnProperty.call(e._textNodesWithKnownTranslation,e.knownTranslations[t])?e._textNodesWithKnownTranslation[e.knownTranslations[t]].push(r):e._textNodesWithKnownTranslation[e.knownTranslations[t]]=[r])}}_normalizeLanguage(e){for(const[t,r]of Object.entries(this.options.languageMapping))if(r.includes(t.toLowerCase())||r.push(t.toLowerCase()),r.includes(e.toLowerCase()))return t;return this.options.default}_determineUsefulLanguage(){let e;return this.options.initial?e=this.options.initial:Object.prototype.hasOwnProperty.call(clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext,"window")&&(clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window?.localStorage.getItem(this.options.sessionDescription)?(e=clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window.localStorage.getItem(this.options.sessionDescription),log.debug(`Determine "${e}", because of local storage`,"information.")):clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window?.navigator.language&&(e=clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window.navigator.language,log.debug(`Determine "${e}", because of browser settings.`))),e||(e=this.options.default,log.debug(`Determine "${e}", because of default option.`)),e=this._normalizeLanguage(e),this.options.selection.length&&!this.options.selection.includes(e)&&(log.debug(`"${e}" isn't one of the allowed languages. Set`,`language to "${this.options.selection[0]}".`),e=this.options.selection[0]),clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window?.localStorage&&clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.window.localStorage.setItem(this.options.sessionDescription,e),e}_registerTextNodeToChange(e,t,r,n){this._domNodesToFade.push(e.parentElement),t&&this._replacements.push({textNodeToTranslate:e,nodeToReplaceWith:t,textToReplaceWith:r[2],currentLanguageDomNode:n})}_ensureLastTextNodeHavingLanguageIndicator(e,t,r){if(e&&!t){let n=this.currentLanguage;r&&(n=this.options.default||this.currentLanguage),(t=clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.document?.createComment(n)||null)&&e.after(t)}return t}_switchLanguage(e){for(const t of this._replacements){const r=Object.prototype.hasOwnProperty.call(t.textNodeToTranslate,"innerHTML")?t.textNodeToTranslate.innerHTML:t.textNodeToTranslate.textContent,n=r.trim();if(!this.options.templateDelimiter||!n.endsWith(this.options.templateDelimiter.post)&&this.options.templateDelimiter.post){let n=t.currentLanguageDomNode;if(!n){n=document.body;let e=!1;for(const r of(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.getAll)(t.textNodeToTranslate.parentElement)){if(e){t.currentLanguageDomNode=n=r;break}r===t.textNodeToTranslate&&(e=!0)}}const o=n.textContent;o&&e===o&&log.warn(`Text node "${t.textToReplaceWith}" is`,`marked as "${o}" and has same`,"translation language as it already is.");const i=t.nodeToReplaceWith.nodeName.toLowerCase();if("#comment"===i)t.textNodeToTranslate.after(clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.document.createComment(`${o}:${r}`));else{const e=clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.document.createElement(i);e.textContent=`${o}:${r}`,e.style.visibility="hidden",t.textNodeToTranslate.after(e)}t.textNodeToTranslate.after(clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.document.createComment(e)),"innerHTML"in t.textNodeToTranslate?t.textNodeToTranslate.innerHTML=t.textToReplaceWith:t.textNodeToTranslate.textContent=t.textToReplaceWith,n.remove(),t.nodeToReplaceWith.remove()}}for(const[e,t]of Object.entries(this._textNodesWithKnownTranslation))for(const r of t)r.textContent=e;clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.localStorage&&clientnode__WEBPACK_IMPORTED_MODULE_3__.globalContext.localStorage.setItem(this.options.sessionDescription,e),this.currentLanguage=e}_switchCurrentLanguageIndicator(e){for(const e of this.root.querySelectorAll(`a[href="#${this.options.languageHashPrefix}${this.currentLanguage}"].`+this.options.currentLanguageIndicatorClassName))e.classList.remove(this.options.currentLanguageIndicatorClassName);for(const t of this.root.querySelectorAll(`a[href="#${this.options.languageHashPrefix}${e}"]`))t.classList.add(this.options.currentLanguageIndicatorClassName)}},_Internationalization._name="WebInternationalization",_Internationalization._defaultOptions={currentLanguageIndicatorClassName:"current",currentLanguagePattern:"^[a-z]{2}[A-Z]{2}$",default:"enUS",useEffect:!0,initial:null,languageHashPrefix:"lang-",languageMapping:{deDE:["de","de_de","de-de","german","deutsch"],enUS:["en","en_us","en-us"],enEN:["en_en","en-en","english"],frFR:["fr","fr_fr","fr-fr","french"]},lockDescription:"{1}Switch",preReplacementLanguagePattern:"^\\|({1})$",replaceDomNodeNames:["#text","lang-replace"],replacementDomNodeNames:["#comment","lang-replacement"],replacementLanguagePattern:"^([a-z]{2}[A-Z]{2}):((.|\\s)*)$",selection:[],selectors:{knownTranslation:"div.toc"},sessionDescription:"{1}",templateDelimiter:{pre:"{{",post:"}}"}},_class=_Internationalization,_descriptor=_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype,"options",[_dec],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{}}}),_descriptor2=_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype,"onEnsure",[_dec2],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return clientnode__WEBPACK_IMPORTED_MODULE_3__.NOOP}}),_descriptor3=_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype,"onSwitch",[_dec3],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return clientnode__WEBPACK_IMPORTED_MODULE_3__.NOOP}}),_descriptor4=_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype,"onEnsured",[_dec4],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return clientnode__WEBPACK_IMPORTED_MODULE_3__.NOOP}}),_descriptor5=_babel_runtime_helpers_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class.prototype,"onSwitched",[_dec5],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return clientnode__WEBPACK_IMPORTED_MODULE_3__.NOOP}}),_class);const api={component:Internationalization,register:(e=(0,clientnode__WEBPACK_IMPORTED_MODULE_3__.camelCaseToDelimited)(Internationalization._name))=>{customElements.define(e,Internationalization)}},index=Internationalization;return __webpack_exports__})()));
package/package.json ADDED
@@ -0,0 +1,194 @@
1
+ {
2
+ "version": "2.0.1",
3
+ "name": "web-internationalization",
4
+ "description": "Expand your audience",
5
+ "keywords": [
6
+ "lang",
7
+ "language",
8
+ "internationalization"
9
+ ],
10
+ "homepage": "https://torben.website/internationalization",
11
+ "bugs": {
12
+ "email": "info@torben.website",
13
+ "url": "https://github.com/thaibault/internationalization/issues"
14
+ },
15
+ "license": "CC-BY-3.0",
16
+ "author": {
17
+ "name": "Torben Sickert",
18
+ "email": "info@torben.website",
19
+ "url": "https://torben.website"
20
+ },
21
+ "files": [
22
+ "index.d.ts",
23
+ "index.js",
24
+ "type.d.ts"
25
+ ],
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/thaibault/internationalization"
29
+ },
30
+ "scripts": {
31
+ "build": "yarn build:types; yarn build:plain",
32
+ "build:bundle": "yarn build:types; yarn build:bundle:plain",
33
+ "build:bundle:plain": "weboptimizer build '{__reference__: \"target:bundle\"}'",
34
+ "build:plain": "weboptimizer build",
35
+ "build:types": "weboptimizer build:types",
36
+ "check": "yarn check:types; yarn lint",
37
+ "check:types": "weboptimizer check:types",
38
+ "clear": "weboptimizer clear",
39
+ "document": "weboptimizer document",
40
+ "lint": "weboptimizer lint",
41
+ "prepare": "yarn build",
42
+ "serve": "weboptimizer serve",
43
+ "start": "yarn serve",
44
+ "test": "yarn clear; weboptimizer test",
45
+ "test:browser": "yarn clear; weboptimizer test:browser",
46
+ "test:coverage": "yarn clear; weboptimizer test:coverage",
47
+ "test:coverage:report": "yarn clear; weboptimizer test:coverage:report",
48
+ "update:documentation": "documentation-website",
49
+ "watch": "weboptimizer build --watch"
50
+ },
51
+ "devDependencies": {
52
+ "@babel/eslint-parser": "^7.28.6",
53
+ "@babel/plugin-transform-proto-to-assign": "^7.27.1",
54
+ "@babel/runtime": "^7.29.2",
55
+ "@eslint/js": "^10.0.1",
56
+ "@stylistic/eslint-plugin": "^5.10.0",
57
+ "@types/ejs": "^3.1.5",
58
+ "@types/html-minifier": "^4.0.6",
59
+ "@types/imagemin": "^9.0.1",
60
+ "@types/jsdom": "^28.0.1",
61
+ "@types/node": "^25.6.0",
62
+ "@types/webpack-env": "^1.18.8",
63
+ "@typescript-eslint/eslint-plugin": "^8.58.1",
64
+ "@typescript-eslint/parser": "^8.58.1",
65
+ "@webcomponents/webcomponentsjs": "^2.8.0",
66
+ "clientnode": "^4.0.1386",
67
+ "documentation-website": "^1.0.401",
68
+ "eslint": "^10.2.0",
69
+ "eslint-config-google": "^0.14.0",
70
+ "eslint-plugin-jsdoc": "^62.9.0",
71
+ "favicons-webpack-plugin": "^6.0.1",
72
+ "image-minimizer-webpack-plugin": "^5.0.0",
73
+ "jest": "^30.3.0",
74
+ "jsdoc": "^4.0.5",
75
+ "prop-types": "^15.8.1",
76
+ "typescript-eslint": "^8.58.1",
77
+ "web-component-wrapper": "^0.0.557",
78
+ "weboptimizer": "^3.0.21",
79
+ "webpack-dev-server": "^5.2.3"
80
+ },
81
+ "peerDependencies": {
82
+ "@babel/runtime": "*",
83
+ "clientnode": "*",
84
+ "prop-types": "^15.8.1",
85
+ "web-component-wrapper": "*"
86
+ },
87
+ "peerDependenciesMeta": {
88
+ "@babel/runtime": {
89
+ "optional": true
90
+ }
91
+ },
92
+ "engines": {
93
+ "node": ">=24",
94
+ "npm": ">=11",
95
+ "yarn": ">=4"
96
+ },
97
+ "resolutions": {
98
+ "colors": "1.4.0",
99
+ "globals@npm:^14.0.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch",
100
+ "globals@npm:^11.1.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch",
101
+ "globals@npm:^9.18.0": "patch:globals@npm%3A11.12.0#~/.yarn/patches/globals-npm-11.12.0-1fa7f41a6c.patch"
102
+ },
103
+ "sideEffects": false,
104
+ "documentationWebsite": {
105
+ "languages": [
106
+ "deDE",
107
+ "enUS",
108
+ "frFR"
109
+ ],
110
+ "tagline": "Expand your audience<!--deDE:Erweitern Sie Ihr Publikum--><!--frFR:Élargir votre audience-->",
111
+ "trackingCode": "UA-40192634-6"
112
+ },
113
+ "webOptimizer": {
114
+ "commandLine": {
115
+ "test": {
116
+ "environments": [
117
+ "jsdom"
118
+ ]
119
+ }
120
+ },
121
+ "generic": {
122
+ "supportedBrowsers": [
123
+ "browserslist config and supports es6-class"
124
+ ]
125
+ },
126
+ "injection": {
127
+ "external": {
128
+ "implicit": {
129
+ "pattern": {
130
+ "exclude": {
131
+ "__append__": {
132
+ "__evaluate__": "/(?:^|\\/)web-component-wrapper(?:$|\\/)/"
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ },
139
+ "module": {
140
+ "html": {
141
+ "options": {
142
+ "sources": {
143
+ "urlFilter": {
144
+ "__evaluate__": "() => false"
145
+ }
146
+ }
147
+ }
148
+ },
149
+ "optimizer": {
150
+ "babelMinify": {
151
+ "#": "Avoids TypeError: Cannot read properties of undefined (reading 'add')",
152
+ "module": null
153
+ },
154
+ "htmlMinifier": {
155
+ "ignoreCustomComments": [
156
+ {
157
+ "__evaluate__": "/^\\|?[a-z]{2}[A-Z]{2}:/"
158
+ },
159
+ {
160
+ "__evaluate__": "/^[a-z]{2}[A-Z]{2}$/"
161
+ }
162
+ ]
163
+ }
164
+ }
165
+ },
166
+ "target:bundle": {
167
+ "module": {
168
+ "preprocessor": {
169
+ "javaScript": {
170
+ "options": {
171
+ "plugins": {
172
+ "__remove__": "@babel/plugin-transform-runtime"
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ },
179
+ "webpack": {
180
+ "watchOptions": {
181
+ "ignored": {
182
+ "__prepend__": [
183
+ "**/node_modules/**/node_modules",
184
+ "**/node_modules/**/*.jsx",
185
+ "**/node_modules/**/*.ts",
186
+ "**/node_modules/**/*.tsx"
187
+ ],
188
+ "__remove__": "**/node_modules"
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "packageManager": "yarn@4.12.0+sha512.f45ab632439a67f8bc759bf32ead036a1f413287b9042726b7cc4818b7b49e14e9423ba49b18f9e06ea4941c1ad062385b1d8760a8d5091a1a31e5f6219afca8"
194
+ }
package/readme.md ADDED
@@ -0,0 +1,293 @@
1
+ <!-- !/usr/bin/env markdown
2
+ -*- coding: utf-8 -*-
3
+ region header
4
+ Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
5
+
6
+ License
7
+ -------
8
+
9
+ This library written by Torben Sickert stand under a creative commons naming
10
+ 3.0 unported license. See https://creativecommons.org/licenses/by/3.0/deed.de
11
+ endregion -->
12
+
13
+ Project status
14
+ --------------
15
+
16
+ [![npm](https://img.shields.io/npm/v/internationalization?color=%23d55e5d&label=npm%20package%20version&logoColor=%23d55e5d&style=for-the-badge)](https://www.npmjs.com/package/internationalization)
17
+ [![npm downloads](https://img.shields.io/npm/dy/internationalization.svg?style=for-the-badge)](https://www.npmjs.com/package/internationalization)
18
+
19
+ [![build](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/build.yaml?style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/build.yaml)
20
+ [![build push package](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/build-package-and-push.yaml?label=build%20push%20package&style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/build-package-and-push.yaml)
21
+
22
+ [![check types](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/check-types.yaml?label=check%20types&style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/check-types.yaml)
23
+ [![lint](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/lint.yaml?label=lint&style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/lint.yaml)
24
+ [![test](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/test-coverage-report.yaml?label=test&style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/test-coverage-report.yaml)
25
+
26
+ [![code coverage](https://img.shields.io/coverallsCoverage/github/thaibault/internationalization?label=code%20coverage&style=for-the-badge)](https://coveralls.io/github/thaibault/internationalization)
27
+
28
+ [![deploy documentation website](https://img.shields.io/github/actions/workflow/status/thaibault/internationalization/deploy-documentation-website.yaml?label=deploy%20documentation%20website&style=for-the-badge)](https://github.com/thaibault/internationalization/actions/workflows/deploy-documentation-website.yaml)
29
+ [![documentation website](https://img.shields.io/website-up-down-green-red/https/torben.website/internationalization.svg?label=documentation-website&style=for-the-badge)](https://torben.website/internationalization)
30
+
31
+ <!--|deDE:Einsatz-->
32
+ <!--|frFR:Utilisier-->
33
+ Use case
34
+ --------
35
+
36
+ A WebComponent to replace alternate version of text for client side
37
+ internationalization.
38
+ <!--deDE:
39
+ Eine Web-Komponente zum klientseitigem Ersetzten von verschiedenen
40
+ Textversionen. Perfekt für die Internationalisierung Ihres Webprojekts.
41
+ -->
42
+ <!--frFR:
43
+ Un WebComponent pour remplacer version alternative de texte pour le côté
44
+ client l'internationalization.
45
+ -->
46
+
47
+ <!--Place for automatic generated table of contents.-->
48
+ <div class="doc-toc" style="display:none">
49
+ <!--|deDE:Inhalt-->
50
+ <h2 id="content">Content</h2>
51
+ </div>
52
+
53
+ <!--|deDE:Installation-->
54
+ Installation
55
+ ------------
56
+
57
+ <!--|deDE:Klassische Dom-Integration-->
58
+ ### Classical dom injection
59
+
60
+ You can simply download the compiled version as zip file here and inject it
61
+ after needed dependencies:
62
+ <!--deDE:
63
+ Du kannst einfach das Plugin als Zip-Archiv herunterladen und per
64
+ Script-Tag in deine Webseite integrieren:
65
+ -->
66
+
67
+ ```HTML
68
+ <!--Inject downloaded file:
69
+ <script src="index.js"></script>
70
+ -->
71
+ <!--Or integrate via cdn:-->
72
+ <script
73
+ src="https://torben.website/internationalization/data/distributionBundle/index.js"
74
+ ></script>
75
+ ```
76
+
77
+ The compiled bundle supports AMD, commonjs, commonjs2 and variable injection
78
+ into given context (UMD) as export format: You can use a module bundler if you
79
+ want.
80
+ <!--deDE:
81
+ Das kompilierte Bundle unterstützt AMD, commonjs, commonjs2 und
82
+ Variable-Injection in den gegebenen Context (UMD) als Export-Format:
83
+ Dadurch können verschiedene Module-Bundler genutzt werden.
84
+ -->
85
+
86
+ <!--|deDE:Paket-Management und Modul-Komposition-->
87
+ ### Package managed and module bundled
88
+
89
+ If you are using npm as package manager you can simply add this tool to your
90
+ **package.json** as dependency:
91
+ <!--deDE:
92
+ Nutzt du npm als Paket-Manager, dann solltest du einfach deine
93
+ <strong>package.json</strong> erweitern:
94
+ -->
95
+
96
+ ```JSON
97
+ ...
98
+ "dependencies": {
99
+ ...
100
+ "internationalization": "latest",
101
+ ...
102
+ },
103
+ ...
104
+ ```
105
+
106
+ After updating your packages you can simply depend on this script and let
107
+ a module bundler do the hard stuff or access it via an exported variable name
108
+ in given context.
109
+ <!--deDE:
110
+ Nach einem Update deiner Pakete kannst du dieses Plugin einfach in deine
111
+ JavaScript-Module importieren oder die exportierte Variable im gegebenen
112
+ Context referenzieren.
113
+ -->
114
+
115
+ ```JavaScript
116
+ ...
117
+ import Language from 'internationalization'
118
+
119
+ TODO
120
+ ...
121
+ ```
122
+
123
+ <!--|deDE:Verwendung-->
124
+ <!--|frFR:Demande-->
125
+ Usage
126
+ -----
127
+
128
+ To add two versions of a text string you can simply add your translation
129
+ directly in markup. See how easy it is:
130
+ <!--deDE:
131
+ Um zwei Sprachversionen eines Textknotens im Markup anzubieten, müssen
132
+ einfach nur per Kommentar alternative Versionen hinter dem zu übersetzenden
133
+ String gesetzt werden.
134
+ -->
135
+ <!--frFR:
136
+ Doit offrir deux versions linguistiques d'un nœud de texte dans la balise
137
+ acile à traduire que par Commentez versions alternatives derrière le
138
+ Chaîne à être réglé.
139
+ -->
140
+
141
+ <!--showExample-->
142
+
143
+ ```HTML
144
+ <p>
145
+ Your englisch version.
146
+ <!--deDE:Ihre deutsche Variante.-->
147
+ <!--frFR:
148
+ Sa version française.
149
+ -->
150
+ </p>
151
+ ```
152
+
153
+ Sometimes you need to explicit mark a text node as text to replace with next
154
+ translation node. In this case you can simply wrap a self defined dom node.
155
+ <!--deDE:
156
+ Manchmal muss man Textknoten explizit als übersetzbar markieren, da sie
157
+ beispielsweise selbst aus mehr als nur einem Knoten bestehen. In solchen
158
+ Fällen kann einfach ein selbst definierter DOM-Knoten ummantelt werden.
159
+ -->
160
+ <!--frFR:
161
+ Parfois, vous devez sélectionner explicitement les nœuds de texte comme
162
+ traduisible, car ils Ainsi, même consister en plus d'un noeud. dans ce Cas
163
+ peuvent être facilement enveloppé d'un noeud DOM auto-défini.
164
+ -->
165
+
166
+ <!--showExample-->
167
+
168
+ ```HTML
169
+ <lang-replace>
170
+ Your englisch version with <strong>dom nodes</strong> inside.
171
+ </lang-replace>
172
+ <!--deDE:
173
+ Ihre deutsche Variante mit eingebetteten <strong>dom Knoten</strong>.
174
+ -->
175
+ <!--frFR:
176
+ Votre version français <strong>dom nodes</strong> à l'intérieur.
177
+ -->
178
+ ```
179
+
180
+ It is also possible to use an alternative replacement node.
181
+ <!--deDE:Man kann auch einen alternativen Ersetzungsknoten einsetzten.-->
182
+ <!--frFR:
183
+ Donc, il est possible d'utiliser alternative à nœud de remplacement.
184
+ -->
185
+
186
+ <!--showExample-->
187
+
188
+ ```HTML
189
+ <lang-replace>
190
+ Your englisch version with <strong>dom nodes</strong> inside.
191
+ </lang-replace>
192
+ <lang-replacement>deDE:
193
+ Ihre deutsche Variante mit eingebetteten <strong>dom Knoten</strong>.
194
+ </lang-replacement>
195
+ <lang-replacement>frFR:
196
+ Votre version français <strong>dom nodes</strong> à l'intérieur.
197
+ </lang-replacement>
198
+ ```
199
+
200
+ Usually the language dom node precedes the text node to translate. It is
201
+ possible to write a special syntax to use a replacement for the next dom node
202
+ containing text.
203
+ <!--deDE:
204
+ Normalerweise folgt der Sprach-DOM-Knoten auf den Textknoten der übersetzt
205
+ werden soll. Es ist mit einer speziellen Syntax möglich einen
206
+ Sprach-DOM-Knoten für den darauf folgenden DOM-Knoten anzuwenden.
207
+ -->
208
+ <!--frFR:
209
+ Normalement, le nœud DOM voix suit le nœud de texte de la traduction
210
+ devrait être. Il est doté d'une syntaxe spéciale possible une Nœud voix Dom
211
+ pour le nœud DOM prochaine à utiliser.
212
+ -->
213
+
214
+ <!--showExample-->
215
+
216
+ ```HTML
217
+ <!--|deDE:Ihre deutsche Variante.--><!--|frFR:Votre version français.-->
218
+ <p>Your englisch version.</p>
219
+ ```
220
+
221
+ It's possible to save one translation once if you specify the area with known
222
+ translations.
223
+ <!--deDE:
224
+ Es ist möglich, eine Übersetzung an nur einem Ort zu speichern, sofern der
225
+ Bereich mit bekannten Übersetzungen markiert wird.
226
+ -->
227
+ <!--frFR:
228
+ Il est possible d'enregistrer une traduction en un seul endroit, à moins
229
+ que le Région est marquée avec des traductions connues.
230
+ -->
231
+
232
+ <!--showExample-->
233
+
234
+ ```HTML
235
+ <!--The "div.toc" selector defines the default known language area.-->
236
+ <div class="toc">
237
+ <ul>
238
+ <li><a href="title-1">title 1</a></li>
239
+ <ul>
240
+ <li><a href="title-2">title 2</a></li>
241
+ </ul>
242
+ </ul>
243
+ </div>
244
+ <h1 id="title-1">title 1<!--deDE:Titel 1--><!--frFR:titre 1--></h1>
245
+ <h2 id="title-2">title 2<!--deDE:Titel 2--><!--frFR:titre 2--></h2>
246
+ ```
247
+
248
+ With the below initialization you can simple add this links everywhere in your
249
+ page to switch language. On click, you will switch the current language
250
+ interactively. Try it by yourself:
251
+ <!--deDE:
252
+ Mit der unten aufgezeigten Konfiguration können Sie einfach folgenden Links
253
+ an beliebiger Stelle im Markup plazieren. Beim Klicken auf die
254
+ Sprach-Wechsel-Links wird die Sprache Ihrer Webseite entsprechend
255
+ angepasst. Versuchen Sie selbst:
256
+ -->
257
+ <!--frFR:
258
+ Avec la configuration au-dessous, vous pouvez simplement identifié les
259
+ liens suivants placer n'importe où dans le balisage. Lorsque vous cliquez
260
+ sur l' Langue échange de liens est la langue de votre site en conséquence
261
+ ajustée. Essayez par vous-même:
262
+ -->
263
+
264
+ <!--showExample-->
265
+
266
+ ```HTML
267
+ <a href="#lang-deDE">de</a>
268
+ <a href="#lang-enUS">en</a>
269
+ <a href="#lang-frFR">fr</a>
270
+ ```
271
+
272
+ Here you can see a complete initialization example with all available options
273
+ to initialize the plugin with different configuration.
274
+ <!--deDE:
275
+ Hier können Sie ein Komplettbeispiel der Initialisierung sehen und alle
276
+ verfügbaren Optionen betrachten, um das Plugin in verschiedenen
277
+ Konfigurationen zu verwenden.
278
+ -->
279
+ <!--frFR:
280
+ Ici vous pouvez voir toutes les options disponibles pour le plug-in
281
+ différentes configurations pour initialiser.
282
+ -->
283
+
284
+ ```HTML
285
+ <script
286
+ src="https://torben.website/internationalization/data/distributionBundle/index.js"
287
+ ></script>
288
+ <script>
289
+ window.onload = function() {
290
+ internationalization.index.api.register()
291
+ }
292
+ </script>
293
+ ```
package/type.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { HTMLItem, Mapping } from 'clientnode';
2
+ export interface Replacement {
3
+ textNodeToTranslate: HTMLItem;
4
+ nodeToReplaceWith: HTMLItem;
5
+ textToReplaceWith: string;
6
+ currentLanguageDomNode: HTMLItem | null;
7
+ }
8
+ export interface DefaultOptions {
9
+ currentLanguageIndicatorClassName: string;
10
+ currentLanguagePattern: string;
11
+ default: string;
12
+ useEffect: boolean;
13
+ initial: null | string;
14
+ languageHashPrefix: string;
15
+ languageMapping: Mapping<Array<string>>;
16
+ lockDescription: string;
17
+ preReplacementLanguagePattern: string;
18
+ replaceDomNodeNames: Array<string>;
19
+ replacementDomNodeNames: Array<string>;
20
+ replacementLanguagePattern: string;
21
+ selection: Array<string>;
22
+ selectors: {
23
+ knownTranslation: string;
24
+ };
25
+ sessionDescription: string;
26
+ templateDelimiter: (null | {
27
+ pre: string;
28
+ post: string;
29
+ });
30
+ }
31
+ export type Options = DefaultOptions;