new-front-common-library 0.0.75 → 0.0.77-ERGO-ROBOTO
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/README.md +28 -28
- package/assets/css/_dark-theme.scss +648 -648
- package/assets/css/_flex.scss +55 -55
- package/assets/css/_global.scss +692 -692
- package/assets/css/_light-theme.scss +651 -651
- package/assets/css/_mat-palettes.scss +96 -96
- package/assets/css/_themes.scss +52 -52
- package/assets/i18n/front-common/de.json +24 -24
- package/assets/i18n/front-common/en.json +24 -24
- package/assets/i18n/front-common/fr.json +24 -24
- package/bundles/new-front-common-library.umd.js +4903 -4900
- package/bundles/new-front-common-library.umd.js.map +1 -1
- package/esm2015/lib/util/array.service.js +19 -19
- package/esm2015/lib/util/component/header/header.component.js +189 -189
- package/esm2015/lib/util/component/overlay/overlay.component.js +44 -44
- package/esm2015/lib/util/component/overlay/overlay.service.js +24 -24
- package/esm2015/lib/util/component/popup/popup-login/popup-login.component.js +90 -90
- package/esm2015/lib/util/component/sub-header/sub-header.component.js +48 -48
- package/esm2015/lib/util/config.js +8 -8
- package/esm2015/lib/util/date/PeriodModel.js +8 -8
- package/esm2015/lib/util/date/date-adapter.js +41 -41
- package/esm2015/lib/util/date/date-format-constants.js +12 -12
- package/esm2015/lib/util/date/date.util.js +218 -218
- package/esm2015/lib/util/decorators/theme.decorator.js +22 -22
- package/esm2015/lib/util/decorators/user.decorator.js +25 -25
- package/esm2015/lib/util/directives/my-number-formatter-directive.js +34 -34
- package/esm2015/lib/util/directives/show-if-truncated.directive.js +25 -25
- package/esm2015/lib/util/enums/rapid-search-item-type.enum.js +10 -10
- package/esm2015/lib/util/enums/status-color.enum.js +11 -11
- package/esm2015/lib/util/event/header/header-events.service.js +21 -21
- package/esm2015/lib/util/event/storage/local-storage-events.service.js +17 -17
- package/esm2015/lib/util/event/storage/session-storage-events.service.js +18 -18
- package/esm2015/lib/util/http/http-params.builder.js +27 -27
- package/esm2015/lib/util/i18n/de.js +60 -59
- package/esm2015/lib/util/i18n/en.js +60 -59
- package/esm2015/lib/util/i18n/fr.js +60 -59
- package/esm2015/lib/util/i18n/multi-translate-http-loader.js +21 -21
- package/esm2015/lib/util/interfaces/permissions.interface.js +2 -2
- package/esm2015/lib/util/models/any-line.model.js +37 -37
- package/esm2015/lib/util/models/audio-content.model.js +27 -27
- package/esm2015/lib/util/models/authPermission.model.js +16 -16
- package/esm2015/lib/util/models/authUser.model.js +20 -20
- package/esm2015/lib/util/models/basic.model.js +14 -14
- package/esm2015/lib/util/models/box-set-item.model.js +19 -19
- package/esm2015/lib/util/models/disc-program.model.js +26 -26
- package/esm2015/lib/util/models/disc.model.js +22 -22
- package/esm2015/lib/util/models/eventType.model.js +7 -7
- package/esm2015/lib/util/models/expenditure-commitment/purchase-order-file.model.js +22 -22
- package/esm2015/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/index.js +98 -98
- package/esm2015/lib/util/models/lang-line.model.js +27 -27
- package/esm2015/lib/util/models/legal/contract-work.model.js +23 -23
- package/esm2015/lib/util/models/legal/contract-work2.model.js +21 -21
- package/esm2015/lib/util/models/media-line.model.js +18 -18
- package/esm2015/lib/util/models/menu-language.model.js +15 -15
- package/esm2015/lib/util/models/permission.model.js +20 -20
- package/esm2015/lib/util/models/product-box-set.model.js +16 -16
- package/esm2015/lib/util/models/product-disc-detail.model.js +22 -22
- package/esm2015/lib/util/models/product-disc.model.js +27 -27
- package/esm2015/lib/util/models/product-division.model.js +29 -29
- package/esm2015/lib/util/models/product-type.model.js +22 -22
- package/esm2015/lib/util/models/product.model.js +62 -62
- package/esm2015/lib/util/models/program.model.js +28 -28
- package/esm2015/lib/util/models/purchase-order/purchase-order.model.js +53 -53
- package/esm2015/lib/util/models/referential/WorkVersionArticleDto.js +17 -17
- package/esm2015/lib/util/models/referential/adress-type.model.js +14 -14
- package/esm2015/lib/util/models/referential/adress.model.js +28 -28
- package/esm2015/lib/util/models/referential/attached-file.model.js +17 -17
- package/esm2015/lib/util/models/referential/bank-account.model.js +24 -24
- package/esm2015/lib/util/models/referential/bank-accounts.model.js +31 -31
- package/esm2015/lib/util/models/referential/basic-hierarchy.model.js +8 -8
- package/esm2015/lib/util/models/referential/broadcast-list-item.model.js +13 -13
- package/esm2015/lib/util/models/referential/color.model.js +16 -16
- package/esm2015/lib/util/models/referential/company.model.js +16 -16
- package/esm2015/lib/util/models/referential/content-type.model.js +17 -17
- package/esm2015/lib/util/models/referential/content.model.js +22 -22
- package/esm2015/lib/util/models/referential/cost-center-criteria-values.model.js +14 -14
- package/esm2015/lib/util/models/referential/cost-center-criteria.model.js +13 -13
- package/esm2015/lib/util/models/referential/cost-center.model.js +28 -28
- package/esm2015/lib/util/models/referential/coutry.model.js +16 -16
- package/esm2015/lib/util/models/referential/currency.model.js +20 -20
- package/esm2015/lib/util/models/referential/editorial-content.model.js +18 -18
- package/esm2015/lib/util/models/referential/fixing.model.js +16 -16
- package/esm2015/lib/util/models/referential/flat-media.model.js +18 -18
- package/esm2015/lib/util/models/referential/format-image.model.js +16 -16
- package/esm2015/lib/util/models/referential/format-type.model.js +16 -16
- package/esm2015/lib/util/models/referential/format.model.js +17 -17
- package/esm2015/lib/util/models/referential/fsk-index.model.js +20 -20
- package/esm2015/lib/util/models/referential/fsk.model.js +22 -22
- package/esm2015/lib/util/models/referential/function.model.js +23 -23
- package/esm2015/lib/util/models/referential/genre.model.js +17 -17
- package/esm2015/lib/util/models/referential/invoice-product-type.model.js +22 -22
- package/esm2015/lib/util/models/referential/keywords.model.js +2 -2
- package/esm2015/lib/util/models/referential/language.model.js +18 -18
- package/esm2015/lib/util/models/referential/media-filter.model.js +3 -3
- package/esm2015/lib/util/models/referential/media.model.js +20 -20
- package/esm2015/lib/util/models/referential/module.model.js +20 -20
- package/esm2015/lib/util/models/referential/parameter.model.js +2 -2
- package/esm2015/lib/util/models/referential/participant.model.js +20 -20
- package/esm2015/lib/util/models/referential/person.model.js +23 -23
- package/esm2015/lib/util/models/referential/project-status.model.js +16 -16
- package/esm2015/lib/util/models/referential/quota.model.js +17 -17
- package/esm2015/lib/util/models/referential/referential-entity-state.model.js +16 -16
- package/esm2015/lib/util/models/referential/referential-value.model.js +16 -16
- package/esm2015/lib/util/models/referential/referentiel.model.js +26 -26
- package/esm2015/lib/util/models/referential/restriction.model.js +20 -20
- package/esm2015/lib/util/models/referential/sap-order.model.js +20 -20
- package/esm2015/lib/util/models/referential/service-error.model.js +15 -15
- package/esm2015/lib/util/models/referential/sound.model.js +16 -16
- package/esm2015/lib/util/models/referential/territories-languages.model.js +16 -16
- package/esm2015/lib/util/models/referential/territory-filter.model.js +3 -3
- package/esm2015/lib/util/models/referential/territory.model.js +17 -17
- package/esm2015/lib/util/models/referential/theme.model.js +17 -17
- package/esm2015/lib/util/models/referential/third-party-creation-request.model.js +44 -44
- package/esm2015/lib/util/models/referential/third-party-module.model.js +20 -20
- package/esm2015/lib/util/models/referential/third-party.model.js +83 -83
- package/esm2015/lib/util/models/referential/translated-value-model.js +16 -16
- package/esm2015/lib/util/models/referential/tva.model.js +16 -16
- package/esm2015/lib/util/models/referential/type-export.model.js +16 -16
- package/esm2015/lib/util/models/referential/type-tva-company-territory.model.js +32 -32
- package/esm2015/lib/util/models/referential/type-tva.model.js +25 -25
- package/esm2015/lib/util/models/referential/work-addons-model.js +16 -16
- package/esm2015/lib/util/models/referential/work-appartenance.model.js +17 -17
- package/esm2015/lib/util/models/referential/work-genre.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-language.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-milo.model.js +61 -61
- package/esm2015/lib/util/models/referential/work-participant.model.js +21 -21
- package/esm2015/lib/util/models/referential/work-restrictions-model.js +13 -13
- package/esm2015/lib/util/models/referential/work-theme.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-title.model.js +20 -20
- package/esm2015/lib/util/models/referential/work-version-origin.model.js +16 -16
- package/esm2015/lib/util/models/referential/work-version-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/referential/work-versions-used.model.js +19 -19
- package/esm2015/lib/util/models/referential/work-versions.model.js +27 -27
- package/esm2015/lib/util/models/referential/work-year-production.model.js +13 -13
- package/esm2015/lib/util/models/referential/work.model.js +22 -22
- package/esm2015/lib/util/models/referential/zone.model.js +14 -14
- package/esm2015/lib/util/models/referentiel.model.js +26 -26
- package/esm2015/lib/util/models/search-response.model.js +10 -10
- package/esm2015/lib/util/models/section.model.js +8 -8
- package/esm2015/lib/util/models/select/options.model.js +8 -8
- package/esm2015/lib/util/models/select/select.model.js +7 -7
- package/esm2015/lib/util/models/subtitle-content.model.js +28 -28
- package/esm2015/lib/util/models/user-video.model.js +22 -22
- package/esm2015/lib/util/models/user.model.js +34 -34
- package/esm2015/lib/util/models/video/product-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/video/support-rapid-search.model.js +3 -3
- package/esm2015/lib/util/models/video-content.model.js +18 -18
- package/esm2015/lib/util/number.validator.js +129 -129
- package/esm2015/lib/util/permissions/permissions.service.js +41 -41
- package/esm2015/lib/util/pipes/capitalizefirst.pipe.js +41 -41
- package/esm2015/lib/util/pipes/comma-separated-number.pipe.js +15 -15
- package/esm2015/lib/util/pipes/common-translate.pipe.js +38 -38
- package/esm2015/lib/util/pipes/display-html.pipe.js +20 -20
- package/esm2015/lib/util/pipes/display-null.pipe.js +24 -24
- package/esm2015/lib/util/pipes/format-duration.pipe.js +23 -23
- package/esm2015/lib/util/pipes/format-number-input.pipe.js +22 -22
- package/esm2015/lib/util/pipes/local-date.pipe.js +27 -27
- package/esm2015/lib/util/pipes/my-number.pipe.js +44 -44
- package/esm2015/lib/util/pipes/third-party-address.pipe.js +17 -17
- package/esm2015/lib/util/pipes/trim-string.pipe.js +25 -25
- package/esm2015/lib/util/regex/regex.service.js +94 -94
- package/esm2015/lib/util/services/api/common-api.service.js +98 -98
- package/esm2015/lib/util/services/elasticsearch/elasticsearch.service.js +65 -65
- package/esm2015/lib/util/services/form-action/form-actions-events.service.js +25 -25
- package/esm2015/lib/util/services/guard/auth.guard.js +43 -43
- package/esm2015/lib/util/services/guard/login.guard.js +34 -34
- package/esm2015/lib/util/services/history/history.service.js +39 -39
- package/esm2015/lib/util/services/interceptor/auth.interceptor.js +53 -53
- package/esm2015/lib/util/services/jwt-security/aes.service.js +34 -34
- package/esm2015/lib/util/services/jwt-security/interceptorhttp.service.js +18 -18
- package/esm2015/lib/util/services/jwt-security/jwt.helpher.js +34 -34
- package/esm2015/lib/util/services/storage/local-storage.service.js +36 -36
- package/esm2015/lib/util/services/storage/session-storage.service.js +38 -38
- package/esm2015/lib/util/services/translate-language/lang.service.js +31 -31
- package/esm2015/lib/util/sort.js +22 -22
- package/esm2015/lib/util/theme/theme-event.service.js +17 -17
- package/esm2015/lib/util/toaster/toaster-events.service.js +32 -32
- package/esm2015/lib/util/util.module.js +270 -270
- package/esm2015/new-front-common-library.js +4 -4
- package/esm2015/public-api.js +56 -56
- package/fesm2015/new-front-common-library.js +4228 -4225
- package/fesm2015/new-front-common-library.js.map +1 -1
- package/lib/util/array.service.d.ts +7 -7
- package/lib/util/component/header/header.component.d.ts +65 -65
- package/lib/util/component/overlay/overlay.component.d.ts +17 -17
- package/lib/util/component/overlay/overlay.service.d.ts +13 -13
- package/lib/util/component/popup/popup-login/popup-login.component.d.ts +32 -32
- package/lib/util/component/sub-header/sub-header.component.d.ts +13 -13
- package/lib/util/config.d.ts +8 -8
- package/lib/util/date/PeriodModel.d.ts +6 -6
- package/lib/util/date/date-adapter.d.ts +8 -8
- package/lib/util/date/date-format-constants.d.ts +25 -25
- package/lib/util/date/date.util.d.ts +16 -16
- package/lib/util/decorators/theme.decorator.d.ts +1 -1
- package/lib/util/decorators/user.decorator.d.ts +1 -1
- package/lib/util/directives/my-number-formatter-directive.d.ts +15 -15
- package/lib/util/directives/show-if-truncated.directive.d.ts +11 -11
- package/lib/util/enums/rapid-search-item-type.enum.d.ts +8 -8
- package/lib/util/enums/status-color.enum.d.ts +9 -9
- package/lib/util/event/header/header-events.service.d.ts +11 -11
- package/lib/util/event/storage/local-storage-events.service.d.ts +9 -9
- package/lib/util/event/storage/session-storage-events.service.d.ts +10 -10
- package/lib/util/http/http-params.builder.d.ts +9 -9
- package/lib/util/i18n/de.d.ts +51 -50
- package/lib/util/i18n/en.d.ts +51 -50
- package/lib/util/i18n/fr.d.ts +51 -50
- package/lib/util/i18n/multi-translate-http-loader.d.ts +14 -14
- package/lib/util/interfaces/permissions.interface.d.ts +3 -3
- package/lib/util/models/any-line.model.d.ts +24 -24
- package/lib/util/models/audio-content.model.d.ts +27 -27
- package/lib/util/models/authPermission.model.d.ts +7 -7
- package/lib/util/models/authUser.model.d.ts +14 -14
- package/lib/util/models/basic.model.d.ts +11 -11
- package/lib/util/models/box-set-item.model.d.ts +12 -12
- package/lib/util/models/disc-program.model.d.ts +9 -9
- package/lib/util/models/disc.model.d.ts +15 -15
- package/lib/util/models/eventType.model.d.ts +5 -5
- package/lib/util/models/expenditure-commitment/purchase-order-file.model.d.ts +8 -8
- package/lib/util/models/expenditure-commitment/purchase-order-rapid-search.model.d.ts +10 -10
- package/lib/util/models/index.d.ts +97 -97
- package/lib/util/models/lang-line.model.d.ts +18 -18
- package/lib/util/models/legal/contract-work.model.d.ts +27 -27
- package/lib/util/models/legal/contract-work2.model.d.ts +23 -23
- package/lib/util/models/media-line.model.d.ts +9 -9
- package/lib/util/models/menu-language.model.d.ts +6 -6
- package/lib/util/models/permission.model.d.ts +12 -12
- package/lib/util/models/product-box-set.model.d.ts +8 -8
- package/lib/util/models/product-disc-detail.model.d.ts +14 -14
- package/lib/util/models/product-disc.model.d.ts +11 -11
- package/lib/util/models/product-division.model.d.ts +15 -15
- package/lib/util/models/product-type.model.d.ts +7 -7
- package/lib/util/models/product.model.d.ts +52 -52
- package/lib/util/models/program.model.d.ts +21 -21
- package/lib/util/models/purchase-order/purchase-order.model.d.ts +40 -40
- package/lib/util/models/referential/WorkVersionArticleDto.d.ts +10 -10
- package/lib/util/models/referential/adress-type.model.d.ts +5 -5
- package/lib/util/models/referential/adress.model.d.ts +20 -20
- package/lib/util/models/referential/attached-file.model.d.ts +11 -11
- package/lib/util/models/referential/bank-account.model.d.ts +15 -15
- package/lib/util/models/referential/bank-accounts.model.d.ts +17 -17
- package/lib/util/models/referential/basic-hierarchy.model.d.ts +6 -6
- package/lib/util/models/referential/broadcast-list-item.model.d.ts +8 -8
- package/lib/util/models/referential/color.model.d.ts +6 -6
- package/lib/util/models/referential/company.model.d.ts +7 -7
- package/lib/util/models/referential/content-type.model.d.ts +12 -12
- package/lib/util/models/referential/content.model.d.ts +7 -7
- package/lib/util/models/referential/cost-center-criteria-values.model.d.ts +7 -7
- package/lib/util/models/referential/cost-center-criteria.model.d.ts +12 -12
- package/lib/util/models/referential/cost-center.model.d.ts +18 -18
- package/lib/util/models/referential/coutry.model.d.ts +7 -7
- package/lib/util/models/referential/currency.model.d.ts +11 -11
- package/lib/util/models/referential/editorial-content.model.d.ts +25 -25
- package/lib/util/models/referential/fixing.model.d.ts +10 -10
- package/lib/util/models/referential/flat-media.model.d.ts +9 -9
- package/lib/util/models/referential/format-image.model.d.ts +7 -7
- package/lib/util/models/referential/format-type.model.d.ts +6 -6
- package/lib/util/models/referential/format.model.d.ts +7 -7
- package/lib/util/models/referential/fsk-index.model.d.ts +22 -22
- package/lib/util/models/referential/fsk.model.d.ts +37 -37
- package/lib/util/models/referential/function.model.d.ts +8 -8
- package/lib/util/models/referential/genre.model.d.ts +7 -7
- package/lib/util/models/referential/invoice-product-type.model.d.ts +7 -7
- package/lib/util/models/referential/keywords.model.d.ts +6 -6
- package/lib/util/models/referential/language.model.d.ts +11 -11
- package/lib/util/models/referential/media-filter.model.d.ts +10 -10
- package/lib/util/models/referential/media.model.d.ts +11 -11
- package/lib/util/models/referential/module.model.d.ts +11 -11
- package/lib/util/models/referential/parameter.model.d.ts +6 -6
- package/lib/util/models/referential/participant.model.d.ts +11 -11
- package/lib/util/models/referential/person.model.d.ts +13 -13
- package/lib/util/models/referential/project-status.model.d.ts +6 -6
- package/lib/util/models/referential/quota.model.d.ts +7 -7
- package/lib/util/models/referential/referential-entity-state.model.d.ts +11 -11
- package/lib/util/models/referential/referential-value.model.d.ts +11 -11
- package/lib/util/models/referential/referentiel.model.d.ts +12 -12
- package/lib/util/models/referential/restriction.model.d.ts +9 -9
- package/lib/util/models/referential/sap-order.model.d.ts +27 -27
- package/lib/util/models/referential/service-error.model.d.ts +13 -13
- package/lib/util/models/referential/sound.model.d.ts +6 -6
- package/lib/util/models/referential/territories-languages.model.d.ts +8 -8
- package/lib/util/models/referential/territory-filter.model.d.ts +6 -6
- package/lib/util/models/referential/territory.model.d.ts +12 -11
- package/lib/util/models/referential/theme.model.d.ts +7 -7
- package/lib/util/models/referential/third-party-creation-request.model.d.ts +48 -48
- package/lib/util/models/referential/third-party-module.model.d.ts +11 -11
- package/lib/util/models/referential/third-party.model.d.ts +45 -45
- package/lib/util/models/referential/translated-value-model.d.ts +10 -10
- package/lib/util/models/referential/tva.model.d.ts +7 -7
- package/lib/util/models/referential/type-export.model.d.ts +7 -7
- package/lib/util/models/referential/type-tva-company-territory.model.d.ts +18 -18
- package/lib/util/models/referential/type-tva.model.d.ts +10 -10
- package/lib/util/models/referential/work-addons-model.d.ts +25 -25
- package/lib/util/models/referential/work-appartenance.model.d.ts +7 -7
- package/lib/util/models/referential/work-genre.model.d.ts +11 -11
- package/lib/util/models/referential/work-language.model.d.ts +11 -11
- package/lib/util/models/referential/work-milo.model.d.ts +46 -46
- package/lib/util/models/referential/work-participant.model.d.ts +10 -10
- package/lib/util/models/referential/work-restrictions-model.d.ts +18 -18
- package/lib/util/models/referential/work-theme.model.d.ts +11 -11
- package/lib/util/models/referential/work-title.model.d.ts +10 -10
- package/lib/util/models/referential/work-version-origin.model.d.ts +10 -10
- package/lib/util/models/referential/work-version-rapid-search.model.d.ts +9 -9
- package/lib/util/models/referential/work-versions-used.model.d.ts +12 -12
- package/lib/util/models/referential/work-versions.model.d.ts +29 -29
- package/lib/util/models/referential/work-year-production.model.d.ts +6 -6
- package/lib/util/models/referential/work.model.d.ts +74 -74
- package/lib/util/models/referential/zone.model.d.ts +6 -6
- package/lib/util/models/referentiel.model.d.ts +12 -12
- package/lib/util/models/search-response.model.d.ts +7 -7
- package/lib/util/models/section.model.d.ts +7 -7
- package/lib/util/models/select/options.model.d.ts +6 -6
- package/lib/util/models/select/select.model.d.ts +5 -5
- package/lib/util/models/subtitle-content.model.d.ts +26 -26
- package/lib/util/models/user-video.model.d.ts +10 -10
- package/lib/util/models/user.model.d.ts +25 -25
- package/lib/util/models/video/product-rapid-search.model.d.ts +8 -8
- package/lib/util/models/video/support-rapid-search.model.d.ts +6 -6
- package/lib/util/models/video-content.model.d.ts +24 -24
- package/lib/util/number.validator.d.ts +14 -14
- package/lib/util/permissions/permissions.service.d.ts +12 -12
- package/lib/util/pipes/capitalizefirst.pipe.d.ts +8 -8
- package/lib/util/pipes/comma-separated-number.pipe.d.ts +7 -7
- package/lib/util/pipes/common-translate.pipe.d.ts +12 -12
- package/lib/util/pipes/display-html.pipe.d.ts +10 -10
- package/lib/util/pipes/display-null.pipe.d.ts +8 -8
- package/lib/util/pipes/format-duration.pipe.d.ts +7 -7
- package/lib/util/pipes/format-number-input.pipe.d.ts +7 -7
- package/lib/util/pipes/local-date.pipe.d.ts +9 -9
- package/lib/util/pipes/my-number.pipe.d.ts +11 -11
- package/lib/util/pipes/third-party-address.pipe.d.ts +8 -8
- package/lib/util/pipes/trim-string.pipe.d.ts +7 -7
- package/lib/util/regex/regex.service.d.ts +12 -12
- package/lib/util/services/api/common-api.service.d.ts +27 -27
- package/lib/util/services/elasticsearch/elasticsearch.service.d.ts +17 -17
- package/lib/util/services/form-action/form-actions-events.service.d.ts +14 -14
- package/lib/util/services/guard/auth.guard.d.ts +18 -18
- package/lib/util/services/guard/login.guard.d.ts +18 -18
- package/lib/util/services/history/history.service.d.ts +10 -10
- package/lib/util/services/interceptor/auth.interceptor.d.ts +16 -16
- package/lib/util/services/jwt-security/aes.service.d.ts +12 -12
- package/lib/util/services/jwt-security/interceptorhttp.service.d.ts +8 -8
- package/lib/util/services/jwt-security/jwt.helpher.d.ts +4 -4
- package/lib/util/services/storage/local-storage.service.d.ts +13 -13
- package/lib/util/services/storage/session-storage.service.d.ts +13 -13
- package/lib/util/services/translate-language/lang.service.d.ts +14 -14
- package/lib/util/sort.d.ts +4 -4
- package/lib/util/theme/theme-event.service.d.ts +9 -9
- package/lib/util/toaster/toaster-events.service.d.ts +15 -15
- package/lib/util/util.module.d.ts +50 -50
- package/new-front-common-library.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +53 -53
- package/esm2015/lib/util/models/milo/territory.model.js +0 -18
- package/lib/util/models/milo/territory.model.d.ts +0 -9
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
import { PeriodModel } from './PeriodModel';
|
|
2
|
-
/**
|
|
3
|
-
* Created by dstoian on 27/03/2017.
|
|
4
|
-
*/
|
|
5
|
-
export class DateUtil {
|
|
6
|
-
constructor() {
|
|
7
|
-
}
|
|
8
|
-
// Format Date to YYYY-MM-DD
|
|
9
|
-
static formatDate(date, language) {
|
|
10
|
-
const mm = date.getMonth() + 1;
|
|
11
|
-
const dd = date.getDate();
|
|
12
|
-
if (language && 'fr' === language) {
|
|
13
|
-
return [(dd > 9 ? '' : '0') + dd,
|
|
14
|
-
(mm > 9 ? '' : '0') + mm,
|
|
15
|
-
date.getFullYear()
|
|
16
|
-
].join('/');
|
|
17
|
-
}
|
|
18
|
-
return [date.getFullYear(),
|
|
19
|
-
(mm > 9 ? '' : '0') + mm,
|
|
20
|
-
(dd > 9 ? '' : '0') + dd
|
|
21
|
-
].join('-');
|
|
22
|
-
}
|
|
23
|
-
// convert a string formatted "YYYY-MM-DD" into a date object
|
|
24
|
-
static fromStringToDate(stringdate) {
|
|
25
|
-
const parts = stringdate.split('-');
|
|
26
|
-
const month = parts[1].toString();
|
|
27
|
-
const yearNumber = Number(parts[0]);
|
|
28
|
-
let monthNumber = 0;
|
|
29
|
-
if (month[0] === '0') {
|
|
30
|
-
monthNumber = +month[1];
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
monthNumber = +parts[1];
|
|
34
|
-
}
|
|
35
|
-
const numberOfDays = Number(parts[2]);
|
|
36
|
-
return new Date(yearNumber, monthNumber - 1, numberOfDays);
|
|
37
|
-
}
|
|
38
|
-
// convert a string formatted "YYYY-MM-DD" into a date object
|
|
39
|
-
static fromStringToDateSecond(stringdate) {
|
|
40
|
-
const parts = stringdate.split(',');
|
|
41
|
-
const month = parts[1].toString();
|
|
42
|
-
const yearNumber = Number(parts[0]);
|
|
43
|
-
let monthNumber = 0;
|
|
44
|
-
if (month[0] === '0') {
|
|
45
|
-
monthNumber = +month[1];
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
monthNumber = +parts[1];
|
|
49
|
-
}
|
|
50
|
-
const numberOfDays = Number(parts[2]);
|
|
51
|
-
return new Date(yearNumber, monthNumber - 1, numberOfDays);
|
|
52
|
-
}
|
|
53
|
-
static periodBetweenDates(startDate, endDate) {
|
|
54
|
-
DateUtil.initDaysPerMonths();
|
|
55
|
-
const a = new Date(startDate);
|
|
56
|
-
const b = new Date(endDate);
|
|
57
|
-
let numberOfDays = 0;
|
|
58
|
-
let numberOfYears = b.getFullYear() - a.getFullYear();
|
|
59
|
-
let numberOfMonths = (b.getMonth() - a.getMonth() + 12) % 12;
|
|
60
|
-
if (a.getMonth() === b.getMonth() && a.getTime() > b.getTime()) {
|
|
61
|
-
numberOfYears--;
|
|
62
|
-
}
|
|
63
|
-
if (a.getMonth() > b.getMonth()) {
|
|
64
|
-
numberOfYears--;
|
|
65
|
-
}
|
|
66
|
-
if (a.getDate() > b.getDate()) {
|
|
67
|
-
numberOfMonths--;
|
|
68
|
-
if (numberOfMonths < 0) {
|
|
69
|
-
numberOfMonths = 11;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (b.getDate() < a.getDate()) {
|
|
73
|
-
let numberOfDaysPerMonth = DateUtil.daysPerMonth.get(a.getMonth());
|
|
74
|
-
if (a.getMonth() === 1 && DateUtil.checkLeapYear(a.getFullYear())) {
|
|
75
|
-
numberOfDaysPerMonth++;
|
|
76
|
-
}
|
|
77
|
-
numberOfDays = numberOfDaysPerMonth - a.getDate() + b.getDate();
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
numberOfDays = b.getDate() - a.getDate();
|
|
81
|
-
}
|
|
82
|
-
return new PeriodModel(numberOfYears, numberOfMonths, numberOfDays);
|
|
83
|
-
}
|
|
84
|
-
static checkLeapYear(year) {
|
|
85
|
-
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
static initDaysPerMonths() {
|
|
91
|
-
DateUtil.daysPerMonth.set(0, 31);
|
|
92
|
-
DateUtil.daysPerMonth.set(1, 28);
|
|
93
|
-
DateUtil.daysPerMonth.set(2, 31);
|
|
94
|
-
DateUtil.daysPerMonth.set(3, 30);
|
|
95
|
-
DateUtil.daysPerMonth.set(4, 31);
|
|
96
|
-
DateUtil.daysPerMonth.set(5, 30);
|
|
97
|
-
DateUtil.daysPerMonth.set(6, 31);
|
|
98
|
-
DateUtil.daysPerMonth.set(7, 31);
|
|
99
|
-
DateUtil.daysPerMonth.set(8, 30);
|
|
100
|
-
DateUtil.daysPerMonth.set(9, 31);
|
|
101
|
-
DateUtil.daysPerMonth.set(10, 30);
|
|
102
|
-
DateUtil.daysPerMonth.set(11, 31);
|
|
103
|
-
}
|
|
104
|
-
// returns 0 if the 2 dates are equal, 1 if the first date is greater than the second one or -1 when it's the opposite
|
|
105
|
-
static compareLocalDates(first, second) {
|
|
106
|
-
if (first.getFullYear() > second.getFullYear()) {
|
|
107
|
-
return 1;
|
|
108
|
-
}
|
|
109
|
-
else if (first.getFullYear() < second.getFullYear()) {
|
|
110
|
-
return -1;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
if (first.getMonth() > second.getMonth()) {
|
|
114
|
-
return 1;
|
|
115
|
-
}
|
|
116
|
-
else if (first.getMonth() < second.getMonth()) {
|
|
117
|
-
return -1;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
if (first.getDate() > second.getDate()) {
|
|
121
|
-
return 1;
|
|
122
|
-
}
|
|
123
|
-
else if (first.getDate() < second.getDate()) {
|
|
124
|
-
return -1;
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return 0;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/* From moment-precise-range plugin */
|
|
133
|
-
static preciseDiff(d1, d2) {
|
|
134
|
-
// let m1 = moment(d1);
|
|
135
|
-
// let m2 = moment(d2);
|
|
136
|
-
//
|
|
137
|
-
// if (m1.isSame(m2)) {
|
|
138
|
-
// return new PeriodModel(0, 0, 0);
|
|
139
|
-
// }
|
|
140
|
-
// if (m1.isAfter(m2)) {
|
|
141
|
-
// const tmp = m1;
|
|
142
|
-
// m1 = m2;
|
|
143
|
-
// m2 = tmp;
|
|
144
|
-
// }
|
|
145
|
-
//
|
|
146
|
-
// let yDiff = m2.year() - m1.year();
|
|
147
|
-
// let mDiff = m2.month() - m1.month();
|
|
148
|
-
// let dDiff = m2.date() - m1.date();
|
|
149
|
-
// let hourDiff = m2.hour() - m1.hour();
|
|
150
|
-
// let minDiff = m2.minute() - m1.minute();
|
|
151
|
-
// let secDiff = m2.second() - m1.second();
|
|
152
|
-
//
|
|
153
|
-
// if (secDiff < 0) {
|
|
154
|
-
// secDiff = 60 + secDiff;
|
|
155
|
-
// minDiff--;
|
|
156
|
-
// }
|
|
157
|
-
// if (minDiff < 0) {
|
|
158
|
-
// minDiff = 60 + minDiff;
|
|
159
|
-
// hourDiff--;
|
|
160
|
-
// }
|
|
161
|
-
// if (hourDiff < 0) {
|
|
162
|
-
// hourDiff = 24 + hourDiff;
|
|
163
|
-
// dDiff--;
|
|
164
|
-
// }
|
|
165
|
-
// if (dDiff < 0) {
|
|
166
|
-
// const daysInLastFullMonth = moment(m2.year() + '-' + (m2.month() + 1), 'YYYY-MM')
|
|
167
|
-
// .subtract(1, 'months').daysInMonth();
|
|
168
|
-
// if (daysInLastFullMonth < m1.date()) { // 31/01 -> 2/03
|
|
169
|
-
// dDiff = daysInLastFullMonth + dDiff + (m1.date() - daysInLastFullMonth);
|
|
170
|
-
// } else {
|
|
171
|
-
// dDiff = daysInLastFullMonth + dDiff;
|
|
172
|
-
// }
|
|
173
|
-
// mDiff--;
|
|
174
|
-
// }
|
|
175
|
-
// if (mDiff < 0) {
|
|
176
|
-
// mDiff = 12 + mDiff;
|
|
177
|
-
// yDiff--;
|
|
178
|
-
// }
|
|
179
|
-
//
|
|
180
|
-
// const result = [];
|
|
181
|
-
//
|
|
182
|
-
// moment.relativeTimeThreshold('s', 60);
|
|
183
|
-
// moment.relativeTimeThreshold('m', 60);
|
|
184
|
-
// moment.relativeTimeThreshold('h', 23);
|
|
185
|
-
// moment.relativeTimeThreshold('dd', 28);
|
|
186
|
-
// moment.relativeTimeThreshold('dm', 45);
|
|
187
|
-
// moment.relativeTimeThreshold('dy', 365);
|
|
188
|
-
//
|
|
189
|
-
// if (yDiff) {
|
|
190
|
-
// result.push(moment.duration(yDiff, 'year').humanize());
|
|
191
|
-
// }
|
|
192
|
-
// if (mDiff) {
|
|
193
|
-
// result.push(moment.duration(mDiff, 'month').humanize());
|
|
194
|
-
// }
|
|
195
|
-
// if (dDiff) {
|
|
196
|
-
// result.push(moment.duration(dDiff, 'day').humanize());
|
|
197
|
-
// }
|
|
198
|
-
// if (hourDiff) {
|
|
199
|
-
// result.push(moment.duration(hourDiff, 'hour').humanize());
|
|
200
|
-
// }
|
|
201
|
-
// if (minDiff) {
|
|
202
|
-
// result.push(moment.duration(minDiff, 'minute').humanize());
|
|
203
|
-
// }
|
|
204
|
-
// if (secDiff) {
|
|
205
|
-
// result.push(moment.duration(secDiff, 'second').humanize());
|
|
206
|
-
// }
|
|
207
|
-
//
|
|
208
|
-
// const period = new PeriodModel(0, 0, 0);
|
|
209
|
-
// period.years = moment.duration(yDiff, 'year').asYears();
|
|
210
|
-
// period.months = moment.duration(mDiff, 'month').asMonths();
|
|
211
|
-
// period.days = moment.duration(dDiff, 'day').asDays();
|
|
212
|
-
//
|
|
213
|
-
const period = new PeriodModel(0, 0, 0);
|
|
214
|
-
return period;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
DateUtil.daysPerMonth = new Map();
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9kYXRlL2RhdGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOztHQUVHO0FBRUgsTUFBTSxPQUFPLFFBQVE7SUFHakI7SUFDQSxDQUFDO0lBRUQsNEJBQTRCO0lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBVSxFQUFFLFFBQVE7UUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFMUIsSUFBSSxRQUFRLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMvQixPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFO2FBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Y7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN0QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtTQUMzQixD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QzlELGlGQUFpRjtRQUNqRixlQUFlO1FBQ2YsNkNBQTZDO1FBQzdDLFFBQVE7UUFDUixlQUFlO1FBQ2YsTUFBTTtRQUNOLHFCQUFxQjtRQUNyQiwwQkFBMEI7UUFDMUIsZUFBZTtRQUNmLE1BQU07UUFDTixFQUFFO1FBQ0YsdUJBQXVCO1FBQ3ZCLEVBQUU7UUFDRiwyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQyw0Q0FBNEM7UUFDNUMsNENBQTRDO1FBQzVDLDZDQUE2QztRQUM3QyxFQUFFO1FBQ0YsaUJBQWlCO1FBQ2pCLDhEQUE4RDtRQUM5RCxNQUFNO1FBQ04saUJBQWlCO1FBQ2pCLCtEQUErRDtRQUMvRCxNQUFNO1FBQ04saUJBQWlCO1FBQ2pCLDZEQUE2RDtRQUM3RCxNQUFNO1FBQ04sb0JBQW9CO1FBQ3BCLGlFQUFpRTtRQUNqRSxNQUFNO1FBQ04sbUJBQW1CO1FBQ25CLGtFQUFrRTtRQUNsRSxNQUFNO1FBQ04sbUJBQW1CO1FBQ25CLGtFQUFrRTtRQUNsRSxNQUFNO1FBQ04sRUFBRTtRQUNGLDZDQUE2QztRQUM3Qyw2REFBNkQ7UUFDN0QsZ0VBQWdFO1FBQ2hFLDBEQUEwRDtRQUMxRCxFQUFFO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztBQXBOYSxxQkFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGVyaW9kTW9kZWwgfSBmcm9tICcuL1BlcmlvZE1vZGVsJztcblxuLyoqXG4gKiBDcmVhdGVkIGJ5IGRzdG9pYW4gb24gMjcvMDMvMjAxNy5cbiAqL1xuXG5leHBvcnQgY2xhc3MgRGF0ZVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgZGF5c1Blck1vbnRoID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIC8vIEZvcm1hdCBEYXRlIHRvIFlZWVktTU0tRERcbiAgICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgbGFuZ3VhZ2UpIHtcbiAgICAgICAgY29uc3QgbW0gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBjb25zdCBkZCA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgICAgIGlmIChsYW5ndWFnZSAmJiAnZnInID09PSBsYW5ndWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIFsoZGQgPiA5ID8gJycgOiAnMCcpICsgZGQsXG4gICAgICAgICAgICAgICAgKG1tID4gOSA/ICcnIDogJzAnKSArIG1tLFxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgXS5qb2luKCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIChtbSA+IDkgPyAnJyA6ICcwJykgKyBtbSxcbiAgICAgICAgICAgIChkZCA+IDkgPyAnJyA6ICcwJykgKyBkZFxuICAgICAgICBdLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGEgc3RyaW5nIGZvcm1hdHRlZCBcIllZWVktTU0tRERcIiBpbnRvIGEgZGF0ZSBvYmplY3RcbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmdUb0RhdGUoc3RyaW5nZGF0ZTogc3RyaW5nKTogRGF0ZSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nZGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnRzWzFdLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBOdW1iZXIocGFydHNbMF0pO1xuICAgICAgICBsZXQgbW9udGhOdW1iZXIgPSAwO1xuICAgICAgICBpZiAobW9udGhbMF0gPT09ICcwJykge1xuICAgICAgICAgICAgbW9udGhOdW1iZXIgPSArbW9udGhbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb250aE51bWJlciA9ICtwYXJ0c1sxXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW1iZXJPZkRheXMgPSBOdW1iZXIocGFydHNbMl0pO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhck51bWJlciwgbW9udGhOdW1iZXIgLSAxLCBudW1iZXJPZkRheXMpO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYSBzdHJpbmcgZm9ybWF0dGVkIFwiWVlZWS1NTS1ERFwiIGludG8gYSBkYXRlIG9iamVjdFxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ1RvRGF0ZVNlY29uZChzdHJpbmdkYXRlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBzdHJpbmdkYXRlLnNwbGl0KCcsJyk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFydHNbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgeWVhck51bWJlciA9IE51bWJlcihwYXJ0c1swXSk7XG4gICAgICAgIGxldCBtb250aE51bWJlciA9IDA7XG4gICAgICAgIGlmIChtb250aFswXSA9PT0gJzAnKSB7XG4gICAgICAgICAgICBtb250aE51bWJlciA9ICttb250aFsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gK3BhcnRzWzFdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bWJlck9mRGF5cyA9IE51bWJlcihwYXJ0c1syXSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyTnVtYmVyLCBtb250aE51bWJlciAtIDEsIG51bWJlck9mRGF5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBwZXJpb2RCZXR3ZWVuRGF0ZXMoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IFBlcmlvZE1vZGVsIHtcbiAgICAgICAgRGF0ZVV0aWwuaW5pdERheXNQZXJNb250aHMoKTtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XG4gICAgICAgIGNvbnN0IGIgPSBuZXcgRGF0ZShlbmREYXRlKTtcbiAgICAgICAgbGV0IG51bWJlck9mRGF5cyA9IDA7XG4gICAgICAgIGxldCBudW1iZXJPZlllYXJzID0gYi5nZXRGdWxsWWVhcigpIC0gYS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbnVtYmVyT2ZNb250aHMgPSAoYi5nZXRNb250aCgpIC0gYS5nZXRNb250aCgpICsgMTIpICUgMTI7XG4gICAgICAgIGlmIChhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKSAmJiBhLmdldFRpbWUoKSA+IGIuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBudW1iZXJPZlllYXJzLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuZ2V0TW9udGgoKSA+IGIuZ2V0TW9udGgoKSkge1xuICAgICAgICAgICAgbnVtYmVyT2ZZZWFycy0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmdldERhdGUoKSA+IGIuZ2V0RGF0ZSgpKSB7XG4gICAgICAgICAgICBudW1iZXJPZk1vbnRocy0tO1xuICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzIDwgMCkge1xuICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzID0gMTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIuZ2V0RGF0ZSgpIDwgYS5nZXREYXRlKCkpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZkRheXNQZXJNb250aCA9IERhdGVVdGlsLmRheXNQZXJNb250aC5nZXQoYS5nZXRNb250aCgpKTtcbiAgICAgICAgICAgIGlmIChhLmdldE1vbnRoKCkgPT09IDEgJiYgRGF0ZVV0aWwuY2hlY2tMZWFwWWVhcihhLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZEYXlzUGVyTW9udGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG51bWJlck9mRGF5cyA9IG51bWJlck9mRGF5c1Blck1vbnRoIC0gYS5nZXREYXRlKCkgKyBiLmdldERhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG51bWJlck9mRGF5cyA9IGIuZ2V0RGF0ZSgpIC0gYS5nZXREYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQZXJpb2RNb2RlbChudW1iZXJPZlllYXJzLCBudW1iZXJPZk1vbnRocywgbnVtYmVyT2ZEYXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICgoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5pdERheXNQZXJNb250aHMoKSB7XG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMCwgMzEpO1xuICAgICAgICBEYXRlVXRpbC5kYXlzUGVyTW9udGguc2V0KDEsIDI4KTtcbiAgICAgICAgRGF0ZVV0aWwuZGF5c1Blck1vbnRoLnNldCgyLCAzMSk7XG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMywgMzApO1xuICAgICAgICBEYXRlVXRpbC5kYXlzUGVyTW9udGguc2V0KDQsIDMxKTtcbiAgICAgICAgRGF0ZVV0aWwuZGF5c1Blck1vbnRoLnNldCg1LCAzMCk7XG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoNiwgMzEpO1xuICAgICAgICBEYXRlVXRpbC5kYXlzUGVyTW9udGguc2V0KDcsIDMxKTtcbiAgICAgICAgRGF0ZVV0aWwuZGF5c1Blck1vbnRoLnNldCg4LCAzMCk7XG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoOSwgMzEpO1xuICAgICAgICBEYXRlVXRpbC5kYXlzUGVyTW9udGguc2V0KDEwLCAzMCk7XG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMTEsIDMxKTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIDAgaWYgdGhlIDIgZGF0ZXMgYXJlIGVxdWFsLCAxIGlmIHRoZSBmaXJzdCBkYXRlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9uZSBvciAtMSB3aGVuIGl0J3MgdGhlIG9wcG9zaXRlXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlTG9jYWxEYXRlcyhmaXJzdDogRGF0ZSwgc2Vjb25kOiBEYXRlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGZpcnN0LmdldEZ1bGxZZWFyKCkgPiBzZWNvbmQuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3QuZ2V0RnVsbFllYXIoKSA8IHNlY29uZC5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZmlyc3QuZ2V0TW9udGgoKSA+IHNlY29uZC5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0LmdldE1vbnRoKCkgPCBzZWNvbmQuZ2V0TW9udGgoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0LmdldERhdGUoKSA+IHNlY29uZC5nZXREYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdC5nZXREYXRlKCkgPCBzZWNvbmQuZ2V0RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBGcm9tIG1vbWVudC1wcmVjaXNlLXJhbmdlIHBsdWdpbiAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcHJlY2lzZURpZmYoZDEsIGQyKTogUGVyaW9kTW9kZWwge1xuICAgICAgICAvLyAgIGxldCBtMSA9IG1vbWVudChkMSk7XG4gICAgICAgIC8vICAgbGV0IG0yID0gbW9tZW50KGQyKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBpZiAobTEuaXNTYW1lKG0yKSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIG5ldyBQZXJpb2RNb2RlbCgwLCAwLCAwKTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKG0xLmlzQWZ0ZXIobTIpKSB7XG4gICAgICAgIC8vICAgICBjb25zdCB0bXAgPSBtMTtcbiAgICAgICAgLy8gICAgIG0xID0gbTI7XG4gICAgICAgIC8vICAgICBtMiA9IHRtcDtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgbGV0IHlEaWZmID0gbTIueWVhcigpIC0gbTEueWVhcigpO1xuICAgICAgICAvLyAgIGxldCBtRGlmZiA9IG0yLm1vbnRoKCkgLSBtMS5tb250aCgpO1xuICAgICAgICAvLyAgIGxldCBkRGlmZiA9IG0yLmRhdGUoKSAtIG0xLmRhdGUoKTtcbiAgICAgICAgLy8gICBsZXQgaG91ckRpZmYgPSBtMi5ob3VyKCkgLSBtMS5ob3VyKCk7XG4gICAgICAgIC8vICAgbGV0IG1pbkRpZmYgPSBtMi5taW51dGUoKSAtIG0xLm1pbnV0ZSgpO1xuICAgICAgICAvLyAgIGxldCBzZWNEaWZmID0gbTIuc2Vjb25kKCkgLSBtMS5zZWNvbmQoKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBpZiAoc2VjRGlmZiA8IDApIHtcbiAgICAgICAgLy8gICAgIHNlY0RpZmYgPSA2MCArIHNlY0RpZmY7XG4gICAgICAgIC8vICAgICBtaW5EaWZmLS07XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmIChtaW5EaWZmIDwgMCkge1xuICAgICAgICAvLyAgICAgbWluRGlmZiA9IDYwICsgbWluRGlmZjtcbiAgICAgICAgLy8gICAgIGhvdXJEaWZmLS07XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmIChob3VyRGlmZiA8IDApIHtcbiAgICAgICAgLy8gICAgIGhvdXJEaWZmID0gMjQgKyBob3VyRGlmZjtcbiAgICAgICAgLy8gICAgIGREaWZmLS07XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmIChkRGlmZiA8IDApIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGRheXNJbkxhc3RGdWxsTW9udGggPSBtb21lbnQobTIueWVhcigpICsgJy0nICsgKG0yLm1vbnRoKCkgKyAxKSwgJ1lZWVktTU0nKVxuICAgICAgICAvLyAgICAgICAuc3VidHJhY3QoMSwgJ21vbnRocycpLmRheXNJbk1vbnRoKCk7XG4gICAgICAgIC8vICAgICBpZiAoZGF5c0luTGFzdEZ1bGxNb250aCA8IG0xLmRhdGUoKSkgeyAvLyAzMS8wMSAtPiAyLzAzXG4gICAgICAgIC8vICAgICAgIGREaWZmID0gZGF5c0luTGFzdEZ1bGxNb250aCArIGREaWZmICsgKG0xLmRhdGUoKSAtIGRheXNJbkxhc3RGdWxsTW9udGgpO1xuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgZERpZmYgPSBkYXlzSW5MYXN0RnVsbE1vbnRoICsgZERpZmY7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICBtRGlmZi0tO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICBpZiAobURpZmYgPCAwKSB7XG4gICAgICAgIC8vICAgICBtRGlmZiA9IDEyICsgbURpZmY7XG4gICAgICAgIC8vICAgICB5RGlmZi0tO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdzJywgNjApO1xuICAgICAgICAvLyAgIG1vbWVudC5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQoJ20nLCA2MCk7XG4gICAgICAgIC8vICAgbW9tZW50LnJlbGF0aXZlVGltZVRocmVzaG9sZCgnaCcsIDIzKTtcbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdkZCcsIDI4KTtcbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdkbScsIDQ1KTtcbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdkeScsIDM2NSk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgaWYgKHlEaWZmKSB7XG4gICAgICAgIC8vICAgICByZXN1bHQucHVzaChtb21lbnQuZHVyYXRpb24oeURpZmYsICd5ZWFyJykuaHVtYW5pemUoKSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmIChtRGlmZikge1xuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKG1EaWZmLCAnbW9udGgnKS5odW1hbml6ZSgpKTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKGREaWZmKSB7XG4gICAgICAgIC8vICAgICByZXN1bHQucHVzaChtb21lbnQuZHVyYXRpb24oZERpZmYsICdkYXknKS5odW1hbml6ZSgpKTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgaWYgKGhvdXJEaWZmKSB7XG4gICAgICAgIC8vICAgICByZXN1bHQucHVzaChtb21lbnQuZHVyYXRpb24oaG91ckRpZmYsICdob3VyJykuaHVtYW5pemUoKSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgIGlmIChtaW5EaWZmKSB7XG4gICAgICAgIC8vICAgICByZXN1bHQucHVzaChtb21lbnQuZHVyYXRpb24obWluRGlmZiwgJ21pbnV0ZScpLmh1bWFuaXplKCkpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICBpZiAoc2VjRGlmZikge1xuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKHNlY0RpZmYsICdzZWNvbmQnKS5odW1hbml6ZSgpKTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgY29uc3QgcGVyaW9kID0gbmV3IFBlcmlvZE1vZGVsKDAsIDAsIDApO1xuICAgICAgICAvLyAgIHBlcmlvZC55ZWFycyA9IG1vbWVudC5kdXJhdGlvbih5RGlmZiwgJ3llYXInKS5hc1llYXJzKCk7XG4gICAgICAgIC8vICAgcGVyaW9kLm1vbnRocyA9IG1vbWVudC5kdXJhdGlvbihtRGlmZiwgJ21vbnRoJykuYXNNb250aHMoKTtcbiAgICAgICAgLy8gICBwZXJpb2QuZGF5cyA9IG1vbWVudC5kdXJhdGlvbihkRGlmZiwgJ2RheScpLmFzRGF5cygpO1xuICAgICAgICAvL1xuICAgICAgICBjb25zdCBwZXJpb2QgPSBuZXcgUGVyaW9kTW9kZWwoMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBwZXJpb2Q7XG4gICAgfVxuXG59XG4iXX0=
|
|
1
|
+
import { PeriodModel } from './PeriodModel';
|
|
2
|
+
/**
|
|
3
|
+
* Created by dstoian on 27/03/2017.
|
|
4
|
+
*/
|
|
5
|
+
export class DateUtil {
|
|
6
|
+
constructor() {
|
|
7
|
+
}
|
|
8
|
+
// Format Date to YYYY-MM-DD
|
|
9
|
+
static formatDate(date, language) {
|
|
10
|
+
const mm = date.getMonth() + 1;
|
|
11
|
+
const dd = date.getDate();
|
|
12
|
+
if (language && 'fr' === language) {
|
|
13
|
+
return [(dd > 9 ? '' : '0') + dd,
|
|
14
|
+
(mm > 9 ? '' : '0') + mm,
|
|
15
|
+
date.getFullYear()
|
|
16
|
+
].join('/');
|
|
17
|
+
}
|
|
18
|
+
return [date.getFullYear(),
|
|
19
|
+
(mm > 9 ? '' : '0') + mm,
|
|
20
|
+
(dd > 9 ? '' : '0') + dd
|
|
21
|
+
].join('-');
|
|
22
|
+
}
|
|
23
|
+
// convert a string formatted "YYYY-MM-DD" into a date object
|
|
24
|
+
static fromStringToDate(stringdate) {
|
|
25
|
+
const parts = stringdate.split('-');
|
|
26
|
+
const month = parts[1].toString();
|
|
27
|
+
const yearNumber = Number(parts[0]);
|
|
28
|
+
let monthNumber = 0;
|
|
29
|
+
if (month[0] === '0') {
|
|
30
|
+
monthNumber = +month[1];
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
monthNumber = +parts[1];
|
|
34
|
+
}
|
|
35
|
+
const numberOfDays = Number(parts[2]);
|
|
36
|
+
return new Date(yearNumber, monthNumber - 1, numberOfDays);
|
|
37
|
+
}
|
|
38
|
+
// convert a string formatted "YYYY-MM-DD" into a date object
|
|
39
|
+
static fromStringToDateSecond(stringdate) {
|
|
40
|
+
const parts = stringdate.split(',');
|
|
41
|
+
const month = parts[1].toString();
|
|
42
|
+
const yearNumber = Number(parts[0]);
|
|
43
|
+
let monthNumber = 0;
|
|
44
|
+
if (month[0] === '0') {
|
|
45
|
+
monthNumber = +month[1];
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
monthNumber = +parts[1];
|
|
49
|
+
}
|
|
50
|
+
const numberOfDays = Number(parts[2]);
|
|
51
|
+
return new Date(yearNumber, monthNumber - 1, numberOfDays);
|
|
52
|
+
}
|
|
53
|
+
static periodBetweenDates(startDate, endDate) {
|
|
54
|
+
DateUtil.initDaysPerMonths();
|
|
55
|
+
const a = new Date(startDate);
|
|
56
|
+
const b = new Date(endDate);
|
|
57
|
+
let numberOfDays = 0;
|
|
58
|
+
let numberOfYears = b.getFullYear() - a.getFullYear();
|
|
59
|
+
let numberOfMonths = (b.getMonth() - a.getMonth() + 12) % 12;
|
|
60
|
+
if (a.getMonth() === b.getMonth() && a.getTime() > b.getTime()) {
|
|
61
|
+
numberOfYears--;
|
|
62
|
+
}
|
|
63
|
+
if (a.getMonth() > b.getMonth()) {
|
|
64
|
+
numberOfYears--;
|
|
65
|
+
}
|
|
66
|
+
if (a.getDate() > b.getDate()) {
|
|
67
|
+
numberOfMonths--;
|
|
68
|
+
if (numberOfMonths < 0) {
|
|
69
|
+
numberOfMonths = 11;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (b.getDate() < a.getDate()) {
|
|
73
|
+
let numberOfDaysPerMonth = DateUtil.daysPerMonth.get(a.getMonth());
|
|
74
|
+
if (a.getMonth() === 1 && DateUtil.checkLeapYear(a.getFullYear())) {
|
|
75
|
+
numberOfDaysPerMonth++;
|
|
76
|
+
}
|
|
77
|
+
numberOfDays = numberOfDaysPerMonth - a.getDate() + b.getDate();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
numberOfDays = b.getDate() - a.getDate();
|
|
81
|
+
}
|
|
82
|
+
return new PeriodModel(numberOfYears, numberOfMonths, numberOfDays);
|
|
83
|
+
}
|
|
84
|
+
static checkLeapYear(year) {
|
|
85
|
+
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
static initDaysPerMonths() {
|
|
91
|
+
DateUtil.daysPerMonth.set(0, 31);
|
|
92
|
+
DateUtil.daysPerMonth.set(1, 28);
|
|
93
|
+
DateUtil.daysPerMonth.set(2, 31);
|
|
94
|
+
DateUtil.daysPerMonth.set(3, 30);
|
|
95
|
+
DateUtil.daysPerMonth.set(4, 31);
|
|
96
|
+
DateUtil.daysPerMonth.set(5, 30);
|
|
97
|
+
DateUtil.daysPerMonth.set(6, 31);
|
|
98
|
+
DateUtil.daysPerMonth.set(7, 31);
|
|
99
|
+
DateUtil.daysPerMonth.set(8, 30);
|
|
100
|
+
DateUtil.daysPerMonth.set(9, 31);
|
|
101
|
+
DateUtil.daysPerMonth.set(10, 30);
|
|
102
|
+
DateUtil.daysPerMonth.set(11, 31);
|
|
103
|
+
}
|
|
104
|
+
// returns 0 if the 2 dates are equal, 1 if the first date is greater than the second one or -1 when it's the opposite
|
|
105
|
+
static compareLocalDates(first, second) {
|
|
106
|
+
if (first.getFullYear() > second.getFullYear()) {
|
|
107
|
+
return 1;
|
|
108
|
+
}
|
|
109
|
+
else if (first.getFullYear() < second.getFullYear()) {
|
|
110
|
+
return -1;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if (first.getMonth() > second.getMonth()) {
|
|
114
|
+
return 1;
|
|
115
|
+
}
|
|
116
|
+
else if (first.getMonth() < second.getMonth()) {
|
|
117
|
+
return -1;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (first.getDate() > second.getDate()) {
|
|
121
|
+
return 1;
|
|
122
|
+
}
|
|
123
|
+
else if (first.getDate() < second.getDate()) {
|
|
124
|
+
return -1;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/* From moment-precise-range plugin */
|
|
133
|
+
static preciseDiff(d1, d2) {
|
|
134
|
+
// let m1 = moment(d1);
|
|
135
|
+
// let m2 = moment(d2);
|
|
136
|
+
//
|
|
137
|
+
// if (m1.isSame(m2)) {
|
|
138
|
+
// return new PeriodModel(0, 0, 0);
|
|
139
|
+
// }
|
|
140
|
+
// if (m1.isAfter(m2)) {
|
|
141
|
+
// const tmp = m1;
|
|
142
|
+
// m1 = m2;
|
|
143
|
+
// m2 = tmp;
|
|
144
|
+
// }
|
|
145
|
+
//
|
|
146
|
+
// let yDiff = m2.year() - m1.year();
|
|
147
|
+
// let mDiff = m2.month() - m1.month();
|
|
148
|
+
// let dDiff = m2.date() - m1.date();
|
|
149
|
+
// let hourDiff = m2.hour() - m1.hour();
|
|
150
|
+
// let minDiff = m2.minute() - m1.minute();
|
|
151
|
+
// let secDiff = m2.second() - m1.second();
|
|
152
|
+
//
|
|
153
|
+
// if (secDiff < 0) {
|
|
154
|
+
// secDiff = 60 + secDiff;
|
|
155
|
+
// minDiff--;
|
|
156
|
+
// }
|
|
157
|
+
// if (minDiff < 0) {
|
|
158
|
+
// minDiff = 60 + minDiff;
|
|
159
|
+
// hourDiff--;
|
|
160
|
+
// }
|
|
161
|
+
// if (hourDiff < 0) {
|
|
162
|
+
// hourDiff = 24 + hourDiff;
|
|
163
|
+
// dDiff--;
|
|
164
|
+
// }
|
|
165
|
+
// if (dDiff < 0) {
|
|
166
|
+
// const daysInLastFullMonth = moment(m2.year() + '-' + (m2.month() + 1), 'YYYY-MM')
|
|
167
|
+
// .subtract(1, 'months').daysInMonth();
|
|
168
|
+
// if (daysInLastFullMonth < m1.date()) { // 31/01 -> 2/03
|
|
169
|
+
// dDiff = daysInLastFullMonth + dDiff + (m1.date() - daysInLastFullMonth);
|
|
170
|
+
// } else {
|
|
171
|
+
// dDiff = daysInLastFullMonth + dDiff;
|
|
172
|
+
// }
|
|
173
|
+
// mDiff--;
|
|
174
|
+
// }
|
|
175
|
+
// if (mDiff < 0) {
|
|
176
|
+
// mDiff = 12 + mDiff;
|
|
177
|
+
// yDiff--;
|
|
178
|
+
// }
|
|
179
|
+
//
|
|
180
|
+
// const result = [];
|
|
181
|
+
//
|
|
182
|
+
// moment.relativeTimeThreshold('s', 60);
|
|
183
|
+
// moment.relativeTimeThreshold('m', 60);
|
|
184
|
+
// moment.relativeTimeThreshold('h', 23);
|
|
185
|
+
// moment.relativeTimeThreshold('dd', 28);
|
|
186
|
+
// moment.relativeTimeThreshold('dm', 45);
|
|
187
|
+
// moment.relativeTimeThreshold('dy', 365);
|
|
188
|
+
//
|
|
189
|
+
// if (yDiff) {
|
|
190
|
+
// result.push(moment.duration(yDiff, 'year').humanize());
|
|
191
|
+
// }
|
|
192
|
+
// if (mDiff) {
|
|
193
|
+
// result.push(moment.duration(mDiff, 'month').humanize());
|
|
194
|
+
// }
|
|
195
|
+
// if (dDiff) {
|
|
196
|
+
// result.push(moment.duration(dDiff, 'day').humanize());
|
|
197
|
+
// }
|
|
198
|
+
// if (hourDiff) {
|
|
199
|
+
// result.push(moment.duration(hourDiff, 'hour').humanize());
|
|
200
|
+
// }
|
|
201
|
+
// if (minDiff) {
|
|
202
|
+
// result.push(moment.duration(minDiff, 'minute').humanize());
|
|
203
|
+
// }
|
|
204
|
+
// if (secDiff) {
|
|
205
|
+
// result.push(moment.duration(secDiff, 'second').humanize());
|
|
206
|
+
// }
|
|
207
|
+
//
|
|
208
|
+
// const period = new PeriodModel(0, 0, 0);
|
|
209
|
+
// period.years = moment.duration(yDiff, 'year').asYears();
|
|
210
|
+
// period.months = moment.duration(mDiff, 'month').asMonths();
|
|
211
|
+
// period.days = moment.duration(dDiff, 'day').asDays();
|
|
212
|
+
//
|
|
213
|
+
const period = new PeriodModel(0, 0, 0);
|
|
214
|
+
return period;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
DateUtil.daysPerMonth = new Map();
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9kYXRlL2RhdGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDOztHQUVHO0FBRUgsTUFBTSxPQUFPLFFBQVE7SUFHakI7SUFDQSxDQUFDO0lBRUQsNEJBQTRCO0lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBVSxFQUFFLFFBQVE7UUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFMUIsSUFBSSxRQUFRLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMvQixPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFO2FBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Y7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN0QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtTQUMzQixD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QzlELGlGQUFpRjtRQUNqRixlQUFlO1FBQ2YsNkNBQTZDO1FBQzdDLFFBQVE7UUFDUixlQUFlO1FBQ2YsTUFBTTtRQUNOLHFCQUFxQjtRQUNyQiwwQkFBMEI7UUFDMUIsZUFBZTtRQUNmLE1BQU07UUFDTixFQUFFO1FBQ0YsdUJBQXVCO1FBQ3ZCLEVBQUU7UUFDRiwyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQyw0Q0FBNEM7UUFDNUMsNENBQTRDO1FBQzVDLDZDQUE2QztRQUM3QyxFQUFFO1FBQ0YsaUJBQWlCO1FBQ2pCLDhEQUE4RDtRQUM5RCxNQUFNO1FBQ04saUJBQWlCO1FBQ2pCLCtEQUErRDtRQUMvRCxNQUFNO1FBQ04saUJBQWlCO1FBQ2pCLDZEQUE2RDtRQUM3RCxNQUFNO1FBQ04sb0JBQW9CO1FBQ3BCLGlFQUFpRTtRQUNqRSxNQUFNO1FBQ04sbUJBQW1CO1FBQ25CLGtFQUFrRTtRQUNsRSxNQUFNO1FBQ04sbUJBQW1CO1FBQ25CLGtFQUFrRTtRQUNsRSxNQUFNO1FBQ04sRUFBRTtRQUNGLDZDQUE2QztRQUM3Qyw2REFBNkQ7UUFDN0QsZ0VBQWdFO1FBQ2hFLDBEQUEwRDtRQUMxRCxFQUFFO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztBQXBOYSxxQkFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGVyaW9kTW9kZWwgfSBmcm9tICcuL1BlcmlvZE1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVkIGJ5IGRzdG9pYW4gb24gMjcvMDMvMjAxNy5cclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgRGF0ZVV0aWwge1xyXG4gICAgcHVibGljIHN0YXRpYyBkYXlzUGVyTW9udGggPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvcm1hdCBEYXRlIHRvIFlZWVktTU0tRERcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBsYW5ndWFnZSkge1xyXG4gICAgICAgIGNvbnN0IG1tID0gZGF0ZS5nZXRNb250aCgpICsgMTtcclxuICAgICAgICBjb25zdCBkZCA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAobGFuZ3VhZ2UgJiYgJ2ZyJyA9PT0gbGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsoZGQgPiA5ID8gJycgOiAnMCcpICsgZGQsXHJcbiAgICAgICAgICAgICAgICAobW0gPiA5ID8gJycgOiAnMCcpICsgbW0sXHJcbiAgICAgICAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICAgICAgICAgXS5qb2luKCcvJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW2RhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICAgICAgKG1tID4gOSA/ICcnIDogJzAnKSArIG1tLFxyXG4gICAgICAgICAgICAoZGQgPiA5ID8gJycgOiAnMCcpICsgZGRcclxuICAgICAgICBdLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb252ZXJ0IGEgc3RyaW5nIGZvcm1hdHRlZCBcIllZWVktTU0tRERcIiBpbnRvIGEgZGF0ZSBvYmplY3RcclxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ1RvRGF0ZShzdHJpbmdkYXRlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgICAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ2RhdGUuc3BsaXQoJy0nKTtcclxuICAgICAgICBjb25zdCBtb250aCA9IHBhcnRzWzFdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgeWVhck51bWJlciA9IE51bWJlcihwYXJ0c1swXSk7XHJcbiAgICAgICAgbGV0IG1vbnRoTnVtYmVyID0gMDtcclxuICAgICAgICBpZiAobW9udGhbMF0gPT09ICcwJykge1xyXG4gICAgICAgICAgICBtb250aE51bWJlciA9ICttb250aFsxXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtb250aE51bWJlciA9ICtwYXJ0c1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gTnVtYmVyKHBhcnRzWzJdKTtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhck51bWJlciwgbW9udGhOdW1iZXIgLSAxLCBudW1iZXJPZkRheXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnZlcnQgYSBzdHJpbmcgZm9ybWF0dGVkIFwiWVlZWS1NTS1ERFwiIGludG8gYSBkYXRlIG9iamVjdFxyXG4gICAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nVG9EYXRlU2Vjb25kKHN0cmluZ2RhdGU6IHN0cmluZyk6IERhdGUge1xyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nZGF0ZS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFydHNbMV0udG9TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gTnVtYmVyKHBhcnRzWzBdKTtcclxuICAgICAgICBsZXQgbW9udGhOdW1iZXIgPSAwO1xyXG4gICAgICAgIGlmIChtb250aFswXSA9PT0gJzAnKSB7XHJcbiAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gK21vbnRoWzFdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gK3BhcnRzWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBudW1iZXJPZkRheXMgPSBOdW1iZXIocGFydHNbMl0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyTnVtYmVyLCBtb250aE51bWJlciAtIDEsIG51bWJlck9mRGF5cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwZXJpb2RCZXR3ZWVuRGF0ZXMoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IFBlcmlvZE1vZGVsIHtcclxuICAgICAgICBEYXRlVXRpbC5pbml0RGF5c1Blck1vbnRocygpO1xyXG4gICAgICAgIGNvbnN0IGEgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgICAgIGNvbnN0IGIgPSBuZXcgRGF0ZShlbmREYXRlKTtcclxuICAgICAgICBsZXQgbnVtYmVyT2ZEYXlzID0gMDtcclxuICAgICAgICBsZXQgbnVtYmVyT2ZZZWFycyA9IGIuZ2V0RnVsbFllYXIoKSAtIGEuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbnVtYmVyT2ZNb250aHMgPSAoYi5nZXRNb250aCgpIC0gYS5nZXRNb250aCgpICsgMTIpICUgMTI7XHJcbiAgICAgICAgaWYgKGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmIGEuZ2V0VGltZSgpID4gYi5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgbnVtYmVyT2ZZZWFycy0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYS5nZXRNb250aCgpID4gYi5nZXRNb250aCgpKSB7XHJcbiAgICAgICAgICAgIG51bWJlck9mWWVhcnMtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGEuZ2V0RGF0ZSgpID4gYi5nZXREYXRlKCkpIHtcclxuICAgICAgICAgICAgbnVtYmVyT2ZNb250aHMtLTtcclxuICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZNb250aHMgPSAxMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYi5nZXREYXRlKCkgPCBhLmdldERhdGUoKSkge1xyXG4gICAgICAgICAgICBsZXQgbnVtYmVyT2ZEYXlzUGVyTW9udGggPSBEYXRlVXRpbC5kYXlzUGVyTW9udGguZ2V0KGEuZ2V0TW9udGgoKSk7XHJcbiAgICAgICAgICAgIGlmIChhLmdldE1vbnRoKCkgPT09IDEgJiYgRGF0ZVV0aWwuY2hlY2tMZWFwWWVhcihhLmdldEZ1bGxZZWFyKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBudW1iZXJPZkRheXNQZXJNb250aCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG51bWJlck9mRGF5cyA9IG51bWJlck9mRGF5c1Blck1vbnRoIC0gYS5nZXREYXRlKCkgKyBiLmdldERhdGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBudW1iZXJPZkRheXMgPSBiLmdldERhdGUoKSAtIGEuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFBlcmlvZE1vZGVsKG51bWJlck9mWWVhcnMsIG51bWJlck9mTW9udGhzLCBudW1iZXJPZkRheXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY2hlY2tMZWFwWWVhcih5ZWFyOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGluaXREYXlzUGVyTW9udGhzKCkge1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMCwgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMSwgMjgpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMiwgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMywgMzApO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoNCwgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoNSwgMzApO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoNiwgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoNywgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoOCwgMzApO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoOSwgMzEpO1xyXG4gICAgICAgIERhdGVVdGlsLmRheXNQZXJNb250aC5zZXQoMTAsIDMwKTtcclxuICAgICAgICBEYXRlVXRpbC5kYXlzUGVyTW9udGguc2V0KDExLCAzMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJucyAwIGlmIHRoZSAyIGRhdGVzIGFyZSBlcXVhbCwgMSBpZiB0aGUgZmlyc3QgZGF0ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBvbmUgb3IgLTEgd2hlbiBpdCdzIHRoZSBvcHBvc2l0ZVxyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlTG9jYWxEYXRlcyhmaXJzdDogRGF0ZSwgc2Vjb25kOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoZmlyc3QuZ2V0RnVsbFllYXIoKSA+IHNlY29uZC5nZXRGdWxsWWVhcigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3QuZ2V0RnVsbFllYXIoKSA8IHNlY29uZC5nZXRGdWxsWWVhcigpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QuZ2V0TW9udGgoKSA+IHNlY29uZC5nZXRNb250aCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdC5nZXRNb250aCgpIDwgc2Vjb25kLmdldE1vbnRoKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdC5nZXREYXRlKCkgPiBzZWNvbmQuZ2V0RGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0LmdldERhdGUoKSA8IHNlY29uZC5nZXREYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIEZyb20gbW9tZW50LXByZWNpc2UtcmFuZ2UgcGx1Z2luICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHByZWNpc2VEaWZmKGQxLCBkMik6IFBlcmlvZE1vZGVsIHtcclxuICAgICAgICAvLyAgIGxldCBtMSA9IG1vbWVudChkMSk7XHJcbiAgICAgICAgLy8gICBsZXQgbTIgPSBtb21lbnQoZDIpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICBpZiAobTEuaXNTYW1lKG0yKSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gbmV3IFBlcmlvZE1vZGVsKDAsIDAsIDApO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKG0xLmlzQWZ0ZXIobTIpKSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IHRtcCA9IG0xO1xyXG4gICAgICAgIC8vICAgICBtMSA9IG0yO1xyXG4gICAgICAgIC8vICAgICBtMiA9IHRtcDtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vICAgbGV0IHlEaWZmID0gbTIueWVhcigpIC0gbTEueWVhcigpO1xyXG4gICAgICAgIC8vICAgbGV0IG1EaWZmID0gbTIubW9udGgoKSAtIG0xLm1vbnRoKCk7XHJcbiAgICAgICAgLy8gICBsZXQgZERpZmYgPSBtMi5kYXRlKCkgLSBtMS5kYXRlKCk7XHJcbiAgICAgICAgLy8gICBsZXQgaG91ckRpZmYgPSBtMi5ob3VyKCkgLSBtMS5ob3VyKCk7XHJcbiAgICAgICAgLy8gICBsZXQgbWluRGlmZiA9IG0yLm1pbnV0ZSgpIC0gbTEubWludXRlKCk7XHJcbiAgICAgICAgLy8gICBsZXQgc2VjRGlmZiA9IG0yLnNlY29uZCgpIC0gbTEuc2Vjb25kKCk7XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgIGlmIChzZWNEaWZmIDwgMCkge1xyXG4gICAgICAgIC8vICAgICBzZWNEaWZmID0gNjAgKyBzZWNEaWZmO1xyXG4gICAgICAgIC8vICAgICBtaW5EaWZmLS07XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAobWluRGlmZiA8IDApIHtcclxuICAgICAgICAvLyAgICAgbWluRGlmZiA9IDYwICsgbWluRGlmZjtcclxuICAgICAgICAvLyAgICAgaG91ckRpZmYtLTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmIChob3VyRGlmZiA8IDApIHtcclxuICAgICAgICAvLyAgICAgaG91ckRpZmYgPSAyNCArIGhvdXJEaWZmO1xyXG4gICAgICAgIC8vICAgICBkRGlmZi0tO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKGREaWZmIDwgMCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBkYXlzSW5MYXN0RnVsbE1vbnRoID0gbW9tZW50KG0yLnllYXIoKSArICctJyArIChtMi5tb250aCgpICsgMSksICdZWVlZLU1NJylcclxuICAgICAgICAvLyAgICAgICAuc3VidHJhY3QoMSwgJ21vbnRocycpLmRheXNJbk1vbnRoKCk7XHJcbiAgICAgICAgLy8gICAgIGlmIChkYXlzSW5MYXN0RnVsbE1vbnRoIDwgbTEuZGF0ZSgpKSB7IC8vIDMxLzAxIC0+IDIvMDNcclxuICAgICAgICAvLyAgICAgICBkRGlmZiA9IGRheXNJbkxhc3RGdWxsTW9udGggKyBkRGlmZiArIChtMS5kYXRlKCkgLSBkYXlzSW5MYXN0RnVsbE1vbnRoKTtcclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICBkRGlmZiA9IGRheXNJbkxhc3RGdWxsTW9udGggKyBkRGlmZjtcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgICBtRGlmZi0tO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKG1EaWZmIDwgMCkge1xyXG4gICAgICAgIC8vICAgICBtRGlmZiA9IDEyICsgbURpZmY7XHJcbiAgICAgICAgLy8gICAgIHlEaWZmLS07XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdzJywgNjApO1xyXG4gICAgICAgIC8vICAgbW9tZW50LnJlbGF0aXZlVGltZVRocmVzaG9sZCgnbScsIDYwKTtcclxuICAgICAgICAvLyAgIG1vbWVudC5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQoJ2gnLCAyMyk7XHJcbiAgICAgICAgLy8gICBtb21lbnQucmVsYXRpdmVUaW1lVGhyZXNob2xkKCdkZCcsIDI4KTtcclxuICAgICAgICAvLyAgIG1vbWVudC5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQoJ2RtJywgNDUpO1xyXG4gICAgICAgIC8vICAgbW9tZW50LnJlbGF0aXZlVGltZVRocmVzaG9sZCgnZHknLCAzNjUpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICBpZiAoeURpZmYpIHtcclxuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKHlEaWZmLCAneWVhcicpLmh1bWFuaXplKCkpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKG1EaWZmKSB7XHJcbiAgICAgICAgLy8gICAgIHJlc3VsdC5wdXNoKG1vbWVudC5kdXJhdGlvbihtRGlmZiwgJ21vbnRoJykuaHVtYW5pemUoKSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAoZERpZmYpIHtcclxuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKGREaWZmLCAnZGF5JykuaHVtYW5pemUoKSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAoaG91ckRpZmYpIHtcclxuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKGhvdXJEaWZmLCAnaG91cicpLmh1bWFuaXplKCkpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKG1pbkRpZmYpIHtcclxuICAgICAgICAvLyAgICAgcmVzdWx0LnB1c2gobW9tZW50LmR1cmF0aW9uKG1pbkRpZmYsICdtaW51dGUnKS5odW1hbml6ZSgpKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGlmIChzZWNEaWZmKSB7XHJcbiAgICAgICAgLy8gICAgIHJlc3VsdC5wdXNoKG1vbWVudC5kdXJhdGlvbihzZWNEaWZmLCAnc2Vjb25kJykuaHVtYW5pemUoKSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgIGNvbnN0IHBlcmlvZCA9IG5ldyBQZXJpb2RNb2RlbCgwLCAwLCAwKTtcclxuICAgICAgICAvLyAgIHBlcmlvZC55ZWFycyA9IG1vbWVudC5kdXJhdGlvbih5RGlmZiwgJ3llYXInKS5hc1llYXJzKCk7XHJcbiAgICAgICAgLy8gICBwZXJpb2QubW9udGhzID0gbW9tZW50LmR1cmF0aW9uKG1EaWZmLCAnbW9udGgnKS5hc01vbnRocygpO1xyXG4gICAgICAgIC8vICAgcGVyaW9kLmRheXMgPSBtb21lbnQuZHVyYXRpb24oZERpZmYsICdkYXknKS5hc0RheXMoKTtcclxuICAgICAgICAvL1xyXG4gICAgICAgIGNvbnN0IHBlcmlvZCA9IG5ldyBQZXJpb2RNb2RlbCgwLCAwLCAwKTtcclxuICAgICAgICByZXR1cm4gcGVyaW9kO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
export function Theme() {
|
|
2
|
-
return (target, key) => {
|
|
3
|
-
// Check if the data exist in the local storage
|
|
4
|
-
function exist(dataKey) {
|
|
5
|
-
return localStorage.hasOwnProperty(dataKey);
|
|
6
|
-
}
|
|
7
|
-
// Get data from local storage
|
|
8
|
-
function get(theme) {
|
|
9
|
-
return exist(theme) ? JSON.parse(localStorage.getItem(theme)) : null;
|
|
10
|
-
}
|
|
11
|
-
// Set data in the local storage and return it
|
|
12
|
-
function setDefault(theme) {
|
|
13
|
-
localStorage.setItem('newTheme', JSON.stringify(theme));
|
|
14
|
-
return theme;
|
|
15
|
-
}
|
|
16
|
-
Object.defineProperty(target, key, {
|
|
17
|
-
configurable: false,
|
|
18
|
-
get: () => (exist('newTheme') ? get('newTheme') : setDefault('light'))
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export function Theme() {
|
|
2
|
+
return (target, key) => {
|
|
3
|
+
// Check if the data exist in the local storage
|
|
4
|
+
function exist(dataKey) {
|
|
5
|
+
return localStorage.hasOwnProperty(dataKey);
|
|
6
|
+
}
|
|
7
|
+
// Get data from local storage
|
|
8
|
+
function get(theme) {
|
|
9
|
+
return exist(theme) ? JSON.parse(localStorage.getItem(theme)) : null;
|
|
10
|
+
}
|
|
11
|
+
// Set data in the local storage and return it
|
|
12
|
+
function setDefault(theme) {
|
|
13
|
+
localStorage.setItem('newTheme', JSON.stringify(theme));
|
|
14
|
+
return theme;
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(target, key, {
|
|
17
|
+
configurable: false,
|
|
18
|
+
get: () => (exist('newTheme') ? get('newTheme') : setDefault('light'))
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9kZWNvcmF0b3JzL3RoZW1lLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsS0FBSztJQUNqQixPQUFPLENBQUMsTUFBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQ2hDLCtDQUErQztRQUMvQyxTQUFTLEtBQUssQ0FBQyxPQUFlO1lBQzFCLE9BQU8sWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLFNBQVMsR0FBRyxDQUFDLEtBQWE7WUFDdEIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekUsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxTQUFTLFVBQVUsQ0FBQyxLQUFVO1lBQzFCLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQy9CLFlBQVksRUFBRSxLQUFLO1lBQ25CLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBUaGVtZSgpIHtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgZXhpc3QgaW4gdGhlIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICBmdW5jdGlvbiBleGlzdChkYXRhS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShkYXRhS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgIGZ1bmN0aW9uIGdldCh0aGVtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleGlzdCh0aGVtZSkgPyBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoZW1lKSkgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGRhdGEgaW4gdGhlIGxvY2FsIHN0b3JhZ2UgYW5kIHJldHVybiBpdFxyXG4gICAgICAgIGZ1bmN0aW9uIHNldERlZmF1bHQodGhlbWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCduZXdUaGVtZScsIEpTT04uc3RyaW5naWZ5KHRoZW1lKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGVtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IChleGlzdCgnbmV3VGhlbWUnKSA/IGdldCgnbmV3VGhlbWUnKSA6IHNldERlZmF1bHQoJ2xpZ2h0JykpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { JwtHelper } from '../services/jwt-security/jwt.helpher';
|
|
2
|
-
export function User() {
|
|
3
|
-
const jwtHelper = new JwtHelper();
|
|
4
|
-
return (target, key) => {
|
|
5
|
-
// Check if the data exist in the local storage
|
|
6
|
-
function exist(dataKey) {
|
|
7
|
-
return sessionStorage.hasOwnProperty(dataKey);
|
|
8
|
-
}
|
|
9
|
-
// Get data from local storage
|
|
10
|
-
function get(user) {
|
|
11
|
-
return exist(user) ? jwtHelper.decodeToken(sessionStorage.getItem(user)) : null;
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(target, key, {
|
|
14
|
-
configurable: false,
|
|
15
|
-
get: () => {
|
|
16
|
-
const user = get('authToken');
|
|
17
|
-
if (user && user.superAdmin && exist('authTokenSecondary')) {
|
|
18
|
-
return Object.assign({ secondary: true }, get('authTokenSecondary'));
|
|
19
|
-
}
|
|
20
|
-
return user;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { JwtHelper } from '../services/jwt-security/jwt.helpher';
|
|
2
|
+
export function User() {
|
|
3
|
+
const jwtHelper = new JwtHelper();
|
|
4
|
+
return (target, key) => {
|
|
5
|
+
// Check if the data exist in the local storage
|
|
6
|
+
function exist(dataKey) {
|
|
7
|
+
return sessionStorage.hasOwnProperty(dataKey);
|
|
8
|
+
}
|
|
9
|
+
// Get data from local storage
|
|
10
|
+
function get(user) {
|
|
11
|
+
return exist(user) ? jwtHelper.decodeToken(sessionStorage.getItem(user)) : null;
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(target, key, {
|
|
14
|
+
configurable: false,
|
|
15
|
+
get: () => {
|
|
16
|
+
const user = get('authToken');
|
|
17
|
+
if (user && user.superAdmin && exist('authTokenSecondary')) {
|
|
18
|
+
return Object.assign({ secondary: true }, get('authTokenSecondary'));
|
|
19
|
+
}
|
|
20
|
+
return user;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXctZnJvbnQtY29tbW9uLWxpYnJhcnkvc3JjL2xpYi91dGlsL2RlY29yYXRvcnMvdXNlci5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWpFLE1BQU0sVUFBVSxJQUFJO0lBRWhCLE1BQU0sU0FBUyxHQUFjLElBQUksU0FBUyxFQUFFLENBQUM7SUFDN0MsT0FBTyxDQUFDLE1BQVcsRUFBRSxHQUFXLEVBQUUsRUFBRTtRQUVoQywrQ0FBK0M7UUFDL0MsU0FBUyxLQUFLLENBQUMsT0FBZTtZQUMxQixPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixTQUFTLEdBQUcsQ0FBQyxJQUFZO1lBQ3JCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BGLENBQUM7UUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDL0IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDTixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7b0JBQ3hELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsRUFBRSxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2lCQUN0RTtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBRU4sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEp3dEhlbHBlciB9IGZyb20gJy4uL3NlcnZpY2VzL2p3dC1zZWN1cml0eS9qd3QuaGVscGhlcic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVXNlcigpIHtcclxuXHJcbiAgICBjb25zdCBqd3RIZWxwZXI6IEp3dEhlbHBlciA9IG5ldyBKd3RIZWxwZXIoKTtcclxuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIGV4aXN0IGluIHRoZSBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgZnVuY3Rpb24gZXhpc3QoZGF0YUtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShkYXRhS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgIGZ1bmN0aW9uIGdldCh1c2VyOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV4aXN0KHVzZXIpID8gand0SGVscGVyLmRlY29kZVRva2VuKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odXNlcikpIDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBnZXQoJ2F1dGhUb2tlbicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5zdXBlckFkbWluICYmIGV4aXN0KCdhdXRoVG9rZW5TZWNvbmRhcnknKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtzZWNvbmRhcnk6IHRydWV9LCBnZXQoJ2F1dGhUb2tlblNlY29uZGFyeScpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxufVxyXG4iXX0=
|