@tolgee/core 4.9.2 → 5.0.0-rc.4aa3be8.0
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/dist/tolgee.cjs.js +1069 -7029
- package/dist/tolgee.cjs.js.map +1 -1
- package/dist/tolgee.cjs.min.js +1 -1
- package/dist/tolgee.cjs.min.js.map +1 -1
- package/dist/tolgee.esm.min.mjs +1 -1
- package/dist/tolgee.esm.min.mjs.map +1 -1
- package/dist/tolgee.esm.mjs +1067 -7024
- package/dist/tolgee.esm.mjs.map +1 -1
- package/dist/tolgee.umd.js +1069 -7029
- package/dist/tolgee.umd.js.map +1 -1
- package/dist/tolgee.umd.min.js +1 -1
- package/dist/tolgee.umd.min.js.map +1 -1
- package/lib/Controller/Cache/Cache.d.ts +23 -0
- package/lib/Controller/Cache/helpers.d.ts +4 -0
- package/lib/Controller/Controller.d.ts +93 -0
- package/lib/Controller/Plugins/Plugins.d.ts +41 -0
- package/lib/Controller/State/State.d.ts +22 -0
- package/lib/Controller/State/helpers.d.ts +6 -0
- package/lib/Controller/State/initState.d.ts +55 -0
- package/lib/Controller/ValueObserver.d.ts +5 -0
- package/lib/Events/EventEmitter.d.ts +6 -0
- package/lib/Events/EventEmitterSelective.d.ts +15 -0
- package/lib/Events/Events.d.ts +50 -0
- package/lib/Tolgee.d.ts +2 -68
- package/lib/TranslateParams.d.ts +2 -0
- package/lib/{Constants/Global.d.ts → constants.d.ts} +1 -2
- package/lib/helpers.d.ts +3 -0
- package/lib/index.d.ts +3 -8
- package/lib/types.d.ts +235 -84
- package/package.json +19 -31
- package/src/Controller/Cache/Cache.ts +295 -0
- package/src/Controller/Cache/helpers.ts +39 -0
- package/src/Controller/Controller.ts +289 -0
- package/src/Controller/Plugins/Plugins.ts +305 -0
- package/src/Controller/State/State.ts +165 -0
- package/src/Controller/State/helpers.ts +41 -0
- package/src/Controller/State/initState.ts +90 -0
- package/src/Controller/ValueObserver.ts +23 -0
- package/src/Events/EventEmitter.ts +27 -0
- package/src/Events/EventEmitterSelective.test.ts +108 -0
- package/src/Events/EventEmitterSelective.ts +160 -0
- package/src/Events/Events.ts +66 -0
- package/src/Tolgee.ts +75 -333
- package/src/TranslateParams.test.ts +41 -0
- package/src/TranslateParams.ts +51 -0
- package/src/__test/backend.test.ts +48 -0
- package/src/__test/client.test.ts +48 -0
- package/src/__test/events.test.ts +33 -0
- package/src/__test/initialization.test.ts +73 -0
- package/src/__test/jest-setup.ts +2 -0
- package/src/__test/languageDetection.test.ts +123 -0
- package/src/__test/languageStorage.test.ts +145 -0
- package/src/__test/languages.test.ts +106 -0
- package/src/__test/loading.test.ts +39 -0
- package/src/__test/namespaces.test.ts +99 -0
- package/src/__test/namespacesFallback.test.ts +73 -0
- package/src/__test/plugins.test.ts +98 -0
- package/src/__test/testTools.ts +7 -0
- package/src/{Constants/Global.ts → constants.ts} +1 -3
- package/src/helpers.ts +17 -0
- package/src/index.ts +9 -8
- package/src/types.ts +324 -90
- package/README.md +0 -45
- package/dist/Constants/Global.d.ts +0 -6
- package/dist/Constants/ModifierKey.d.ts +0 -6
- package/dist/Errors/ApiHttpError.d.ts +0 -5
- package/dist/Observer.d.ts +0 -14
- package/dist/Observer.test.d.ts +0 -2
- package/dist/Properties.d.ts +0 -17
- package/dist/Properties.test.d.ts +0 -1
- package/dist/Tolgee.d.ts +0 -68
- package/dist/Tolgee.test.d.ts +0 -1
- package/dist/TolgeeConfig.d.ts +0 -69
- package/dist/TolgeeConfig.test.d.ts +0 -1
- package/dist/__integration/FormatterIcu.test.d.ts +0 -1
- package/dist/__integration/FormatterMissing.d.ts +0 -1
- package/dist/__integration/Tolgee.test.d.ts +0 -1
- package/dist/__integration/TolgeeInvisible.test.d.ts +0 -1
- package/dist/__integration/mockTranslations.d.ts +0 -7
- package/dist/__integration/testConfig.d.ts +0 -9
- package/dist/__testFixtures/classMock.d.ts +0 -3
- package/dist/__testFixtures/createElement.d.ts +0 -2
- package/dist/__testFixtures/createTestDom.d.ts +0 -9
- package/dist/__testFixtures/mocked.d.ts +0 -20
- package/dist/__testFixtures/setupAfterEnv.d.ts +0 -8
- package/dist/helpers/NodeHelper.d.ts +0 -14
- package/dist/helpers/TextHelper.d.ts +0 -5
- package/dist/helpers/TextHelper.test.d.ts +0 -1
- package/dist/helpers/commonTypes.d.ts +0 -2
- package/dist/helpers/encoderPolyfill.d.ts +0 -8
- package/dist/helpers/secret.d.ts +0 -6
- package/dist/helpers/secret.test.d.ts +0 -1
- package/dist/helpers/sleep.d.ts +0 -1
- package/dist/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
- package/dist/highlighter/HighlightFunctionsInitializer.test.d.ts +0 -1
- package/dist/highlighter/MouseEventHandler.d.ts +0 -29
- package/dist/highlighter/MouseEventHandler.test.d.ts +0 -1
- package/dist/highlighter/TranslationHighlighter.d.ts +0 -14
- package/dist/highlighter/TranslationHighlighter.test.d.ts +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/internal.d.ts +0 -2
- package/dist/modules/IcuFormatter.d.ts +0 -2
- package/dist/modules/IcuFormatter.test.d.ts +0 -1
- package/dist/modules/index.d.ts +0 -1
- package/dist/services/ApiHttpService.d.ts +0 -15
- package/dist/services/CoreService.d.ts +0 -18
- package/dist/services/CoreService.test.d.ts +0 -1
- package/dist/services/DependencyService.d.ts +0 -39
- package/dist/services/DependencyService.test.d.ts +0 -1
- package/dist/services/ElementRegistrar.d.ts +0 -19
- package/dist/services/ElementRegistrar.test.d.ts +0 -1
- package/dist/services/EventEmitter.d.ts +0 -13
- package/dist/services/EventService.d.ts +0 -9
- package/dist/services/ModuleService.d.ts +0 -5
- package/dist/services/ScreenshotService.d.ts +0 -15
- package/dist/services/Subscription.d.ts +0 -5
- package/dist/services/TextService.d.ts +0 -14
- package/dist/services/TextService.test.d.ts +0 -1
- package/dist/services/TranslationService.d.ts +0 -75
- package/dist/services/TranslationService.test.d.ts +0 -1
- package/dist/services/__mocks__/CoreService.d.ts +0 -2
- package/dist/toolsManager/Messages.d.ts +0 -8
- package/dist/toolsManager/Messages.test.d.ts +0 -1
- package/dist/toolsManager/PluginManager.d.ts +0 -21
- package/dist/toolsManager/PluginManager.test.d.ts +0 -1
- package/dist/types/DTOs.d.ts +0 -20
- package/dist/types/apiSchema.generated.d.ts +0 -6185
- package/dist/types.d.ts +0 -123
- package/dist/wrappers/AbstractWrapper.d.ts +0 -8
- package/dist/wrappers/NodeHandler.d.ts +0 -18
- package/dist/wrappers/WrappedHandler.d.ts +0 -8
- package/dist/wrappers/invisible/AttributeHandler.d.ts +0 -8
- package/dist/wrappers/invisible/Coder.d.ts +0 -7
- package/dist/wrappers/invisible/ContentHandler.d.ts +0 -6
- package/dist/wrappers/invisible/CoreHandler.d.ts +0 -10
- package/dist/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
- package/dist/wrappers/invisible/ValueMemory.d.ts +0 -5
- package/dist/wrappers/invisible/ValueMemory.test.d.ts +0 -1
- package/dist/wrappers/text/AttributeHandler.d.ts +0 -8
- package/dist/wrappers/text/AttributeHandler.test.d.ts +0 -1
- package/dist/wrappers/text/Coder.d.ts +0 -15
- package/dist/wrappers/text/Coder.test.d.ts +0 -1
- package/dist/wrappers/text/ContentHandler.d.ts +0 -8
- package/dist/wrappers/text/ContentHandler.test.d.ts +0 -1
- package/dist/wrappers/text/CoreHandler.d.ts +0 -17
- package/dist/wrappers/text/CoreHandler.test.d.ts +0 -1
- package/dist/wrappers/text/TextWrapper.d.ts +0 -20
- package/index.js +0 -7
- package/lib/Constants/ModifierKey.d.ts +0 -6
- package/lib/Errors/ApiHttpError.d.ts +0 -5
- package/lib/Observer.d.ts +0 -14
- package/lib/Properties.d.ts +0 -17
- package/lib/TolgeeConfig.d.ts +0 -69
- package/lib/helpers/NodeHelper.d.ts +0 -14
- package/lib/helpers/TextHelper.d.ts +0 -5
- package/lib/helpers/commonTypes.d.ts +0 -2
- package/lib/helpers/encoderPolyfill.d.ts +0 -8
- package/lib/helpers/secret.d.ts +0 -6
- package/lib/helpers/sleep.d.ts +0 -1
- package/lib/highlighter/HighlightFunctionsInitializer.d.ts +0 -10
- package/lib/highlighter/MouseEventHandler.d.ts +0 -29
- package/lib/highlighter/TranslationHighlighter.d.ts +0 -14
- package/lib/modules/IcuFormatter.d.ts +0 -2
- package/lib/modules/index.d.ts +0 -1
- package/lib/services/ApiHttpService.d.ts +0 -15
- package/lib/services/CoreService.d.ts +0 -18
- package/lib/services/DependencyService.d.ts +0 -39
- package/lib/services/ElementRegistrar.d.ts +0 -19
- package/lib/services/EventEmitter.d.ts +0 -13
- package/lib/services/EventService.d.ts +0 -9
- package/lib/services/ModuleService.d.ts +0 -5
- package/lib/services/ScreenshotService.d.ts +0 -15
- package/lib/services/Subscription.d.ts +0 -5
- package/lib/services/TextService.d.ts +0 -14
- package/lib/services/TranslationService.d.ts +0 -75
- package/lib/toolsManager/Messages.d.ts +0 -8
- package/lib/toolsManager/PluginManager.d.ts +0 -21
- package/lib/types/DTOs.d.ts +0 -20
- package/lib/types/apiSchema.generated.d.ts +0 -6185
- package/lib/wrappers/AbstractWrapper.d.ts +0 -8
- package/lib/wrappers/NodeHandler.d.ts +0 -18
- package/lib/wrappers/WrappedHandler.d.ts +0 -8
- package/lib/wrappers/invisible/AttributeHandler.d.ts +0 -8
- package/lib/wrappers/invisible/Coder.d.ts +0 -7
- package/lib/wrappers/invisible/ContentHandler.d.ts +0 -6
- package/lib/wrappers/invisible/CoreHandler.d.ts +0 -10
- package/lib/wrappers/invisible/InvisibleWrapper.d.ts +0 -18
- package/lib/wrappers/invisible/ValueMemory.d.ts +0 -5
- package/lib/wrappers/text/AttributeHandler.d.ts +0 -8
- package/lib/wrappers/text/Coder.d.ts +0 -15
- package/lib/wrappers/text/ContentHandler.d.ts +0 -8
- package/lib/wrappers/text/CoreHandler.d.ts +0 -17
- package/lib/wrappers/text/TextWrapper.d.ts +0 -20
- package/src/Constants/ModifierKey.ts +0 -6
- package/src/Errors/ApiHttpError.ts +0 -8
- package/src/Observer.test.ts +0 -119
- package/src/Observer.ts +0 -68
- package/src/Properties.test.ts +0 -150
- package/src/Properties.ts +0 -112
- package/src/Tolgee.test.ts +0 -473
- package/src/TolgeeConfig.test.ts +0 -21
- package/src/TolgeeConfig.ts +0 -134
- package/src/__integration/FormatterIcu.test.ts +0 -80
- package/src/__integration/FormatterMissing.ts +0 -54
- package/src/__integration/Tolgee.test.ts +0 -90
- package/src/__integration/TolgeeInvisible.test.ts +0 -145
- package/src/__integration/mockTranslations.ts +0 -6
- package/src/__integration/testConfig.ts +0 -16
- package/src/__testFixtures/classMock.ts +0 -11
- package/src/__testFixtures/createElement.ts +0 -43
- package/src/__testFixtures/createTestDom.ts +0 -26
- package/src/__testFixtures/mocked.ts +0 -25
- package/src/__testFixtures/setupAfterEnv.ts +0 -34
- package/src/helpers/NodeHelper.ts +0 -90
- package/src/helpers/TextHelper.test.ts +0 -62
- package/src/helpers/TextHelper.ts +0 -58
- package/src/helpers/commonTypes.ts +0 -8
- package/src/helpers/encoderPolyfill.ts +0 -96
- package/src/helpers/secret.test.ts +0 -61
- package/src/helpers/secret.ts +0 -68
- package/src/helpers/sleep.ts +0 -2
- package/src/highlighter/HighlightFunctionsInitializer.test.ts +0 -40
- package/src/highlighter/HighlightFunctionsInitializer.ts +0 -61
- package/src/highlighter/MouseEventHandler.test.ts +0 -151
- package/src/highlighter/MouseEventHandler.ts +0 -191
- package/src/highlighter/TranslationHighlighter.test.ts +0 -177
- package/src/highlighter/TranslationHighlighter.ts +0 -113
- package/src/internal.ts +0 -2
- package/src/modules/IcuFormatter.test.ts +0 -21
- package/src/modules/IcuFormatter.ts +0 -39
- package/src/modules/index.ts +0 -1
- package/src/services/ApiHttpService.ts +0 -85
- package/src/services/CoreService.test.ts +0 -141
- package/src/services/CoreService.ts +0 -76
- package/src/services/DependencyService.test.ts +0 -51
- package/src/services/DependencyService.ts +0 -116
- package/src/services/ElementRegistrar.test.ts +0 -131
- package/src/services/ElementRegistrar.ts +0 -108
- package/src/services/EventEmitter.ts +0 -52
- package/src/services/EventService.ts +0 -14
- package/src/services/ModuleService.ts +0 -14
- package/src/services/ScreenshotService.ts +0 -31
- package/src/services/Subscription.ts +0 -7
- package/src/services/TextService.test.ts +0 -88
- package/src/services/TextService.ts +0 -82
- package/src/services/TranslationService.test.ts +0 -358
- package/src/services/TranslationService.ts +0 -417
- package/src/services/__mocks__/CoreService.ts +0 -17
- package/src/toolsManager/Messages.test.ts +0 -79
- package/src/toolsManager/Messages.ts +0 -60
- package/src/toolsManager/PluginManager.test.ts +0 -108
- package/src/toolsManager/PluginManager.ts +0 -129
- package/src/types/DTOs.ts +0 -25
- package/src/types/apiSchema.generated.ts +0 -6208
- package/src/wrappers/AbstractWrapper.ts +0 -14
- package/src/wrappers/NodeHandler.ts +0 -143
- package/src/wrappers/WrappedHandler.ts +0 -28
- package/src/wrappers/invisible/AttributeHandler.ts +0 -23
- package/src/wrappers/invisible/Coder.ts +0 -65
- package/src/wrappers/invisible/ContentHandler.ts +0 -15
- package/src/wrappers/invisible/CoreHandler.ts +0 -17
- package/src/wrappers/invisible/InvisibleWrapper.ts +0 -59
- package/src/wrappers/invisible/ValueMemory.test.ts +0 -25
- package/src/wrappers/invisible/ValueMemory.ts +0 -16
- package/src/wrappers/text/AttributeHandler.test.ts +0 -118
- package/src/wrappers/text/AttributeHandler.ts +0 -25
- package/src/wrappers/text/Coder.test.ts +0 -298
- package/src/wrappers/text/Coder.ts +0 -202
- package/src/wrappers/text/ContentHandler.test.ts +0 -185
- package/src/wrappers/text/ContentHandler.ts +0 -21
- package/src/wrappers/text/CoreHandler.test.ts +0 -106
- package/src/wrappers/text/CoreHandler.ts +0 -45
- package/src/wrappers/text/TextWrapper.ts +0 -69
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { TranslationTags, TranslationParamsTags, Unwrapped } from '../types';
|
|
2
|
-
export interface AbstractWrapper {
|
|
3
|
-
handleText(node: Element): Promise<void>;
|
|
4
|
-
handleSubtree(node: Element): Promise<void>;
|
|
5
|
-
handleAttribute(node: Element): Promise<void>;
|
|
6
|
-
wrap: (key: string, params?: TranslationParamsTags<any>, defaultValue?: string | undefined, translation?: TranslationTags<any>) => TranslationTags<any>;
|
|
7
|
-
unwrap(text: string): Unwrapped;
|
|
8
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Properties } from '../Properties';
|
|
2
|
-
import { ElementWithMeta, KeyAndParamsTags, NodeWithMeta } from '../types';
|
|
3
|
-
import { ElementRegistrar } from '../services/ElementRegistrar';
|
|
4
|
-
import { AbstractWrapper } from './AbstractWrapper';
|
|
5
|
-
export declare class NodeHandler {
|
|
6
|
-
private properties;
|
|
7
|
-
private elementRegistrar;
|
|
8
|
-
private wrapper;
|
|
9
|
-
constructor(properties: Properties, elementRegistrar: ElementRegistrar, wrapper: AbstractWrapper);
|
|
10
|
-
static initParentElement(element: Element): ElementWithMeta;
|
|
11
|
-
filterRestricted<T extends Element | Text>(nodes: T[]): T[];
|
|
12
|
-
handleNodes(nodes: Array<Text | Attr>): Promise<void>;
|
|
13
|
-
translateChildNode(node: Text | Attr, newValue: any, keys: KeyAndParamsTags<any>[]): NodeWithMeta;
|
|
14
|
-
private lockNode;
|
|
15
|
-
private unlockNode;
|
|
16
|
-
private getParentElement;
|
|
17
|
-
private getSuitableParent;
|
|
18
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { NodeHandler } from './NodeHandler';
|
|
2
|
-
import { ElementRegistrar } from '../services/ElementRegistrar';
|
|
3
|
-
export declare class WrappedHandler {
|
|
4
|
-
private elementRegistrar;
|
|
5
|
-
private nodeHandler;
|
|
6
|
-
constructor(elementRegistrar: ElementRegistrar, nodeHandler: NodeHandler);
|
|
7
|
-
handle(node: Node): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { NodeHandler } from '../NodeHandler';
|
|
2
|
-
import { Properties } from '../../Properties';
|
|
3
|
-
export declare class AttributeHandler {
|
|
4
|
-
private properties;
|
|
5
|
-
private nodeHandler;
|
|
6
|
-
constructor(properties: Properties, nodeHandler: NodeHandler);
|
|
7
|
-
handle(node: Element): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { TranslationTags, TranslationParamsTags, Unwrapped } from '../../types';
|
|
2
|
-
export declare class Coder {
|
|
3
|
-
private keyMemory;
|
|
4
|
-
private defaultMemory;
|
|
5
|
-
unwrap(text: string): Unwrapped;
|
|
6
|
-
wrap(key: string, _params?: TranslationParamsTags<any>, defaultValue?: string | undefined, translation?: string | any[] | undefined): TranslationTags<any>;
|
|
7
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ContentHandler } from './ContentHandler';
|
|
2
|
-
import { AttributeHandler } from './AttributeHandler';
|
|
3
|
-
import { WrappedHandler } from '../WrappedHandler';
|
|
4
|
-
export declare class CoreHandler {
|
|
5
|
-
private textHandler;
|
|
6
|
-
private attributeHandler;
|
|
7
|
-
private wrappedHandler;
|
|
8
|
-
constructor(textHandler: ContentHandler, attributeHandler: AttributeHandler, wrappedHandler: WrappedHandler);
|
|
9
|
-
handleSubtree(target: Element): Promise<void>;
|
|
10
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Properties } from '../../Properties';
|
|
2
|
-
import { ElementRegistrar } from '../../services/ElementRegistrar';
|
|
3
|
-
import { TranslationParams } from '../../types';
|
|
4
|
-
import { AbstractWrapper } from '../AbstractWrapper';
|
|
5
|
-
export declare class InvisibleWrapper implements AbstractWrapper {
|
|
6
|
-
private coder;
|
|
7
|
-
private coreHandler;
|
|
8
|
-
private attributeHandler;
|
|
9
|
-
private wrappedHandler;
|
|
10
|
-
private textHandler;
|
|
11
|
-
private nodeHandler;
|
|
12
|
-
constructor(properties: Properties, elementRegistrar: ElementRegistrar);
|
|
13
|
-
handleText(node: Element): Promise<void>;
|
|
14
|
-
handleSubtree(node: Element): Promise<void>;
|
|
15
|
-
handleAttribute(node: Element): Promise<void>;
|
|
16
|
-
wrap(key: string, params?: TranslationParams, defaultValue?: string | undefined, translation?: string): import("../../types").TranslationTags<any>;
|
|
17
|
-
unwrap(text: string): import("../../types").Unwrapped;
|
|
18
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { NodeHandler } from '../NodeHandler';
|
|
2
|
-
import { Properties } from '../../Properties';
|
|
3
|
-
export declare class AttributeHandler {
|
|
4
|
-
private properties;
|
|
5
|
-
private nodeHandler;
|
|
6
|
-
constructor(properties: Properties, nodeHandler: NodeHandler);
|
|
7
|
-
handle(node: Element): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Properties } from '../../Properties';
|
|
2
|
-
import { TextService } from '../../services/TextService';
|
|
3
|
-
import { TranslationParams, Unwrapped } from '../../types';
|
|
4
|
-
export declare class Coder {
|
|
5
|
-
private properties;
|
|
6
|
-
private textService;
|
|
7
|
-
constructor(properties: Properties, textService: TextService);
|
|
8
|
-
private get rawUnWrapRegex();
|
|
9
|
-
private static parseUnwrapped;
|
|
10
|
-
unwrap(text: string): Unwrapped;
|
|
11
|
-
wrap(key: string, params?: TranslationParams, defaultValue?: string | undefined): string;
|
|
12
|
-
private getTranslatedWithMetadata;
|
|
13
|
-
private readonly escapeForRegExp;
|
|
14
|
-
private readonly escapeParam;
|
|
15
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Properties } from '../../Properties';
|
|
2
|
-
import { NodeHandler } from '../NodeHandler';
|
|
3
|
-
export declare class ContentHandler {
|
|
4
|
-
private properties;
|
|
5
|
-
private nodeHandler;
|
|
6
|
-
constructor(properties: Properties, nodeHandler: NodeHandler);
|
|
7
|
-
handle(node: Node): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { ContentHandler } from './ContentHandler';
|
|
2
|
-
import { EventService } from '../../services/EventService';
|
|
3
|
-
import { Properties } from '../../Properties';
|
|
4
|
-
import { AttributeHandler } from './AttributeHandler';
|
|
5
|
-
import { WrappedHandler } from '../WrappedHandler';
|
|
6
|
-
import { Coder } from './Coder';
|
|
7
|
-
export declare class CoreHandler {
|
|
8
|
-
private textHandler;
|
|
9
|
-
private eventService;
|
|
10
|
-
private properties;
|
|
11
|
-
private attributeHandler;
|
|
12
|
-
private coder;
|
|
13
|
-
private wrappedHandler;
|
|
14
|
-
constructor(textHandler: ContentHandler, eventService: EventService, properties: Properties, attributeHandler: AttributeHandler, coder: Coder, wrappedHandler: WrappedHandler);
|
|
15
|
-
handleSubtree(target: Element): Promise<void>;
|
|
16
|
-
private refresh;
|
|
17
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Properties } from '../../Properties';
|
|
2
|
-
import { ElementRegistrar } from '../../services/ElementRegistrar';
|
|
3
|
-
import { EventService } from '../../services/EventService';
|
|
4
|
-
import { TextService } from '../../services/TextService';
|
|
5
|
-
import { TranslationParams } from '../../types';
|
|
6
|
-
import { AbstractWrapper } from '../AbstractWrapper';
|
|
7
|
-
export declare class TextWrapper implements AbstractWrapper {
|
|
8
|
-
private coder;
|
|
9
|
-
private coreHandler;
|
|
10
|
-
private attributeHandler;
|
|
11
|
-
private wrappedHandler;
|
|
12
|
-
private textHandler;
|
|
13
|
-
private nodeHandler;
|
|
14
|
-
constructor(eventService: EventService, properties: Properties, textService: TextService, elementRegistrar: ElementRegistrar);
|
|
15
|
-
handleText(node: Element): Promise<void>;
|
|
16
|
-
handleSubtree(node: Element): Promise<void>;
|
|
17
|
-
handleAttribute(node: Element): Promise<void>;
|
|
18
|
-
wrap(key: string, params: TranslationParams, defaultValue: string | undefined, translation: string): string;
|
|
19
|
-
unwrap(text: string): import("../../types").Unwrapped;
|
|
20
|
-
}
|
package/src/Observer.test.ts
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
jest.dontMock('./Observer');
|
|
2
|
-
jest.dontMock('./services/DependencyService');
|
|
3
|
-
|
|
4
|
-
import { DependencyService } from './services/DependencyService';
|
|
5
|
-
import '@testing-library/jest-dom/extend-expect';
|
|
6
|
-
import 'regenerator-runtime/runtime.js';
|
|
7
|
-
import { getMockedInstance } from '@testFixtures/mocked';
|
|
8
|
-
import { Properties } from './Properties';
|
|
9
|
-
import { waitFor } from '@testing-library/dom';
|
|
10
|
-
import { Observer } from './Observer';
|
|
11
|
-
import { ElementRegistrar } from './services/ElementRegistrar';
|
|
12
|
-
import { TextWrapper } from './wrappers/text/TextWrapper';
|
|
13
|
-
|
|
14
|
-
describe('Observer', () => {
|
|
15
|
-
let observer: Observer;
|
|
16
|
-
let properties: Properties;
|
|
17
|
-
|
|
18
|
-
beforeEach(async () => {
|
|
19
|
-
const dependencyService = new DependencyService();
|
|
20
|
-
dependencyService.init({ wrapperMode: 'text' });
|
|
21
|
-
dependencyService.run();
|
|
22
|
-
observer = dependencyService.observer;
|
|
23
|
-
properties = getMockedInstance(Properties);
|
|
24
|
-
document.body = document.createElement('body');
|
|
25
|
-
properties.config.targetElement = document.body;
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
afterEach(() => {
|
|
29
|
-
jest.clearAllMocks();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('Can be created', () => {
|
|
33
|
-
expect(observer).toBeInstanceOf(Observer);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe('Tests on document.body', () => {
|
|
37
|
-
test('Will handle mutation on basic character data', async () => {
|
|
38
|
-
const text = document.createTextNode('Dummy text node');
|
|
39
|
-
document.body.append(text);
|
|
40
|
-
observer.observe();
|
|
41
|
-
text.textContent = 'Dummy text node modified';
|
|
42
|
-
|
|
43
|
-
await waitFor(() => {
|
|
44
|
-
const onNewNodesMock = getMockedInstance(TextWrapper).handleText;
|
|
45
|
-
expect(onNewNodesMock).toBeCalledTimes(1);
|
|
46
|
-
expect(onNewNodesMock).toBeCalledWith(text);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test('Will handle mutation element child list', async () => {
|
|
51
|
-
const text = document.createTextNode('Dummy text node');
|
|
52
|
-
observer.observe();
|
|
53
|
-
document.body.append(text);
|
|
54
|
-
|
|
55
|
-
await waitFor(() => {
|
|
56
|
-
const handleSubtree = getMockedInstance(TextWrapper).handleSubtree;
|
|
57
|
-
|
|
58
|
-
expect(handleSubtree).toBeCalledTimes(1);
|
|
59
|
-
expect(handleSubtree).toBeCalledWith(document.body);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
test('Will handle attribute mutation', async () => {
|
|
64
|
-
const span = document.createElement('span');
|
|
65
|
-
const attributeName = 'data-attribute';
|
|
66
|
-
span.setAttribute(attributeName, 'text');
|
|
67
|
-
document.body.append(span);
|
|
68
|
-
observer.observe();
|
|
69
|
-
span.setAttribute(attributeName, 'modified');
|
|
70
|
-
|
|
71
|
-
await waitFor(() => {
|
|
72
|
-
const handleAttributeMock =
|
|
73
|
-
getMockedInstance(TextWrapper).handleAttribute;
|
|
74
|
-
expect(handleAttributeMock).toBeCalledTimes(1);
|
|
75
|
-
expect(handleAttributeMock).toBeCalledWith(span);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test('Will handle subtree mutation', async () => {
|
|
80
|
-
const div = document.createElement('div');
|
|
81
|
-
div.innerHTML = "<div><div></div><div id='innerDiv'></div></div>";
|
|
82
|
-
document.body.append(div);
|
|
83
|
-
const innerDiv = document.getElementById('innerDiv');
|
|
84
|
-
observer.observe();
|
|
85
|
-
innerDiv.textContent = 'This is inner text';
|
|
86
|
-
|
|
87
|
-
await waitFor(() => {
|
|
88
|
-
const handleAttributeMock =
|
|
89
|
-
getMockedInstance(TextWrapper).handleSubtree;
|
|
90
|
-
|
|
91
|
-
expect(handleAttributeMock).toBeCalledTimes(1);
|
|
92
|
-
expect(handleAttributeMock).toBeCalledWith(innerDiv);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test('will stop observing', async () => {
|
|
97
|
-
observer.observe();
|
|
98
|
-
observer.stopObserving();
|
|
99
|
-
|
|
100
|
-
document.body.textContent = 'Nothing';
|
|
101
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
102
|
-
|
|
103
|
-
const handleSubtree = getMockedInstance(TextWrapper).handleSubtree;
|
|
104
|
-
expect(handleSubtree).not.toBeCalledTimes(1);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
test("Will call registrar's cleanInactive on change", async () => {
|
|
109
|
-
const text = document.createTextNode('Dummy text node');
|
|
110
|
-
document.body.append(text);
|
|
111
|
-
observer.observe();
|
|
112
|
-
text.textContent = 'Dummy text node modified';
|
|
113
|
-
|
|
114
|
-
await waitFor(() => {
|
|
115
|
-
const refreshAllMock = getMockedInstance(ElementRegistrar).refreshAll;
|
|
116
|
-
expect(refreshAllMock).toBeCalledTimes(1);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
package/src/Observer.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Properties } from './Properties';
|
|
2
|
-
import { ElementRegistrar } from './services/ElementRegistrar';
|
|
3
|
-
import { AbstractWrapper } from './wrappers/AbstractWrapper';
|
|
4
|
-
|
|
5
|
-
export class Observer {
|
|
6
|
-
constructor(
|
|
7
|
-
private properties: Properties,
|
|
8
|
-
private textWrapper: AbstractWrapper,
|
|
9
|
-
private nodeRegistrar: ElementRegistrar
|
|
10
|
-
) {}
|
|
11
|
-
|
|
12
|
-
private _observer = undefined;
|
|
13
|
-
private _observing = false;
|
|
14
|
-
|
|
15
|
-
private get observer(): MutationObserver | undefined {
|
|
16
|
-
if (!this._observer && typeof window !== 'undefined') {
|
|
17
|
-
this._observer = new MutationObserver(
|
|
18
|
-
async (mutationsList: MutationRecord[]) => {
|
|
19
|
-
for (const mutation of mutationsList) {
|
|
20
|
-
if (!this._observing) {
|
|
21
|
-
// make sure we don't touch the DOM after disconnect is called
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
if (mutation.type === 'characterData') {
|
|
25
|
-
await this.textWrapper.handleText(mutation.target as Element);
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
if (mutation.type === 'childList') {
|
|
29
|
-
await this.textWrapper.handleSubtree(mutation.target as Element);
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
if (mutation.type === 'attributes') {
|
|
33
|
-
await this.textWrapper.handleAttribute(
|
|
34
|
-
mutation.target as Element
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
this.nodeRegistrar.refreshAll();
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
return this._observer;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public observe() {
|
|
46
|
-
if (!this.observer) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (this._observing) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
this._observing = true;
|
|
53
|
-
this.observer.observe(this.properties.config.targetElement, {
|
|
54
|
-
attributes: true,
|
|
55
|
-
childList: true,
|
|
56
|
-
subtree: true,
|
|
57
|
-
characterData: true,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public stopObserving() {
|
|
62
|
-
if (!this.observer) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
this._observing = false;
|
|
66
|
-
this.observer.disconnect();
|
|
67
|
-
}
|
|
68
|
-
}
|
package/src/Properties.test.ts
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
jest.dontMock('./Properties');
|
|
2
|
-
jest.dontMock('./TolgeeConfig');
|
|
3
|
-
|
|
4
|
-
import '@testing-library/jest-dom/extend-expect';
|
|
5
|
-
import { mocked } from 'jest-mock';
|
|
6
|
-
import { TolgeeConfig } from './TolgeeConfig';
|
|
7
|
-
import { Properties } from './Properties';
|
|
8
|
-
|
|
9
|
-
describe('Properties', () => {
|
|
10
|
-
let properties: Properties;
|
|
11
|
-
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
jest.clearAllMocks();
|
|
14
|
-
properties = new Properties();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test('can be created', () => {
|
|
18
|
-
expect(properties).not.toBeNull();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
describe('preferred languages', () => {
|
|
22
|
-
test('getter returns from local storage', () => {
|
|
23
|
-
const dummyReturn = ['dummyLang1'];
|
|
24
|
-
Storage.prototype.getItem = jest.fn();
|
|
25
|
-
mocked(localStorage.getItem).mockReturnValueOnce(
|
|
26
|
-
JSON.stringify(dummyReturn)
|
|
27
|
-
);
|
|
28
|
-
expect(properties.preferredLanguages).toEqual(new Set(dummyReturn));
|
|
29
|
-
expect(localStorage.getItem).toBeCalledWith(
|
|
30
|
-
'__tolgee_preferredLanguages'
|
|
31
|
-
);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test('setter sets local storage item', () => {
|
|
35
|
-
const dummySet = ['dummyLang1'];
|
|
36
|
-
Storage.prototype.setItem = jest.fn();
|
|
37
|
-
properties.preferredLanguages = new Set(dummySet);
|
|
38
|
-
expect(localStorage.setItem).toBeCalledWith(
|
|
39
|
-
'__tolgee_preferredLanguages',
|
|
40
|
-
JSON.stringify(dummySet)
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('current language', () => {
|
|
46
|
-
test('getter returns from local storage', () => {
|
|
47
|
-
const dummyReturn = 'cs';
|
|
48
|
-
properties.config = new TolgeeConfig({
|
|
49
|
-
availableLanguages: ['cs', 'en'],
|
|
50
|
-
});
|
|
51
|
-
Storage.prototype.getItem = jest.fn();
|
|
52
|
-
mocked(localStorage.getItem).mockReturnValueOnce(dummyReturn);
|
|
53
|
-
expect(properties.currentLanguage).toEqual(dummyReturn);
|
|
54
|
-
expect(localStorage.getItem).toBeCalledWith('__tolgee_currentLanguage');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('uses defaultLanguage without localStorage and language detection', () => {
|
|
58
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
59
|
-
Storage.prototype.getItem = jest.fn();
|
|
60
|
-
Storage.prototype.setItem = jest.fn();
|
|
61
|
-
const defaultLanguage = 'cs';
|
|
62
|
-
properties.config = new TolgeeConfig({
|
|
63
|
-
defaultLanguage,
|
|
64
|
-
enableLanguageStore: false,
|
|
65
|
-
enableLanguageDetection: false,
|
|
66
|
-
});
|
|
67
|
-
expect(properties.currentLanguage).toEqual(defaultLanguage);
|
|
68
|
-
|
|
69
|
-
properties.currentLanguage = 'de';
|
|
70
|
-
expect(properties.currentLanguage).toEqual('de');
|
|
71
|
-
|
|
72
|
-
expect(localStorage.setItem).not.toBeCalled();
|
|
73
|
-
expect(languageGetter).not.toBeCalledWith('__tolgee_currentLanguage');
|
|
74
|
-
expect(localStorage.getItem).not.toBeCalledWith(
|
|
75
|
-
'__tolgee_currentLanguage'
|
|
76
|
-
);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test('setter sets local storage item', () => {
|
|
80
|
-
const dummySet = 'dummyLang1';
|
|
81
|
-
Storage.prototype.setItem = jest.fn();
|
|
82
|
-
properties.config = new TolgeeConfig();
|
|
83
|
-
properties.currentLanguage = dummySet;
|
|
84
|
-
expect(localStorage.setItem).toBeCalledWith(
|
|
85
|
-
'__tolgee_currentLanguage',
|
|
86
|
-
dummySet
|
|
87
|
-
);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test('returns correct lang by navigator', () => {
|
|
91
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
92
|
-
languageGetter.mockReturnValue('cs');
|
|
93
|
-
properties.config = new TolgeeConfig({
|
|
94
|
-
availableLanguages: ['en', 'cs'],
|
|
95
|
-
});
|
|
96
|
-
expect(properties.currentLanguage).toEqual('cs');
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
test('language is stored locally and detected only once', () => {
|
|
100
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
101
|
-
languageGetter.mockReturnValue('cs');
|
|
102
|
-
Storage.prototype.getItem = jest.fn();
|
|
103
|
-
properties.config = new TolgeeConfig({
|
|
104
|
-
availableLanguages: ['cs', 'en'],
|
|
105
|
-
});
|
|
106
|
-
expect(properties.currentLanguage).toEqual('cs');
|
|
107
|
-
expect(properties.currentLanguage).toEqual('cs');
|
|
108
|
-
|
|
109
|
-
expect(languageGetter).toBeCalledTimes(1);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test('available languages derrived from staticData', () => {
|
|
113
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
114
|
-
languageGetter.mockReturnValue('cs');
|
|
115
|
-
properties.config = new TolgeeConfig({ staticData: { en: {}, cs: {} } });
|
|
116
|
-
expect(properties.currentLanguage).toEqual('cs');
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
test('returns default lang if not available', () => {
|
|
120
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
121
|
-
languageGetter.mockReturnValue('cs');
|
|
122
|
-
properties.config = new TolgeeConfig({
|
|
123
|
-
availableLanguages: ['en'],
|
|
124
|
-
defaultLanguage: 'en',
|
|
125
|
-
});
|
|
126
|
-
expect(properties.currentLanguage).toEqual('en');
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
test('returns correct language ignoring dialect', () => {
|
|
130
|
-
const languageGetter = jest.spyOn(window.navigator, 'language', 'get');
|
|
131
|
-
languageGetter.mockReturnValue('en-GB');
|
|
132
|
-
properties.config = new TolgeeConfig({
|
|
133
|
-
availableLanguages: ['en-US'],
|
|
134
|
-
defaultLanguage: 'en-US',
|
|
135
|
-
});
|
|
136
|
-
expect(properties.currentLanguage).toEqual('en-US');
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
test('resets current language when missing in availableLanguages', () => {
|
|
140
|
-
const dummyReturn = 'cs';
|
|
141
|
-
Storage.prototype.getItem = jest.fn();
|
|
142
|
-
mocked(localStorage.getItem).mockReturnValueOnce(dummyReturn);
|
|
143
|
-
properties.config = new TolgeeConfig({
|
|
144
|
-
availableLanguages: ['en', 'de'],
|
|
145
|
-
defaultLanguage: 'en',
|
|
146
|
-
});
|
|
147
|
-
expect(properties.currentLanguage).toEqual('en');
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
});
|
package/src/Properties.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { TolgeeConfig } from './TolgeeConfig';
|
|
2
|
-
import { Mode, Scope } from './types';
|
|
3
|
-
|
|
4
|
-
const PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY = '__tolgee_preferredLanguages';
|
|
5
|
-
const CURRENT_LANGUAGE_LOCAL_STORAGE_KEY = '__tolgee_currentLanguage';
|
|
6
|
-
|
|
7
|
-
export class Properties {
|
|
8
|
-
config: TolgeeConfig;
|
|
9
|
-
scopes?: Scope[];
|
|
10
|
-
projectId?: number;
|
|
11
|
-
permittedLanguageIds?: number[];
|
|
12
|
-
mode?: Mode;
|
|
13
|
-
_currentLanguage?: string;
|
|
14
|
-
|
|
15
|
-
get currentLanguage(): string {
|
|
16
|
-
if (this.config?.forceLanguage) {
|
|
17
|
-
return this.config.forceLanguage;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (!this._currentLanguage) {
|
|
21
|
-
this._currentLanguage = this.getInitialLanguage();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return this._currentLanguage;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
set currentLanguage(language: string) {
|
|
28
|
-
if (!language) {
|
|
29
|
-
throw new Error(`Setting invalid language value ${language}`);
|
|
30
|
-
}
|
|
31
|
-
this._currentLanguage = language;
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
this.config?.enableLanguageStore &&
|
|
35
|
-
typeof localStorage !== 'undefined'
|
|
36
|
-
) {
|
|
37
|
-
localStorage.setItem(CURRENT_LANGUAGE_LOCAL_STORAGE_KEY, language);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get preferredLanguages(): Set<string> {
|
|
42
|
-
return new Set(
|
|
43
|
-
JSON.parse(localStorage.getItem(PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY))
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
set preferredLanguages(languages: Set<string>) {
|
|
48
|
-
localStorage.setItem(
|
|
49
|
-
PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY,
|
|
50
|
-
JSON.stringify(Array.from(languages))
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private getInitialLanguage() {
|
|
55
|
-
if (this.config.enableLanguageStore) {
|
|
56
|
-
const storedLanguage = this.getStoredLanguage();
|
|
57
|
-
if (storedLanguage) {
|
|
58
|
-
return storedLanguage;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (this.config.enableLanguageDetection) {
|
|
63
|
-
const detectedLanguage = this.getLanguageByNavigator();
|
|
64
|
-
if (detectedLanguage) {
|
|
65
|
-
return detectedLanguage;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return this.config.defaultLanguage;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
private getStoredLanguage() {
|
|
73
|
-
if (typeof localStorage !== 'undefined') {
|
|
74
|
-
const storedLanguage = localStorage.getItem(
|
|
75
|
-
CURRENT_LANGUAGE_LOCAL_STORAGE_KEY
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
if (!this.config.availableLanguages) {
|
|
79
|
-
return storedLanguage;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const isSavedLanguageAvailable =
|
|
83
|
-
this.config.availableLanguages.indexOf(storedLanguage) > -1;
|
|
84
|
-
|
|
85
|
-
if (isSavedLanguageAvailable) {
|
|
86
|
-
return storedLanguage;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
private getLanguageByNavigator() {
|
|
92
|
-
if (typeof window !== 'undefined' && this.config.availableLanguages) {
|
|
93
|
-
const preferred = window.navigator.language;
|
|
94
|
-
const exactMatch = this.config.availableLanguages.find(
|
|
95
|
-
(l) => l === preferred
|
|
96
|
-
);
|
|
97
|
-
if (exactMatch) {
|
|
98
|
-
return exactMatch;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const getTwoLetters = (fullTag) => fullTag.replace(/^(.+?)(-.*)?$/, '$1');
|
|
102
|
-
|
|
103
|
-
const preferredTwoLetter = getTwoLetters(window.navigator.language);
|
|
104
|
-
const twoLetterMatch = this.config.availableLanguages.find(
|
|
105
|
-
(l) => getTwoLetters(l) === preferredTwoLetter
|
|
106
|
-
);
|
|
107
|
-
if (twoLetterMatch) {
|
|
108
|
-
return twoLetterMatch;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|