@igo2/context 1.12.0 → 1.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/{esm2015/igo2-context.js → esm2020/igo2-context.mjs} +0 -0
  2. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +229 -0
  3. package/{esm2015/lib/context-import-export/context-import-export.module.js → esm2020/lib/context-import-export/context-import-export.module.mjs} +16 -18
  4. package/{esm2015/lib/context-import-export/index.js → esm2020/lib/context-import-export/index.mjs} +0 -0
  5. package/{esm2015/lib/context-import-export/shared/context-export.errors.js → esm2020/lib/context-import-export/shared/context-export.errors.mjs} +0 -0
  6. package/{esm2015/lib/context-import-export/shared/context-export.interface.js → esm2020/lib/context-import-export/shared/context-export.interface.mjs} +0 -0
  7. package/{esm2015/lib/context-import-export/shared/context-export.service.js → esm2020/lib/context-import-export/shared/context-export.service.mjs} +0 -0
  8. package/{esm2015/lib/context-import-export/shared/context-export.utils.js → esm2020/lib/context-import-export/shared/context-export.utils.mjs} +0 -0
  9. package/{esm2015/lib/context-import-export/shared/context-import.errors.js → esm2020/lib/context-import-export/shared/context-import.errors.mjs} +0 -0
  10. package/{esm2015/lib/context-import-export/shared/context-import.service.js → esm2020/lib/context-import-export/shared/context-import.service.mjs} +0 -0
  11. package/{esm2015/lib/context-import-export/shared/context-import.utils.js → esm2020/lib/context-import-export/shared/context-import.utils.mjs} +0 -0
  12. package/{esm2015/lib/context-import-export/shared/index.js → esm2020/lib/context-import-export/shared/index.mjs} +0 -0
  13. package/{esm2015/lib/context-manager/context-edit/context-edit-binding.directive.js → esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs} +0 -0
  14. package/{esm2015/lib/context-manager/context-edit/context-edit.component.js → esm2020/lib/context-manager/context-edit/context-edit.component.mjs} +4 -7
  15. package/{esm2015/lib/context-manager/context-edit/index.js → esm2020/lib/context-manager/context-edit/index.mjs} +0 -0
  16. package/{esm2015/lib/context-manager/context-form/context-form.component.js → esm2020/lib/context-manager/context-form/context-form.component.mjs} +13 -22
  17. package/{esm2015/lib/context-manager/context-form/index.js → esm2020/lib/context-manager/context-form/index.mjs} +0 -0
  18. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +245 -0
  19. package/{esm2015/lib/context-manager/context-item/index.js → esm2020/lib/context-manager/context-item/index.mjs} +0 -0
  20. package/{esm2015/lib/context-manager/context-list/context-list-binding.directive.js → esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs} +0 -0
  21. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +592 -0
  22. package/{esm2015/lib/context-manager/context-list/context-list.enum.js → esm2020/lib/context-manager/context-list/context-list.enum.mjs} +0 -0
  23. package/{esm2015/lib/context-manager/context-list/index.js → esm2020/lib/context-manager/context-list/index.mjs} +0 -0
  24. package/{esm2015/lib/context-manager/context-manager.module.js → esm2020/lib/context-manager/context-manager.module.mjs} +25 -27
  25. package/{esm2015/lib/context-manager/context-permissions/context-permissions-binding.directive.js → esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs} +0 -0
  26. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +306 -0
  27. package/{esm2015/lib/context-manager/context-permissions/index.js → esm2020/lib/context-manager/context-permissions/index.mjs} +0 -0
  28. package/{esm2015/lib/context-manager/index.js → esm2020/lib/context-manager/index.mjs} +0 -0
  29. package/{esm2015/lib/context-manager/shared/context.enum.js → esm2020/lib/context-manager/shared/context.enum.mjs} +0 -0
  30. package/{esm2015/lib/context-manager/shared/context.interface.js → esm2020/lib/context-manager/shared/context.interface.mjs} +0 -0
  31. package/{esm2015/lib/context-manager/shared/context.service.js → esm2020/lib/context-manager/shared/context.service.mjs} +0 -0
  32. package/{esm2015/lib/context-manager/shared/index.js → esm2020/lib/context-manager/shared/index.mjs} +0 -0
  33. package/{esm2015/lib/context-manager/shared/layer-context.directive.js → esm2020/lib/context-manager/shared/layer-context.directive.mjs} +0 -0
  34. package/{esm2015/lib/context-manager/shared/map-context.directive.js → esm2020/lib/context-manager/shared/map-context.directive.mjs} +0 -0
  35. package/{esm2015/lib/context-map-button/bookmark-button/bookmark-button.component.js → esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs} +8 -14
  36. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +50 -0
  37. package/{esm2015/lib/context-map-button/bookmark-button/index.js → esm2020/lib/context-map-button/bookmark-button/index.mjs} +0 -0
  38. package/{esm2015/lib/context-map-button/context-map-button.module.js → esm2020/lib/context-map-button/context-map-button.module.mjs} +15 -17
  39. package/{esm2015/lib/context-map-button/index.js → esm2020/lib/context-map-button/index.mjs} +0 -0
  40. package/{esm2015/lib/context-map-button/poi-button/index.js → esm2020/lib/context-map-button/poi-button/index.mjs} +0 -0
  41. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +171 -0
  42. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +50 -0
  43. package/{esm2015/lib/context-map-button/poi-button/shared/index.js → esm2020/lib/context-map-button/poi-button/shared/index.mjs} +0 -0
  44. package/{esm2015/lib/context-map-button/poi-button/shared/poi.interface.js → esm2020/lib/context-map-button/poi-button/shared/poi.interface.mjs} +0 -0
  45. package/{esm2015/lib/context-map-button/poi-button/shared/poi.service.js → esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs} +0 -0
  46. package/{esm2015/lib/context-map-button/user-button/index.js → esm2020/lib/context-map-button/user-button/index.mjs} +0 -0
  47. package/{esm2015/lib/context-map-button/user-button/user-button.animation.js → esm2020/lib/context-map-button/user-button/user-button.animation.mjs} +0 -0
  48. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +104 -0
  49. package/{esm2015/lib/context-map-button/user-button/user-dialog.component.js → esm2020/lib/context-map-button/user-button/user-dialog.component.mjs} +6 -12
  50. package/{esm2015/lib/context.module.js → esm2020/lib/context.module.mjs} +2 -2
  51. package/{esm2015/lib/share-map/index.js → esm2020/lib/share-map/index.mjs} +0 -0
  52. package/{esm2015/lib/share-map/share-map/share-map-api.component.js → esm2020/lib/share-map/share-map/share-map-api.component.mjs} +18 -31
  53. package/{esm2015/lib/share-map/share-map/share-map-url.component.js → esm2020/lib/share-map/share-map/share-map-url.component.mjs} +13 -23
  54. package/esm2020/lib/share-map/share-map/share-map.component.mjs +57 -0
  55. package/{esm2015/lib/share-map/share-map.module.js → esm2020/lib/share-map/share-map.module.mjs} +11 -13
  56. package/{esm2015/lib/share-map/shared/index.js → esm2020/lib/share-map/shared/index.mjs} +0 -0
  57. package/esm2020/lib/share-map/shared/share-map.service.mjs +201 -0
  58. package/{esm2015/lib/sidenav/index.js → esm2020/lib/sidenav/index.mjs} +0 -0
  59. package/esm2020/lib/sidenav/sidenav.component.mjs +170 -0
  60. package/{esm2015/lib/sidenav/sidenav.module.js → esm2020/lib/sidenav/sidenav.module.mjs} +11 -13
  61. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  62. package/fesm2015/igo2-context.mjs +5143 -0
  63. package/fesm2015/igo2-context.mjs.map +1 -0
  64. package/{fesm2015/igo2-context.js → fesm2020/igo2-context.mjs} +424 -593
  65. package/fesm2020/igo2-context.mjs.map +1 -0
  66. package/{igo2-context.d.ts → index.d.ts} +0 -0
  67. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +1 -1
  68. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +1 -1
  69. package/lib/context-manager/context-edit/context-edit.component.d.ts +1 -1
  70. package/lib/context-manager/context-form/context-form.component.d.ts +1 -1
  71. package/lib/context-manager/context-item/context-item.component.d.ts +1 -1
  72. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +1 -1
  73. package/lib/context-manager/context-list/context-list.component.d.ts +1 -1
  74. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +1 -1
  75. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +2 -2
  76. package/lib/context-manager/shared/layer-context.directive.d.ts +1 -1
  77. package/lib/context-manager/shared/map-context.directive.d.ts +1 -1
  78. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +1 -1
  79. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +1 -1
  80. package/lib/context-map-button/poi-button/poi-button.component.d.ts +1 -1
  81. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +1 -1
  82. package/lib/context-map-button/user-button/user-button.component.d.ts +1 -1
  83. package/lib/context-map-button/user-button/user-dialog.component.d.ts +1 -1
  84. package/lib/share-map/share-map/share-map-api.component.d.ts +1 -1
  85. package/lib/share-map/share-map/share-map-url.component.d.ts +1 -1
  86. package/lib/share-map/share-map/share-map.component.d.ts +1 -1
  87. package/lib/sidenav/sidenav.component.d.ts +1 -1
  88. package/package.json +31 -18
  89. package/bundles/igo2-context.umd.js +0 -6093
  90. package/bundles/igo2-context.umd.js.map +0 -1
  91. package/esm2015/lib/context-import-export/context-import-export/context-import-export.component.js +0 -257
  92. package/esm2015/lib/context-manager/context-item/context-item.component.js +0 -251
  93. package/esm2015/lib/context-manager/context-list/context-list.component.js +0 -602
  94. package/esm2015/lib/context-manager/context-permissions/context-permissions.component.js +0 -323
  95. package/esm2015/lib/context-map-button/bookmark-button/bookmark-dialog.component.js +0 -59
  96. package/esm2015/lib/context-map-button/poi-button/poi-button.component.js +0 -177
  97. package/esm2015/lib/context-map-button/poi-button/poi-dialog.component.js +0 -59
  98. package/esm2015/lib/context-map-button/user-button/user-button.component.js +0 -112
  99. package/esm2015/lib/share-map/share-map/share-map.component.js +0 -63
  100. package/esm2015/lib/share-map/shared/share-map.service.js +0 -201
  101. package/esm2015/lib/sidenav/sidenav.component.js +0 -183
  102. package/fesm2015/igo2-context.js.map +0 -1
