@igo2/context 1.14.3 → 1.14.4

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.
Files changed (125) hide show
  1. package/esm2020/igo2-context.mjs +4 -4
  2. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +228 -228
  3. package/esm2020/lib/context-import-export/context-import-export.module.mjs +84 -84
  4. package/esm2020/lib/context-import-export/index.mjs +2 -2
  5. package/esm2020/lib/context-import-export/shared/context-export.errors.mjs +14 -14
  6. package/esm2020/lib/context-import-export/shared/context-export.interface.mjs +1 -1
  7. package/esm2020/lib/context-import-export/shared/context-export.service.mjs +37 -37
  8. package/esm2020/lib/context-import-export/shared/context-export.utils.mjs +23 -23
  9. package/esm2020/lib/context-import-export/shared/context-import.errors.mjs +32 -32
  10. package/esm2020/lib/context-import-export/shared/context-import.service.mjs +78 -78
  11. package/esm2020/lib/context-import-export/shared/context-import.utils.mjs +157 -157
  12. package/esm2020/lib/context-import-export/shared/index.mjs +7 -7
  13. package/esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs +53 -53
  14. package/esm2020/lib/context-manager/context-edit/context-edit.component.mjs +45 -45
  15. package/esm2020/lib/context-manager/context-edit/index.mjs +2 -2
  16. package/esm2020/lib/context-manager/context-form/context-form.component.mjs +146 -146
  17. package/esm2020/lib/context-manager/context-form/index.mjs +1 -1
  18. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +244 -244
  19. package/esm2020/lib/context-manager/context-item/index.mjs +1 -1
  20. package/esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs +259 -259
  21. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +591 -591
  22. package/esm2020/lib/context-manager/context-list/context-list.enum.mjs +6 -6
  23. package/esm2020/lib/context-manager/context-list/index.mjs +2 -2
  24. package/esm2020/lib/context-manager/context-manager.module.mjs +161 -161
  25. package/esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +115 -115
  26. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +305 -305
  27. package/esm2020/lib/context-manager/context-permissions/index.mjs +2 -2
  28. package/esm2020/lib/context-manager/index.mjs +6 -6
  29. package/esm2020/lib/context-manager/shared/context.enum.mjs +12 -12
  30. package/esm2020/lib/context-manager/shared/context.interface.mjs +1 -1
  31. package/esm2020/lib/context-manager/shared/context.service.mjs +628 -628
  32. package/esm2020/lib/context-manager/shared/index.mjs +5 -5
  33. package/esm2020/lib/context-manager/shared/layer-context.directive.mjs +145 -145
  34. package/esm2020/lib/context-manager/shared/map-context.directive.mjs +69 -69
  35. package/esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +71 -71
  36. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +49 -49
  37. package/esm2020/lib/context-map-button/bookmark-button/index.mjs +2 -2
  38. package/esm2020/lib/context-map-button/context-map-button.module.mjs +95 -95
  39. package/esm2020/lib/context-map-button/index.mjs +3 -3
  40. package/esm2020/lib/context-map-button/poi-button/index.mjs +3 -3
  41. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +170 -170
  42. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +49 -49
  43. package/esm2020/lib/context-map-button/poi-button/shared/index.mjs +2 -2
  44. package/esm2020/lib/context-map-button/poi-button/shared/poi.interface.mjs +1 -1
  45. package/esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs +32 -32
  46. package/esm2020/lib/context-map-button/user-button/index.mjs +2 -2
  47. package/esm2020/lib/context-map-button/user-button/user-button.animation.mjs +16 -16
  48. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +103 -103
  49. package/esm2020/lib/context-map-button/user-button/user-dialog.component.mjs +65 -65
  50. package/esm2020/lib/context.module.mjs +44 -44
  51. package/esm2020/lib/share-map/index.mjs +4 -4
  52. package/esm2020/lib/share-map/share-map/share-map-api.component.mjs +180 -180
  53. package/esm2020/lib/share-map/share-map/share-map-url.component.mjs +242 -242
  54. package/esm2020/lib/share-map/share-map/share-map.component.mjs +56 -56
  55. package/esm2020/lib/share-map/share-map.module.mjs +66 -66
  56. package/esm2020/lib/share-map/shared/index.mjs +1 -1
  57. package/esm2020/lib/share-map/shared/share-map.service.mjs +209 -209
  58. package/esm2020/lib/sidenav/index.mjs +1 -1
  59. package/esm2020/lib/sidenav/sidenav.component.mjs +169 -169
  60. package/esm2020/lib/sidenav/sidenav.module.mjs +60 -60
  61. package/esm2020/public_api.mjs +14 -14
  62. package/fesm2015/igo2-context.mjs +5035 -5035
  63. package/fesm2020/igo2-context.mjs +4684 -4684
  64. package/index.d.ts +5 -5
  65. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +45 -45
  66. package/lib/context-import-export/context-import-export.module.d.ts +23 -23
  67. package/lib/context-import-export/index.d.ts +2 -2
  68. package/lib/context-import-export/shared/context-export.errors.d.ts +8 -8
  69. package/lib/context-import-export/shared/context-export.interface.d.ts +5 -5
  70. package/lib/context-import-export/shared/context-export.service.d.ts +10 -10
  71. package/lib/context-import-export/shared/context-export.utils.d.ts +4 -4
  72. package/lib/context-import-export/shared/context-import.errors.d.ts +17 -17
  73. package/lib/context-import-export/shared/context-import.service.d.ts +18 -18
  74. package/lib/context-import-export/shared/context-import.utils.d.ts +17 -17
  75. package/lib/context-import-export/shared/index.d.ts +7 -7
  76. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +21 -21
  77. package/lib/context-manager/context-edit/context-edit.component.d.ts +14 -14
  78. package/lib/context-manager/context-edit/index.d.ts +2 -2
  79. package/lib/context-manager/context-form/context-form.component.d.ts +31 -31
  80. package/lib/context-manager/context-form/index.d.ts +1 -1
  81. package/lib/context-manager/context-item/context-item.component.d.ts +32 -32
  82. package/lib/context-manager/context-item/index.d.ts +1 -1
  83. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +46 -46
  84. package/lib/context-manager/context-list/context-list.component.d.ts +93 -93
  85. package/lib/context-manager/context-list/context-list.enum.d.ts +5 -5
  86. package/lib/context-manager/context-list/index.d.ts +2 -2
  87. package/lib/context-manager/context-manager.module.d.ts +37 -37
  88. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +23 -23
  89. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +40 -40
  90. package/lib/context-manager/context-permissions/index.d.ts +2 -2
  91. package/lib/context-manager/index.d.ts +6 -6
  92. package/lib/context-manager/shared/context.enum.d.ts +10 -10
  93. package/lib/context-manager/shared/context.interface.d.ts +75 -75
  94. package/lib/context-manager/shared/context.service.d.ts +75 -75
  95. package/lib/context-manager/shared/index.d.ts +5 -5
  96. package/lib/context-manager/shared/layer-context.directive.d.ts +27 -27
  97. package/lib/context-manager/shared/map-context.directive.d.ts +19 -19
  98. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +21 -21
  99. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +9 -9
  100. package/lib/context-map-button/bookmark-button/index.d.ts +2 -2
  101. package/lib/context-map-button/context-map-button.module.d.ts +27 -27
  102. package/lib/context-map-button/index.d.ts +3 -3
  103. package/lib/context-map-button/poi-button/index.d.ts +3 -3
  104. package/lib/context-map-button/poi-button/poi-button.component.d.ts +34 -34
  105. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +9 -9
  106. package/lib/context-map-button/poi-button/shared/index.d.ts +2 -2
  107. package/lib/context-map-button/poi-button/shared/poi.interface.d.ts +7 -7
  108. package/lib/context-map-button/poi-button/shared/poi.service.d.ts +16 -16
  109. package/lib/context-map-button/user-button/index.d.ts +2 -2
  110. package/lib/context-map-button/user-button/user-button.animation.d.ts +2 -2
  111. package/lib/context-map-button/user-button/user-button.component.d.ts +25 -25
  112. package/lib/context-map-button/user-button/user-dialog.component.d.ts +15 -15
  113. package/lib/context.module.d.ts +16 -16
  114. package/lib/share-map/index.d.ts +4 -4
  115. package/lib/share-map/share-map/share-map-api.component.d.ts +27 -27
  116. package/lib/share-map/share-map/share-map-url.component.d.ts +26 -26
  117. package/lib/share-map/share-map/share-map.component.d.ts +11 -11
  118. package/lib/share-map/share-map.module.d.ts +21 -21
  119. package/lib/share-map/shared/index.d.ts +1 -1
  120. package/lib/share-map/shared/share-map.service.d.ts +17 -17
  121. package/lib/sidenav/index.d.ts +1 -1
  122. package/lib/sidenav/sidenav.component.d.ts +35 -35
  123. package/lib/sidenav/sidenav.module.d.ts +18 -18
  124. package/package.json +6 -6
  125. package/public_api.d.ts +11 -11
