@bravobit/bb-foundation 0.15.4 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/lib/auth.interceptor.d.ts +1 -1
- package/auth/lib/auth.service.d.ts +1 -1
- package/auth/package.json +5 -5
- package/collections/package.json +5 -5
- package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
- package/controls/lib/checkbox/checkbox.component.d.ts +27 -0
- package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
- package/controls/lib/controls.module.d.ts +7 -0
- package/controls/package.json +10 -0
- package/controls/public_api.d.ts +3 -0
- package/dashboard/package.json +5 -5
- package/dialog/package.json +5 -5
- package/elements/package.json +5 -5
- package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
- package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
- package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
- package/esm2020/auth/lib/auth.service.mjs +276 -0
- package/esm2020/auth/lib/auth.session.mjs +131 -0
- package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
- package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
- package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
- package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
- package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
- package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
- package/esm2020/auth/lib/permissions.service.mjs +56 -0
- package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
- package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
- package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
- package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
- package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
- package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
- package/esm2020/collections/lib/collection.mjs +98 -0
- package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
- package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
- package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
- package/esm2020/collections/lib/providers/api-collection.provider.mjs +68 -0
- package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
- package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
- package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
- package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
- package/esm2020/controls/lib/checkbox/checkbox.component.mjs +86 -0
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
- package/esm2020/controls/lib/controls.module.mjs +16 -0
- package/esm2020/controls/public_api.mjs +4 -0
- package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
- package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
- package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
- package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
- package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
- package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
- package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
- package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
- package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
- package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
- package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
- package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
- package/esm2020/elements/lib/button/button.component.mjs +61 -0
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
- package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
- package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
- package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
- package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
- package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
- package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
- package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
- package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
- package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
- package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
- package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
- package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
- package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
- package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
- package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
- package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
- package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
- package/esm2020/http/lib/classes/http.config.mjs +29 -0
- package/esm2020/http/lib/classes/http.error.mjs +20 -0
- package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
- package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
- package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
- package/{esm2015/lib/core/coercions/boolean-coercion.js → esm2020/lib/core/coercions/boolean-coercion.mjs} +0 -0
- package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
- package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
- package/{esm2015/lib/core/mixins/can-disable.js → esm2020/lib/core/mixins/can-disable.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-load.js → esm2020/lib/core/mixins/can-load.mjs} +0 -0
- package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
- package/{esm2015/lib/core/mixins/has-error.js → esm2020/lib/core/mixins/has-error.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-focused.js → esm2020/lib/core/mixins/is-focused.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-grouped.js → esm2020/lib/core/mixins/is-grouped.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-readonly.js → esm2020/lib/core/mixins/is-readonly.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-required.js → esm2020/lib/core/mixins/is-required.mjs} +0 -0
- package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
- package/esm2020/lib/core/services/exif.service.mjs +163 -0
- package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
- package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
- package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
- package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
- package/esm2020/lib/core/services/patch.service.mjs +63 -0
- package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
- package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
- package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
- package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
- package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
- package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
- package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
- package/esm2020/localize/lib/localize.service.mjs +277 -0
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
- package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
- package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
- package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
- package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
- package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
- package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
- package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
- package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
- package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
- package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
- package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
- package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
- package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
- package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
- package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
- package/esm2020/storage/lib/storage.service.mjs +109 -0
- package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
- package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
- package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
- package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
- package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
- package/esm2020/table/lib/components/table/table.component.mjs +191 -0
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
- package/esm2020/table/lib/data/datasource.data.mjs +32 -0
- package/esm2020/table/lib/data/generic.data.mjs +72 -0
- package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
- package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
- package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
- package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
- package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +33 -47
- package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs +123 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +193 -302
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
- package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +74 -64
- package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs +434 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs +121 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs +1993 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation.mjs +895 -0
- package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
- package/http/package.json +5 -5
- package/localize/package.json +5 -5
- package/notifications/package.json +5 -5
- package/package.json +125 -8
- package/recaptcha/package.json +5 -5
- package/rxjs/package.json +5 -5
- package/storage/package.json +5 -5
- package/table/lib/components/table/table.component.d.ts +3 -0
- package/table/package.json +5 -5
- package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
- package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
- package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
- package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
- package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
- package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
- package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
- package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
- package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
- package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
- package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-table.umd.js +0 -1070
- package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation.umd.js +0 -1440
- package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
- package/esm2015/auth/lib/auth.interceptor.js +0 -95
- package/esm2015/auth/lib/auth.service.js +0 -299
- package/esm2015/auth/lib/auth.session.js +0 -136
- package/esm2015/auth/lib/directives/permission.directive.js +0 -81
- package/esm2015/auth/lib/directives/role.directive.js +0 -38
- package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
- package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
- package/esm2015/auth/lib/permissions.service.js +0 -58
- package/esm2015/auth/lib/providers/email.provider.js +0 -26
- package/esm2015/auth/lib/providers/verify.provider.js +0 -20
- package/esm2015/collections/lib/collection.js +0 -104
- package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
- package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
- package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
- package/esm2015/collections/lib/providers/collection.provider.js +0 -14
- package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
- package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
- package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
- package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
- package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
- package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
- package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
- package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
- package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
- package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
- package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
- package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
- package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
- package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
- package/esm2015/elements/lib/button/button.component.js +0 -79
- package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
- package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
- package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
- package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
- package/esm2015/elements/lib/directives/input.directive.js +0 -139
- package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
- package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
- package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
- package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
- package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
- package/esm2015/elements/lib/icon/icon.component.js +0 -110
- package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
- package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
- package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
- package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
- package/esm2015/elements/lib/tag/tag.component.js +0 -26
- package/esm2015/http/lib/classes/http.config.js +0 -31
- package/esm2015/http/lib/classes/http.error.js +0 -21
- package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
- package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
- package/esm2015/lib/core/miscellaneous/validator.js +0 -86
- package/esm2015/lib/core/services/clipboard.service.js +0 -72
- package/esm2015/lib/core/services/exif.service.js +0 -168
- package/esm2015/lib/core/services/file-loader.service.js +0 -90
- package/esm2015/lib/core/services/image-converter.service.js +0 -130
- package/esm2015/lib/core/services/patch.service.js +0 -65
- package/esm2015/localize/lib/localize.dictionary.js +0 -137
- package/esm2015/localize/lib/localize.service.js +0 -282
- package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
- package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
- package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
- package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
- package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
- package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
- package/esm2015/storage/lib/storage.service.js +0 -111
- package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
- package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
- package/esm2015/table/lib/components/table/table.component.js +0 -196
- package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
- package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -141
- package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
- package/esm2015/table/lib/data/datasource.data.js +0 -32
- package/esm2015/table/lib/data/generic.data.js +0 -73
- package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
- package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
- package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-table.js +0 -626
- package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation.js.map +0 -1
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { makeStateKey } from '@angular/platform-browser';
|
|
3
|
-
import { USE_AUTHORIZATION } from '@bravobit/bb-foundation/auth';
|
|
4
|
-
import { HttpContext } from '@angular/common/http';
|
|
5
|
-
export class LocalizeDictionary {
|
|
6
|
-
constructor({ id, data, locale, supportedLanguages }, baseUrl, http) {
|
|
7
|
-
// Dictionary data.
|
|
8
|
-
this._data = {};
|
|
9
|
-
this._url = null;
|
|
10
|
-
this.isAbsoluteUrl = (url) => {
|
|
11
|
-
if (url.indexOf('//') === 0) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
if (url.indexOf('://') === -1) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
if (url.indexOf('.') === -1) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
if (url.indexOf('/') === -1) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
if (url.indexOf(':') > url.indexOf('/')) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
return url.indexOf('://') < url.indexOf('.');
|
|
27
|
-
};
|
|
28
|
-
this.recursiveSearchValue = (data, value) => {
|
|
29
|
-
if (typeof data === 'undefined' || typeof data === 'string') {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
return data[value];
|
|
33
|
-
};
|
|
34
|
-
this._id = id;
|
|
35
|
-
this._locale = locale || 'en-US';
|
|
36
|
-
this._supportedLanguages = supportedLanguages || [];
|
|
37
|
-
this._http = http;
|
|
38
|
-
this.stateKey = makeStateKey(`locale:${this._id}`);
|
|
39
|
-
// Set the correct variable to the url or data.
|
|
40
|
-
if (typeof data === 'string') {
|
|
41
|
-
this._url = this.getUrl(data, baseUrl);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this._data = data;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
get id() {
|
|
48
|
-
return this._id;
|
|
49
|
-
}
|
|
50
|
-
get locale() {
|
|
51
|
-
return this._locale;
|
|
52
|
-
}
|
|
53
|
-
get supportedLanguages() {
|
|
54
|
-
return this._supportedLanguages;
|
|
55
|
-
}
|
|
56
|
-
get data() {
|
|
57
|
-
return this._data;
|
|
58
|
-
}
|
|
59
|
-
load(data) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
// Check if data was passed.
|
|
62
|
-
if (data) {
|
|
63
|
-
this.setData(data);
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
// If the url was not set the data was already loaded
|
|
67
|
-
// return true because it was successful.
|
|
68
|
-
if (!this._url) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
// Try to load the data via a HTTP request.
|
|
73
|
-
const context = new HttpContext().set(USE_AUTHORIZATION, false);
|
|
74
|
-
const result = yield this._http.get(this._url, { context })
|
|
75
|
-
.toPromise();
|
|
76
|
-
// Set the data.
|
|
77
|
-
this.setData(result);
|
|
78
|
-
// Return true because it succeeded.
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
catch (_a) {
|
|
82
|
-
// Return false because it failed.
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
combine(extraDictionary, mode = 'prepend') {
|
|
88
|
-
// Validate that the locale matches.
|
|
89
|
-
if (extraDictionary.locale !== this._locale) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// Extract the extra data.
|
|
93
|
-
const extraData = extraDictionary.data || {};
|
|
94
|
-
// If the selected mode is prepend
|
|
95
|
-
// add the data in front.
|
|
96
|
-
if (mode === 'prepend') {
|
|
97
|
-
this._data = Object.assign(Object.assign({}, extraData), this._data);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
// If the selected mode is append
|
|
101
|
-
// add the data in the back.
|
|
102
|
-
this._data = Object.assign(Object.assign({}, this._data), extraData);
|
|
103
|
-
}
|
|
104
|
-
search(token) {
|
|
105
|
-
// Check if the token is present in the
|
|
106
|
-
// data, if so return it.
|
|
107
|
-
if (this._data[token]) {
|
|
108
|
-
return this._data[token];
|
|
109
|
-
}
|
|
110
|
-
// Values might be nested in objects this means we need
|
|
111
|
-
// to split them on the dot and search them recursively
|
|
112
|
-
// in the data.
|
|
113
|
-
const value = (token || '')
|
|
114
|
-
.split('.')
|
|
115
|
-
.filter(value => !!value)
|
|
116
|
-
.reduce(this.recursiveSearchValue, this._data);
|
|
117
|
-
// Check if the value is a string
|
|
118
|
-
// if this is true it can be returned.
|
|
119
|
-
if (typeof value === 'string') {
|
|
120
|
-
return value;
|
|
121
|
-
}
|
|
122
|
-
// This means the translation was incorrect.
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
setData(data) {
|
|
126
|
-
this._data = data || {};
|
|
127
|
-
this._url = null;
|
|
128
|
-
}
|
|
129
|
-
getUrl(value, baseUrl) {
|
|
130
|
-
const isAbsolute = this.isAbsoluteUrl(value);
|
|
131
|
-
if (isAbsolute || !baseUrl) {
|
|
132
|
-
return value;
|
|
133
|
-
}
|
|
134
|
-
return [baseUrl, value].join('/');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuZGljdGlvbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsWUFBWSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFhLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sT0FBTyxrQkFBa0I7SUFjM0IsWUFBWSxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUEyQixFQUFFLE9BQWUsRUFBRSxJQUFnQjtRQUovRyxtQkFBbUI7UUFDWCxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBMkgzQixrQkFBYSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMs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QUFDLENBQUM7UUFDN0MsSUFBSSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBa0NKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhbGl6ZURpY3Rpb25hcnlQYXJhbXMsIExvY2FsaXplRXh0cmFEaWN0aW9uYXJ5fSBmcm9tICcuL2ludGVyZmFjZXMvZGljdGlvbmFyeS5pbnRlcmZhY2VzJztcbmltcG9ydCB7bWFrZVN0YXRlS2V5LCBTdGF0ZUtleX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9hdXRoJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cENvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuZXhwb3J0IGNsYXNzIExvY2FsaXplRGljdGlvbmFyeSB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3VwcG9ydGVkTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwOiBIdHRwQ2xpZW50O1xuXG4gICAgcmVhZG9ubHkgc3RhdGVLZXk6IFN0YXRlS2V5PG9iamVjdD47XG5cbiAgICAvLyBEaWN0aW9uYXJ5IGRhdGEuXG4gICAgcHJpdmF0ZSBfZGF0YTogb2JqZWN0ID0ge307XG4gICAgcHJpdmF0ZSBfdXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgbG9jYWxlLCBzdXBwb3J0ZWRMYW5ndWFnZXN9OiBMb2NhbGl6ZURpY3Rpb25hcnlQYXJhbXMsIGJhc2VVcmw6IHN0cmluZywgaHR0cDogSHR0cENsaWVudCkge1xuICAgICAgICB0aGlzLl9pZCA9IGlkO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGUgfHwgJ2VuLVVTJztcbiAgICAgICAgdGhpcy5fc3VwcG9ydGVkTGFuZ3VhZ2VzID0gc3VwcG9ydGVkTGFuZ3VhZ2VzIHx8IFtdO1xuICAgICAgICB0aGlzLl9odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5zdGF0ZUtleSA9IG1ha2VTdGF0ZUtleShgbG9jYWxlOiR7dGhpcy5faWR9YCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IHZhcmlhYmxlIHRvIHRoZSB1cmwgb3IgZGF0YS5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fdXJsID0gdGhpcy5nZXRVcmwoZGF0YSwgYmFzZVVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgZ2V0IHN1cHBvcnRlZExhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRlZExhbmd1YWdlcztcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZChkYXRhPzogb2JqZWN0IHwgbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBkYXRhIHdhcyBwYXNzZWQuXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSB1cmwgd2FzIG5vdCBzZXQgdGhlIGRhdGEgd2FzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIC8vIHJldHVybiB0cnVlIGJlY2F1c2UgaXQgd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCB0aGUgZGF0YSB2aWEgYSBIVFRQIHJlcXVlc3QuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCkuc2V0KFVTRV9BVVRIT1JJWkFUSU9OLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9odHRwLmdldDxvYmplY3Q+KHRoaXMuX3VybCwge2NvbnRleHR9KVxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhLlxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3VsdCk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0cnVlIGJlY2F1c2UgaXQgc3VjY2VlZGVkLlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gUmV0dXJuIGZhbHNlIGJlY2F1c2UgaXQgZmFpbGVkLlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tYmluZShleHRyYURpY3Rpb25hcnk6IExvY2FsaXplRXh0cmFEaWN0aW9uYXJ5LCBtb2RlOiAncHJlcGVuZCcgfCAnYXBwZW5kJyA9ICdwcmVwZW5kJykge1xuICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBsb2NhbGUgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGV4dHJhRGljdGlvbmFyeS5sb2NhbGUgIT09IHRoaXMuX2xvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgZXh0cmEgZGF0YS5cbiAgICAgICAgY29uc3QgZXh0cmFEYXRhID0gZXh0cmFEaWN0aW9uYXJ5LmRhdGEgfHwge307XG5cbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIG1vZGUgaXMgcHJlcGVuZFxuICAgICAgICAvLyBhZGQgdGhlIGRhdGEgaW4gZnJvbnQuXG4gICAgICAgIGlmIChtb2RlID09PSAncHJlcGVuZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSB7Li4uZXh0cmFEYXRhLCAuLi50aGlzLl9kYXRhfTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBtb2RlIGlzIGFwcGVuZFxuICAgICAgICAvLyBhZGQgdGhlIGRhdGEgaW4gdGhlIGJhY2suXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4uZXh0cmFEYXRhfTtcbiAgICB9XG5cbiAgICBzZWFyY2godG9rZW46IHN0cmluZykge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdG9rZW4gaXMgcHJlc2VudCBpbiB0aGVcbiAgICAgICAgLy8gZGF0YSwgaWYgc28gcmV0dXJuIGl0LlxuICAgICAgICBpZiAodGhpcy5fZGF0YVt0b2tlbl0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhW3Rva2VuXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlcyBtaWdodCBiZSBuZXN0ZWQgaW4gb2JqZWN0cyB0aGlzIG1lYW5zIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gc3BsaXQgdGhlbSBvbiB0aGUgZG90IGFuZCBzZWFyY2ggdGhlbSByZWN1cnNpdmVseVxuICAgICAgICAvLyBpbiB0aGUgZGF0YS5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAodG9rZW4gfHwgJycpXG4gICAgICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLnJlZHVjZSh0aGlzLnJlY3Vyc2l2ZVNlYXJjaFZhbHVlLCB0aGlzLl9kYXRhKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAgICAgICAgLy8gaWYgdGhpcyBpcyB0cnVlIGl0IGNhbiBiZSByZXR1cm5lZC5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIHRyYW5zbGF0aW9uIHdhcyBpbmNvcnJlY3QuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0YShkYXRhOiBvYmplY3QpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgfHwge307XG4gICAgICAgIHRoaXMuX3VybCA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmwodmFsdWU6IHN0cmluZywgYmFzZVVybDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGlzQWJzb2x1dGUgPSB0aGlzLmlzQWJzb2x1dGVVcmwodmFsdWUpO1xuICAgICAgICBpZiAoaXNBYnNvbHV0ZSB8fCAhYmFzZVVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtiYXNlVXJsLCB2YWx1ZV0uam9pbignLycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBYnNvbHV0ZVVybCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoJy8vJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc6Ly8nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignLicpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJzonKSA+IHVybC5pbmRleE9mKCcvJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmwuaW5kZXhPZignOi8vJykgPCB1cmwuaW5kZXhPZignLicpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlYXJjaFZhbHVlID0gKGRhdGEsIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFbdmFsdWVdO1xuICAgIH07XG5cbn1cbiJdfQ==
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { LOCALIZE_FUNCTION } from './interfaces/functions.interfaces';
|
|
3
|
-
import { LOCALIZE_EXTRA_DICTIONARY } from './interfaces/dictionary.interfaces';
|
|
4
|
-
import { BASE_URL, LOCATION } from '@bravobit/bb-foundation';
|
|
5
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
6
|
-
import { LocalizeDictionary } from './localize.dictionary';
|
|
7
|
-
import { DOCUMENT } from '@angular/common';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common/http";
|
|
10
|
-
import * as i2 from "@bravobit/bb-foundation/storage";
|
|
11
|
-
import * as i3 from "@bravobit/bb-foundation";
|
|
12
|
-
import * as i4 from "@angular/platform-browser";
|
|
13
|
-
import * as i5 from "./interfaces/config.interfaces";
|
|
14
|
-
import * as i6 from "./handlers/missing.handler";
|
|
15
|
-
export class Localize {
|
|
16
|
-
constructor(_http, _storage, _platform, _languages, _state, _config, _missingHandler, _document, _location, _baseUrl, _functions, _extras) {
|
|
17
|
-
this._http = _http;
|
|
18
|
-
this._storage = _storage;
|
|
19
|
-
this._platform = _platform;
|
|
20
|
-
this._languages = _languages;
|
|
21
|
-
this._state = _state;
|
|
22
|
-
this._config = _config;
|
|
23
|
-
this._missingHandler = _missingHandler;
|
|
24
|
-
this._document = _document;
|
|
25
|
-
this._location = _location;
|
|
26
|
-
this._baseUrl = _baseUrl;
|
|
27
|
-
this._functions = _functions;
|
|
28
|
-
this._extras = _extras;
|
|
29
|
-
this._storageToken = 'bb-language-dictionary-id';
|
|
30
|
-
this.convertToParams = (tokenOrParams) => {
|
|
31
|
-
if (typeof tokenOrParams !== 'string') {
|
|
32
|
-
// Destruct the params from the object.
|
|
33
|
-
const { token, optional, data } = tokenOrParams;
|
|
34
|
-
// Make sure all parameters are valid
|
|
35
|
-
// by type safe adding them.
|
|
36
|
-
return { token: token, optional: optional || false, data: data || {} };
|
|
37
|
-
}
|
|
38
|
-
// If the parameter is a string fill in the blanks.
|
|
39
|
-
return { token: tokenOrParams, optional: false, data: {} };
|
|
40
|
-
};
|
|
41
|
-
this.getMatches = (value, substitutions) => {
|
|
42
|
-
// Get the matching substitutions.
|
|
43
|
-
const { start, end } = substitutions;
|
|
44
|
-
// Compose a regex that will find the matches.
|
|
45
|
-
const regex = new RegExp(`${start}([^${end}]+)${end}`, 'g');
|
|
46
|
-
// Execute the regex to find matches.
|
|
47
|
-
let match = regex.exec(value);
|
|
48
|
-
const matches = [];
|
|
49
|
-
while (match !== null) {
|
|
50
|
-
// Push a new match.
|
|
51
|
-
matches.push({
|
|
52
|
-
match: match[0],
|
|
53
|
-
token: match[1]
|
|
54
|
-
});
|
|
55
|
-
// Try to find more matches.
|
|
56
|
-
match = regex.exec(value);
|
|
57
|
-
}
|
|
58
|
-
// Return the processed value.
|
|
59
|
-
return matches.filter(item => !!item);
|
|
60
|
-
};
|
|
61
|
-
this.reload = () => { var _a; return (_a = this._location) === null || _a === void 0 ? void 0 : _a.reload(); };
|
|
62
|
-
// Check if at least one language was passed in the config.
|
|
63
|
-
if (this._config.dictionary.length < 1) {
|
|
64
|
-
throw new Error('Localize: one or more languages should be supplied.');
|
|
65
|
-
}
|
|
66
|
-
// Gather the dictionaries.
|
|
67
|
-
this._dictionaries = this._config.dictionary.map(item => {
|
|
68
|
-
return new LocalizeDictionary(item, this._baseUrl, this._http);
|
|
69
|
-
});
|
|
70
|
-
// Save the best matching current dictionary.
|
|
71
|
-
this._currentDictionary = this.retrieveBestMatchingDictionary();
|
|
72
|
-
// Gather all the localize functions.
|
|
73
|
-
this._functionMiddleware = this._functions.reduce((previous, current) => {
|
|
74
|
-
previous[current.keyword()] = current;
|
|
75
|
-
return previous;
|
|
76
|
-
}, {});
|
|
77
|
-
this.renderDocumentLanguage();
|
|
78
|
-
}
|
|
79
|
-
get dictionaries() {
|
|
80
|
-
return this._dictionaries;
|
|
81
|
-
}
|
|
82
|
-
get current() {
|
|
83
|
-
return this._currentDictionary;
|
|
84
|
-
}
|
|
85
|
-
get locale() {
|
|
86
|
-
return this._currentDictionary.locale;
|
|
87
|
-
}
|
|
88
|
-
initialize() {
|
|
89
|
-
return () => __awaiter(this, void 0, void 0, function* () { return this.load(this._currentDictionary); });
|
|
90
|
-
}
|
|
91
|
-
change(id, reload = true) {
|
|
92
|
-
// Try to fetch the dictionary.
|
|
93
|
-
const dictionary = this._dictionaries.find(item => item.id === id);
|
|
94
|
-
// Validate the dictionary exists.
|
|
95
|
-
if (!dictionary) {
|
|
96
|
-
throw new Error(`Localize: Could not find dictionary with id: "${id}"`);
|
|
97
|
-
}
|
|
98
|
-
// Save the language in the storage.
|
|
99
|
-
this._storage.cookie.set(this._storageToken, dictionary.id, {});
|
|
100
|
-
// Just quit if we don't need to reload.
|
|
101
|
-
if (!reload) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
// We need to reload the application for the translations.
|
|
105
|
-
return this.reload();
|
|
106
|
-
}
|
|
107
|
-
clear(reload = true) {
|
|
108
|
-
// Remove the language in the local storage.
|
|
109
|
-
this._storage.cookie.remove(this._storageToken);
|
|
110
|
-
// Just quit if we don't need to reload.
|
|
111
|
-
if (!reload) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
// We need to reload the application for the translations.
|
|
115
|
-
return this.reload();
|
|
116
|
-
}
|
|
117
|
-
translate(tokenOrParams) {
|
|
118
|
-
// 1. Convert to the params.
|
|
119
|
-
const params = this.convertToParams(tokenOrParams);
|
|
120
|
-
// 2. Try to find the translation in the dictionary.
|
|
121
|
-
const searchResult = this._currentDictionary.search(params.token);
|
|
122
|
-
// 3. Verify the translation was found.
|
|
123
|
-
if (!searchResult) {
|
|
124
|
-
return this._missingHandler.handle(params);
|
|
125
|
-
}
|
|
126
|
-
// 4. Find references in the translation that need to be translated as well.
|
|
127
|
-
const processResult = this.findReferencesInTranslation(searchResult);
|
|
128
|
-
// 5. Parse the interpolation data.
|
|
129
|
-
return this.parseInterpolationData(processResult, params.data);
|
|
130
|
-
}
|
|
131
|
-
parseInterpolationData(value, data) {
|
|
132
|
-
// Get the interpolation substitutions.
|
|
133
|
-
const substitutions = this.getSubstitutions('interpolation', ['{{', '}}']);
|
|
134
|
-
// Get all matches in the value.
|
|
135
|
-
const matches = this.getMatches(value, substitutions);
|
|
136
|
-
// Replace all matches with the parsed value.
|
|
137
|
-
return matches.reduce((previous, current) => {
|
|
138
|
-
// Try to parse the token.
|
|
139
|
-
const interpolatedToken = this.interpolateFunctionData(current.token, data);
|
|
140
|
-
// Replace the match with the parsed token.
|
|
141
|
-
return previous.replace(current.match, interpolatedToken);
|
|
142
|
-
}, `${value}`);
|
|
143
|
-
}
|
|
144
|
-
interpolateFunctionData(value, interpolationData) {
|
|
145
|
-
// Get the token and the methods by splitting
|
|
146
|
-
// on the pipe symbol.
|
|
147
|
-
const [token, ...methods] = value.split('|').map(item => item.trim());
|
|
148
|
-
// Get the value for the token from
|
|
149
|
-
// the interpolation data.
|
|
150
|
-
const interpolationValue = interpolationData[token] || token;
|
|
151
|
-
// Loop through all the middleware methods and try to
|
|
152
|
-
// conform the string to the given parameters.
|
|
153
|
-
return methods.reduce((string, middlewareName) => {
|
|
154
|
-
// Try to retrieve the middleware from the collection.
|
|
155
|
-
const middleware = this._functionMiddleware[middlewareName];
|
|
156
|
-
// If the middleware is missing return an error
|
|
157
|
-
// so that the user knows it was not found.
|
|
158
|
-
if (!middleware) {
|
|
159
|
-
return string;
|
|
160
|
-
}
|
|
161
|
-
// Execute the middleware function with the string.
|
|
162
|
-
return middleware.transform(string, this.locale);
|
|
163
|
-
}, `${interpolationValue}`);
|
|
164
|
-
}
|
|
165
|
-
findReferencesInTranslation(value) {
|
|
166
|
-
// Get the reference substitutions.
|
|
167
|
-
const substitutions = this.getSubstitutions('references', ['#(', ')']);
|
|
168
|
-
// Get all matches in the value.
|
|
169
|
-
const matches = this.getMatches(value, substitutions);
|
|
170
|
-
// Replace all matches with the translated value.
|
|
171
|
-
return matches.reduce((previous, current) => {
|
|
172
|
-
// Try to translate the token.
|
|
173
|
-
const translatedToken = this.translate(current.token);
|
|
174
|
-
// Replace the match with the translated token.
|
|
175
|
-
return previous.replace(current.match, translatedToken);
|
|
176
|
-
}, value);
|
|
177
|
-
}
|
|
178
|
-
getSubstitutions(type, defaultValue) {
|
|
179
|
-
const substitutions = (this._config
|
|
180
|
-
&& this._config.substitutions
|
|
181
|
-
&& this._config.substitutions[type]);
|
|
182
|
-
// Get the substitutions.
|
|
183
|
-
const value = (!substitutions || substitutions.length !== 2)
|
|
184
|
-
? defaultValue
|
|
185
|
-
: substitutions;
|
|
186
|
-
// Escape both substitutions so that they
|
|
187
|
-
// can be used.
|
|
188
|
-
const escape = /[.*+?^${}()|[\]\\]/g;
|
|
189
|
-
const start = value[0].replace(escape, '\\$&');
|
|
190
|
-
const end = value[1].replace(escape, '\\$&');
|
|
191
|
-
// Return the substitutions.
|
|
192
|
-
return { start, end };
|
|
193
|
-
}
|
|
194
|
-
retrieveBestMatchingDictionary() {
|
|
195
|
-
// Get the dictionary based on storage.
|
|
196
|
-
const storageDictionary = this.getDictionaryFromStorage();
|
|
197
|
-
// Get the dictionary based on the supported language.
|
|
198
|
-
const browserDictionary = this.getBestBrowserMatchDictionary();
|
|
199
|
-
// Get the dictionary based on the first index.
|
|
200
|
-
const firstDictionary = this._dictionaries[0];
|
|
201
|
-
// Return the best matching dictionary.
|
|
202
|
-
return storageDictionary || browserDictionary || firstDictionary;
|
|
203
|
-
}
|
|
204
|
-
getDictionaryFromStorage() {
|
|
205
|
-
// Get dictionary id from the storage..
|
|
206
|
-
const dictionaryId = this._storage.cookie.get(this._storageToken);
|
|
207
|
-
// Return the dictionary based on the storage dictionary id.
|
|
208
|
-
return this._dictionaries.find(item => item.id === dictionaryId);
|
|
209
|
-
}
|
|
210
|
-
getBestBrowserMatchDictionary() {
|
|
211
|
-
// Loop through all browser languages and return the
|
|
212
|
-
// best matching dictionary.
|
|
213
|
-
return this._languages.all.map(({ code, region }) => {
|
|
214
|
-
const languageCode = [code, region].filter(data => !!data).join('-');
|
|
215
|
-
return this._dictionaries.find(item => item.supportedLanguages.includes(languageCode));
|
|
216
|
-
}).filter(item => !!item).find((_, index) => index === 0);
|
|
217
|
-
}
|
|
218
|
-
load(dictionary) {
|
|
219
|
-
var _a, _b, _c, _d;
|
|
220
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
221
|
-
const data = ((_a = this._state) === null || _a === void 0 ? void 0 : _a.hasKey(dictionary.stateKey))
|
|
222
|
-
? (_b = this._state) === null || _b === void 0 ? void 0 : _b.get(dictionary.stateKey, {})
|
|
223
|
-
: null;
|
|
224
|
-
// Try to load the dictionary data.
|
|
225
|
-
const loaded = yield dictionary.load(data);
|
|
226
|
-
// Verify the data was loaded.
|
|
227
|
-
if (!loaded) {
|
|
228
|
-
throw new Error(`Localize: Could not correctly fetch the data from: "${dictionary.id}"`);
|
|
229
|
-
}
|
|
230
|
-
if (!this._platform.isBrowser && this._state) {
|
|
231
|
-
(_c = this._state) === null || _c === void 0 ? void 0 : _c.set(dictionary === null || dictionary === void 0 ? void 0 : dictionary.stateKey, (_d = dictionary === null || dictionary === void 0 ? void 0 : dictionary.data) !== null && _d !== void 0 ? _d : {});
|
|
232
|
-
}
|
|
233
|
-
// Combine the extra dictionary data.
|
|
234
|
-
(this._extras || []).forEach(extraDictionary => dictionary.combine(extraDictionary));
|
|
235
|
-
// Return the dictionary.
|
|
236
|
-
return dictionary;
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
renderDocumentLanguage() {
|
|
240
|
-
var _a, _b, _c, _d, _e;
|
|
241
|
-
const element = (_a = this._document) === null || _a === void 0 ? void 0 : _a.documentElement;
|
|
242
|
-
if (!element) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
element.lang = (_d = (_c = (_b = this._currentDictionary) === null || _b === void 0 ? void 0 : _b.supportedLanguages) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : (_e = this._currentDictionary) === null || _e === void 0 ? void 0 : _e.locale;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: Localize, deps: [{ token: i1.HttpClient }, { token: i2.Storage }, { token: i3.Platform }, { token: i3.Languages }, { token: i4.TransferState, optional: true }, { token: i5.LocalizeConfig, optional: true }, { token: i6.LocalizeMissingHandler }, { token: DOCUMENT, optional: true }, { token: LOCATION, optional: true }, { token: BASE_URL, optional: true }, { token: LOCALIZE_FUNCTION, optional: true }, { token: LOCALIZE_EXTRA_DICTIONARY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
249
|
-
Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: Localize });
|
|
250
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: Localize, decorators: [{
|
|
251
|
-
type: Injectable
|
|
252
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.Storage }, { type: i3.Platform }, { type: i3.Languages }, { type: i4.TransferState, decorators: [{
|
|
253
|
-
type: Optional
|
|
254
|
-
}] }, { type: i5.LocalizeConfig, decorators: [{
|
|
255
|
-
type: Optional
|
|
256
|
-
}] }, { type: i6.LocalizeMissingHandler }, { type: undefined, decorators: [{
|
|
257
|
-
type: Optional
|
|
258
|
-
}, {
|
|
259
|
-
type: Inject,
|
|
260
|
-
args: [DOCUMENT]
|
|
261
|
-
}] }, { type: undefined, decorators: [{
|
|
262
|
-
type: Optional
|
|
263
|
-
}, {
|
|
264
|
-
type: Inject,
|
|
265
|
-
args: [LOCATION]
|
|
266
|
-
}] }, { type: undefined, decorators: [{
|
|
267
|
-
type: Optional
|
|
268
|
-
}, {
|
|
269
|
-
type: Inject,
|
|
270
|
-
args: [BASE_URL]
|
|
271
|
-
}] }, { type: undefined, decorators: [{
|
|
272
|
-
type: Optional
|
|
273
|
-
}, {
|
|
274
|
-
type: Inject,
|
|
275
|
-
args: [LOCALIZE_FUNCTION]
|
|
276
|
-
}] }, { type: undefined, decorators: [{
|
|
277
|
-
type: Optional
|
|
278
|
-
}, {
|
|
279
|
-
type: Inject,
|
|
280
|
-
args: [LOCALIZE_EXTRA_DICTIONARY]
|
|
281
|
-
}] }]; } });
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQXdDLE1BQU0sbUNBQW1DLENBQUM7QUFDM0csT0FBTyxFQUFDLHlCQUF5QixFQUEwQixNQUFNLG9DQUFvQyxDQUFDO0FBRXRHLE9BQU8sRUFBQyxRQUFRLEVBQWEsUUFBUSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFHaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXpELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFHekMsTUFBTSxPQUFPLFFBQVE7SUFRakIsWUFBb0IsS0FBaUIsRUFDakIsUUFBaUIsRUFDakIsU0FBbUIsRUFDbkIsVUFBcUIsRUFDVCxNQUFxQixFQUNyQixPQUF1QixFQUNuQyxlQUF1QyxFQUNULFNBQWUsRUFDZixTQUFlLEVBQ2YsUUFBaUIsRUFDUixVQUErQixFQUN2QixPQUFtQztRQVhsRixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ1QsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDVCxjQUFTLEdBQVQsU0FBUyxDQUFNO1FBQ2YsY0FBUyxHQUFULFNBQVMsQ0FBTTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDUixl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LENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFFckYseUJBQXlCO1lBQ3pCLE9BQU8sVUFBVSxDQUFDOztLQUNyQjtJQUVPLHNCQUFzQjs7UUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxlQUFlLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU87U0FDVjtRQUVELE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxrQkFBa0IsMENBQUcsQ0FBQyxDQUFDLG1DQUFJLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxNQUFNLENBQUM7SUFDdkcsQ0FBQzs7c0dBNVFRLFFBQVEscVBBZWUsUUFBUSw2QkFDUixRQUFRLDZCQUNSLFFBQVEsNkJBQ1IsaUJBQWlCLDZCQUNqQix5QkFBeUI7MEdBbkJoRCxRQUFROzRGQUFSLFFBQVE7a0JBRHBCLFVBQVU7OzBCQWFNLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUTs7MEJBQzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUTs7MEJBQzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUTs7MEJBQzNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xPQ0FMSVpFX0ZVTkNUSU9OLCBMb2NhbGl6ZUZ1bmN0aW9uLCBMb2NhbGl6ZUZ1bmN0aW9uTWFwfSBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtMT0NBTElaRV9FWFRSQV9ESUNUSU9OQVJZLCBMb2NhbGl6ZUV4dHJhRGljdGlvbmFyeX0gZnJvbSAnLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplT3B0aW9uc0RhdGEsIExvY2FsaXplUGFyYW1zfSBmcm9tICcuL2ludGVyZmFjZXMvb3B0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7QkFTRV9VUkwsIExhbmd1YWdlcywgTE9DQVRJT04sIFBsYXRmb3JtfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbic7XG5pbXBvcnQge0xvY2FsaXplTWlzc2luZ0hhbmRsZXJ9IGZyb20gJy4vaGFuZGxlcnMvbWlzc2luZy5oYW5kbGVyJztcbmltcG9ydCB7TG9jYWxpemVDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2NhbGl6ZURpY3Rpb25hcnl9IGZyb20gJy4vbG9jYWxpemUuZGljdGlvbmFyeSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtUcmFuc2ZlclN0YXRlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXplIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGljdGlvbmFyaWVzOiBMb2NhbGl6ZURpY3Rpb25hcnlbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50RGljdGlvbmFyeTogTG9jYWxpemVEaWN0aW9uYXJ5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Z1bmN0aW9uTWlkZGxld2FyZTogTG9jYWxpemVGdW5jdGlvbk1hcDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlVG9rZW46IHN0cmluZyA9ICdiYi1sYW5ndWFnZS1kaWN0aW9uYXJ5LWlkJztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbGFuZ3VhZ2VzOiBMYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfc3RhdGU6IFRyYW5zZmVyU3RhdGUsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29uZmlnOiBMb2NhbGl6ZUNvbmZpZyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9taXNzaW5nSGFuZGxlcjogTG9jYWxpemVNaXNzaW5nSGFuZGxlcixcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudD86IGFueSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FUSU9OKSBwcml2YXRlIF9sb2NhdGlvbj86IGFueSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfVVJMKSBwcml2YXRlIF9iYXNlVXJsPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxJWkVfRlVOQ1RJT04pIHByaXZhdGUgX2Z1bmN0aW9ucz86IExvY2FsaXplRnVuY3Rpb25bXSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMSVpFX0VYVFJBX0RJQ1RJT05BUlkpIHByaXZhdGUgX2V4dHJhcz86IExvY2FsaXplRXh0cmFEaWN0aW9uYXJ5W10pIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYXQgbGVhc3Qgb25lIGxhbmd1YWdlIHdhcyBwYXNzZWQgaW4gdGhlIGNvbmZpZy5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5kaWN0aW9uYXJ5Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxpemU6IG9uZSBvciBtb3JlIGxhbmd1YWdlcyBzaG91bGQgYmUgc3VwcGxpZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHYXRoZXIgdGhlIGRpY3Rpb25hcmllcy5cbiAgICAgICAgdGhpcy5fZGljdGlvbmFyaWVzID0gdGhpcy5fY29uZmlnLmRpY3Rpb25hcnkubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbGl6ZURpY3Rpb25hcnkoaXRlbSwgdGhpcy5fYmFzZVVybCwgdGhpcy5faHR0cCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIGJlc3QgbWF0Y2hpbmcgY3VycmVudCBkaWN0aW9uYXJ5LlxuICAgICAgICB0aGlzLl9jdXJyZW50RGljdGlvbmFyeSA9IHRoaXMucmV0cmlldmVCZXN0TWF0Y2hpbmdEaWN0aW9uYXJ5KCk7XG5cbiAgICAgICAgLy8gR2F0aGVyIGFsbCB0aGUgbG9jYWxpemUgZnVuY3Rpb25zLlxuICAgICAgICB0aGlzLl9mdW5jdGlvbk1pZGRsZXdhcmUgPSB0aGlzLl9mdW5jdGlvbnMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcHJldmlvdXNbY3VycmVudC5rZXl3b3JkKCldID0gY3VycmVudDtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMucmVuZGVyRG9jdW1lbnRMYW5ndWFnZSgpO1xuICAgIH1cblxuICAgIGdldCBkaWN0aW9uYXJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJpZXM7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RGljdGlvbmFyeTtcbiAgICB9XG5cbiAgICBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudERpY3Rpb25hcnkubG9jYWxlO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB0aGlzLmxvYWQodGhpcy5fY3VycmVudERpY3Rpb25hcnkpO1xuICAgIH1cblxuICAgIGNoYW5nZShpZDogc3RyaW5nLCByZWxvYWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIC8vIFRyeSB0byBmZXRjaCB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuX2RpY3Rpb25hcmllcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBkaWN0aW9uYXJ5IGV4aXN0cy5cbiAgICAgICAgaWYgKCFkaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsaXplOiBDb3VsZCBub3QgZmluZCBkaWN0aW9uYXJ5IHdpdGggaWQ6IFwiJHtpZH1cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgbGFuZ3VhZ2UgaW4gdGhlIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuX3N0b3JhZ2UuY29va2llLnNldDxzdHJpbmc+KHRoaXMuX3N0b3JhZ2VUb2tlbiwgZGljdGlvbmFyeS5pZCwge30pO1xuXG4gICAgICAgIC8vIEp1c3QgcXVpdCBpZiB3ZSBkb24ndCBuZWVkIHRvIHJlbG9hZC5cbiAgICAgICAgaWYgKCFyZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVsb2FkIHRoZSBhcHBsaWNhdGlvbiBmb3IgdGhlIHRyYW5zbGF0aW9ucy5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgY2xlYXIocmVsb2FkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGxhbmd1YWdlIGluIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5yZW1vdmUodGhpcy5fc3RvcmFnZVRva2VuKTtcblxuICAgICAgICAvLyBKdXN0IHF1aXQgaWYgd2UgZG9uJ3QgbmVlZCB0byByZWxvYWQuXG4gICAgICAgIGlmICghcmVsb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbG9hZCB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSB0cmFuc2xhdGlvbnMuXG4gICAgICAgIHJldHVybiB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcykge1xuICAgICAgICAvLyAxLiBDb252ZXJ0IHRvIHRoZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29udmVydFRvUGFyYW1zKHRva2VuT3JQYXJhbXMpO1xuXG4gICAgICAgIC8vIDIuIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gdGhpcy5fY3VycmVudERpY3Rpb25hcnkuc2VhcmNoKHBhcmFtcy50b2tlbik7XG5cbiAgICAgICAgLy8gMy4gVmVyaWZ5IHRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQuXG4gICAgICAgIGlmICghc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlzc2luZ0hhbmRsZXIuaGFuZGxlKHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBGaW5kIHJlZmVyZW5jZXMgaW4gdGhlIHRyYW5zbGF0aW9uIHRoYXQgbmVlZCB0byBiZSB0cmFuc2xhdGVkIGFzIHdlbGwuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NSZXN1bHQgPSB0aGlzLmZpbmRSZWZlcmVuY2VzSW5UcmFuc2xhdGlvbihzZWFyY2hSZXN1bHQpO1xuXG4gICAgICAgIC8vIDUuIFBhcnNlIHRoZSBpbnRlcnBvbGF0aW9uIGRhdGEuXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlSW50ZXJwb2xhdGlvbkRhdGEocHJvY2Vzc1Jlc3VsdCwgcGFyYW1zLmRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VJbnRlcnBvbGF0aW9uRGF0YSh2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZU9wdGlvbnNEYXRhKSB7XG4gICAgICAgIC8vIEdldCB0aGUgaW50ZXJwb2xhdGlvbiBzdWJzdGl0dXRpb25zLlxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCdpbnRlcnBvbGF0aW9uJywgWyd7eycsICd9fSddKTtcblxuICAgICAgICAvLyBHZXQgYWxsIG1hdGNoZXMgaW4gdGhlIHZhbHVlLlxuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRNYXRjaGVzKHZhbHVlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGFsbCBtYXRjaGVzIHdpdGggdGhlIHBhcnNlZCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoZXMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSB0b2tlbi5cbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZFRva2VuID0gdGhpcy5pbnRlcnBvbGF0ZUZ1bmN0aW9uRGF0YShjdXJyZW50LnRva2VuLCBkYXRhKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbWF0Y2ggd2l0aCB0aGUgcGFyc2VkIHRva2VuLlxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzLnJlcGxhY2UoY3VycmVudC5tYXRjaCwgaW50ZXJwb2xhdGVkVG9rZW4pO1xuICAgICAgICB9LCBgJHt2YWx1ZX1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGludGVycG9sYXRlRnVuY3Rpb25EYXRhKHZhbHVlOiBzdHJpbmcsIGludGVycG9sYXRpb25EYXRhOiBMb2NhbGl6ZU9wdGlvbnNEYXRhKSB7XG4gICAgICAgIC8vIEdldCB0aGUgdG9rZW4gYW5kIHRoZSBtZXRob2RzIGJ5IHNwbGl0dGluZ1xuICAgICAgICAvLyBvbiB0aGUgcGlwZSBzeW1ib2wuXG4gICAgICAgIGNvbnN0IFt0b2tlbiwgLi4ubWV0aG9kc10gPSB2YWx1ZS5zcGxpdCgnfCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTtcblxuICAgICAgICAvLyBHZXQgdGhlIHZhbHVlIGZvciB0aGUgdG9rZW4gZnJvbVxuICAgICAgICAvLyB0aGUgaW50ZXJwb2xhdGlvbiBkYXRhLlxuICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uVmFsdWUgPSBpbnRlcnBvbGF0aW9uRGF0YVt0b2tlbl0gfHwgdG9rZW47XG5cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWlkZGxld2FyZSBtZXRob2RzIGFuZCB0cnkgdG9cbiAgICAgICAgLy8gY29uZm9ybSB0aGUgc3RyaW5nIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICByZXR1cm4gbWV0aG9kcy5yZWR1Y2UoKHN0cmluZywgbWlkZGxld2FyZU5hbWUpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgbWlkZGxld2FyZSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9IHRoaXMuX2Z1bmN0aW9uTWlkZGxld2FyZVttaWRkbGV3YXJlTmFtZV07XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtaWRkbGV3YXJlIGlzIG1pc3NpbmcgcmV0dXJuIGFuIGVycm9yXG4gICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIGl0IHdhcyBub3QgZm91bmQuXG4gICAgICAgICAgICBpZiAoIW1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9uIHdpdGggdGhlIHN0cmluZy5cbiAgICAgICAgICAgIHJldHVybiBtaWRkbGV3YXJlLnRyYW5zZm9ybShzdHJpbmcsIHRoaXMubG9jYWxlKTtcbiAgICAgICAgfSwgYCR7aW50ZXJwb2xhdGlvblZhbHVlfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFJlZmVyZW5jZXNJblRyYW5zbGF0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gR2V0IHRoZSByZWZlcmVuY2Ugc3Vic3RpdHV0aW9ucy5cbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygncmVmZXJlbmNlcycsIFsnIygnLCAnKSddKTtcblxuICAgICAgICAvLyBHZXQgYWxsIG1hdGNoZXMgaW4gdGhlIHZhbHVlLlxuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRNYXRjaGVzKHZhbHVlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGFsbCBtYXRjaGVzIHdpdGggdGhlIHRyYW5zbGF0ZWQgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byB0cmFuc2xhdGUgdGhlIHRva2VuLlxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRva2VuID0gdGhpcy50cmFuc2xhdGUoY3VycmVudC50b2tlbik7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG1hdGNoIHdpdGggdGhlIHRyYW5zbGF0ZWQgdG9rZW4uXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXMucmVwbGFjZShjdXJyZW50Lm1hdGNoLCB0cmFuc2xhdGVkVG9rZW4pO1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzdGl0dXRpb25zKHR5cGU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gKHRoaXMuX2NvbmZpZ1xuICAgICAgICAgICAgJiYgdGhpcy5fY29uZmlnLnN1YnN0aXR1dGlvbnNcbiAgICAgICAgICAgICYmIHRoaXMuX2NvbmZpZy5zdWJzdGl0dXRpb25zW3R5cGVdKTtcblxuICAgICAgICAvLyBHZXQgdGhlIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKCFzdWJzdGl0dXRpb25zIHx8IHN1YnN0aXR1dGlvbnMubGVuZ3RoICE9PSAyKVxuICAgICAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIDogc3Vic3RpdHV0aW9ucztcblxuICAgICAgICAvLyBFc2NhcGUgYm90aCBzdWJzdGl0dXRpb25zIHNvIHRoYXQgdGhleVxuICAgICAgICAvLyBjYW4gYmUgdXNlZC5cbiAgICAgICAgY29uc3QgZXNjYXBlID0gL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nO1xuICAgICAgICBjb25zdCBzdGFydCA9IHZhbHVlWzBdLnJlcGxhY2UoZXNjYXBlLCAnXFxcXCQmJyk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHZhbHVlWzFdLnJlcGxhY2UoZXNjYXBlLCAnXFxcXCQmJyk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzdWJzdGl0dXRpb25zLlxuICAgICAgICByZXR1cm4ge3N0YXJ0LCBlbmR9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cmlldmVCZXN0TWF0Y2hpbmdEaWN0aW9uYXJ5KCkge1xuICAgICAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgYmFzZWQgb24gc3RvcmFnZS5cbiAgICAgICAgY29uc3Qgc3RvcmFnZURpY3Rpb25hcnkgPSB0aGlzLmdldERpY3Rpb25hcnlGcm9tU3RvcmFnZSgpO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZGljdGlvbmFyeSBiYXNlZCBvbiB0aGUgc3VwcG9ydGVkIGxhbmd1YWdlLlxuICAgICAgICBjb25zdCBicm93c2VyRGljdGlvbmFyeSA9IHRoaXMuZ2V0QmVzdEJyb3dzZXJNYXRjaERpY3Rpb25hcnkoKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIGZpcnN0IGluZGV4LlxuICAgICAgICBjb25zdCBmaXJzdERpY3Rpb25hcnkgPSB0aGlzLl9kaWN0aW9uYXJpZXNbMF07XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBiZXN0IG1hdGNoaW5nIGRpY3Rpb25hcnkuXG4gICAgICAgIHJldHVybiBzdG9yYWdlRGljdGlvbmFyeSB8fCBicm93c2VyRGljdGlvbmFyeSB8fCBmaXJzdERpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREaWN0aW9uYXJ5RnJvbVN0b3JhZ2UoKSB7XG4gICAgICAgIC8vIEdldCBkaWN0aW9uYXJ5IGlkIGZyb20gdGhlIHN0b3JhZ2UuLlxuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5SWQgPSB0aGlzLl9zdG9yYWdlLmNvb2tpZS5nZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4pO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgZGljdGlvbmFyeSBiYXNlZCBvbiB0aGUgc3RvcmFnZSBkaWN0aW9uYXJ5IGlkLlxuICAgICAgICByZXR1cm4gdGhpcy5fZGljdGlvbmFyaWVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBkaWN0aW9uYXJ5SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmVzdEJyb3dzZXJNYXRjaERpY3Rpb25hcnkoKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgYnJvd3NlciBsYW5ndWFnZXMgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gYmVzdCBtYXRjaGluZyBkaWN0aW9uYXJ5LlxuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VzLmFsbC5tYXAoKHtjb2RlLCByZWdpb259KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBbY29kZSwgcmVnaW9uXS5maWx0ZXIoZGF0YSA9PiAhIWRhdGEpLmpvaW4oJy0nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcmllcy5maW5kKGl0ZW0gPT4gaXRlbS5zdXBwb3J0ZWRMYW5ndWFnZXMuaW5jbHVkZXMobGFuZ3VhZ2VDb2RlKSk7XG4gICAgICAgIH0pLmZpbHRlcihpdGVtID0+ICEhaXRlbSkuZmluZCgoXywgaW5kZXgpID0+IGluZGV4ID09PSAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb1BhcmFtcyA9ICh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuT3JQYXJhbXMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBEZXN0cnVjdCB0aGUgcGFyYW1zIGZyb20gdGhlIG9iamVjdC5cbiAgICAgICAgICAgIGNvbnN0IHt0b2tlbiwgb3B0aW9uYWwsIGRhdGF9ID0gdG9rZW5PclBhcmFtcztcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGFsbCBwYXJhbWV0ZXJzIGFyZSB2YWxpZFxuICAgICAgICAgICAgLy8gYnkgdHlwZSBzYWZlIGFkZGluZyB0aGVtLlxuICAgICAgICAgICAgcmV0dXJuIHt0b2tlbjogdG9rZW4sIG9wdGlvbmFsOiBvcHRpb25hbCB8fCBmYWxzZSwgZGF0YTogZGF0YSB8fCB7fX07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgc3RyaW5nIGZpbGwgaW4gdGhlIGJsYW5rcy5cbiAgICAgICAgcmV0dXJuIHt0b2tlbjogdG9rZW5PclBhcmFtcywgb3B0aW9uYWw6IGZhbHNlLCBkYXRhOiB7fX07XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZChkaWN0aW9uYXJ5OiBMb2NhbGl6ZURpY3Rpb25hcnkpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX3N0YXRlPy5oYXNLZXkoZGljdGlvbmFyeS5zdGF0ZUtleSlcbiAgICAgICAgICAgID8gdGhpcy5fc3RhdGU/LmdldChkaWN0aW9uYXJ5LnN0YXRlS2V5LCB7fSlcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAvLyBUcnkgdG8gbG9hZCB0aGUgZGljdGlvbmFyeSBkYXRhLlxuICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBkaWN0aW9uYXJ5LmxvYWQoZGF0YSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHRoZSBkYXRhIHdhcyBsb2FkZWQuXG4gICAgICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvY2FsaXplOiBDb3VsZCBub3QgY29ycmVjdGx5IGZldGNoIHRoZSBkYXRhIGZyb206IFwiJHtkaWN0aW9uYXJ5LmlkfVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciAmJiB0aGlzLl9zdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGU/LnNldDxvYmplY3Q+KGRpY3Rpb25hcnk/LnN0YXRlS2V5LCBkaWN0aW9uYXJ5Py5kYXRhID8/IHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbWJpbmUgdGhlIGV4dHJhIGRpY3Rpb25hcnkgZGF0YS5cbiAgICAgICAgKHRoaXMuX2V4dHJhcyB8fCBbXSkuZm9yRWFjaChleHRyYURpY3Rpb25hcnkgPT4gZGljdGlvbmFyeS5jb21iaW5lKGV4dHJhRGljdGlvbmFyeSkpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJEb2N1bWVudExhbmd1YWdlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQ/LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50LmxhbmcgPSB0aGlzLl9jdXJyZW50RGljdGlvbmFyeT8uc3VwcG9ydGVkTGFuZ3VhZ2VzPy5bMF0gPz8gdGhpcy5fY3VycmVudERpY3Rpb25hcnk/LmxvY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1hdGNoZXMgPSAodmFsdWU6IHN0cmluZywgc3Vic3RpdHV0aW9uczogeyBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIC8vIEdldCB0aGUgbWF0Y2hpbmcgc3Vic3RpdHV0aW9ucy5cbiAgICAgICAgY29uc3Qge3N0YXJ0LCBlbmR9ID0gc3Vic3RpdHV0aW9ucztcblxuICAgICAgICAvLyBDb21wb3NlIGEgcmVnZXggdGhhdCB3aWxsIGZpbmQgdGhlIG1hdGNoZXMuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtzdGFydH0oW14ke2VuZH1dKykke2VuZH1gLCAnZycpO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHJlZ2V4IHRvIGZpbmQgbWF0Y2hlcy5cbiAgICAgICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcblxuICAgICAgICB3aGlsZSAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFB1c2ggYSBuZXcgbWF0Y2guXG4gICAgICAgICAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG1hdGNoOiBtYXRjaFswXSxcbiAgICAgICAgICAgICAgICB0b2tlbjogbWF0Y2hbMV1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBtb3JlIG1hdGNoZXMuXG4gICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihpdGVtID0+ICEhaXRlbSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVsb2FkID0gKCkgPT4gdGhpcy5fbG9jYXRpb24/LnJlbG9hZCgpO1xuXG59XG4iXX0=
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChildren, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { BbLocalizeTemplate } from '../localize-template.directive';
|
|
3
|
-
import { startWith } from 'rxjs/operators';
|
|
4
|
-
import { Subscription } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
import * as i2 from "../localize-template-or-string.directive";
|
|
8
|
-
export class BbLocalizeString {
|
|
9
|
-
constructor(_changeDetection) {
|
|
10
|
-
this._changeDetection = _changeDetection;
|
|
11
|
-
// Inputs.
|
|
12
|
-
this.substitutions = ['[', ']'];
|
|
13
|
-
// Data.
|
|
14
|
-
this.components = [];
|
|
15
|
-
// Subscriptions.
|
|
16
|
-
this._subscription = new Subscription();
|
|
17
|
-
// State.
|
|
18
|
-
this._value = null;
|
|
19
|
-
}
|
|
20
|
-
set value(value) {
|
|
21
|
-
this._value = value;
|
|
22
|
-
this.revalidate();
|
|
23
|
-
}
|
|
24
|
-
get value() {
|
|
25
|
-
return this._value;
|
|
26
|
-
}
|
|
27
|
-
ngAfterViewInit() {
|
|
28
|
-
this.observeItemChanges();
|
|
29
|
-
}
|
|
30
|
-
ngOnDestroy() {
|
|
31
|
-
var _a;
|
|
32
|
-
(_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
33
|
-
}
|
|
34
|
-
observeItemChanges() {
|
|
35
|
-
const subscription = this.items.changes.pipe(startWith(0)).subscribe(() => this.revalidate());
|
|
36
|
-
this._subscription.add(subscription);
|
|
37
|
-
}
|
|
38
|
-
revalidate() {
|
|
39
|
-
var _a, _b;
|
|
40
|
-
const items = (_b = (_a = this.items) === null || _a === void 0 ? void 0 : _a.toArray()) !== null && _b !== void 0 ? _b : [];
|
|
41
|
-
if (items.length <= 0) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
this.setComponents(items);
|
|
45
|
-
}
|
|
46
|
-
setComponents(items) {
|
|
47
|
-
const [start, end] = this.substitutions;
|
|
48
|
-
const templates = items.reduce((previous, current) => {
|
|
49
|
-
var _a, _b;
|
|
50
|
-
const template = (_a = current === null || current === void 0 ? void 0 : current.templateRef) !== null && _a !== void 0 ? _a : null;
|
|
51
|
-
const name = (_b = current === null || current === void 0 ? void 0 : current.name) !== null && _b !== void 0 ? _b : null;
|
|
52
|
-
if (!template || !name) {
|
|
53
|
-
return previous;
|
|
54
|
-
}
|
|
55
|
-
return Object.assign(Object.assign({}, previous), { [`${start}${name}${end}`]: template });
|
|
56
|
-
}, {});
|
|
57
|
-
this.components = this.getStringComponents(this._value)
|
|
58
|
-
.map(component => { var _a, _b; return (_b = (_a = templates === null || templates === void 0 ? void 0 : templates[component]) !== null && _a !== void 0 ? _a : component) !== null && _b !== void 0 ? _b : null; })
|
|
59
|
-
.filter(item => !!item);
|
|
60
|
-
this._changeDetection.detectChanges();
|
|
61
|
-
}
|
|
62
|
-
getStringComponents(value) {
|
|
63
|
-
const [start, end] = this.getSubstitutions();
|
|
64
|
-
const regex = new RegExp(`(${start}[a-zA-Z]+${end})`, 'g');
|
|
65
|
-
return value.split(regex);
|
|
66
|
-
}
|
|
67
|
-
getSubstitutions() {
|
|
68
|
-
const [start, end] = this.substitutions;
|
|
69
|
-
const escape = /[.*+?^${}()|[\]\\]/g;
|
|
70
|
-
return [
|
|
71
|
-
start.replace(escape, '\\$&'),
|
|
72
|
-
end.replace(escape, '\\$&')
|
|
73
|
-
];
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
BbLocalizeString.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbLocalizeString, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
-
BbLocalizeString.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.11", type: BbLocalizeString, selector: "bb-localize-string", inputs: { substitutions: "substitutions", value: "value" }, host: { classAttribute: "bb-localize-string" }, queries: [{ propertyName: "items", predicate: BbLocalizeTemplate }], ngImport: i0, template: "<ng-container *ngFor=\"let component of components\">\n <ng-template [bbLocalizeTemplateOrString]=\"component\">{{ component }}</ng-template>\n</ng-container>\n", styles: [".bb-localize-string{display:inline}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.BbLocalizeTemplateOrString, selector: "[bbLocalizeTemplateOrString]", inputs: ["bbLocalizeTemplateOrString"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbLocalizeString, decorators: [{
|
|
79
|
-
type: Component,
|
|
80
|
-
args: [{
|
|
81
|
-
selector: 'bb-localize-string',
|
|
82
|
-
templateUrl: './localize-string.component.html',
|
|
83
|
-
styleUrls: ['./localize-string.component.scss'],
|
|
84
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
85
|
-
encapsulation: ViewEncapsulation.None,
|
|
86
|
-
preserveWhitespaces: false,
|
|
87
|
-
host: {
|
|
88
|
-
'class': 'bb-localize-string'
|
|
89
|
-
}
|
|
90
|
-
}]
|
|
91
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
|
|
92
|
-
type: ContentChildren,
|
|
93
|
-
args: [BbLocalizeTemplate]
|
|
94
|
-
}], substitutions: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], value: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi92aWV3cy9sb2NhbGl6ZS1zdHJpbmcvbG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi92aWV3cy9sb2NhbGl6ZS1zdHJpbmcvbG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixLQUFLLEVBSUwsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBYWxDLE1BQU0sT0FBTyxnQkFBZ0I7SUEyQnpCLFlBQW9CLGdCQUFtQztRQUFuQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBdEJ2RCxVQUFVO1FBQ0Qsa0JBQWEsR0FBcUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEQsUUFBUTtRQUNSLGVBQVUsR0FBa0MsRUFBRSxDQUFDO1FBRS9DLGlCQUFpQjtRQUNULGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQyxTQUFTO1FBQ0QsV0FBTSxHQUFrQixJQUFJLENBQUM7SUFhckMsQ0FBQztJQVhELElBQ0ksS0FBSyxDQUFDLEtBQW9CO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFV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QU0sQ0FBQztZQUM3QixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FDOUIsQ0FBQztJQUNOLENBQUM7OzhHQXpGUSxnQkFBZ0I7a0dBQWhCLGdCQUFnQiw0TEFHUixrQkFBa0IsNkJDOUJ2QyxxS0FHQTs0RkR3QmEsZ0JBQWdCO2tCQVg1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO29CQUMvQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLElBQUksRUFBRTt3QkFDRixPQUFPLEVBQUUsb0JBQW9CO3FCQUNoQztpQkFDSjt3R0FJd0MsS0FBSztzQkFBekMsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBRzFCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBWUYsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmJMb2NhbGl6ZVRlbXBsYXRlfSBmcm9tICcuLi9sb2NhbGl6ZS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYi1sb2NhbGl6ZS1zdHJpbmcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2NhbGl6ZS1zdHJpbmcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xvY2FsaXplLXN0cmluZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnYmItbG9jYWxpemUtc3RyaW5nJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQmJMb2NhbGl6ZVN0cmluZyBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBDb250ZW50IGNoaWxkcmVuLlxuICAgIEBDb250ZW50Q2hpbGRyZW4oQmJMb2NhbGl6ZVRlbXBsYXRlKSBpdGVtcz86IFF1ZXJ5TGlzdDxCYkxvY2FsaXplVGVtcGxhdGU+O1xuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIHN1YnN0aXR1dGlvbnM6IFtzdHJpbmcsIHN0cmluZ10gPSBbJ1snLCAnXSddO1xuXG4gICAgLy8gRGF0YS5cbiAgICBjb21wb25lbnRzOiAoc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PilbXSA9IFtdO1xuXG4gICAgLy8gU3Vic2NyaXB0aW9ucy5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBTdGF0ZS5cbiAgICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJldmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLm9ic2VydmVJdGVtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlSXRlbUNoYW5nZXMoKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKDApXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmV2YWxpZGF0ZSgpKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXZhbGlkYXRlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM/LnRvQXJyYXkoKSA/PyBbXTtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldENvbXBvbmVudHMoaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tcG9uZW50cyhpdGVtczogQmJMb2NhbGl6ZVRlbXBsYXRlW10pIHtcbiAgICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGhpcy5zdWJzdGl0dXRpb25zO1xuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGl0ZW1zLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gY3VycmVudD8udGVtcGxhdGVSZWYgPz8gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjdXJyZW50Py5uYW1lID8/IG51bGw7XG4gICAgICAgICAgICBpZiAoIXRlbXBsYXRlIHx8ICFuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gey4uLnByZXZpb3VzLCBbYCR7c3RhcnR9JHtuYW1lfSR7ZW5kfWBdOiB0ZW1wbGF0ZX07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSB0aGlzLmdldFN0cmluZ0NvbXBvbmVudHModGhpcy5fdmFsdWUpXG4gICAgICAgICAgICAubWFwKGNvbXBvbmVudCA9PiB0ZW1wbGF0ZXM/Lltjb21wb25lbnRdID8/IGNvbXBvbmVudCA/PyBudWxsKVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0cmluZ0NvbXBvbmVudHModmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKTtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtzdGFydH1bYS16QS1aXSske2VuZH0pYCwgJ2cnKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KHJlZ2V4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnN0aXR1dGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuc3Vic3RpdHV0aW9ucztcbiAgICAgICAgY29uc3QgZXNjYXBlID0gL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzdGFydC5yZXBsYWNlKGVzY2FwZSwgJ1xcXFwkJicpLFxuICAgICAgICAgICAgZW5kLnJlcGxhY2UoZXNjYXBlLCAnXFxcXCQmJylcbiAgICAgICAgXTtcbiAgICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtiYkxvY2FsaXplVGVtcGxhdGVPclN0cmluZ109XCJjb21wb25lbnRcIj57eyBjb21wb25lbnQgfX08L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|