@energycap/components 0.40.2-rxjs-7-upgrade.20241219-1425 → 0.41.1-ECAP-27592-angular-17.20241219-1718
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/{esm2020 → esm2022}/energycap-components.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components.module.mjs +418 -418
- package/{esm2020 → esm2022}/lib/controls/banner/banner.component.mjs +109 -109
- package/{esm2020 → esm2022}/lib/controls/button/button.component.mjs +106 -106
- package/{esm2020 → esm2022}/lib/controls/button/copy-button-base.directive.mjs +67 -67
- package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
- package/{esm2020 → esm2022}/lib/controls/button/copy-table-button.directive.mjs +43 -43
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar-item.component.mjs +59 -59
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar.component.mjs +200 -200
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar.types.mjs +3 -3
- package/{esm2020 → esm2022}/lib/controls/checkbox/checkbox.component.mjs +140 -140
- package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
- package/{esm2020 → esm2022}/lib/controls/combobox/combobox.component.mjs +879 -879
- package/{esm2020 → esm2022}/lib/controls/date-input/date-input.component.mjs +256 -256
- package/{esm2020 → esm2022}/lib/controls/dropdown/dropdown.component.mjs +243 -243
- package/{esm2020 → esm2022}/lib/controls/file-upload/file-upload.component.mjs +261 -261
- package/{esm2020 → esm2022}/lib/controls/form-control/form-control.component.mjs +104 -104
- package/{esm2020 → esm2022}/lib/controls/form-control-base.mjs +151 -151
- package/{esm2020 → esm2022}/lib/controls/form-control-label/form-control-label.component.mjs +136 -136
- package/{esm2020 → esm2022}/lib/controls/form-group/form-group.component.mjs +261 -261
- package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/controls/item-picker/item-picker.component.mjs +329 -329
- package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/controls/menu/menu.component.mjs +485 -485
- package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-group.mjs +38 -38
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-item-active.directive.mjs +92 -92
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/controls/numericbox/numericbox.component.mjs +372 -372
- package/{esm2020 → esm2022}/lib/controls/popover/popover.component.mjs +117 -117
- package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
- package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button.component.mjs +82 -82
- package/{esm2020 → esm2022}/lib/controls/select/select.component.mjs +88 -88
- package/{esm2020 → esm2022}/lib/controls/tabs/tabs.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/controls/textbox/textbox.component.mjs +155 -155
- package/{esm2020 → esm2022}/lib/core/cache.service.mjs +105 -105
- package/esm2022/lib/core/custom-validators.mjs +29 -0
- package/esm2022/lib/core/date-time-helper.mjs +220 -0
- package/{esm2020 → esm2022}/lib/core/error.service.mjs +61 -61
- package/{esm2020 → esm2022}/lib/core/router-helper.service.mjs +111 -111
- package/{esm2020 → esm2022}/lib/core/scroll.service.mjs +89 -89
- package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/core/validation-message.service.mjs +185 -185
- package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
- package/{esm2020 → esm2022}/lib/core/window.service.mjs +186 -186
- package/{esm2020 → esm2022}/lib/display/app-bar/app-bar.component.mjs +46 -46
- package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
- package/{esm2020 → esm2022}/lib/display/avatar/avatar.service.mjs +64 -64
- package/{esm2020 → esm2022}/lib/display/confirm/confirm.component.mjs +168 -168
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -63
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
- package/{esm2020 → esm2022}/lib/display/dialog/dialog.component.mjs +281 -281
- package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
- package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-base.mjs +111 -111
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -61
- package/{esm2020 → esm2022}/lib/display/item-display/item-display.component.mjs +81 -81
- package/{esm2020 → esm2022}/lib/display/json-display/json-display.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/display/resizable/resizable-base.mjs +120 -120
- package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
- package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
- package/{esm2020 → esm2022}/lib/display/splash/splash.component.mjs +42 -42
- package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
- package/{esm2020 → esm2022}/lib/display/table/resizable-table.directive.mjs +227 -227
- package/{esm2020 → esm2022}/lib/display/table/searchable-table.component.mjs +342 -342
- package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
- package/{esm2020 → esm2022}/lib/display/table/table-locked-column.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
- package/{esm2020 → esm2022}/lib/display/table/table-master-row.component.mjs +163 -163
- package/{esm2020 → esm2022}/lib/display/table/table-pagination.component.mjs +155 -155
- package/{esm2020 → esm2022}/lib/display/table/table-selectable-row.component.mjs +235 -235
- package/{esm2020 → esm2022}/lib/display/table/table.component.mjs +249 -249
- package/{esm2020 → esm2022}/lib/display/tags/tag.mjs +17 -17
- package/{esm2020 → esm2022}/lib/display/tags/tags.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/display/toast/toast/toast.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
- package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/display/toast/toaster/toaster.component.mjs +114 -114
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
- package/{esm2020 → esm2022}/lib/display/tooltip-directive/tooltip.directive.mjs +173 -173
- package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
- package/{esm2020 → esm2022}/lib/display/tour/tour.component.mjs +398 -398
- package/{esm2020 → esm2022}/lib/display/tour/tour.service.mjs +75 -75
- package/{esm2020 → esm2022}/lib/display/tree/tree.component.mjs +135 -135
- package/{esm2020 → esm2022}/lib/display/view-overlay/view-overlay.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -32
- package/{esm2020 → esm2022}/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -111
- package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
- package/{esm2020 → esm2022}/lib/shared/display/pipes/date-display.pipe.mjs +50 -50
- package/{esm2020 → esm2022}/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -30
- package/{esm2020 → esm2022}/lib/shared/display/pipes/relative-date.pipe.mjs +62 -62
- package/{esm2020 → esm2022}/lib/shared/display/pipes/row-count.pipe.mjs +48 -48
- package/{esm2020 → esm2022}/lib/shared/display/pipes/time-display.pipe.mjs +41 -41
- package/esm2022/lib/shared/display.mjs +6 -0
- package/esm2022/lib/shared/form-group.helper.mjs +67 -0
- package/{esm2020 → esm2022}/lib/shared/json-helper.mjs +18 -18
- package/esm2022/lib/shared/lodash-helper.mjs +52 -0
- package/{esm2020 → esm2022}/lib/shared/page/page-base/page-base.component.mjs +387 -387
- package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
- package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
- package/{esm2020 → esm2022}/lib/shared/page/page-view/page-view.component.mjs +147 -147
- package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
- package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
- package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
- package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
- package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
- package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -246
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
- package/{esm2020 → esm2022}/public-api.mjs +114 -114
- package/{fesm2020 → fesm2022}/energycap-components.mjs +11797 -11793
- package/fesm2022/energycap-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components.module.d.ts +91 -91
- package/lib/controls/banner/banner.component.d.ts +50 -50
- package/lib/controls/button/button.component.d.ts +78 -78
- package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
- package/lib/controls/button/copy-button.directive.d.ts +14 -14
- package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
- package/lib/controls/calendar/calendar-item.component.d.ts +17 -17
- package/lib/controls/calendar/calendar.component.d.ts +54 -54
- package/lib/controls/calendar/calendar.types.d.ts +7 -7
- package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
- package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
- package/lib/controls/combobox/combobox.component.d.ts +418 -418
- package/lib/controls/date-input/date-input.component.d.ts +80 -80
- package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
- package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
- package/lib/controls/form-control/form-control.component.d.ts +30 -30
- package/lib/controls/form-control-base.d.ts +110 -110
- package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
- package/lib/controls/form-group/form-group.component.d.ts +105 -105
- package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
- package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
- package/lib/controls/link-button/link-button.component.d.ts +5 -5
- package/lib/controls/menu/menu.component.d.ts +255 -255
- package/lib/controls/navigation/link-item.d.ts +32 -32
- package/lib/controls/navigation/nav-group.d.ts +18 -18
- package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
- package/lib/controls/navigation/nav-item.d.ts +31 -31
- package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
- package/lib/controls/popover/popover.component.d.ts +51 -51
- package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
- package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
- package/lib/controls/select/select.component.d.ts +44 -44
- package/lib/controls/tabs/tabs.component.d.ts +30 -30
- package/lib/controls/textbox/textbox.component.d.ts +107 -107
- package/lib/core/cache.service.d.ts +33 -33
- package/lib/core/custom-validators.d.ts +20 -20
- package/lib/core/date-time-helper.d.ts +101 -101
- package/lib/core/error.service.d.ts +20 -20
- package/lib/core/router-helper.service.d.ts +48 -48
- package/lib/core/scroll.service.d.ts +36 -36
- package/lib/core/telemetry-tracker.service.d.ts +13 -13
- package/lib/core/telemetry.service.d.ts +31 -31
- package/lib/core/validation-message.service.d.ts +26 -26
- package/lib/core/validation-patterns.d.ts +22 -22
- package/lib/core/window.service.d.ts +116 -116
- package/lib/display/app-bar/app-bar.component.d.ts +20 -20
- package/lib/display/avatar/avatar.component.d.ts +35 -35
- package/lib/display/avatar/avatar.service.d.ts +24 -24
- package/lib/display/confirm/confirm.component.d.ts +123 -123
- package/lib/display/dialog/dialog-content.d.ts +19 -19
- package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
- package/lib/display/dialog/dialog-types.d.ts +130 -130
- package/lib/display/dialog/dialog.component.d.ts +120 -120
- package/lib/display/dialog/dialog.service.d.ts +48 -48
- package/lib/display/help/help-types.d.ts +33 -33
- package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
- package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
- package/lib/display/item-display/item-display.component.d.ts +43 -43
- package/lib/display/json-display/json-display.component.d.ts +16 -16
- package/lib/display/resizable/resizable-base.d.ts +67 -67
- package/lib/display/resizable/resizable.component.d.ts +31 -31
- package/lib/display/spinner/spinner.component.d.ts +5 -5
- package/lib/display/splash/splash.component.d.ts +16 -16
- package/lib/display/splash/splash.service.d.ts +22 -22
- package/lib/display/table/resizable-column.component.d.ts +10 -10
- package/lib/display/table/resizable-table.directive.d.ts +93 -93
- package/lib/display/table/searchable-table.component.d.ts +206 -206
- package/lib/display/table/table-detail-row.component.d.ts +8 -8
- package/lib/display/table/table-locked-column.component.d.ts +20 -20
- package/lib/display/table/table-master-header-row.component.d.ts +9 -9
- package/lib/display/table/table-master-row.component.d.ts +113 -113
- package/lib/display/table/table-pagination.component.d.ts +91 -91
- package/lib/display/table/table-selectable-row.component.d.ts +102 -102
- package/lib/display/table/table.component.d.ts +121 -121
- package/lib/display/tags/tag.d.ts +18 -18
- package/lib/display/tags/tags.component.d.ts +48 -48
- package/lib/display/toast/toast/toast.component.d.ts +23 -23
- package/lib/display/toast/toast-types.d.ts +24 -24
- package/lib/display/toast/toast.service.d.ts +20 -20
- package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
- package/lib/display/tooltip/tooltip.component.d.ts +70 -70
- package/lib/display/tooltip/tooltip.service.d.ts +16 -16
- package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
- package/lib/display/tour/tour-types.d.ts +70 -70
- package/lib/display/tour/tour.component.d.ts +147 -147
- package/lib/display/tour/tour.service.d.ts +38 -38
- package/lib/display/tree/tree.component.d.ts +75 -75
- package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
- package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
- package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
- package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
- package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
- package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
- package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
- package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
- package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
- package/lib/shared/display.d.ts +42 -42
- package/lib/shared/form-group.helper.d.ts +31 -31
- package/lib/shared/json-helper.d.ts +7 -7
- package/lib/shared/lodash-helper.d.ts +18 -18
- package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
- package/lib/shared/page/page-statuses.d.ts +13 -13
- package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
- package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
- package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
- package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
- package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
- package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
- package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
- package/lib/shared/user-preference.service.d.ts +13 -13
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
- package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
- package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
- package/package.json +12 -18
- package/public-api.d.ts +111 -111
- package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
- package/schematics/rxjs-7-upgrade/index.js +67 -67
- package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
- package/schematics/rxjs-7-upgrade/schema.js +2 -2
- package/schematics/utilities/typescript.d.ts +7 -7
- package/schematics/utilities/typescript.js +41 -41
- package/schematics/utilities/workspace.d.ts +8 -8
- package/schematics/utilities/workspace.js +71 -71
- package/esm2020/lib/core/custom-validators.mjs +0 -29
- package/esm2020/lib/core/date-time-helper.mjs +0 -220
- package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
- package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
- package/esm2020/lib/shared/display.mjs +0 -6
- package/esm2020/lib/shared/form-group.helper.mjs +0 -67
- package/esm2020/lib/shared/lodash-helper.mjs +0 -51
- package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
- package/fesm2015/energycap-components.mjs +0 -12211
- package/fesm2015/energycap-components.mjs.map +0 -1
- package/fesm2020/energycap-components.mjs.map +0 -1
@@ -1,31 +1,31 @@
|
|
1
|
-
/** Regex to flag all spaces */
|
2
|
-
export const findAllSpacesPattern = / /g;
|
3
|
-
/** Pattern to validate United States zip codes. Allows numbers and dash only */
|
4
|
-
export const unitedStatesZipCodeRegex = /^[0-9-]+$/;
|
5
|
-
/** Pattern to validate Canadian postal codes,
|
6
|
-
* must follow the 'letter number letter space number letter number' pattern */
|
7
|
-
export const canadianPostalCodeRegex = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
|
8
|
-
/** Pattern to validate other country zip codes, anything goes */
|
9
|
-
export const otherZipCodeRegex = /.*/;
|
10
|
-
/** Pattern to validate a correct date format */
|
11
|
-
export const dateInputFormatRegex = /^[0-9./-]+$/;
|
12
|
-
/** Pattern to validate integer numbers. Negative sign is optional and will not
|
13
|
-
* invalidate if just a minus sign is entered in the input, any digit `0-9` is allowed
|
14
|
-
*/
|
15
|
-
export const integerPattern = new RegExp("^(-)?([\\d]+)?$");
|
16
|
-
/** Pattern to validate most public domains */
|
17
|
-
export const domainPattern = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i;
|
18
|
-
/**
|
19
|
-
* Function to return a decimal RegExp. Takes in the number of decimals to validate
|
20
|
-
* against
|
21
|
-
*/
|
22
|
-
export const getDecimalPattern = (decimals) => {
|
23
|
-
let decimalPattern;
|
24
|
-
// Decimal portion, allowing zero to the maximum allowed decimals
|
25
|
-
// This enables us to allow a number like "1." or "." and not invalidate
|
26
|
-
let decimalPortion = "{0," + decimals.toString() + "}";
|
27
|
-
// Negative sign is optional as well as the decimal, any digit 0-9 is allowed
|
28
|
-
decimalPattern = new RegExp(`^((((-)?\\d+\\.?\\d${decimalPortion}?)|((-)?\\.?\\d${decimalPortion})))?$`);
|
29
|
-
return decimalPattern;
|
30
|
-
};
|
1
|
+
/** Regex to flag all spaces */
|
2
|
+
export const findAllSpacesPattern = / /g;
|
3
|
+
/** Pattern to validate United States zip codes. Allows numbers and dash only */
|
4
|
+
export const unitedStatesZipCodeRegex = /^[0-9-]+$/;
|
5
|
+
/** Pattern to validate Canadian postal codes,
|
6
|
+
* must follow the 'letter number letter space number letter number' pattern */
|
7
|
+
export const canadianPostalCodeRegex = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
|
8
|
+
/** Pattern to validate other country zip codes, anything goes */
|
9
|
+
export const otherZipCodeRegex = /.*/;
|
10
|
+
/** Pattern to validate a correct date format */
|
11
|
+
export const dateInputFormatRegex = /^[0-9./-]+$/;
|
12
|
+
/** Pattern to validate integer numbers. Negative sign is optional and will not
|
13
|
+
* invalidate if just a minus sign is entered in the input, any digit `0-9` is allowed
|
14
|
+
*/
|
15
|
+
export const integerPattern = new RegExp("^(-)?([\\d]+)?$");
|
16
|
+
/** Pattern to validate most public domains */
|
17
|
+
export const domainPattern = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i;
|
18
|
+
/**
|
19
|
+
* Function to return a decimal RegExp. Takes in the number of decimals to validate
|
20
|
+
* against
|
21
|
+
*/
|
22
|
+
export const getDecimalPattern = (decimals) => {
|
23
|
+
let decimalPattern;
|
24
|
+
// Decimal portion, allowing zero to the maximum allowed decimals
|
25
|
+
// This enables us to allow a number like "1." or "." and not invalidate
|
26
|
+
let decimalPortion = "{0," + decimals.toString() + "}";
|
27
|
+
// Negative sign is optional as well as the decimal, any digit 0-9 is allowed
|
28
|
+
decimalPattern = new RegExp(`^((((-)?\\d+\\.?\\d${decimalPortion}?)|((-)?\\.?\\d${decimalPortion})))?$`);
|
29
|
+
return decimalPattern;
|
30
|
+
};
|
31
31
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1wYXR0ZXJucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL3ZhbGlkYXRpb24tcGF0dGVybnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFXLElBQUksQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQVcsV0FBVyxDQUFDO0FBRTVEO2dGQUNnRjtBQUNoRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBVyw0Q0FBNEMsQ0FBQztBQUU1RixpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVcsSUFBSSxDQUFDO0FBRTlDLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBVyxhQUFhLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVwRSw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFXLCtFQUErRSxDQUFDO0FBRXJIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xELElBQUksY0FBc0IsQ0FBQztJQUUzQixpRUFBaUU7SUFDakUsd0VBQXdFO0lBQ3hFLElBQUksY0FBYyxHQUFXLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQy9ELDZFQUE2RTtJQUM3RSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsc0JBQXNCLGNBQWMsa0JBQWtCLGNBQWMsT0FBTyxDQUFDLENBQUM7SUFFekcsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJlZ2V4IHRvIGZsYWcgYWxsIHNwYWNlcyAqL1xyXG5leHBvcnQgY29uc3QgZmluZEFsbFNwYWNlc1BhdHRlcm46IFJlZ0V4cCA9IC8gL2c7XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBVbml0ZWQgU3RhdGVzIHppcCBjb2Rlcy4gIEFsbG93cyBudW1iZXJzIGFuZCBkYXNoIG9ubHkgKi9cclxuZXhwb3J0IGNvbnN0IHVuaXRlZFN0YXRlc1ppcENvZGVSZWdleDogUmVnRXhwID0gL15bMC05LV0rJC87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBDYW5hZGlhbiBwb3N0YWwgY29kZXMsXHJcbiAqICBtdXN0IGZvbGxvdyB0aGUgJ2xldHRlciBudW1iZXIgbGV0dGVyIHNwYWNlIG51bWJlciBsZXR0ZXIgbnVtYmVyJyBwYXR0ZXJuICovXHJcbmV4cG9ydCBjb25zdCBjYW5hZGlhblBvc3RhbENvZGVSZWdleDogUmVnRXhwID0gL15bYS16QS1aXVswLTldW2EtekEtWl0gWzAtOV1bYS16QS1aXVswLTldJC87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBvdGhlciBjb3VudHJ5IHppcCBjb2RlcywgYW55dGhpbmcgZ29lcyAqL1xyXG5leHBvcnQgY29uc3Qgb3RoZXJaaXBDb2RlUmVnZXg6IFJlZ0V4cCA9IC8uKi87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBhIGNvcnJlY3QgZGF0ZSBmb3JtYXQgKi9cclxuZXhwb3J0IGNvbnN0IGRhdGVJbnB1dEZvcm1hdFJlZ2V4OiBSZWdFeHAgPSAvXlswLTkuLy1dKyQvO1xyXG5cclxuLyoqIFBhdHRlcm4gdG8gdmFsaWRhdGUgaW50ZWdlciBudW1iZXJzLiAgTmVnYXRpdmUgc2lnbiBpcyBvcHRpb25hbCBhbmQgd2lsbCBub3RcclxuICogIGludmFsaWRhdGUgaWYganVzdCBhIG1pbnVzIHNpZ24gaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQsIGFueSBkaWdpdCBgMC05YCBpcyBhbGxvd2VkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaW50ZWdlclBhdHRlcm46IFJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJeKC0pPyhbXFxcXGRdKyk/JFwiKTtcclxuXHJcbi8qKiBQYXR0ZXJuIHRvIHZhbGlkYXRlIG1vc3QgcHVibGljIGRvbWFpbnMgKi9cclxuZXhwb3J0IGNvbnN0IGRvbWFpblBhdHRlcm46IFJlZ0V4cCA9IC9eKD86W2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/XFwuKStbYS16MC05XVthLXowLTktXXswLDYxfVthLXowLTldJC9pO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIHJldHVybiBhIGRlY2ltYWwgUmVnRXhwLiAgVGFrZXMgaW4gdGhlIG51bWJlciBvZiBkZWNpbWFscyB0byB2YWxpZGF0ZVxyXG4gKiBhZ2FpbnN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0RGVjaW1hbFBhdHRlcm4gPSAoZGVjaW1hbHM6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGRlY2ltYWxQYXR0ZXJuOiBSZWdFeHA7XHJcblxyXG4gICAgLy8gRGVjaW1hbCBwb3J0aW9uLCBhbGxvd2luZyB6ZXJvIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGVjaW1hbHNcclxuICAgIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBhbGxvdyBhIG51bWJlciBsaWtlIFwiMS5cIiBvciBcIi5cIiBhbmQgbm90IGludmFsaWRhdGVcclxuICAgIGxldCBkZWNpbWFsUG9ydGlvbjogc3RyaW5nID0gXCJ7MCxcIiArIGRlY2ltYWxzLnRvU3RyaW5nKCkgKyBcIn1cIjtcclxuICAgIC8vIE5lZ2F0aXZlIHNpZ24gaXMgb3B0aW9uYWwgYXMgd2VsbCBhcyB0aGUgZGVjaW1hbCwgYW55IGRpZ2l0IDAtOSBpcyBhbGxvd2VkXHJcbiAgICBkZWNpbWFsUGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oKCgoLSk/XFxcXGQrXFxcXC4/XFxcXGQke2RlY2ltYWxQb3J0aW9ufT8pfCgoLSk/XFxcXC4/XFxcXGQke2RlY2ltYWxQb3J0aW9ufSkpKT8kYCk7XHJcblxyXG4gICAgcmV0dXJuIGRlY2ltYWxQYXR0ZXJuO1xyXG59XHJcbiJdfQ==
|
@@ -1,186 +1,186 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { fromEvent } from 'rxjs';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
import * as i1 from "@angular/router";
|
5
|
-
/**
|
6
|
-
* Service to help with interfacing with the window object
|
7
|
-
* and navigating around the application (going outside of the Angular 2+ router)
|
8
|
-
*/
|
9
|
-
export class WindowService {
|
10
|
-
/**
|
11
|
-
* Tracks if there are any unsaved changes that the user could lose.
|
12
|
-
*
|
13
|
-
* It is set up as `get` only because it is set with `addNavigateAwayPrompt`.
|
14
|
-
*
|
15
|
-
* This also includes adding a prompt to the window itself (in addition to
|
16
|
-
* working with the `CanDeactivateUnsavedChanges` guard) to cover page reloads
|
17
|
-
* which do not trigger router events.
|
18
|
-
*/
|
19
|
-
get hasUnsavedChanges() {
|
20
|
-
return this._hasUnsavedChanges;
|
21
|
-
}
|
22
|
-
/**
|
23
|
-
* Expose the innerWidth on the window global. Protects against errors when code
|
24
|
-
* is running on a non-browser platform.
|
25
|
-
*/
|
26
|
-
get innerWidth() {
|
27
|
-
return window ? window.innerWidth : undefined;
|
28
|
-
}
|
29
|
-
constructor(router, activatedRoute) {
|
30
|
-
this.router = router;
|
31
|
-
this.activatedRoute = activatedRoute;
|
32
|
-
this._hasUnsavedChanges = false;
|
33
|
-
/**
|
34
|
-
* Function called when the window `beforeunload` event is fired.
|
35
|
-
*
|
36
|
-
* A reference to the function that was passed to `window.addEventListener`
|
37
|
-
* must be retained for `window.removeEventListener` to function properly.
|
38
|
-
*
|
39
|
-
* Some browsers require the event's `returnValue` to be set to show the confirmation
|
40
|
-
* dialog.
|
41
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
42
|
-
*/
|
43
|
-
this.beforeUnloadFunction = (event) => {
|
44
|
-
// Cancel the event as stated by the standard.
|
45
|
-
event.preventDefault();
|
46
|
-
// Chrome requires returnValue to be set.
|
47
|
-
event.returnValue = '';
|
48
|
-
};
|
49
|
-
if (window) {
|
50
|
-
this.resized = fromEvent(window, 'resize');
|
51
|
-
}
|
52
|
-
}
|
53
|
-
/**
|
54
|
-
* Navigates to the previous page the user had visited
|
55
|
-
*/
|
56
|
-
goBack() {
|
57
|
-
window.history.back();
|
58
|
-
}
|
59
|
-
/**An abstraction around the browsers window history length.
|
60
|
-
* Returns zero if unable to access or running outside a browser context
|
61
|
-
*/
|
62
|
-
getHistoryLength() {
|
63
|
-
return window?.history?.length || 0;
|
64
|
-
}
|
65
|
-
/**
|
66
|
-
* Navigate to any url you know the path to
|
67
|
-
* @param url The URL to navigate to
|
68
|
-
*
|
69
|
-
* @deprecated For legacy support only; use `router.navigateByUrl` instead
|
70
|
-
*/
|
71
|
-
async navigateToUrl(url) {
|
72
|
-
try {
|
73
|
-
if (url.indexOf('/app/') === 0) {
|
74
|
-
await this.router.navigateByUrl(url.substring(5));
|
75
|
-
}
|
76
|
-
else {
|
77
|
-
await this.router.navigateByUrl(url);
|
78
|
-
}
|
79
|
-
}
|
80
|
-
catch (e) {
|
81
|
-
// If the router throws we will try to navigate to the fully qualified url as a last ditch effort.
|
82
|
-
// This can happen if we missed a link that needs to be converted to ng5 or our ng1Href directive
|
83
|
-
// didn't handle a link correctly
|
84
|
-
window.location.href = url;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
/**
|
88
|
-
* Adds a `beforeunload` function to the window to alert the user that there are about to leave
|
89
|
-
* the current page and ask if they'd like to leave or stay
|
90
|
-
*/
|
91
|
-
addNavigateAwayPrompt() {
|
92
|
-
this._hasUnsavedChanges = true;
|
93
|
-
window.addEventListener("beforeunload", this.beforeUnloadFunction);
|
94
|
-
}
|
95
|
-
/**
|
96
|
-
* Removes the `beforeunload` function added to the window
|
97
|
-
*/
|
98
|
-
removeNavigateAwayPrompt() {
|
99
|
-
this._hasUnsavedChanges = false;
|
100
|
-
window.removeEventListener("beforeunload", this.beforeUnloadFunction);
|
101
|
-
}
|
102
|
-
/**
|
103
|
-
* Send data to another window.
|
104
|
-
*
|
105
|
-
* __SECURITY RISK__ - Always use a specific target origin. Failing to provide a specific target origin can allow
|
106
|
-
* malicious sites to receive the message.
|
107
|
-
*
|
108
|
-
* @param targetWindow - Window to send the message to
|
109
|
-
* @param message - Data to send
|
110
|
-
* @param targetOrigin - What the URI of the target window must be for the message to be sent.
|
111
|
-
* If sending data to another EnergyCAP window, this should always be `window.location.origin` to ensure
|
112
|
-
* that only instances of EnergyCAP app receive the message.
|
113
|
-
*/
|
114
|
-
postMessage(targetWindow, message, targetOrigin) {
|
115
|
-
targetWindow.postMessage(message, targetOrigin);
|
116
|
-
}
|
117
|
-
/**
|
118
|
-
* Open a new window
|
119
|
-
* @param url - The URL of the resource to be loaded
|
120
|
-
*/
|
121
|
-
openNew(url) {
|
122
|
-
window.open(url, '_blank');
|
123
|
-
}
|
124
|
-
/**
|
125
|
-
* A wrapper around the router for changing the query params for the current url
|
126
|
-
* without creating a new history entry or removing any existing query parameters.
|
127
|
-
* The provided params are updated if they already exist or added to the url if they don't
|
128
|
-
*
|
129
|
-
* @returns a promise that resolves to true if the navigation succeeds, false if something (like a guard) blocks it.
|
130
|
-
* In normal use, the navigation should succeed unless we use query params to block access to a route the user is already on
|
131
|
-
*/
|
132
|
-
async modifyHistoryQueryParamsSubset(queryParams) {
|
133
|
-
return this.router.navigate([], {
|
134
|
-
relativeTo: this.activatedRoute,
|
135
|
-
replaceUrl: true,
|
136
|
-
queryParams: queryParams,
|
137
|
-
queryParamsHandling: 'merge',
|
138
|
-
});
|
139
|
-
}
|
140
|
-
/**A wrapper around the default javascript confirm dialog to allow us to unit test dependent code.
|
141
|
-
* Of course eventually we'd like to have pretty confirmations for everything, but in some cases it wasn't worth the extra time
|
142
|
-
* so we're using this instead.
|
143
|
-
*/
|
144
|
-
confirm(prompt) {
|
145
|
-
return Promise.resolve(confirm(prompt));
|
146
|
-
}
|
147
|
-
/**
|
148
|
-
* Close the current window or a window instance if one is provided
|
149
|
-
* @param windowInstance - Window to close (optional)
|
150
|
-
*/
|
151
|
-
closeWindow(windowInstance) {
|
152
|
-
if (windowInstance) {
|
153
|
-
windowInstance.close();
|
154
|
-
}
|
155
|
-
else {
|
156
|
-
window.close();
|
157
|
-
}
|
158
|
-
}
|
159
|
-
getLocation() {
|
160
|
-
return window.location.pathname + window.location.hash;
|
161
|
-
}
|
162
|
-
/** Get the current value of the full url, including protocol, host and path */
|
163
|
-
getFullUrl() {
|
164
|
-
return window.location.href;
|
165
|
-
}
|
166
|
-
/** Get the current value of the base url, including protocol, domain and port (if explicitly specified) */
|
167
|
-
getBaseUrl() {
|
168
|
-
return window.location.origin;
|
169
|
-
}
|
170
|
-
/**
|
171
|
-
* Reloads the browser window.
|
172
|
-
* NOT RECOMMENDED. Seek other options for reloading content within Angular before resorting to this.
|
173
|
-
*/
|
174
|
-
reloadWindow() {
|
175
|
-
window.location.reload();
|
176
|
-
}
|
177
|
-
}
|
178
|
-
|
179
|
-
|
180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
181
|
-
type: Injectable,
|
182
|
-
args: [{
|
183
|
-
providedIn: 'root'
|
184
|
-
}]
|
185
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUV0Qjs7Ozs7Ozs7T0FRRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFBO0lBQ2xDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBT0QsWUFDWSxNQUFhLEVBQ2IsY0FBOEI7UUFEOUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0s1Qzs7Ozs7Ozs7O1dBU0c7UUFDSyx5QkFBb0IsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN4RCw4Q0FBOEM7WUFDOUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLHlDQUF5QztZQUN6QyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7UUE1SkUsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMx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O2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0byBoZWxwIHdpdGggaW50ZXJmYWNpbmcgd2l0aCB0aGUgd2luZG93IG9iamVjdFxyXG4gKiBhbmQgbmF2aWdhdGluZyBhcm91bmQgdGhlIGFwcGxpY2F0aW9uIChnb2luZyBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIDIrIHJvdXRlcilcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFja3MgaWYgdGhlcmUgYXJlIGFueSB1bnNhdmVkIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBjb3VsZCBsb3NlLlxyXG4gICAgICpcclxuICAgICAqIEl0IGlzIHNldCB1cCBhcyBgZ2V0YCBvbmx5IGJlY2F1c2UgaXQgaXMgc2V0IHdpdGggYGFkZE5hdmlnYXRlQXdheVByb21wdGAuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyBhIHByb21wdCB0byB0aGUgd2luZG93IGl0c2VsZiAoaW4gYWRkaXRpb24gdG9cclxuICAgICAqIHdvcmtpbmcgd2l0aCB0aGUgYENhbkRlYWN0aXZhdGVVbnNhdmVkQ2hhbmdlc2AgZ3VhcmQpIHRvIGNvdmVyIHBhZ2UgcmVsb2Fkc1xyXG4gICAgICogd2hpY2ggZG8gbm90IHRyaWdnZXIgcm91dGVyIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGFzVW5zYXZlZENoYW5nZXNcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRXhwb3NlIHRoZSBpbm5lcldpZHRoIG9uIHRoZSB3aW5kb3cgZ2xvYmFsLiBQcm90ZWN0cyBhZ2FpbnN0IGVycm9ycyB3aGVuIGNvZGVcclxuICAgICAqIGlzIHJ1bm5pbmcgb24gYSBub24tYnJvd3NlciBwbGF0Zm9ybS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbm5lcldpZHRoKCk6IG51bWJlcnx1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9ic2VydmFibGUgb2YgdGhlIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2l6ZWQ/OiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkgeyBcclxuICAgICAgICBpZiAod2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplZCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgdGhlIHVzZXIgaGFkIHZpc2l0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvQmFjaygpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqQW4gYWJzdHJhY3Rpb24gYXJvdW5kIHRoZSBicm93c2VycyB3aW5kb3cgaGlzdG9yeSBsZW5ndGguXHJcbiAgICAgKiBSZXR1cm5zIHplcm8gaWYgdW5hYmxlIHRvIGFjY2VzcyBvciBydW5uaW5nIG91dHNpZGUgYSBicm93c2VyIGNvbnRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEhpc3RvcnlMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93Py5oaXN0b3J5Py5sZW5ndGggfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIHRvIGFueSB1cmwgeW91IGtub3cgdGhlIHBhdGggdG9cclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBuYXZpZ2F0ZSB0b1xyXG4gICAgICpcclxuICAgICAqIEBkZXByZWNhdGVkIEZvciBsZWdhY3kgc3VwcG9ydCBvbmx5OyB1c2UgYHJvdXRlci5uYXZpZ2F0ZUJ5VXJsYCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBuYXZpZ2F0ZVRvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvYXBwLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybC5zdWJzdHJpbmcoNSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcm91dGVyIHRocm93cyB3ZSB3aWxsIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIHVybCBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LlxyXG4gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgbWlzc2VkIGEgbGluayB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBuZzUgb3Igb3VyIG5nMUhyZWYgZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIC8vIGRpZG4ndCBoYW5kbGUgYSBsaW5rIGNvcnJlY3RseVxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgYGJlZm9yZXVubG9hZGAgZnVuY3Rpb24gdG8gdGhlIHdpbmRvdyB0byBhbGVydCB0aGUgdXNlciB0aGF0IHRoZXJlIGFyZSBhYm91dCB0byBsZWF2ZVxyXG4gICAgICogdGhlIGN1cnJlbnQgcGFnZSBhbmQgYXNrIGlmIHRoZXknZCBsaWtlIHRvIGxlYXZlIG9yIHN0YXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZE5hdmlnYXRlQXdheVByb21wdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy5iZWZvcmVVbmxvYWRGdW5jdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBgYmVmb3JldW5sb2FkYCBmdW5jdGlvbiBhZGRlZCB0byB0aGUgd2luZG93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVOYXZpZ2F0ZUF3YXlQcm9tcHQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLmJlZm9yZVVubG9hZEZ1bmN0aW9uKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRhdGEgdG8gYW5vdGhlciB3aW5kb3cuXHJcbiAgICAgKlxyXG4gICAgICogX19TRUNVUklUWSBSSVNLX18gLSBBbHdheXMgdXNlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbi4gRmFpbGluZyB0byBwcm92aWRlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbiBjYW4gYWxsb3dcclxuICAgICAqIG1hbGljaW91cyBzaXRlcyB0byByZWNlaXZlIHRoZSBtZXNzYWdlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YXJnZXRXaW5kb3cgLSBXaW5kb3cgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBEYXRhIHRvIHNlbmRcclxuICAgICAqIEBwYXJhbSB0YXJnZXRPcmlnaW4gLSBXaGF0IHRoZSBVUkkgb2YgdGhlIHRhcmdldCB3aW5kb3cgbXVzdCBiZSBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudC5cclxuICAgICAqIElmIHNlbmRpbmcgZGF0YSB0byBhbm90aGVyIEVuZXJneUNBUCB3aW5kb3csIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmAgdG8gZW5zdXJlXHJcbiAgICAgKiB0aGF0IG9ubHkgaW5zdGFuY2VzIG9mIEVuZXJneUNBUCBhcHAgcmVjZWl2ZSB0aGUgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc3RNZXNzYWdlKHRhcmdldFdpbmRvdzogV2luZG93LCBtZXNzYWdlOiBhbnksIHRhcmdldE9yaWdpbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3Blbk5ldyh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgcm91dGVyIGZvciBjaGFuZ2luZyB0aGUgcXVlcnkgcGFyYW1zIGZvciB0aGUgY3VycmVudCB1cmwgXHJcbiAgICAgKiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGhpc3RvcnkgZW50cnkgb3IgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICAgKiBUaGUgcHJvdmlkZWQgcGFyYW1zIGFyZSB1cGRhdGVkIGlmIHRoZXkgYWxyZWFkeSBleGlzdCBvciBhZGRlZCB0byB0aGUgdXJsIGlmIHRoZXkgZG9uJ3RcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBzdWNjZWVkcywgZmFsc2UgaWYgc29tZXRoaW5nIChsaWtlIGEgZ3VhcmQpIGJsb2NrcyBpdC5cclxuICAgICAqIEluIG5vcm1hbCB1c2UsIHRoZSBuYXZpZ2F0aW9uIHNob3VsZCBzdWNjZWVkIHVubGVzcyB3ZSB1c2UgcXVlcnkgcGFyYW1zIHRvIGJsb2NrIGFjY2VzcyB0byBhIHJvdXRlIHRoZSB1c2VyIGlzIGFscmVhZHkgb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG1vZGlmeUhpc3RvcnlRdWVyeVBhcmFtc1N1YnNldChxdWVyeVBhcmFtczogUGFyYW1zKSA6IFByb21pc2U8Ym9vbGVhbj57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKCBbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKkEgd3JhcHBlciBhcm91bmQgdGhlIGRlZmF1bHQgamF2YXNjcmlwdCBjb25maXJtIGRpYWxvZyB0byBhbGxvdyB1cyB0byB1bml0IHRlc3QgZGVwZW5kZW50IGNvZGUuXHJcbiAgICAgKiBPZiBjb3Vyc2UgZXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBwcmV0dHkgY29uZmlybWF0aW9ucyBmb3IgZXZlcnl0aGluZywgYnV0IGluIHNvbWUgY2FzZXMgaXQgd2Fzbid0IHdvcnRoIHRoZSBleHRyYSB0aW1lXHJcbiAgICAgKiBzbyB3ZSdyZSB1c2luZyB0aGlzIGluc3RlYWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maXJtKHByb21wdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgd2luZG93IG9yIGEgd2luZG93IGluc3RhbmNlIGlmIG9uZSBpcyBwcm92aWRlZFxyXG4gICAgICogQHBhcmFtIHdpbmRvd0luc3RhbmNlIC0gV2luZG93IHRvIGNsb3NlIChvcHRpb25hbClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlV2luZG93KHdpbmRvd0luc3RhbmNlPzogV2luZG93KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdpbmRvd0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmdWxsIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBob3N0IGFuZCBwYXRoICovXHJcbiAgICBwdWJsaWMgZ2V0RnVsbFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiYXNlIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBkb21haW4gYW5kIHBvcnQgKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSAqL1xyXG4gICAgcHVibGljIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZHMgdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICogTk9UIFJFQ09NTUVOREVELiBTZWVrIG90aGVyIG9wdGlvbnMgZm9yIHJlbG9hZGluZyBjb250ZW50IHdpdGhpbiBBbmd1bGFyIGJlZm9yZSByZXNvcnRpbmcgdG8gdGhpcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbG9hZFdpbmRvdygpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgd2luZG93IGBiZWZvcmV1bmxvYWRgIGV2ZW50IGlzIGZpcmVkLlxyXG4gICAgICpcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBwYXNzZWQgdG8gYHdpbmRvdy5hZGRFdmVudExpc3RlbmVyYFxyXG4gICAgICogbXVzdCBiZSByZXRhaW5lZCBmb3IgYHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyYCB0byBmdW5jdGlvbiBwcm9wZXJseS5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhlIGV2ZW50J3MgYHJldHVyblZhbHVlYCB0byBiZSBzZXQgdG8gc2hvdyB0aGUgY29uZmlybWF0aW9uXHJcbiAgICAgKiBkaWFsb2cuXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvYmVmb3JldW5sb2FkX2V2ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVmb3JlVW5sb2FkRnVuY3Rpb24gPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBldmVudCBhcyBzdGF0ZWQgYnkgdGhlIHN0YW5kYXJkLlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcXVpcmVzIHJldHVyblZhbHVlIHRvIGJlIHNldC5cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { fromEvent } from 'rxjs';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
import * as i1 from "@angular/router";
|
5
|
+
/**
|
6
|
+
* Service to help with interfacing with the window object
|
7
|
+
* and navigating around the application (going outside of the Angular 2+ router)
|
8
|
+
*/
|
9
|
+
export class WindowService {
|
10
|
+
/**
|
11
|
+
* Tracks if there are any unsaved changes that the user could lose.
|
12
|
+
*
|
13
|
+
* It is set up as `get` only because it is set with `addNavigateAwayPrompt`.
|
14
|
+
*
|
15
|
+
* This also includes adding a prompt to the window itself (in addition to
|
16
|
+
* working with the `CanDeactivateUnsavedChanges` guard) to cover page reloads
|
17
|
+
* which do not trigger router events.
|
18
|
+
*/
|
19
|
+
get hasUnsavedChanges() {
|
20
|
+
return this._hasUnsavedChanges;
|
21
|
+
}
|
22
|
+
/**
|
23
|
+
* Expose the innerWidth on the window global. Protects against errors when code
|
24
|
+
* is running on a non-browser platform.
|
25
|
+
*/
|
26
|
+
get innerWidth() {
|
27
|
+
return window ? window.innerWidth : undefined;
|
28
|
+
}
|
29
|
+
constructor(router, activatedRoute) {
|
30
|
+
this.router = router;
|
31
|
+
this.activatedRoute = activatedRoute;
|
32
|
+
this._hasUnsavedChanges = false;
|
33
|
+
/**
|
34
|
+
* Function called when the window `beforeunload` event is fired.
|
35
|
+
*
|
36
|
+
* A reference to the function that was passed to `window.addEventListener`
|
37
|
+
* must be retained for `window.removeEventListener` to function properly.
|
38
|
+
*
|
39
|
+
* Some browsers require the event's `returnValue` to be set to show the confirmation
|
40
|
+
* dialog.
|
41
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
42
|
+
*/
|
43
|
+
this.beforeUnloadFunction = (event) => {
|
44
|
+
// Cancel the event as stated by the standard.
|
45
|
+
event.preventDefault();
|
46
|
+
// Chrome requires returnValue to be set.
|
47
|
+
event.returnValue = '';
|
48
|
+
};
|
49
|
+
if (window) {
|
50
|
+
this.resized = fromEvent(window, 'resize');
|
51
|
+
}
|
52
|
+
}
|
53
|
+
/**
|
54
|
+
* Navigates to the previous page the user had visited
|
55
|
+
*/
|
56
|
+
goBack() {
|
57
|
+
window.history.back();
|
58
|
+
}
|
59
|
+
/**An abstraction around the browsers window history length.
|
60
|
+
* Returns zero if unable to access or running outside a browser context
|
61
|
+
*/
|
62
|
+
getHistoryLength() {
|
63
|
+
return window?.history?.length || 0;
|
64
|
+
}
|
65
|
+
/**
|
66
|
+
* Navigate to any url you know the path to
|
67
|
+
* @param url The URL to navigate to
|
68
|
+
*
|
69
|
+
* @deprecated For legacy support only; use `router.navigateByUrl` instead
|
70
|
+
*/
|
71
|
+
async navigateToUrl(url) {
|
72
|
+
try {
|
73
|
+
if (url.indexOf('/app/') === 0) {
|
74
|
+
await this.router.navigateByUrl(url.substring(5));
|
75
|
+
}
|
76
|
+
else {
|
77
|
+
await this.router.navigateByUrl(url);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
catch (e) {
|
81
|
+
// If the router throws we will try to navigate to the fully qualified url as a last ditch effort.
|
82
|
+
// This can happen if we missed a link that needs to be converted to ng5 or our ng1Href directive
|
83
|
+
// didn't handle a link correctly
|
84
|
+
window.location.href = url;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
/**
|
88
|
+
* Adds a `beforeunload` function to the window to alert the user that there are about to leave
|
89
|
+
* the current page and ask if they'd like to leave or stay
|
90
|
+
*/
|
91
|
+
addNavigateAwayPrompt() {
|
92
|
+
this._hasUnsavedChanges = true;
|
93
|
+
window.addEventListener("beforeunload", this.beforeUnloadFunction);
|
94
|
+
}
|
95
|
+
/**
|
96
|
+
* Removes the `beforeunload` function added to the window
|
97
|
+
*/
|
98
|
+
removeNavigateAwayPrompt() {
|
99
|
+
this._hasUnsavedChanges = false;
|
100
|
+
window.removeEventListener("beforeunload", this.beforeUnloadFunction);
|
101
|
+
}
|
102
|
+
/**
|
103
|
+
* Send data to another window.
|
104
|
+
*
|
105
|
+
* __SECURITY RISK__ - Always use a specific target origin. Failing to provide a specific target origin can allow
|
106
|
+
* malicious sites to receive the message.
|
107
|
+
*
|
108
|
+
* @param targetWindow - Window to send the message to
|
109
|
+
* @param message - Data to send
|
110
|
+
* @param targetOrigin - What the URI of the target window must be for the message to be sent.
|
111
|
+
* If sending data to another EnergyCAP window, this should always be `window.location.origin` to ensure
|
112
|
+
* that only instances of EnergyCAP app receive the message.
|
113
|
+
*/
|
114
|
+
postMessage(targetWindow, message, targetOrigin) {
|
115
|
+
targetWindow.postMessage(message, targetOrigin);
|
116
|
+
}
|
117
|
+
/**
|
118
|
+
* Open a new window
|
119
|
+
* @param url - The URL of the resource to be loaded
|
120
|
+
*/
|
121
|
+
openNew(url) {
|
122
|
+
window.open(url, '_blank');
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* A wrapper around the router for changing the query params for the current url
|
126
|
+
* without creating a new history entry or removing any existing query parameters.
|
127
|
+
* The provided params are updated if they already exist or added to the url if they don't
|
128
|
+
*
|
129
|
+
* @returns a promise that resolves to true if the navigation succeeds, false if something (like a guard) blocks it.
|
130
|
+
* In normal use, the navigation should succeed unless we use query params to block access to a route the user is already on
|
131
|
+
*/
|
132
|
+
async modifyHistoryQueryParamsSubset(queryParams) {
|
133
|
+
return this.router.navigate([], {
|
134
|
+
relativeTo: this.activatedRoute,
|
135
|
+
replaceUrl: true,
|
136
|
+
queryParams: queryParams,
|
137
|
+
queryParamsHandling: 'merge',
|
138
|
+
});
|
139
|
+
}
|
140
|
+
/**A wrapper around the default javascript confirm dialog to allow us to unit test dependent code.
|
141
|
+
* Of course eventually we'd like to have pretty confirmations for everything, but in some cases it wasn't worth the extra time
|
142
|
+
* so we're using this instead.
|
143
|
+
*/
|
144
|
+
confirm(prompt) {
|
145
|
+
return Promise.resolve(confirm(prompt));
|
146
|
+
}
|
147
|
+
/**
|
148
|
+
* Close the current window or a window instance if one is provided
|
149
|
+
* @param windowInstance - Window to close (optional)
|
150
|
+
*/
|
151
|
+
closeWindow(windowInstance) {
|
152
|
+
if (windowInstance) {
|
153
|
+
windowInstance.close();
|
154
|
+
}
|
155
|
+
else {
|
156
|
+
window.close();
|
157
|
+
}
|
158
|
+
}
|
159
|
+
getLocation() {
|
160
|
+
return window.location.pathname + window.location.hash;
|
161
|
+
}
|
162
|
+
/** Get the current value of the full url, including protocol, host and path */
|
163
|
+
getFullUrl() {
|
164
|
+
return window.location.href;
|
165
|
+
}
|
166
|
+
/** Get the current value of the base url, including protocol, domain and port (if explicitly specified) */
|
167
|
+
getBaseUrl() {
|
168
|
+
return window.location.origin;
|
169
|
+
}
|
170
|
+
/**
|
171
|
+
* Reloads the browser window.
|
172
|
+
* NOT RECOMMENDED. Seek other options for reloading content within Angular before resorting to this.
|
173
|
+
*/
|
174
|
+
reloadWindow() {
|
175
|
+
window.location.reload();
|
176
|
+
}
|
177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
178
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowService, providedIn: 'root' }); }
|
179
|
+
}
|
180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowService, decorators: [{
|
181
|
+
type: Injectable,
|
182
|
+
args: [{
|
183
|
+
providedIn: 'root'
|
184
|
+
}]
|
185
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUV0Qjs7Ozs7Ozs7T0FRRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFBO0lBQ2xDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBT0QsWUFDWSxNQUFhLEVBQ2IsY0FBOEI7UUFEOUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0s1Qzs7Ozs7Ozs7O1dBU0c7UUFDSyx5QkFBb0IsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN4RCw4Q0FBOEM7WUFDOUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLHlDQUF5QztZQUN6QyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7UUE1SkUsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMx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O2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0byBoZWxwIHdpdGggaW50ZXJmYWNpbmcgd2l0aCB0aGUgd2luZG93IG9iamVjdFxyXG4gKiBhbmQgbmF2aWdhdGluZyBhcm91bmQgdGhlIGFwcGxpY2F0aW9uIChnb2luZyBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIDIrIHJvdXRlcilcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFja3MgaWYgdGhlcmUgYXJlIGFueSB1bnNhdmVkIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBjb3VsZCBsb3NlLlxyXG4gICAgICpcclxuICAgICAqIEl0IGlzIHNldCB1cCBhcyBgZ2V0YCBvbmx5IGJlY2F1c2UgaXQgaXMgc2V0IHdpdGggYGFkZE5hdmlnYXRlQXdheVByb21wdGAuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyBhIHByb21wdCB0byB0aGUgd2luZG93IGl0c2VsZiAoaW4gYWRkaXRpb24gdG9cclxuICAgICAqIHdvcmtpbmcgd2l0aCB0aGUgYENhbkRlYWN0aXZhdGVVbnNhdmVkQ2hhbmdlc2AgZ3VhcmQpIHRvIGNvdmVyIHBhZ2UgcmVsb2Fkc1xyXG4gICAgICogd2hpY2ggZG8gbm90IHRyaWdnZXIgcm91dGVyIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGFzVW5zYXZlZENoYW5nZXNcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRXhwb3NlIHRoZSBpbm5lcldpZHRoIG9uIHRoZSB3aW5kb3cgZ2xvYmFsLiBQcm90ZWN0cyBhZ2FpbnN0IGVycm9ycyB3aGVuIGNvZGVcclxuICAgICAqIGlzIHJ1bm5pbmcgb24gYSBub24tYnJvd3NlciBwbGF0Zm9ybS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbm5lcldpZHRoKCk6IG51bWJlcnx1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9ic2VydmFibGUgb2YgdGhlIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2l6ZWQ/OiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkgeyBcclxuICAgICAgICBpZiAod2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplZCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgdGhlIHVzZXIgaGFkIHZpc2l0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvQmFjaygpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqQW4gYWJzdHJhY3Rpb24gYXJvdW5kIHRoZSBicm93c2VycyB3aW5kb3cgaGlzdG9yeSBsZW5ndGguXHJcbiAgICAgKiBSZXR1cm5zIHplcm8gaWYgdW5hYmxlIHRvIGFjY2VzcyBvciBydW5uaW5nIG91dHNpZGUgYSBicm93c2VyIGNvbnRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEhpc3RvcnlMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93Py5oaXN0b3J5Py5sZW5ndGggfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIHRvIGFueSB1cmwgeW91IGtub3cgdGhlIHBhdGggdG9cclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBuYXZpZ2F0ZSB0b1xyXG4gICAgICpcclxuICAgICAqIEBkZXByZWNhdGVkIEZvciBsZWdhY3kgc3VwcG9ydCBvbmx5OyB1c2UgYHJvdXRlci5uYXZpZ2F0ZUJ5VXJsYCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBuYXZpZ2F0ZVRvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvYXBwLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybC5zdWJzdHJpbmcoNSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcm91dGVyIHRocm93cyB3ZSB3aWxsIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIHVybCBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LlxyXG4gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgbWlzc2VkIGEgbGluayB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBuZzUgb3Igb3VyIG5nMUhyZWYgZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIC8vIGRpZG4ndCBoYW5kbGUgYSBsaW5rIGNvcnJlY3RseVxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgYGJlZm9yZXVubG9hZGAgZnVuY3Rpb24gdG8gdGhlIHdpbmRvdyB0byBhbGVydCB0aGUgdXNlciB0aGF0IHRoZXJlIGFyZSBhYm91dCB0byBsZWF2ZVxyXG4gICAgICogdGhlIGN1cnJlbnQgcGFnZSBhbmQgYXNrIGlmIHRoZXknZCBsaWtlIHRvIGxlYXZlIG9yIHN0YXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZE5hdmlnYXRlQXdheVByb21wdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy5iZWZvcmVVbmxvYWRGdW5jdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBgYmVmb3JldW5sb2FkYCBmdW5jdGlvbiBhZGRlZCB0byB0aGUgd2luZG93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVOYXZpZ2F0ZUF3YXlQcm9tcHQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLmJlZm9yZVVubG9hZEZ1bmN0aW9uKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRhdGEgdG8gYW5vdGhlciB3aW5kb3cuXHJcbiAgICAgKlxyXG4gICAgICogX19TRUNVUklUWSBSSVNLX18gLSBBbHdheXMgdXNlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbi4gRmFpbGluZyB0byBwcm92aWRlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbiBjYW4gYWxsb3dcclxuICAgICAqIG1hbGljaW91cyBzaXRlcyB0byByZWNlaXZlIHRoZSBtZXNzYWdlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YXJnZXRXaW5kb3cgLSBXaW5kb3cgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBEYXRhIHRvIHNlbmRcclxuICAgICAqIEBwYXJhbSB0YXJnZXRPcmlnaW4gLSBXaGF0IHRoZSBVUkkgb2YgdGhlIHRhcmdldCB3aW5kb3cgbXVzdCBiZSBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudC5cclxuICAgICAqIElmIHNlbmRpbmcgZGF0YSB0byBhbm90aGVyIEVuZXJneUNBUCB3aW5kb3csIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmAgdG8gZW5zdXJlXHJcbiAgICAgKiB0aGF0IG9ubHkgaW5zdGFuY2VzIG9mIEVuZXJneUNBUCBhcHAgcmVjZWl2ZSB0aGUgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc3RNZXNzYWdlKHRhcmdldFdpbmRvdzogV2luZG93LCBtZXNzYWdlOiBhbnksIHRhcmdldE9yaWdpbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3Blbk5ldyh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgcm91dGVyIGZvciBjaGFuZ2luZyB0aGUgcXVlcnkgcGFyYW1zIGZvciB0aGUgY3VycmVudCB1cmwgXHJcbiAgICAgKiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGhpc3RvcnkgZW50cnkgb3IgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICAgKiBUaGUgcHJvdmlkZWQgcGFyYW1zIGFyZSB1cGRhdGVkIGlmIHRoZXkgYWxyZWFkeSBleGlzdCBvciBhZGRlZCB0byB0aGUgdXJsIGlmIHRoZXkgZG9uJ3RcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBzdWNjZWVkcywgZmFsc2UgaWYgc29tZXRoaW5nIChsaWtlIGEgZ3VhcmQpIGJsb2NrcyBpdC5cclxuICAgICAqIEluIG5vcm1hbCB1c2UsIHRoZSBuYXZpZ2F0aW9uIHNob3VsZCBzdWNjZWVkIHVubGVzcyB3ZSB1c2UgcXVlcnkgcGFyYW1zIHRvIGJsb2NrIGFjY2VzcyB0byBhIHJvdXRlIHRoZSB1c2VyIGlzIGFscmVhZHkgb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG1vZGlmeUhpc3RvcnlRdWVyeVBhcmFtc1N1YnNldChxdWVyeVBhcmFtczogUGFyYW1zKSA6IFByb21pc2U8Ym9vbGVhbj57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKCBbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKkEgd3JhcHBlciBhcm91bmQgdGhlIGRlZmF1bHQgamF2YXNjcmlwdCBjb25maXJtIGRpYWxvZyB0byBhbGxvdyB1cyB0byB1bml0IHRlc3QgZGVwZW5kZW50IGNvZGUuXHJcbiAgICAgKiBPZiBjb3Vyc2UgZXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBwcmV0dHkgY29uZmlybWF0aW9ucyBmb3IgZXZlcnl0aGluZywgYnV0IGluIHNvbWUgY2FzZXMgaXQgd2Fzbid0IHdvcnRoIHRoZSBleHRyYSB0aW1lXHJcbiAgICAgKiBzbyB3ZSdyZSB1c2luZyB0aGlzIGluc3RlYWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maXJtKHByb21wdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgd2luZG93IG9yIGEgd2luZG93IGluc3RhbmNlIGlmIG9uZSBpcyBwcm92aWRlZFxyXG4gICAgICogQHBhcmFtIHdpbmRvd0luc3RhbmNlIC0gV2luZG93IHRvIGNsb3NlIChvcHRpb25hbClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlV2luZG93KHdpbmRvd0luc3RhbmNlPzogV2luZG93KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdpbmRvd0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmdWxsIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBob3N0IGFuZCBwYXRoICovXHJcbiAgICBwdWJsaWMgZ2V0RnVsbFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiYXNlIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBkb21haW4gYW5kIHBvcnQgKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSAqL1xyXG4gICAgcHVibGljIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZHMgdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICogTk9UIFJFQ09NTUVOREVELiBTZWVrIG90aGVyIG9wdGlvbnMgZm9yIHJlbG9hZGluZyBjb250ZW50IHdpdGhpbiBBbmd1bGFyIGJlZm9yZSByZXNvcnRpbmcgdG8gdGhpcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbG9hZFdpbmRvdygpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgd2luZG93IGBiZWZvcmV1bmxvYWRgIGV2ZW50IGlzIGZpcmVkLlxyXG4gICAgICpcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBwYXNzZWQgdG8gYHdpbmRvdy5hZGRFdmVudExpc3RlbmVyYFxyXG4gICAgICogbXVzdCBiZSByZXRhaW5lZCBmb3IgYHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyYCB0byBmdW5jdGlvbiBwcm9wZXJseS5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhlIGV2ZW50J3MgYHJldHVyblZhbHVlYCB0byBiZSBzZXQgdG8gc2hvdyB0aGUgY29uZmlybWF0aW9uXHJcbiAgICAgKiBkaWFsb2cuXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvYmVmb3JldW5sb2FkX2V2ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVmb3JlVW5sb2FkRnVuY3Rpb24gPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBldmVudCBhcyBzdGF0ZWQgYnkgdGhlIHN0YW5kYXJkLlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcXVpcmVzIHJldHVyblZhbHVlIHRvIGJlIHNldC5cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
|
@@ -1,46 +1,46 @@
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
import * as i1 from "../avatar/avatar.service";
|
4
|
-
import * as i2 from "@angular/common";
|
5
|
-
import * as i3 from "../../controls/dropdown/dropdown.component";
|
6
|
-
import * as i4 from "../avatar/avatar.component";
|
7
|
-
export class AppBarComponent {
|
8
|
-
constructor(avatarService) {
|
9
|
-
this.avatarService = avatarService;
|
10
|
-
this.userMenuItems = [];
|
11
|
-
this.userMenuWidth = 0;
|
12
|
-
this.userMenuMinWidth = 160;
|
13
|
-
this.userMenuTabindex = 0;
|
14
|
-
this.iconPath = '/assets/images/icon.svg';
|
15
|
-
this.menuItems = [];
|
16
|
-
this.userItem = [];
|
17
|
-
}
|
18
|
-
ngOnChanges() {
|
19
|
-
if (this.user) {
|
20
|
-
this.userItem[0] = { label: this.avatarService.getAvatarLabels(this.user).full || '', display: 'heading' };
|
21
|
-
}
|
22
|
-
else {
|
23
|
-
this.userItem = [];
|
24
|
-
}
|
25
|
-
this.menuItems = [...this.userItem, ...this.userMenuItems];
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
31
|
-
type: Component,
|
32
|
-
args: [{ selector: 'ec-app-bar', template: "<section class=\"logo-container\">\r\n <img src=\"{{iconPath}}\"\r\n alt=\"EnergyCAP Platform\">\r\n</section>\r\n\r\n<section class=\"title-container\">\r\n <ng-content select=\".app-bar-title\"></ng-content>\r\n</section>\r\n\r\n<section class=\"actions-container\">\r\n <ng-content select=\".app-bar-actions\"></ng-content>\r\n <ec-dropdown id=\"AppBarUserMenu\"\r\n *ngIf=\"userMenuItems.length; else avatar\"\r\n [items]=\"menuItems\"\r\n [buttonCustomTemplate]=\"avatar\"\r\n [showArrow]=\"false\"\r\n [menuWidth]=\"userMenuWidth\"\r\n [menuMinWidth]=\"userMenuMinWidth\"\r\n [tabindex]=\"userMenuTabindex\"></ec-dropdown>\r\n</section>\r\n\r\n<ng-template #avatar>\r\n <ec-avatar [user]=\"user\"></ec-avatar>\r\n</ng-template>", styles: [":host{display:flex;height:3rem;align-items:center;width:100%;padding:0 .75rem 0 1rem;background-color:var(--ec-background-color);position:relative;z-index:var(--ec-z-index-navbar)}:host ::ng-deep .app-bar-actions{display:flex;align-items:center;justify-content:flex-end;margin-right:.25rem}section{flex:1 1}.logo-container img{width:2rem;height:2rem}.title-container{text-align:center}.actions-container{display:flex;justify-content:flex-end}#AppBarUserMenu ::ng-deep ec-button{--ec-border-radius: 50%}#AppBarUserMenu ::ng-deep ec-button.active>.ec-button-custom{background-color:transparent;border-color:var(--ec-color-primary-light)}#AppBarUserMenu ::ng-deep ec-button .ec-button-custom:focus{background-color:var(--ec-background-color)}\n"] }]
|
33
|
-
}], ctorParameters: function () { return [{ type: i1.AvatarService }]; }, propDecorators: { user: [{
|
34
|
-
type: Input
|
35
|
-
}], userMenuItems: [{
|
36
|
-
type: Input
|
37
|
-
}], userMenuWidth: [{
|
38
|
-
type: Input
|
39
|
-
}], userMenuMinWidth: [{
|
40
|
-
type: Input
|
41
|
-
}], userMenuTabindex: [{
|
42
|
-
type: Input
|
43
|
-
}], iconPath: [{
|
44
|
-
type: Input
|
45
|
-
}] } });
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
1
|
+
import { Component, Input } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
import * as i1 from "../avatar/avatar.service";
|
4
|
+
import * as i2 from "@angular/common";
|
5
|
+
import * as i3 from "../../controls/dropdown/dropdown.component";
|
6
|
+
import * as i4 from "../avatar/avatar.component";
|
7
|
+
export class AppBarComponent {
|
8
|
+
constructor(avatarService) {
|
9
|
+
this.avatarService = avatarService;
|
10
|
+
this.userMenuItems = [];
|
11
|
+
this.userMenuWidth = 0;
|
12
|
+
this.userMenuMinWidth = 160;
|
13
|
+
this.userMenuTabindex = 0;
|
14
|
+
this.iconPath = '/assets/images/icon.svg';
|
15
|
+
this.menuItems = [];
|
16
|
+
this.userItem = [];
|
17
|
+
}
|
18
|
+
ngOnChanges() {
|
19
|
+
if (this.user) {
|
20
|
+
this.userItem[0] = { label: this.avatarService.getAvatarLabels(this.user).full || '', display: 'heading' };
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
this.userItem = [];
|
24
|
+
}
|
25
|
+
this.menuItems = [...this.userItem, ...this.userMenuItems];
|
26
|
+
}
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppBarComponent, deps: [{ token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
|
28
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppBarComponent, selector: "ec-app-bar", inputs: { user: "user", userMenuItems: "userMenuItems", userMenuWidth: "userMenuWidth", userMenuMinWidth: "userMenuMinWidth", userMenuTabindex: "userMenuTabindex", iconPath: "iconPath" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"logo-container\">\r\n <img src=\"{{iconPath}}\"\r\n alt=\"EnergyCAP Platform\">\r\n</section>\r\n\r\n<section class=\"title-container\">\r\n <ng-content select=\".app-bar-title\"></ng-content>\r\n</section>\r\n\r\n<section class=\"actions-container\">\r\n <ng-content select=\".app-bar-actions\"></ng-content>\r\n <ec-dropdown id=\"AppBarUserMenu\"\r\n *ngIf=\"userMenuItems.length; else avatar\"\r\n [items]=\"menuItems\"\r\n [buttonCustomTemplate]=\"avatar\"\r\n [showArrow]=\"false\"\r\n [menuWidth]=\"userMenuWidth\"\r\n [menuMinWidth]=\"userMenuMinWidth\"\r\n [tabindex]=\"userMenuTabindex\"></ec-dropdown>\r\n</section>\r\n\r\n<ng-template #avatar>\r\n <ec-avatar [user]=\"user\"></ec-avatar>\r\n</ng-template>", styles: [":host{display:flex;height:3rem;align-items:center;width:100%;padding:0 .75rem 0 1rem;background-color:var(--ec-background-color);position:relative;z-index:var(--ec-z-index-navbar)}:host ::ng-deep .app-bar-actions{display:flex;align-items:center;justify-content:flex-end;margin-right:.25rem}section{flex:1 1}.logo-container img{width:2rem;height:2rem}.title-container{text-align:center}.actions-container{display:flex;justify-content:flex-end}#AppBarUserMenu ::ng-deep ec-button{--ec-border-radius: 50%}#AppBarUserMenu ::ng-deep ec-button.active>.ec-button-custom{background-color:transparent;border-color:var(--ec-color-primary-light)}#AppBarUserMenu ::ng-deep ec-button .ec-button-custom:focus{background-color:var(--ec-background-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }, { kind: "component", type: i4.AvatarComponent, selector: "ec-avatar", inputs: ["user"] }] }); }
|
29
|
+
}
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppBarComponent, decorators: [{
|
31
|
+
type: Component,
|
32
|
+
args: [{ selector: 'ec-app-bar', template: "<section class=\"logo-container\">\r\n <img src=\"{{iconPath}}\"\r\n alt=\"EnergyCAP Platform\">\r\n</section>\r\n\r\n<section class=\"title-container\">\r\n <ng-content select=\".app-bar-title\"></ng-content>\r\n</section>\r\n\r\n<section class=\"actions-container\">\r\n <ng-content select=\".app-bar-actions\"></ng-content>\r\n <ec-dropdown id=\"AppBarUserMenu\"\r\n *ngIf=\"userMenuItems.length; else avatar\"\r\n [items]=\"menuItems\"\r\n [buttonCustomTemplate]=\"avatar\"\r\n [showArrow]=\"false\"\r\n [menuWidth]=\"userMenuWidth\"\r\n [menuMinWidth]=\"userMenuMinWidth\"\r\n [tabindex]=\"userMenuTabindex\"></ec-dropdown>\r\n</section>\r\n\r\n<ng-template #avatar>\r\n <ec-avatar [user]=\"user\"></ec-avatar>\r\n</ng-template>", styles: [":host{display:flex;height:3rem;align-items:center;width:100%;padding:0 .75rem 0 1rem;background-color:var(--ec-background-color);position:relative;z-index:var(--ec-z-index-navbar)}:host ::ng-deep .app-bar-actions{display:flex;align-items:center;justify-content:flex-end;margin-right:.25rem}section{flex:1 1}.logo-container img{width:2rem;height:2rem}.title-container{text-align:center}.actions-container{display:flex;justify-content:flex-end}#AppBarUserMenu ::ng-deep ec-button{--ec-border-radius: 50%}#AppBarUserMenu ::ng-deep ec-button.active>.ec-button-custom{background-color:transparent;border-color:var(--ec-color-primary-light)}#AppBarUserMenu ::ng-deep ec-button .ec-button-custom:focus{background-color:var(--ec-background-color)}\n"] }]
|
33
|
+
}], ctorParameters: function () { return [{ type: i1.AvatarService }]; }, propDecorators: { user: [{
|
34
|
+
type: Input
|
35
|
+
}], userMenuItems: [{
|
36
|
+
type: Input
|
37
|
+
}], userMenuWidth: [{
|
38
|
+
type: Input
|
39
|
+
}], userMenuMinWidth: [{
|
40
|
+
type: Input
|
41
|
+
}], userMenuTabindex: [{
|
42
|
+
type: Input
|
43
|
+
}], iconPath: [{
|
44
|
+
type: Input
|
45
|
+
}] } });
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9hcHAtYmFyL2FwcC1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvYXBwLWJhci9hcHAtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFVNUQsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFWdkMsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQUcseUJBQXlCLENBQUM7UUFFOUMsY0FBUyxHQUFlLEVBQUUsQ0FBQTtRQUVsQixhQUFRLEdBQWUsRUFBRSxDQUFDO0lBRWtCLENBQUM7SUFFOUMsV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUMxRzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBdEJVLGVBQWU7bUdBQWYsZUFBZSxtUUNWNUIsNDBCQXVCYzs7NEZEYkQsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZO29HQUtiLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclVzZXIgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclNlcnZpY2UgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1hcHAtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLWJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHVzZXI/OiBBdmF0YXJVc2VyO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSB1c2VyTWVudVdpZHRoID0gMDtcclxuICBASW5wdXQoKSB1c2VyTWVudU1pbldpZHRoID0gMTYwO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51VGFiaW5kZXggPSAwO1xyXG4gIEBJbnB1dCgpIGljb25QYXRoID0gJy9hc3NldHMvaW1hZ2VzL2ljb24uc3ZnJztcclxuICBcclxuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXVxyXG5cclxuICBwcml2YXRlIHVzZXJJdGVtOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXZhdGFyU2VydmljZTogQXZhdGFyU2VydmljZSkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZXIpIHtcclxuICAgICAgdGhpcy51c2VySXRlbVswXSA9IHtsYWJlbDogdGhpcy5hdmF0YXJTZXJ2aWNlLmdldEF2YXRhckxhYmVscyh0aGlzLnVzZXIpLmZ1bGwgfHwgJycsIGRpc3BsYXk6ICdoZWFkaW5nJ307XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJJdGVtID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW51SXRlbXMgPSBbLi4udGhpcy51c2VySXRlbSwgLi4udGhpcy51c2VyTWVudUl0ZW1zXTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxyXG4gIDxpbWcgc3JjPVwie3tpY29uUGF0aH19XCJcclxuICAgICAgIGFsdD1cIkVuZXJneUNBUCBQbGF0Zm9ybVwiPlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5hcHAtYmFyLXRpdGxlXCI+PC9uZy1jb250ZW50PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmFwcC1iYXItYWN0aW9uc1wiPjwvbmctY29udGVudD5cclxuICA8ZWMtZHJvcGRvd24gaWQ9XCJBcHBCYXJVc2VyTWVudVwiXHJcbiAgICAgICAgICAgICAgICpuZ0lmPVwidXNlck1lbnVJdGVtcy5sZW5ndGg7IGVsc2UgYXZhdGFyXCJcclxuICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgIFtidXR0b25DdXN0b21UZW1wbGF0ZV09XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAgICBbc2hvd0Fycm93XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgW21lbnVXaWR0aF09XCJ1c2VyTWVudVdpZHRoXCJcclxuICAgICAgICAgICAgICAgW21lbnVNaW5XaWR0aF09XCJ1c2VyTWVudU1pbldpZHRoXCJcclxuICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInVzZXJNZW51VGFiaW5kZXhcIj48L2VjLWRyb3Bkb3duPlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2YXRhcj5cclxuICA8ZWMtYXZhdGFyIFt1c2VyXT1cInVzZXJcIj48L2VjLWF2YXRhcj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|