@swisspost/internet-header 1.5.0-beta.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/LICENSE +202 -0
- package/dist/cjs/_commonjsHelpers-537d719a.js +22 -0
- package/dist/cjs/_commonjsHelpers-537d719a.js.map +1 -0
- package/dist/cjs/bodyScrollLock.esm-59f17217.js +285 -0
- package/dist/cjs/bodyScrollLock.esm-59f17217.js.map +1 -0
- package/dist/cjs/if.component-313f59b8.js +12 -0
- package/dist/cjs/if.component-313f59b8.js.map +1 -0
- package/dist/cjs/index-5751975e.js +1735 -0
- package/dist/cjs/index-5751975e.js.map +1 -0
- package/dist/cjs/index-e7245d60.js +144 -0
- package/dist/cjs/index-e7245d60.js.map +1 -0
- package/dist/cjs/index.cjs.js +4 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/klp-widget.controller-675b23db.js +15862 -0
- package/dist/cjs/klp-widget.controller-675b23db.js.map +1 -0
- package/dist/cjs/language.service-a80ae01d.js +152 -0
- package/dist/cjs/language.service-a80ae01d.js.map +1 -0
- package/dist/cjs/loader.cjs.js +24 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/post-klp-login-widget.cjs.entry.js +46 -0
- package/dist/cjs/post-klp-login-widget.cjs.entry.js.map +1 -0
- package/dist/cjs/post-language-switch.cjs.entry.js +103 -0
- package/dist/cjs/post-language-switch.cjs.entry.js.map +1 -0
- package/dist/cjs/post-logo.cjs.entry.js +67 -0
- package/dist/cjs/post-logo.cjs.entry.js.map +1 -0
- package/dist/cjs/post-main-navigation.cjs.entry.js +243 -0
- package/dist/cjs/post-main-navigation.cjs.entry.js.map +1 -0
- package/dist/cjs/post-meta-navigation.cjs.entry.js +28 -0
- package/dist/cjs/post-meta-navigation.cjs.entry.js.map +1 -0
- package/dist/cjs/post-search.cjs.entry.js +2739 -0
- package/dist/cjs/post-search.cjs.entry.js.map +1 -0
- package/dist/cjs/post-skiplinks.cjs.entry.js +54 -0
- package/dist/cjs/post-skiplinks.cjs.entry.js.map +1 -0
- package/dist/cjs/store-47e14589.js +202 -0
- package/dist/cjs/store-47e14589.js.map +1 -0
- package/dist/cjs/svg-icon.component-10fbda11.js +10 -0
- package/dist/cjs/svg-icon.component-10fbda11.js.map +1 -0
- package/dist/cjs/svg-sprite.component-c3b454b3.js +48 -0
- package/dist/cjs/svg-sprite.component-c3b454b3.js.map +1 -0
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js +3488 -0
- package/dist/cjs/swisspost-internet-breadcrumbs.cjs.entry.js.map +1 -0
- package/dist/cjs/swisspost-internet-footer.cjs.entry.js +148 -0
- package/dist/cjs/swisspost-internet-footer.cjs.entry.js.map +1 -0
- package/dist/cjs/swisspost-internet-header.cjs.entry.js +704 -0
- package/dist/cjs/swisspost-internet-header.cjs.entry.js.map +1 -0
- package/dist/cjs/swisspost-internet-header.cjs.js +28 -0
- package/dist/cjs/swisspost-internet-header.cjs.js.map +1 -0
- package/dist/cjs/ui.service-db4a8252.js +35 -0
- package/dist/cjs/ui.service-db4a8252.js.map +1 -0
- package/dist/cjs/utils-b6014257.js +22 -0
- package/dist/cjs/utils-b6014257.js.map +1 -0
- package/dist/collection/assets/config/test-configuration.json +4067 -0
- package/dist/collection/assets/i18n/translations.js +38 -0
- package/dist/collection/assets/i18n/translations.js.map +1 -0
- package/dist/collection/assets/js/klp-login-widget.js +1716 -0
- package/dist/collection/assets/js/sockjs-client.js +5134 -0
- package/dist/collection/collection-manifest.json +27 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/breadcrumb-list.component.js +11 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/breadcrumb-list.component.js.map +1 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/focus-trap.component.js +42 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/focus-trap.component.js.map +1 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js +8 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-dropdown.component.js.map +1 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-links.component.js +6 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/middle-links.component.js.map +1 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/overlay.component.js +12 -0
- package/dist/collection/components/post-internet-breadcrumbs/components/overlay.component.js.map +1 -0
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.css +2724 -0
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js +253 -0
- package/dist/collection/components/post-internet-breadcrumbs/post-internet-breadcrumbs.js.map +1 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-address.component.js +12 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-address.component.js.map +1 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-contact.component.js +24 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-contact.component.js.map +1 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-custom.component.js +6 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-custom.component.js.map +1 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-list.component.js +6 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-list.component.js.map +1 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-socials.component.js +5 -0
- package/dist/collection/components/post-internet-footer/components/post-footer-block-socials.component.js.map +1 -0
- package/dist/collection/components/post-internet-footer/post-internet-footer.css +2501 -0
- package/dist/collection/components/post-internet-footer/post-internet-footer.js +86 -0
- package/dist/collection/components/post-internet-footer/post-internet-footer.js.map +1 -0
- package/dist/collection/components/post-internet-header/post-internet-header.css +340 -0
- package/dist/collection/components/post-internet-header/post-internet-header.js +676 -0
- package/dist/collection/components/post-internet-header/post-internet-header.js.map +1 -0
- package/dist/collection/components/post-klp-login-widget/klp-widget.controller.js +14 -0
- package/dist/collection/components/post-klp-login-widget/klp-widget.controller.js.map +1 -0
- package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.css +1341 -0
- package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js +67 -0
- package/dist/collection/components/post-klp-login-widget/post-klp-login-widget.js.map +1 -0
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js +9 -0
- package/dist/collection/components/post-language-switch/components/post-language-switch-list.js.map +1 -0
- package/dist/collection/components/post-language-switch/post-language-switch.css +321 -0
- package/dist/collection/components/post-language-switch/post-language-switch.js +186 -0
- package/dist/collection/components/post-language-switch/post-language-switch.js.map +1 -0
- package/dist/collection/components/post-logo/logo-sprite.component.js +4 -0
- package/dist/collection/components/post-logo/logo-sprite.component.js.map +1 -0
- package/dist/collection/components/post-logo/post-logo.css +239 -0
- package/dist/collection/components/post-logo/post-logo.js +60 -0
- package/dist/collection/components/post-logo/post-logo.js.map +1 -0
- package/dist/collection/components/post-main-navigation/components/level-one-action.component.js +13 -0
- package/dist/collection/components/post-main-navigation/components/level-one-action.component.js.map +1 -0
- package/dist/collection/components/post-main-navigation/post-main-navigation.css +592 -0
- package/dist/collection/components/post-main-navigation/post-main-navigation.js +347 -0
- package/dist/collection/components/post-main-navigation/post-main-navigation.js.map +1 -0
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.css +290 -0
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.js +67 -0
- package/dist/collection/components/post-meta-navigation/post-meta-navigation.js.map +1 -0
- package/dist/collection/components/post-search/post-search.css +3028 -0
- package/dist/collection/components/post-search/post-search.js +362 -0
- package/dist/collection/components/post-search/post-search.js.map +1 -0
- package/dist/collection/components/post-skiplinks/post-skiplinks.css +20 -0
- package/dist/collection/components/post-skiplinks/post-skiplinks.js +51 -0
- package/dist/collection/components/post-skiplinks/post-skiplinks.js.map +1 -0
- package/dist/collection/data/store.js +11 -0
- package/dist/collection/data/store.js.map +1 -0
- package/dist/collection/index.js +2 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/models/breadcrumbs.model.js +2 -0
- package/dist/collection/models/breadcrumbs.model.js.map +1 -0
- package/dist/collection/models/coveo.model.js +2 -0
- package/dist/collection/models/coveo.model.js.map +1 -0
- package/dist/collection/models/footer.model.js +2 -0
- package/dist/collection/models/footer.model.js.map +1 -0
- package/dist/collection/models/general.model.js +2 -0
- package/dist/collection/models/general.model.js.map +1 -0
- package/dist/collection/models/geocode.model.js +10 -0
- package/dist/collection/models/geocode.model.js.map +1 -0
- package/dist/collection/models/header.model.js +2 -0
- package/dist/collection/models/header.model.js.map +1 -0
- package/dist/collection/models/implementor.model.js +2 -0
- package/dist/collection/models/implementor.model.js.map +1 -0
- package/dist/collection/models/language.model.js +2 -0
- package/dist/collection/models/language.model.js.map +1 -0
- package/dist/collection/models/track-and-trace.model.js +2 -0
- package/dist/collection/models/track-and-trace.model.js.map +1 -0
- package/dist/collection/services/config.service.js +170 -0
- package/dist/collection/services/config.service.js.map +1 -0
- package/dist/collection/services/language.service.js +107 -0
- package/dist/collection/services/language.service.js.map +1 -0
- package/dist/collection/services/route.service.js +163 -0
- package/dist/collection/services/route.service.js.map +1 -0
- package/dist/collection/services/search/coveo.service.js +34 -0
- package/dist/collection/services/search/coveo.service.js.map +1 -0
- package/dist/collection/services/search/coveo.settings.js +19 -0
- package/dist/collection/services/search/coveo.settings.js.map +1 -0
- package/dist/collection/services/search/parcel.service.js +54 -0
- package/dist/collection/services/search/parcel.service.js.map +1 -0
- package/dist/collection/services/search/places.service.js +95 -0
- package/dist/collection/services/search/places.service.js.map +1 -0
- package/dist/collection/services/search/places.settings.js +16 -0
- package/dist/collection/services/search/places.settings.js.map +1 -0
- package/dist/collection/services/search/search-utilities.js +26 -0
- package/dist/collection/services/search/search-utilities.js.map +1 -0
- package/dist/collection/services/search/search.service.js +42 -0
- package/dist/collection/services/search/search.service.js.map +1 -0
- package/dist/collection/services/ui.service.js +30 -0
- package/dist/collection/services/ui.service.js.map +1 -0
- package/dist/collection/tests/setup-tests.js +14 -0
- package/dist/collection/tests/setup-tests.js.map +1 -0
- package/dist/collection/utils/highlighted.component.js +11 -0
- package/dist/collection/utils/highlighted.component.js.map +1 -0
- package/dist/collection/utils/if.component.js +7 -0
- package/dist/collection/utils/if.component.js.map +1 -0
- package/dist/collection/utils/svg-icon.component.js +3 -0
- package/dist/collection/utils/svg-icon.component.js.map +1 -0
- package/dist/collection/utils/svg-sprite.component.js +3 -0
- package/dist/collection/utils/svg-sprite.component.js.map +1 -0
- package/dist/collection/utils/utils.js +16 -0
- package/dist/collection/utils/utils.js.map +1 -0
- package/dist/components/_commonjsHelpers.js +19 -0
- package/dist/components/_commonjsHelpers.js.map +1 -0
- package/dist/components/bodyScrollLock.esm.js +281 -0
- package/dist/components/bodyScrollLock.esm.js.map +1 -0
- package/dist/components/index.d.ts +39 -0
- package/dist/components/index.js +36 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index2.js +141 -0
- package/dist/components/index2.js.map +1 -0
- package/dist/components/klp-widget.controller.js +15860 -0
- package/dist/components/klp-widget.controller.js.map +1 -0
- package/dist/components/language.service.js +148 -0
- package/dist/components/language.service.js.map +1 -0
- package/dist/components/post-klp-login-widget.d.ts +11 -0
- package/dist/components/post-klp-login-widget.js +8 -0
- package/dist/components/post-klp-login-widget.js.map +1 -0
- package/dist/components/post-klp-login-widget2.js +59 -0
- package/dist/components/post-klp-login-widget2.js.map +1 -0
- package/dist/components/post-language-switch.d.ts +11 -0
- package/dist/components/post-language-switch.js +8 -0
- package/dist/components/post-language-switch.js.map +1 -0
- package/dist/components/post-language-switch2.js +118 -0
- package/dist/components/post-language-switch2.js.map +1 -0
- package/dist/components/post-logo.d.ts +11 -0
- package/dist/components/post-logo.js +8 -0
- package/dist/components/post-logo.js.map +1 -0
- package/dist/components/post-logo2.js +80 -0
- package/dist/components/post-logo2.js.map +1 -0
- package/dist/components/post-main-navigation.d.ts +11 -0
- package/dist/components/post-main-navigation.js +8 -0
- package/dist/components/post-main-navigation.js.map +1 -0
- package/dist/components/post-main-navigation2.js +260 -0
- package/dist/components/post-main-navigation2.js.map +1 -0
- package/dist/components/post-meta-navigation.d.ts +11 -0
- package/dist/components/post-meta-navigation.js +8 -0
- package/dist/components/post-meta-navigation.js.map +1 -0
- package/dist/components/post-meta-navigation2.js +42 -0
- package/dist/components/post-meta-navigation2.js.map +1 -0
- package/dist/components/post-search.d.ts +11 -0
- package/dist/components/post-search.js +8 -0
- package/dist/components/post-search.js.map +1 -0
- package/dist/components/post-search2.js +2763 -0
- package/dist/components/post-search2.js.map +1 -0
- package/dist/components/post-skiplinks.d.ts +11 -0
- package/dist/components/post-skiplinks.js +8 -0
- package/dist/components/post-skiplinks.js.map +1 -0
- package/dist/components/post-skiplinks2.js +64 -0
- package/dist/components/post-skiplinks2.js.map +1 -0
- package/dist/components/store.js +199 -0
- package/dist/components/store.js.map +1 -0
- package/dist/components/svg-icon.component.js +8 -0
- package/dist/components/svg-icon.component.js.map +1 -0
- package/dist/components/svg-sprite.component.js +46 -0
- package/dist/components/svg-sprite.component.js.map +1 -0
- package/dist/components/swisspost-internet-breadcrumbs.d.ts +11 -0
- package/dist/components/swisspost-internet-breadcrumbs.js +3509 -0
- package/dist/components/swisspost-internet-breadcrumbs.js.map +1 -0
- package/dist/components/swisspost-internet-footer.d.ts +11 -0
- package/dist/components/swisspost-internet-footer.js +164 -0
- package/dist/components/swisspost-internet-footer.js.map +1 -0
- package/dist/components/swisspost-internet-header.d.ts +11 -0
- package/dist/components/swisspost-internet-header.js +779 -0
- package/dist/components/swisspost-internet-header.js.map +1 -0
- package/dist/components/ui.service.js +32 -0
- package/dist/components/ui.service.js.map +1 -0
- package/dist/components/utils.js +19 -0
- package/dist/components/utils.js.map +1 -0
- package/dist/esm/_commonjsHelpers-9943807e.js +19 -0
- package/dist/esm/_commonjsHelpers-9943807e.js.map +1 -0
- package/dist/esm/bodyScrollLock.esm-afcc00e3.js +281 -0
- package/dist/esm/bodyScrollLock.esm-afcc00e3.js.map +1 -0
- package/dist/esm/if.component-542fb8c3.js +10 -0
- package/dist/esm/if.component-542fb8c3.js.map +1 -0
- package/dist/esm/index-066666f4.js +1704 -0
- package/dist/esm/index-066666f4.js.map +1 -0
- package/dist/esm/index-a75df186.js +141 -0
- package/dist/esm/index-a75df186.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/klp-widget.controller-be1eeb16.js +15860 -0
- package/dist/esm/klp-widget.controller-be1eeb16.js.map +1 -0
- package/dist/esm/language.service-e49858e0.js +148 -0
- package/dist/esm/language.service-e49858e0.js.map +1 -0
- package/dist/esm/loader.js +20 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/polyfills/core-js.js +11 -0
- package/dist/esm/polyfills/css-shim.js +1 -0
- package/dist/esm/polyfills/dom.js +79 -0
- package/dist/esm/polyfills/es5-html-element.js +1 -0
- package/dist/esm/polyfills/index.js +34 -0
- package/dist/esm/polyfills/system.js +6 -0
- package/dist/esm/post-klp-login-widget.entry.js +42 -0
- package/dist/esm/post-klp-login-widget.entry.js.map +1 -0
- package/dist/esm/post-language-switch.entry.js +99 -0
- package/dist/esm/post-language-switch.entry.js.map +1 -0
- package/dist/esm/post-logo.entry.js +63 -0
- package/dist/esm/post-logo.entry.js.map +1 -0
- package/dist/esm/post-main-navigation.entry.js +239 -0
- package/dist/esm/post-main-navigation.entry.js.map +1 -0
- package/dist/esm/post-meta-navigation.entry.js +24 -0
- package/dist/esm/post-meta-navigation.entry.js.map +1 -0
- package/dist/esm/post-search.entry.js +2735 -0
- package/dist/esm/post-search.entry.js.map +1 -0
- package/dist/esm/post-skiplinks.entry.js +50 -0
- package/dist/esm/post-skiplinks.entry.js.map +1 -0
- package/dist/esm/store-d495dc07.js +199 -0
- package/dist/esm/store-d495dc07.js.map +1 -0
- package/dist/esm/svg-icon.component-1b1b27a2.js +8 -0
- package/dist/esm/svg-icon.component-1b1b27a2.js.map +1 -0
- package/dist/esm/svg-sprite.component-ec0ac38c.js +46 -0
- package/dist/esm/svg-sprite.component-ec0ac38c.js.map +1 -0
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js +3484 -0
- package/dist/esm/swisspost-internet-breadcrumbs.entry.js.map +1 -0
- package/dist/esm/swisspost-internet-footer.entry.js +144 -0
- package/dist/esm/swisspost-internet-footer.entry.js.map +1 -0
- package/dist/esm/swisspost-internet-header.entry.js +700 -0
- package/dist/esm/swisspost-internet-header.entry.js.map +1 -0
- package/dist/esm/swisspost-internet-header.js +23 -0
- package/dist/esm/swisspost-internet-header.js.map +1 -0
- package/dist/esm/ui.service-1d9b0f51.js +32 -0
- package/dist/esm/ui.service-1d9b0f51.js.map +1 -0
- package/dist/esm/utils-5bf107ff.js +19 -0
- package/dist/esm/utils-5bf107ff.js.map +1 -0
- package/dist/esm-es5/_commonjsHelpers-9943807e.js +2 -0
- package/dist/esm-es5/_commonjsHelpers-9943807e.js.map +1 -0
- package/dist/esm-es5/bodyScrollLock.esm-afcc00e3.js +2 -0
- package/dist/esm-es5/bodyScrollLock.esm-afcc00e3.js.map +1 -0
- package/dist/esm-es5/if.component-542fb8c3.js +2 -0
- package/dist/esm-es5/if.component-542fb8c3.js.map +1 -0
- package/dist/esm-es5/index-066666f4.js +3 -0
- package/dist/esm-es5/index-066666f4.js.map +1 -0
- package/dist/esm-es5/index-a75df186.js +2 -0
- package/dist/esm-es5/index-a75df186.js.map +1 -0
- package/dist/esm-es5/index.js +2 -0
- package/dist/esm-es5/index.js.map +1 -0
- package/dist/esm-es5/klp-widget.controller-be1eeb16.js +27 -0
- package/dist/esm-es5/klp-widget.controller-be1eeb16.js.map +1 -0
- package/dist/esm-es5/language.service-e49858e0.js +2 -0
- package/dist/esm-es5/language.service-e49858e0.js.map +1 -0
- package/dist/esm-es5/loader.js +2 -0
- package/dist/esm-es5/loader.js.map +1 -0
- package/dist/esm-es5/post-klp-login-widget.entry.js +2 -0
- package/dist/esm-es5/post-klp-login-widget.entry.js.map +1 -0
- package/dist/esm-es5/post-language-switch.entry.js +2 -0
- package/dist/esm-es5/post-language-switch.entry.js.map +1 -0
- package/dist/esm-es5/post-logo.entry.js +2 -0
- package/dist/esm-es5/post-logo.entry.js.map +1 -0
- package/dist/esm-es5/post-main-navigation.entry.js +2 -0
- package/dist/esm-es5/post-main-navigation.entry.js.map +1 -0
- package/dist/esm-es5/post-meta-navigation.entry.js +2 -0
- package/dist/esm-es5/post-meta-navigation.entry.js.map +1 -0
- package/dist/esm-es5/post-search.entry.js +2 -0
- package/dist/esm-es5/post-search.entry.js.map +1 -0
- package/dist/esm-es5/post-skiplinks.entry.js +2 -0
- package/dist/esm-es5/post-skiplinks.entry.js.map +1 -0
- package/dist/esm-es5/store-d495dc07.js +2 -0
- package/dist/esm-es5/store-d495dc07.js.map +1 -0
- package/dist/esm-es5/svg-icon.component-1b1b27a2.js +2 -0
- package/dist/esm-es5/svg-icon.component-1b1b27a2.js.map +1 -0
- package/dist/esm-es5/svg-sprite.component-ec0ac38c.js +2 -0
- package/dist/esm-es5/svg-sprite.component-ec0ac38c.js.map +1 -0
- package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js +6 -0
- package/dist/esm-es5/swisspost-internet-breadcrumbs.entry.js.map +1 -0
- package/dist/esm-es5/swisspost-internet-footer.entry.js +2 -0
- package/dist/esm-es5/swisspost-internet-footer.entry.js.map +1 -0
- package/dist/esm-es5/swisspost-internet-header.entry.js +2 -0
- package/dist/esm-es5/swisspost-internet-header.entry.js.map +1 -0
- package/dist/esm-es5/swisspost-internet-header.js +2 -0
- package/dist/esm-es5/swisspost-internet-header.js.map +1 -0
- package/dist/esm-es5/ui.service-1d9b0f51.js +2 -0
- package/dist/esm-es5/ui.service-1d9b0f51.js.map +1 -0
- package/dist/esm-es5/utils-5bf107ff.js +2 -0
- package/dist/esm-es5/utils-5bf107ff.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/swisspost-internet-header/assets/config/test-configuration.json +4067 -0
- package/dist/swisspost-internet-header/index.esm.js +2 -0
- package/dist/swisspost-internet-header/index.esm.js.map +1 -0
- package/dist/swisspost-internet-header/p-00fd320e.entry.js +2 -0
- package/dist/swisspost-internet-header/p-00fd320e.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-0e2ec555.js +2 -0
- package/dist/swisspost-internet-header/p-0e2ec555.js.map +1 -0
- package/dist/swisspost-internet-header/p-112455b1.js +2 -0
- package/dist/swisspost-internet-header/p-112455b1.js.map +1 -0
- package/dist/swisspost-internet-header/p-17a47667.system.js +2 -0
- package/dist/swisspost-internet-header/p-17a47667.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-1b8f9bc8.system.js +3 -0
- package/dist/swisspost-internet-header/p-1b8f9bc8.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-2eb04045.entry.js +2 -0
- package/dist/swisspost-internet-header/p-2eb04045.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-3ba40afe.js +2 -0
- package/dist/swisspost-internet-header/p-3ba40afe.js.map +1 -0
- package/dist/swisspost-internet-header/p-3eb881c3.js +2 -0
- package/dist/swisspost-internet-header/p-3eb881c3.js.map +1 -0
- package/dist/swisspost-internet-header/p-43cbbf42.entry.js +2 -0
- package/dist/swisspost-internet-header/p-43cbbf42.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-4654b2af.system.js +2 -0
- package/dist/swisspost-internet-header/p-4654b2af.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-4c9ec2d8.system.js +27 -0
- package/dist/swisspost-internet-header/p-4c9ec2d8.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-5032057e.js +3 -0
- package/dist/swisspost-internet-header/p-5032057e.js.map +1 -0
- package/dist/swisspost-internet-header/p-50ea2036.system.js +2 -0
- package/dist/swisspost-internet-header/p-50ea2036.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-549b62ba.system.js +2 -0
- package/dist/swisspost-internet-header/p-549b62ba.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-5e43c5e0.js +2 -0
- package/dist/swisspost-internet-header/p-5e43c5e0.js.map +1 -0
- package/dist/swisspost-internet-header/p-69c64c29.js +2 -0
- package/dist/swisspost-internet-header/p-69c64c29.js.map +1 -0
- package/dist/swisspost-internet-header/p-6a09e0b4.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-6a09e0b4.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-74932c29.entry.js +6 -0
- package/dist/swisspost-internet-header/p-74932c29.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-76ce4acc.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-76ce4acc.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-78f653be.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-78f653be.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-7e653a26.js +27 -0
- package/dist/swisspost-internet-header/p-7e653a26.js.map +1 -0
- package/dist/swisspost-internet-header/p-7f16a46b.entry.js +2 -0
- package/dist/swisspost-internet-header/p-7f16a46b.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-8717445f.entry.js +2 -0
- package/dist/swisspost-internet-header/p-8717445f.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-883f9547.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-883f9547.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-9509f6c7.system.js +2 -0
- package/dist/swisspost-internet-header/p-9509f6c7.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-9d0a7039.entry.js +2 -0
- package/dist/swisspost-internet-header/p-9d0a7039.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-a119b38d.js +2 -0
- package/dist/swisspost-internet-header/p-a119b38d.js.map +1 -0
- package/dist/swisspost-internet-header/p-a4160d23.entry.js +2 -0
- package/dist/swisspost-internet-header/p-a4160d23.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-a51ad207.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-a51ad207.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-a9c4b2d0.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-a9c4b2d0.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-b3014611.system.js +2 -0
- package/dist/swisspost-internet-header/p-b3014611.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-bdabd6ac.js +2 -0
- package/dist/swisspost-internet-header/p-bdabd6ac.js.map +1 -0
- package/dist/swisspost-internet-header/p-bdfd2460.entry.js +2 -0
- package/dist/swisspost-internet-header/p-bdfd2460.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-c29ec122.system.js +2 -0
- package/dist/swisspost-internet-header/p-c29ec122.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-c69923cd.system.js +2 -0
- package/dist/swisspost-internet-header/p-c69923cd.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-c8296f63.system.js +2 -0
- package/dist/swisspost-internet-header/p-c8296f63.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-c946c5b8.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-c946c5b8.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-cb06a633.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-cb06a633.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-cb3de015.system.entry.js +2 -0
- package/dist/swisspost-internet-header/p-cb3de015.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-d713a3b3.system.entry.js +7 -0
- package/dist/swisspost-internet-header/p-d713a3b3.system.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-ddcb8258.entry.js +2 -0
- package/dist/swisspost-internet-header/p-ddcb8258.entry.js.map +1 -0
- package/dist/swisspost-internet-header/p-ec80c8fc.js +2 -0
- package/dist/swisspost-internet-header/p-ec80c8fc.js.map +1 -0
- package/dist/swisspost-internet-header/p-ee915bbe.system.js +2 -0
- package/dist/swisspost-internet-header/p-ee915bbe.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-eeff8b03.js +2 -0
- package/dist/swisspost-internet-header/p-eeff8b03.js.map +1 -0
- package/dist/swisspost-internet-header/p-f4ff1e9e.system.js +2 -0
- package/dist/swisspost-internet-header/p-f4ff1e9e.system.js.map +1 -0
- package/dist/swisspost-internet-header/p-f887c8bb.system.js +2 -0
- package/dist/swisspost-internet-header/p-f887c8bb.system.js.map +1 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.css +29 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.esm.js +2 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.esm.js.map +1 -0
- package/dist/swisspost-internet-header/swisspost-internet-header.js +131 -0
- package/dist/types/assets/i18n/translations.d.ts +37 -0
- package/dist/types/components/post-internet-breadcrumbs/components/breadcrumb-list.component.d.ts +9 -0
- package/dist/types/components/post-internet-breadcrumbs/components/focus-trap.component.d.ts +12 -0
- package/dist/types/components/post-internet-breadcrumbs/components/middle-dropdown.component.d.ts +7 -0
- package/dist/types/components/post-internet-breadcrumbs/components/middle-links.component.d.ts +6 -0
- package/dist/types/components/post-internet-breadcrumbs/components/overlay.component.d.ts +16 -0
- package/dist/types/components/post-internet-breadcrumbs/post-internet-breadcrumbs.d.ts +45 -0
- package/dist/types/components/post-internet-footer/components/post-footer-block-address.component.d.ts +5 -0
- package/dist/types/components/post-internet-footer/components/post-footer-block-contact.component.d.ts +6 -0
- package/dist/types/components/post-internet-footer/components/post-footer-block-custom.component.d.ts +4 -0
- package/dist/types/components/post-internet-footer/components/post-footer-block-list.component.d.ts +5 -0
- package/dist/types/components/post-internet-footer/components/post-footer-block-socials.component.d.ts +5 -0
- package/dist/types/components/post-internet-footer/post-internet-footer.d.ts +10 -0
- package/dist/types/components/post-internet-header/post-internet-header.d.ts +124 -0
- package/dist/types/components/post-klp-login-widget/klp-widget.controller.d.ts +3 -0
- package/dist/types/components/post-klp-login-widget/post-klp-login-widget.d.ts +10 -0
- package/dist/types/components/post-language-switch/components/post-language-switch-list.d.ts +6 -0
- package/dist/types/components/post-language-switch/post-language-switch.d.ts +27 -0
- package/dist/types/components/post-logo/logo-sprite.component.d.ts +4 -0
- package/dist/types/components/post-logo/post-logo.d.ts +11 -0
- package/dist/types/components/post-main-navigation/components/level-one-action.component.d.ts +8 -0
- package/dist/types/components/post-main-navigation/post-main-navigation.d.ts +48 -0
- package/dist/types/components/post-meta-navigation/post-meta-navigation.d.ts +5 -0
- package/dist/types/components/post-search/post-search.d.ts +61 -0
- package/dist/types/components/post-skiplinks/post-skiplinks.d.ts +9 -0
- package/dist/types/components.d.ts +365 -0
- package/dist/types/data/store.d.ts +16 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/models/breadcrumbs.model.d.ts +36 -0
- package/dist/types/models/coveo.model.d.ts +22 -0
- package/dist/types/models/footer.model.d.ts +48 -0
- package/dist/types/models/general.model.d.ts +46 -0
- package/dist/types/models/geocode.model.d.ts +52 -0
- package/dist/types/models/header.model.d.ts +163 -0
- package/dist/types/models/implementor.model.d.ts +22 -0
- package/dist/types/models/language.model.d.ts +6 -0
- package/dist/types/models/track-and-trace.model.d.ts +25 -0
- package/dist/types/services/config.service.d.ts +56 -0
- package/dist/types/services/language.service.d.ts +65 -0
- package/dist/types/services/route.service.d.ts +39 -0
- package/dist/types/services/search/coveo.service.d.ts +9 -0
- package/dist/types/services/search/coveo.settings.d.ts +2 -0
- package/dist/types/services/search/parcel.service.d.ts +28 -0
- package/dist/types/services/search/places.service.d.ts +24 -0
- package/dist/types/services/search/places.settings.d.ts +3 -0
- package/dist/types/services/search/search-utilities.d.ts +15 -0
- package/dist/types/services/search/search.service.d.ts +24 -0
- package/dist/types/services/ui.service.d.ts +23 -0
- package/dist/types/stencil-public-runtime.d.ts +1637 -0
- package/dist/types/tests/setup-tests.d.ts +0 -0
- package/dist/types/utils/highlighted.component.d.ts +4 -0
- package/dist/types/utils/if.component.d.ts +4 -0
- package/dist/types/utils/svg-icon.component.d.ts +4 -0
- package/dist/types/utils/svg-sprite.component.d.ts +1 -0
- package/dist/types/utils/utils.d.ts +8 -0
- package/loader/cdn.js +3 -0
- package/loader/index.cjs.js +3 -0
- package/loader/index.d.ts +21 -0
- package/loader/index.es2017.js +3 -0
- package/loader/index.js +4 -0
- package/loader/package.json +11 -0
- package/package.json +71 -0
- package/readme.md +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.model.js","sourceRoot":"","sources":["../../../src/models/language.model.ts"],"names":[],"mappings":"","sourcesContent":["export interface IAvailableLanguage {\r\n lang: string;\r\n text?: string;\r\n title?: string;\r\n url?: string;\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-and-trace.model.js","sourceRoot":"","sources":["../../../src/models/track-and-trace.model.ts"],"names":[],"mappings":"","sourcesContent":["export interface TrackAndTraceInfo {\r\n ok: boolean;\r\n timestamp: string;\r\n sending?: {\r\n 'id': string;\r\n 'product': string;\r\n 'state': string;\r\n 'state-id': number;\r\n 'recipient': {\r\n zipcode: string;\r\n city: string;\r\n };\r\n };\r\n events?: [\r\n {\r\n date: string;\r\n time: string;\r\n number: string;\r\n description: string;\r\n zip: string;\r\n city: string;\r\n coords: [number, number];\r\n },\r\n ];\r\n}\r\n"]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { getUserLang, persistLanguageChoice } from './language.service';
|
|
2
|
+
import { uniqueId } from '../utils/utils';
|
|
3
|
+
import { markActiveRoute } from './route.service';
|
|
4
|
+
// Prevent double requests
|
|
5
|
+
let request = null;
|
|
6
|
+
// Cache the original os flyout to use it for updates
|
|
7
|
+
let osFlyoutCache = null;
|
|
8
|
+
/**
|
|
9
|
+
* Get a localized config object
|
|
10
|
+
*
|
|
11
|
+
* @param projectId String identifying the project
|
|
12
|
+
* @param language [optional] Preferred language
|
|
13
|
+
* @returns Localized config object
|
|
14
|
+
*/
|
|
15
|
+
export const getLocalizedConfig = async ({ projectId, environment, language, cookieKey, localStorageKey, activeRouteProp, localizedCustomConfig, osFlyoutOverrides, }) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
if (!request) {
|
|
18
|
+
request = fetchConfig(projectId, environment);
|
|
19
|
+
}
|
|
20
|
+
const config = await request;
|
|
21
|
+
const lang = getUserLang(Object.keys(config), language, localStorageKey, cookieKey);
|
|
22
|
+
if (lang === undefined) {
|
|
23
|
+
throw new Error('Internet Header: unable to determine current language');
|
|
24
|
+
}
|
|
25
|
+
// Clone config for more predictable state updates
|
|
26
|
+
let localizedConfig = Object.assign({}, config[lang]);
|
|
27
|
+
// Merge custom config with portal config
|
|
28
|
+
if (localizedCustomConfig) {
|
|
29
|
+
const header = ((_a = localizedCustomConfig === null || localizedCustomConfig === void 0 ? void 0 : localizedCustomConfig.header) === null || _a === void 0 ? void 0 : _a.navMain)
|
|
30
|
+
? Object.assign(Object.assign({}, localizedConfig.header), { navMain: [...localizedConfig.header.navMain, ...localizedCustomConfig.header.navMain] }) : localizedConfig.header;
|
|
31
|
+
localizedConfig = Object.assign(Object.assign({}, localizedConfig), { header });
|
|
32
|
+
}
|
|
33
|
+
// Add entries to flyout_os
|
|
34
|
+
if (osFlyoutOverrides)
|
|
35
|
+
localizedConfig.header.navMain = mergeOsFlyoutOverrides(localizedConfig, osFlyoutOverrides);
|
|
36
|
+
// Mark active route
|
|
37
|
+
if (activeRouteProp)
|
|
38
|
+
localizedConfig.header.navMain = markActiveRoute(localizedConfig.header.navMain, activeRouteProp);
|
|
39
|
+
setMainNavigationIds((_b = localizedConfig === null || localizedConfig === void 0 ? void 0 : localizedConfig.header) === null || _b === void 0 ? void 0 : _b.navMain);
|
|
40
|
+
// Set the new language choice
|
|
41
|
+
persistLanguageChoice(lang, cookieKey, localStorageKey);
|
|
42
|
+
return localizedConfig;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Merge portal config with custom os flyout overrides
|
|
46
|
+
* @param config Localized config
|
|
47
|
+
* @param osFlyoutOverrides Overrides for the flyout
|
|
48
|
+
* @returns Merged localized config
|
|
49
|
+
*/
|
|
50
|
+
export const mergeOsFlyoutOverrides = (config, osFlyoutOverrides) => {
|
|
51
|
+
if (!osFlyoutOverrides)
|
|
52
|
+
return config.header.navMain;
|
|
53
|
+
return config.header.navMain.map(mainNav => {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
if (mainNav.id !== 'flyout_os')
|
|
56
|
+
return mainNav;
|
|
57
|
+
if (osFlyoutCache === null) {
|
|
58
|
+
osFlyoutCache = JSON.parse(JSON.stringify(mainNav));
|
|
59
|
+
}
|
|
60
|
+
const mainNavText = (_a = osFlyoutOverrides.text) !== null && _a !== void 0 ? _a : osFlyoutCache.text;
|
|
61
|
+
const mainNavTitle = (_b = osFlyoutOverrides.title) !== null && _b !== void 0 ? _b : osFlyoutCache.title;
|
|
62
|
+
if (!osFlyoutCache.flyout ||
|
|
63
|
+
osFlyoutCache.flyout.length === 0 ||
|
|
64
|
+
!osFlyoutOverrides.flyout ||
|
|
65
|
+
osFlyoutOverrides.flyout.length === 0)
|
|
66
|
+
return Object.assign(Object.assign({}, mainNav), { title: mainNavTitle, text: mainNavText });
|
|
67
|
+
// Add entries for os flyout columns without overriding existing config
|
|
68
|
+
const mainNavFlyout = [
|
|
69
|
+
...osFlyoutCache.flyout.map((col, index) => {
|
|
70
|
+
var _a;
|
|
71
|
+
const overrides = osFlyoutOverrides.flyout[index];
|
|
72
|
+
const title = (_a = overrides.title) !== null && _a !== void 0 ? _a : col.title;
|
|
73
|
+
const linkList = overrides.linkList ? osFlyoutOverrides.flyout[index].linkList : [];
|
|
74
|
+
return {
|
|
75
|
+
title,
|
|
76
|
+
linkList: [...col.linkList, ...linkList],
|
|
77
|
+
};
|
|
78
|
+
}),
|
|
79
|
+
...osFlyoutOverrides.flyout.slice(osFlyoutCache.flyout.length),
|
|
80
|
+
];
|
|
81
|
+
return Object.assign(Object.assign({}, mainNav), { text: mainNavText, title: mainNavTitle, flyout: mainNavFlyout });
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Fetch the general config based on project id
|
|
86
|
+
*
|
|
87
|
+
* @returns Promise for Post Portal general config
|
|
88
|
+
*/
|
|
89
|
+
export const fetchConfig = async (projectId, environment) => {
|
|
90
|
+
// Check if project id is sanitized
|
|
91
|
+
if (!isValidProjectId(projectId)) {
|
|
92
|
+
throw new Error(`Internet Header: invalid project id "${projectId}"`);
|
|
93
|
+
}
|
|
94
|
+
if (projectId === 'test') {
|
|
95
|
+
environment = 'int01';
|
|
96
|
+
}
|
|
97
|
+
let url = generateConfigUrl(projectId, environment);
|
|
98
|
+
// Get the config if cache is invalid
|
|
99
|
+
try {
|
|
100
|
+
const res = await fetch(url);
|
|
101
|
+
return (await res.json());
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new Error(`Internet Header: fetching config failed. ${error.message}`);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Generate an URL with all necessary query params to get the configuration.
|
|
109
|
+
* Project id "test" will return a test configuration
|
|
110
|
+
* @param projectId string
|
|
111
|
+
* @param environment int01, int02 or prod
|
|
112
|
+
* @returns URL pointing to the project config
|
|
113
|
+
*/
|
|
114
|
+
export const generateConfigUrl = (projectId, environment) => {
|
|
115
|
+
if (projectId === 'test')
|
|
116
|
+
return 'assets/config/test-configuration.json';
|
|
117
|
+
const isInt = environment.startsWith('int');
|
|
118
|
+
const host = `https://${isInt ? 'int' : 'www'}.post.ch`;
|
|
119
|
+
try {
|
|
120
|
+
// Use URL to validate the generated URL
|
|
121
|
+
return new URL(`${host}/api/headerjs/Json?serviceid=${encodeURIComponent(projectId)}${isInt ? '&environment=' + environment : ''}`).toString();
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new Error(`Internet Header: Config URL is invalid.`);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Check if project id contains only URL safe characters
|
|
129
|
+
*
|
|
130
|
+
* @param projectId Project Id string
|
|
131
|
+
* @returns The valid project id
|
|
132
|
+
*/
|
|
133
|
+
export const isValidProjectId = (projectId) => {
|
|
134
|
+
return projectId !== '' && projectId.length > 0 && /^[a-zA-Z][\w-]*[a-zA-Z0-9]$/.test(projectId);
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Get the localized config object from a custom config
|
|
138
|
+
*
|
|
139
|
+
* @param config String or json object of the custom config
|
|
140
|
+
* @param language Specific language
|
|
141
|
+
* @returns Localized custom config object
|
|
142
|
+
*/
|
|
143
|
+
export const getLocalizedCustomConfig = (config, language) => {
|
|
144
|
+
let customConfig;
|
|
145
|
+
try {
|
|
146
|
+
customConfig = typeof config === 'string' ? JSON.parse(config) : config;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new Error(`Internet Header: Custom config is invalid. Make sure your custom config contains valid JSON syntax and matches the definition. `);
|
|
150
|
+
}
|
|
151
|
+
let localizedCustomConfig = customConfig[language];
|
|
152
|
+
if (localizedCustomConfig !== undefined)
|
|
153
|
+
setMainNavigationIds(localizedCustomConfig.header.navMain);
|
|
154
|
+
return localizedCustomConfig;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Check if mobile header styles are applied or not
|
|
158
|
+
* @returns True if browser is smaller than 1024px
|
|
159
|
+
*/
|
|
160
|
+
export const isMobile = () => window.innerWidth < 1024;
|
|
161
|
+
/**
|
|
162
|
+
* Set unique ID's on main navigation entities but conserve flyout_os to be able to
|
|
163
|
+
* identify the online-service flyout, which can be configured by osFlyoutOverrides
|
|
164
|
+
*/
|
|
165
|
+
export const setMainNavigationIds = (navMainEntities) => {
|
|
166
|
+
navMainEntities.forEach(navMainEntity => {
|
|
167
|
+
navMainEntity.id = navMainEntity.id === 'flyout_os' ? navMainEntity.id : uniqueId('main-nav-');
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/services/config.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Environment,\r\n IPortalConfig,\r\n ILocalizedConfig,\r\n ICustomConfig,\r\n ILocalizedCustomConfig,\r\n LocalizedConfigParameters,\r\n} from '../models/general.model';\r\nimport { NavMainEntity } from '../models/header.model';\r\nimport { getUserLang, persistLanguageChoice } from './language.service';\r\nimport { uniqueId } from '../utils/utils';\r\nimport { markActiveRoute } from './route.service';\r\n\r\n// Prevent double requests\r\nlet request: Promise<IPortalConfig> | null = null;\r\n\r\n// Cache the original os flyout to use it for updates\r\nlet osFlyoutCache: NavMainEntity | null = null;\r\n\r\n/**\r\n * Get a localized config object\r\n *\r\n * @param projectId String identifying the project\r\n * @param language [optional] Preferred language\r\n * @returns Localized config object\r\n */\r\nexport const getLocalizedConfig = async ({\r\n projectId,\r\n environment,\r\n language,\r\n cookieKey,\r\n localStorageKey,\r\n activeRouteProp,\r\n localizedCustomConfig,\r\n osFlyoutOverrides,\r\n}: LocalizedConfigParameters): Promise<ILocalizedConfig> => {\r\n if (!request) {\r\n request = fetchConfig(projectId, environment);\r\n }\r\n\r\n const config = await request;\r\n const lang = getUserLang(Object.keys(config), language, localStorageKey, cookieKey);\r\n\r\n if (lang === undefined) {\r\n throw new Error('Internet Header: unable to determine current language');\r\n }\r\n\r\n // Clone config for more predictable state updates\r\n let localizedConfig: ILocalizedConfig = { ...config[lang] };\r\n\r\n // Merge custom config with portal config\r\n if (localizedCustomConfig) {\r\n const header = localizedCustomConfig?.header?.navMain\r\n ? {\r\n ...localizedConfig.header,\r\n navMain: [...localizedConfig.header.navMain, ...localizedCustomConfig.header.navMain],\r\n }\r\n : localizedConfig.header;\r\n localizedConfig = {\r\n ...localizedConfig,\r\n header,\r\n };\r\n }\r\n\r\n // Add entries to flyout_os\r\n if (osFlyoutOverrides)\r\n localizedConfig.header.navMain = mergeOsFlyoutOverrides(localizedConfig, osFlyoutOverrides);\r\n\r\n // Mark active route\r\n if (activeRouteProp)\r\n localizedConfig.header.navMain = markActiveRoute(\r\n localizedConfig.header.navMain,\r\n activeRouteProp,\r\n );\r\n\r\n setMainNavigationIds(localizedConfig?.header?.navMain);\r\n\r\n // Set the new language choice\r\n persistLanguageChoice(lang, cookieKey, localStorageKey);\r\n\r\n return localizedConfig;\r\n};\r\n\r\n/**\r\n * Merge portal config with custom os flyout overrides\r\n * @param config Localized config\r\n * @param osFlyoutOverrides Overrides for the flyout\r\n * @returns Merged localized config\r\n */\r\nexport const mergeOsFlyoutOverrides = (\r\n config: ILocalizedConfig,\r\n osFlyoutOverrides: NavMainEntity,\r\n): NavMainEntity[] => {\r\n if (!osFlyoutOverrides) return config.header.navMain;\r\n\r\n return config.header.navMain.map(mainNav => {\r\n if (mainNav.id !== 'flyout_os') return mainNav;\r\n\r\n if (osFlyoutCache === null) {\r\n osFlyoutCache = JSON.parse(JSON.stringify(mainNav)) as NavMainEntity;\r\n }\r\n\r\n const mainNavText = osFlyoutOverrides.text ?? osFlyoutCache.text;\r\n const mainNavTitle = osFlyoutOverrides.title ?? osFlyoutCache.title;\r\n\r\n if (\r\n !osFlyoutCache.flyout ||\r\n osFlyoutCache.flyout.length === 0 ||\r\n !osFlyoutOverrides.flyout ||\r\n osFlyoutOverrides.flyout.length === 0\r\n )\r\n return {\r\n ...mainNav,\r\n title: mainNavTitle,\r\n text: mainNavText,\r\n };\r\n\r\n // Add entries for os flyout columns without overriding existing config\r\n const mainNavFlyout = [\r\n ...osFlyoutCache.flyout.map((col, index) => {\r\n const overrides = osFlyoutOverrides.flyout[index];\r\n const title = overrides.title ?? col.title;\r\n\r\n const linkList = overrides.linkList ? osFlyoutOverrides.flyout[index].linkList : [];\r\n\r\n return {\r\n title,\r\n linkList: [...col.linkList, ...linkList],\r\n };\r\n }),\r\n ...osFlyoutOverrides.flyout.slice(osFlyoutCache.flyout.length),\r\n ];\r\n\r\n return {\r\n ...mainNav,\r\n text: mainNavText,\r\n title: mainNavTitle,\r\n flyout: mainNavFlyout,\r\n } as NavMainEntity;\r\n });\r\n};\r\n\r\n/**\r\n * Fetch the general config based on project id\r\n *\r\n * @returns Promise for Post Portal general config\r\n */\r\nexport const fetchConfig = async (\r\n projectId: string,\r\n environment: Environment,\r\n): Promise<IPortalConfig> => {\r\n // Check if project id is sanitized\r\n if (!isValidProjectId(projectId)) {\r\n throw new Error(`Internet Header: invalid project id \"${projectId}\"`);\r\n }\r\n\r\n if (projectId === 'test') {\r\n environment = 'int01';\r\n }\r\n\r\n let url = generateConfigUrl(projectId, environment);\r\n\r\n // Get the config if cache is invalid\r\n try {\r\n const res = await fetch(url);\r\n return (await res.json()) as IPortalConfig;\r\n } catch (error) {\r\n throw new Error(`Internet Header: fetching config failed. ${error.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Generate an URL with all necessary query params to get the configuration.\r\n * Project id \"test\" will return a test configuration\r\n * @param projectId string\r\n * @param environment int01, int02 or prod\r\n * @returns URL pointing to the project config\r\n */\r\nexport const generateConfigUrl = (projectId: string, environment: Environment): string => {\r\n if (projectId === 'test') return 'assets/config/test-configuration.json';\r\n\r\n const isInt = environment.startsWith('int');\r\n const host = `https://${isInt ? 'int' : 'www'}.post.ch`;\r\n try {\r\n // Use URL to validate the generated URL\r\n return new URL(\r\n `${host}/api/headerjs/Json?serviceid=${encodeURIComponent(projectId)}${\r\n isInt ? '&environment=' + environment : ''\r\n }`,\r\n ).toString();\r\n } catch (error) {\r\n throw new Error(`Internet Header: Config URL is invalid.`);\r\n }\r\n};\r\n\r\n/**\r\n * Check if project id contains only URL safe characters\r\n *\r\n * @param projectId Project Id string\r\n * @returns The valid project id\r\n */\r\nexport const isValidProjectId = (projectId: string): boolean => {\r\n return projectId !== '' && projectId.length > 0 && /^[a-zA-Z][\\w-]*[a-zA-Z0-9]$/.test(projectId);\r\n};\r\n\r\n/**\r\n * Get the localized config object from a custom config\r\n *\r\n * @param config String or json object of the custom config\r\n * @param language Specific language\r\n * @returns Localized custom config object\r\n */\r\nexport const getLocalizedCustomConfig = (\r\n config: string | ICustomConfig,\r\n language: string,\r\n): ILocalizedCustomConfig | undefined => {\r\n let customConfig: ICustomConfig;\r\n try {\r\n customConfig = typeof config === 'string' ? JSON.parse(config) : config;\r\n } catch (error) {\r\n throw new Error(\r\n `Internet Header: Custom config is invalid. Make sure your custom config contains valid JSON syntax and matches the definition. `,\r\n );\r\n }\r\n let localizedCustomConfig: ILocalizedCustomConfig | undefined = customConfig[language];\r\n if (localizedCustomConfig !== undefined)\r\n setMainNavigationIds(localizedCustomConfig.header.navMain);\r\n return localizedCustomConfig;\r\n};\r\n\r\n/**\r\n * Check if mobile header styles are applied or not\r\n * @returns True if browser is smaller than 1024px\r\n */\r\nexport const isMobile = () => window.innerWidth < 1024;\r\n\r\n/**\r\n * Set unique ID's on main navigation entities but conserve flyout_os to be able to\r\n * identify the online-service flyout, which can be configured by osFlyoutOverrides\r\n */\r\nexport const setMainNavigationIds = (navMainEntities: NavMainEntity[]): void => {\r\n navMainEntities.forEach(navMainEntity => {\r\n navMainEntity.id = navMainEntity.id === 'flyout_os' ? navMainEntity.id : uniqueId('main-nav-');\r\n });\r\n};\r\n"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { translations } from '../assets/i18n/translations';
|
|
2
|
+
import { state } from '../data/store';
|
|
3
|
+
export const getUserLang = (supportedLanguages, implementorPreferredLanguage, localStorageKey, cookieKey) => {
|
|
4
|
+
// If there are no supported languages, well...
|
|
5
|
+
if (supportedLanguages.length === 0) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
// If there is only one language in the config, use this
|
|
9
|
+
if (supportedLanguages.length === 1) {
|
|
10
|
+
return supportedLanguages[0];
|
|
11
|
+
}
|
|
12
|
+
const url = new URL(window.location.href);
|
|
13
|
+
/**
|
|
14
|
+
* Build array of possible language definitions in order of importance.
|
|
15
|
+
* At the end is a filter function that will weed out any undefined or null entries.
|
|
16
|
+
*/
|
|
17
|
+
let languagesSet = [
|
|
18
|
+
// Check if implementor overrides lang config
|
|
19
|
+
implementorPreferredLanguage,
|
|
20
|
+
// Check query string param
|
|
21
|
+
url.searchParams.get('lang'),
|
|
22
|
+
// Check url pathname
|
|
23
|
+
url.pathname.split('/').find(segment => supportedLanguages.includes(segment)),
|
|
24
|
+
// Check local storage with the key provided
|
|
25
|
+
localStorageKey !== undefined ? window.localStorage.getItem(localStorageKey) : null,
|
|
26
|
+
// Check cookies
|
|
27
|
+
getCookie('language'),
|
|
28
|
+
getCookie('lang'),
|
|
29
|
+
cookieKey !== undefined ? getCookie(cookieKey) : null,
|
|
30
|
+
// Check document language
|
|
31
|
+
document.documentElement.lang,
|
|
32
|
+
// Check browser preferred language
|
|
33
|
+
getPreferredLanguageFromBrowser(supportedLanguages),
|
|
34
|
+
// Check the state
|
|
35
|
+
state.currentLanguage,
|
|
36
|
+
].filter((lang) => !!lang);
|
|
37
|
+
// Check the set of languages to see if it matches
|
|
38
|
+
// any of the supported languages. Return the first
|
|
39
|
+
// supported language if there is none set
|
|
40
|
+
const lang = languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];
|
|
41
|
+
if (!lang || lang.length !== 2) {
|
|
42
|
+
throw new Error(`Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`);
|
|
43
|
+
}
|
|
44
|
+
return lang;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Persist chosen language to local storage
|
|
48
|
+
* @param lang Currently chose language, two char string
|
|
49
|
+
*/
|
|
50
|
+
export const persistLanguageChoice = (lang, cookieKey, localStorageKey) => {
|
|
51
|
+
if (localStorageKey !== undefined) {
|
|
52
|
+
window.localStorage.setItem(localStorageKey, lang);
|
|
53
|
+
}
|
|
54
|
+
if (cookieKey !== undefined) {
|
|
55
|
+
setCookie(cookieKey, lang);
|
|
56
|
+
}
|
|
57
|
+
state.currentLanguage = lang;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Read a cookie by name
|
|
61
|
+
* https://stackoverflow.com/questions/5639346/what-is-the-shortest-function-for-reading-a-cookie-by-name-in-javascript?rq=1
|
|
62
|
+
* @param name Cookie name
|
|
63
|
+
* @returns Cookie value or an empty string
|
|
64
|
+
*/
|
|
65
|
+
export const getCookie = (name) => {
|
|
66
|
+
var _a;
|
|
67
|
+
return ((_a = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')) === null || _a === void 0 ? void 0 : _a.pop()) || '';
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Write a new cookie
|
|
71
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support
|
|
72
|
+
* @param key
|
|
73
|
+
* @param value
|
|
74
|
+
*/
|
|
75
|
+
export const setCookie = (key, value) => {
|
|
76
|
+
document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
77
|
+
};
|
|
78
|
+
const getPreferredLanguageFromBrowser = (supportedLanguages) => {
|
|
79
|
+
// IE & Chrome
|
|
80
|
+
if (navigator.language) {
|
|
81
|
+
const lang = extractLanguage(navigator.language);
|
|
82
|
+
if (supportedLanguages.indexOf(lang) !== -1) {
|
|
83
|
+
return lang;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.
|
|
87
|
+
if (navigator.languages) {
|
|
88
|
+
for (const l of navigator.languages) {
|
|
89
|
+
const lang = extractLanguage(l);
|
|
90
|
+
if (supportedLanguages.indexOf(lang) !== -1) {
|
|
91
|
+
return lang;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
};
|
|
97
|
+
const extractLanguage = (language) => language.substring(0, 2).toLowerCase();
|
|
98
|
+
/**
|
|
99
|
+
* Simple translate function for general header UI strings
|
|
100
|
+
*
|
|
101
|
+
* @param key Translation key
|
|
102
|
+
* @param lang Force a language
|
|
103
|
+
* @param translationObject Optionally provide translations
|
|
104
|
+
* @returns Translated string or the key
|
|
105
|
+
*/
|
|
106
|
+
export const translate = (key, lang, translationObject = translations) => { var _a, _b, _c; return (_c = (_a = translationObject[key]) === null || _a === void 0 ? void 0 : _a[(_b = lang !== null && lang !== void 0 ? lang : state.currentLanguage) !== null && _b !== void 0 ? _b : '']) !== null && _c !== void 0 ? _c : key; };
|
|
107
|
+
//# sourceMappingURL=language.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.service.js","sourceRoot":"","sources":["../../../src/services/language.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,kBAA4B,EAC5B,4BAAqC,EACrC,eAAwB,EACxB,SAAkB,EAClB,EAAE;EACF,+CAA+C;EAC/C,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;IACnC,OAAO,SAAS,CAAC;GAClB;EAED,wDAAwD;EACxD,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;IACnC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;GAC9B;EAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAE1C;;;KAGG;EACH,IAAI,YAAY,GAAkB;IAChC,6CAA6C;IAC7C,4BAA4B;IAE5B,2BAA2B;IAC3B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;IAE5B,qBAAqB;IACrB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE7E,4CAA4C;IAC5C,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;IAEnF,gBAAgB;IAChB,SAAS,CAAC,UAAU,CAAC;IACrB,SAAS,CAAC,MAAM,CAAC;IACjB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;IAErD,0BAA0B;IAC1B,QAAQ,CAAC,eAAe,CAAC,IAAI;IAE7B,mCAAmC;IACnC,+BAA+B,CAAC,kBAAkB,CAAC;IAEnD,kBAAkB;IAClB,KAAK,CAAC,eAAe;GACtB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE3C,kDAAkD;EAClD,mDAAmD;EACnD,0CAA0C;EAC1C,MAAM,IAAI,GACR,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;EAEhG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;IAC9B,MAAM,IAAI,KAAK,CACb,oFAAoF,IAAI,uCAAuC,CAChI,CAAC;GACH;EAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAY,EACZ,SAAkB,EAClB,eAAwB,EACxB,EAAE;EACF,IAAI,eAAe,KAAK,SAAS,EAAE;IACjC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;GACpD;EAED,IAAI,SAAS,KAAK,SAAS,EAAE;IAC3B,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;GAC5B;EAED,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;;EACxC,OAAO,CAAA,MAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,kBAAkB,CAAC,0CAAE,GAAG,EAAE,KAAI,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;EACtD,QAAQ,CAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CAAC,kBAA4B,EAAiB,EAAE;EACtF,cAAc;EACd,IAAI,SAAS,CAAC,QAAQ,EAAE;IACtB,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;MAC3C,OAAO,IAAI,CAAC;KACb;GACF;EAED,yGAAyG;EACzG,IAAI,SAAS,CAAC,SAAS,EAAE;IACvB,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,EAAE;MACnC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;MAChC,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC;OACb;KACF;GACF;EAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAE7F;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,iBAAiB,GAAG,YAAY,EAAE,EAAE,mBACxF,OAAA,MAAA,MAAA,iBAAiB,CAAC,GAAG,CAAC,0CAAG,MAAA,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,KAAK,CAAC,eAAe,mCAAI,EAAE,CAAC,mCAAI,GAAG,CAAA,EAAA,CAAC","sourcesContent":["import { translations } from '../assets/i18n/translations';\r\nimport { state } from '../data/store';\r\n\r\nexport const getUserLang = (\r\n supportedLanguages: string[],\r\n implementorPreferredLanguage?: string,\r\n localStorageKey?: string,\r\n cookieKey?: string,\r\n) => {\r\n // If there are no supported languages, well...\r\n if (supportedLanguages.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // If there is only one language in the config, use this\r\n if (supportedLanguages.length === 1) {\r\n return supportedLanguages[0];\r\n }\r\n\r\n const url = new URL(window.location.href);\r\n\r\n /**\r\n * Build array of possible language definitions in order of importance.\r\n * At the end is a filter function that will weed out any undefined or null entries.\r\n */\r\n let languagesSet: Array<string> = [\r\n // Check if implementor overrides lang config\r\n implementorPreferredLanguage,\r\n\r\n // Check query string param\r\n url.searchParams.get('lang'),\r\n\r\n // Check url pathname\r\n url.pathname.split('/').find(segment => supportedLanguages.includes(segment)),\r\n\r\n // Check local storage with the key provided\r\n localStorageKey !== undefined ? window.localStorage.getItem(localStorageKey) : null,\r\n\r\n // Check cookies\r\n getCookie('language'),\r\n getCookie('lang'),\r\n cookieKey !== undefined ? getCookie(cookieKey) : null,\r\n\r\n // Check document language\r\n document.documentElement.lang,\r\n\r\n // Check browser preferred language\r\n getPreferredLanguageFromBrowser(supportedLanguages),\r\n\r\n // Check the state\r\n state.currentLanguage,\r\n ].filter((lang): lang is string => !!lang);\r\n\r\n // Check the set of languages to see if it matches\r\n // any of the supported languages. Return the first\r\n // supported language if there is none set\r\n const lang =\r\n languagesSet.find(language => supportedLanguages.includes(language)) || supportedLanguages[0];\r\n\r\n if (!lang || lang.length !== 2) {\r\n throw new Error(\r\n `Current language could not be determined from settings or the language provided (${lang}) is not supported by the Header API.`,\r\n );\r\n }\r\n\r\n return lang;\r\n};\r\n\r\n/**\r\n * Persist chosen language to local storage\r\n * @param lang Currently chose language, two char string\r\n */\r\nexport const persistLanguageChoice = (\r\n lang: string,\r\n cookieKey?: string,\r\n localStorageKey?: string,\r\n) => {\r\n if (localStorageKey !== undefined) {\r\n window.localStorage.setItem(localStorageKey, lang);\r\n }\r\n\r\n if (cookieKey !== undefined) {\r\n setCookie(cookieKey, lang);\r\n }\r\n\r\n state.currentLanguage = lang;\r\n};\r\n\r\n/**\r\n * Read a cookie by name\r\n * https://stackoverflow.com/questions/5639346/what-is-the-shortest-function-for-reading-a-cookie-by-name-in-javascript?rq=1\r\n * @param name Cookie name\r\n * @returns Cookie value or an empty string\r\n */\r\nexport const getCookie = (name: string) => {\r\n return document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || '';\r\n};\r\n\r\n/**\r\n * Write a new cookie\r\n * https://developer.mozilla.org/en-US/docs/Web/API/document/cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support\r\n * @param key\r\n * @param value\r\n */\r\nexport const setCookie = (key: string, value: string) => {\r\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\r\n};\r\n\r\nconst getPreferredLanguageFromBrowser = (supportedLanguages: string[]): string | null => {\r\n // IE & Chrome\r\n if (navigator.language) {\r\n const lang = extractLanguage(navigator.language);\r\n if (supportedLanguages.indexOf(lang) !== -1) {\r\n return lang;\r\n }\r\n }\r\n\r\n // Chrome supports a list of preferred languages: if the preferred is not supported, we go down the list.\r\n if (navigator.languages) {\r\n for (const l of navigator.languages) {\r\n const lang = extractLanguage(l);\r\n if (supportedLanguages.indexOf(lang) !== -1) {\r\n return lang;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst extractLanguage = (language: string): string => language.substring(0, 2).toLowerCase();\r\n\r\n/**\r\n * Simple translate function for general header UI strings\r\n *\r\n * @param key Translation key\r\n * @param lang Force a language\r\n * @param translationObject Optionally provide translations\r\n * @returns Translated string or the key\r\n */\r\nexport const translate = (key: string, lang?: string, translationObject = translations) =>\r\n translationObject[key]?.[lang ?? state.currentLanguage ?? ''] ?? key;\r\n"]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activate the current route based on the config and the match mode
|
|
3
|
+
* @param config Main Navigation Config
|
|
4
|
+
* @param activeRouteProp Match mode
|
|
5
|
+
* @returns Modified Main Navigation Config
|
|
6
|
+
*/
|
|
7
|
+
export const markActiveRoute = (config, activeRouteProp) => {
|
|
8
|
+
// Don't highlight any route
|
|
9
|
+
if (activeRouteProp === false) {
|
|
10
|
+
return config;
|
|
11
|
+
}
|
|
12
|
+
// Set compare URL and check if activeRouteProp is valid
|
|
13
|
+
let compareUrl;
|
|
14
|
+
config = resetOverrideConfig(config);
|
|
15
|
+
if (activeRouteProp === 'auto' || activeRouteProp === 'exact') {
|
|
16
|
+
// Check if an active route is already configured, set override to that and return
|
|
17
|
+
if (hasActivePortalRoute(config)) {
|
|
18
|
+
return resetActiveStateToPortalConfig(config);
|
|
19
|
+
}
|
|
20
|
+
compareUrl = new URL(window.location.href);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
try {
|
|
24
|
+
compareUrl = new URL(activeRouteProp, document.location.origin);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.warn(`Active Route: ${activeRouteProp} is not a valid URL. Navigation highlighting has been disabled.`);
|
|
28
|
+
return config;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const scoreList = compileScoreList(config, compareUrl, activeRouteProp);
|
|
32
|
+
if (scoreList.length === 0) {
|
|
33
|
+
// No match found or already active links defined
|
|
34
|
+
return config;
|
|
35
|
+
}
|
|
36
|
+
const winnerPair = scoreList[0];
|
|
37
|
+
winnerPair.main.isActiveOverride = true;
|
|
38
|
+
if (winnerPair.sub)
|
|
39
|
+
winnerPair.sub.isActiveOverride = true;
|
|
40
|
+
return config;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Check if the portal config set any active route
|
|
44
|
+
* @param config Main navigation config
|
|
45
|
+
* @returns True if portal set any route as active
|
|
46
|
+
*/
|
|
47
|
+
export const hasActivePortalRoute = (config) => {
|
|
48
|
+
return config.filter(nav => nav.isActive).length > 0;
|
|
49
|
+
};
|
|
50
|
+
export const resetActiveStateToPortalConfig = (config) => {
|
|
51
|
+
return config.map(nav => (Object.assign(Object.assign({}, nav), { isActiveOverride: nav.isActive, flyout: nav.flyout.map(flyout => (Object.assign(Object.assign({}, flyout), { linkList: flyout.linkList.map(link => (Object.assign(Object.assign({}, link), { isActiveOverride: link.isActive }))) }))) })));
|
|
52
|
+
};
|
|
53
|
+
const resetOverrideConfig = (config) => {
|
|
54
|
+
return config.map(nav => (Object.assign(Object.assign({}, nav), { isActiveOverride: false, flyout: nav.flyout.map(flyout => (Object.assign(Object.assign({}, flyout), { linkList: flyout.linkList.map(link => (Object.assign(Object.assign({}, link), { isActiveOverride: false }))) }))) })));
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Compile a list of scores based on the map mode, sorted in descending order
|
|
58
|
+
* @param config Main Nav Config
|
|
59
|
+
* @param compareUrl Current Browser URL or a custom URL
|
|
60
|
+
* @param activeRouteProp Match mode
|
|
61
|
+
* @returns A list of scored URLs if any matched
|
|
62
|
+
*/
|
|
63
|
+
export const compileScoreList = (config, compareUrl, activeRouteProp) => {
|
|
64
|
+
// Flag to check if the Portal set any active links or if there are any exact matches
|
|
65
|
+
let hadAnyActiveLink = false;
|
|
66
|
+
const scoreList = [];
|
|
67
|
+
config.forEach(mainNav => {
|
|
68
|
+
if (hadAnyActiveLink || !mainNav) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const score = compareRoutes(compareUrl, new URL(mainNav.url), activeRouteProp);
|
|
73
|
+
if (score > 0) {
|
|
74
|
+
if (score === Infinity)
|
|
75
|
+
hadAnyActiveLink = true;
|
|
76
|
+
scoreList.push({ main: mainNav, score });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (_a) {
|
|
80
|
+
// Not a valid url, continue
|
|
81
|
+
}
|
|
82
|
+
// Loop through flyout links 2nd level
|
|
83
|
+
if (mainNav.flyout.length) {
|
|
84
|
+
mainNav.flyout.forEach(flyout => {
|
|
85
|
+
if (flyout.linkList) {
|
|
86
|
+
flyout.linkList.forEach(linklist => {
|
|
87
|
+
// Don't override if any link is already active
|
|
88
|
+
if (linklist.isActive && (activeRouteProp === 'auto' || activeRouteProp === 'exact')) {
|
|
89
|
+
hadAnyActiveLink = true;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const url = new URL(linklist.url);
|
|
94
|
+
const score = compareRoutes(compareUrl, url, activeRouteProp);
|
|
95
|
+
if (score > 0) {
|
|
96
|
+
if (score === Infinity)
|
|
97
|
+
hadAnyActiveLink = true;
|
|
98
|
+
// Push score
|
|
99
|
+
scoreList.push({
|
|
100
|
+
main: mainNav,
|
|
101
|
+
sub: linklist,
|
|
102
|
+
score,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (_a) {
|
|
107
|
+
// Not a valid URL, continue
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return scoreList.sort((a, b) => b.score - a.score);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Compare two URLs for similarity based on a match mode
|
|
118
|
+
* @param baseUrl Browser URL
|
|
119
|
+
* @param compareUrl Navigatgion URL
|
|
120
|
+
* @param matchMode exact or auto matching
|
|
121
|
+
* @returns Score
|
|
122
|
+
*/
|
|
123
|
+
export const compareRoutes = (baseUrl, compareUrl, matchMode) => {
|
|
124
|
+
// One url is not defined or they don't share the same orign
|
|
125
|
+
if (!baseUrl || !compareUrl || baseUrl.origin !== compareUrl.origin) {
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
// Exact match, origin and pathname are the same
|
|
129
|
+
if (baseUrl.pathname === compareUrl.pathname) {
|
|
130
|
+
return Infinity;
|
|
131
|
+
}
|
|
132
|
+
// The basepath is longer than the comparison, a match is impossible
|
|
133
|
+
if (baseUrl.pathname.length < compareUrl.pathname.length) {
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
if (matchMode === 'auto') {
|
|
137
|
+
const baseSegments = [baseUrl.origin, ...baseUrl.pathname.split('/').filter(x => !!x)];
|
|
138
|
+
const compareSegments = [compareUrl.origin, ...compareUrl.pathname.split('/').filter(x => !!x)];
|
|
139
|
+
const score = getSimilarityScore(baseSegments, compareSegments);
|
|
140
|
+
// If only some segments match, but not the whole smaller array, it's not a match
|
|
141
|
+
return Math.min(baseSegments.length, compareSegments.length) === score ? score : 0;
|
|
142
|
+
}
|
|
143
|
+
return 0;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Check how many items in an array match
|
|
147
|
+
* @param a Base array
|
|
148
|
+
* @param b Compare array
|
|
149
|
+
* @returns Score
|
|
150
|
+
*/
|
|
151
|
+
export const getSimilarityScore = (a, b) => {
|
|
152
|
+
if (!(a === null || a === void 0 ? void 0 : a.length) || !(b === null || b === void 0 ? void 0 : b.length)) {
|
|
153
|
+
return 0;
|
|
154
|
+
}
|
|
155
|
+
let i = 0;
|
|
156
|
+
for (; i < Math.min(a.length, b.length); i++) {
|
|
157
|
+
if (a[i] !== b[i]) {
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return i;
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=route.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.service.js","sourceRoot":"","sources":["../../../src/services/route.service.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAuB,EACvB,eAAgC,EACf,EAAE;EACnB,4BAA4B;EAC5B,IAAI,eAAe,KAAK,KAAK,EAAE;IAC7B,OAAO,MAAM,CAAC;GACf;EAED,wDAAwD;EACxD,IAAI,UAAe,CAAC;EACpB,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;EAErC,IAAI,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,OAAO,EAAE;IAC7D,kFAAkF;IAClF,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE;MAChC,OAAO,8BAA8B,CAAC,MAAM,CAAC,CAAC;KAC/C;IAED,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;GAC5C;OAAM;IACL,IAAI;MACF,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACjE;IAAC,OAAO,KAAK,EAAE;MACd,OAAO,CAAC,IAAI,CACV,iBAAiB,eAAe,iEAAiE,CAClG,CAAC;MACF,OAAO,MAAM,CAAC;KACf;GACF;EAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;EAExE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;IAC1B,iDAAiD;IACjD,OAAO,MAAM,CAAC;GACf;EAED,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAChC,UAAU,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;EACxC,IAAI,UAAU,CAAC,GAAG;IAAE,UAAU,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;EAE3D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAuB,EAAW,EAAE;EACvE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,MAAuB,EAAmB,EAAE;EACzF,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iCACpB,GAAG,KACN,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAC5B,MAAM,KACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iCAAM,IAAI,KAAE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,IAAG,CAAC,IACrF,CAAC,IACH,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAuB,EAAmB,EAAE;EACvE,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iCACpB,GAAG,KACN,gBAAgB,EAAE,KAAK,EACvB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAC5B,MAAM,KACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iCAAM,IAAI,KAAE,gBAAgB,EAAE,KAAK,IAAG,CAAC,IAC7E,CAAC,IACH,CAAC,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAuB,EACvB,UAAe,EACf,eAAgC,EACd,EAAE;EACpB,qFAAqF;EACrF,IAAI,gBAAgB,GAAG,KAAK,CAAC;EAC7B,MAAM,SAAS,GAAqB,EAAE,CAAC;EAEvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACvB,IAAI,gBAAgB,IAAI,CAAC,OAAO,EAAE;MAChC,OAAO;KACR;IAED,IAAI;MACF,MAAM,KAAK,GAAG,aAAa,CACzB,UAAU,EACV,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EACpB,eAAmC,CACpC,CAAC;MACF,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,IAAI,KAAK,KAAK,QAAQ;UAAE,gBAAgB,GAAG,IAAI,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;OAC1C;KACF;IAAC,WAAM;MACN,4BAA4B;KAC7B;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;MACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC9B,IAAI,MAAM,CAAC,QAAQ,EAAE;UACnB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACjC,+CAA+C;YAC/C,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,OAAO,CAAC,EAAE;cACpF,gBAAgB,GAAG,IAAI,CAAC;cACxB,OAAO;aACR;YAED,IAAI;cACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;cAClC,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,eAAmC,CAAC,CAAC;cAClF,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,IAAI,KAAK,KAAK,QAAQ;kBAAE,gBAAgB,GAAG,IAAI,CAAC;gBAEhD,aAAa;gBACb,SAAS,CAAC,IAAI,CAAC;kBACb,IAAI,EAAE,OAAO;kBACb,GAAG,EAAE,QAAQ;kBACb,KAAK;iBACN,CAAC,CAAC;eACJ;aACF;YAAC,WAAM;cACN,4BAA4B;aAC7B;UACH,CAAC,CAAC,CAAC;SACJ;MACH,CAAC,CAAC,CAAC;KACJ;EACH,CAAC,CAAC,CAAC;EAEH,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAY,EACZ,UAAe,EACf,SAA4B,EACpB,EAAE;EACV,4DAA4D;EAC5D,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;IACnE,OAAO,CAAC,CAAC;GACV;EAED,gDAAgD;EAChD,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE;IAC5C,OAAO,QAAQ,CAAC;GACjB;EAED,oEAAoE;EACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;IACxD,OAAO,CAAC,CAAC;GACV;EAED,IAAI,SAAS,KAAK,MAAM,EAAE;IACxB,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,MAAM,KAAK,GAAG,kBAAkB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEhE,iFAAiF;IACjF,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GACpF;EAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAW,EAAE,CAAW,EAAU,EAAE;EACrE,IAAI,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,IAAI,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,EAAE;IAC5B,OAAO,CAAC,CAAC;GACV;EAED,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MACjB,OAAO,CAAC,CAAC;KACV;GACF;EAED,OAAO,CAAC,CAAC;AACX,CAAC,CAAC","sourcesContent":["import { ActiveRouteProp } from '../models/general.model';\r\nimport { NavMainEntity, MainNavScoreList } from '../models/header.model';\r\n\r\n/**\r\n * Activate the current route based on the config and the match mode\r\n * @param config Main Navigation Config\r\n * @param activeRouteProp Match mode\r\n * @returns Modified Main Navigation Config\r\n */\r\nexport const markActiveRoute = (\r\n config: NavMainEntity[],\r\n activeRouteProp: ActiveRouteProp,\r\n): NavMainEntity[] => {\r\n // Don't highlight any route\r\n if (activeRouteProp === false) {\r\n return config;\r\n }\r\n\r\n // Set compare URL and check if activeRouteProp is valid\r\n let compareUrl: URL;\r\n config = resetOverrideConfig(config);\r\n\r\n if (activeRouteProp === 'auto' || activeRouteProp === 'exact') {\r\n // Check if an active route is already configured, set override to that and return\r\n if (hasActivePortalRoute(config)) {\r\n return resetActiveStateToPortalConfig(config);\r\n }\r\n\r\n compareUrl = new URL(window.location.href);\r\n } else {\r\n try {\r\n compareUrl = new URL(activeRouteProp, document.location.origin);\r\n } catch (error) {\r\n console.warn(\r\n `Active Route: ${activeRouteProp} is not a valid URL. Navigation highlighting has been disabled.`,\r\n );\r\n return config;\r\n }\r\n }\r\n\r\n const scoreList = compileScoreList(config, compareUrl, activeRouteProp);\r\n\r\n if (scoreList.length === 0) {\r\n // No match found or already active links defined\r\n return config;\r\n }\r\n\r\n const winnerPair = scoreList[0];\r\n winnerPair.main.isActiveOverride = true;\r\n if (winnerPair.sub) winnerPair.sub.isActiveOverride = true;\r\n\r\n return config;\r\n};\r\n\r\n/**\r\n * Check if the portal config set any active route\r\n * @param config Main navigation config\r\n * @returns True if portal set any route as active\r\n */\r\nexport const hasActivePortalRoute = (config: NavMainEntity[]): boolean => {\r\n return config.filter(nav => nav.isActive).length > 0;\r\n};\r\n\r\nexport const resetActiveStateToPortalConfig = (config: NavMainEntity[]): NavMainEntity[] => {\r\n return config.map(nav => ({\r\n ...nav,\r\n isActiveOverride: nav.isActive,\r\n flyout: nav.flyout.map(flyout => ({\r\n ...flyout,\r\n linkList: flyout.linkList.map(link => ({ ...link, isActiveOverride: link.isActive })),\r\n })),\r\n }));\r\n};\r\n\r\nconst resetOverrideConfig = (config: NavMainEntity[]): NavMainEntity[] => {\r\n return config.map(nav => ({\r\n ...nav,\r\n isActiveOverride: false,\r\n flyout: nav.flyout.map(flyout => ({\r\n ...flyout,\r\n linkList: flyout.linkList.map(link => ({ ...link, isActiveOverride: false })),\r\n })),\r\n }));\r\n};\r\n\r\n/**\r\n * Compile a list of scores based on the map mode, sorted in descending order\r\n * @param config Main Nav Config\r\n * @param compareUrl Current Browser URL or a custom URL\r\n * @param activeRouteProp Match mode\r\n * @returns A list of scored URLs if any matched\r\n */\r\nexport const compileScoreList = (\r\n config: NavMainEntity[],\r\n compareUrl: URL,\r\n activeRouteProp: ActiveRouteProp,\r\n): MainNavScoreList => {\r\n // Flag to check if the Portal set any active links or if there are any exact matches\r\n let hadAnyActiveLink = false;\r\n const scoreList: MainNavScoreList = [];\r\n\r\n config.forEach(mainNav => {\r\n if (hadAnyActiveLink || !mainNav) {\r\n return;\r\n }\r\n\r\n try {\r\n const score = compareRoutes(\r\n compareUrl,\r\n new URL(mainNav.url),\r\n activeRouteProp as 'auto' | 'exact',\r\n );\r\n if (score > 0) {\r\n if (score === Infinity) hadAnyActiveLink = true;\r\n scoreList.push({ main: mainNav, score });\r\n }\r\n } catch {\r\n // Not a valid url, continue\r\n }\r\n\r\n // Loop through flyout links 2nd level\r\n if (mainNav.flyout.length) {\r\n mainNav.flyout.forEach(flyout => {\r\n if (flyout.linkList) {\r\n flyout.linkList.forEach(linklist => {\r\n // Don't override if any link is already active\r\n if (linklist.isActive && (activeRouteProp === 'auto' || activeRouteProp === 'exact')) {\r\n hadAnyActiveLink = true;\r\n return;\r\n }\r\n\r\n try {\r\n const url = new URL(linklist.url);\r\n const score = compareRoutes(compareUrl, url, activeRouteProp as 'auto' | 'exact');\r\n if (score > 0) {\r\n if (score === Infinity) hadAnyActiveLink = true;\r\n\r\n // Push score\r\n scoreList.push({\r\n main: mainNav,\r\n sub: linklist,\r\n score,\r\n });\r\n }\r\n } catch {\r\n // Not a valid URL, continue\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return scoreList.sort((a, b) => b.score - a.score);\r\n};\r\n\r\n/**\r\n * Compare two URLs for similarity based on a match mode\r\n * @param baseUrl Browser URL\r\n * @param compareUrl Navigatgion URL\r\n * @param matchMode exact or auto matching\r\n * @returns Score\r\n */\r\nexport const compareRoutes = (\r\n baseUrl: URL,\r\n compareUrl: URL,\r\n matchMode?: 'auto' | 'exact',\r\n): number => {\r\n // One url is not defined or they don't share the same orign\r\n if (!baseUrl || !compareUrl || baseUrl.origin !== compareUrl.origin) {\r\n return 0;\r\n }\r\n\r\n // Exact match, origin and pathname are the same\r\n if (baseUrl.pathname === compareUrl.pathname) {\r\n return Infinity;\r\n }\r\n\r\n // The basepath is longer than the comparison, a match is impossible\r\n if (baseUrl.pathname.length < compareUrl.pathname.length) {\r\n return 0;\r\n }\r\n\r\n if (matchMode === 'auto') {\r\n const baseSegments = [baseUrl.origin, ...baseUrl.pathname.split('/').filter(x => !!x)];\r\n const compareSegments = [compareUrl.origin, ...compareUrl.pathname.split('/').filter(x => !!x)];\r\n\r\n const score = getSimilarityScore(baseSegments, compareSegments);\r\n\r\n // If only some segments match, but not the whole smaller array, it's not a match\r\n return Math.min(baseSegments.length, compareSegments.length) === score ? score : 0;\r\n }\r\n\r\n return 0;\r\n};\r\n\r\n/**\r\n * Check how many items in an array match\r\n * @param a Base array\r\n * @param b Compare array\r\n * @returns Score\r\n */\r\nexport const getSimilarityScore = (a: string[], b: string[]): number => {\r\n if (!a?.length || !b?.length) {\r\n return 0;\r\n }\r\n\r\n let i = 0;\r\n for (; i < Math.min(a.length, b.length); i++) {\r\n if (a[i] !== b[i]) {\r\n return 0;\r\n }\r\n }\r\n\r\n return i;\r\n};\r\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { state } from '../../data/store';
|
|
2
|
+
import { coveo } from './coveo.settings';
|
|
3
|
+
import { getSearchPageUrl } from './search.service';
|
|
4
|
+
/**
|
|
5
|
+
* Get suggestions from coveo
|
|
6
|
+
* https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object
|
|
7
|
+
*
|
|
8
|
+
* @param query Search term
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export const getCoveoSuggestions = async (query) => {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
if (((_b = (_a = state.localizedConfig) === null || _a === void 0 ? void 0 : _a.header) === null || _b === void 0 ? void 0 : _b.search) === undefined)
|
|
14
|
+
return [];
|
|
15
|
+
const config = state.localizedConfig.header.search;
|
|
16
|
+
const { token, organisation } = coveo.environment[state.environment];
|
|
17
|
+
const url = `${coveo.url}?q=${query}&locale=${state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;
|
|
18
|
+
let coveoCompletions;
|
|
19
|
+
try {
|
|
20
|
+
const coveoResponse = await fetch(url, {
|
|
21
|
+
method: 'GET',
|
|
22
|
+
headers: {
|
|
23
|
+
Authorization: `Bearer ${token}`,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const coveoJSON = (await coveoResponse.json());
|
|
27
|
+
coveoCompletions = coveoJSON.completions.map(completion => (Object.assign(Object.assign({}, completion), { redirectUrl: getSearchPageUrl(completion.expression) })));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('Connection to coveo failed. Did you add "*.coveo.com" to your connect-src content security policy and tried turning off your adblocker?');
|
|
31
|
+
}
|
|
32
|
+
return coveoCompletions === undefined ? [] : coveoCompletions;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=coveo.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coveo.service.js","sourceRoot":"","sources":["../../../../src/services/search/coveo.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAa,EAA8B,EAAE;;EACrF,IAAI,CAAA,MAAA,MAAA,KAAK,CAAC,eAAe,0CAAE,MAAM,0CAAE,MAAM,MAAK,SAAS;IAAE,OAAO,EAAE,CAAC;EACnE,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;EACnD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;EACrE,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,MAAM,KAAK,WAAW,KAAK,CAAC,eAAe,cAAc,MAAM,CAAC,aAAa,aAAa,MAAM,CAAC,kBAAkB,mBAAmB,YAAY,EAAE,CAAC;EAC7K,IAAI,gBAA+C,CAAC;EAEpD,IAAI;IACF,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;MACrC,MAAM,EAAE,KAAK;MACb,OAAO,EAAE;QACP,aAAa,EAAE,UAAU,KAAK,EAAE;OACjC;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAkB,CAAC;IAChE,gBAAgB,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,iCACtD,UAAU,KACb,WAAW,EAAE,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,IACpD,CAAC,CAAC;GACL;EAAC,OAAO,KAAK,EAAE;IACd,OAAO,CAAC,KAAK,CACX,yIAAyI,CAC1I,CAAC;GACH;EAED,OAAO,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAChE,CAAC,CAAC","sourcesContent":["import { state } from '../../data/store';\r\nimport { CoveoCompletion, CoveoResponse } from '../../models/coveo.model';\r\nimport { coveo } from './coveo.settings';\r\nimport { getSearchPageUrl } from './search.service';\r\n\r\n/**\r\n * Get suggestions from coveo\r\n * https://docs.coveo.com/en/1459/build-a-search-ui/get-query-suggestions#context-object\r\n *\r\n * @param query Search term\r\n * @returns\r\n */\r\nexport const getCoveoSuggestions = async (query: string): Promise<CoveoCompletion[]> => {\r\n if (state.localizedConfig?.header?.search === undefined) return [];\r\n const config = state.localizedConfig.header.search;\r\n const { token, organisation } = coveo.environment[state.environment];\r\n const url = `${coveo.url}?q=${query}&locale=${state.currentLanguage}&searchHub=${config.searchHubName}&pipeline=${config.searchPipelineName}&organizationId=${organisation}`;\r\n let coveoCompletions: CoveoCompletion[] | undefined;\r\n\r\n try {\r\n const coveoResponse = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n const coveoJSON = (await coveoResponse.json()) as CoveoResponse;\r\n coveoCompletions = coveoJSON.completions.map(completion => ({\r\n ...completion,\r\n redirectUrl: getSearchPageUrl(completion.expression),\r\n }));\r\n } catch (error) {\r\n console.error(\r\n 'Connection to coveo failed. Did you add \"*.coveo.com\" to your connect-src content security policy and tried turning off your adblocker?',\r\n );\r\n }\r\n\r\n return coveoCompletions === undefined ? [] : coveoCompletions;\r\n};\r\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Coveo constants
|
|
2
|
+
export const coveo = {
|
|
3
|
+
url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',
|
|
4
|
+
environment: {
|
|
5
|
+
prod: {
|
|
6
|
+
organisation: 'postchagprod6ef4sbet',
|
|
7
|
+
token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',
|
|
8
|
+
},
|
|
9
|
+
int01: {
|
|
10
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
11
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
12
|
+
},
|
|
13
|
+
int02: {
|
|
14
|
+
organisation: 'postchagnonprods5sq57qt',
|
|
15
|
+
token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=coveo.settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coveo.settings.js","sourceRoot":"","sources":["../../../../src/services/search/coveo.settings.ts"],"names":[],"mappings":"AAEA,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAiB;EACjC,GAAG,EAAE,iEAAiE;EACtE,WAAW,EAAE;IACX,IAAI,EAAE;MACJ,YAAY,EAAE,sBAAsB;MACpC,KAAK,EAAE,wCAAwC;KAChD;IACD,KAAK,EAAE;MACL,YAAY,EAAE,yBAAyB;MACvC,KAAK,EAAE,wCAAwC;KAChD;IACD,KAAK,EAAE;MACL,YAAY,EAAE,yBAAyB;MACvC,KAAK,EAAE,wCAAwC;KAChD;GACF;CACF,CAAC","sourcesContent":["import { CoveoOptions } from '../../models/coveo.model';\r\n\r\n// Coveo constants\r\nexport const coveo: CoveoOptions = {\r\n url: 'https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest',\r\n environment: {\r\n prod: {\r\n organisation: 'postchagprod6ef4sbet',\r\n token: 'xx5b629890-23b9-4fbe-b601-0e8719186969',\r\n },\r\n int01: {\r\n organisation: 'postchagnonprods5sq57qt',\r\n token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',\r\n },\r\n int02: {\r\n organisation: 'postchagnonprods5sq57qt',\r\n token: 'xx7c0e52ab-3de2-4fbd-b9a7-6ca6abd532b4',\r\n },\r\n },\r\n};\r\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { state } from '../../data/store';
|
|
2
|
+
// https://www.post.ch/api/trackandtrace?id=99.00.306600.01004883
|
|
3
|
+
// Track and trace URL
|
|
4
|
+
export const getTrackAndTraceApiUrl = (id) => {
|
|
5
|
+
const lang = state.currentLanguage;
|
|
6
|
+
return `https://www.post.ch/${lang}/api/trackandtrace?id=${encodeURIComponent(id)}`;
|
|
7
|
+
};
|
|
8
|
+
// Get the redire
|
|
9
|
+
export const getTrackAndTraceRedirectUrl = (query, { packageTrackingRedirectUrl }) => {
|
|
10
|
+
return packageTrackingRedirectUrl.replace('{trackingNumber}', encodeURIComponent(query));
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Check whether a query is a tracking id
|
|
14
|
+
*
|
|
15
|
+
* @param query User query
|
|
16
|
+
* @returns Boolean
|
|
17
|
+
*/
|
|
18
|
+
export const isParcel = async (query, searchConfig) => {
|
|
19
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
20
|
+
return parcelInfo.ok;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Try to get parcel info from a query that is possibly a tracking id.
|
|
24
|
+
* This is mainly used to check if a search should redirect to track&trace instead of the regular search.
|
|
25
|
+
*
|
|
26
|
+
* @param query User query that is possibly a tracking number
|
|
27
|
+
* @returns Track and trace info
|
|
28
|
+
*/
|
|
29
|
+
export const getParcelInfo = async (query, { redirectPattern }) => {
|
|
30
|
+
const trackingNrPattern = new RegExp(redirectPattern);
|
|
31
|
+
if (trackingNrPattern.test(query)) {
|
|
32
|
+
try {
|
|
33
|
+
const trackAndTraceReqest = await fetch(getTrackAndTraceApiUrl(query));
|
|
34
|
+
const trackAndTraceResult = await trackAndTraceReqest.json();
|
|
35
|
+
return Object.assign(Object.assign({}, trackAndTraceResult), { ok: trackAndTraceResult.ok === 'true' });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.warn(`Could not check track and trace API due to error: ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { ok: false, timestamp: new Date().toDateString() };
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Get parcel info if query is a parcel or null
|
|
45
|
+
*
|
|
46
|
+
* @param query Parcel id
|
|
47
|
+
* @returns Parcel info and a redirect url or null if not a parcel
|
|
48
|
+
*/
|
|
49
|
+
export const getParcelSuggestion = async (query, searchConfig) => {
|
|
50
|
+
const parcelInfo = await getParcelInfo(query, searchConfig);
|
|
51
|
+
return parcelInfo.ok
|
|
52
|
+
? Object.assign(Object.assign({}, parcelInfo), { url: getTrackAndTraceRedirectUrl(query, searchConfig) }) : null;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=parcel.service.js.map
|