ngx-edu-sharing-ui 0.7.0 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/scss/mixins.scss +4 -1
- package/assets/scss/variables.scss +3 -0
- package/esm2022/lib/actionbar/actionbar.component.mjs +188 -0
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +134 -0
- package/esm2022/lib/directives/border-box-observer.directive.mjs +71 -0
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +65 -0
- package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +14 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +79 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +49 -0
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +105 -0
- package/esm2022/lib/directives/focus-state.directive.mjs +44 -0
- package/esm2022/lib/directives/icon.directive.mjs +139 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +70 -0
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +41 -0
- package/esm2022/lib/edu-sharing-ui.module.mjs +78 -0
- package/esm2022/lib/list-items/available-widgets.mjs +27 -0
- package/esm2022/lib/list-items/format-duration.pipe.mjs +20 -0
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +46 -0
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +29 -0
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +54 -0
- package/esm2022/lib/list-items/list-items.module.mjs +50 -0
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +41 -0
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +47 -0
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +24 -0
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +106 -0
- package/esm2022/lib/list-items/list-widget.mjs +49 -0
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +24 -0
- package/esm2022/lib/list-items/node-source.pipe.mjs +49 -0
- package/esm2022/lib/node-entries/combined-data-source.mjs +41 -0
- package/esm2022/lib/node-entries/custom-templates-data-source.mjs +7 -0
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +21 -0
- package/esm2022/lib/node-entries/entries-model.mjs +23 -0
- package/esm2022/lib/node-entries/items-cap.mjs +47 -0
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +34 -0
- package/esm2022/lib/node-entries/node-cache.mjs +65 -0
- package/esm2022/lib/node-entries/node-data-source-remote.mjs +4 -0
- package/esm2022/lib/node-entries/node-data-source.mjs +115 -0
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +131 -0
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +307 -0
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +45 -0
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +23 -0
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +58 -0
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +42 -0
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +290 -0
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +11 -0
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +324 -0
- package/esm2022/lib/node-entries/node-entries.component.mjs +131 -0
- package/esm2022/lib/node-entries/node-entries.module.mjs +161 -0
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +102 -0
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +48 -0
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +36 -0
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +62 -0
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +53 -0
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +41 -0
- package/esm2022/lib/node-url/node-url.component.mjs +128 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +31 -0
- package/esm2022/lib/pipes/format-date.pipe.mjs +38 -0
- package/esm2022/lib/pipes/node-icon.pipe.mjs +18 -0
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +24 -0
- package/esm2022/lib/pipes/node-image.pipe.mjs +55 -0
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +50 -0
- package/esm2022/lib/pipes/node-title.pipe.mjs +19 -0
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +33 -0
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +29 -0
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +19 -0
- package/esm2022/lib/services/abstract/app.service.mjs +3 -0
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +10 -0
- package/esm2022/lib/services/abstract/options-helper.service.mjs +3 -0
- package/esm2022/lib/services/abstract/toast.service.mjs +3 -0
- package/esm2022/lib/services/accessibility.service.mjs +73 -0
- package/esm2022/lib/services/local-events.service.mjs +36 -0
- package/esm2022/lib/services/node-entries.service.mjs +137 -0
- package/esm2022/lib/services/node-helper.service.mjs +234 -0
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +155 -0
- package/esm2022/lib/services/options-helper-data.service.mjs +134 -0
- package/esm2022/lib/services/repo-url.service.mjs +49 -0
- package/esm2022/lib/services/temporary-storage.service.mjs +48 -0
- package/esm2022/lib/services/ui.service.mjs +162 -0
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +50 -0
- package/esm2022/lib/spinner/spinner.component.mjs +18 -0
- package/esm2022/lib/translations/fallback-translation-handler.mjs +6 -0
- package/esm2022/lib/translations/languages.mjs +5 -0
- package/esm2022/lib/translations/translation-loader.mjs +149 -0
- package/esm2022/lib/translations/translation-source.mjs +11 -0
- package/esm2022/lib/translations/translations.module.mjs +67 -0
- package/esm2022/lib/translations/translations.service.mjs +171 -0
- package/esm2022/lib/types/accessibillity.mjs +19 -0
- package/esm2022/lib/types/api-models.mjs +2 -0
- package/esm2022/lib/types/drag-drop.mjs +2 -0
- package/esm2022/lib/types/keyboard-shortcuts.mjs +11 -0
- package/esm2022/lib/types/list-item.mjs +41 -0
- package/esm2022/lib/types/option-item.mjs +174 -0
- package/esm2022/lib/types/workflow.mjs +25 -0
- package/esm2022/lib/util/DateHelper.mjs +200 -0
- package/esm2022/lib/util/VCard.mjs +278 -0
- package/esm2022/lib/util/color-helper.mjs +124 -0
- package/esm2022/lib/util/duration-helper.mjs +102 -0
- package/esm2022/lib/util/functions.mjs +13 -0
- package/esm2022/lib/util/helper.mjs +64 -0
- package/esm2022/lib/util/isNumeric.mjs +11 -0
- package/esm2022/lib/util/rest-helper.mjs +33 -0
- package/esm2022/lib/util/ui-animation.mjs +146 -0
- package/esm2022/lib/util/ui-constants.mjs +21 -0
- package/esm2022/module.mjs +76 -0
- package/esm2022/ngx-edu-sharing-ui.mjs +5 -0
- package/fesm2022/ngx-edu-sharing-ui.mjs +6509 -0
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/actionbar/actionbar.component.d.ts +74 -0
- package/lib/common/edu-sharing-ui-common.module.d.ts +32 -0
- package/lib/directives/border-box-observer.directive.d.ts +31 -0
- package/lib/directives/check-text-overflow.directive.d.ts +20 -0
- package/lib/directives/drag-nodes/drag-nodes.d.ts +16 -0
- package/lib/directives/drag-nodes/nodes-drag-source.directive.d.ts +37 -0
- package/lib/directives/drag-nodes/nodes-drag.directive.d.ts +17 -0
- package/lib/directives/drag-nodes/nodes-drop-target.directive.d.ts +22 -0
- package/lib/directives/focus-state.directive.d.ts +14 -0
- package/lib/directives/icon.directive.d.ts +46 -0
- package/lib/dropdown/dropdown.component.d.ts +40 -0
- package/lib/edu-sharing-ui-configuration.d.ts +11 -0
- package/lib/edu-sharing-ui.module.d.ts +19 -0
- package/lib/list-items/available-widgets.d.ts +13 -0
- package/lib/list-items/format-duration.pipe.d.ts +10 -0
- package/lib/list-items/list-base/list-base.component.d.ts +18 -0
- package/lib/list-items/list-collection-info/list-collection-info.component.d.ts +14 -0
- package/lib/list-items/list-counts/list-counts.component.d.ts +13 -0
- package/lib/list-items/list-items.module.d.ts +20 -0
- package/lib/list-items/list-node-license/list-node-license.component.d.ts +20 -0
- package/lib/list-items/list-node-replication-source/list-node-replication-source.component.d.ts +22 -0
- package/lib/list-items/list-node-workflow/list-node-workflow.component.d.ts +12 -0
- package/lib/list-items/list-text/list-text.component.d.ts +28 -0
- package/lib/list-items/list-widget.d.ts +32 -0
- package/lib/list-items/node-row/node-row.component.d.ts +12 -0
- package/lib/list-items/node-source.pipe.d.ts +16 -0
- package/lib/node-entries/combined-data-source.d.ts +19 -0
- package/{src/lib/node-entries/custom-templates-data-source.ts → lib/node-entries/custom-templates-data-source.d.ts} +2 -2
- package/lib/node-entries/drag-preview/drag-preview.component.d.ts +11 -0
- package/{src/lib/node-entries/entries-model.ts → lib/node-entries/entries-model.d.ts} +19 -47
- package/lib/node-entries/items-cap.d.ts +17 -0
- package/lib/node-entries/list-item-label.pipe.d.ts +14 -0
- package/lib/node-entries/node-cache.d.ts +17 -0
- package/{src/lib/node-entries/node-data-source-remote.ts → lib/node-entries/node-data-source-remote.d.ts} +2 -12
- package/lib/node-entries/node-data-source.d.ts +42 -0
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +45 -0
- package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +92 -0
- package/lib/node-entries/node-entries-card-small/node-entries-card-small.component.d.ts +23 -0
- package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +12 -0
- package/lib/node-entries/node-entries-global.service.d.ts +50 -0
- package/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.d.ts +17 -0
- package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +76 -0
- package/{src/lib/node-entries/node-entries-templates.service.ts → lib/node-entries/node-entries-templates.service.d.ts} +6 -9
- package/lib/node-entries/node-entries-wrapper.component.d.ts +129 -0
- package/lib/node-entries/node-entries.component.d.ts +32 -0
- package/lib/node-entries/node-entries.module.d.ts +43 -0
- package/lib/node-entries/node-rating/node-rating.component.d.ts +26 -0
- package/lib/node-entries/node-stats-badges/node-stats-badges.component.d.ts +17 -0
- package/lib/node-entries/node-type-badge/node-type-badge.component.d.ts +21 -0
- package/lib/node-entries/option-button/option-button.component.d.ts +11 -0
- package/lib/node-entries/preview-image/preview-image.component.d.ts +22 -0
- package/lib/node-entries/sort-select-panel/sort-select-panel.component.d.ts +16 -0
- package/lib/node-url/node-url.component.d.ts +51 -0
- package/lib/pipes/file-size.pipe.d.ts +10 -0
- package/lib/pipes/format-date.pipe.d.ts +21 -0
- package/lib/pipes/node-icon.pipe.d.ts +11 -0
- package/lib/pipes/node-image-size.pipe.d.ts +8 -0
- package/lib/pipes/node-image.pipe.d.ts +28 -0
- package/lib/pipes/node-person-name.pipe.d.ts +10 -0
- package/lib/pipes/node-title.pipe.d.ts +11 -0
- package/lib/pipes/option-tooltip.pipe.d.ts +12 -0
- package/lib/pipes/replace-chars.pipe.d.ts +10 -0
- package/lib/pipes/vcard-name.pipe.d.ts +10 -0
- package/{src/lib/services/abstract/app.service.ts → lib/services/abstract/app.service.d.ts} +1 -1
- package/lib/services/abstract/keyboard-shortcuts.service.d.ts +11 -0
- package/lib/services/abstract/options-helper.service.d.ts +10 -0
- package/{src/lib/services/abstract/toast.service.ts → lib/services/abstract/toast.service.d.ts} +1 -2
- package/lib/services/accessibility.service.d.ts +18 -0
- package/{src/lib/services/local-events.service.ts → lib/services/local-events.service.d.ts} +7 -10
- package/lib/services/node-entries.service.d.ts +69 -0
- package/lib/services/node-helper.service.d.ts +56 -0
- package/lib/services/nodes-drag-drop.service.d.ts +41 -0
- package/lib/services/options-helper-data.service.d.ts +75 -0
- package/lib/services/repo-url.service.d.ts +25 -0
- package/lib/services/temporary-storage.service.d.ts +35 -0
- package/lib/services/ui.service.d.ts +41 -0
- package/lib/sort-dropdown/sort-dropdown.component.d.ts +15 -0
- package/lib/spinner/spinner.component.d.ts +7 -0
- package/lib/translations/fallback-translation-handler.d.ts +4 -0
- package/lib/translations/languages.d.ts +4 -0
- package/lib/translations/translation-loader.d.ts +51 -0
- package/{src/lib/translations/translation-source.ts → lib/translations/translation-source.d.ts} +4 -4
- package/lib/translations/translations.module.d.ts +15 -0
- package/lib/translations/translations.service.d.ts +30 -0
- package/lib/types/accessibillity.d.ts +15 -0
- package/{src/lib/types/drag-drop.ts → lib/types/drag-drop.d.ts} +0 -3
- package/lib/types/keyboard-shortcuts.d.ts +10 -0
- package/lib/types/list-item.d.ts +55 -0
- package/lib/types/option-item.d.ts +236 -0
- package/lib/types/workflow.d.ts +14 -0
- package/lib/util/DateHelper.d.ts +44 -0
- package/lib/util/VCard.d.ts +66 -0
- package/lib/util/color-helper.d.ts +25 -0
- package/lib/util/duration-helper.d.ts +14 -0
- package/lib/util/functions.d.ts +4 -0
- package/lib/util/helper.d.ts +20 -0
- package/lib/util/isNumeric.d.ts +5 -0
- package/lib/util/rest-helper.d.ts +10 -0
- package/lib/util/ui-animation.d.ts +39 -0
- package/lib/util/ui-constants.d.ts +18 -0
- package/{src/module.ts → module.d.ts} +0 -4
- package/package.json +23 -9
- package/.browserslistrc +0 -16
- package/.eslintrc.json +0 -44
- package/karma.conf.js +0 -42
- package/ng-package.json +0 -10
- package/src/lib/actionbar/actionbar.component.html +0 -59
- package/src/lib/actionbar/actionbar.component.scss +0 -123
- package/src/lib/actionbar/actionbar.component.ts +0 -174
- package/src/lib/common/edu-sharing-ui-common.module.ts +0 -80
- package/src/lib/directives/border-box-observer.directive.ts +0 -75
- package/src/lib/directives/check-text-overflow.directive.ts +0 -61
- package/src/lib/directives/drag-nodes/drag-nodes.ts +0 -32
- package/src/lib/directives/drag-nodes/nodes-drag-source.directive.ts +0 -79
- package/src/lib/directives/drag-nodes/nodes-drag.directive.ts +0 -43
- package/src/lib/directives/drag-nodes/nodes-drop-target.directive.ts +0 -116
- package/src/lib/directives/focus-state.directive.ts +0 -34
- package/src/lib/directives/icon.directive.ts +0 -142
- package/src/lib/directives/nodes-drop-target-legacy.directive.ts +0 -155
- package/src/lib/dropdown/dropdown.component.html +0 -32
- package/src/lib/dropdown/dropdown.component.scss +0 -67
- package/src/lib/dropdown/dropdown.component.ts +0 -71
- package/src/lib/edu-sharing-ui-configuration.ts +0 -47
- package/src/lib/edu-sharing-ui.module.ts +0 -49
- package/src/lib/list-items/available-widgets.ts +0 -30
- package/src/lib/list-items/format-duration.pipe.ts +0 -17
- package/src/lib/list-items/list-base/list-base.component.html +0 -52
- package/src/lib/list-items/list-base/list-base.component.ts +0 -44
- package/src/lib/list-items/list-collection-info/list-collection-info.component.html +0 -48
- package/src/lib/list-items/list-collection-info/list-collection-info.component.scss +0 -8
- package/src/lib/list-items/list-collection-info/list-collection-info.component.ts +0 -24
- package/src/lib/list-items/list-counts/list-counts.component.html +0 -1
- package/src/lib/list-items/list-counts/list-counts.component.scss +0 -3
- package/src/lib/list-items/list-counts/list-counts.component.ts +0 -59
- package/src/lib/list-items/list-items.module.ts +0 -33
- package/src/lib/list-items/list-node-license/list-node-license.component.html +0 -8
- package/src/lib/list-items/list-node-license/list-node-license.component.ts +0 -47
- package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.html +0 -11
- package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.ts +0 -60
- package/src/lib/list-items/list-node-workflow/list-node-workflow.component.html +0 -3
- package/src/lib/list-items/list-node-workflow/list-node-workflow.component.ts +0 -21
- package/src/lib/list-items/list-text/list-text.component.html +0 -176
- package/src/lib/list-items/list-text/list-text.component.scss +0 -3
- package/src/lib/list-items/list-text/list-text.component.ts +0 -107
- package/src/lib/list-items/list-widget.ts +0 -52
- package/src/lib/list-items/node-row/node-row.component.html +0 -31
- package/src/lib/list-items/node-row/node-row.component.scss +0 -50
- package/src/lib/list-items/node-row/node-row.component.ts +0 -16
- package/src/lib/list-items/node-source.pipe.ts +0 -48
- package/src/lib/node-entries/combined-data-source.ts +0 -51
- package/src/lib/node-entries/drag-preview/drag-preview.component.html +0 -6
- package/src/lib/node-entries/drag-preview/drag-preview.component.scss +0 -35
- package/src/lib/node-entries/drag-preview/drag-preview.component.ts +0 -15
- package/src/lib/node-entries/items-cap.ts +0 -54
- package/src/lib/node-entries/list-item-label.pipe.ts +0 -28
- package/src/lib/node-entries/mixins.scss +0 -23
- package/src/lib/node-entries/node-cache.spec.ts +0 -199
- package/src/lib/node-entries/node-cache.ts +0 -81
- package/src/lib/node-entries/node-data-source.ts +0 -148
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.html +0 -167
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.scss +0 -28
- package/src/lib/node-entries/node-entries-card/node-entries-card.component.ts +0 -132
- package/src/lib/node-entries/node-entries-card/node-entries-card.main.scss +0 -261
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.html +0 -205
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.scss +0 -181
- package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.ts +0 -361
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.html +0 -100
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.scss +0 -46
- package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.ts +0 -40
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.html +0 -23
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.scss +0 -58
- package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.ts +0 -16
- package/src/lib/node-entries/node-entries-global.service.ts +0 -79
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.html +0 -25
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.scss +0 -32
- package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.ts +0 -31
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.html +0 -270
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.scss +0 -169
- package/src/lib/node-entries/node-entries-table/node-entries-table.component.ts +0 -333
- package/src/lib/node-entries/node-entries-wrapper.component.ts +0 -363
- package/src/lib/node-entries/node-entries.component.html +0 -33
- package/src/lib/node-entries/node-entries.component.scss +0 -13
- package/src/lib/node-entries/node-entries.component.ts +0 -151
- package/src/lib/node-entries/node-entries.module.ts +0 -93
- package/src/lib/node-entries/node-rating/node-rating.component.html +0 -53
- package/src/lib/node-entries/node-rating/node-rating.component.scss +0 -31
- package/src/lib/node-entries/node-rating/node-rating.component.ts +0 -105
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.html +0 -39
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.scss +0 -44
- package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.ts +0 -43
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.html +0 -31
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.scss +0 -5
- package/src/lib/node-entries/node-type-badge/node-type-badge.component.ts +0 -36
- package/src/lib/node-entries/option-button/option-button.component.ts +0 -42
- package/src/lib/node-entries/preview-image/preview-image.component.html +0 -19
- package/src/lib/node-entries/preview-image/preview-image.component.scss +0 -31
- package/src/lib/node-entries/preview-image/preview-image.component.ts +0 -47
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.html +0 -27
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.scss +0 -9
- package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.ts +0 -26
- package/src/lib/node-url/node-url.component.html +0 -66
- package/src/lib/node-url/node-url.component.scss +0 -32
- package/src/lib/node-url/node-url.component.ts +0 -136
- package/src/lib/pipes/file-size.pipe.ts +0 -24
- package/src/lib/pipes/format-date.pipe.ts +0 -39
- package/src/lib/pipes/node-icon.pipe.ts +0 -11
- package/src/lib/pipes/node-image-size.pipe.ts +0 -18
- package/src/lib/pipes/node-image.pipe.ts +0 -71
- package/src/lib/pipes/node-person-name.pipe.ts +0 -41
- package/src/lib/pipes/node-title.pipe.ts +0 -12
- package/src/lib/pipes/option-tooltip.pipe.ts +0 -32
- package/src/lib/pipes/replace-chars.pipe.ts +0 -21
- package/src/lib/pipes/vcard-name.pipe.ts +0 -11
- package/src/lib/services/abstract/keyboard-shortcuts.service.ts +0 -10
- package/src/lib/services/abstract/options-helper.service.ts +0 -29
- package/src/lib/services/accessibility.service.ts +0 -101
- package/src/lib/services/node-entries.service.ts +0 -172
- package/src/lib/services/node-helper.service.ts +0 -239
- package/src/lib/services/nodes-drag-drop.service.ts +0 -165
- package/src/lib/services/options-helper-data.service.ts +0 -186
- package/src/lib/services/repo-url.service.ts +0 -46
- package/src/lib/services/temporary-storage.service.ts +0 -58
- package/src/lib/services/ui.service.ts +0 -182
- package/src/lib/sort-dropdown/sort-dropdown.component.html +0 -22
- package/src/lib/sort-dropdown/sort-dropdown.component.scss +0 -47
- package/src/lib/sort-dropdown/sort-dropdown.component.ts +0 -42
- package/src/lib/spinner/spinner.component.html +0 -14
- package/src/lib/spinner/spinner.component.scss +0 -141
- package/src/lib/spinner/spinner.component.ts +0 -12
- package/src/lib/translations/README.md +0 -44
- package/src/lib/translations/fallback-translation-handler.ts +0 -7
- package/src/lib/translations/languages.ts +0 -6
- package/src/lib/translations/translation-loader.spec.ts +0 -352
- package/src/lib/translations/translation-loader.ts +0 -189
- package/src/lib/translations/translations.module.ts +0 -49
- package/src/lib/translations/translations.service.spec.ts +0 -152
- package/src/lib/translations/translations.service.ts +0 -188
- package/src/lib/types/accessibillity.ts +0 -15
- package/src/lib/types/keyboard-shortcuts.ts +0 -29
- package/src/lib/types/list-item.ts +0 -67
- package/src/lib/types/option-item.ts +0 -247
- package/src/lib/types/workflow.ts +0 -35
- package/src/lib/util/DateHelper.spec.ts +0 -112
- package/src/lib/util/DateHelper.ts +0 -197
- package/src/lib/util/VCard.ts +0 -277
- package/src/lib/util/color-helper.ts +0 -125
- package/src/lib/util/duration-helper.spec.ts +0 -35
- package/src/lib/util/duration-helper.ts +0 -98
- package/src/lib/util/functions.ts +0 -15
- package/src/lib/util/helper.ts +0 -60
- package/src/lib/util/isNumeric.ts +0 -13
- package/src/lib/util/rest-helper.ts +0 -28
- package/src/lib/util/ui-animation.ts +0 -154
- package/src/lib/util/ui-constants.ts +0 -20
- package/src/test.ts +0 -28
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- /package/{src/lib/types/api-models.ts → lib/types/api-models.d.ts} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Injectable, } from '@angular/core';
|
|
2
|
+
import * as rxjs from 'rxjs';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { UIConstants } from '../util/ui-constants';
|
|
5
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class UIService {
|
|
8
|
+
get shiftKeyPressed() {
|
|
9
|
+
return this.shiftKeyPressedSubject.value;
|
|
10
|
+
}
|
|
11
|
+
constructor(componentFactoryResolver, injector, ngZone) {
|
|
12
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
this.ngZone = ngZone;
|
|
15
|
+
this.isTouchSubject = new BehaviorSubject(false);
|
|
16
|
+
this.metaKeyPressedSubject = new BehaviorSubject(false);
|
|
17
|
+
this.shiftKeyPressedSubject = new BehaviorSubject(false);
|
|
18
|
+
this.ctrlKeyPressedSubject = new BehaviorSubject(false);
|
|
19
|
+
// HostListener not working, so use window
|
|
20
|
+
this.ngZone.runOutsideAngular(() => {
|
|
21
|
+
window.addEventListener('keydown', (event) => {
|
|
22
|
+
this.onKeyDownOrKeyUp(event);
|
|
23
|
+
});
|
|
24
|
+
window.addEventListener('keyup', (event) => {
|
|
25
|
+
this.onKeyDownOrKeyUp(event);
|
|
26
|
+
});
|
|
27
|
+
window.addEventListener('pointerdown', (event) => {
|
|
28
|
+
// Usually, properties for modifier keys will be set correctly on keydown and keyup
|
|
29
|
+
// events, but there are situations where the operating system intercepts key
|
|
30
|
+
// presses, e.g. the Windows key on Linux systems, so we update again on mouse
|
|
31
|
+
// clicks to be sure.
|
|
32
|
+
this.updateModifierKeys(event);
|
|
33
|
+
});
|
|
34
|
+
window.addEventListener('pointerdown', (event) => {
|
|
35
|
+
// Usually, properties for modifier keys will be set correctly on keydown and keyup
|
|
36
|
+
// events, but there are situations where the operating system intercepts key
|
|
37
|
+
// presses, e.g. the Windows key on Linux systems, so we update again on mouse
|
|
38
|
+
// clicks to be sure.
|
|
39
|
+
const isTouch = event.pointerType === 'touch';
|
|
40
|
+
if (this.isTouchSubject.value !== isTouch) {
|
|
41
|
+
this.ngZone.run(() => this.isTouchSubject.next(isTouch));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
onKeyDownOrKeyUp(event) {
|
|
47
|
+
// `event.metaKey` is not consistent across browsers on the actual keypress of the modifier
|
|
48
|
+
// key. So we handle these events separately.
|
|
49
|
+
if (event.key === 'Control') {
|
|
50
|
+
this.ctrlKeyPressedSubject.next(event.type === 'keydown');
|
|
51
|
+
}
|
|
52
|
+
else if (event.key === 'Shift') {
|
|
53
|
+
this.shiftKeyPressedSubject.next(event.type === 'keydown');
|
|
54
|
+
}
|
|
55
|
+
else if (event.key === 'Meta') {
|
|
56
|
+
this.metaKeyPressedSubject.next(event.type === 'keydown');
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// In case we miss modifier events because the browser didn't have focus during the
|
|
60
|
+
// event, we update modifier keys on unrelated key events as well.
|
|
61
|
+
this.updateModifierKeys(event);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
updateModifierKeys(event) {
|
|
65
|
+
this.metaKeyPressedSubject.next(event.metaKey);
|
|
66
|
+
this.shiftKeyPressedSubject.next(event.shiftKey);
|
|
67
|
+
this.ctrlKeyPressedSubject.next(event.ctrlKey);
|
|
68
|
+
}
|
|
69
|
+
observeCtrlOrCmdKeyPressedOutsideZone() {
|
|
70
|
+
return rxjs.combineLatest([this.metaKeyPressedSubject, this.ctrlKeyPressedSubject]).pipe(map(([metaKeyPressed, ctrlKeyPressed]) => metaKeyPressed || ctrlKeyPressed), distinctUntilChanged());
|
|
71
|
+
}
|
|
72
|
+
isMobile() {
|
|
73
|
+
return this.isTouchSubject.value;
|
|
74
|
+
}
|
|
75
|
+
static evaluateMediaQuery(type, value) {
|
|
76
|
+
if (type == UIConstants.MEDIA_QUERY_MAX_WIDTH)
|
|
77
|
+
return value > window.innerWidth;
|
|
78
|
+
if (type == UIConstants.MEDIA_QUERY_MIN_WIDTH)
|
|
79
|
+
return value < window.innerWidth;
|
|
80
|
+
if (type == UIConstants.MEDIA_QUERY_MAX_HEIGHT)
|
|
81
|
+
return value > window.innerHeight;
|
|
82
|
+
if (type == UIConstants.MEDIA_QUERY_MIN_HEIGHT)
|
|
83
|
+
return value < window.innerHeight;
|
|
84
|
+
console.warn('Unsupported media query ' + type);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
filterValidOptions(options) {
|
|
88
|
+
if (options == null)
|
|
89
|
+
return null;
|
|
90
|
+
options = options.filter((value) => value != null);
|
|
91
|
+
let optionsFiltered = [];
|
|
92
|
+
for (let option of options) {
|
|
93
|
+
if ((!option.onlyMobile || (option.onlyMobile && this.isMobile())) &&
|
|
94
|
+
(!option.onlyDesktop || (option.onlyDesktop && !this.isMobile())) &&
|
|
95
|
+
(!option.mediaQueryType ||
|
|
96
|
+
(option.mediaQueryType &&
|
|
97
|
+
UIService.evaluateMediaQuery(option.mediaQueryType, option.mediaQueryValue))))
|
|
98
|
+
optionsFiltered.push(option);
|
|
99
|
+
}
|
|
100
|
+
return optionsFiltered;
|
|
101
|
+
}
|
|
102
|
+
filterToggleOptions(options, toggle) {
|
|
103
|
+
let result = [];
|
|
104
|
+
for (let option of options) {
|
|
105
|
+
if (option.isToggle == toggle)
|
|
106
|
+
result.push(option);
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* dynamically inject an angular component into a regular html dom element
|
|
112
|
+
* @param componentFactoryResolver The resolver service
|
|
113
|
+
* @param viewContainerRef The viewContainerRef service
|
|
114
|
+
* @param componentName The name of the angular component (e.g. SpinnerComponent)
|
|
115
|
+
* @param targetElement The target element of the dom. If the element is null (not found), nothing is done
|
|
116
|
+
* @param bindings Optional bindings (inputs & outputs) to the given component
|
|
117
|
+
* @param delay Optional inflating delay in ms(some components may need some time to "init" the layout)
|
|
118
|
+
* @param replace Whether to replace to previous `innerHTML` of `targetElement`
|
|
119
|
+
* @param injector (to fetch templates for the component)
|
|
120
|
+
*/
|
|
121
|
+
injectAngularComponent(viewContainerRef, componentName, targetElement, bindings = null, { delay = 0, replace = true } = {}) {
|
|
122
|
+
if (targetElement == null) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const factory = this.componentFactoryResolver.resolveComponentFactory(componentName);
|
|
126
|
+
const component = viewContainerRef.createComponent(factory, undefined, this.injector);
|
|
127
|
+
if (bindings) {
|
|
128
|
+
const instance = component.instance;
|
|
129
|
+
for (const key in bindings) {
|
|
130
|
+
const binding = bindings[key];
|
|
131
|
+
if (binding instanceof Function) {
|
|
132
|
+
// subscribe so callback can properly invoked
|
|
133
|
+
instance[key].subscribe((value) => binding(value));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
instance[key] = binding;
|
|
137
|
+
// `ngOnChanges` won't be called on the component like this. Consider doing
|
|
138
|
+
// something like this:
|
|
139
|
+
// https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// 3. Get DOM element from component
|
|
144
|
+
const domElem = component.hostView.rootNodes[0];
|
|
145
|
+
domElem.style.display = 'none';
|
|
146
|
+
if (replace) {
|
|
147
|
+
targetElement.innerHTML = null;
|
|
148
|
+
}
|
|
149
|
+
targetElement.appendChild(domElem);
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
domElem.style.display = null;
|
|
152
|
+
}, delay);
|
|
153
|
+
return component;
|
|
154
|
+
}
|
|
155
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: UIService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
156
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: UIService, providedIn: 'root' }); }
|
|
157
|
+
}
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: UIService, decorators: [{
|
|
159
|
+
type: Injectable,
|
|
160
|
+
args: [{ providedIn: 'root' }]
|
|
161
|
+
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.NgZone }]; } });
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvc2VydmljZXMvdWkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxHQUtiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0QsTUFBTSxPQUFPLFNBQVM7SUFNbEIsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNjLHdCQUFrRCxFQUNsRCxRQUFrQixFQUNsQixNQUFjO1FBRmQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFacEIsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQVd2RCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dC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LENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU07b0JBQ0gsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDeEIsMkVBQTJFO29CQUMzRSx1QkFBdUI7b0JBQ3ZCLDhKQUE4SjtpQkFDaks7YUFDSjtTQUNKO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sT0FBTyxHQUFJLFNBQVMsQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDekYsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQy9CLElBQUksT0FBTyxFQUFFO1lBQ1QsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDbEM7UUFDRCxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1YsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs4R0FuS1EsU0FBUztrSEFBVCxTQUFTLGNBREksTUFBTTs7MkZBQ25CLFNBQVM7a0JBRHJCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVUlDb25zdGFudHMgfSBmcm9tICcuLi91dGlsL3VpLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBPcHRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVSVNlcnZpY2Uge1xuICAgIHByaXZhdGUgaXNUb3VjaFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwcml2YXRlIG1ldGFLZXlQcmVzc2VkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgc2hpZnRLZXlQcmVzc2VkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgY3RybEtleVByZXNzZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICBnZXQgc2hpZnRLZXlQcmVzc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlmdEtleVByZXNzZWRTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICApIHtcbiAgICAgICAgLy8gSG9zdExpc3RlbmVyIG5vdCB3b3JraW5nLCBzbyB1c2Ugd2luZG93XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleURvd25PcktleVVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleURvd25PcktleVVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSwgcHJvcGVydGllcyBmb3IgbW9kaWZpZXIga2V5cyB3aWxsIGJlIHNldCBjb3JyZWN0bHkgb24ga2V5ZG93biBhbmQga2V5dXBcbiAgICAgICAgICAgICAgICAvLyBldmVudHMsIGJ1dCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmNlcHRzIGtleVxuICAgICAgICAgICAgICAgIC8vIHByZXNzZXMsIGUuZy4gdGhlIFdpbmRvd3Mga2V5IG9uIExpbnV4IHN5c3RlbXMsIHNvIHdlIHVwZGF0ZSBhZ2FpbiBvbiBtb3VzZVxuICAgICAgICAgICAgICAgIC8vIGNsaWNrcyB0byBiZSBzdXJlLlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSwgcHJvcGVydGllcyBmb3IgbW9kaWZpZXIga2V5cyB3aWxsIGJlIHNldCBjb3JyZWN0bHkgb24ga2V5ZG93biBhbmQga2V5dXBcbiAgICAgICAgICAgICAgICAvLyBldmVudHMsIGJ1dCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmNlcHRzIGtleVxuICAgICAgICAgICAgICAgIC8vIHByZXNzZXMsIGUuZy4gdGhlIFdpbmRvd3Mga2V5IG9uIExpbnV4IHN5c3RlbXMsIHNvIHdlIHVwZGF0ZSBhZ2FpbiBvbiBtb3VzZVxuICAgICAgICAgICAgICAgIC8vIGNsaWNrcyB0byBiZSBzdXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVG91Y2ggPSAoZXZlbnQgYXMgUG9pbnRlckV2ZW50KS5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvdWNoU3ViamVjdC52YWx1ZSAhPT0gaXNUb3VjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5pc1RvdWNoU3ViamVjdC5uZXh0KGlzVG91Y2gpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgb25LZXlEb3duT3JLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAvLyBgZXZlbnQubWV0YUtleWAgaXMgbm90IGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIG9uIHRoZSBhY3R1YWwga2V5cHJlc3Mgb2YgdGhlIG1vZGlmaWVyXG4gICAgICAgIC8vIGtleS4gU28gd2UgaGFuZGxlIHRoZXNlIGV2ZW50cyBzZXBhcmF0ZWx5LlxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQ29udHJvbCcpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybEtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdTaGlmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpZnRLZXlQcmVzc2VkU3ViamVjdC5uZXh0KGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTWV0YScpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YUtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugd2UgbWlzcyBtb2RpZmllciBldmVudHMgYmVjYXVzZSB0aGUgYnJvd3NlciBkaWRuJ3QgaGF2ZSBmb2N1cyBkdXJpbmcgdGhlXG4gICAgICAgICAgICAvLyBldmVudCwgd2UgdXBkYXRlIG1vZGlmaWVyIGtleXMgb24gdW5yZWxhdGVkIGtleSBldmVudHMgYXMgd2VsbC5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMubWV0YUtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQubWV0YUtleSk7XG4gICAgICAgIHRoaXMuc2hpZnRLZXlQcmVzc2VkU3ViamVjdC5uZXh0KGV2ZW50LnNoaWZ0S2V5KTtcbiAgICAgICAgdGhpcy5jdHJsS2V5UHJlc3NlZFN1YmplY3QubmV4dChldmVudC5jdHJsS2V5KTtcbiAgICB9XG5cbiAgICBvYnNlcnZlQ3RybE9yQ21kS2V5UHJlc3NlZE91dHNpZGVab25lKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gcnhqcy5jb21iaW5lTGF0ZXN0KFt0aGlzLm1ldGFLZXlQcmVzc2VkU3ViamVjdCwgdGhpcy5jdHJsS2V5UHJlc3NlZFN1YmplY3RdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbbWV0YUtleVByZXNzZWQsIGN0cmxLZXlQcmVzc2VkXSkgPT4gbWV0YUtleVByZXNzZWQgfHwgY3RybEtleVByZXNzZWQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNNb2JpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG91Y2hTdWJqZWN0LnZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIGV2YWx1YXRlTWVkaWFRdWVyeSh0eXBlOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGUgPT0gVUlDb25zdGFudHMuTUVESUFfUVVFUllfTUFYX1dJRFRIKSByZXR1cm4gdmFsdWUgPiB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgaWYgKHR5cGUgPT0gVUlDb25zdGFudHMuTUVESUFfUVVFUllfTUlOX1dJRFRIKSByZXR1cm4gdmFsdWUgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgaWYgKHR5cGUgPT0gVUlDb25zdGFudHMuTUVESUFfUVVFUllfTUFYX0hFSUdIVCkgcmV0dXJuIHZhbHVlID4gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICBpZiAodHlwZSA9PSBVSUNvbnN0YW50cy5NRURJQV9RVUVSWV9NSU5fSEVJR0hUKSByZXR1cm4gdmFsdWUgPCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgbWVkaWEgcXVlcnkgJyArIHR5cGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZmlsdGVyVmFsaWRPcHRpb25zKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSkge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT0gbnVsbCk7XG4gICAgICAgIGxldCBvcHRpb25zRmlsdGVyZWQ6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICghb3B0aW9uLm9ubHlNb2JpbGUgfHwgKG9wdGlvbi5vbmx5TW9iaWxlICYmIHRoaXMuaXNNb2JpbGUoKSkpICYmXG4gICAgICAgICAgICAgICAgKCFvcHRpb24ub25seURlc2t0b3AgfHwgKG9wdGlvbi5vbmx5RGVza3RvcCAmJiAhdGhpcy5pc01vYmlsZSgpKSkgJiZcbiAgICAgICAgICAgICAgICAoIW9wdGlvbi5tZWRpYVF1ZXJ5VHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAob3B0aW9uLm1lZGlhUXVlcnlUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBVSVNlcnZpY2UuZXZhbHVhdGVNZWRpYVF1ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5tZWRpYVF1ZXJ5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubWVkaWFRdWVyeVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgb3B0aW9uc0ZpbHRlcmVkLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uc0ZpbHRlcmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJUb2dnbGVPcHRpb25zKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSwgdG9nZ2xlOiBib29sZWFuKSB7XG4gICAgICAgIGxldCByZXN1bHQ6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5pc1RvZ2dsZSA9PSB0b2dnbGUpIHJlc3VsdC5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZHluYW1pY2FsbHkgaW5qZWN0IGFuIGFuZ3VsYXIgY29tcG9uZW50IGludG8gYSByZWd1bGFyIGh0bWwgZG9tIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIFRoZSByZXNvbHZlciBzZXJ2aWNlXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgVGhlIHZpZXdDb250YWluZXJSZWYgc2VydmljZVxuICAgICAqIEBwYXJhbSBjb21wb25lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmd1bGFyIGNvbXBvbmVudCAoZS5nLiBTcGlubmVyQ29tcG9uZW50KVxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IFRoZSB0YXJnZXQgZWxlbWVudCBvZiB0aGUgZG9tLiBJZiB0aGUgZWxlbWVudCBpcyBudWxsIChub3QgZm91bmQpLCBub3RoaW5nIGlzIGRvbmVcbiAgICAgKiBAcGFyYW0gYmluZGluZ3MgT3B0aW9uYWwgYmluZGluZ3MgKGlucHV0cyAmIG91dHB1dHMpIHRvIHRoZSBnaXZlbiBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gZGVsYXkgT3B0aW9uYWwgaW5mbGF0aW5nIGRlbGF5IGluIG1zKHNvbWUgY29tcG9uZW50cyBtYXkgbmVlZCBzb21lIHRpbWUgdG8gXCJpbml0XCIgdGhlIGxheW91dClcbiAgICAgKiBAcGFyYW0gcmVwbGFjZSBXaGV0aGVyIHRvIHJlcGxhY2UgdG8gcHJldmlvdXMgYGlubmVySFRNTGAgb2YgYHRhcmdldEVsZW1lbnRgXG4gICAgICogQHBhcmFtIGluamVjdG9yICh0byBmZXRjaCB0ZW1wbGF0ZXMgZm9yIHRoZSBjb21wb25lbnQpXG4gICAgICovXG4gICAgcHVibGljIGluamVjdEFuZ3VsYXJDb21wb25lbnQ8VD4oXG4gICAgICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGNvbXBvbmVudE5hbWU6IFR5cGU8VD4sXG4gICAgICAgIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgICAgIGJpbmRpbmdzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0gbnVsbCxcbiAgICAgICAgeyBkZWxheSA9IDAsIHJlcGxhY2UgPSB0cnVlIH0gPSB7fSxcbiAgICApOiBDb21wb25lbnRSZWY8VD4ge1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDogQ29tcG9uZW50UmVmPFQ+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgICAgICBmYWN0b3J5LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGJpbmRpbmdzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgc28gY2FsbGJhY2sgY2FuIHByb3Blcmx5IGludm9rZWRcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IGJpbmRpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gYmluZGluZztcbiAgICAgICAgICAgICAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCB3b24ndCBiZSBjYWxsZWQgb24gdGhlIGNvbXBvbmVudCBsaWtlIHRoaXMuIENvbnNpZGVyIGRvaW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vc2NtLmVkdS1zaGFyaW5nLmNvbS9lZHUtc2hhcmluZy9wcm9qZWN0cy9vZWgtcmVkYWt0aW9uL25nLW1ldGEtd2lkZ2V0cy8tL2Jsb2IvMTYwM2ZiMmRlZGFkZDM5NTI0MDEzODViY2JkOTFhNGJkODQwNzY0My9zcmMvYXBwL2FwcC5tb2R1bGUudHMjTDY2LTc5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gR2V0IERPTSBlbGVtZW50IGZyb20gY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50Lmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuaW5uZXJIVE1MID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGVtZW50LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9IG51bGw7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { trigger } from '@angular/animations';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { UIAnimation } from '../util/ui-animation';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/material/menu";
|
|
7
|
+
import * as i3 from "../directives/icon.directive";
|
|
8
|
+
import * as i4 from "@ngx-translate/core";
|
|
9
|
+
export class SortDropdownComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.onSort = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
setSort(item) {
|
|
14
|
+
let ascending = this.sortAscending;
|
|
15
|
+
const itemAscending = item.mode === 'ascending';
|
|
16
|
+
if (item.name === this.sortBy) {
|
|
17
|
+
if (item.mode != null) {
|
|
18
|
+
// element is limited to one mode, ignore the request
|
|
19
|
+
if (itemAscending === this.sortAscending) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
ascending = !ascending;
|
|
24
|
+
}
|
|
25
|
+
else if (item.mode != null) {
|
|
26
|
+
// force mode when switching to item
|
|
27
|
+
ascending = itemAscending;
|
|
28
|
+
}
|
|
29
|
+
item.ascending = ascending;
|
|
30
|
+
this.onSort.emit(item);
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SortDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: SortDropdownComponent, selector: "es-sort-dropdown", inputs: { columns: "columns", sortBy: "sortBy", sortAscending: "sortAscending" }, outputs: { onSort: "onSort" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy == item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy == item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SortDropdownComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'es-sort-dropdown', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy == item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy == item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\n"] }]
|
|
38
|
+
}], ctorParameters: function () { return []; }, propDecorators: { menu: [{
|
|
39
|
+
type: ViewChild,
|
|
40
|
+
args: ['menu', { static: true }]
|
|
41
|
+
}], columns: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], sortBy: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], sortAscending: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], onSort: [{
|
|
48
|
+
type: Output
|
|
49
|
+
}] } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NvcnQtZHJvcGRvd24vc29ydC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NvcnQtZHJvcGRvd24vc29ydC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFTbkQsTUFBTSxPQUFPLHFCQUFxQjtJQVM5QjtRQUZVLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBRWxDLENBQUM7SUFFaEIsT0FBTyxDQUFDLElBQW9CO1FBQ3hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDbkIscURBQXFEO2dCQUNyRCxJQUFJLGFBQWEsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUN0QyxPQUFPO2lCQUNWO2FBQ0o7WUFDRCxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7U0FDMUI7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQzFCLG9DQUFvQztZQUNwQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1NBQzdCO1FBQ0EsSUFBa0IsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7OEdBNUJRLHFCQUFxQjtrR0FBckIscUJBQXFCLHFSQ1psQyxxOUJBc0JBLHk0Q0RaZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7MkZBRXJGLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxrQkFBa0IsY0FHaEIsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzswRUFHekQsSUFBSTtzQkFBeEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUUxQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgVUlBbmltYXRpb24gfSBmcm9tICcuLi91dGlsL3VpLWFuaW1hdGlvbic7XG5pbXBvcnQgeyBMaXN0SXRlbSwgU29ydEV2ZW50IH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1zb3J0LWRyb3Bkb3duJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3NvcnQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydzb3J0LWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW3RyaWdnZXIoJ29wZW5PdmVybGF5JywgVUlBbmltYXRpb24ub3Blbk92ZXJsYXkoVUlBbmltYXRpb24uQU5JTUFUSU9OX1RJTUVfRkFTVCkpXSxcbn0pXG5leHBvcnQgY2xhc3MgU29ydERyb3Bkb3duQ29tcG9uZW50IHtcbiAgICBAVmlld0NoaWxkKCdtZW51JywgeyBzdGF0aWM6IHRydWUgfSkgbWVudTogTWF0TWVudTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IExpc3RJdGVtW107XG4gICAgQElucHV0KCkgc29ydEJ5OiBzdHJpbmc7XG4gICAgQElucHV0KCkgc29ydEFzY2VuZGluZzogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRFdmVudD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIHNldFNvcnQoaXRlbTogTGlzdEl0ZW0gfCBhbnkpOiB2b2lkIHtcbiAgICAgICAgbGV0IGFzY2VuZGluZyA9IHRoaXMuc29ydEFzY2VuZGluZztcbiAgICAgICAgY29uc3QgaXRlbUFzY2VuZGluZyA9IGl0ZW0ubW9kZSA9PT0gJ2FzY2VuZGluZyc7XG4gICAgICAgIGlmIChpdGVtLm5hbWUgPT09IHRoaXMuc29ydEJ5KSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5tb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGlzIGxpbWl0ZWQgdG8gb25lIG1vZGUsIGlnbm9yZSB0aGUgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChpdGVtQXNjZW5kaW5nID09PSB0aGlzLnNvcnRBc2NlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzY2VuZGluZyA9ICFhc2NlbmRpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5tb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGZvcmNlIG1vZGUgd2hlbiBzd2l0Y2hpbmcgdG8gaXRlbVxuICAgICAgICAgICAgYXNjZW5kaW5nID0gaXRlbUFzY2VuZGluZztcbiAgICAgICAgfVxuICAgICAgICAoaXRlbSBhcyBTb3J0RXZlbnQpLmFzY2VuZGluZyA9IGFzY2VuZGluZztcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdChpdGVtKTtcbiAgICB9XG59XG4iLCI8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJzb3J0LWRyb3Bkb3duLW1lbnVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb24taXRlbS10aXRsZVwiPnt7ICdTT1JUX0JZJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8YnV0dG9uXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uc1wiXG4gICAgbWF0LW1lbnUtaXRlbVxuICAgIChjbGljayk9XCJzZXRTb3J0KGl0ZW0pXCJcbiAgICBjbGFzcz1cImNvbGxlY3Rpb24taXRlbVwiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJzb3J0QnkgPT0gaXRlbS5uYW1lXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cIml0ZW0ubGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cIiFpdGVtLmxhYmVsXCI+e3sgaXRlbS50eXBlICsgJy4nICsgaXRlbS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzb3J0QnkgPT0gaXRlbS5uYW1lICYmIGl0ZW0ubmFtZSAhPT0gJ2NjbTpjb2xsZWN0aW9uX29yZGVyZWRfcG9zaXRpb24nXCI+XG4gICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgKm5nSWY9XCJzb3J0QXNjZW5kaW5nXCIgW2FsdFRleHRdPVwiJ0FTQ0VORElORycgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgYXJyb3dfdXB3YXJkXG4gICAgICA8L2k+XG4gICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgKm5nSWY9XCIhc29ydEFzY2VuZGluZ1wiIFthbHRUZXh0XT1cIidERVNDRU5ESU5HJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICBhcnJvd19kb3dud2FyZFxuICAgICAgPC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgJ1NFTEVDVEVEJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L21hdC1tZW51PlxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component, HostBinding } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@ngx-translate/core";
|
|
4
|
+
export class SpinnerComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.dataTest = 'loading-spinner';
|
|
7
|
+
}
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: SpinnerComponent, selector: "es-spinner", host: { properties: { "attr.data-test": "this.dataTest" } }, ngImport: i0, template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.5s}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SpinnerComponent, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{ selector: 'es-spinner', template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;animation:spin 2s infinite ease-in;animation-delay:.5s}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"] }]
|
|
14
|
+
}], ctorParameters: function () { return []; }, propDecorators: { dataTest: [{
|
|
15
|
+
type: HostBinding,
|
|
16
|
+
args: ['attr.data-test']
|
|
17
|
+
}] } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBTy9ELE1BQU0sT0FBTyxnQkFBZ0I7SUFHekI7UUFGd0MsYUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBRXRELENBQUM7OEdBSFAsZ0JBQWdCO2tHQUFoQixnQkFBZ0IsK0dDUDdCLHVaQWNBOzsyRkRQYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksWUFBWTswRUFLa0IsUUFBUTtzQkFBL0MsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1zcGlubmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3NwaW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydzcGlubmVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNwaW5uZXJDb21wb25lbnQge1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRlc3QnKSByZWFkb25seSBkYXRhVGVzdCA9ICdsb2FkaW5nLXNwaW5uZXInO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiPGRpdiBjbGFzcz1cInNwaW5uZXJcIj5cbiAgPHNwYW4gYXJpYS1saXZlPVwicG9saXRlXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0xPQURJTkcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwic3Bpbm5lcmNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXIxXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlubmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lcjJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyM1wiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export class FallbackTranslationHandler {
|
|
2
|
+
handle(params) {
|
|
3
|
+
return params.interpolateParams?.fallback ?? params.key;
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2stdHJhbnNsYXRpb24taGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdHJhbnNsYXRpb25zL2ZhbGxiYWNrLXRyYW5zbGF0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLDBCQUEwQjtJQUNuQyxNQUFNLENBQUMsTUFBdUM7UUFDMUMsT0FBUSxNQUFNLENBQUMsaUJBQXlCLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDckUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlciwgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlclBhcmFtcyB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgRmFsbGJhY2tUcmFuc2xhdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyIHtcbiAgICBoYW5kbGUocGFyYW1zOiBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAocGFyYW1zLmludGVycG9sYXRlUGFyYW1zIGFzIGFueSk/LmZhbGxiYWNrID8/IHBhcmFtcy5rZXk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const LANGUAGES = {
|
|
2
|
+
de: 'de_DE',
|
|
3
|
+
en: 'en_US',
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90cmFuc2xhdGlvbnMvbGFuZ3VhZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBOEI7SUFDaEQsRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsT0FBTztDQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcblxuZXhwb3J0IGNvbnN0IExBTkdVQUdFUzogeyBba2V5OiBzdHJpbmddOiBMb2NhbGUgfSA9IHtcbiAgICBkZTogJ2RlX0RFJyxcbiAgICBlbjogJ2VuX1VTJyxcbn07XG4iXX0=
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import * as rxjs from 'rxjs';
|
|
2
|
+
import { concat, of } from 'rxjs';
|
|
3
|
+
import { catchError, first, map, reduce } from 'rxjs/operators';
|
|
4
|
+
import { LANGUAGES } from './languages';
|
|
5
|
+
import { TranslationSource } from './translation-source';
|
|
6
|
+
export const TRANSLATION_LIST = [
|
|
7
|
+
'common',
|
|
8
|
+
'admin',
|
|
9
|
+
'recycle',
|
|
10
|
+
'workspace',
|
|
11
|
+
'search',
|
|
12
|
+
'collections',
|
|
13
|
+
'login',
|
|
14
|
+
'permissions',
|
|
15
|
+
'oer',
|
|
16
|
+
'messages',
|
|
17
|
+
'register',
|
|
18
|
+
'profiles',
|
|
19
|
+
'services',
|
|
20
|
+
'stream',
|
|
21
|
+
'override',
|
|
22
|
+
];
|
|
23
|
+
export class TranslationLoader {
|
|
24
|
+
static create(http, configService, configuration) {
|
|
25
|
+
return new TranslationLoader(http, configService, configuration);
|
|
26
|
+
}
|
|
27
|
+
constructor(http, configService, configuration, prefix = 'assets/i18n', suffix = '.json') {
|
|
28
|
+
this.http = http;
|
|
29
|
+
this.configService = configService;
|
|
30
|
+
this.configuration = configuration;
|
|
31
|
+
this.prefix = prefix;
|
|
32
|
+
this.suffix = suffix;
|
|
33
|
+
// If you need to configure this, define an injectable configuration object. See
|
|
34
|
+
// https://angular.io/guide/dependency-injection-providers#injecting-a-configuration-object.
|
|
35
|
+
this.source = TranslationSource.Auto;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets the translations from the server
|
|
39
|
+
*/
|
|
40
|
+
getTranslation(lang) {
|
|
41
|
+
if (lang === 'none') {
|
|
42
|
+
return of({});
|
|
43
|
+
}
|
|
44
|
+
this.configService.setLocale(LANGUAGES[lang]);
|
|
45
|
+
return rxjs
|
|
46
|
+
.forkJoin({
|
|
47
|
+
originalTranslations: this.getOriginalTranslations(lang).pipe(
|
|
48
|
+
// Default to empty dictionary if we got nothing
|
|
49
|
+
map((translations) => translations || {})),
|
|
50
|
+
translationOverrides: this.configService
|
|
51
|
+
.observeTranslationOverrides()
|
|
52
|
+
.pipe(first()),
|
|
53
|
+
})
|
|
54
|
+
.pipe(map(({ originalTranslations, translationOverrides }) =>
|
|
55
|
+
// FIXME: This will alter the object returned by `getOriginalTranslations`.
|
|
56
|
+
this.applyOverrides(originalTranslations, translationOverrides)), map((translations) => this.replaceGenderCharacter(translations)), catchError((error, obs) => {
|
|
57
|
+
console.error(error);
|
|
58
|
+
return of(error);
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
getOriginalTranslations(lang) {
|
|
62
|
+
switch (this.getSource()) {
|
|
63
|
+
case 'repository':
|
|
64
|
+
return this.configService.observeDefaultTranslations().pipe(first());
|
|
65
|
+
case 'local':
|
|
66
|
+
return this.mergeTranslations(this.fetchTranslations(lang));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
getSource() {
|
|
70
|
+
if ((this.configuration.production && this.source === TranslationSource.Auto) ||
|
|
71
|
+
this.source === TranslationSource.Repository) {
|
|
72
|
+
return 'repository';
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return 'local';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns an array of Observables that will each fetch a translations json
|
|
80
|
+
* file.
|
|
81
|
+
*/
|
|
82
|
+
fetchTranslations(lang) {
|
|
83
|
+
return TRANSLATION_LIST.map((translation) => `${this.prefix}/${translation}/${lang}${this.suffix}`).map((url) => this.http.get(url));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Takes an array as returned by `fetchTranslations` and converts it to an
|
|
87
|
+
* Observable that yields a single Dictionary object.
|
|
88
|
+
*/
|
|
89
|
+
mergeTranslations(translations) {
|
|
90
|
+
return concat(...translations).pipe(reduce((acc, value) => {
|
|
91
|
+
for (const prop in value) {
|
|
92
|
+
if (value.hasOwnProperty(prop)) {
|
|
93
|
+
acc[prop] = value[prop];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return acc;
|
|
97
|
+
}, {}));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Applies `overrides` to `translations` and returns `translations`.
|
|
101
|
+
*
|
|
102
|
+
* Example:
|
|
103
|
+
* translations = { foo: { bar: 'bar' } }
|
|
104
|
+
* overrides = { 'foo.bar': 'baz' }
|
|
105
|
+
* results in
|
|
106
|
+
* translations = { foo: {bar: 'baz' } }
|
|
107
|
+
*
|
|
108
|
+
* @param translations Nested translations object.
|
|
109
|
+
* @param overrides Flat object with dots (.) in keys interpreted as
|
|
110
|
+
* separators.
|
|
111
|
+
*/
|
|
112
|
+
applyOverrides(translations, overrides) {
|
|
113
|
+
if (overrides) {
|
|
114
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
115
|
+
let ref = translations;
|
|
116
|
+
const path = key.split('.');
|
|
117
|
+
const pathLast = path.pop();
|
|
118
|
+
for (const item of path) {
|
|
119
|
+
if (!ref[item]) {
|
|
120
|
+
ref[item] = {};
|
|
121
|
+
}
|
|
122
|
+
const refItem = ref[item];
|
|
123
|
+
if (typeof refItem === 'string') {
|
|
124
|
+
throw new Error('Trying to override leave with sub tree: ' + path);
|
|
125
|
+
}
|
|
126
|
+
ref = refItem;
|
|
127
|
+
}
|
|
128
|
+
ref[pathLast] = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return translations;
|
|
132
|
+
}
|
|
133
|
+
replaceGenderCharacter(translations, path = []) {
|
|
134
|
+
for (let key of Object.keys(translations)) {
|
|
135
|
+
if (typeof translations[key] === 'string') {
|
|
136
|
+
// DO NOT REMOVE (required for csv language dumping)
|
|
137
|
+
/*console.log(CsvHelper.fromArray(null, [[
|
|
138
|
+
path.concat(key).join('.'), translations[key]
|
|
139
|
+
]]));*/
|
|
140
|
+
translations[key] = translations[key].replace(/{{GENDER_SEPARATOR}}/g, '*');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
translations[key] = this.replaceGenderCharacter(translations[key], path.concat(key));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return translations;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb24tbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzVCLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztJQUNULFdBQVc7SUFDWCxRQUFRO0lBQ1IsYUFBYTtJQUNiLE9BQU87SUFDUCxhQUFhO0lBQ2IsS0FBSztJQUNMLFVBQVU7SUFDVixVQUFVO0lBQ1YsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsVUFBVTtDQUNiLENBQUM7QUFJRixNQUFNLE9BQU8saUJBQWlCO0lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQ1QsSUFBZ0IsRUFDaEIsYUFBNEIsRUFDNUIsYUFBd0M7UUFFeEMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQ1ksSUFBZ0IsRUFDaEIsYUFBNEIsRUFDNUIsYUFBd0MsRUFDeEMsU0FBaUIsYUFBYSxFQUM5QixTQUFpQixPQUFPO1FBSnhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFD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QU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxZQUF3QixFQUFFLE9BQWlCLEVBQUU7UUFDeEUsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3ZDLElBQUksT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxvREFBb0Q7Z0JBQ3BEOzt1QkFFTztnQkFDUCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUksWUFBWSxDQUFDLEdBQUcsQ0FBWSxDQUFDLE9BQU8sQ0FDckQsdUJBQXVCLEVBQ3ZCLEdBQUcsQ0FDTixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDM0MsWUFBWSxDQUFDLEdBQUcsQ0FBZSxFQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUNuQixDQUFDO2FBQ0w7U0FDSjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMb2FkZXIgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXQsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaXJzdCwgbWFwLCByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZWR1LXNoYXJpbmctdWktY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBMQU5HVUFHRVMgfSBmcm9tICcuL2xhbmd1YWdlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNvdXJjZSB9IGZyb20gJy4vdHJhbnNsYXRpb24tc291cmNlJztcblxuZXhwb3J0IGNvbnN0IFRSQU5TTEFUSU9OX0xJU1QgPSBbXG4gICAgJ2NvbW1vbicsXG4gICAgJ2FkbWluJyxcbiAgICAncmVjeWNsZScsXG4gICAgJ3dvcmtzcGFjZScsXG4gICAgJ3NlYXJjaCcsXG4gICAgJ2NvbGxlY3Rpb25zJyxcbiAgICAnbG9naW4nLFxuICAgICdwZXJtaXNzaW9ucycsXG4gICAgJ29lcicsXG4gICAgJ21lc3NhZ2VzJyxcbiAgICAncmVnaXN0ZXInLFxuICAgICdwcm9maWxlcycsXG4gICAgJ3NlcnZpY2VzJyxcbiAgICAnc3RyZWFtJyxcbiAgICAnb3ZlcnJpZGUnLFxuXTtcblxudHlwZSBEaWN0aW9uYXJ5ID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBEaWN0aW9uYXJ5IH07XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxvYWRlciBpbXBsZW1lbnRzIFRyYW5zbGF0ZUxvYWRlciB7XG4gICAgc3RhdGljIGNyZWF0ZShcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogRWR1U2hhcmluZ1VpQ29uZmlndXJhdGlvbixcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGlvbkxvYWRlcihodHRwLCBjb25maWdTZXJ2aWNlLCBjb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uLFxuICAgICAgICBwcml2YXRlIHByZWZpeDogc3RyaW5nID0gJ2Fzc2V0cy9pMThuJyxcbiAgICAgICAgcHJpdmF0ZSBzdWZmaXg6IHN0cmluZyA9ICcuanNvbicsXG4gICAgKSB7fVxuXG4gICAgLy8gSWYgeW91IG5lZWQgdG8gY29uZmlndXJlIHRoaXMsIGRlZmluZSBhbiBpbmplY3RhYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBTZWVcbiAgICAvLyBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvZGVwZW5kZW5jeS1pbmplY3Rpb24tcHJvdmlkZXJzI2luamVjdGluZy1hLWNvbmZpZ3VyYXRpb24tb2JqZWN0LlxuICAgIHByaXZhdGUgcmVhZG9ubHkgc291cmNlOiBUcmFuc2xhdGlvblNvdXJjZSA9IFRyYW5zbGF0aW9uU291cmNlLkF1dG87XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgc2VydmVyXG4gICAgICovXG4gICAgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PiB7XG4gICAgICAgIGlmIChsYW5nID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnNldExvY2FsZShMQU5HVUFHRVNbbGFuZ10pO1xuICAgICAgICByZXR1cm4gcnhqc1xuICAgICAgICAgICAgLmZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFRyYW5zbGF0aW9uczogdGhpcy5nZXRPcmlnaW5hbFRyYW5zbGF0aW9ucyhsYW5nKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGVtcHR5IGRpY3Rpb25hcnkgaWYgd2UgZ290IG5vdGhpbmdcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh0cmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9ucyB8fCB7fSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlczogdGhpcy5jb25maWdTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5vYnNlcnZlVHJhbnNsYXRpb25PdmVycmlkZXMoKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHsgb3JpZ2luYWxUcmFuc2xhdGlvbnMsIHRyYW5zbGF0aW9uT3ZlcnJpZGVzIH0pID0+XG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgYWx0ZXIgdGhlIG9iamVjdCByZXR1cm5lZCBieSBgZ2V0T3JpZ2luYWxUcmFuc2xhdGlvbnNgLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5T3ZlcnJpZGVzKG9yaWdpbmFsVHJhbnNsYXRpb25zLCB0cmFuc2xhdGlvbk92ZXJyaWRlcyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXAoKHRyYW5zbGF0aW9ucykgPT4gdGhpcy5yZXBsYWNlR2VuZGVyQ2hhcmFjdGVyKHRyYW5zbGF0aW9ucykpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yLCBvYnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihlcnJvcik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JpZ2luYWxUcmFuc2xhdGlvbnMobGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5nZXRTb3VyY2UoKSkge1xuICAgICAgICAgICAgY2FzZSAncmVwb3NpdG9yeSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlRGVmYXVsdFRyYW5zbGF0aW9ucygpLnBpcGUoZmlyc3QoKSk7XG4gICAgICAgICAgICBjYXNlICdsb2NhbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2VUcmFuc2xhdGlvbnModGhpcy5mZXRjaFRyYW5zbGF0aW9ucyhsYW5nKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNvdXJjZSgpOiAncmVwb3NpdG9yeScgfCAnbG9jYWwnIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuY29uZmlndXJhdGlvbi5wcm9kdWN0aW9uICYmIHRoaXMuc291cmNlID09PSBUcmFuc2xhdGlvblNvdXJjZS5BdXRvKSB8fFxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPT09IFRyYW5zbGF0aW9uU291cmNlLlJlcG9zaXRvcnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JlcG9zaXRvcnknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdsb2NhbCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIE9ic2VydmFibGVzIHRoYXQgd2lsbCBlYWNoIGZldGNoIGEgdHJhbnNsYXRpb25zIGpzb25cbiAgICAgKiBmaWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZmV0Y2hUcmFuc2xhdGlvbnMobGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PltdIHtcbiAgICAgICAgcmV0dXJuIFRSQU5TTEFUSU9OX0xJU1QubWFwKFxuICAgICAgICAgICAgKHRyYW5zbGF0aW9uKSA9PiBgJHt0aGlzLnByZWZpeH0vJHt0cmFuc2xhdGlvbn0vJHtsYW5nfSR7dGhpcy5zdWZmaXh9YCxcbiAgICAgICAgKS5tYXAoKHVybCkgPT4gdGhpcy5odHRwLmdldCh1cmwpIGFzIE9ic2VydmFibGU8RGljdGlvbmFyeT4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2VzIGFuIGFycmF5IGFzIHJldHVybmVkIGJ5IGBmZXRjaFRyYW5zbGF0aW9uc2AgYW5kIGNvbnZlcnRzIGl0IHRvIGFuXG4gICAgICogT2JzZXJ2YWJsZSB0aGF0IHlpZWxkcyBhIHNpbmdsZSBEaWN0aW9uYXJ5IG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIG1lcmdlVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9uczogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PltdKTogT2JzZXJ2YWJsZTxEaWN0aW9uYXJ5PiB7XG4gICAgICAgIHJldHVybiBjb25jYXQoLi4udHJhbnNsYXRpb25zKS5waXBlKFxuICAgICAgICAgICAgcmVkdWNlKChhY2M6IERpY3Rpb25hcnksIHZhbHVlOiBEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjW3Byb3BdID0gdmFsdWVbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGBvdmVycmlkZXNgIHRvIGB0cmFuc2xhdGlvbnNgIGFuZCByZXR1cm5zIGB0cmFuc2xhdGlvbnNgLlxuICAgICAqXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAgdHJhbnNsYXRpb25zID0geyBmb286IHsgYmFyOiAnYmFyJyB9IH1cbiAgICAgKiAgb3ZlcnJpZGVzID0geyAnZm9vLmJhcic6ICdiYXonIH1cbiAgICAgKiByZXN1bHRzIGluXG4gICAgICogIHRyYW5zbGF0aW9ucyA9IHsgZm9vOiB7YmFyOiAnYmF6JyB9IH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0cmFuc2xhdGlvbnMgTmVzdGVkIHRyYW5zbGF0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIG92ZXJyaWRlcyBGbGF0IG9iamVjdCB3aXRoIGRvdHMgKC4pIGluIGtleXMgaW50ZXJwcmV0ZWQgYXNcbiAgICAgKiBzZXBhcmF0b3JzLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlPdmVycmlkZXMoXG4gICAgICAgIHRyYW5zbGF0aW9uczogRGljdGlvbmFyeSxcbiAgICAgICAgb3ZlcnJpZGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICk6IERpY3Rpb25hcnkge1xuICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllczxzdHJpbmc+KG92ZXJyaWRlcykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVmID0gdHJhbnNsYXRpb25zO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoTGFzdCA9IHBhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZbaXRlbV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZltpdGVtXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSByZWZbaXRlbV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIG92ZXJyaWRlIGxlYXZlIHdpdGggc3ViIHRyZWU6ICcgKyBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWYgPSByZWZJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWZbcGF0aExhc3RdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VHZW5kZXJDaGFyYWN0ZXIodHJhbnNsYXRpb25zOiBEaWN0aW9uYXJ5LCBwYXRoOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zbGF0aW9uc1trZXldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIERPIE5PVCBSRU1PVkUgKHJlcXVpcmVkIGZvciBjc3YgbGFuZ3VhZ2UgZHVtcGluZylcbiAgICAgICAgICAgICAgICAvKmNvbnNvbGUubG9nKENzdkhlbHBlci5mcm9tQXJyYXkobnVsbCwgW1tcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguY29uY2F0KGtleSkuam9pbignLicpLCB0cmFuc2xhdGlvbnNba2V5XVxuICAgICAgICAgICAgICAgIF1dKSk7Ki9cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnNba2V5XSA9ICh0cmFuc2xhdGlvbnNba2V5XSBhcyBzdHJpbmcpLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC97e0dFTkRFUl9TRVBBUkFUT1J9fS9nLFxuICAgICAgICAgICAgICAgICAgICAnKicsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2tleV0gPSB0aGlzLnJlcGxhY2VHZW5kZXJDaGFyYWN0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1trZXldIGFzIERpY3Rpb25hcnksXG4gICAgICAgICAgICAgICAgICAgIHBhdGguY29uY2F0KGtleSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The preferred source for language files. */
|
|
2
|
+
export var TranslationSource;
|
|
3
|
+
(function (TranslationSource) {
|
|
4
|
+
/** In dev mode, local files are used and in production, repository files are used (default). */
|
|
5
|
+
TranslationSource[TranslationSource["Auto"] = 0] = "Auto";
|
|
6
|
+
/** Local files (assets/i18n) are used. */
|
|
7
|
+
TranslationSource[TranslationSource["Local"] = 1] = "Local";
|
|
8
|
+
/** Repository files are used. */
|
|
9
|
+
TranslationSource[TranslationSource["Repository"] = 2] = "Repository";
|
|
10
|
+
})(TranslationSource || (TranslationSource = {}));
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb24tc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxNQUFNLENBQU4sSUFBWSxpQkFPWDtBQVBELFdBQVksaUJBQWlCO0lBQ3pCLGdHQUFnRztJQUNoRyx5REFBSSxDQUFBO0lBQ0osMENBQTBDO0lBQzFDLDJEQUFLLENBQUE7SUFDTCxpQ0FBaUM7SUFDakMscUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFQVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBTzVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFRoZSBwcmVmZXJyZWQgc291cmNlIGZvciBsYW5ndWFnZSBmaWxlcy4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zbGF0aW9uU291cmNlIHtcbiAgICAvKiogSW4gZGV2IG1vZGUsIGxvY2FsIGZpbGVzIGFyZSB1c2VkIGFuZCBpbiBwcm9kdWN0aW9uLCByZXBvc2l0b3J5IGZpbGVzIGFyZSB1c2VkIChkZWZhdWx0KS4gKi9cbiAgICBBdXRvLFxuICAgIC8qKiBMb2NhbCBmaWxlcyAoYXNzZXRzL2kxOG4pIGFyZSB1c2VkLiAqL1xuICAgIExvY2FsLFxuICAgIC8qKiBSZXBvc2l0b3J5IGZpbGVzIGFyZSB1c2VkLiAqL1xuICAgIFJlcG9zaXRvcnksXG59XG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { NgModule, Optional, SkipSelf } from '@angular/core';
|
|
3
|
+
import { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
4
|
+
import { ConfigService } from 'ngx-edu-sharing-api';
|
|
5
|
+
import { FallbackTranslationHandler } from './fallback-translation-handler';
|
|
6
|
+
import { TranslationLoader } from './translation-loader';
|
|
7
|
+
import { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@ngx-translate/core";
|
|
10
|
+
/**
|
|
11
|
+
* Import this module once in the app module to provide the `TranslateService`.
|
|
12
|
+
*
|
|
13
|
+
* Export `TranslateModule` in the shared module to provide directives and pipes.
|
|
14
|
+
*/
|
|
15
|
+
export class TranslationsModule {
|
|
16
|
+
static forRoot() {
|
|
17
|
+
return {
|
|
18
|
+
ngModule: TranslationsModule,
|
|
19
|
+
providers: [],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
constructor(parentModule) {
|
|
23
|
+
if (parentModule) {
|
|
24
|
+
console.warn('TranslationsModule is already loaded. Import it in the AppModule only', parentModule);
|
|
25
|
+
/*throw new Error(
|
|
26
|
+
'TranslationsModule is already loaded. Import it in the AppModule only',
|
|
27
|
+
);*/
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: TranslationsModule, deps: [{ token: TranslationsModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
31
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.6", ngImport: i0, type: TranslationsModule, imports: [i1.TranslateModule] }); }
|
|
32
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: TranslationsModule, imports: [TranslateModule.forRoot({
|
|
33
|
+
loader: {
|
|
34
|
+
provide: TranslateLoader,
|
|
35
|
+
useFactory: TranslationLoader.create,
|
|
36
|
+
deps: [HttpClient, ConfigService, EduSharingUiConfiguration],
|
|
37
|
+
},
|
|
38
|
+
missingTranslationHandler: {
|
|
39
|
+
provide: MissingTranslationHandler,
|
|
40
|
+
useClass: FallbackTranslationHandler,
|
|
41
|
+
},
|
|
42
|
+
})] }); }
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: TranslationsModule, decorators: [{
|
|
45
|
+
type: NgModule,
|
|
46
|
+
args: [{
|
|
47
|
+
declarations: [],
|
|
48
|
+
imports: [
|
|
49
|
+
TranslateModule.forRoot({
|
|
50
|
+
loader: {
|
|
51
|
+
provide: TranslateLoader,
|
|
52
|
+
useFactory: TranslationLoader.create,
|
|
53
|
+
deps: [HttpClient, ConfigService, EduSharingUiConfiguration],
|
|
54
|
+
},
|
|
55
|
+
missingTranslationHandler: {
|
|
56
|
+
provide: MissingTranslationHandler,
|
|
57
|
+
useClass: FallbackTranslationHandler,
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
],
|
|
61
|
+
}]
|
|
62
|
+
}], ctorParameters: function () { return [{ type: TranslationsModule, decorators: [{
|
|
63
|
+
type: Optional
|
|
64
|
+
}, {
|
|
65
|
+
type: SkipSelf
|
|
66
|
+
}] }]; } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb25zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBdUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQUU1RTs7OztHQUlHO0FBaUJILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixTQUFTLEVBQUUsRUFBRTtTQUNoQixDQUFDO0lBQ04sQ0FBQztJQUVELFlBQW9DLFlBQWlDO1FBQ2pFLElBQUksWUFBWSxFQUFFO1lBQ2QsT0FBTyxDQUFDLElBQUksQ0FDUix1RUFBdUUsRUFDdkUsWUFBWSxDQUNmLENBQUM7WUFDRjs7Z0JBRUk7U0FDUDtJQUNMLENBQUM7OEdBbEJRLGtCQUFrQjsrR0FBbEIsa0JBQWtCOytHQUFsQixrQkFBa0IsWUFidkIsZUFBZSxDQUFDLE9BQU8sQ0FBQztnQkFDcEIsTUFBTSxFQUFFO29CQUNKLE9BQU8sRUFBRSxlQUFlO29CQUN4QixVQUFVLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtvQkFDcEMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQztpQkFDL0Q7Z0JBQ0QseUJBQXlCLEVBQUU7b0JBQ3ZCLE9BQU8sRUFBRSx5QkFBeUI7b0JBQ2xDLFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3ZDO2FBQ0osQ0FBQzs7MkZBR0csa0JBQWtCO2tCQWhCOUIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNMLGVBQWUsQ0FBQyxPQUFPLENBQUM7NEJBQ3BCLE1BQU0sRUFBRTtnQ0FDSixPQUFPLEVBQUUsZUFBZTtnQ0FDeEIsVUFBVSxFQUFFLGlCQUFpQixDQUFDLE1BQU07Z0NBQ3BDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUseUJBQXlCLENBQUM7NkJBQy9EOzRCQUNELHlCQUF5QixFQUFFO2dDQUN2QixPQUFPLEVBQUUseUJBQXlCO2dDQUNsQyxRQUFRLEVBQUUsMEJBQTBCOzZCQUN2Qzt5QkFDSixDQUFDO3FCQUNMO2lCQUNKOzswQkFTZ0IsUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyLCBUcmFuc2xhdGVMb2FkZXIsIFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgRmFsbGJhY2tUcmFuc2xhdGlvbkhhbmRsZXIgfSBmcm9tICcuL2ZhbGxiYWNrLXRyYW5zbGF0aW9uLWhhbmRsZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25Mb2FkZXIgfSBmcm9tICcuL3RyYW5zbGF0aW9uLWxvYWRlcic7XG5pbXBvcnQgeyBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZWR1LXNoYXJpbmctdWktY29uZmlndXJhdGlvbic7XG5cbi8qKlxuICogSW1wb3J0IHRoaXMgbW9kdWxlIG9uY2UgaW4gdGhlIGFwcCBtb2R1bGUgdG8gcHJvdmlkZSB0aGUgYFRyYW5zbGF0ZVNlcnZpY2VgLlxuICpcbiAqIEV4cG9ydCBgVHJhbnNsYXRlTW9kdWxlYCBpbiB0aGUgc2hhcmVkIG1vZHVsZSB0byBwcm92aWRlIGRpcmVjdGl2ZXMgYW5kIHBpcGVzLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUcmFuc2xhdGVNb2R1bGUuZm9yUm9vdCh7XG4gICAgICAgICAgICBsb2FkZXI6IHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVMb2FkZXIsXG4gICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogVHJhbnNsYXRpb25Mb2FkZXIuY3JlYXRlLFxuICAgICAgICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50LCBDb25maWdTZXJ2aWNlLCBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyOiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlcixcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogRmFsbGJhY2tUcmFuc2xhdGlvbkhhbmRsZXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbnNNb2R1bGUge1xuICAgIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VHJhbnNsYXRpb25zTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogVHJhbnNsYXRpb25zTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwYXJlbnRNb2R1bGU/OiBUcmFuc2xhdGlvbnNNb2R1bGUpIHtcbiAgICAgICAgaWYgKHBhcmVudE1vZHVsZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdUcmFuc2xhdGlvbnNNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEltcG9ydCBpdCBpbiB0aGUgQXBwTW9kdWxlIG9ubHknLFxuICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvKnRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnVHJhbnNsYXRpb25zTW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLiBJbXBvcnQgaXQgaW4gdGhlIEFwcE1vZHVsZSBvbmx5JyxcbiAgICAgICAgICAgICk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|