@@ -1,323 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import { TypePermission } from '../shared/context.enum';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- import * as i2 from "@angular/common/http";
7
- import * as i3 from "@igo2/auth";
8
- import * as i4 from "@igo2/core";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "@angular/material/radio";
11
- import * as i7 from "@angular/material/form-field";
12
- import * as i8 from "@angular/material/input";
13
- import * as i9 from "@angular/material/autocomplete";
14
- import * as i10 from "@angular/material/button";
15
- import * as i11 from "@angular/material/core";
16
- import * as i12 from "@igo2/common";
17
- import * as i13 from "@angular/material/list";
18
- import * as i14 from "@angular/material/icon";
19
- import * as i15 from "@angular/material/tooltip";
20
- import * as i16 from "@ngx-translate/core";
21
- function ContextPermissionsComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "div", 3);
23
- i0.ɵɵelementStart(1, "h4");
24
- i0.ɵɵtext(2);
25
- i0.ɵɵpipe(3, "translate");
26
- i0.ɵɵelementEnd();
27
- i0.ɵɵelementStart(4, "p");
28
- i0.ɵɵtext(5);
29
- i0.ɵɵpipe(6, "translate");
30
- i0.ɵɵelementEnd();
31
- i0.ɵɵelementEnd();
32
- } if (rf & 2) {
33
- i0.ɵɵadvance(2);
34
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "igo.context.permission.readOnlyTitle"));
35
- i0.ɵɵadvance(3);
36
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "igo.context.permission.readOnlyMsg"));
37
- } }
38
- function ContextPermissionsComponent_div_0_div_2_mat_radio_button_8_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelementStart(0, "mat-radio-button", 8);
40
- i0.ɵɵtext(1);
41
- i0.ɵɵpipe(2, "translate");
42
- i0.ɵɵelementEnd();
43
- } if (rf & 2) {
44
- i0.ɵɵadvance(1);
45
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.context.permission.scope.public"), " ");
46
- } }
47
- function ContextPermissionsComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
48
- const _r7 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "div", 3);
50
- i0.ɵɵelementStart(1, "mat-radio-group", 4);
51
- i0.ɵɵlistener("ngModelChange", function ContextPermissionsComponent_div_0_div_2_Template_mat_radio_group_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(2); return ctx_r6.context.scope = $event; })("change", function ContextPermissionsComponent_div_0_div_2_Template_mat_radio_group_change_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r8 = i0.ɵɵnextContext(2); return ctx_r8.scopeChanged.emit(ctx_r8.context); });
52
- i0.ɵɵelementStart(2, "mat-radio-button", 5);
53
- i0.ɵɵtext(3);
54
- i0.ɵɵpipe(4, "translate");
55
- i0.ɵɵelementEnd();
56
- i0.ɵɵelementStart(5, "mat-radio-button", 6);
57
- i0.ɵɵtext(6);
58
- i0.ɵɵpipe(7, "translate");
59
- i0.ɵɵelementEnd();
60
- i0.ɵɵtemplate(8, ContextPermissionsComponent_div_0_div_2_mat_radio_button_8_Template, 3, 3, "mat-radio-button", 7);
61
- i0.ɵɵelementEnd();
62
- i0.ɵɵelementEnd();
63
- } if (rf & 2) {
64
- const ctx_r2 = i0.ɵɵnextContext(2);
65
- i0.ɵɵadvance(1);
66
- i0.ɵɵproperty("ngModel", ctx_r2.context.scope);
67
- i0.ɵɵadvance(2);
68
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 4, "igo.context.permission.scope.private"), " ");
69
- i0.ɵɵadvance(3);
70
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 6, "igo.context.permission.scope.shared"), " ");
71
- i0.ɵɵadvance(2);
72
- i0.ɵɵproperty("ngIf", ctx_r2.authService.isAdmin);
73
- } }
74
- function ContextPermissionsComponent_div_0_form_3_mat_option_6_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "mat-option", 20);
76
- i0.ɵɵtext(1);
77
- i0.ɵɵelement(2, "br");
78
- i0.ɵɵelementStart(3, "small", 21);
79
- i0.ɵɵtext(4);
80
- i0.ɵɵelementEnd();
81
- i0.ɵɵelementEnd();
82
- } if (rf & 2) {
83
- const profil_r11 = ctx.$implicit;
84
- i0.ɵɵproperty("value", profil_r11);
85
- i0.ɵɵadvance(1);
86
- i0.ɵɵtextInterpolate1(" ", profil_r11.title, "");
87
- i0.ɵɵadvance(3);
88
- i0.ɵɵtextInterpolate(profil_r11.name);
89
- } }
90
- function ContextPermissionsComponent_div_0_form_3_Template(rf, ctx) { if (rf & 1) {
91
- const _r13 = i0.ɵɵgetCurrentView();
92
- i0.ɵɵelementStart(0, "form", 9);
93
- i0.ɵɵlistener("ngSubmit", function ContextPermissionsComponent_div_0_form_3_Template_form_ngSubmit_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.handleFormSubmit(ctx_r12.form.value); });
94
- i0.ɵɵelementStart(1, "mat-form-field", 10);
95
- i0.ɵɵelement(2, "input", 11);
96
- i0.ɵɵpipe(3, "translate");
97
- i0.ɵɵelementStart(4, "mat-autocomplete", 12, 13);
98
- i0.ɵɵlistener("optionSelected", function ContextPermissionsComponent_div_0_form_3_Template_mat_autocomplete_optionSelected_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(2); return ctx_r14.onProfilSelected($event.option.value); });
99
- i0.ɵɵtemplate(6, ContextPermissionsComponent_div_0_form_3_mat_option_6_Template, 5, 3, "mat-option", 14);
100
- i0.ɵɵelementEnd();
101
- i0.ɵɵelementStart(7, "mat-error");
102
- i0.ɵɵtext(8);
103
- i0.ɵɵpipe(9, "translate");
104
- i0.ɵɵelementEnd();
105
- i0.ɵɵelementEnd();
106
- i0.ɵɵelementStart(10, "mat-radio-group", 15);
107
- i0.ɵɵelementStart(11, "mat-radio-button", 16);
108
- i0.ɵɵtext(12);
109
- i0.ɵɵpipe(13, "translate");
110
- i0.ɵɵelementEnd();
111
- i0.ɵɵelementStart(14, "mat-radio-button", 17);
112
- i0.ɵɵtext(15);
113
- i0.ɵɵpipe(16, "translate");
114
- i0.ɵɵelementEnd();
115
- i0.ɵɵelementEnd();
116
- i0.ɵɵelementStart(17, "div", 18);
117
- i0.ɵɵelementStart(18, "button", 19);
118
- i0.ɵɵtext(19);
119
- i0.ɵɵpipe(20, "translate");
120
- i0.ɵɵelementEnd();
121
- i0.ɵɵelementEnd();
122
- i0.ɵɵelementEnd();
123
- } if (rf & 2) {
124
- const _r9 = i0.ɵɵreference(5);
125
- const ctx_r3 = i0.ɵɵnextContext(2);
126
- i0.ɵɵproperty("formGroup", ctx_r3.form);
127
- i0.ɵɵadvance(2);
128
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 11, "igo.context.permission.user"))("formControl", ctx_r3.formControl)("matAutocomplete", _r9);
129
- i0.ɵɵadvance(2);
130
- i0.ɵɵproperty("displayWith", ctx_r3.displayFn);
131
- i0.ɵɵadvance(2);
132
- i0.ɵɵproperty("ngForOf", ctx_r3.profils);
133
- i0.ɵɵadvance(2);
134
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 13, "igo.context.permission.profilRequired"), " ");
135
- i0.ɵɵadvance(4);
136
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 15, "igo.context.permission.read"), " ");
137
- i0.ɵɵadvance(3);
138
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 17, "igo.context.permission.write"), " ");
139
- i0.ɵɵadvance(3);
140
- i0.ɵɵproperty("disabled", !ctx_r3.form.valid);
141
- i0.ɵɵadvance(1);
142
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 19, "igo.context.permission.addBtn"), " ");
143
- } }
144
- function ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_ng_template_2_button_7_Template(rf, ctx) { if (rf & 1) {
145
- const _r23 = i0.ɵɵgetCurrentView();
146
- i0.ɵɵelementStart(0, "button", 29);
147
- i0.ɵɵlistener("click", function ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_ng_template_2_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const permission_r19 = i0.ɵɵnextContext().$implicit; const ctx_r21 = i0.ɵɵnextContext(5); return ctx_r21.removePermission.emit(permission_r19); });
148
- i0.ɵɵpipe(1, "translate");
149
- i0.ɵɵelement(2, "mat-icon", 30);
150
- i0.ɵɵelementEnd();
151
- } if (rf & 2) {
152
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.context.permission.delete"));
153
- } }
154
- function ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {
155
- i0.ɵɵelementStart(0, "mat-list-item");
156
- i0.ɵɵelement(1, "mat-icon", 25);
157
- i0.ɵɵelementStart(2, "h4", 26);
158
- i0.ɵɵtext(3);
159
- i0.ɵɵelementStart(4, "small", 21);
160
- i0.ɵɵtext(5);
161
- i0.ɵɵelementEnd();
162
- i0.ɵɵelementEnd();
163
- i0.ɵɵelementStart(6, "div", 27);
164
- i0.ɵɵtemplate(7, ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_ng_template_2_button_7_Template, 3, 3, "button", 28);
165
- i0.ɵɵelementEnd();
166
- i0.ɵɵelementEnd();
167
- } if (rf & 2) {
168
- const permission_r19 = ctx.$implicit;
169
- const ctx_r18 = i0.ɵɵnextContext(5);
170
- i0.ɵɵadvance(3);
171
- i0.ɵɵtextInterpolate1("", permission_r19.profilTitle, " ");
172
- i0.ɵɵadvance(2);
173
- i0.ɵɵtextInterpolate(permission_r19.profil);
174
- i0.ɵɵadvance(2);
175
- i0.ɵɵproperty("ngIf", ctx_r18.canWrite || permission_r19.profil === ctx_r18.authService.decodeToken().user.sourceId);
176
- } }
177
- function ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "igo-collapsible", 24);
179
- i0.ɵɵpipe(1, "translate");
180
- i0.ɵɵtemplate(2, ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_ng_template_2_Template, 8, 3, "ng-template", 22);
181
- i0.ɵɵelementEnd();
182
- } if (rf & 2) {
183
- const groupPermissions_r16 = i0.ɵɵnextContext().$implicit;
184
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(1, 2, "igo.context.permission." + groupPermissions_r16.key));
185
- i0.ɵɵadvance(2);
186
- i0.ɵɵproperty("ngForOf", groupPermissions_r16.value);
187
- } }
188
- function ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵtemplate(0, ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_igo_collapsible_0_Template, 3, 4, "igo-collapsible", 23);
190
- } if (rf & 2) {
191
- const groupPermissions_r16 = ctx.$implicit;
192
- i0.ɵɵproperty("ngIf", groupPermissions_r16.value.length);
193
- } }
194
- function ContextPermissionsComponent_div_0_igo_list_4_Template(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵelementStart(0, "igo-list");
196
- i0.ɵɵtemplate(1, ContextPermissionsComponent_div_0_igo_list_4_ng_template_1_Template, 1, 1, "ng-template", 22);
197
- i0.ɵɵpipe(2, "keyvalue");
198
- i0.ɵɵelementEnd();
199
- } if (rf & 2) {
200
- const ctx_r4 = i0.ɵɵnextContext(2);
201
- i0.ɵɵadvance(1);
202
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, ctx_r4.permissions));
203
- } }
204
- function ContextPermissionsComponent_div_0_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "div");
206
- i0.ɵɵtemplate(1, ContextPermissionsComponent_div_0_div_1_Template, 7, 6, "div", 1);
207
- i0.ɵɵtemplate(2, ContextPermissionsComponent_div_0_div_2_Template, 9, 8, "div", 1);
208
- i0.ɵɵtemplate(3, ContextPermissionsComponent_div_0_form_3_Template, 21, 21, "form", 2);
209
- i0.ɵɵtemplate(4, ContextPermissionsComponent_div_0_igo_list_4_Template, 3, 3, "igo-list", 0);
210
- i0.ɵɵelementEnd();
211
- } if (rf & 2) {
212
- const ctx_r0 = i0.ɵɵnextContext();
213
- i0.ɵɵadvance(1);
214
- i0.ɵɵproperty("ngIf", !ctx_r0.canWrite);
215
- i0.ɵɵadvance(1);
216
- i0.ɵɵproperty("ngIf", ctx_r0.canWrite);
217
- i0.ɵɵadvance(1);
218
- i0.ɵɵproperty("ngIf", ctx_r0.context.scope !== "private" && ctx_r0.canWrite);
219
- i0.ɵɵadvance(1);
220
- i0.ɵɵproperty("ngIf", ctx_r0.permissions && ctx_r0.context.scope !== "private");
221
- } }
222
- export class ContextPermissionsComponent {
223
- constructor(formBuilder, cd, http, authService, config) {
224
- this.formBuilder = formBuilder;
225
- this.cd = cd;
226
- this.http = http;
227
- this.authService = authService;
228
- this.config = config;
229
- this._profils = [];
230
- this.formControl = new FormControl();
231
- this.addPermission = new EventEmitter();
232
- this.removePermission = new EventEmitter();
233
- this.scopeChanged = new EventEmitter();
234
- }
235
- get context() {
236
- return this._context;
237
- }
238
- set context(value) {
239
- this._context = value;
240
- this.cd.detectChanges();
241
- }
242
- get permissions() {
243
- return this._permissions;
244
- }
245
- set permissions(value) {
246
- this._permissions = value;
247
- this.cd.detectChanges();
248
- }
249
- get profils() {
250
- return this._profils;
251
- }
252
- set profils(value) {
253
- this._profils = value;
254
- this.cd.detectChanges();
255
- }
256
- get canWrite() {
257
- return this.context.permission === TypePermission[TypePermission.write];
258
- }
259
- ngOnInit() {
260
- this.buildForm();
261
- this.baseUrlProfils = this.config.getConfig('context.url') + '/profils-users?';
262
- this.formValueChanges$$ = this.formControl.valueChanges.subscribe((value) => {
263
- if (value.length) {
264
- this.http.get(this.baseUrlProfils + 'q=' + value).subscribe(profils => {
265
- this.profils = profils;
266
- });
267
- this.profils.filter((profil) => {
268
- const filterNormalized = value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
269
- const profilTitleNormalized = profil.title.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
270
- const profilNameNormalized = profil.name.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
271
- const profilNormalized = profilNameNormalized + profilTitleNormalized;
272
- return profilNormalized.includes(filterNormalized);
273
- });
274
- }
275
- else {
276
- this.profils = [];
277
- }
278
- });
279
- }
280
- displayFn(profil) {
281
- return profil ? profil.title : undefined;
282
- }
283
- handleFormSubmit(value) {
284
- this.addPermission.emit(value);
285
- }
286
- buildForm() {
287
- this.form = this.formBuilder.group({
288
- profil: [],
289
- typePermission: ['read']
290
- });
291
- }
292
- onProfilSelected(value) {
293
- this.form.setValue({
294
- profil: value.name,
295
- typePermission: this.form.value.typePermission
296
- });
297
- }
298
- }
299
- ContextPermissionsComponent.ɵfac = function ContextPermissionsComponent_Factory(t) { return new (t || ContextPermissionsComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i3.AuthService), i0.ɵɵdirectiveInject(i4.ConfigService)); };
300
- ContextPermissionsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextPermissionsComponent, selectors: [["igo-context-permissions"]], inputs: { context: "context", permissions: "permissions" }, outputs: { addPermission: "addPermission", removePermission: "removePermission", scopeChanged: "scopeChanged" }, decls: 1, vars: 1, consts: [[4, "ngIf"], ["class", "scopeForm", 4, "ngIf"], [3, "formGroup", "ngSubmit", 4, "ngIf"], [1, "scopeForm"], [3, "ngModel", "ngModelChange", "change"], ["value", "private"], ["value", "protected"], ["value", "public", 4, "ngIf"], ["value", "public"], [3, "formGroup", "ngSubmit"], [1, "full-width"], ["matInput", "", "required", "", 3, "placeholder", "formControl", "matAutocomplete"], [3, "displayWith", "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], ["formControlName", "typePermission"], ["value", "read"], ["value", "write"], [1, "igo-form-button-group"], ["mat-raised-button", "", "type", "submit", 3, "disabled"], [3, "value"], [1, "mat-typography"], ["ngFor", "", 3, "ngForOf"], [3, "title", 4, "ngIf"], [3, "title"], ["mat-list-avatar", "", "svgIcon", "account-outline"], ["mat-line", ""], ["igoStopPropagation", "", 1, "igo-actions-container"], ["mat-icon-button", "", "matTooltipShowDelay", "500", "color", "warn", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", "matTooltipShowDelay", "500", "color", "warn", 3, "matTooltip", "click"], ["svgIcon", "delete"]], template: function ContextPermissionsComponent_Template(rf, ctx) { if (rf & 1) {
301
- i0.ɵɵtemplate(0, ContextPermissionsComponent_div_0_Template, 5, 4, "div", 0);
302
- } if (rf & 2) {
303
- i0.ɵɵproperty("ngIf", ctx.context);
304
- } }, directives: [i5.NgIf, i6.MatRadioGroup, i1.NgControlStatus, i1.NgModel, i6.MatRadioButton, i1.ɵNgNoValidate, i1.NgControlStatusGroup, i1.FormGroupDirective, i7.MatFormField, i8.MatInput, i1.DefaultValueAccessor, i9.MatAutocompleteTrigger, i1.RequiredValidator, i1.FormControlDirective, i9.MatAutocomplete, i5.NgForOf, i7.MatError, i1.FormControlName, i10.MatButton, i11.MatOption, i12.ListComponent, i12.CollapsibleComponent, i13.MatListItem, i14.MatIcon, i13.MatListAvatarCssMatStyler, i11.MatLine, i12.StopPropagationDirective, i15.MatTooltip], pipes: [i16.TranslatePipe, i12.KeyValuePipe], styles: ["[_nghost-%COMP%]{margin:10px}.full-width[_ngcontent-%COMP%]{width:100%}mat-radio-button[_ngcontent-%COMP%]{padding:14px 14px 14px 0}.scopeForm[_ngcontent-%COMP%], form[_ngcontent-%COMP%]{padding:5px}mat-option[_ngcontent-%COMP%] .mat-option-text{line-height:normal;line-height:initial}"] });
305
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextPermissionsComponent, [{
306
- type: Component,
307
- args: [{
308
- selector: 'igo-context-permissions',
309
- templateUrl: './context-permissions.component.html',
310
- styleUrls: ['./context-permissions.component.scss']
311
- }]
312
- }], function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.HttpClient }, { type: i3.AuthService }, { type: i4.ConfigService }]; }, { context: [{
313
- type: Input
314
- }], permissions: [{
315
- type: Input
316
- }], addPermission: [{
317
- type: Output
318
- }], removePermission: [{
319
- type: Output
320
- }], scopeChanged: [{
321
- type: Output
322
- }] }); })();
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1wZXJtaXNzaW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtcGVybWlzc2lvbnMvY29udGV4dC1wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtcGVybWlzc2lvbnMvY29udGV4dC1wZXJtaXNzaW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ1B0RCw4QkFBeUM7SUFDdkMsMEJBQUk7SUFBQSxZQUF3RDs7SUFBQSxpQkFBSztJQUNqRSx5QkFBRztJQUFBLFlBQXNEOztJQUFBLGlCQUFJO0lBQy9ELGlCQUFNOztJQUZBLGVBQXdEO0lBQXhELGtGQUF3RDtJQUN6RCxlQUFzRDtJQUF0RCxnRkFBc0Q7OztJQVl2RCwyQ0FBNkQ7SUFDM0QsWUFDRjs7SUFBQSxpQkFBbUI7O0lBRGpCLGVBQ0Y7SUFERSw0RkFDRjs7OztJQVhKLDhCQUF3QztJQUN0QywwQ0FDc0Q7SUFEckMsK09BQTJCLDZLQUNsQix3Q0FBMEIsSUFEUjtJQUUxQywyQ0FBa0M7SUFDaEMsWUFDRjs7SUFBQSxpQkFBbUI7SUFDbkIsMkNBQW9DO0lBQ2xDLFlBQ0Y7O0lBQUEsaUJBQW1CO0lBQ25CLGtIQUVtQjtJQUNyQixpQkFBa0I7SUFDcEIsaUJBQU07OztJQVphLGVB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LENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsTUFBTSxFQUFFLEVBQUU7WUFDVixjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDakIsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO1NBQy9DLENBQUMsQ0FBQztJQUNMLENBQUM7O3NHQTlGVSwyQkFBMkI7OEVBQTNCLDJCQUEyQjtRQ3RCeEMsNEVBOEZNOztRQTlGQSxrQ0FBYTs7dUZEc0JOLDJCQUEyQjtjQUx2QyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsV0FBVyxFQUFFLHNDQUFzQztnQkFDbkQsU0FBUyxFQUFFLENBQUMsc0NBQXNDLENBQUM7YUFDcEQ7NktBS0ssT0FBTztrQkFEVixLQUFLO1lBV0YsV0FBVztrQkFEZCxLQUFLO1lBNEJJLGFBQWE7a0JBQXRCLE1BQU07WUFDRyxnQkFBZ0I7a0JBQXpCLE1BQU07WUFDRyxZQUFZO2tCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbnRleHQsXHJcbiAgQ29udGV4dFBlcm1pc3Npb24sXHJcbiAgQ29udGV4dFBlcm1pc3Npb25zTGlzdCxcclxuICBDb250ZXh0UHJvZmlsc1xyXG59IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFR5cGVQZXJtaXNzaW9uIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQuZW51bSc7XHJcblxyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvYXV0aCc7XHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWNvbnRleHQtcGVybWlzc2lvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LXBlcm1pc3Npb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250ZXh0LXBlcm1pc3Npb25zLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRleHRQZXJtaXNzaW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29udGV4dCgpOiBDb250ZXh0IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xyXG4gIH1cclxuICBzZXQgY29udGV4dCh2YWx1ZTogQ29udGV4dCkge1xyXG4gICAgdGhpcy5fY29udGV4dCA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbnRleHQ6IENvbnRleHQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBlcm1pc3Npb25zKCk6IENvbnRleHRQZXJtaXNzaW9uc0xpc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zO1xyXG4gIH1cclxuICBzZXQgcGVybWlzc2lvbnModmFsdWU6IENvbnRleHRQZXJtaXNzaW9uc0xpc3QpIHtcclxuICAgIHRoaXMuX3Blcm1pc3Npb25zID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGVybWlzc2lvbnM6IENvbnRleHRQZXJtaXNzaW9uc0xpc3Q7XHJcblxyXG4gIGdldCBwcm9maWxzKCk6IENvbnRleHRQcm9maWxzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb2ZpbHM7XHJcbiAgfVxyXG4gIHNldCBwcm9maWxzKHZhbHVlOiBDb250ZXh0UHJvZmlsc1tdKSB7XHJcbiAgICB0aGlzLl9wcm9maWxzID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcHJvZmlsczogQ29udGV4dFByb2ZpbHNbXSA9IFtdO1xyXG5cclxuICBnZXQgY2FuV3JpdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnBlcm1pc3Npb24gPT09IFR5cGVQZXJtaXNzaW9uW1R5cGVQZXJtaXNzaW9uLndyaXRlXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmFzZVVybFByb2ZpbHM7XHJcblxyXG4gIHB1YmxpYyBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIGZvcm1WYWx1ZUNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgYWRkUGVybWlzc2lvbjogRXZlbnRFbWl0dGVyPENvbnRleHRQZXJtaXNzaW9uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVtb3ZlUGVybWlzc2lvbjogRXZlbnRFbWl0dGVyPENvbnRleHRQZXJtaXNzaW9uPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2NvcGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29udGV4dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5iYXNlVXJsUHJvZmlscyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnY29udGV4dC51cmwnKSArICcvcHJvZmlscy11c2Vycz8nO1xyXG5cclxuICAgIHRoaXMuZm9ybVZhbHVlQ2hhbmdlcyQkID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLmJhc2VVcmxQcm9maWxzICsgJ3E9JyArIHZhbHVlKS5zdWJzY3JpYmUocHJvZmlscyA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2ZpbHMgPSBwcm9maWxzIGFzIENvbnRleHRQcm9maWxzW107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcm9maWxzLmZpbHRlcigocHJvZmlsKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IHByb2ZpbFRpdGxlTm9ybWFsaXplZCA9IHByb2ZpbC50aXRsZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgcHJvZmlsTmFtZU5vcm1hbGl6ZWQgPSBwcm9maWwubmFtZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgcHJvZmlsTm9ybWFsaXplZCA9IHByb2ZpbE5hbWVOb3JtYWxpemVkICsgcHJvZmlsVGl0bGVOb3JtYWxpemVkO1xyXG4gICAgICAgICAgcmV0dXJuIHByb2ZpbE5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcm9maWxzID0gW107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZuKHByb2ZpbD86IENvbnRleHRQcm9maWxzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBwcm9maWwgPyBwcm9maWwudGl0bGUgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRm9ybVN1Ym1pdCh2YWx1ZSkge1xyXG4gICAgdGhpcy5hZGRQZXJtaXNzaW9uLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgcHJvZmlsOiBbXSxcclxuICAgICAgdHlwZVBlcm1pc3Npb246IFsncmVhZCddXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUHJvZmlsU2VsZWN0ZWQodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7XHJcbiAgICAgIHByb2ZpbDogdmFsdWUubmFtZSxcclxuICAgICAgdHlwZVBlcm1pc3Npb246IHRoaXMuZm9ybS52YWx1ZS50eXBlUGVybWlzc2lvblxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJjb250ZXh0XCI+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhY2FuV3JpdGVcIiBjbGFzcz1cInNjb3BlRm9ybVwiPlxyXG4gICAgPGg0Pnt7ICdpZ28uY29udGV4dC5wZXJtaXNzaW9uLnJlYWRPbmx5VGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oND5cclxuICAgIDxwPnt7ICdpZ28uY29udGV4dC5wZXJtaXNzaW9uLnJlYWRPbmx5TXNnJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImNhbldyaXRlXCIgY2xhc3M9XCJzY29wZUZvcm1cIj5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJjb250ZXh0LnNjb3BlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNjb3BlQ2hhbmdlZC5lbWl0KGNvbnRleHQpXCI+XHJcbiAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwicHJpdmF0ZVwiPlxyXG4gICAgICAgIHt7ICdpZ28uY29udGV4dC5wZXJtaXNzaW9uLnNjb3BlLnByaXZhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJwcm90ZWN0ZWRcIj5cclxuICAgICAgICB7eyAnaWdvLmNvbnRleHQucGVybWlzc2lvbi5zY29wZS5zaGFyZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJhdXRoU2VydmljZS5pc0FkbWluXCIgdmFsdWU9XCJwdWJsaWNcIj5cclxuICAgICAgICB7eyAnaWdvLmNvbnRleHQucGVybWlzc2lvbi5zY29wZS5wdWJsaWMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8Zm9ybSAqbmdJZj1cImNvbnRleHQuc2NvcGUgIT09ICdwcml2YXRlJyAmJiBjYW5Xcml0ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXHJcbiAgICAobmdTdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdChmb3JtLnZhbHVlKVwiPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkXHJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5jb250ZXh0LnBlcm1pc3Npb24udXNlcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiPlxyXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvblByb2ZpbFNlbGVjdGVkKCRldmVudC5vcHRpb24udmFsdWUpXCJcclxuICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcHJvZmlsIG9mIHRoaXMucHJvZmlsc1wiIFt2YWx1ZV09XCJwcm9maWxcIj5cclxuICAgICAgICAgICAgICB7e3Byb2ZpbC50aXRsZX19PGJyPlxyXG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+e3twcm9maWwubmFtZX19PC9zbWFsbD5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICB7eyAnaWdvLmNvbnRleHQucGVybWlzc2lvbi5wcm9maWxSZXF1aXJlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICA8L21hdC1lcnJvcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVBlcm1pc3Npb25cIj5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJyZWFkXCI+XHJcbiAgICAgICAge3sgJ2lnby5jb250ZXh0LnBlcm1pc3Npb24ucmVhZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIndyaXRlXCI+XHJcbiAgICAgICAge3sgJ2lnby5jb250ZXh0LnBlcm1pc3Npb24ud3JpdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPlxyXG4gICAgICAgIHt7ICdpZ28uY29udGV4dC5wZXJtaXNzaW9uLmFkZEJ0bicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9mb3JtPlxyXG5cclxuICA8aWdvLWxpc3QgKm5nSWY9XCJwZXJtaXNzaW9ucyAmJiBjb250ZXh0LnNjb3BlICE9PSAncHJpdmF0ZSdcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtZ3JvdXBQZXJtaXNzaW9ucyBbbmdGb3JPZl09XCJwZXJtaXNzaW9ucyB8IGtleXZhbHVlXCI+XHJcbiAgICAgIDxpZ28tY29sbGFwc2libGVcclxuICAgICAgICAqbmdJZj1cImdyb3VwUGVybWlzc2lvbnMudmFsdWUubGVuZ3RoXCJcclxuICAgICAgICBbdGl0bGVdPVwiJ2lnby5jb250ZXh0LnBlcm1pc3Npb24uJyArIGdyb3VwUGVybWlzc2lvbnMua2V5IHwgdHJhbnNsYXRlXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcGVybWlzc2lvbiBbbmdGb3JPZl09XCJncm91cFBlcm1pc3Npb25zLnZhbHVlXCI+XHJcbiAgICAgICAgICA8bWF0LWxpc3QtaXRlbT5cclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdC1saXN0LWF2YXRhciBzdmdJY29uPVwiYWNjb3VudC1vdXRsaW5lXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPGg0IG1hdC1saW5lPnt7cGVybWlzc2lvbi5wcm9maWxUaXRsZX19IDxzbWFsbCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+e3twZXJtaXNzaW9uLnByb2ZpbH19PC9zbWFsbD48L2g0PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBpZ29TdG9wUHJvcGFnYXRpb25cclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImlnby1hY3Rpb25zLWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhbldyaXRlIHx8IHBlcm1pc3Npb24ucHJvZmlsID09PSBhdXRoU2VydmljZS5kZWNvZGVUb2tlbigpLnVzZXIuc291cmNlSWRcIlxyXG4gICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uY29udGV4dC5wZXJtaXNzaW9uLmRlbGV0ZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVBlcm1pc3Npb24uZW1pdChwZXJtaXNzaW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2lnby1jb2xsYXBzaWJsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pZ28tbGlzdD5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,59 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/material/dialog";
4
- import * as i2 from "@angular/material/form-field";
5
- import * as i3 from "@angular/material/input";
6
- import * as i4 from "@angular/forms";
7
- import * as i5 from "@angular/material/button";
8
- import * as i6 from "@ngx-translate/core";
9
- export class BookmarkDialogComponent {
10
- constructor(dialogRef) {
11
- this.dialogRef = dialogRef;
12
- }
13
- }
14
- BookmarkDialogComponent.ɵfac = function BookmarkDialogComponent_Factory(t) { return new (t || BookmarkDialogComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef)); };
15
- BookmarkDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BookmarkDialogComponent, selectors: [["igo-bookmark-dialog"]], decls: 14, vars: 14, consts: [["mat-dialog-title", "", 1, "mat-typography"], ["mat-dialog-content", "", 1, "mat-typography"], ["matInput", "", "required", "", "autocomplete", "off", "maxlength", "128", 3, "placeholder", "ngModel", "ngModelChange"], ["mat-dialog-actions", ""], ["mat-button", "", "color", "primary", 3, "disabled", "click"], ["mat-button", "", 3, "click"]], template: function BookmarkDialogComponent_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "h1", 0);
17
- i0.ɵɵtext(1);
18
- i0.ɵɵpipe(2, "translate");
19
- i0.ɵɵelementEnd();
20
- i0.ɵɵelementStart(3, "div", 1);
21
- i0.ɵɵelementStart(4, "mat-form-field");
22
- i0.ɵɵelementStart(5, "input", 2);
23
- i0.ɵɵlistener("ngModelChange", function BookmarkDialogComponent_Template_input_ngModelChange_5_listener($event) { return ctx.title = $event; });
24
- i0.ɵɵpipe(6, "translate");
25
- i0.ɵɵelementEnd();
26
- i0.ɵɵelementEnd();
27
- i0.ɵɵelementEnd();
28
- i0.ɵɵelementStart(7, "div", 3);
29
- i0.ɵɵelementStart(8, "button", 4);
30
- i0.ɵɵlistener("click", function BookmarkDialogComponent_Template_button_click_8_listener() { return ctx.dialogRef.close(ctx.title); });
31
- i0.ɵɵtext(9);
32
- i0.ɵɵpipe(10, "translate");
33
- i0.ɵɵelementEnd();
34
- i0.ɵɵelementStart(11, "button", 5);
35
- i0.ɵɵlistener("click", function BookmarkDialogComponent_Template_button_click_11_listener() { return ctx.dialogRef.close(false); });
36
- i0.ɵɵtext(12);
37
- i0.ɵɵpipe(13, "translate");
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementEnd();
40
- } if (rf & 2) {
41
- i0.ɵɵadvance(1);
42
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 6, "igo.context.bookmarkButton.dialog.title"));
43
- i0.ɵɵadvance(4);
44
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(6, 8, "igo.context.bookmarkButton.dialog.placeholder"))("ngModel", ctx.title);
45
- i0.ɵɵadvance(3);
46
- i0.ɵɵproperty("disabled", !ctx.title);
47
- i0.ɵɵadvance(1);
48
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(10, 10, "igo.common.confirmDialog.confirmBtn"), " ");
49
- i0.ɵɵadvance(3);
50
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 12, "igo.common.confirmDialog.cancelBtn"), " ");
51
- } }, directives: [i1.MatDialogTitle, i1.MatDialogContent, i2.MatFormField, i3.MatInput, i4.DefaultValueAccessor, i4.RequiredValidator, i4.MaxLengthValidator, i4.NgControlStatus, i4.NgModel, i1.MatDialogActions, i5.MatButton], pipes: [i6.TranslatePipe], encapsulation: 2 });
52
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BookmarkDialogComponent, [{
53
- type: Component,
54
- args: [{
55
- selector: 'igo-bookmark-dialog',
56
- templateUrl: './bookmark-dialog.component.html'
57
- }]
58
- }], function () { return [{ type: i1.MatDialogRef }]; }, null); })();
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmstZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hcC1idXR0b24vYm9va21hcmstYnV0dG9uL2Jvb2ttYXJrLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL2Jvb2ttYXJrLWJ1dHRvbi9ib29rbWFyay1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFPMUMsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQyxZQUFtQixTQUFnRDtRQUFoRCxjQUFTLEdBQVQsU0FBUyxDQUF1QztJQUFHLENBQUM7OzhGQUg1RCx1QkFBdUI7MEVBQXZCLHVCQUF1QjtRQ1BwQyw2QkFBNEM7UUFBQSxZQUEyRDs7UUFBQSxpQkFBSztRQUM1Ryw4QkFBK0M7UUFDN0Msc0NBQWdCO1FBQ2QsZ0NBR3NCO1FBQXBCLCtJQUFtQjs7UUFIckIsaUJBR3NCO1FBQ3hCLGlCQUFpQjtRQUNuQixpQkFBTTtRQUNOLDhCQUF3QjtRQUN0QixpQ0FFd0M7UUFBakMsb0dBQVMsOEJBQXNCLElBQUM7UUFDckMsWUFDRjs7UUFBQSxpQkFBUztRQUNULGtDQUN5QztRQUFqQyxxR0FBUyxvQkFBZ0IsS0FBSyxDQUFDLElBQUM7UUFDdEMsYUFDRjs7UUFBQSxpQkFBUztRQUNYLGlCQUFNOztRQW5Cc0MsZUFBMkQ7UUFBM0QscUZBQTJEO1FBS2pHLGVBQTJFO1FBQTNFLG1HQUEyRSxzQkFBQTtRQU14RSxlQUFtQjtRQUFuQixxQ0FBbUI7UUFFeEIsZUFDRjtRQURFLDhGQUNGO1FBR0UsZUFDRjtRQURFLDZGQUNGOzt1RkRYVyx1QkFBdUI7Y0FKbkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7YUFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWJvb2ttYXJrLWRpYWxvZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2ttYXJrLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50IHtcclxuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50Pikge31cclxufVxyXG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+e3sgJ2lnby5jb250ZXh0LmJvb2ttYXJrQnV0dG9uLmRpYWxvZy50aXRsZScgfMKgdHJhbnNsYXRlIH19PC9oMT5cclxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCByZXF1aXJlZCBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICBtYXhsZW5ndGg9XCIxMjhcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5jb250ZXh0LmJvb2ttYXJrQnV0dG9uLmRpYWxvZy5wbGFjZWhvbGRlcicgfMKgdHJhbnNsYXRlXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJ0aXRsZVwiPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aXRsZVwiXHJcbiAgICAgICAgIChjbGljayk9XCJkaWFsb2dSZWYuY2xvc2UodGl0bGUpXCI+XHJcbiAgICB7eydpZ28uY29tbW9uLmNvbmZpcm1EaWFsb2cuY29uZmlybUJ0bicgfCB0cmFuc2xhdGV9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvblxyXG4gICAgICAgICAgKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZShmYWxzZSlcIj5cclxuICAgIHt7J2lnby5jb21tb24uY29uZmlybURpYWxvZy5jYW5jZWxCdG4nIHzCoHRyYW5zbGF0ZX19XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,177 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { take } from 'rxjs/operators';
3
- import * as olproj from 'ol/proj';
4
- import * as oleasing from 'ol/easing';
5
- import olPoint from 'ol/geom/Point';
6
- import { PoiDialogComponent } from './poi-dialog.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/material/dialog";
9
- import * as i2 from "@igo2/auth";
10
- import * as i3 from "./shared/poi.service";
11
- import * as i4 from "@igo2/core";
12
- import * as i5 from "@igo2/common";
13
- import * as i6 from "@angular/material/select";
14
- import * as i7 from "@angular/material/core";
15
- import * as i8 from "@angular/material/button";
16
- import * as i9 from "@angular/material/icon";
17
- import * as i10 from "@angular/common";
18
- import * as i11 from "@ngx-translate/core";
19
- function PoiButtonComponent_mat_option_8_Template(rf, ctx) { if (rf & 1) {
20
- const _r3 = i0.ɵɵgetCurrentView();
21
- i0.ɵɵelementStart(0, "mat-option", 6);
22
- i0.ɵɵlistener("click", function PoiButtonComponent_mat_option_8_Template_mat_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r3); const poi_r1 = restoredCtx.$implicit; const ctx_r2 = i0.ɵɵnextContext(); return ctx_r2.zoomOnPoi(poi_r1.id); });
23
- i0.ɵɵelementStart(1, "div", 2);
24
- i0.ɵɵtext(2);
25
- i0.ɵɵelementEnd();
26
- i0.ɵɵelementStart(3, "button", 7);
27
- i0.ɵɵlistener("click", function PoiButtonComponent_mat_option_8_Template_button_click_3_listener() { const restoredCtx = i0.ɵɵrestoreView(_r3); const poi_r1 = restoredCtx.$implicit; const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.deletePoi(poi_r1); });
28
- i0.ɵɵelement(4, "mat-icon", 8);
29
- i0.ɵɵelementEnd();
30
- i0.ɵɵelementEnd();
31
- } if (rf & 2) {
32
- const poi_r1 = ctx.$implicit;
33
- i0.ɵɵproperty("value", poi_r1.id);
34
- i0.ɵɵadvance(2);
35
- i0.ɵɵtextInterpolate(poi_r1.title);
36
- } }
37
- export class PoiButtonComponent {
38
- constructor(dialog, authService, poiService, messageService, languageService, confirmDialogService) {
39
- this.dialog = dialog;
40
- this.authService = authService;
41
- this.poiService = poiService;
42
- this.messageService = messageService;
43
- this.languageService = languageService;
44
- this.confirmDialogService = confirmDialogService;
45
- }
46
- get map() {
47
- return this._map;
48
- }
49
- set map(value) {
50
- this._map = value;
51
- }
52
- get color() {
53
- return this._color;
54
- }
55
- set color(value) {
56
- this._color = value;
57
- }
58
- ngOnInit() {
59
- this.authenticate$$ = this.authService.authenticate$.subscribe(auth => {
60
- if (auth) {
61
- this.getPois();
62
- }
63
- });
64
- }
65
- ngOnDestroy() {
66
- this.authenticate$$.unsubscribe();
67
- }
68
- deletePoi(poi) {
69
- if (poi && poi.id) {
70
- const translate = this.languageService.translate;
71
- this.confirmDialogService
72
- .open(translate.instant('igo.context.poiButton.dialog.confirmDelete'))
73
- .subscribe(confirm => {
74
- if (confirm) {
75
- this.poiService.delete(poi.id).subscribe(() => {
76
- const title = translate.instant('igo.context.poiButton.dialog.deleteTitle');
77
- const message = translate.instant('igo.context.poiButton.dialog.deleteMsg', {
78
- value: poi.title
79
- });
80
- this.messageService.info(message, title);
81
- this.pois = this.pois.filter(p => p.id !== poi.id);
82
- }, err => {
83
- err.error.title = 'DELETE Pois';
84
- this.messageService.showError(err);
85
- });
86
- }
87
- });
88
- }
89
- }
90
- getPois() {
91
- this.poiService.get().pipe(take(1)).subscribe(rep => {
92
- this.pois = rep;
93
- }, err => {
94
- err.error.title = 'GET Pois';
95
- this.messageService.showError(err);
96
- });
97
- }
98
- createPoi() {
99
- const view = this.map.ol.getView();
100
- const proj = view.getProjection().getCode();
101
- const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');
102
- const poi = {
103
- title: '',
104
- x: center.getCoordinates()[0],
105
- y: center.getCoordinates()[1],
106
- zoom: view.getZoom()
107
- };
108
- this.dialog
109
- .open(PoiDialogComponent, { disableClose: false })
110
- .afterClosed()
111
- .subscribe(title => {
112
- if (title) {
113
- poi.title = title;
114
- this.poiService.create(poi).subscribe(newPoi => {
115
- const translate = this.languageService.translate;
116
- const titleD = translate.instant('igo.context.poiButton.dialog.createTitle');
117
- const message = translate.instant('igo.context.poiButton.dialog.createMsg', {
118
- value: poi.title
119
- });
120
- this.messageService.success(message, titleD);
121
- poi.id = newPoi.id;
122
- this.pois.push(poi);
123
- }, err => {
124
- err.error.title = 'POST Pois';
125
- this.messageService.showError(err);
126
- });
127
- }
128
- });
129
- }
130
- zoomOnPoi(id) {
131
- const poi = this.pois.find(p => p.id === id);
132
- const center = olproj.fromLonLat([Number(poi.x), Number(poi.y)], this.map.projection);
133
- this.map.ol.getView().animate({
134
- center,
135
- zoom: poi.zoom,
136
- duration: 500,
137
- easing: oleasing.easeOut
138
- });
139
- }
140
- }
141
- PoiButtonComponent.ɵfac = function PoiButtonComponent_Factory(t) { return new (t || PoiButtonComponent)(i0.ɵɵdirectiveInject(i1.MatDialog), i0.ɵɵdirectiveInject(i2.AuthService), i0.ɵɵdirectiveInject(i3.PoiService), i0.ɵɵdirectiveInject(i4.MessageService), i0.ɵɵdirectiveInject(i4.LanguageService), i0.ɵɵdirectiveInject(i5.ConfirmDialogService)); };
142
- PoiButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoiButtonComponent, selectors: [["igo-poi-button"]], inputs: { map: "map", color: "color" }, decls: 9, vars: 7, consts: [["floatPlaceholder", "never", 3, "placeholder"], [3, "click"], [1, "titlePoi"], ["igoStopPropagation", "", "mat-icon-button", "", "color", "primary", 1, "addPoi", "buttonPoi", 3, "click"], ["svgIcon", "plus-circle"], [3, "value", "click", 4, "ngFor", "ngForOf"], [3, "value", "click"], ["igoStopPropagation", "", "mat-icon-button", "", "color", "warn", 1, "deletePoi", "buttonPoi", 3, "click"], ["svgIcon", "delete"]], template: function PoiButtonComponent_Template(rf, ctx) { if (rf & 1) {
143
- i0.ɵɵelementStart(0, "mat-select", 0);
144
- i0.ɵɵpipe(1, "translate");
145
- i0.ɵɵelementStart(2, "mat-option", 1);
146
- i0.ɵɵlistener("click", function PoiButtonComponent_Template_mat_option_click_2_listener() { return ctx.createPoi(); });
147
- i0.ɵɵelementStart(3, "div", 2);
148
- i0.ɵɵtext(4);
149
- i0.ɵɵpipe(5, "translate");
150
- i0.ɵɵelementEnd();
151
- i0.ɵɵelementStart(6, "button", 3);
152
- i0.ɵɵlistener("click", function PoiButtonComponent_Template_button_click_6_listener() { return ctx.createPoi(); });
153
- i0.ɵɵelement(7, "mat-icon", 4);
154
- i0.ɵɵelementEnd();
155
- i0.ɵɵelementEnd();
156
- i0.ɵɵtemplate(8, PoiButtonComponent_mat_option_8_Template, 5, 2, "mat-option", 5);
157
- i0.ɵɵelementEnd();
158
- } if (rf & 2) {
159
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(1, 3, "igo.context.poiButton.placeholder"));
160
- i0.ɵɵadvance(4);
161
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 5, "igo.context.poiButton.create"));
162
- i0.ɵɵadvance(4);
163
- i0.ɵɵproperty("ngForOf", ctx.pois);
164
- } }, directives: [i6.MatSelect, i7.MatOption, i8.MatButton, i5.StopPropagationDirective, i9.MatIcon, i10.NgForOf], pipes: [i11.TranslatePipe], styles: ["mat-select[_ngcontent-%COMP%]{width:150px;background-color:#fff;height:40px;padding-top:0}mat-select[_ngcontent-%COMP%] .mat-select-trigger{height:40px}mat-select[_ngcontent-%COMP%] .mat-select-value-text, mat-select[_ngcontent-%COMP%] .mat-select-placeholder{padding:5px;top:12px;position:relative}.mat-option[_ngcontent-%COMP%]{text-overflow:inherit}.titlePoi[_ngcontent-%COMP%]{max-width:135px;overflow:hidden;text-overflow:ellipsis;float:left}.buttonPoi[_ngcontent-%COMP%]{float:right;margin:4px -10px 4px 0}.buttonPoi[_ngcontent-%COMP%] .mat-icon{margin:0 8px}"] });
165
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoiButtonComponent, [{
166
- type: Component,
167
- args: [{
168
- selector: 'igo-poi-button',
169
- templateUrl: './poi-button.component.html',
170
- styleUrls: ['./poi-button.component.scss']
171
- }]
172
- }], function () { return [{ type: i1.MatDialog }, { type: i2.AuthService }, { type: i3.PoiService }, { type: i4.MessageService }, { type: i4.LanguageService }, { type: i5.ConfirmDialogService }]; }, { map: [{
173
- type: Input
174
- }], color: [{
175
- type: Input
176
- }] }); })();
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQVNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0lDSjFELHFDQUFrRjtJQUE1QixtUUFBMkI7SUFDL0UsOEJBQXNCO0lBQUEsWUFBZTtJQUFBLGlCQUFNO0lBQzNDLGlDQUcyQjtJQUF6Qiw0UEFBd0I7SUFDeEIsOEJBQXNDO0lBQ3hDLGlCQUFTO0lBQ1gsaUJBQWE7OztJQVJ3QixpQ0FBZ0I7SUFDN0IsZUFBZTtJQUFmLGtDQUFlOztBRFV6QyxNQUFNLE9BQU8sa0JBQWtCO0lBc0I3QixZQUNVLE1BQWlCLEVBQ2pCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzlCLGVBQWdDLEVBQ2hDLG9CQUEwQztRQUwxQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQ2pELENBQUM7SUE1QkosSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQWVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRSxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVE7UUFDaEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUNqRCxJQUFJLENBQUMsb0JBQW9CO2lCQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2lCQUNyRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQ3RDLEdBQUcsRUFBRTt3QkFDSCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QiwwQ0FBMEMsQ0FDM0MsQ0FBQzt3QkFDRixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUMvQix3Q0FBd0MsRUFDeEM7NEJBQ0UsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO3lCQUNqQixDQUNGLENBQUM7d0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3JELENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTt3QkFDSixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQyxDQUFDLENBQ0YsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDM0MsR0FBRyxDQUFDLEVBQUU7WUFDSixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNsQixDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDSixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQ3pELElBQUksRUFDSixXQUFXLENBQ1osQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFRO1lBQ2YsS0FBSyxFQUFFLEVBQUU7WUFDVCxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtTQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU07YUFDUixJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDakQsV0FBVyxFQUFFO2FBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksS0FBSyxFQUFFO2dCQUNULEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQ25DLE1BQU0sQ0FBQyxFQUFFO29CQUNQLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO29CQUNqRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM5QiwwQ0FBMEMsQ0FDM0MsQ0FBQztvQkFDRixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUMvQix3Q0FBd0MsRUFDeEM7d0JBQ0UsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO3FCQUNqQixDQUNGLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUM3QyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixDQUFDLEVBQ0QsR0FBRyxDQUFDLEVBQUU7b0JBQ0osR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO29CQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUNGLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUFFO1FBQ1YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQzlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNwQixDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQzVCLE1BQU07WUFDTixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxRQUFRLEVBQUUsR0FBRztZQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDOztvRkFsSlUsa0JBQWtCO3FFQUFsQixrQkFBa0I7UUN2Qi9CLHFDQUNvQzs7UUFFbEMscUNBQWtDO1FBQXRCLG1HQUFTLGVBQVcsSUFBQztRQUMvQiw4QkFBc0I7UUFBQSxZQUFnRDs7UUFBQSxpQkFBTTtRQUM1RSxpQ0FHd0I7UUFBdEIsK0ZBQVMsZUFBVyxJQUFDO1FBQ3JCLDhCQUEyQztRQUM3QyxpQkFBUztRQUNYLGlCQUFhO1FBQ2IsaUZBUWE7UUFDZixpQkFBYTs7UUFyQkQsdUZBQStEO1FBSWpELGVBQWdEO1FBQWhELDBFQUFnRDtRQVE1QyxlQUFPO1FBQVAsa0NBQU87O3VGRFd4QixrQkFBa0I7Y0FMOUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFdBQVcsRUFBRSw2QkFBNkI7Z0JBQzFDLFNBQVMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2FBQzNDOzZNQUdLLEdBQUc7a0JBRE4sS0FBSztZQVVGLEtBQUs7a0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xyXG5pbXBvcnQgKiBhcyBvbGVhc2luZyBmcm9tICdvbC9lYXNpbmcnO1xyXG5pbXBvcnQgb2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcclxuXHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlLCBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BpZ28yL2F1dGgnO1xyXG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcblxyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2kgfSBmcm9tICcuL3NoYXJlZC9wb2kuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9pRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9wb2ktZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1wb2ktYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcG9pLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcG9pLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb2lCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcclxuICB9XHJcbiAgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBwb2lzOiBQb2lbXTtcclxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGUkJCA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlJC5zdWJzY3JpYmUoYXV0aCA9PiB7XHJcbiAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgdGhpcy5nZXRQb2lzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQb2kocG9pOiBQb2kpIHtcclxuICAgIGlmIChwb2kgJiYgcG9pLmlkKSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcclxuICAgICAgdGhpcy5jb25maXJtRGlhbG9nU2VydmljZVxyXG4gICAgICAgIC5vcGVuKHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uY29udGV4dC5wb2lCdXR0b24uZGlhbG9nLmNvbmZpcm1EZWxldGUnKSlcclxuICAgICAgICAuc3Vic2NyaWJlKGNvbmZpcm0gPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbmZpcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZShwb2kuaWQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5kZWxldGVUaXRsZSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICAgICAgICdpZ28uY29udGV4dC5wb2lCdXR0b24uZGlhbG9nLmRlbGV0ZU1zZycsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcG9pLnRpdGxlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8obWVzc2FnZSwgdGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2lzID0gdGhpcy5wb2lzLmZpbHRlcihwID0+IHAuaWQgIT09IHBvaS5pZCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXJyLmVycm9yLnRpdGxlID0gJ0RFTEVURSBQb2lzJztcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQb2lzKCkge1xyXG4gICAgdGhpcy5wb2lTZXJ2aWNlLmdldCgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICByZXAgPT4ge1xyXG4gICAgICAgIHRoaXMucG9pcyA9IHJlcDtcclxuICAgICAgfSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBlcnIuZXJyb3IudGl0bGUgPSAnR0VUIFBvaXMnO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb2koKSB7XHJcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5tYXAub2wuZ2V0VmlldygpO1xyXG4gICAgY29uc3QgcHJvaiA9IHZpZXcuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKTtcclxuICAgIGNvbnN0IGNlbnRlcjogYW55ID0gbmV3IG9sUG9pbnQodmlldy5nZXRDZW50ZXIoKSkudHJhbnNmb3JtKFxyXG4gICAgICBwcm9qLFxyXG4gICAgICAnRVBTRzo0MzI2J1xyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwb2k6IFBvaSA9IHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICB4OiBjZW50ZXIuZ2V0Q29vcmRpbmF0ZXMoKVswXSxcclxuICAgICAgeTogY2VudGVyLmdldENvb3JkaW5hdGVzKClbMV0sXHJcbiAgICAgIHpvb206IHZpZXcuZ2V0Wm9vbSgpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKFBvaURpYWxvZ0NvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IGZhbHNlIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5zdWJzY3JpYmUodGl0bGUgPT4ge1xyXG4gICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgcG9pLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgICB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlKHBvaSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBuZXdQb2kgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcclxuICAgICAgICAgICAgICBjb25zdCB0aXRsZUQgPSB0cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICdpZ28uY29udGV4dC5wb2lCdXR0b24uZGlhbG9nLmNyZWF0ZVRpdGxlJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5kaWFsb2cuY3JlYXRlTXNnJyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHBvaS50aXRsZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1lc3NhZ2UsIHRpdGxlRCk7XHJcbiAgICAgICAgICAgICAgcG9pLmlkID0gbmV3UG9pLmlkO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9pcy5wdXNoKHBvaSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgZXJyLmVycm9yLnRpdGxlID0gJ1BPU1QgUG9pcyc7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zaG93RXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgem9vbU9uUG9pKGlkKSB7XHJcbiAgICBjb25zdCBwb2kgPSB0aGlzLnBvaXMuZmluZChwID0+IHAuaWQgPT09IGlkKTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBvbHByb2ouZnJvbUxvbkxhdChcclxuICAgICAgW051bWJlcihwb2kueCksIE51bWJlcihwb2kueSldLFxyXG4gICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5hbmltYXRlKHtcclxuICAgICAgY2VudGVyLFxyXG4gICAgICB6b29tOiBwb2kuem9vbSxcclxuICAgICAgZHVyYXRpb246IDUwMCxcclxuICAgICAgZWFzaW5nOiBvbGVhc2luZy5lYXNlT3V0XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidpZ28uY29udGV4dC5wb2lCdXR0b24ucGxhY2Vob2xkZXInIHzCoHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgZmxvYXRQbGFjZWhvbGRlcj1cIm5ldmVyXCI+XHJcblxyXG4gIDxtYXQtb3B0aW9uIChjbGljayk9XCJjcmVhdGVQb2koKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRpdGxlUG9pXCI+e3sgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5jcmVhdGUnIHzCoHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgPGJ1dHRvbiBpZ29TdG9wUHJvcGFnYXRpb24gY2xhc3M9XCJhZGRQb2kgYnV0dG9uUG9pXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIChjbGljayk9XCJjcmVhdGVQb2koKVwiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInBsdXMtY2lyY2xlXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW9wdGlvbj5cclxuICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcG9pIG9mIHBvaXNcIiBbdmFsdWVdPVwicG9pLmlkXCIgKGNsaWNrKT1cInpvb21PblBvaShwb2kuaWQpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVQb2lcIj57eyBwb2kudGl0bGUgfX08L2Rpdj5cclxuICAgIDxidXR0b24gaWdvU3RvcFByb3BhZ2F0aW9uIGNsYXNzPVwiZGVsZXRlUG9pIGJ1dHRvblBvaVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAoY2xpY2spPVwiZGVsZXRlUG9pKHBvaSlcIj5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJkZWxldGVcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9tYXQtb3B0aW9uPlxyXG48L21hdC1zZWxlY3Q+XHJcbiJdfQ==