@igo2/context 1.15.4 → 16.0.0-rc.0

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 (167) hide show
  1. package/context-theme.scss +5 -0
  2. package/{esm2020 → esm2022}/igo2-context.mjs +4 -4
  3. package/esm2022/lib/context-import-export/context-import-export/context-import-export.component.mjs +258 -0
  4. package/esm2022/lib/context-import-export/context-import-export.module.mjs +81 -0
  5. package/{esm2020 → esm2022}/lib/context-import-export/index.mjs +3 -3
  6. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-export.errors.mjs +15 -15
  7. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-export.interface.mjs +2 -2
  8. package/esm2022/lib/context-import-export/shared/context-export.service.mjs +38 -0
  9. package/esm2022/lib/context-import-export/shared/context-export.utils.mjs +15 -0
  10. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-import.errors.mjs +33 -33
  11. package/esm2022/lib/context-import-export/shared/context-import.service.mjs +82 -0
  12. package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +148 -0
  13. package/{esm2020 → esm2022}/lib/context-import-export/shared/index.mjs +8 -8
  14. package/esm2022/lib/context-manager/context-edit/context-edit-binding.directive.mjs +57 -0
  15. package/esm2022/lib/context-manager/context-edit/context-edit.component.mjs +48 -0
  16. package/{esm2020 → esm2022}/lib/context-manager/context-edit/index.mjs +3 -3
  17. package/esm2022/lib/context-manager/context-form/context-form.component.mjs +151 -0
  18. package/{esm2020 → esm2022}/lib/context-manager/context-form/index.mjs +2 -2
  19. package/esm2022/lib/context-manager/context-item/context-item.component.mjs +251 -0
  20. package/{esm2020 → esm2022}/lib/context-manager/context-item/index.mjs +2 -2
  21. package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +259 -0
  22. package/esm2022/lib/context-manager/context-list/context-list.component.mjs +616 -0
  23. package/{esm2020 → esm2022}/lib/context-manager/context-list/context-list.enum.mjs +7 -7
  24. package/{esm2020 → esm2022}/lib/context-manager/context-list/index.mjs +3 -3
  25. package/esm2022/lib/context-manager/context-manager.module.mjs +157 -0
  26. package/esm2022/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +108 -0
  27. package/esm2022/lib/context-manager/context-permissions/context-permissions.component.mjs +331 -0
  28. package/{esm2020 → esm2022}/lib/context-manager/context-permissions/index.mjs +3 -3
  29. package/{esm2020 → esm2022}/lib/context-manager/index.mjs +7 -7
  30. package/{esm2020 → esm2022}/lib/context-manager/shared/context.enum.mjs +13 -13
  31. package/esm2022/lib/context-manager/shared/context.interface.mjs +2 -0
  32. package/esm2022/lib/context-manager/shared/context.service.mjs +662 -0
  33. package/{esm2020 → esm2022}/lib/context-manager/shared/index.mjs +6 -6
  34. package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +172 -0
  35. package/esm2022/lib/context-manager/shared/map-context.directive.mjs +79 -0
  36. package/esm2022/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +74 -0
  37. package/esm2022/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +53 -0
  38. package/{esm2020 → esm2022}/lib/context-map-button/bookmark-button/index.mjs +3 -3
  39. package/esm2022/lib/context-map-button/context-map-button.module.mjs +104 -0
  40. package/{esm2020 → esm2022}/lib/context-map-button/index.mjs +4 -4
  41. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/index.mjs +4 -4
  42. package/esm2022/lib/context-map-button/poi-button/poi-button.component.mjs +179 -0
  43. package/esm2022/lib/context-map-button/poi-button/poi-dialog.component.mjs +53 -0
  44. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/shared/index.mjs +3 -3
  45. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/shared/poi.interface.mjs +2 -2
  46. package/esm2022/lib/context-map-button/poi-button/shared/poi.service.mjs +38 -0
  47. package/{esm2020 → esm2022}/lib/context-map-button/user-button/index.mjs +3 -3
  48. package/{esm2020 → esm2022}/lib/context-map-button/user-button/user-button.animation.mjs +17 -17
  49. package/esm2022/lib/context-map-button/user-button/user-button.component.mjs +112 -0
  50. package/esm2022/lib/context-map-button/user-button/user-dialog.component.mjs +74 -0
  51. package/{esm2020 → esm2022}/lib/context.module.mjs +45 -45
  52. package/{esm2020 → esm2022}/lib/share-map/index.mjs +5 -5
  53. package/esm2022/lib/share-map/share-map/share-map-api.component.mjs +186 -0
  54. package/esm2022/lib/share-map/share-map/share-map-url.component.mjs +251 -0
  55. package/esm2022/lib/share-map/share-map/share-map.component.mjs +60 -0
  56. package/{esm2020 → esm2022}/lib/share-map/share-map.module.mjs +67 -67
  57. package/{esm2020 → esm2022}/lib/share-map/shared/index.mjs +2 -2
  58. package/esm2022/lib/share-map/shared/share-map.service.mjs +221 -0
  59. package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
  60. package/esm2022/lib/sidenav/sidenav.component.mjs +178 -0
  61. package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +61 -61
  62. package/{esm2020 → esm2022}/public_api.mjs +15 -15
  63. package/{fesm2020 → fesm2022}/igo2-context.mjs +4838 -4608
  64. package/fesm2022/igo2-context.mjs.map +1 -0
  65. package/index.d.ts +5 -5
  66. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +46 -44
  67. package/lib/context-import-export/context-import-export.module.d.ts +23 -23
  68. package/lib/context-import-export/index.d.ts +2 -2
  69. package/lib/context-import-export/shared/context-export.errors.d.ts +8 -8
  70. package/lib/context-import-export/shared/context-export.interface.d.ts +5 -5
  71. package/lib/context-import-export/shared/context-export.service.d.ts +10 -10
  72. package/lib/context-import-export/shared/context-export.utils.d.ts +4 -4
  73. package/lib/context-import-export/shared/context-import.errors.d.ts +17 -17
  74. package/lib/context-import-export/shared/context-import.service.d.ts +18 -18
  75. package/lib/context-import-export/shared/context-import.utils.d.ts +15 -17
  76. package/lib/context-import-export/shared/index.d.ts +7 -7
  77. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +20 -20
  78. package/lib/context-manager/context-edit/context-edit.component.d.ts +14 -14
  79. package/lib/context-manager/context-edit/index.d.ts +2 -2
  80. package/lib/context-manager/context-form/context-form.component.d.ts +30 -30
  81. package/lib/context-manager/context-form/index.d.ts +1 -1
  82. package/lib/context-manager/context-item/context-item.component.d.ts +32 -32
  83. package/lib/context-manager/context-item/context-item.theming.scss +21 -0
  84. package/lib/context-manager/context-item/index.d.ts +1 -1
  85. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +46 -46
  86. package/lib/context-manager/context-list/context-list.component.d.ts +93 -93
  87. package/lib/context-manager/context-list/context-list.enum.d.ts +5 -5
  88. package/lib/context-manager/context-list/context-list.theming.scss +23 -0
  89. package/lib/context-manager/context-list/index.d.ts +2 -2
  90. package/lib/context-manager/context-manager.module.d.ts +37 -37
  91. package/lib/context-manager/context-manager.theming.scss +7 -0
  92. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +23 -23
  93. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +40 -40
  94. package/lib/context-manager/context-permissions/index.d.ts +2 -2
  95. package/lib/context-manager/index.d.ts +6 -6
  96. package/lib/context-manager/shared/context.enum.d.ts +10 -10
  97. package/lib/context-manager/shared/context.interface.d.ts +81 -75
  98. package/lib/context-manager/shared/context.service.d.ts +76 -75
  99. package/lib/context-manager/shared/index.d.ts +5 -5
  100. package/lib/context-manager/shared/layer-context.directive.d.ts +28 -28
  101. package/lib/context-manager/shared/map-context.directive.d.ts +19 -19
  102. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +20 -20
  103. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +9 -9
  104. package/lib/context-map-button/bookmark-button/index.d.ts +2 -2
  105. package/lib/context-map-button/context-map-button.module.d.ts +27 -27
  106. package/lib/context-map-button/index.d.ts +3 -3
  107. package/lib/context-map-button/poi-button/index.d.ts +3 -3
  108. package/lib/context-map-button/poi-button/poi-button.component.d.ts +34 -34
  109. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +9 -9
  110. package/lib/context-map-button/poi-button/shared/index.d.ts +2 -2
  111. package/lib/context-map-button/poi-button/shared/poi.interface.d.ts +7 -7
  112. package/lib/context-map-button/poi-button/shared/poi.service.d.ts +16 -16
  113. package/lib/context-map-button/user-button/index.d.ts +2 -2
  114. package/lib/context-map-button/user-button/user-button.animation.d.ts +2 -2
  115. package/lib/context-map-button/user-button/user-button.component.d.ts +25 -25
  116. package/lib/context-map-button/user-button/user-dialog.component.d.ts +15 -15
  117. package/lib/context.module.d.ts +16 -16
  118. package/lib/share-map/index.d.ts +4 -4
  119. package/lib/share-map/share-map/share-map-api.component.d.ts +27 -27
  120. package/lib/share-map/share-map/share-map-url.component.d.ts +26 -26
  121. package/lib/share-map/share-map/share-map.component.d.ts +11 -11
  122. package/lib/share-map/share-map.module.d.ts +21 -21
  123. package/lib/share-map/shared/index.d.ts +1 -1
  124. package/lib/share-map/shared/share-map.service.d.ts +17 -17
  125. package/lib/sidenav/index.d.ts +1 -1
  126. package/lib/sidenav/sidenav.component.d.ts +35 -35
  127. package/lib/sidenav/sidenav.module.d.ts +18 -18
  128. package/locale/en.context.json +199 -0
  129. package/locale/fr.context.json +199 -0
  130. package/package.json +20 -26
  131. package/public_api.d.ts +11 -11
  132. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +0 -228
  133. package/esm2020/lib/context-import-export/context-import-export.module.mjs +0 -85
  134. package/esm2020/lib/context-import-export/shared/context-export.service.mjs +0 -38
  135. package/esm2020/lib/context-import-export/shared/context-export.utils.mjs +0 -15
  136. package/esm2020/lib/context-import-export/shared/context-import.service.mjs +0 -79
  137. package/esm2020/lib/context-import-export/shared/context-import.utils.mjs +0 -133
  138. package/esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs +0 -50
  139. package/esm2020/lib/context-manager/context-edit/context-edit.component.mjs +0 -46
  140. package/esm2020/lib/context-manager/context-form/context-form.component.mjs +0 -143
  141. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +0 -245
  142. package/esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs +0 -240
  143. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +0 -592
  144. package/esm2020/lib/context-manager/context-manager.module.mjs +0 -162
  145. package/esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +0 -99
  146. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +0 -306
  147. package/esm2020/lib/context-manager/shared/context.interface.mjs +0 -2
  148. package/esm2020/lib/context-manager/shared/context.service.mjs +0 -632
  149. package/esm2020/lib/context-manager/shared/layer-context.directive.mjs +0 -162
  150. package/esm2020/lib/context-manager/shared/map-context.directive.mjs +0 -70
  151. package/esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +0 -66
  152. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +0 -50
  153. package/esm2020/lib/context-map-button/context-map-button.module.mjs +0 -96
  154. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +0 -161
  155. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +0 -50
  156. package/esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs +0 -33
  157. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +0 -104
  158. package/esm2020/lib/context-map-button/user-button/user-dialog.component.mjs +0 -66
  159. package/esm2020/lib/share-map/share-map/share-map-api.component.mjs +0 -170
  160. package/esm2020/lib/share-map/share-map/share-map-url.component.mjs +0 -243
  161. package/esm2020/lib/share-map/share-map/share-map.component.mjs +0 -57
  162. package/esm2020/lib/share-map/shared/share-map.service.mjs +0 -210
  163. package/esm2020/lib/sidenav/sidenav.component.mjs +0 -170
  164. package/fesm2015/igo2-context.mjs +0 -5094
  165. package/fesm2015/igo2-context.mjs.map +0 -1
  166. package/fesm2020/igo2-context.mjs.map +0 -1
  167. package/ngcc.config.js +0 -3