@@ -1,181 +1,181 @@
1
- import { Component, Input } from '@angular/core';
2
- import { uuid, Clipboard } from '@igo2/utils';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@igo2/core";
5
- import * as i2 from "@igo2/auth";
6
- import * as i3 from "../shared/share-map.service";
7
- import * as i4 from "@angular/forms";
8
- import * as i5 from "@angular/common";
9
- import * as i6 from "@angular/material/icon";
10
- import * as i7 from "@angular/material/tooltip";
11
- import * as i8 from "@angular/material/form-field";
12
- import * as i9 from "@angular/material/input";
13
- import * as i10 from "@angular/material/button";
14
- import * as i11 from "@ngx-translate/core";
15
- function ShareMapApiComponent_span_10_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "span", 11);
17
- i0.ɵɵtext(1);
18
- i0.ɵɵelementEnd();
19
- } if (rf & 2) {
20
- const ctx_r0 = i0.ɵɵnextContext();
21
- i0.ɵɵadvance(1);
22
- i0.ɵɵtextInterpolate1("", ctx_r0.userId, "-");
23
- } }
24
- function ShareMapApiComponent_button_18_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementStart(0, "button", 12);
26
- i0.ɵɵtext(1);
27
- i0.ɵɵpipe(2, "translate");
28
- i0.ɵɵelementEnd();
29
- } if (rf & 2) {
30
- const ctx_r1 = i0.ɵɵnextContext();
31
- i0.ɵɵproperty("disabled", !ctx_r1.form.valid);
32
- i0.ɵɵadvance(1);
33
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.context.shareMap.button"), " ");
34
- } }
35
- function ShareMapApiComponent_button_19_Template(rf, ctx) { if (rf & 1) {
36
- const _r5 = i0.ɵɵgetCurrentView();
37
- i0.ɵɵelementStart(0, "button", 13);
38
- i0.ɵɵlistener("click", function ShareMapApiComponent_button_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.updateContextShared(ctx_r4.form.value)); });
39
- i0.ɵɵtext(1);
40
- i0.ɵɵpipe(2, "translate");
41
- i0.ɵɵelementEnd();
42
- } if (rf & 2) {
43
- i0.ɵɵadvance(1);
44
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.context.shareMap.refreshBtn"), " ");
45
- } }
46
- function ShareMapApiComponent_div_20_Template(rf, ctx) { if (rf & 1) {
47
- const _r8 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "div", 14)(1, "mat-form-field");
49
- i0.ɵɵelement(2, "textarea", 15, 16);
50
- i0.ɵɵpipe(4, "translate");
51
- i0.ɵɵelementStart(5, "button", 17);
52
- i0.ɵɵlistener("click", function ShareMapApiComponent_div_20_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r8); const _r6 = i0.ɵɵreference(3); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.copyTextToClipboard(_r6)); });
53
- i0.ɵɵpipe(6, "translate");
54
- i0.ɵɵelement(7, "mat-icon", 18);
55
- i0.ɵɵelementEnd()();
56
- i0.ɵɵelement(8, "div");
57
- i0.ɵɵelementEnd();
58
- } if (rf & 2) {
59
- const ctx_r3 = i0.ɵɵnextContext();
60
- i0.ɵɵadvance(2);
61
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(4, 3, "igo.context.shareMap.placeholderLink"))("value", ctx_r3.url);
62
- i0.ɵɵadvance(3);
63
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(6, 5, "igo.context.shareMap.copy"));
64
- } }
65
- export class ShareMapApiComponent {
66
- constructor(languageService, messageService, auth, shareMapService, formBuilder) {
67
- this.languageService = languageService;
68
- this.messageService = messageService;
69
- this.auth = auth;
70
- this.shareMapService = shareMapService;
71
- this.formBuilder = formBuilder;
72
- }
73
- ngOnInit() {
74
- this.auth.authenticate$.subscribe(auth => {
75
- const decodeToken = this.auth.decodeToken();
76
- this.userId = decodeToken.user ? decodeToken.user.id : undefined;
77
- this.buildForm();
78
- });
79
- }
80
- createUrl(values = {}) {
81
- const inputs = Object.assign({}, values);
82
- inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
83
- this.url = this.shareMapService.getUrlWithApi(inputs);
84
- this.shareMapService.createContextShared(this.map, inputs).subscribe(rep => {
85
- this.idContextShared = rep.id;
86
- const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
87
- const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
88
- value: inputs.title
89
- });
90
- this.messageService.success(msg, title);
91
- }, err => {
92
- err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
93
- this.messageService.showError(err);
94
- });
95
- }
96
- updateContextShared(values = {}) {
97
- const inputs = Object.assign({}, values);
98
- inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
99
- this.shareMapService.updateContextShared(this.map, inputs, this.idContextShared).subscribe(rep => {
100
- const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
101
- const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
102
- value: inputs.title
103
- });
104
- this.messageService.success(msg, title);
105
- }, err => {
106
- err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
107
- this.messageService.showError(err);
108
- });
109
- }
110
- copyTextToClipboard(textArea) {
111
- const successful = Clipboard.copy(textArea);
112
- if (successful) {
113
- const translate = this.languageService.translate;
114
- const title = translate.instant('igo.context.shareMap.dialog.copyTitle');
115
- const msg = translate.instant('igo.context.shareMap.dialog.copyMsg');
116
- this.messageService.success(msg, title);
117
- }
118
- }
119
- buildForm() {
120
- this.url = undefined;
121
- const id = uuid();
122
- let title = 'Partage ';
123
- title += this.userId ? `(${this.userId}-${id})` : `(${id})`;
124
- this.form = this.formBuilder.group({
125
- title: [title],
126
- uri: [id]
127
- });
128
- }
129
- }
130
- ShareMapApiComponent.ɵfac = function ShareMapApiComponent_Factory(t) { return new (t || ShareMapApiComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i1.MessageService), i0.ɵɵdirectiveInject(i2.AuthService), i0.ɵɵdirectiveInject(i3.ShareMapService), i0.ɵɵdirectiveInject(i4.UntypedFormBuilder)); };
131
- ShareMapApiComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareMapApiComponent, selectors: [["igo-share-map-api"]], inputs: { map: "map" }, decls: 21, vars: 18, consts: [[1, "igo-form", 3, "formGroup", "ngSubmit"], [1, "igo-input-container"], ["matInput", "", "required", "", "formControlName", "title", 3, "placeholder"], ["id", "uriInput", 1, "igo-input-container"], ["class", "prefix", 4, "ngIf"], [1, "fieldWrapper"], ["matInput", "", "required", "", "formControlName", "uri", 3, "readonly", "placeholder"], [1, "igo-form-button-group"], ["mat-raised-button", "", "type", "submit", 3, "disabled", 4, "ngIf"], ["mat-raised-button", "", "type", "button", 3, "click", 4, "ngIf"], ["class", "igo-input-container linkToShare", 4, "ngIf"], [1, "prefix"], ["mat-raised-button", "", "type", "submit", 3, "disabled"], ["mat-raised-button", "", "type", "button", 3, "click"], [1, "igo-input-container", "linkToShare"], ["matInput", "", "readonly", "", "rows", "3", 1, "textAreaWithButton", 3, "placeholder", "value"], ["textArea", ""], ["mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "content-copy"]], template: function ShareMapApiComponent_Template(rf, ctx) { if (rf & 1) {
132
- i0.ɵɵelementStart(0, "form", 0);
133
- i0.ɵɵlistener("ngSubmit", function ShareMapApiComponent_Template_form_ngSubmit_0_listener() { return ctx.createUrl(ctx.form.value); });
134
- i0.ɵɵelementStart(1, "div", 1)(2, "mat-form-field");
135
- i0.ɵɵelement(3, "input", 2);
136
- i0.ɵɵpipe(4, "translate");
137
- i0.ɵɵelementStart(5, "mat-error");
138
- i0.ɵɵtext(6);
139
- i0.ɵɵpipe(7, "translate");
140
- i0.ɵɵelementEnd()()();
141
- i0.ɵɵelementStart(8, "div", 3)(9, "mat-form-field");
142
- i0.ɵɵtemplate(10, ShareMapApiComponent_span_10_Template, 2, 1, "span", 4);
143
- i0.ɵɵelementStart(11, "span", 5);
144
- i0.ɵɵelement(12, "input", 6);
145
- i0.ɵɵpipe(13, "translate");
146
- i0.ɵɵelementEnd();
147
- i0.ɵɵelementStart(14, "mat-error");
148
- i0.ɵɵtext(15);
149
- i0.ɵɵpipe(16, "translate");
150
- i0.ɵɵelementEnd()()();
151
- i0.ɵɵelementStart(17, "div", 7);
152
- i0.ɵɵtemplate(18, ShareMapApiComponent_button_18_Template, 3, 4, "button", 8);
153
- i0.ɵɵtemplate(19, ShareMapApiComponent_button_19_Template, 3, 3, "button", 9);
154
- i0.ɵɵelementEnd()();
155
- i0.ɵɵtemplate(20, ShareMapApiComponent_div_20_Template, 9, 7, "div", 10);
156
- } if (rf & 2) {
157
- i0.ɵɵproperty("formGroup", ctx.form);
158
- i0.ɵɵadvance(3);
159
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(4, 10, "igo.context.contextManager.form.title"));
160
- i0.ɵɵadvance(3);
161
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 12, "igo.context.contextManager.form.titleRequired"), " ");
162
- i0.ɵɵadvance(4);
163
- i0.ɵɵproperty("ngIf", ctx.userId);
164
- i0.ɵɵadvance(2);
165
- i0.ɵɵproperty("readonly", !ctx.userId)("placeholder", i0.ɵɵpipeBind1(13, 14, "igo.context.contextManager.form.uri"));
166
- i0.ɵɵadvance(3);
167
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 16, "igo.context.contextManager.form.uriRequired"), " ");
168
- i0.ɵɵadvance(3);
169
- i0.ɵɵproperty("ngIf", !ctx.url);
170
- i0.ɵɵadvance(1);
171
- i0.ɵɵproperty("ngIf", ctx.url);
172
- i0.ɵɵadvance(1);
173
- i0.ɵɵproperty("ngIf", ctx.url);
174
- } }, dependencies: [i5.NgIf, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.RequiredValidator, i4.FormGroupDirective, i4.FormControlName, i6.MatIcon, i7.MatTooltip, i8.MatError, i8.MatFormField, i9.MatInput, i10.MatButton, i11.TranslatePipe], styles: ["@charset \"UTF-8\";mat-form-field[_ngcontent-%COMP%]{width:100%}#uriInput[_ngcontent-%COMP%] .fieldWrapper[_ngcontent-%COMP%]{display:block;overflow:hidden}#uriInput[_ngcontent-%COMP%] .prefix[_ngcontent-%COMP%]{float:left}.linkToShare\\a0[_ngcontent-%COMP%] {padding:25px 5px 5px}.linkToShare\\a0[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0[_ngcontent-%COMP%] textarea.textAreaWithButton[_ngcontent-%COMP%]{width:calc(100% - 60px)}.linkToShare\\a0[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{float:right;margin:-10px 0}.igo-form[_ngcontent-%COMP%]{padding:20px 5px 5px}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}"] });
175
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareMapApiComponent, [{
176
- type: Component,
177
- args: [{ selector: 'igo-share-map-api', template: "<form class=\"igo-form\" [formGroup]=\"form\"\n (ngSubmit)=\"createUrl(form.value)\">\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input matInput required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\">\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div id=\"uriInput\" class=\"igo-input-container\">\n <mat-form-field>\n <span *ngIf=\"userId\" class=\"prefix\">{{userId}}-</span>\n <span class=\"fieldWrapper\">\n <input matInput required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\">\n </span>\n <mat-error>\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\">\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\">\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\n </button>\n </div>\n</form>\n\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea #textArea matInput readonly rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"></textarea>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </mat-form-field>\n<div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
178
- }], function () { return [{ type: i1.LanguageService }, { type: i1.MessageService }, { type: i2.AuthService }, { type: i3.ShareMapService }, { type: i4.UntypedFormBuilder }]; }, { map: [{
179
- type: Input
180
- }] }); })();
1
+ import { Component, Input } from '@angular/core';
2
+ import { uuid, Clipboard } from '@igo2/utils';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@igo2/core";
5
+ import * as i2 from "@igo2/auth";
6
+ import * as i3 from "../shared/share-map.service";
7
+ import * as i4 from "@angular/forms";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "@angular/material/icon";
10
+ import * as i7 from "@angular/material/tooltip";
11
+ import * as i8 from "@angular/material/form-field";
12
+ import * as i9 from "@angular/material/input";
13
+ import * as i10 from "@angular/material/button";
14
+ import * as i11 from "@ngx-translate/core";
15
+ function ShareMapApiComponent_span_10_Template(rf, ctx) { if (rf & 1) {
16
+ i0.ɵɵelementStart(0, "span", 11);
17
+ i0.ɵɵtext(1);
18
+ i0.ɵɵelementEnd();
19
+ } if (rf & 2) {
20
+ const ctx_r0 = i0.ɵɵnextContext();
21
+ i0.ɵɵadvance(1);
22
+ i0.ɵɵtextInterpolate1("", ctx_r0.userId, "-");
23
+ } }
24
+ function ShareMapApiComponent_button_18_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelementStart(0, "button", 12);
26
+ i0.ɵɵtext(1);
27
+ i0.ɵɵpipe(2, "translate");
28
+ i0.ɵɵelementEnd();
29
+ } if (rf & 2) {
30
+ const ctx_r1 = i0.ɵɵnextContext();
31
+ i0.ɵɵproperty("disabled", !ctx_r1.form.valid);
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.context.shareMap.button"), " ");
34
+ } }
35
+ function ShareMapApiComponent_button_19_Template(rf, ctx) { if (rf & 1) {
36
+ const _r5 = i0.ɵɵgetCurrentView();
37
+ i0.ɵɵelementStart(0, "button", 13);
38
+ i0.ɵɵlistener("click", function ShareMapApiComponent_button_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.updateContextShared(ctx_r4.form.value)); });
39
+ i0.ɵɵtext(1);
40
+ i0.ɵɵpipe(2, "translate");
41
+ i0.ɵɵelementEnd();
42
+ } if (rf & 2) {
43
+ i0.ɵɵadvance(1);
44
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.context.shareMap.refreshBtn"), " ");
45
+ } }
46
+ function ShareMapApiComponent_div_20_Template(rf, ctx) { if (rf & 1) {
47
+ const _r8 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "div", 14)(1, "mat-form-field");
49
+ i0.ɵɵelement(2, "textarea", 15, 16);
50
+ i0.ɵɵpipe(4, "translate");
51
+ i0.ɵɵelementStart(5, "button", 17);
52
+ i0.ɵɵlistener("click", function ShareMapApiComponent_div_20_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r8); const _r6 = i0.ɵɵreference(3); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.copyTextToClipboard(_r6)); });
53
+ i0.ɵɵpipe(6, "translate");
54
+ i0.ɵɵelement(7, "mat-icon", 18);
55
+ i0.ɵɵelementEnd()();
56
+ i0.ɵɵelement(8, "div");
57
+ i0.ɵɵelementEnd();
58
+ } if (rf & 2) {
59
+ const ctx_r3 = i0.ɵɵnextContext();
60
+ i0.ɵɵadvance(2);
61
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(4, 3, "igo.context.shareMap.placeholderLink"))("value", ctx_r3.url);
62
+ i0.ɵɵadvance(3);
63
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(6, 5, "igo.context.shareMap.copy"));
64
+ } }
65
+ export class ShareMapApiComponent {
66
+ constructor(languageService, messageService, auth, shareMapService, formBuilder) {
67
+ this.languageService = languageService;
68
+ this.messageService = messageService;
69
+ this.auth = auth;
70
+ this.shareMapService = shareMapService;
71
+ this.formBuilder = formBuilder;
72
+ }
73
+ ngOnInit() {
74
+ this.auth.authenticate$.subscribe(auth => {
75
+ const decodeToken = this.auth.decodeToken();
76
+ this.userId = decodeToken.user ? decodeToken.user.id : undefined;
77
+ this.buildForm();
78
+ });
79
+ }
80
+ createUrl(values = {}) {
81
+ const inputs = Object.assign({}, values);
82
+ inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
83
+ this.url = this.shareMapService.getUrlWithApi(inputs);
84
+ this.shareMapService.createContextShared(this.map, inputs).subscribe(rep => {
85
+ this.idContextShared = rep.id;
86
+ const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
87
+ const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
88
+ value: inputs.title
89
+ });
90
+ this.messageService.success(msg, title);
91
+ }, err => {
92
+ err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
93
+ this.messageService.showError(err);
94
+ });
95
+ }
96
+ updateContextShared(values = {}) {
97
+ const inputs = Object.assign({}, values);
98
+ inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
99
+ this.shareMapService.updateContextShared(this.map, inputs, this.idContextShared).subscribe(rep => {
100
+ const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
101
+ const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
102
+ value: inputs.title
103
+ });
104
+ this.messageService.success(msg, title);
105
+ }, err => {
106
+ err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
107
+ this.messageService.showError(err);
108
+ });
109
+ }
110
+ copyTextToClipboard(textArea) {
111
+ const successful = Clipboard.copy(textArea);
112
+ if (successful) {
113
+ const translate = this.languageService.translate;
114
+ const title = translate.instant('igo.context.shareMap.dialog.copyTitle');
115
+ const msg = translate.instant('igo.context.shareMap.dialog.copyMsg');
116
+ this.messageService.success(msg, title);
117
+ }
118
+ }
119
+ buildForm() {
120
+ this.url = undefined;
121
+ const id = uuid();
122
+ let title = 'Partage ';
123
+ title += this.userId ? `(${this.userId}-${id})` : `(${id})`;
124
+ this.form = this.formBuilder.group({
125
+ title: [title],
126
+ uri: [id]
127
+ });
128
+ }
129
+ }
130
+ ShareMapApiComponent.ɵfac = function ShareMapApiComponent_Factory(t) { return new (t || ShareMapApiComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i1.MessageService), i0.ɵɵdirectiveInject(i2.AuthService), i0.ɵɵdirectiveInject(i3.ShareMapService), i0.ɵɵdirectiveInject(i4.UntypedFormBuilder)); };
131
+ ShareMapApiComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareMapApiComponent, selectors: [["igo-share-map-api"]], inputs: { map: "map" }, decls: 21, vars: 18, consts: [[1, "igo-form", 3, "formGroup", "ngSubmit"], [1, "igo-input-container"], ["matInput", "", "required", "", "formControlName", "title", 3, "placeholder"], ["id", "uriInput", 1, "igo-input-container"], ["class", "prefix", 4, "ngIf"], [1, "fieldWrapper"], ["matInput", "", "required", "", "formControlName", "uri", 3, "readonly", "placeholder"], [1, "igo-form-button-group"], ["mat-raised-button", "", "type", "submit", 3, "disabled", 4, "ngIf"], ["mat-raised-button", "", "type", "button", 3, "click", 4, "ngIf"], ["class", "igo-input-container linkToShare", 4, "ngIf"], [1, "prefix"], ["mat-raised-button", "", "type", "submit", 3, "disabled"], ["mat-raised-button", "", "type", "button", 3, "click"], [1, "igo-input-container", "linkToShare"], ["matInput", "", "readonly", "", "rows", "3", 1, "textAreaWithButton", 3, "placeholder", "value"], ["textArea", ""], ["mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "content-copy"]], template: function ShareMapApiComponent_Template(rf, ctx) { if (rf & 1) {
132
+ i0.ɵɵelementStart(0, "form", 0);
133
+ i0.ɵɵlistener("ngSubmit", function ShareMapApiComponent_Template_form_ngSubmit_0_listener() { return ctx.createUrl(ctx.form.value); });
134
+ i0.ɵɵelementStart(1, "div", 1)(2, "mat-form-field");
135
+ i0.ɵɵelement(3, "input", 2);
136
+ i0.ɵɵpipe(4, "translate");
137
+ i0.ɵɵelementStart(5, "mat-error");
138
+ i0.ɵɵtext(6);
139
+ i0.ɵɵpipe(7, "translate");
140
+ i0.ɵɵelementEnd()()();
141
+ i0.ɵɵelementStart(8, "div", 3)(9, "mat-form-field");
142
+ i0.ɵɵtemplate(10, ShareMapApiComponent_span_10_Template, 2, 1, "span", 4);
143
+ i0.ɵɵelementStart(11, "span", 5);
144
+ i0.ɵɵelement(12, "input", 6);
145
+ i0.ɵɵpipe(13, "translate");
146
+ i0.ɵɵelementEnd();
147
+ i0.ɵɵelementStart(14, "mat-error");
148
+ i0.ɵɵtext(15);
149
+ i0.ɵɵpipe(16, "translate");
150
+ i0.ɵɵelementEnd()()();
151
+ i0.ɵɵelementStart(17, "div", 7);
152
+ i0.ɵɵtemplate(18, ShareMapApiComponent_button_18_Template, 3, 4, "button", 8);
153
+ i0.ɵɵtemplate(19, ShareMapApiComponent_button_19_Template, 3, 3, "button", 9);
154
+ i0.ɵɵelementEnd()();
155
+ i0.ɵɵtemplate(20, ShareMapApiComponent_div_20_Template, 9, 7, "div", 10);
156
+ } if (rf & 2) {
157
+ i0.ɵɵproperty("formGroup", ctx.form);
158
+ i0.ɵɵadvance(3);
159
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(4, 10, "igo.context.contextManager.form.title"));
160
+ i0.ɵɵadvance(3);
161
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 12, "igo.context.contextManager.form.titleRequired"), " ");
162
+ i0.ɵɵadvance(4);
163
+ i0.ɵɵproperty("ngIf", ctx.userId);
164
+ i0.ɵɵadvance(2);
165
+ i0.ɵɵproperty("readonly", !ctx.userId)("placeholder", i0.ɵɵpipeBind1(13, 14, "igo.context.contextManager.form.uri"));
166
+ i0.ɵɵadvance(3);
167
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 16, "igo.context.contextManager.form.uriRequired"), " ");
168
+ i0.ɵɵadvance(3);
169
+ i0.ɵɵproperty("ngIf", !ctx.url);
170
+ i0.ɵɵadvance(1);
171
+ i0.ɵɵproperty("ngIf", ctx.url);
172
+ i0.ɵɵadvance(1);
173
+ i0.ɵɵproperty("ngIf", ctx.url);
174
+ } }, dependencies: [i5.NgIf, i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.RequiredValidator, i4.FormGroupDirective, i4.FormControlName, i6.MatIcon, i7.MatTooltip, i8.MatError, i8.MatFormField, i9.MatInput, i10.MatButton, i11.TranslatePipe], styles: ["@charset \"UTF-8\";mat-form-field[_ngcontent-%COMP%]{width:100%}#uriInput[_ngcontent-%COMP%] .fieldWrapper[_ngcontent-%COMP%]{display:block;overflow:hidden}#uriInput[_ngcontent-%COMP%] .prefix[_ngcontent-%COMP%]{float:left}.linkToShare\\a0[_ngcontent-%COMP%] {padding:25px 5px 5px}.linkToShare\\a0[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0[_ngcontent-%COMP%] textarea.textAreaWithButton[_ngcontent-%COMP%]{width:calc(100% - 60px)}.linkToShare\\a0[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{float:right;margin:-10px 0}.igo-form[_ngcontent-%COMP%]{padding:20px 5px 5px}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}"] });
175
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareMapApiComponent, [{
176
+ type: Component,
177
+ args: [{ selector: 'igo-share-map-api', template: "<form class=\"igo-form\" [formGroup]=\"form\"\n (ngSubmit)=\"createUrl(form.value)\">\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input matInput required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\">\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div id=\"uriInput\" class=\"igo-input-container\">\n <mat-form-field>\n <span *ngIf=\"userId\" class=\"prefix\">{{userId}}-</span>\n <span class=\"fieldWrapper\">\n <input matInput required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\">\n </span>\n <mat-error>\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\">\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\">\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\n </button>\n </div>\n</form>\n\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea #textArea matInput readonly rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"></textarea>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </mat-form-field>\n<div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
178
+ }], function () { return [{ type: i1.LanguageService }, { type: i1.MessageService }, { type: i2.AuthService }, { type: i3.ShareMapService }, { type: i4.UntypedFormBuilder }]; }, { map: [{
179
+ type: Input
180
+ }] }); })();
181
181
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtbWFwLWFwaS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvc2hhcmUtbWFwL3NoYXJlLW1hcC9zaGFyZS1tYXAtYXBpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9zaGFyZS1tYXAvc2hhcmUtbWFwL3NoYXJlLW1hcC1hcGkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDYXhDLGdDQUFvQztJQUFBLFlBQVc7SUFBQSxpQkFBTzs7O0lBQWxCLGVBQVc7SUFBWCw2Q0FBVzs7O0lBY2pELGtDQUcyQjtJQUN6QixZQUNGOztJQUFBLGlCQUFTOzs7SUFGUCw2Q0FBd0I7SUFDeEIsZUFDRjtJQURFLG9GQUNGOzs7O0lBQ0Esa0NBRzRDO0lBQTFDLHFLQUFTLGVBQUEsNkNBQStCLENBQUEsSUFBQztJQUN6QyxZQUNGOztJQUFBLGlCQUFTOztJQURQLGVBQ0Y7SUFERSx3RkFDRjs7OztJQUlKLCtCQUF5RCxxQkFBQTtJQUVyRCxtQ0FHMkI7O0lBQzNCLGtDQU0wQztJQUF4QyxpTUFBUyxlQUFBLCtCQUE2QixDQUFBLElBQUM7O0lBQ3ZDLCtCQUE0QztJQUM5QyxpQkFBUyxFQUFBO0lBRWIsc0JBQUs7SUFoQkwsaUJBQXlEOzs7SUFJbkQsZUFBa0U7SUFBbEUsMEZBQWtFLHFCQUFBO0lBTWxFLGVBQXNEO0lBQXRELDhFQUFzRDs7QUR4QzVELE1BQU0sT0FBTyxvQkFBb0I7SUFTL0IsWUFDVSxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixJQUFpQixFQUNqQixlQUFnQyxF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LEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2QsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7d0ZBNUZVLG9CQUFvQjt1RUFBcEIsb0JBQW9CO1FDZmpDLCtCQUNxQztRQUFuQyxxR0FBWSw2QkFBcUIsSUFBQztRQUVsQyw4QkFBaUMscUJBQUE7UUFFN0IsMkJBRStCOztRQUNoQyxpQ0FBVztRQUNWLFlBQ0Q7O1FBQUEsaUJBQVksRUFBQSxFQUFBO1FBSWYsOEJBQStDLHFCQUFBO1FBRTNDLHlFQUFzRDtRQUN0RCxnQ0FBMkI7UUFDekIsNEJBRzJCOztRQUM1QixpQkFBTztRQUNULGtDQUFXO1FBQ1YsYUFDRDs7UUFBQSxpQkFBWSxFQUFBLEVBQUE7UUFJZiwrQkFBbUM7UUFDakMsNkVBS1M7UUFDVCw2RUFLUztRQUNYLGlCQUFNLEVBQUE7UUFHUix3RUFBeUQ7O1FBN0NsQyxvQ0FBa0I7UUFNNUIsZUFBbUU7UUFBbkUsNEZBQW1FO1FBRzFFLGVBQ0Q7UUFEQyx1R0FDRDtRQU1RLGVBQVk7UUFBWixpQ0FBWTtRQUdaLGVBQW9CO1FBQXBCLHNDQUFvQiw4RUFBQTtRQUszQixlQUNEO1FBREMsc0dBQ0Q7UUFLUSxlQUFVO1FBQVYsK0JBQVU7UUFNVixlQUFTO1FBQVQsOEJBQVM7UUFTaEIsZUFBUztRQUFULDhCQUFTOzt1RkQ5QkYsb0JBQW9CO2NBTGhDLFNBQVM7MkJBQ0UsbUJBQW1CO3dMQU9wQixHQUFHO2tCQUFYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgdXVpZCwgQ2xpcGJvYXJkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaWdvMi9hdXRoJztcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHsgU2hhcmVNYXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NoYXJlLW1hcC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLXNoYXJlLW1hcC1hcGknLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmUtbWFwLWFwaS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NoYXJlLW1hcC1hcGkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZU1hcEFwaUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xuXG4gIHB1YmxpYyB1cmw6IHN0cmluZztcbiAgcHVibGljIHVzZXJJZDogc3RyaW5nO1xuICBwdWJsaWMgaWRDb250ZXh0U2hhcmVkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hhcmVNYXBTZXJ2aWNlOiBTaGFyZU1hcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGguYXV0aGVudGljYXRlJC5zdWJzY3JpYmUoYXV0aCA9PiB7XG4gICAgICBjb25zdCBkZWNvZGVUb2tlbiA9IHRoaXMuYXV0aC5kZWNvZGVUb2tlbigpO1xuICAgICAgdGhpcy51c2VySWQgPSBkZWNvZGVUb2tlbi51c2VyID8gZGVjb2RlVG9rZW4udXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVVcmwodmFsdWVzOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGlucHV0cyA9IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlcyk7XG4gICAgaW5wdXRzLnVyaSA9IHRoaXMudXNlcklkID8gYCR7dGhpcy51c2VySWR9LSR7dmFsdWVzLnVyaX1gIDogdmFsdWVzLnVyaTtcbiAgICB0aGlzLnVybCA9IHRoaXMuc2hhcmVNYXBTZXJ2aWNlLmdldFVybFdpdGhBcGkoaW5wdXRzKTtcbiAgICB0aGlzLnNoYXJlTWFwU2VydmljZS5jcmVhdGVDb250ZXh0U2hhcmVkKHRoaXMubWFwLCBpbnB1dHMpLnN1YnNjcmliZShcbiAgICAgIHJlcCA9PiB7XG4gICAgICAgIHRoaXMuaWRDb250ZXh0U2hhcmVkID0gcmVwLmlkO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuc2F2ZVRpdGxlJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLnNhdmVNc2cnLCB7XG4gICAgICAgICAgdmFsdWU6IGlucHV0cy50aXRsZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1zZywgdGl0bGUpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGVyci5lcnJvci50aXRsZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uY29udGV4dC5zaGFyZU1hcC5lcnJvclRpdGxlJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVDb250ZXh0U2hhcmVkKHZhbHVlczogYW55ID0ge30pIHtcbiAgICBjb25zdCBpbnB1dHMgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZXMpO1xuICAgIGlucHV0cy51cmkgPSB0aGlzLnVzZXJJZCA/IGAke3RoaXMudXNlcklkfS0ke3ZhbHVlcy51cml9YCA6IHZhbHVlcy51cmk7XG4gICAgdGhpcy5zaGFyZU1hcFNlcnZpY2UudXBkYXRlQ29udGV4dFNoYXJlZCh0aGlzLm1hcCwgaW5wdXRzLCB0aGlzLmlkQ29udGV4dFNoYXJlZCkuc3Vic2NyaWJlKFxuICAgICAgcmVwID0+IHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLnNhdmVUaXRsZSdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbXNnID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmRpYWxvZy5zYXZlTXNnJywge1xuICAgICAgICAgIHZhbHVlOiBpbnB1dHMudGl0bGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2Vzcyhtc2csIHRpdGxlKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICBlcnIuZXJyb3IudGl0bGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbnRleHQuc2hhcmVNYXAuZXJyb3JUaXRsZSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zaG93RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgY29weVRleHRUb0NsaXBib2FyZCh0ZXh0QXJlYSkge1xuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBDbGlwYm9hcmQuY29weSh0ZXh0QXJlYSk7XG4gICAgaWYgKHN1Y2Nlc3NmdWwpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uY29udGV4dC5zaGFyZU1hcC5kaWFsb2cuY29weVRpdGxlJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IG1zZyA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uY29udGV4dC5zaGFyZU1hcC5kaWFsb2cuY29weU1zZycpO1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1zZywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnVybCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpZCA9IHV1aWQoKTtcbiAgICBsZXQgdGl0bGUgPSAnUGFydGFnZSAnO1xuICAgIHRpdGxlICs9IHRoaXMudXNlcklkID8gYCgke3RoaXMudXNlcklkfS0ke2lkfSlgIDogYCgke2lkfSlgO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdGl0bGU6IFt0aXRsZV0sXG4gICAgICB1cmk6IFtpZF1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gIChuZ1N1Ym1pdCk9XCJjcmVhdGVVcmwoZm9ybS52YWx1ZSlcIj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCByZXF1aXJlZFxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZm9ybS50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCI+XG4gICAgIDxtYXQtZXJyb3I+XG4gICAgICB7eyAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZm9ybS50aXRsZVJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGlkPVwidXJpSW5wdXRcIiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8c3BhbiAqbmdJZj1cInVzZXJJZFwiIGNsYXNzPVwicHJlZml4XCI+e3t1c2VySWR9fS08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpZWxkV3JhcHBlclwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWRcbiAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIXVzZXJJZFwiXG4gICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5mb3JtLnVyaScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVyaVwiPlxuICAgICAgIDwvc3Bhbj5cbiAgICAgPG1hdC1lcnJvcj5cbiAgICAgIHt7ICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5mb3JtLnVyaVJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiF1cmxcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkXCI+XG4gICAgICB7eyAnaWdvLmNvbnRleHQuc2hhcmVNYXAuYnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJ1cmxcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInVwZGF0ZUNvbnRleHRTaGFyZWQoZm9ybS52YWx1ZSlcIj5cbiAgICAgIHt7ICdpZ28uY29udGV4dC5zaGFyZU1hcC5yZWZyZXNoQnRuJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cblxuPGRpdiAqbmdJZj1cInVybFwiIGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lciBsaW5rVG9TaGFyZVwiPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPHRleHRhcmVhICN0ZXh0QXJlYSBtYXRJbnB1dCByZWFkb25seSByb3dzPVwiM1wiXG4gICAgICBjbGFzcz1cInRleHRBcmVhV2l0aEJ1dHRvblwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5jb250ZXh0LnNoYXJlTWFwLnBsYWNlaG9sZGVyTGluaycgfCB0cmFuc2xhdGVcIlxuICAgICAgW3ZhbHVlXT1cInVybFwiPjwvdGV4dGFyZWE+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmNvbnRleHQuc2hhcmVNYXAuY29weScgfCB0cmFuc2xhdGVcIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHRBcmVhKVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjb250ZW50LWNvcHlcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPGRpdj5cbiJdfQ==