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,200 @@
|
|
|
1
|
+
import { isNumeric } from './isNumeric';
|
|
2
|
+
export var RelativeMode;
|
|
3
|
+
(function (RelativeMode) {
|
|
4
|
+
RelativeMode[RelativeMode["off"] = 0] = "off";
|
|
5
|
+
RelativeMode[RelativeMode["short"] = 1] = "short";
|
|
6
|
+
RelativeMode[RelativeMode["medium"] = 2] = "medium";
|
|
7
|
+
RelativeMode[RelativeMode["large"] = 3] = "large";
|
|
8
|
+
RelativeMode[RelativeMode["all"] = 4] = "all";
|
|
9
|
+
})(RelativeMode || (RelativeMode = {}));
|
|
10
|
+
export class FormatOptions {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.showDate = true;
|
|
13
|
+
this.showAlwaysTime = false;
|
|
14
|
+
this.showSeconds = false;
|
|
15
|
+
// @Deprecated
|
|
16
|
+
// this will be mapped to relativeLabels = MEDIUM
|
|
17
|
+
// use relativeLabels instead
|
|
18
|
+
this.useRelativeLabels = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class DateHelper {
|
|
22
|
+
/**
|
|
23
|
+
* Fill a date (day + month) string, e.g. 2 -> 02
|
|
24
|
+
* @param date
|
|
25
|
+
* @returns {string}
|
|
26
|
+
*/
|
|
27
|
+
static fillDate(date) {
|
|
28
|
+
if (date < 10)
|
|
29
|
+
return '0' + date;
|
|
30
|
+
return date + '';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert date to a unix timestamp
|
|
34
|
+
* @param date
|
|
35
|
+
* @returns {number}
|
|
36
|
+
*/
|
|
37
|
+
static convertDate(date) {
|
|
38
|
+
return new Date(date).getTime();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* format a date with a given, fixed string
|
|
42
|
+
* For consistency, we use the patterns from
|
|
43
|
+
* https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
|
|
44
|
+
* @param date
|
|
45
|
+
* @param {string} format
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
static formatDateByPattern(date, format) {
|
|
49
|
+
if (!isNumeric(date)) {
|
|
50
|
+
return date;
|
|
51
|
+
}
|
|
52
|
+
let dateObject = new Date(date * 1);
|
|
53
|
+
format = format.replace('y', '' + dateObject.getFullYear());
|
|
54
|
+
format = format.replace('M', '' + DateHelper.fillDate(dateObject.getMonth() + 1));
|
|
55
|
+
format = format.replace('d', '' + DateHelper.fillDate(dateObject.getDate()));
|
|
56
|
+
return format;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Format a date for the current language
|
|
60
|
+
*/
|
|
61
|
+
static formatDate(translation, date, options = new FormatOptions()) {
|
|
62
|
+
try {
|
|
63
|
+
if (options.useRelativeLabels && !options.relativeLabels) {
|
|
64
|
+
options.relativeLabels = RelativeMode.medium;
|
|
65
|
+
}
|
|
66
|
+
if (date == null) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (!isNumeric(date)) {
|
|
70
|
+
date = Date.parse(date);
|
|
71
|
+
}
|
|
72
|
+
let dateObject = new Date(date * 1);
|
|
73
|
+
let dateToday = new Date();
|
|
74
|
+
let dateYesterday = new Date();
|
|
75
|
+
dateYesterday.setDate(dateYesterday.getDate() - 1);
|
|
76
|
+
let isToday = dateObject.toDateString() == dateToday.toDateString();
|
|
77
|
+
let isYesterday = dateObject.toDateString() == dateYesterday.toDateString();
|
|
78
|
+
let prefix = '';
|
|
79
|
+
let timeDiff = (dateToday.getTime() - dateObject.getTime()) / 1000;
|
|
80
|
+
let diffDays = Math.floor(timeDiff / (3600 * 24));
|
|
81
|
+
let diffMonths = new Date(timeDiff * 1000).getMonth();
|
|
82
|
+
let diffYears = new Date(timeDiff * 1000).getFullYear() - 1970;
|
|
83
|
+
let addDate = true;
|
|
84
|
+
let timeFormat = 'HH:mm';
|
|
85
|
+
if (options.showSeconds) {
|
|
86
|
+
timeFormat += ':ss';
|
|
87
|
+
}
|
|
88
|
+
if (timeDiff < 3600 * 6 && options.relativeLabels >= RelativeMode.short) {
|
|
89
|
+
if (timeDiff < 90) {
|
|
90
|
+
prefix = translation.instant('JUST_NOW', { seconds: timeDiff });
|
|
91
|
+
}
|
|
92
|
+
else if (timeDiff < 60 * 100) {
|
|
93
|
+
prefix = translation.instant('MINUTES_AGO', {
|
|
94
|
+
minutes: Math.round(timeDiff / 60),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
prefix = translation.instant('HOURS_AGO', {
|
|
99
|
+
hours: Math.round(timeDiff / (60 * 60)),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
addDate = false;
|
|
103
|
+
timeFormat = '';
|
|
104
|
+
}
|
|
105
|
+
else if (isToday && options.relativeLabels >= RelativeMode.short) {
|
|
106
|
+
prefix = translation.instant('TODAY');
|
|
107
|
+
addDate = false;
|
|
108
|
+
}
|
|
109
|
+
else if (isYesterday && options.relativeLabels >= RelativeMode.medium) {
|
|
110
|
+
prefix = translation.instant('YESTERDAY');
|
|
111
|
+
addDate = false;
|
|
112
|
+
}
|
|
113
|
+
else if ((diffDays < 6 && options.relativeLabels >= RelativeMode.medium) ||
|
|
114
|
+
(diffDays < 45 && options.relativeLabels >= RelativeMode.large)) {
|
|
115
|
+
prefix = translation.instant('DAYS_AGO', { days: diffDays });
|
|
116
|
+
addDate = false;
|
|
117
|
+
if (!options.showAlwaysTime)
|
|
118
|
+
timeFormat = '';
|
|
119
|
+
}
|
|
120
|
+
else if (diffYears === 0 &&
|
|
121
|
+
diffMonths < 12 &&
|
|
122
|
+
options.relativeLabels >= RelativeMode.large) {
|
|
123
|
+
prefix = translation.instant('MONTHS_AGO', { months: diffMonths });
|
|
124
|
+
addDate = false;
|
|
125
|
+
if (!options.showAlwaysTime)
|
|
126
|
+
timeFormat = '';
|
|
127
|
+
}
|
|
128
|
+
else if (options.relativeLabels === RelativeMode.all) {
|
|
129
|
+
prefix = translation.instant('YEARS_AGO', { years: diffYears });
|
|
130
|
+
addDate = false;
|
|
131
|
+
if (!options.showAlwaysTime)
|
|
132
|
+
timeFormat = '';
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
if (!options.showAlwaysTime)
|
|
136
|
+
timeFormat = '';
|
|
137
|
+
}
|
|
138
|
+
// ng2's dateformatter is super slow, but it doesn't matter, we just iterate it once :)
|
|
139
|
+
//return dateFormat+time;
|
|
140
|
+
let str = prefix;
|
|
141
|
+
if (addDate) {
|
|
142
|
+
if (translation.currentLang === 'en') {
|
|
143
|
+
str +=
|
|
144
|
+
dateObject.getFullYear() +
|
|
145
|
+
'-' +
|
|
146
|
+
DateHelper.fillDate(dateObject.getMonth() + 1) +
|
|
147
|
+
'-' +
|
|
148
|
+
DateHelper.fillDate(dateObject.getDate());
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
str +=
|
|
152
|
+
DateHelper.fillDate(dateObject.getDate()) +
|
|
153
|
+
'.' +
|
|
154
|
+
DateHelper.fillDate(dateObject.getMonth() + 1) +
|
|
155
|
+
'.' +
|
|
156
|
+
dateObject.getFullYear();
|
|
157
|
+
}
|
|
158
|
+
//str += DateFormatter.format(dateObject, Translation.getLanguage(), dateFormat).trim();
|
|
159
|
+
}
|
|
160
|
+
if (options.showDate == false) {
|
|
161
|
+
str = '';
|
|
162
|
+
}
|
|
163
|
+
// ie fixes, timeFormat not working
|
|
164
|
+
if (timeFormat) {
|
|
165
|
+
if (str)
|
|
166
|
+
str += ', ';
|
|
167
|
+
//let timeValue=dateObject.toLocaleTimeString(Translation.getLanguage());
|
|
168
|
+
//let times=timeValue.split(":");
|
|
169
|
+
str += timeFormat
|
|
170
|
+
.replace('HH', DateHelper.fillDate(dateObject.getHours()))
|
|
171
|
+
.replace('mm', DateHelper.fillDate(dateObject.getMinutes()))
|
|
172
|
+
.replace('ss', DateHelper.fillDate(dateObject.getSeconds()));
|
|
173
|
+
}
|
|
174
|
+
return str;
|
|
175
|
+
/*
|
|
176
|
+
let dateString=prefix+" ";
|
|
177
|
+
if(dateFormat!=""){
|
|
178
|
+
dateString+=dateObject.toLocaleDateString(Translation.getLanguage())+" ";
|
|
179
|
+
}
|
|
180
|
+
if(time!=""){
|
|
181
|
+
dateString+=dateObject.toLocaleTimeString(Translation.getLanguage());
|
|
182
|
+
}
|
|
183
|
+
return dateString;
|
|
184
|
+
*/
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
return date;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
static getDateFromDatepicker(date) {
|
|
191
|
+
return new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);
|
|
192
|
+
}
|
|
193
|
+
static getDateForNewFile() {
|
|
194
|
+
return DateHelper.formatDate(null, new Date().getTime(), {
|
|
195
|
+
showAlwaysTime: true,
|
|
196
|
+
useRelativeLabels: false,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdXRpbC9EYXRlSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUNwQiw2Q0FBRyxDQUFBO0lBQ0gsaURBQUssQ0FBQTtJQUNMLG1EQUFNLENBQUE7SUFDTixpREFBSyxDQUFBO0lBQ0wsNkNBQUcsQ0FBQTtBQUNQLENBQUMsRUFOVyxZQUFZLEtBQVosWUFBWSxRQU12QjtBQUNELE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0ksYUFBUSxHQUFJLElBQUksQ0FBQztRQUNqQixtQkFBYyxHQUFJLEtBQUssQ0FBQztRQUN4QixnQkFBVyxHQUFJLEtBQUssQ0FBQztRQUNyQixjQUFjO1FBQ2QsaURBQWlEO1FBQ2pELDZCQUE2QjtRQUM3QixzQkFBaUIsR0FBSSxJQUFJLENBQUM7SUFFOUIsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFVBQVU7SUFDbkI7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUNoQyxJQUFJLElBQUksR0FBRyxFQUFFO1lBQUUsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBUztRQUMvQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQWtCLEVBQUUsTUFBYztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUks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QUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCO1FBQ3BCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyRCxjQUFjLEVBQUUsSUFBSTtZQUNwQixpQkFBaUIsRUFBRSxLQUFLO1NBQzNCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gJy4vaXNOdW1lcmljJztcbmV4cG9ydCBlbnVtIFJlbGF0aXZlTW9kZSB7XG4gICAgb2ZmLFxuICAgIHNob3J0LFxuICAgIG1lZGl1bSxcbiAgICBsYXJnZSxcbiAgICBhbGwsXG59XG5leHBvcnQgY2xhc3MgRm9ybWF0T3B0aW9ucyB7XG4gICAgc2hvd0RhdGU/ID0gdHJ1ZTtcbiAgICBzaG93QWx3YXlzVGltZT8gPSBmYWxzZTtcbiAgICBzaG93U2Vjb25kcz8gPSBmYWxzZTtcbiAgICAvLyBARGVwcmVjYXRlZFxuICAgIC8vIHRoaXMgd2lsbCBiZSBtYXBwZWQgdG8gcmVsYXRpdmVMYWJlbHMgPSBNRURJVU1cbiAgICAvLyB1c2UgcmVsYXRpdmVMYWJlbHMgaW5zdGVhZFxuICAgIHVzZVJlbGF0aXZlTGFiZWxzPyA9IHRydWU7XG4gICAgcmVsYXRpdmVMYWJlbHM/OiBSZWxhdGl2ZU1vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlSGVscGVyIHtcbiAgICAvKipcbiAgICAgKiBGaWxsIGEgZGF0ZSAoZGF5ICsgbW9udGgpIHN0cmluZywgZS5nLiAyIC0+IDAyXG4gICAgICogQHBhcmFtIGRhdGVcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGZpbGxEYXRlKGRhdGU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRlIDwgMTApIHJldHVybiAnMCcgKyBkYXRlO1xuICAgICAgICByZXR1cm4gZGF0ZSArICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0ZSB0byBhIHVuaXggdGltZXN0YW1wXG4gICAgICogQHBhcmFtIGRhdGVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGUoZGF0ZTogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZm9ybWF0IGEgZGF0ZSB3aXRoIGEgZ2l2ZW4sIGZpeGVkIHN0cmluZ1xuICAgICAqIEZvciBjb25zaXN0ZW5jeSwgd2UgdXNlIHRoZSBwYXR0ZXJucyBmcm9tXG4gICAgICogaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS90ZXh0L1NpbXBsZURhdGVGb3JtYXQuaHRtbFxuICAgICAqIEBwYXJhbSBkYXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXREYXRlQnlQYXR0ZXJuKGRhdGU6IG51bWJlciB8IGFueSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTnVtZXJpYyhkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGVPYmplY3QgPSBuZXcgRGF0ZSgoZGF0ZSBhcyBudW1iZXIpICogMSk7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCd5JywgJycgKyBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgnTScsICcnICsgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxKSk7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKCdkJywgJycgKyBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0RGF0ZSgpKSk7XG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0IGEgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGUoXG4gICAgICAgIHRyYW5zbGF0aW9uOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBkYXRlOiBudW1iZXIgfCBhbnksXG4gICAgICAgIG9wdGlvbnM6IEZvcm1hdE9wdGlvbnMgPSBuZXcgRm9ybWF0T3B0aW9ucygpLFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy51c2VSZWxhdGl2ZUxhYmVscyAmJiAhb3B0aW9ucy5yZWxhdGl2ZUxhYmVscykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPSBSZWxhdGl2ZU1vZGUubWVkaXVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc051bWVyaWMoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gRGF0ZS5wYXJzZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoKGRhdGUgYXMgbnVtYmVyKSAqIDEpO1xuICAgICAgICAgICAgbGV0IGRhdGVUb2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBsZXQgZGF0ZVllc3RlcmRheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBkYXRlWWVzdGVyZGF5LnNldERhdGUoZGF0ZVllc3RlcmRheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIGxldCBpc1RvZGF5ID0gZGF0ZU9iamVjdC50b0RhdGVTdHJpbmcoKSA9PSBkYXRlVG9kYXkudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgICAgICBsZXQgaXNZZXN0ZXJkYXkgPSBkYXRlT2JqZWN0LnRvRGF0ZVN0cmluZygpID09IGRhdGVZZXN0ZXJkYXkudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgICAgICAgICBsZXQgdGltZURpZmYgPSAoZGF0ZVRvZGF5LmdldFRpbWUoKSAtIGRhdGVPYmplY3QuZ2V0VGltZSgpKSAvIDEwMDA7XG4gICAgICAgICAgICBsZXQgZGlmZkRheXMgPSBNYXRoLmZsb29yKHRpbWVEaWZmIC8gKDM2MDAgKiAyNCkpO1xuICAgICAgICAgICAgbGV0IGRpZmZNb250aHMgPSBuZXcgRGF0ZSh0aW1lRGlmZiAqIDEwMDApLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBsZXQgZGlmZlllYXJzID0gbmV3IERhdGUodGltZURpZmYgKiAxMDAwKS5nZXRGdWxsWWVhcigpIC0gMTk3MDtcbiAgICAgICAgICAgIGxldCBhZGREYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCB0aW1lRm9ybWF0ID0gJ0hIOm1tJztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dTZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdCArPSAnOnNzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lRGlmZiA8IDM2MDAgKiA2ICYmIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPj0gUmVsYXRpdmVNb2RlLnNob3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVEaWZmIDwgOTApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnSlVTVF9OT1cnLCB7IHNlY29uZHM6IHRpbWVEaWZmIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZURpZmYgPCA2MCAqIDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSB0cmFuc2xhdGlvbi5pbnN0YW50KCdNSU5VVEVTX0FHTycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IE1hdGgucm91bmQodGltZURpZmYgLyA2MCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRyYW5zbGF0aW9uLmluc3RhbnQoJ0hPVVJTX0FHTycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzOiBNYXRoLnJvdW5kKHRpbWVEaWZmIC8gKDYwICogNjApKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzVG9kYXkgJiYgb3B0aW9ucy5yZWxhdGl2ZUxhYmVscyA+PSBSZWxhdGl2ZU1vZGUuc2hvcnQpIHtcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0cmFuc2xhdGlvbi5pbnN0YW50KCdUT0RBWScpO1xuICAgICAgICAgICAgICAgIGFkZERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNZZXN0ZXJkYXkgJiYgb3B0aW9ucy5yZWxhdGl2ZUxhYmVscyA+PSBSZWxhdGl2ZU1vZGUubWVkaXVtKSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnWUVTVEVSREFZJyk7XG4gICAgICAgICAgICAgICAgYWRkRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoZGlmZkRheXMgPCA2ICYmIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPj0gUmVsYXRpdmVNb2RlLm1lZGl1bSkgfHxcbiAgICAgICAgICAgICAgICAoZGlmZkRheXMgPCA0NSAmJiBvcHRpb25zLnJlbGF0aXZlTGFiZWxzID49IFJlbGF0aXZlTW9kZS5sYXJnZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRyYW5zbGF0aW9uLmluc3RhbnQoJ0RBWVNfQUdPJywgeyBkYXlzOiBkaWZmRGF5cyB9KTtcbiAgICAgICAgICAgICAgICBhZGREYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNob3dBbHdheXNUaW1lKSB0aW1lRm9ybWF0ID0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGRpZmZZZWFycyA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGRpZmZNb250aHMgPCAxMiAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVsYXRpdmVMYWJlbHMgPj0gUmVsYXRpdmVNb2RlLmxhcmdlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0cmFuc2xhdGlvbi5pbnN0YW50KCdNT05USFNfQUdPJywgeyBtb250aHM6IGRpZmZNb250aHMgfSk7XG4gICAgICAgICAgICAgICAgYWRkRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaG93QWx3YXlzVGltZSkgdGltZUZvcm1hdCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnJlbGF0aXZlTGFiZWxzID09PSBSZWxhdGl2ZU1vZGUuYWxsKSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdHJhbnNsYXRpb24uaW5zdGFudCgnWUVBUlNfQUdPJywgeyB5ZWFyczogZGlmZlllYXJzIH0pO1xuICAgICAgICAgICAgICAgIGFkZERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0Fsd2F5c1RpbWUpIHRpbWVGb3JtYXQgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNob3dBbHdheXNUaW1lKSB0aW1lRm9ybWF0ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5nMidzIGRhdGVmb3JtYXR0ZXIgaXMgc3VwZXIgc2xvdywgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyLCB3ZSBqdXN0IGl0ZXJhdGUgaXQgb25jZSA6KVxuICAgICAgICAgICAgLy9yZXR1cm4gZGF0ZUZvcm1hdCt0aW1lO1xuICAgICAgICAgICAgbGV0IHN0ciA9IHByZWZpeDtcbiAgICAgICAgICAgIGlmIChhZGREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uLmN1cnJlbnRMYW5nID09PSAnZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVIZWxwZXIuZmlsbERhdGUoZGF0ZU9iamVjdC5nZXREYXRlKCkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlSGVscGVyLmZpbGxEYXRlKGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vc3RyICs9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGVPYmplY3QsIFRyYW5zbGF0aW9uLmdldExhbmd1YWdlKCksIGRhdGVGb3JtYXQpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dEYXRlID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZSBmaXhlcywgdGltZUZvcm1hdCBub3Qgd29ya2luZ1xuICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyKSBzdHIgKz0gJywgJztcblxuICAgICAgICAgICAgICAgIC8vbGV0IHRpbWVWYWx1ZT1kYXRlT2JqZWN0LnRvTG9jYWxlVGltZVN0cmluZyhUcmFuc2xhdGlvbi5nZXRMYW5ndWFnZSgpKTtcbiAgICAgICAgICAgICAgICAvL2xldCB0aW1lcz10aW1lVmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIHN0ciArPSB0aW1lRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdISCcsIERhdGVIZWxwZXIuZmlsbERhdGUoZGF0ZU9iamVjdC5nZXRIb3VycygpKSlcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ21tJywgRGF0ZUhlbHBlci5maWxsRGF0ZShkYXRlT2JqZWN0LmdldE1pbnV0ZXMoKSkpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdzcycsIERhdGVIZWxwZXIuZmlsbERhdGUoZGF0ZU9iamVjdC5nZXRTZWNvbmRzKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICAvKlxuICAgICAgbGV0IGRhdGVTdHJpbmc9cHJlZml4K1wiIFwiO1xuICAgICAgaWYoZGF0ZUZvcm1hdCE9XCJcIil7XG4gICAgICAgIGRhdGVTdHJpbmcrPWRhdGVPYmplY3QudG9Mb2NhbGVEYXRlU3RyaW5nKFRyYW5zbGF0aW9uLmdldExhbmd1YWdlKCkpK1wiIFwiO1xuICAgICAgfVxuICAgICAgaWYodGltZSE9XCJcIil7XG4gICAgICAgIGRhdGVTdHJpbmcrPWRhdGVPYmplY3QudG9Mb2NhbGVUaW1lU3RyaW5nKFRyYW5zbGF0aW9uLmdldExhbmd1YWdlKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGVTdHJpbmc7XG4gICAgICAqL1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGdldERhdGVGcm9tRGF0ZXBpY2tlcihkYXRlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERhdGVGb3JOZXdGaWxlKCkge1xuICAgICAgICByZXR1cm4gRGF0ZUhlbHBlci5mb3JtYXREYXRlKG51bGwsIG5ldyBEYXRlKCkuZ2V0VGltZSgpLCB7XG4gICAgICAgICAgICBzaG93QWx3YXlzVGltZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZVJlbGF0aXZlTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Created by Torsten on 28.02.2017.
|
|
3
|
+
*/
|
|
4
|
+
export class VCard {
|
|
5
|
+
static { this.TYPE_PERSON = 0; }
|
|
6
|
+
static { this.TYPE_ORG = 1; }
|
|
7
|
+
constructor(vcard = null) {
|
|
8
|
+
// was the vcard altered
|
|
9
|
+
this.isDirty = false;
|
|
10
|
+
if (vcard) {
|
|
11
|
+
this.lines = vcard.split('\n');
|
|
12
|
+
// this.remove("FN");
|
|
13
|
+
if (!this.get('BEGIN')) {
|
|
14
|
+
this.lines.splice(0, 0, 'BEGIN:VCARD');
|
|
15
|
+
}
|
|
16
|
+
if (!this.get('VERSION')) {
|
|
17
|
+
this.lines.splice(1, 0, 'VERSION:3.0');
|
|
18
|
+
}
|
|
19
|
+
if (!this.get('END')) {
|
|
20
|
+
this.lines.splice(this.lines.length, 0, 'END:VCARD');
|
|
21
|
+
}
|
|
22
|
+
this.isDirty = true;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.lines = [];
|
|
26
|
+
this.lines.push('BEGIN:VCARD');
|
|
27
|
+
this.lines.push('VERSION:3.0');
|
|
28
|
+
this.lines.push('END:VCARD');
|
|
29
|
+
this.isDirty = false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* returns true if this vcard seems to have valid data
|
|
34
|
+
* @param {string} data
|
|
35
|
+
*/
|
|
36
|
+
isValid() {
|
|
37
|
+
// return this.lines!=null && this.lines.length;
|
|
38
|
+
return (this.givenname ||
|
|
39
|
+
this.surname ||
|
|
40
|
+
this.org ||
|
|
41
|
+
this.street ||
|
|
42
|
+
this.city ||
|
|
43
|
+
this.zip ||
|
|
44
|
+
this.country);
|
|
45
|
+
}
|
|
46
|
+
set givenname(data) {
|
|
47
|
+
this.set('Givenname', data);
|
|
48
|
+
}
|
|
49
|
+
set surname(data) {
|
|
50
|
+
this.set('Surname', data);
|
|
51
|
+
}
|
|
52
|
+
set title(data) {
|
|
53
|
+
this.set('TITLE', data);
|
|
54
|
+
}
|
|
55
|
+
set org(data) {
|
|
56
|
+
this.set('ORG', data);
|
|
57
|
+
}
|
|
58
|
+
set orgPhone(data) {
|
|
59
|
+
this.set('TEL;TYPE=WORK,VOICE', data);
|
|
60
|
+
}
|
|
61
|
+
set url(data) {
|
|
62
|
+
this.set('URL', data);
|
|
63
|
+
}
|
|
64
|
+
set email(data) {
|
|
65
|
+
this.set('EMAIL;TYPE=PREF,INTERNET', data);
|
|
66
|
+
}
|
|
67
|
+
set uid(data) {
|
|
68
|
+
this.set('UID:urn:uuid', data);
|
|
69
|
+
}
|
|
70
|
+
set orcid(data) {
|
|
71
|
+
this.set('X-ORCID', data);
|
|
72
|
+
}
|
|
73
|
+
set gnduri(data) {
|
|
74
|
+
this.set('X-GND-URI', data);
|
|
75
|
+
}
|
|
76
|
+
set ror(data) {
|
|
77
|
+
this.set('X-ROR', data);
|
|
78
|
+
}
|
|
79
|
+
set wikidata(data) {
|
|
80
|
+
this.set('X-Wikidata', data);
|
|
81
|
+
}
|
|
82
|
+
set street(data) {
|
|
83
|
+
this.set('ADR;TYPE=intl,postal,parcel,work', data, 2);
|
|
84
|
+
}
|
|
85
|
+
set city(data) {
|
|
86
|
+
this.set('ADR;TYPE=intl,postal,parcel,work', data, 3);
|
|
87
|
+
}
|
|
88
|
+
set region(data) {
|
|
89
|
+
this.set('ADR;TYPE=intl,postal,parcel,work', data, 4);
|
|
90
|
+
}
|
|
91
|
+
set zip(data) {
|
|
92
|
+
this.set('ADR;TYPE=intl,postal,parcel,work', data, 5);
|
|
93
|
+
}
|
|
94
|
+
set country(data) {
|
|
95
|
+
this.set('ADR;TYPE=intl,postal,parcel,work', data, 6);
|
|
96
|
+
}
|
|
97
|
+
set contributeDate(data) {
|
|
98
|
+
this.set('X-ES-LOM-CONTRIBUTE-DATE', data);
|
|
99
|
+
}
|
|
100
|
+
get givenname() {
|
|
101
|
+
return this.get('Givenname');
|
|
102
|
+
}
|
|
103
|
+
get surname() {
|
|
104
|
+
return this.get('Surname');
|
|
105
|
+
}
|
|
106
|
+
get orcid() {
|
|
107
|
+
return this.get('X-ORCID');
|
|
108
|
+
}
|
|
109
|
+
get gnduri() {
|
|
110
|
+
return this.get('X-GND-URI');
|
|
111
|
+
}
|
|
112
|
+
get ror() {
|
|
113
|
+
return this.get('X-ROR');
|
|
114
|
+
}
|
|
115
|
+
get wikidata() {
|
|
116
|
+
return this.get('X-Wikidata');
|
|
117
|
+
}
|
|
118
|
+
get title() {
|
|
119
|
+
return this.get('TITLE');
|
|
120
|
+
}
|
|
121
|
+
get org() {
|
|
122
|
+
return this.get('ORG');
|
|
123
|
+
}
|
|
124
|
+
get contributeDate() {
|
|
125
|
+
const string = this.get('X-ES-LOM-CONTRIBUTE-DATE');
|
|
126
|
+
if (string)
|
|
127
|
+
return string.split('T')[0];
|
|
128
|
+
return string;
|
|
129
|
+
}
|
|
130
|
+
get url() {
|
|
131
|
+
return this.get('URL');
|
|
132
|
+
}
|
|
133
|
+
get orgPhone() {
|
|
134
|
+
return this.get('TEL;TYPE=WORK,VOICE');
|
|
135
|
+
}
|
|
136
|
+
get email() {
|
|
137
|
+
return this.get('EMAIL;TYPE=PREF,INTERNET');
|
|
138
|
+
}
|
|
139
|
+
get uid() {
|
|
140
|
+
return this.get('UID:urn:uuid');
|
|
141
|
+
}
|
|
142
|
+
get street() {
|
|
143
|
+
return this.get('ADR;TYPE=intl,postal,parcel,work', 2);
|
|
144
|
+
}
|
|
145
|
+
get city() {
|
|
146
|
+
return this.get('ADR;TYPE=intl,postal,parcel,work', 3);
|
|
147
|
+
}
|
|
148
|
+
get region() {
|
|
149
|
+
return this.get('ADR;TYPE=intl,postal,parcel,work', 4);
|
|
150
|
+
}
|
|
151
|
+
get zip() {
|
|
152
|
+
return this.get('ADR;TYPE=intl,postal,parcel,work', 5);
|
|
153
|
+
}
|
|
154
|
+
get country() {
|
|
155
|
+
return this.get('ADR;TYPE=intl,postal,parcel,work', 6);
|
|
156
|
+
}
|
|
157
|
+
toVCardString() {
|
|
158
|
+
// unaltered -> so return a null value
|
|
159
|
+
if (!this.isDirty)
|
|
160
|
+
return null;
|
|
161
|
+
if (this.get('Givenname') || this.get('Surname'))
|
|
162
|
+
this.set('FN', this.get('Givenname', -1, '') + ' ' + this.get('Surname', -1, ''));
|
|
163
|
+
return this.lines.join('\n');
|
|
164
|
+
}
|
|
165
|
+
getDisplayName() {
|
|
166
|
+
const string = (this.title ?? '') + ' ' + (this.givenname ?? '') + ' ' + (this.surname ?? '');
|
|
167
|
+
if (string.trim() === '') {
|
|
168
|
+
return this.org || '';
|
|
169
|
+
}
|
|
170
|
+
return string;
|
|
171
|
+
}
|
|
172
|
+
get(key, splitIndex = -1, fallback = null) {
|
|
173
|
+
if (key == 'Surname') {
|
|
174
|
+
splitIndex = 0;
|
|
175
|
+
key = 'N';
|
|
176
|
+
}
|
|
177
|
+
if (key == 'Givenname') {
|
|
178
|
+
splitIndex = 1;
|
|
179
|
+
key = 'N';
|
|
180
|
+
}
|
|
181
|
+
for (let line of this.lines) {
|
|
182
|
+
line = line.trim();
|
|
183
|
+
if (line.startsWith(key + ':')) {
|
|
184
|
+
const value = line.substring(key.length + 1).trim();
|
|
185
|
+
if (splitIndex != -1)
|
|
186
|
+
return this.deEscape(value.split(';')[splitIndex]);
|
|
187
|
+
return this.deEscape(value);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return fallback;
|
|
191
|
+
}
|
|
192
|
+
remove(key) {
|
|
193
|
+
for (let i = 0; i < this.lines.length; i++) {
|
|
194
|
+
if (this.lines[i].startsWith(key + ':')) {
|
|
195
|
+
this.lines.splice(i, 1);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
set(key, value, splitIndex = -1) {
|
|
202
|
+
// no value and empty vcard -> do nothing
|
|
203
|
+
if (!this.isDirty && !value)
|
|
204
|
+
return;
|
|
205
|
+
if (key == 'Surname') {
|
|
206
|
+
splitIndex = 0;
|
|
207
|
+
key = 'N';
|
|
208
|
+
}
|
|
209
|
+
if (key == 'Givenname') {
|
|
210
|
+
splitIndex = 1;
|
|
211
|
+
key = 'N';
|
|
212
|
+
}
|
|
213
|
+
let i = 0;
|
|
214
|
+
for (let line of this.lines) {
|
|
215
|
+
line = line.trim();
|
|
216
|
+
if (line.startsWith(key + ':')) {
|
|
217
|
+
let lineValue = line.substring(key.length + 1).trim();
|
|
218
|
+
if (splitIndex != -1) {
|
|
219
|
+
const split = lineValue.split(';');
|
|
220
|
+
split[splitIndex] = this.escape(value);
|
|
221
|
+
lineValue = split.join(';');
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
lineValue = this.escape(value);
|
|
225
|
+
}
|
|
226
|
+
this.lines[i] = line.substring(0, key.length + 1) + lineValue;
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
i++;
|
|
230
|
+
}
|
|
231
|
+
let lineValue = this.escape(value);
|
|
232
|
+
if (splitIndex >= 0) {
|
|
233
|
+
lineValue = '';
|
|
234
|
+
while (lineValue.length < splitIndex)
|
|
235
|
+
lineValue += ';';
|
|
236
|
+
lineValue += this.escape(value);
|
|
237
|
+
}
|
|
238
|
+
this.lines.splice(this.getNextLine(), 0, key + ':' + lineValue);
|
|
239
|
+
this.isDirty = true;
|
|
240
|
+
}
|
|
241
|
+
getNextLine() {
|
|
242
|
+
let i = 0;
|
|
243
|
+
for (const line of this.lines) {
|
|
244
|
+
if (line.trim() == 'END:VCARD')
|
|
245
|
+
return i - 1;
|
|
246
|
+
i++;
|
|
247
|
+
}
|
|
248
|
+
return this.lines.length - 1;
|
|
249
|
+
}
|
|
250
|
+
deEscape(value) {
|
|
251
|
+
if (value == null)
|
|
252
|
+
return '';
|
|
253
|
+
return value.replace(/\\\\/g, '\\').replace(/\\,/g, ',');
|
|
254
|
+
}
|
|
255
|
+
escape(value) {
|
|
256
|
+
if (value == null)
|
|
257
|
+
return '';
|
|
258
|
+
return value.replace(/\\/g, '\\\\').replace(/,/g, '\\,').replace(/;/g, ' ');
|
|
259
|
+
}
|
|
260
|
+
copy() {
|
|
261
|
+
return new VCard(this.toVCardString());
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Apply all data from an other vcard to this object
|
|
265
|
+
* @param other
|
|
266
|
+
*/
|
|
267
|
+
apply(other) {
|
|
268
|
+
this.lines = other.lines;
|
|
269
|
+
}
|
|
270
|
+
getType() {
|
|
271
|
+
return this.isValid()
|
|
272
|
+
? this.givenname || this.surname
|
|
273
|
+
? VCard.TYPE_PERSON
|
|
274
|
+
: VCard.TYPE_ORG
|
|
275
|
+
: VCard.TYPE_PERSON;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVkNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3V0aWwvVkNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxNQUFNLE9BQU8sS0FBSzthQUNBLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO2FBQ2hCLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFJM0IsWUFBWSxRQUFnQixJQUFJO1FBSGhDLHdCQUF3QjtRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBR3BCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUN4RDtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUks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QUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsS0FBWTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU87Z0JBQzVCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgVG9yc3RlbiBvbiAyOC4wMi4yMDE3LlxuICovXG5cbmV4cG9ydCBjbGFzcyBWQ2FyZCB7XG4gICAgcHVibGljIHN0YXRpYyBUWVBFX1BFUlNPTiA9IDA7XG4gICAgcHVibGljIHN0YXRpYyBUWVBFX09SRyA9IDE7XG4gICAgLy8gd2FzIHRoZSB2Y2FyZCBhbHRlcmVkXG4gICAgcHJpdmF0ZSBpc0RpcnR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsaW5lczogc3RyaW5nW107XG4gICAgY29uc3RydWN0b3IodmNhcmQ6IHN0cmluZyA9IG51bGwpIHtcbiAgICAgICAgaWYgKHZjYXJkKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzID0gdmNhcmQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZW1vdmUoXCJGTlwiKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5nZXQoJ0JFR0lOJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSgwLCAwLCAnQkVHSU46VkNBUkQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5nZXQoJ1ZFUlNJT04nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc3BsaWNlKDEsIDAsICdWRVJTSU9OOjMuMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmdldCgnRU5EJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZSh0aGlzLmxpbmVzLmxlbmd0aCwgMCwgJ0VORDpWQ0FSRCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnQkVHSU46VkNBUkQnKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnVkVSU0lPTjozLjAnKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaCgnRU5EOlZDQVJEJyk7XG4gICAgICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHZjYXJkIHNlZW1zIHRvIGhhdmUgdmFsaWQgZGF0YVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gICAgICovXG4gICAgcHVibGljIGlzVmFsaWQoKSB7XG4gICAgICAgIC8vIHJldHVybiB0aGlzLmxpbmVzIT1udWxsICYmIHRoaXMubGluZXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5naXZlbm5hbWUgfHxcbiAgICAgICAgICAgIHRoaXMuc3VybmFtZSB8fFxuICAgICAgICAgICAgdGhpcy5vcmcgfHxcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0IHx8XG4gICAgICAgICAgICB0aGlzLmNpdHkgfHxcbiAgICAgICAgICAgIHRoaXMuemlwIHx8XG4gICAgICAgICAgICB0aGlzLmNvdW50cnlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBnaXZlbm5hbWUoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdHaXZlbm5hbWUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBzdXJuYW1lKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnU3VybmFtZScsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRpdGxlKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnVElUTEUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBvcmcoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdPUkcnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBvcmdQaG9uZShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1RFTDtUWVBFPVdPUkssVk9JQ0UnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCB1cmwoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdVUkwnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBlbWFpbChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0VNQUlMO1RZUEU9UFJFRixJTlRFUk5FVCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHVpZChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1VJRDp1cm46dXVpZCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG9yY2lkKGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnWC1PUkNJRCcsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGduZHVyaShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1gtR05ELVVSSScsIGRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHJvcihkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ1gtUk9SJywgZGF0YSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgd2lraWRhdGEoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdYLVdpa2lkYXRhJywgZGF0YSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc3RyZWV0KGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCBkYXRhLCAyKTtcbiAgICB9XG4gICAgcHVibGljIHNldCBjaXR5KGRhdGE6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCBkYXRhLCAzKTtcbiAgICB9XG4gICAgcHVibGljIHNldCByZWdpb24oZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdBRFI7VFlQRT1pbnRsLHBvc3RhbCxwYXJjZWwsd29yaycsIGRhdGEsIDQpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHppcChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgZGF0YSwgNSk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY291bnRyeShkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgZGF0YSwgNik7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29udHJpYnV0ZURhdGUoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KCdYLUVTLUxPTS1DT05UUklCVVRFLURBVEUnLCBkYXRhKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBnaXZlbm5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnR2l2ZW5uYW1lJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgc3VybmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdTdXJuYW1lJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgb3JjaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnWC1PUkNJRCcpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGduZHVyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdYLUdORC1VUkknKTtcbiAgICB9XG4gICAgcHVibGljIGdldCByb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnWC1ST1InKTtcbiAgICB9XG4gICAgcHVibGljIGdldCB3aWtpZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdYLVdpa2lkYXRhJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnVElUTEUnKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBvcmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnT1JHJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29udHJpYnV0ZURhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0KCdYLUVTLUxPTS1DT05UUklCVVRFLURBVEUnKTtcbiAgICAgICAgaWYgKHN0cmluZykgcmV0dXJuIHN0cmluZy5zcGxpdCgnVCcpWzBdO1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdVUkwnKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBvcmdQaG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdURUw7VFlQRT1XT1JLLFZPSUNFJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnRU1BSUw7VFlQRT1QUkVGLElOVEVSTkVUJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdWlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ1VJRDp1cm46dXVpZCcpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHN0cmVldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdBRFI7VFlQRT1pbnRsLHBvc3RhbCxwYXJjZWwsd29yaycsIDIpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCAzKTtcbiAgICB9XG4gICAgcHVibGljIGdldCByZWdpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCA0KTtcbiAgICB9XG4gICAgcHVibGljIGdldCB6aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnQURSO1RZUEU9aW50bCxwb3N0YWwscGFyY2VsLHdvcmsnLCA1KTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjb3VudHJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ0FEUjtUWVBFPWludGwscG9zdGFsLHBhcmNlbCx3b3JrJywgNik7XG4gICAgfVxuICAgIHB1YmxpYyB0b1ZDYXJkU3RyaW5nKCkge1xuICAgICAgICAvLyB1bmFsdGVyZWQgLT4gc28gcmV0dXJuIGEgbnVsbCB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICh0aGlzLmdldCgnR2l2ZW5uYW1lJykgfHwgdGhpcy5nZXQoJ1N1cm5hbWUnKSlcbiAgICAgICAgICAgIHRoaXMuc2V0KCdGTicsIHRoaXMuZ2V0KCdHaXZlbm5hbWUnLCAtMSwgJycpICsgJyAnICsgdGhpcy5nZXQoJ1N1cm5hbWUnLCAtMSwgJycpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXMuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXREaXNwbGF5TmFtZSgpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nID1cbiAgICAgICAgICAgICh0aGlzLnRpdGxlID8/ICcnKSArICcgJyArICh0aGlzLmdpdmVubmFtZSA/PyAnJykgKyAnICcgKyAodGhpcy5zdXJuYW1lID8/ICcnKTtcbiAgICAgICAgaWYgKHN0cmluZy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcmcgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZywgc3BsaXRJbmRleCA9IC0xLCBmYWxsYmFjazogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICBpZiAoa2V5ID09ICdTdXJuYW1lJykge1xuICAgICAgICAgICAgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgICAgICBrZXkgPSAnTic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PSAnR2l2ZW5uYW1lJykge1xuICAgICAgICAgICAgc3BsaXRJbmRleCA9IDE7XG4gICAgICAgICAgICBrZXkgPSAnTic7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGtleS5sZW5ndGggKyAxKS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0SW5kZXggIT0gLTEpIHJldHVybiB0aGlzLmRlRXNjYXBlKHZhbHVlLnNwbGl0KCc7Jylbc3BsaXRJbmRleF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlRXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lc1tpXS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNwbGl0SW5kZXggPSAtMSkge1xuICAgICAgICAvLyBubyB2YWx1ZSBhbmQgZW1wdHkgdmNhcmQgLT4gZG8gbm90aGluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXJ0eSAmJiAhdmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKGtleSA9PSAnU3VybmFtZScpIHtcbiAgICAgICAgICAgIHNwbGl0SW5kZXggPSAwO1xuICAgICAgICAgICAga2V5ID0gJ04nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT0gJ0dpdmVubmFtZScpIHtcbiAgICAgICAgICAgIHNwbGl0SW5kZXggPSAxO1xuICAgICAgICAgICAga2V5ID0gJ04nO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGtleSArICc6JykpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGluZVZhbHVlID0gbGluZS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCArIDEpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRJbmRleCAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpdCA9IGxpbmVWYWx1ZS5zcGxpdCgnOycpO1xuICAgICAgICAgICAgICAgICAgICBzcGxpdFtzcGxpdEluZGV4XSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGluZVZhbHVlID0gc3BsaXQuam9pbignOycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lc1tpXSA9IGxpbmUuc3Vic3RyaW5nKDAsIGtleS5sZW5ndGggKyAxKSArIGxpbmVWYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmVWYWx1ZSA9IHRoaXMuZXNjYXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHNwbGl0SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGluZVZhbHVlID0gJyc7XG4gICAgICAgICAgICB3aGlsZSAobGluZVZhbHVlLmxlbmd0aCA8IHNwbGl0SW5kZXgpIGxpbmVWYWx1ZSArPSAnOyc7XG4gICAgICAgICAgICBsaW5lVmFsdWUgKz0gdGhpcy5lc2NhcGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGluZXMuc3BsaWNlKHRoaXMuZ2V0TmV4dExpbmUoKSwgMCwga2V5ICsgJzonICsgbGluZVZhbHVlKTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRMaW5lKCkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aGlzLmxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT0gJ0VORDpWQ0FSRCcpIHJldHVybiBpIC0gMTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBwcml2YXRlIGRlRXNjYXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJykucmVwbGFjZSgvXFxcXCwvZywgJywnKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBlc2NhcGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC8sL2csICdcXFxcLCcpLnJlcGxhY2UoLzsvZywgJyAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWQ2FyZCh0aGlzLnRvVkNhcmRTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYWxsIGRhdGEgZnJvbSBhbiBvdGhlciB2Y2FyZCB0byB0aGlzIG9iamVjdFxuICAgICAqIEBwYXJhbSBvdGhlclxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBseShvdGhlcjogVkNhcmQpIHtcbiAgICAgICAgdGhpcy5saW5lcyA9IG90aGVyLmxpbmVzO1xuICAgIH1cblxuICAgIGdldFR5cGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpXG4gICAgICAgICAgICA/IHRoaXMuZ2l2ZW5uYW1lIHx8IHRoaXMuc3VybmFtZVxuICAgICAgICAgICAgICAgID8gVkNhcmQuVFlQRV9QRVJTT05cbiAgICAgICAgICAgICAgICA6IFZDYXJkLlRZUEVfT1JHXG4gICAgICAgICAgICA6IFZDYXJkLlRZUEVfUEVSU09OO1xuICAgIH1cbn1cbiJdfQ==
|