@@ -1,228 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { BehaviorSubject } from 'rxjs';
4
- import { take } from 'rxjs/operators';
5
- import { handleFileExportError } from '../shared/context-export.utils';
6
- import { handleFileImportSuccess, handleFileImportError } from '../shared/context-import.utils';
7
- import { handleFileExportSuccess } from '../shared/context-export.utils';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../shared/context-import.service";
10
- import * as i2 from "../shared/context-export.service";
11
- import * as i3 from "@igo2/core";
12
- import * as i4 from "@angular/forms";
13
- import * as i5 from "../../context-manager/shared/context.service";
14
- import * as i6 from "@angular/common";
15
- import * as i7 from "@angular/material/button";
16
- import * as i8 from "@angular/material/button-toggle";
17
- import * as i9 from "@angular/material/divider";
18
- import * as i10 from "@angular/material/form-field";
19
- import * as i11 from "@angular/material/select";
20
- import * as i12 from "@angular/material/core";
21
- import * as i13 from "@angular/material/input";
22
- import * as i14 from "@igo2/common";
23
- import * as i15 from "@ngx-translate/core";
24
- const _c0 = function (a0) { return { size: a0 }; };
25
- function ContextImportExportComponent_div_8_Template(rf, ctx) { if (rf & 1) {
26
- const _r4 = i0.ɵɵgetCurrentView();
27
- i0.ɵɵelementStart(0, "div")(1, "form", 5)(2, "div", 6)(3, "button", 7);
28
- i0.ɵɵlistener("click", function ContextImportExportComponent_div_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const _r2 = i0.ɵɵreference(10); return i0.ɵɵresetView(_r2.click()); });
29
- i0.ɵɵpipe(4, "async");
30
- i0.ɵɵtext(5);
31
- i0.ɵɵpipe(6, "translate");
32
- i0.ɵɵelementEnd();
33
- i0.ɵɵelement(7, "igo-spinner", 8);
34
- i0.ɵɵpipe(8, "async");
35
- i0.ɵɵelementStart(9, "input", 9, 10);
36
- i0.ɵɵlistener("click", function ContextImportExportComponent_div_8_Template_input_click_9_listener() { i0.ɵɵrestoreView(_r4); const _r2 = i0.ɵɵreference(10); return i0.ɵɵresetView(_r2.value = null); })("change", function ContextImportExportComponent_div_8_Template_input_change_9_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.importFiles($event.target.files)); });
37
- i0.ɵɵelementEnd()()();
38
- i0.ɵɵelementStart(11, "section", 11)(12, "h4");
39
- i0.ɵɵtext(13);
40
- i0.ɵɵpipe(14, "translate");
41
- i0.ɵɵelementEnd();
42
- i0.ɵɵelementStart(15, "ul")(16, "li");
43
- i0.ɵɵtext(17);
44
- i0.ɵɵpipe(18, "translate");
45
- i0.ɵɵelementEnd()()()();
46
- } if (rf & 2) {
47
- const ctx_r0 = i0.ɵɵnextContext();
48
- i0.ɵɵadvance(3);
49
- i0.ɵɵproperty("disabled", i0.ɵɵpipeBind1(4, 7, ctx_r0.loading$));
50
- i0.ɵɵadvance(2);
51
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 9, "igo.geo.importExportForm.importButton"), " ");
52
- i0.ɵɵadvance(2);
53
- i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(8, 11, ctx_r0.loading$));
54
- i0.ɵɵadvance(2);
55
- i0.ɵɵstyleProp("display", "none");
56
- i0.ɵɵadvance(4);
57
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 13, "igo.geo.importExportForm.importClarifications"));
58
- i0.ɵɵadvance(4);
59
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(18, 15, "igo.geo.importExportForm.importSizeMax", i0.ɵɵpureFunction1(18, _c0, ctx_r0.fileSizeMb)));
60
- } }
61
- function ContextImportExportComponent_form_9_mat_option_18_Template(rf, ctx) { if (rf & 1) {
62
- i0.ɵɵelementStart(0, "mat-option", 2);
63
- i0.ɵɵtext(1);
64
- i0.ɵɵelementEnd();
65
- } if (rf & 2) {
66
- const layer_r9 = ctx.$implicit;
67
- i0.ɵɵproperty("value", layer_r9);
68
- i0.ɵɵadvance(1);
69
- i0.ɵɵtextInterpolate(layer_r9.title);
70
- } }
71
- function ContextImportExportComponent_form_9_Template(rf, ctx) { if (rf & 1) {
72
- const _r11 = i0.ɵɵgetCurrentView();
73
- i0.ɵɵelementStart(0, "form", 12)(1, "div", 13)(2, "mat-form-field", 14)(3, "mat-label");
74
- i0.ɵɵtext(4);
75
- i0.ɵɵpipe(5, "translate");
76
- i0.ɵɵelementEnd();
77
- i0.ɵɵelement(6, "input", 15);
78
- i0.ɵɵelementEnd()();
79
- i0.ɵɵelementStart(7, "div", 13)(8, "mat-form-field")(9, "mat-label");
80
- i0.ɵɵtext(10);
81
- i0.ɵɵpipe(11, "translate");
82
- i0.ɵɵelementEnd();
83
- i0.ɵɵelementStart(12, "mat-select", 16)(13, "mat-option", 17, 18);
84
- i0.ɵɵlistener("click", function ContextImportExportComponent_form_9_Template_mat_option_click_13_listener() { i0.ɵɵrestoreView(_r11); const _r7 = i0.ɵɵreference(14); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.selectAll(_r7)); });
85
- i0.ɵɵtext(15);
86
- i0.ɵɵpipe(16, "translate");
87
- i0.ɵɵelementEnd();
88
- i0.ɵɵelement(17, "mat-divider");
89
- i0.ɵɵtemplate(18, ContextImportExportComponent_form_9_mat_option_18_Template, 2, 2, "mat-option", 19);
90
- i0.ɵɵelementEnd()()();
91
- i0.ɵɵelementStart(19, "div", 6)(20, "button", 7);
92
- i0.ɵɵlistener("click", function ContextImportExportComponent_form_9_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r11); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.handleExportFormSubmit(ctx_r12.form.value)); });
93
- i0.ɵɵpipe(21, "async");
94
- i0.ɵɵtext(22);
95
- i0.ɵɵpipe(23, "translate");
96
- i0.ɵɵelementEnd();
97
- i0.ɵɵelement(24, "igo-spinner", 8);
98
- i0.ɵɵpipe(25, "async");
99
- i0.ɵɵelementEnd()();
100
- } if (rf & 2) {
101
- const ctx_r1 = i0.ɵɵnextContext();
102
- i0.ɵɵproperty("formGroup", ctx_r1.form);
103
- i0.ɵɵadvance(4);
104
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 9, "igo.context.contextImportExport.export.exportContextName"));
105
- i0.ɵɵadvance(6);
106
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 11, "igo.context.contextImportExport.export.exportPlaceHolder"));
107
- i0.ɵɵadvance(3);
108
- i0.ɵɵproperty("value", 1);
109
- i0.ɵɵadvance(2);
110
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 13, "igo.context.contextImportExport.export.exportSelectAll"), " ");
111
- i0.ɵɵadvance(3);
112
- i0.ɵɵproperty("ngForOf", ctx_r1.userControlledLayerList);
113
- i0.ɵɵadvance(2);
114
- i0.ɵɵproperty("disabled", !ctx_r1.form.valid || i0.ɵɵpipeBind1(21, 15, ctx_r1.loading$));
115
- i0.ɵɵadvance(2);
116
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 17, "igo.geo.importExportForm.exportButton"), " ");
117
- i0.ɵɵadvance(2);
118
- i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(25, 19, ctx_r1.loading$));
119
- } }
120
- export class ContextImportExportComponent {
121
- constructor(contextImportService, contextExportService, messageService, formBuilder, config, contextService) {
122
- this.contextImportService = contextImportService;
123
- this.contextExportService = contextExportService;
124
- this.messageService = messageService;
125
- this.formBuilder = formBuilder;
126
- this.config = config;
127
- this.contextService = contextService;
128
- this.inputProj = 'EPSG:4326';
129
- this.loading$ = new BehaviorSubject(false);
130
- this.forceNaming = false;
131
- this.activeImportExport = 'import';
132
- this.buildForm();
133
- }
134
- ngOnInit() {
135
- const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
136
- this.clientSideFileSizeMax =
137
- (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
138
- this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);
139
- this.layerList = this.contextService.getContextLayers(this.map);
140
- this.userControlledLayerList = this.layerList.filter(layer => layer.showInLayerList);
141
- }
142
- importFiles(files) {
143
- this.loading$.next(true);
144
- for (const file of files) {
145
- this.contextImportService.import(file).pipe(take(1)).subscribe((context) => this.onFileImportSuccess(file, context), (error) => this.onFileImportError(file, error), () => {
146
- this.loading$.next(false);
147
- });
148
- }
149
- }
150
- handleExportFormSubmit(contextOptions) {
151
- this.loading$.next(true);
152
- this.res = this.contextService.getContextFromLayers(this.map, contextOptions.layers, contextOptions.name);
153
- this.res.imported = true;
154
- this.contextExportService.export(this.res).pipe(take(1)).subscribe(() => { }, (error) => this.onFileExportError(error), () => {
155
- this.onFileExportSuccess();
156
- this.loading$.next(false);
157
- });
158
- }
159
- buildForm() {
160
- this.form = this.formBuilder.group({
161
- layers: ['', [Validators.required]],
162
- name: ['', [Validators.required]]
163
- });
164
- }
165
- onFileImportSuccess(file, context) {
166
- handleFileImportSuccess(file, context, this.messageService, this.contextService);
167
- }
168
- onFileImportError(file, error) {
169
- this.loading$.next(false);
170
- handleFileImportError(file, error, this.messageService, this.fileSizeMb);
171
- }
172
- onFileExportError(error) {
173
- this.loading$.next(false);
174
- handleFileExportError(error, this.messageService);
175
- }
176
- onFileExportSuccess() {
177
- handleFileExportSuccess(this.messageService);
178
- }
179
- selectAll(e) {
180
- if (e._selected) {
181
- this.form.controls.layers.setValue(this.userControlledLayerList);
182
- e._selected = true;
183
- }
184
- if (e._selected === false) {
185
- this.form.controls.layers.setValue([]);
186
- }
187
- }
188
- onImportExportChange(event) {
189
- this.activeImportExport = event.value;
190
- }
191
- }
192
- ContextImportExportComponent.ɵfac = function ContextImportExportComponent_Factory(t) { return new (t || ContextImportExportComponent)(i0.ɵɵdirectiveInject(i1.ContextImportService), i0.ɵɵdirectiveInject(i2.ContextExportService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i4.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i5.ContextService)); };
193
- ContextImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextImportExportComponent, selectors: [["igo-context-import-export"]], inputs: { map: "map" }, decls: 10, vars: 11, consts: [[1, "import-export-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [4, "ngIf"], ["class", "igo-form", 3, "formGroup", 4, "ngIf"], [1, "igo-form"], [1, "igo-form-button-group"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "shown"], ["type", "file", 3, "click", "change"], ["fileInput", ""], [1, "mat-typography"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [1, "example-full-width"], ["formControlName", "name", "matInput", "", 3, "value"], ["formControlName", "layers", "multiple", ""], [3, "value", "click"], ["e", ""], [3, "value", 4, "ngFor", "ngForOf"]], template: function ContextImportExportComponent_Template(rf, ctx) { if (rf & 1) {
194
- i0.ɵɵelementStart(0, "div", 0)(1, "mat-button-toggle-group", 1);
195
- i0.ɵɵlistener("change", function ContextImportExportComponent_Template_mat_button_toggle_group_change_1_listener($event) { return ctx.onImportExportChange($event); });
196
- i0.ɵɵelementStart(2, "mat-button-toggle", 2);
197
- i0.ɵɵtext(3);
198
- i0.ɵɵpipe(4, "translate");
199
- i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(5, "mat-button-toggle", 2);
201
- i0.ɵɵtext(6);
202
- i0.ɵɵpipe(7, "translate");
203
- i0.ɵɵelementEnd()()();
204
- i0.ɵɵtemplate(8, ContextImportExportComponent_div_8_Template, 19, 20, "div", 3);
205
- i0.ɵɵtemplate(9, ContextImportExportComponent_form_9_Template, 26, 21, "form", 4);
206
- } if (rf & 2) {
207
- i0.ɵɵadvance(1);
208
- i0.ɵɵproperty("value", ctx.activeImportExport);
209
- i0.ɵɵadvance(1);
210
- i0.ɵɵproperty("value", "import");
211
- i0.ɵɵadvance(1);
212
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 7, "igo.geo.importExportForm.importTabTitle"), " ");
213
- i0.ɵɵadvance(2);
214
- i0.ɵɵproperty("value", "export");
215
- i0.ɵɵadvance(1);
216
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 9, "igo.geo.importExportForm.exportTabTitle"), " ");
217
- i0.ɵɵadvance(2);
218
- i0.ɵɵproperty("ngIf", ctx.activeImportExport === "import");
219
- i0.ɵɵadvance(1);
220
- i0.ɵɵproperty("ngIf", ctx.activeImportExport === "export");
221
- } }, dependencies: [i4.ɵNgNoValidate, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgForm, i4.FormGroupDirective, i4.FormControlName, i6.NgForOf, i6.NgIf, i7.MatButton, i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.MatDivider, i10.MatFormField, i10.MatLabel, i11.MatSelect, i12.MatOption, i13.MatInput, i14.SpinnerComponent, i6.AsyncPipe, i15.TranslatePipe], styles: [".import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}.igo-input-container[_ngcontent-%COMP%]{padding:10px}.igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}h4[_ngcontent-%COMP%]{padding:0 5px}.igo-form[_ngcontent-%COMP%]{padding:15px 5px}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}"] });
222
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextImportExportComponent, [{
223
- type: Component,
224
- args: [{ selector: 'igo-context-import-export', template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeImportExport\"\r\n (change)=\"onImportExportChange($event)\">\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{'igo.geo.importExportForm.importTabTitle' | translate}}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{'igo.geo.importExportForm.exportTabTitle' | translate}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"activeImportExport === 'import'\">\r\n <form class=\"igo-form\">\r\n <div class=\"igo-form-button-group\">\r\n <button mat-raised-button type=\"button\" (click)=\"fileInput.click()\" [disabled]=\"loading$ | async\">\r\n {{'igo.geo.importExportForm.importButton' | translate}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\">\r\n </div>\r\n </form>\r\n <section class=\"mat-typography\">\r\n <h4>{{'igo.geo.importExportForm.importClarifications' | translate}}</h4>\r\n <ul>\r\n <li>{{'igo.geo.importExportForm.importSizeMax' | translate: {size: fileSizeMb} }}</li>\r\n </ul>\r\n </section>\r\n</div>\r\n\r\n\r\n<form class=\"igo-form\" *ngIf=\"activeImportExport === 'export'\" [formGroup]=\"form\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>{{'igo.context.contextImportExport.export.exportContextName' | translate}}</mat-label>\r\n <input formControlName=\"name\" matInput [value]=\"\">\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.context.contextImportExport.export.exportPlaceHolder' | translate}}</mat-label>\r\n <mat-select formControlName=\"layers\" multiple>\r\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\r\n {{'igo.context.contextImportExport.export.exportSelectAll' | translate}}\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option *ngFor=\"let layer of userControlledLayerList\" [value]=\"layer\">{{layer.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\">\r\n {{'igo.geo.importExportForm.exportButton' | translate}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n</form>\r\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"] }]
225
- }], function () { return [{ type: i1.ContextImportService }, { type: i2.ContextExportService }, { type: i3.MessageService }, { type: i4.UntypedFormBuilder }, { type: i3.ConfigService }, { type: i5.ContextService }]; }, { map: [{
226
- type: Input
227
- }] }); })();
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbXBvcnQtZXhwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LWltcG9ydC1leHBvcnQvY29udGV4dC1pbXBvcnQtZXhwb3J0L2NvbnRleHQtaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1pbXBvcnQtZXhwb3J0L2NvbnRleHQtaW1wb3J0LWV4cG9ydC9jb250ZXh0LWltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU10QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUN0QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ0R6RSwyQkFBNkMsY0FBQSxhQUFBLGdCQUFBO0lBR08sc0tBQVMsZUFBQSxXQUFpQixDQUFBLElBQUM7O0lBQy9ELFlBQ0o7O0lBQUEsaUJBQVM7SUFDVCxpQ0FBc0Q7O0lBQ3RELG9DQUtnRDtJQUQ1QyxxS0FBUywyQkFBa0IsSUFBSSxDQUFBLElBQUMsbUtBQ3RCLGVBQUEsdUNBQWdDLENBQUEsSUFEVjtJQUpwQyxpQkFLZ0QsRUFBQSxFQUFB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QUFTLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBSztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxDQUFDOzt3R0FuSFUsNEJBQTRCOytFQUE1Qiw0QkFBNEI7UUN6QnpDLDhCQUFpRCxpQ0FBQTtRQUd2QyxrSUFBVSxnQ0FBNEIsSUFBQztRQUN2Qyw0Q0FBc0M7UUFDcEMsWUFDRjs7UUFBQSxpQkFBb0I7UUFDcEIsNENBQXNDO1FBQ3BDLFlBQ0Y7O1FBQUEsaUJBQW9CLEVBQUEsRUFBQTtRQUk5QiwrRUFxQk07UUFHTixpRkE2Qk87O1FBaEVHLGVBQTRCO1FBQTVCLDhDQUE0QjtRQUVULGVBQWtCO1FBQWxCLGdDQUFrQjtRQUNuQyxlQUNGO1FBREUsZ0dBQ0Y7UUFDbUIsZUFBa0I7UUFBbEIsZ0NBQWtCO1FBQ25DLGVBQ0Y7UUFERSxnR0FDRjtRQUlKLGVBQXFDO1FBQXJDLDBEQUFxQztRQXdCbkIsZUFBcUM7UUFBckMsMERBQXFDOzt1RkRaaEQsNEJBQTRCO2NBTHhDLFNBQVM7MkJBQ0UsMkJBQTJCO2lPQWlCNUIsR0FBRztrQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSwgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBMYXllciwgVmVjdG9yTGF5ZXIgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcblxyXG5pbXBvcnQgeyBoYW5kbGVGaWxlRXhwb3J0RXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvY29udGV4dC1leHBvcnQudXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxyXG4gIGhhbmRsZUZpbGVJbXBvcnRFcnJvclxyXG59IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LWltcG9ydC51dGlscyc7XHJcbmltcG9ydCB7IGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQtZXhwb3J0LnV0aWxzJztcclxuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb250ZXh0LW1hbmFnZXIvc2hhcmVkL2NvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRleHRJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQtaW1wb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0RXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LWV4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1jb250ZXh0LWltcG9ydC1leHBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LWltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnRleHQtaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0SW1wb3J0RXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgbGF5ZXJzOiBWZWN0b3JMYXllcltdO1xyXG4gIHB1YmxpYyBpbnB1dFByb2o6IHN0cmluZyA9ICdFUFNHOjQzMjYnO1xyXG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHB1YmxpYyBmb3JjZU5hbWluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsYXllckxpc3Q6IExheWVyW107XHJcbiAgcHVibGljIHVzZXJDb250cm9sbGVkTGF5ZXJMaXN0OiBMYXllcltdO1xyXG4gIHB1YmxpYyByZXM6IERldGFpbGVkQ29udGV4dDtcclxuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xyXG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XHJcbiAgcHVibGljIGFjdGl2ZUltcG9ydEV4cG9ydDogc3RyaW5nID0gJ2ltcG9ydCc7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29udGV4dEltcG9ydFNlcnZpY2U6IENvbnRleHRJbXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250ZXh0RXhwb3J0U2VydmljZTogQ29udGV4dEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXHJcbiAgICApO1xyXG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxyXG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcclxuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XHJcbiAgICB0aGlzLmxheWVyTGlzdCA9IHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0Q29udGV4dExheWVycyh0aGlzLm1hcCk7XHJcbiAgICB0aGlzLnVzZXJDb250cm9sbGVkTGF5ZXJMaXN0ID0gdGhpcy5sYXllckxpc3QuZmlsdGVyKGxheWVyID0+IGxheWVyLnNob3dJbkxheWVyTGlzdCk7XHJcbiAgfVxyXG5cclxuICBpbXBvcnRGaWxlcyhmaWxlczogRmlsZVtdKSB7XHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgdGhpcy5jb250ZXh0SW1wb3J0U2VydmljZS5pbXBvcnQoZmlsZSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGNvbnRleHQpLFxyXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IpLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChjb250ZXh0T3B0aW9ucykge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5yZXMgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmdldENvbnRleHRGcm9tTGF5ZXJzKFxyXG4gICAgICB0aGlzLm1hcCxcclxuICAgICAgY29udGV4dE9wdGlvbnMubGF5ZXJzLFxyXG4gICAgICBjb250ZXh0T3B0aW9ucy5uYW1lXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXMuaW1wb3J0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jb250ZXh0RXhwb3J0U2VydmljZS5leHBvcnQodGhpcy5yZXMpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAoKSA9PiB7fSxcclxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbGF5ZXJzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBoYW5kbGVGaWxlSW1wb3J0U3VjY2VzcyhcclxuICAgICAgZmlsZSxcclxuICAgICAgY29udGV4dCxcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0RXJyb3IoZmlsZTogRmlsZSwgZXJyb3I6IEVycm9yKSB7XHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgaGFuZGxlRmlsZUltcG9ydEVycm9yKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBlcnJvcixcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcclxuICAgICAgdGhpcy5maWxlU2l6ZU1iXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRFcnJvcihlcnJvcjogRXJyb3IpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xyXG4gICAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3ModGhpcy5tZXNzYWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoZSkge1xyXG4gICAgaWYgKGUuX3NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5sYXllcnMuc2V0VmFsdWUodGhpcy51c2VyQ29udHJvbGxlZExheWVyTGlzdCk7XHJcbiAgICAgIGUuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChlLl9zZWxlY3RlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmxheWVycy5zZXRWYWx1ZShbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEV4cG9ydENoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5hY3RpdmVJbXBvcnRFeHBvcnQgPSBldmVudC52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImltcG9ydC1leHBvcnQtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgICAgICAgIFt2YWx1ZV09XCJhY3RpdmVJbXBvcnRFeHBvcnRcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkltcG9ydEV4cG9ydENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidpbXBvcnQnXCI+XHJcbiAgICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2V4cG9ydCdcIj5cclxuICAgICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiYWN0aXZlSW1wb3J0RXhwb3J0ID09PSAnaW1wb3J0J1wiPlxyXG4gICAgPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmckIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxpZ28tc3Bpbm5lciBbc2hvd25dPVwibG9hZGluZyQgfCBhc3luY1wiPjwvaWdvLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQudmFsdWUgPSBudWxsXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaW1wb3J0RmlsZXMoJGV2ZW50LnRhcmdldC5maWxlcylcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydENsYXJpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9oND5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaXplTWF4JyB8IHRyYW5zbGF0ZToge3NpemU6IGZpbGVTaXplTWJ9IH19PC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgIDwvc2VjdGlvbj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiICpuZ0lmPVwiYWN0aXZlSW1wb3J0RXhwb3J0ID09PSAnZXhwb3J0J1wiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmV4cG9ydC5leHBvcnRDb250ZXh0TmFtZScgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIG1hdElucHV0IFt2YWx1ZV09XCJcIj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmV4cG9ydC5leHBvcnRQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJsYXllcnNcIiBtdWx0aXBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCIgKGNsaWNrKT1cInNlbGVjdEFsbChlKVwiICNlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J2lnby5jb250ZXh0LmNvbnRleHRJbXBvcnRFeHBvcnQuZXhwb3J0LmV4cG9ydFNlbGVjdEFsbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgdXNlckNvbnRyb2xsZWRMYXllckxpc3RcIiBbdmFsdWVdPVwibGF5ZXJcIj57e2xheWVyLnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGZvcm0udmFsdWUpXCI+XHJcbiAgICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b24nIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
@@ -1,85 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
5
- import { MatOptionModule } from '@angular/material/core';
6
- import { MatFormFieldModule } from '@angular/material/form-field';
7
- import { MatDividerModule } from '@angular/material/divider';
8
- import { MatInputModule } from '@angular/material/input';
9
- import { MatSelectModule } from '@angular/material/select';
10
- import { MatCheckboxModule } from '@angular/material/checkbox';
11
- import { MatTabsModule } from '@angular/material/tabs';
12
- import { MatTooltipModule } from '@angular/material/tooltip';
13
- import { IgoLanguageModule } from '@igo2/core';
14
- import { ContextImportExportComponent } from './context-import-export/context-import-export.component';
15
- import { IgoSpinnerModule } from '@igo2/common';
16
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
17
- import * as i0 from "@angular/core";
18
- export class IgoContextImportExportModule {
19
- static forRoot() {
20
- return {
21
- ngModule: IgoContextImportExportModule
22
- };
23
- }
24
- }
25
- IgoContextImportExportModule.ɵfac = function IgoContextImportExportModule_Factory(t) { return new (t || IgoContextImportExportModule)(); };
26
- IgoContextImportExportModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: IgoContextImportExportModule });
27
- IgoContextImportExportModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [FormsModule,
28
- ReactiveFormsModule,
29
- CommonModule,
30
- MatButtonModule,
31
- MatButtonToggleModule,
32
- MatDividerModule,
33
- MatTabsModule,
34
- MatSelectModule,
35
- MatOptionModule,
36
- MatFormFieldModule,
37
- MatInputModule,
38
- MatCheckboxModule,
39
- IgoLanguageModule,
40
- IgoSpinnerModule,
41
- MatTooltipModule] });
42
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IgoContextImportExportModule, [{
43
- type: NgModule,
44
- args: [{
45
- imports: [
46
- FormsModule,
47
- ReactiveFormsModule,
48
- CommonModule,
49
- MatButtonModule,
50
- MatButtonToggleModule,
51
- MatDividerModule,
52
- MatTabsModule,
53
- MatSelectModule,
54
- MatOptionModule,
55
- MatFormFieldModule,
56
- MatInputModule,
57
- MatCheckboxModule,
58
- IgoLanguageModule,
59
- IgoSpinnerModule,
60
- MatTooltipModule,
61
- ],
62
- exports: [
63
- ContextImportExportComponent
64
- ],
65
- declarations: [
66
- ContextImportExportComponent
67
- ]
68
- }]
69
- }], null, null); })();
70
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IgoContextImportExportModule, { declarations: [ContextImportExportComponent], imports: [FormsModule,
71
- ReactiveFormsModule,
72
- CommonModule,
73
- MatButtonModule,
74
- MatButtonToggleModule,
75
- MatDividerModule,
76
- MatTabsModule,
77
- MatSelectModule,
78
- MatOptionModule,
79
- MatFormFieldModule,
80
- MatInputModule,
81
- MatCheckboxModule,
82
- IgoLanguageModule,
83
- IgoSpinnerModule,
84
- MatTooltipModule], exports: [ContextImportExportComponent] }); })();
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbXBvcnQtZXhwb3J0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LWltcG9ydC1leHBvcnQvY29udGV4dC1pbXBvcnQtZXhwb3J0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDL0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUEyQmxFLE1BQU0sT0FBTyw0QkFBNEI7SUFDdkMsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLDRCQUE0QjtTQUN2QyxDQUFDO0lBQ0osQ0FBQzs7d0dBTFUsNEJBQTRCOzhFQUE1Qiw0QkFBNEI7a0ZBdkJyQyxXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLFlBQVk7UUFDWixlQUFlO1FBQ2YscUJBQXFCO1FBQ3JCLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsZUFBZTtRQUNmLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjt1RkFTUCw0QkFBNEI7Y0F6QnhDLFFBQVE7ZUFBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsV0FBVztvQkFDWCxtQkFBbUI7b0JBQ25CLFlBQVk7b0JBQ1osZUFBZTtvQkFDZixxQkFBcUI7b0JBQ3JCLGdCQUFnQjtvQkFDaEIsYUFBYTtvQkFDYixlQUFlO29CQUNmLGVBQWU7b0JBQ2Ysa0JBQWtCO29CQUNsQixjQUFjO29CQUNkLGlCQUFpQjtvQkFDakIsaUJBQWlCO29CQUNqQixnQkFBZ0I7b0JBQ2hCLGdCQUFnQjtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLDRCQUE0QjtpQkFDN0I7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLDRCQUE0QjtpQkFDN0I7YUFDRjs7d0ZBQ1ksNEJBQTRCLG1CQUhyQyw0QkFBNEIsYUFwQjVCLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsWUFBWTtRQUNaLGVBQWU7UUFDZixxQkFBcUI7UUFDckIsZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsZ0JBQWdCLGFBR2hCLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250ZXh0SW1wb3J0RXhwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LWltcG9ydC1leHBvcnQvY29udGV4dC1pbXBvcnQtZXhwb3J0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElnb1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIE1hdFRhYnNNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGUsXHJcbiAgICBJZ29TcGlubmVyTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENvbnRleHRJbXBvcnRFeHBvcnRDb21wb25lbnRcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgQ29udGV4dEltcG9ydEV4cG9ydENvbXBvbmVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElnb0NvbnRleHRJbXBvcnRFeHBvcnRNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8SWdvQ29udGV4dEltcG9ydEV4cG9ydE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IElnb0NvbnRleHRJbXBvcnRFeHBvcnRNb2R1bGVcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,38 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { downloadContent } from '@igo2/utils';
3
- import { ExportNothingToExportError } from './context-export.errors';
4
- import { Observable } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- export class ContextExportService {
7
- export(res) {
8
- return this.exportAsync(res);
9
- }
10
- exportAsync(res) {
11
- const doExport = (observer) => {
12
- const nothingToExport = this.nothingToExport(res);
13
- if (nothingToExport === true) {
14
- observer.error(new ExportNothingToExportError());
15
- return;
16
- }
17
- const contextJSON = JSON.stringify(res);
18
- downloadContent(contextJSON, 'text/json;charset=utf-8', `${res.uri}.json`);
19
- observer.complete();
20
- };
21
- return new Observable(doExport);
22
- }
23
- nothingToExport(res) {
24
- if (res.map === undefined) {
25
- return true;
26
- }
27
- return false;
28
- }
29
- }
30
- ContextExportService.ɵfac = function ContextExportService_Factory(t) { return new (t || ContextExportService)(); };
31
- ContextExportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ContextExportService, factory: ContextExportService.ɵfac, providedIn: 'root' });
32
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextExportService, [{
33
- type: Injectable,
34
- args: [{
35
- providedIn: 'root'
36
- }]
37
- }], null, null); })();
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1leHBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LWltcG9ydC1leHBvcnQvc2hhcmVkL2NvbnRleHQtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzVDLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsTUFBTSxDQUFDLEdBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsV0FBVyxDQUFDLEdBQW9CO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBd0IsRUFBRSxFQUFFO1lBQzFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEQsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFO2dCQUMxQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPO2FBQ1Y7WUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLGVBQWUsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUMzRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsZUFBZSxDQUFDLEdBQW9CO1FBQzVDLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7d0ZBekJVLG9CQUFvQjswRUFBcEIsb0JBQW9CLFdBQXBCLG9CQUFvQixtQkFGbkIsTUFBTTt1RkFFUCxvQkFBb0I7Y0FIaEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgZG93bmxvYWRDb250ZW50IH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEV4cG9ydE5vdGhpbmdUb0V4cG9ydEVycm9yIH0gZnJvbSAnLi9jb250ZXh0LWV4cG9ydC5lcnJvcnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZlciwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICBleHBvcnQocmVzOiBEZXRhaWxlZENvbnRleHQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLmV4cG9ydEFzeW5jKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZXhwb3J0QXN5bmMocmVzOiBEZXRhaWxlZENvbnRleHQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGRvRXhwb3J0ID0gKG9ic2VydmVyOiBPYnNlcnZlcjx2b2lkPikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5vdGhpbmdUb0V4cG9ydCA9IHRoaXMubm90aGluZ1RvRXhwb3J0KHJlcyk7XHJcbiAgICAgICAgaWYgKG5vdGhpbmdUb0V4cG9ydCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXhwb3J0Tm90aGluZ1RvRXhwb3J0RXJyb3IoKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29udGV4dEpTT04gPSBKU09OLnN0cmluZ2lmeShyZXMpO1xyXG4gICAgICAgIGRvd25sb2FkQ29udGVudChjb250ZXh0SlNPTiwgJ3RleHQvanNvbjtjaGFyc2V0PXV0Zi04JywgYCR7cmVzLnVyaX0uanNvbmApO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRvRXhwb3J0KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBub3RoaW5nVG9FeHBvcnQocmVzOiBEZXRhaWxlZENvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGlmIChyZXMubWFwID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { ExportNothingToExportError } from './context-export.errors';
2
- export function handleFileExportError(error, messageService) {
3
- if (error instanceof ExportNothingToExportError) {
4
- this.handleNothingToExportError(messageService);
5
- return;
6
- }
7
- messageService.error('igo.context.contextImportExport.export.failed.text', 'igo.context.contextImportExport.export.failed.title');
8
- }
9
- export function handleFileExportSuccess(messageService) {
10
- messageService.success('igo.context.contextImportExport.export.success.text', 'igo.context.contextImportExport.export.success.title');
11
- }
12
- export function handleNothingToExportError(messageService) {
13
- messageService.error('igo.context.contextImportExport.export.nothing.text', 'igo.context.contextImportExport.export.nothing.title');
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1leHBvcnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1pbXBvcnQtZXhwb3J0L3NoYXJlZC9jb250ZXh0LWV4cG9ydC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRSxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLEtBQVksRUFDWixjQUE4QjtJQUU5QixJQUFJLEtBQUssWUFBWSwwQkFBMEIsRUFBRTtRQUMvQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsT0FBTztLQUNSO0lBQ0QsY0FBYyxDQUFDLEtBQUssQ0FDbEIsb0RBQW9ELEVBQ3BELHFEQUFxRCxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsY0FBOEI7SUFFOUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxxREFBcUQsRUFBRSxzREFBc0QsQ0FBQyxDQUFDO0FBQzFJLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3RDLGNBQThCO0lBRTlCLGNBQWMsQ0FBQyxLQUFLLENBQUMscURBQXFELEVBQUUsc0RBQXNELENBQUMsQ0FBQztBQUN4SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgRXhwb3J0Tm90aGluZ1RvRXhwb3J0RXJyb3IgfSBmcm9tICcuL2NvbnRleHQtZXhwb3J0LmVycm9ycyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRmlsZUV4cG9ydEVycm9yKFxyXG4gICAgZXJyb3I6IEVycm9yLFxyXG4gICAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFeHBvcnROb3RoaW5nVG9FeHBvcnRFcnJvcikge1xyXG4gICAgICB0aGlzLmhhbmRsZU5vdGhpbmdUb0V4cG9ydEVycm9yKG1lc3NhZ2VTZXJ2aWNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmV4cG9ydC5mYWlsZWQudGV4dCcsXHJcbiAgICAgICdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmV4cG9ydC5mYWlsZWQudGl0bGUnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKFxyXG4gICAgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBtZXNzYWdlU2VydmljZS5zdWNjZXNzKCdpZ28uY29udGV4dC5jb250ZXh0SW1wb3J0RXhwb3J0LmV4cG9ydC5zdWNjZXNzLnRleHQnLCAnaWdvLmNvbnRleHQuY29udGV4dEltcG9ydEV4cG9ydC5leHBvcnQuc3VjY2Vzcy50aXRsZScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlTm90aGluZ1RvRXhwb3J0RXJyb3IoXHJcbiAgICBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBtZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmNvbnRleHQuY29udGV4dEltcG9ydEV4cG9ydC5leHBvcnQubm90aGluZy50ZXh0JywgJ2lnby5jb250ZXh0LmNvbnRleHRJbXBvcnRFeHBvcnQuZXhwb3J0Lm5vdGhpbmcudGl0bGUnKTtcclxufVxyXG4iXX0=
@@ -1,79 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { ImportInvalidFileError, ImportUnreadableFileError, ImportSizeError } from './context-import.errors';
4
- import { getFileExtension } from './context-import.utils';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@igo2/core";
7
- export class ContextImportService {
8
- constructor(config) {
9
- this.config = config;
10
- const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
11
- this.clientSideFileSizeMax =
12
- (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
13
- }
14
- import(file) {
15
- return this.importAsync(file);
16
- }
17
- getFileImporter(file) {
18
- const extension = getFileExtension(file);
19
- const mimeType = file.type;
20
- const allowedMimeTypes = [...ContextImportService.allowedMimeTypes];
21
- const allowedExtensions = ContextImportService.allowedExtensions;
22
- if (allowedMimeTypes.indexOf(mimeType) < 0 &&
23
- allowedExtensions.indexOf(extension) < 0) {
24
- return undefined;
25
- }
26
- else if (mimeType === 'application/json' ||
27
- extension === ContextImportService.allowedExtensions) {
28
- return this.importFile;
29
- }
30
- return undefined;
31
- }
32
- importAsync(file) {
33
- const doImport = (observer) => {
34
- if (file.size >= this.clientSideFileSizeMax) {
35
- observer.error(new ImportSizeError());
36
- return;
37
- }
38
- const importer = this.getFileImporter(file);
39
- if (importer === undefined) {
40
- observer.error(new ImportInvalidFileError());
41
- return;
42
- }
43
- importer.call(this, file, observer);
44
- };
45
- return new Observable(doImport);
46
- }
47
- importFile(file, observer) {
48
- const reader = new FileReader();
49
- reader.onload = (event) => {
50
- try {
51
- const context = this.parseContextFromFile(file, event.target.result);
52
- observer.next(context);
53
- }
54
- catch (e) {
55
- observer.error(new ImportUnreadableFileError());
56
- }
57
- observer.complete();
58
- };
59
- reader.onerror = (evt) => {
60
- observer.error(new ImportUnreadableFileError());
61
- };
62
- reader.readAsText(file, 'UTF-8');
63
- }
64
- parseContextFromFile(file, data) {
65
- const context = JSON.parse(data);
66
- return context;
67
- }
68
- }
69
- ContextImportService.allowedMimeTypes = ['application/json'];
70
- ContextImportService.allowedExtensions = 'json';
71
- ContextImportService.ɵfac = function ContextImportService_Factory(t) { return new (t || ContextImportService)(i0.ɵɵinject(i1.ConfigService)); };
72
- ContextImportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ContextImportService, factory: ContextImportService.ɵfac, providedIn: 'root' });
73
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextImportService, [{
74
- type: Injectable,
75
- args: [{
76
- providedIn: 'root'
77
- }]
78
- }], function () { return [{ type: i1.ConfigService }]; }, null); })();
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LWltcG9ydC1leHBvcnQvc2hhcmVkL2NvbnRleHQtaW1wb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBTTFELE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsWUFBb0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUM1QyxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUI7WUFDeEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZUFBZSxDQUNyQixJQUFVO1FBT1YsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsaUJBQWlCLENBQUM7UUFFakUsSUFDRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUN0QyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUN4QztZQUNBLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO2FBQU0sSUFDTCxRQUFRLEtBQUssa0JBQWtCO1lBQy9CLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFDcEQ7WUFDQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVU7UUFDNUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFtQyxFQUFFLEVBQUU7WUFDdkQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDM0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU87YUFDUjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUMxQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO2FBQ1I7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVUsRUFBRSxRQUFtQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRWhDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUM3QixJQUFJO2dCQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7YUFDakQ7WUFFRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3ZCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVUsRUFBRSxJQUFZO1FBQ25ELE1BQU0sT0FBTyxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O0FBdkZNLHFDQUFnQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4QyxzQ0FBaUIsR0FBRyxNQUFNLENBQUM7d0ZBSHZCLG9CQUFvQjswRUFBcEIsb0JBQW9CLFdBQXBCLG9CQUFvQixtQkFGbkIsTUFBTTt1RkFFUCxvQkFBb0I7Y0FIaEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEltcG9ydEludmFsaWRGaWxlRXJyb3IsXHJcbiAgSW1wb3J0VW5yZWFkYWJsZUZpbGVFcnJvcixcclxuICBJbXBvcnRTaXplRXJyb3JcclxufSBmcm9tICcuL2NvbnRleHQtaW1wb3J0LmVycm9ycyc7XHJcbmltcG9ydCB7IGdldEZpbGVFeHRlbnNpb24gfSBmcm9tICcuL2NvbnRleHQtaW1wb3J0LnV0aWxzJztcclxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0SW1wb3J0U2VydmljZSB7XHJcbiAgc3RhdGljIGFsbG93ZWRNaW1lVHlwZXMgPSBbJ2FwcGxpY2F0aW9uL2pzb24nXTtcclxuXHJcbiAgc3RhdGljIGFsbG93ZWRFeHRlbnNpb25zID0gJ2pzb24nO1xyXG5cclxuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSkge1xyXG4gICAgY29uc3QgY29uZmlnRmlsZVNpemVNYiA9IHRoaXMuY29uZmlnLmdldENvbmZpZyhcclxuICAgICAgJ2ltcG9ydEV4cG9ydC5jbGllbnRTaWRlRmlsZVNpemVNYXhNYidcclxuICAgICk7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCA9XHJcbiAgICAgIChjb25maWdGaWxlU2l6ZU1iID8gY29uZmlnRmlsZVNpemVNYiA6IDMwKSAqIE1hdGgucG93KDEwMjQsIDIpO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0KGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPERldGFpbGVkQ29udGV4dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0QXN5bmMoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbGVJbXBvcnRlcihcclxuICAgIGZpbGU6IEZpbGVcclxuICApOiAoXHJcbiAgICBmaWxlOiBGaWxlLFxyXG4gICAgb2JzZXJ2ZXI6IE9ic2VydmVyPERldGFpbGVkQ29udGV4dD4sXHJcbiAgICBwcm9qZWN0aW9uSW46IHN0cmluZyxcclxuICAgIHByb2plY3Rpb25PdXQ6IHN0cmluZ1xyXG4gICkgPT4gdm9pZCB7XHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGUpO1xyXG4gICAgY29uc3QgbWltZVR5cGUgPSBmaWxlLnR5cGU7XHJcbiAgICBjb25zdCBhbGxvd2VkTWltZVR5cGVzID0gWy4uLkNvbnRleHRJbXBvcnRTZXJ2aWNlLmFsbG93ZWRNaW1lVHlwZXNdO1xyXG4gICAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSBDb250ZXh0SW1wb3J0U2VydmljZS5hbGxvd2VkRXh0ZW5zaW9ucztcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGFsbG93ZWRNaW1lVHlwZXMuaW5kZXhPZihtaW1lVHlwZSkgPCAwICYmXHJcbiAgICAgIGFsbG93ZWRFeHRlbnNpb25zLmluZGV4T2YoZXh0ZW5zaW9uKSA8IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgbWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJyB8fFxyXG4gICAgICBleHRlbnNpb24gPT09IENvbnRleHRJbXBvcnRTZXJ2aWNlLmFsbG93ZWRFeHRlbnNpb25zXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RmlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltcG9ydEFzeW5jKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPERldGFpbGVkQ29udGV4dD4ge1xyXG4gICAgY29uc3QgZG9JbXBvcnQgPSAob2JzZXJ2ZXI6IE9ic2VydmVyPERldGFpbGVkQ29udGV4dD4pID0+IHtcclxuICAgICAgaWYgKGZpbGUuc2l6ZSA+PSB0aGlzLmNsaWVudFNpZGVGaWxlU2l6ZU1heCkge1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBJbXBvcnRTaXplRXJyb3IoKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltcG9ydGVyID0gdGhpcy5nZXRGaWxlSW1wb3J0ZXIoZmlsZSk7XHJcbiAgICAgIGlmIChpbXBvcnRlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEltcG9ydEludmFsaWRGaWxlRXJyb3IoKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbXBvcnRlci5jYWxsKHRoaXMsIGZpbGUsIG9ic2VydmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRvSW1wb3J0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW1wb3J0RmlsZShmaWxlOiBGaWxlLCBvYnNlcnZlcjogT2JzZXJ2ZXI8RGV0YWlsZWRDb250ZXh0Pikge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wYXJzZUNvbnRleHRGcm9tRmlsZShmaWxlLCBldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KGNvbnRleHQpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEltcG9ydFVucmVhZGFibGVGaWxlRXJyb3IoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5vbmVycm9yID0gKGV2dCkgPT4ge1xyXG4gICAgICBvYnNlcnZlci5lcnJvcihuZXcgSW1wb3J0VW5yZWFkYWJsZUZpbGVFcnJvcigpKTtcclxuICAgIH07XHJcblxyXG4gICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSwgJ1VURi04Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlQ29udGV4dEZyb21GaWxlKGZpbGU6IEZpbGUsIGRhdGE6IHN0cmluZyk6IERldGFpbGVkQ29udGV4dCB7XHJcbiAgICBjb25zdCBjb250ZXh0OiBEZXRhaWxlZENvbnRleHQgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==