@igo2/context 1.14.2 → 1.15.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 (51) hide show
  1. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +9 -10
  2. package/esm2020/lib/context-import-export/context-import-export.module.mjs +1 -1
  3. package/esm2020/lib/context-import-export/shared/context-export.interface.mjs +1 -1
  4. package/esm2020/lib/context-import-export/shared/context-export.service.mjs +1 -1
  5. package/esm2020/lib/context-import-export/shared/context-export.utils.mjs +8 -17
  6. package/esm2020/lib/context-import-export/shared/context-import.errors.mjs +1 -1
  7. package/esm2020/lib/context-import-export/shared/context-import.service.mjs +1 -1
  8. package/esm2020/lib/context-import-export/shared/context-import.utils.mjs +27 -52
  9. package/esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs +5 -9
  10. package/esm2020/lib/context-manager/context-edit/context-edit.component.mjs +2 -2
  11. package/esm2020/lib/context-manager/context-form/context-form.component.mjs +6 -10
  12. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +2 -2
  13. package/esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs +6 -26
  14. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +2 -2
  15. package/esm2020/lib/context-manager/context-manager.module.mjs +1 -1
  16. package/esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +5 -22
  17. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +2 -2
  18. package/esm2020/lib/context-manager/shared/context.interface.mjs +1 -1
  19. package/esm2020/lib/context-manager/shared/context.service.mjs +9 -6
  20. package/esm2020/lib/context-manager/shared/layer-context.directive.mjs +27 -11
  21. package/esm2020/lib/context-manager/shared/map-context.directive.mjs +1 -1
  22. package/esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +6 -12
  23. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +2 -2
  24. package/esm2020/lib/context-map-button/context-map-button.module.mjs +1 -1
  25. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +5 -15
  26. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +2 -2
  27. package/esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs +1 -1
  28. package/esm2020/lib/context-map-button/user-button/user-button.animation.mjs +1 -1
  29. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +2 -2
  30. package/esm2020/lib/context-map-button/user-button/user-dialog.component.mjs +2 -2
  31. package/esm2020/lib/context.module.mjs +1 -1
  32. package/esm2020/lib/share-map/share-map/share-map-api.component.mjs +5 -16
  33. package/esm2020/lib/share-map/share-map/share-map-url.component.mjs +2 -2
  34. package/esm2020/lib/share-map/share-map/share-map.component.mjs +2 -2
  35. package/esm2020/lib/share-map/share-map.module.mjs +1 -1
  36. package/esm2020/lib/share-map/shared/share-map.service.mjs +1 -1
  37. package/esm2020/lib/sidenav/sidenav.component.mjs +2 -2
  38. package/esm2020/lib/sidenav/sidenav.module.mjs +1 -1
  39. package/fesm2015/igo2-context.mjs +117 -205
  40. package/fesm2015/igo2-context.mjs.map +1 -1
  41. package/fesm2020/igo2-context.mjs +117 -205
  42. package/fesm2020/igo2-context.mjs.map +1 -1
  43. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +2 -3
  44. package/lib/context-import-export/shared/context-export.utils.d.ts +4 -4
  45. package/lib/context-import-export/shared/context-import.utils.d.ts +7 -7
  46. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +3 -4
  47. package/lib/context-manager/context-form/context-form.component.d.ts +2 -3
  48. package/lib/context-manager/shared/layer-context.directive.d.ts +1 -0
  49. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +2 -3
  50. package/ngcc.config.js +3 -3
  51. package/package.json +16 -12
@@ -30,9 +30,8 @@ import * as i1$2 from '@angular/forms';
30
30
  import { Validators, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
31
31
  import { Observable, BehaviorSubject, Subject, of, merge, ReplaySubject, EMPTY, timer, combineLatest } from 'rxjs';
32
32
  import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, filter, buffer, debounce } from 'rxjs/operators';
33
- import * as olStyle from 'ol/style';
34
33
  import * as i1$1 from '@igo2/geo';
35
- import { FeatureDataSource, VectorLayer, ClusterDataSource, moveToOlFeatures, FeatureMotion, IgoFeatureModule } from '@igo2/geo';
34
+ import { FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, moveToOlFeatures, FeatureMotion, IgoFeatureModule } from '@igo2/geo';
36
35
  import { downloadContent, ObjectUtils, uuid, Clipboard } from '@igo2/utils';
37
36
  import olPoint from 'ol/geom/Point';
38
37
  import GeoJSON from 'ol/format/GeoJSON';
@@ -76,85 +75,59 @@ class ExportNothingToExportError extends ExportError {
76
75
  }
77
76
  }
78
77
 
79
- function handleFileExportError(error, messageService, languageService) {
78
+ function handleFileExportError(error, messageService) {
80
79
  if (error instanceof ExportNothingToExportError) {
81
- this.handleNothingToExportError(messageService, languageService);
80
+ this.handleNothingToExportError(messageService);
82
81
  return;
83
82
  }
84
- const translate = languageService.translate;
85
- const title = translate.instant('igo.context.contextImportExport.export.failed.title');
86
- const message = translate.instant('igo.context.contextImportExport.export.failed.text');
87
- messageService.error(message, title);
83
+ messageService.error('igo.context.contextImportExport.export.failed.text', 'igo.context.contextImportExport.export.failed.title');
88
84
  }
89
- function handleFileExportSuccess(messageService, languageService) {
90
- const translate = languageService.translate;
91
- const title = translate.instant('igo.context.contextImportExport.export.success.title');
92
- const message = translate.instant('igo.context.contextImportExport.export.success.text');
93
- messageService.success(message, title);
85
+ function handleFileExportSuccess(messageService) {
86
+ messageService.success('igo.context.contextImportExport.export.success.text', 'igo.context.contextImportExport.export.success.title');
94
87
  }
95
- function handleNothingToExportError(messageService, languageService) {
96
- const translate = languageService.translate;
97
- const title = translate.instant('igo.context.contextImportExport.export.nothing.title');
98
- const message = translate.instant('igo.context.contextImportExport.export.nothing.text');
99
- messageService.error(message, title);
88
+ function handleNothingToExportError(messageService) {
89
+ messageService.error('igo.context.contextImportExport.export.nothing.text', 'igo.context.contextImportExport.export.nothing.title');
100
90
  }
101
91
 
102
- function handleFileImportSuccess(file, context, messageService, languageService, contextService) {
92
+ function handleFileImportSuccess(file, context, messageService, contextService) {
103
93
  if (Object.keys(context).length <= 0) {
104
- handleNothingToImportError(file, messageService, languageService);
94
+ handleNothingToImportError(file, messageService);
105
95
  return;
106
96
  }
107
97
  const contextTitle = computeLayerTitleFromFile(file);
108
98
  addContextToContextList(context, contextTitle, contextService);
109
- const translate = languageService.translate;
110
- const messageTitle = translate.instant('igo.context.contextImportExport.import.success.title');
111
- const message = translate.instant('igo.context.contextImportExport.import.success.text', {
99
+ messageService.success('igo.context.contextImportExport.import.success.text', 'igo.context.contextImportExport.import.success.title', undefined, {
112
100
  value: contextTitle
113
101
  });
114
- messageService.success(message, messageTitle);
115
102
  }
116
- function handleFileImportError(file, error, messageService, languageService, sizeMb) {
103
+ function handleFileImportError(file, error, messageService, sizeMb) {
117
104
  sizeMb = sizeMb ? sizeMb : 30;
118
105
  const errMapping = {
119
106
  'Invalid file': handleInvalidFileImportError,
120
107
  'File is too large': handleSizeFileImportError,
121
108
  'Failed to read file': handleUnreadbleFileImportError
122
109
  };
123
- errMapping[error.message](file, error, messageService, languageService, sizeMb);
110
+ errMapping[error.message](file, error, messageService, sizeMb);
124
111
  }
125
- function handleInvalidFileImportError(file, error, messageService, languageService) {
126
- const translate = languageService.translate;
127
- const title = translate.instant('igo.context.contextImportExport.import.invalid.title');
128
- const message = translate.instant('igo.context.contextImportExport.import.invalid.text', {
112
+ function handleInvalidFileImportError(file, error, messageService) {
113
+ messageService.error('igo.context.contextImportExport.import.invalid.text', 'igo.context.contextImportExport.import.invalid.title', undefined, {
129
114
  value: file.name,
130
115
  mimeType: file.type
131
116
  });
132
- messageService.error(message, title);
133
117
  }
134
- function handleSizeFileImportError(file, error, messageService, languageService, sizeMb) {
135
- const translate = languageService.translate;
136
- const title = translate.instant('igo.context.contextImportExport.import.tooLarge.title');
137
- const message = translate.instant('igo.context.contextImportExport.import.tooLarge.text', {
118
+ function handleSizeFileImportError(file, error, messageService, sizeMb) {
119
+ messageService.error('igo.context.contextImportExport.import.tooLarge.text', 'igo.context.contextImportExport.import.tooLarge.title', undefined, {
138
120
  value: file.name,
139
121
  size: sizeMb
140
122
  });
141
- messageService.error(message, title);
142
123
  }
143
- function handleUnreadbleFileImportError(file, error, messageService, languageService) {
144
- const translate = languageService.translate;
145
- const title = translate.instant('igo.context.contextImportExport.import.unreadable.title');
146
- const message = translate.instant('igo.context.contextImportExport.import.unreadable.text', {
124
+ function handleUnreadbleFileImportError(file, error, messageService) {
125
+ messageService.error('igo.context.contextImportExport.import.unreadable.text', 'igo.context.contextImportExport.import.unreadable.title', undefined, {
147
126
  value: file.name
148
127
  });
149
- messageService.error(message, title);
150
128
  }
151
- function handleNothingToImportError(file, messageService, languageService) {
152
- const translate = languageService.translate;
153
- const title = translate.instant('igo.context.contextImportExport.import.empty.title');
154
- const message = translate.instant('igo.context.contextImportExport.import.empty.text', {
155
- value: file.name
156
- });
157
- messageService.error(message, title);
129
+ function handleNothingToImportError(file, messageService) {
130
+ messageService.error('igo.context.contextImportExport.import.empty.text', 'igo.context.contextImportExport.import.empty.title', undefined, { value: file.name });
158
131
  }
159
132
  function addContextToContextList(context, contextTitle, contextService) {
160
133
  context.title = contextTitle;
@@ -171,35 +144,28 @@ function computeLayerTitleFromFile(file) {
171
144
  return file.name.substr(0, file.name.lastIndexOf('.'));
172
145
  }
173
146
  function addImportedFeaturesToMap(olFeatures, map, layerTitle) {
174
- const r = Math.floor(Math.random() * 255);
175
- const g = Math.floor(Math.random() * 255);
176
- const b = Math.floor(Math.random() * 255);
177
- const stroke = new olStyle.Stroke({
178
- color: [r, g, b, 1],
179
- width: 2
180
- });
181
- const fill = new olStyle.Fill({
182
- color: [r, g, b, 0.4]
183
- });
184
147
  const sourceOptions = {
185
148
  type: 'vector',
186
149
  queryable: true
187
150
  };
188
151
  const source = new FeatureDataSource(sourceOptions);
189
152
  source.ol.addFeatures(olFeatures);
153
+ let randomStyle;
154
+ let editable = false;
155
+ if (olFeatures[0].getKeys().includes('_style') ||
156
+ olFeatures[0].getKeys().includes('_mapTitle')) {
157
+ randomStyle = featureRandomStyleFunction();
158
+ }
159
+ else {
160
+ randomStyle = featureRandomStyle();
161
+ editable = true;
162
+ }
190
163
  const layer = new VectorLayer({
191
164
  title: layerTitle,
192
165
  isIgoInternalLayer: true,
193
166
  source,
194
- style: new olStyle.Style({
195
- stroke,
196
- fill,
197
- image: new olStyle.Circle({
198
- radius: 5,
199
- stroke,
200
- fill
201
- })
202
- })
167
+ igoStyle: { editable },
168
+ style: randomStyle
203
169
  });
204
170
  map.addLayer(layer);
205
171
  return layer;
@@ -796,16 +762,17 @@ class ContextService {
796
762
  };
797
763
  });
798
764
  layers.forEach((layer) => {
765
+ // Do not seem to work properly. layerFound is always undefined.
799
766
  const layerFound = currentContext.layers.find((contextLayer) => {
800
767
  const source = contextLayer.source;
801
768
  return source && layer.id === source.id && !contextLayer.baseLayer;
802
769
  });
803
770
  if (layerFound) {
804
771
  let layerStyle = layerFound[`style`];
805
- if (layerFound[`styleByAttribute`]) {
772
+ if (layerFound[`igoStyle`][`styleByAttribute`]) {
806
773
  layerStyle = undefined;
807
774
  }
808
- else if (layerFound[`clusterBaseStyle`]) {
775
+ else if (layerFound[`igoStyle`][`clusterBaseStyle`]) {
809
776
  layerStyle = undefined;
810
777
  delete layerFound.sourceOptions[`source`];
811
778
  delete layerFound.sourceOptions[`format`];
@@ -814,8 +781,10 @@ class ContextService {
814
781
  baseLayer: layerFound.baseLayer,
815
782
  title: layer.options.title,
816
783
  zIndex: layer.zIndex,
817
- styleByAttribute: layerFound[`styleByAttribute`],
818
- clusterBaseStyle: layerFound[`clusterBaseStyle`],
784
+ igoStyle: {
785
+ styleByAttribute: layerFound[`igoStyle`][`styleByAttribute`],
786
+ clusterBaseStyle: layerFound[`igoStyle`][`clusterBaseStyle`],
787
+ },
819
788
  style: layerStyle,
820
789
  clusterParam: layerFound[`clusterParam`],
821
790
  visible: layer.visible,
@@ -955,7 +924,7 @@ class ContextService {
955
924
  error.error.title = this.languageService.translate.instant('igo.context.contextManager.errors.addPermissionTitle');
956
925
  error.error.message = this.languageService.translate.instant('igo.context.contextManager.errors.addPermission');
957
926
  }
958
- this.messageService.error(error.error.message, error.error.title);
927
+ this.messageService.error('igo.context.contextManager.errors.addPermission', 'igo.context.contextManager.errors.addPermissionTitle');
959
928
  }
960
929
  handleContextsChange(keepCurrentContext = true) {
961
930
  const context = this.context$.value;
@@ -1136,10 +1105,9 @@ function ContextImportExportComponent_form_9_Template(rf, ctx) {
1136
1105
  }
1137
1106
  }
1138
1107
  class ContextImportExportComponent {
1139
- constructor(contextImportService, contextExportService, languageService, messageService, formBuilder, config, contextService) {
1108
+ constructor(contextImportService, contextExportService, messageService, formBuilder, config, contextService) {
1140
1109
  this.contextImportService = contextImportService;
1141
1110
  this.contextExportService = contextExportService;
1142
- this.languageService = languageService;
1143
1111
  this.messageService = messageService;
1144
1112
  this.formBuilder = formBuilder;
1145
1113
  this.config = config;
@@ -1182,18 +1150,18 @@ class ContextImportExportComponent {
1182
1150
  });
1183
1151
  }
1184
1152
  onFileImportSuccess(file, context) {
1185
- handleFileImportSuccess(file, context, this.messageService, this.languageService, this.contextService);
1153
+ handleFileImportSuccess(file, context, this.messageService, this.contextService);
1186
1154
  }
1187
1155
  onFileImportError(file, error) {
1188
1156
  this.loading$.next(false);
1189
- handleFileImportError(file, error, this.messageService, this.languageService, this.fileSizeMb);
1157
+ handleFileImportError(file, error, this.messageService, this.fileSizeMb);
1190
1158
  }
1191
1159
  onFileExportError(error) {
1192
1160
  this.loading$.next(false);
1193
- handleFileExportError(error, this.messageService, this.languageService);
1161
+ handleFileExportError(error, this.messageService);
1194
1162
  }
1195
1163
  onFileExportSuccess() {
1196
- handleFileExportSuccess(this.messageService, this.languageService);
1164
+ handleFileExportSuccess(this.messageService);
1197
1165
  }
1198
1166
  selectAll(e) {
1199
1167
  if (e._selected) {
@@ -1208,7 +1176,7 @@ class ContextImportExportComponent {
1208
1176
  this.activeImportExport = event.value;
1209
1177
  }
1210
1178
  }
1211
- ContextImportExportComponent.ɵfac = function ContextImportExportComponent_Factory(t) { return new (t || ContextImportExportComponent)(i0.ɵɵdirectiveInject(ContextImportService), i0.ɵɵdirectiveInject(ContextExportService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i1$2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(ContextService)); };
1179
+ ContextImportExportComponent.ɵfac = function ContextImportExportComponent_Factory(t) { return new (t || ContextImportExportComponent)(i0.ɵɵdirectiveInject(ContextImportService), i0.ɵɵdirectiveInject(ContextExportService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i1$2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(ContextService)); };
1212
1180
  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) {
1213
1181
  if (rf & 1) {
1214
1182
  i0.ɵɵelementStart(0, "div", 0)(1, "mat-button-toggle-group", 1);
@@ -1244,8 +1212,8 @@ ContextImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type
1244
1212
  (function () {
1245
1213
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextImportExportComponent, [{
1246
1214
  type: Component,
1247
- args: [{ selector: 'igo-context-import-export', template: "<div class=\"import-export-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeImportExport\"\n (change)=\"onImportExportChange($event)\">\n <mat-button-toggle [value]=\"'import'\">\n {{'igo.geo.importExportForm.importTabTitle' | translate}}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"'export'\">\n {{'igo.geo.importExportForm.exportTabTitle' | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div *ngIf=\"activeImportExport === 'import'\">\n <form class=\"igo-form\">\n <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"button\" (click)=\"fileInput.click()\" [disabled]=\"loading$ | async\">\n {{'igo.geo.importExportForm.importButton' | translate}}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n <input\n #fileInput\n type=\"file\"\n [style.display]=\"'none'\"\n (click)=\"fileInput.value = null\"\n (change)=\"importFiles($event.target.files)\">\n </div>\n </form>\n <section class=\"mat-typography\">\n <h4>{{'igo.geo.importExportForm.importClarifications' | translate}}</h4>\n <ul>\n <li>{{'igo.geo.importExportForm.importSizeMax' | translate: {size: fileSizeMb} }}</li>\n </ul>\n </section>\n</div>\n\n\n<form class=\"igo-form\" *ngIf=\"activeImportExport === 'export'\" [formGroup]=\"form\">\n <div class=\"igo-input-container\">\n <mat-form-field class=\"example-full-width\">\n <mat-label>{{'igo.context.contextImportExport.export.exportContextName' | translate}}</mat-label>\n <input formControlName=\"name\" matInput [value]=\"\">\n </mat-form-field>\n </div>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{'igo.context.contextImportExport.export.exportPlaceHolder' | translate}}</mat-label>\n <mat-select formControlName=\"layers\" multiple>\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\n {{'igo.context.contextImportExport.export.exportSelectAll' | translate}}\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option *ngFor=\"let layer of userControlledLayerList\" [value]=\"layer\">{{layer.title}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (loading$ | async)\"\n (click)=\"handleExportFormSubmit(form.value)\">\n {{'igo.geo.importExportForm.exportButton' | translate}}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n </div>\n</form>\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"] }]
1248
- }], function () { return [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.LanguageService }, { type: i3.MessageService }, { type: i1$2.UntypedFormBuilder }, { type: i3.ConfigService }, { type: ContextService }]; }, { map: [{
1215
+ 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"] }]
1216
+ }], function () { return [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.MessageService }, { type: i1$2.UntypedFormBuilder }, { type: i3.ConfigService }, { type: ContextService }]; }, { map: [{
1249
1217
  type: Input
1250
1218
  }] });
1251
1219
  })();
@@ -1439,15 +1407,7 @@ class LayerContextDirective {
1439
1407
  layersAndIndex$
1440
1408
  .pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
1441
1409
  .subscribe((layers) => {
1442
- layers = layers
1443
- .filter((layer) => layer !== undefined)
1444
- .map((layer) => {
1445
- layer.visible = this.computeLayerVisibilityFromUrl(layer);
1446
- layer.zIndex = layer.zIndex;
1447
- return layer;
1448
- });
1449
- this.contextLayers.concat(layers);
1450
- this.map.addLayers(layers);
1410
+ this.handleAddLayers(layers);
1451
1411
  if (context.extraFeatures) {
1452
1412
  context.extraFeatures.forEach((featureCollection) => {
1453
1413
  const format = new GeoJSON();
@@ -1457,7 +1417,18 @@ class LayerContextDirective {
1457
1417
  dataProjection: 'EPSG:4326',
1458
1418
  featureProjection: 'EPSG:3857'
1459
1419
  });
1460
- if (!this.configService.getConfig('importWithStyle')) {
1420
+ const importExportOptions = this.configService.getConfig('importExport');
1421
+ const importWithStyle = (importExportOptions === null || importExportOptions === void 0 ? void 0 : importExportOptions.importWithStyle) || this.configService.getConfig('importWithStyle');
1422
+ if (this.configService.getConfig('importWithStyle')) {
1423
+ console.warn(`
1424
+ The location of this config importWithStyle is deprecated.
1425
+ Please move this property within importExport configuration.
1426
+ Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
1427
+ Refer to environnement.ts OR config/config.json
1428
+ This legacy conversion will be deleted in 2024.
1429
+ `);
1430
+ }
1431
+ if (!importWithStyle) {
1461
1432
  addImportedFeaturesToMap(featureCollection, this.map, title);
1462
1433
  }
1463
1434
  else {
@@ -1466,6 +1437,19 @@ class LayerContextDirective {
1466
1437
  });
1467
1438
  }
1468
1439
  });
1440
+ this.layerService.createAsyncIdbLayers(context.uri).pipe(debounceTime(500))
1441
+ .subscribe((layers) => this.handleAddLayers(layers));
1442
+ }
1443
+ handleAddLayers(layers) {
1444
+ layers = layers
1445
+ .filter((layer) => layer !== undefined)
1446
+ .map((layer) => {
1447
+ layer.visible = this.computeLayerVisibilityFromUrl(layer);
1448
+ layer.zIndex = layer.zIndex;
1449
+ return layer;
1450
+ });
1451
+ this.contextLayers.concat(layers);
1452
+ this.map.addLayers(layers);
1469
1453
  }
1470
1454
  computeLayerVisibilityFromUrl(layer) {
1471
1455
  const params = this.queryParams;
@@ -1579,7 +1563,7 @@ BookmarkDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Boo
1579
1563
  (function () {
1580
1564
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BookmarkDialogComponent, [{
1581
1565
  type: Component,
1582
- args: [{ selector: 'igo-bookmark-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{ 'igo.context.bookmarkButton.dialog.title' |\u00A0translate }}</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <mat-form-field>\n <input matInput required autocomplete=\"off\"\n maxlength=\"128\"\n [placeholder]=\"'igo.context.bookmarkButton.dialog.placeholder' |\u00A0translate\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button mat-button color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\">\n {{'igo.common.confirmDialog.confirmBtn' | translate}}\n </button>\n <button mat-button\n (click)=\"dialogRef.close(false)\">\n {{'igo.common.confirmDialog.cancelBtn' |\u00A0translate}}\n </button>\n</div>\n" }]
1566
+ args: [{ selector: 'igo-bookmark-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{ 'igo.context.bookmarkButton.dialog.title' |\u00A0translate }}</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <mat-form-field>\r\n <input matInput required autocomplete=\"off\"\r\n maxlength=\"128\"\r\n [placeholder]=\"'igo.context.bookmarkButton.dialog.placeholder' |\u00A0translate\"\r\n [(ngModel)]=\"title\">\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button mat-button color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\">\r\n {{'igo.common.confirmDialog.confirmBtn' | translate}}\r\n </button>\r\n <button mat-button\r\n (click)=\"dialogRef.close(false)\">\r\n {{'igo.common.confirmDialog.cancelBtn' |\u00A0translate}}\r\n </button>\r\n</div>\r\n" }]
1583
1567
  }], function () { return [{ type: i1$3.MatDialogRef }]; }, null);
1584
1568
  })();
1585
1569
 
@@ -1826,7 +1810,7 @@ ContextItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Contex
1826
1810
  (function () {
1827
1811
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextItemComponent, [{
1828
1812
  type: Component,
1829
- args: [{ selector: 'igo-context-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-list-item\n class=\"mat-list-item\"\n [ngClass]=\"{'mat-list-item-light': hidden}\">\n <button mat-list-avatar\n *ngIf=\"auth.authenticated\"\n mat-icon-button\n igoStopPropagation\n [matTooltip]=\"auth.authenticated ? ('igo.context.contextManager.favorite' | translate) : ''\"\n matTooltipShowDelay=\"500\"\n [color]=\"default ? 'primary' : 'default'\"\n (click)=\"favoriteClick(context)\">\n <mat-icon *ngIf=\"!context.iconImage\" svgIcon=\"{{context.icon ? context.icon : context.scope === 'public' ? 'earth' : 'star'}}\"></mat-icon>\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\">\n </button>\n <button mat-list-avatar\n *ngIf=\"!auth.authenticated && showFavorite\"\n mat-icon-button\n igoStopPropagation\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\n matTooltipShowDelay=\"500\"\n [color]=\"default ? 'primary' : 'default'\"\n (click)=\"favoriteClick(context)\">\n <mat-icon svgIcon=\"star\"></mat-icon>\n </button>\n <h4 matLine>{{context.title}}</h4>\n\n <div *ngIf=\"auth.authenticated\"\n igoStopPropagation\n class=\"igo-actions-container\">\n\n <button *ngIf=\"collapsed && selected && (context.permission === typePermission[typePermission.write] || context.imported)\"\n class=\"save-button\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\n matTooltipShowDelay=\"500\"\n [color]=\"color\"\n (click)=\"save.emit(context)\">\n <mat-icon svgIcon=\"content-save\"></mat-icon>\n </button>\n\n <div #actions class=\"igo-actions-expand-container\">\n\n <button *ngIf=\"canShare && !context.imported\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.managePermissions' | translate\"\n matTooltipShowDelay=\"500\"\n [color]=\"color\"\n (click)=\"managePermissions.emit(context)\">\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\n </button>\n\n <!--button\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\n [color]=\"color\"\n (click)=\"manageTools.emit(context)\">\n <mat-icon svgIcon=\"widgets\"></mat-icon>\n </button-->\n\n <button *ngIf=\"!context.imported\"\n class=\"clone-button\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\n matTooltipShowDelay=\"500\"\n [color]=\"color\"\n (click)=\"clone.emit(context)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n\n <button *ngIf=\"context.permission === typePermission[typePermission.write] && !context.imported\"\n class=\"edit-button\"\n mat-icon-button\n [color]=\"color\"\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"edit.emit(context)\">\n <mat-icon svgIcon=\"pencil\"></mat-icon>\n </button>\n\n <button *ngIf=\"!context.hidden && !context.imported\"\n class=\"hide-button\"\n mat-icon-button\n [color]=\"color\"\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"hide.emit(context)\">\n <mat-icon svgIcon=\"eye\"></mat-icon>\n </button>\n\n <button *ngIf=\"context.hidden && !context.imported\"\n class=\"hide-button\"\n mat-icon-button\n [color]=\"color\"\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"show.emit(context)\">\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\n </button>\n\n <button *ngIf=\"context.permission === typePermission[typePermission.write] || context.imported\"\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"delete.emit(context)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n\n <button\n class=\"actions-button\"\n mat-icon-button\n igoCollapse\n [color]=\"color\"\n [target]=\"actions\"\n [collapsed]=collapsed\n (click)=\"collapsed = !collapsed\">\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\n </button>\n\n </div>\n\n</mat-list-item>\n", styles: [":host{overflow:hidden}.igo-actions-container{flex-shrink:0}.igo-actions-expand-container{display:inline-flex}mat-list-item ::ng-deep .mat-list-item-content .mat-list-text{padding:0}mat-icon.disabled{color:#00000061}mat-list-item.mat-list-item-light ::ng-deep .mat-list-item-content{color:#969696}\n"] }]
1813
+ args: [{ selector: 'igo-context-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-list-item\r\n class=\"mat-list-item\"\r\n [ngClass]=\"{'mat-list-item-light': hidden}\">\r\n <button mat-list-avatar\r\n *ngIf=\"auth.authenticated\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"auth.authenticated ? ('igo.context.contextManager.favorite' | translate) : ''\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\">\r\n <mat-icon *ngIf=\"!context.iconImage\" svgIcon=\"{{context.icon ? context.icon : context.scope === 'public' ? 'earth' : 'star'}}\"></mat-icon>\r\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\">\r\n </button>\r\n <button mat-list-avatar\r\n *ngIf=\"!auth.authenticated && showFavorite\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\">\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n <h4 matLine>{{context.title}}</h4>\r\n\r\n <div *ngIf=\"auth.authenticated\"\r\n igoStopPropagation\r\n class=\"igo-actions-container\">\r\n\r\n <button *ngIf=\"collapsed && selected && (context.permission === typePermission[typePermission.write] || context.imported)\"\r\n class=\"save-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"save.emit(context)\">\r\n <mat-icon svgIcon=\"content-save\"></mat-icon>\r\n </button>\r\n\r\n <div #actions class=\"igo-actions-expand-container\">\r\n\r\n <button *ngIf=\"canShare && !context.imported\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.managePermissions' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"managePermissions.emit(context)\">\r\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\r\n [color]=\"color\"\r\n (click)=\"manageTools.emit(context)\">\r\n <mat-icon svgIcon=\"widgets\"></mat-icon>\r\n </button-->\r\n\r\n <button *ngIf=\"!context.imported\"\r\n class=\"clone-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"clone.emit(context)\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"context.permission === typePermission[typePermission.write] && !context.imported\"\r\n class=\"edit-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"edit.emit(context)\">\r\n <mat-icon svgIcon=\"pencil\"></mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"!context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"hide.emit(context)\">\r\n <mat-icon svgIcon=\"eye\"></mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"show.emit(context)\">\r\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\r\n </button>\r\n\r\n <button *ngIf=\"context.permission === typePermission[typePermission.write] || context.imported\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"delete.emit(context)\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n class=\"actions-button\"\r\n mat-icon-button\r\n igoCollapse\r\n [color]=\"color\"\r\n [target]=\"actions\"\r\n [collapsed]=collapsed\r\n (click)=\"collapsed = !collapsed\">\r\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n</mat-list-item>\r\n", styles: [":host{overflow:hidden}.igo-actions-container{flex-shrink:0}.igo-actions-expand-container{display:inline-flex}mat-list-item ::ng-deep .mat-list-item-content .mat-list-text{padding:0}mat-icon.disabled{color:#00000061}mat-list-item.mat-list-item-light ::ng-deep .mat-list-item-content{color:#969696}\n"] }]
1830
1814
  }], function () { return [{ type: i2.AuthService }, { type: i3.StorageService }]; }, { showFavorite: [{
1831
1815
  type: Input
1832
1816
  }], context: [{
@@ -2433,7 +2417,7 @@ ContextListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Contex
2433
2417
  (function () {
2434
2418
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextListComponent, [{
2435
2419
  type: Component,
2436
- args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-list [navigation]=\"true\">\n <mat-form-field *ngIf=\"showFilter()\" [ngClass]=\"auth.authenticated && configService.getConfig('context') ? 'context-filter-min-width' : 'context-filter-max-width'\">\n <input\n matInput\n type=\"text\"\n [placeholder]=\"'igo.context.contextManager.filterPlaceHolder' | translate\"\n [(ngModel)]=\"term\">\n <button\n mat-button\n mat-icon-button\n matSuffix\n class=\"clear-button\"\n *ngIf=\"term.length\"\n aria-label=\"Clear\"\n color=\"warn\"\n (click)=\"clearFilter()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <button\n *ngIf=\"!sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.sortAlphabetically' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(true)\">\n <mat-icon color=\"primary\" svgIcon=\"sort-alphabetical-variant\"></mat-icon>\n </button>\n <button\n *ngIf=\"sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(false)\">\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\n </button>\n\n <igo-actionbar *ngIf=\"auth.authenticated && configService.getConfig('context')\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"plus\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\">\n </igo-actionbar>\n\n <button *ngIf=\"auth.authenticated && configService.getConfig('context')\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\">\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\n </button>\n\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <span class=\"profilsMenu\">\n <mat-checkbox\n class=\"mat-menu-item\"\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"userSelection(user)\">\n </mat-checkbox>\n <button *ngIf=\"user.childs\"\n [matMenuTriggerFor]=\"subAccountMenu\"\n mat-menu-item>\n {{user.title}}\n </button>\n <button\n mat-menu-item\n *ngIf=\"!user.childs\">\n {{user.title}}\n </button>\n </span>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <mat-checkbox *ngFor=\"let child of user.childs\"\n class=\"mat-menu-item\"\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"userSelection(child, user)\">\n {{child.title}}\n </mat-checkbox>\n </mat-menu>\n </ng-container>\n\n <span class=\"profilsMenu\">\n <mat-checkbox\n class=\"mat-menu-item\"\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\">\n </mat-checkbox>\n <button mat-menu-item>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </button>\n </span>\n </mat-menu>\n\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\n\n <igo-collapsible *ngIf=\"groupContexts.value.length && auth.authenticated\" [title]=\"titleMapping[groupContexts.key] | translate\"\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\" (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\">\n\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"context.id && this.defaultContextId && this.defaultContextId === context.id\"\n (edit)=\"edit.emit(context)\"\n (delete)=\"delete.emit(context)\"\n (clone)=\"clone.emit(context)\"\n (save)=\"save.emit(context)\"\n (hide)=\"hideContext(context)\"\n (show)=\"showContext(context)\"\n (favorite)=\"favorite.emit(context)\"\n (manageTools)=\"manageTools.emit(context)\"\n (managePermissions)=\"managePermissions.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\">\n </igo-context-item>\n </ng-template>\n\n </igo-collapsible>\n\n <ng-template *ngIf=\"groupContexts.value.length && !auth.authenticated\" ngFor let-context [ngForOf]=\"groupContexts.value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"configService.getConfig('favoriteContext4NonAuthenticated')\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"configService.getConfig('context') ? defaultContextId === context.id : defaultContextId === context.uri\"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\">\n </igo-context-item>\n </ng-template>\n\n </ng-template>\n</igo-list>\n", styles: [".context-filter-max-width{width:calc(100% - 100px);margin:5px;padding-left:6px}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}mat-form-field{height:40px}.profilsMenu{display:flex}.profilsMenu>mat-checkbox{width:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}\n"] }]
2420
+ args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-list [navigation]=\"true\">\r\n <mat-form-field *ngIf=\"showFilter()\" [ngClass]=\"auth.authenticated && configService.getConfig('context') ? 'context-filter-min-width' : 'context-filter-max-width'\">\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"'igo.context.contextManager.filterPlaceHolder' | translate\"\r\n [(ngModel)]=\"term\">\r\n <button\r\n mat-button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortAlphabetically' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\">\r\n <mat-icon color=\"primary\" svgIcon=\"sort-alphabetical-variant\"></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\">\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar *ngIf=\"auth.authenticated && configService.getConfig('context')\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\">\r\n </igo-actionbar>\r\n\r\n <button *ngIf=\"auth.authenticated && configService.getConfig('context')\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\">\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <span class=\"profilsMenu\">\r\n <mat-checkbox\r\n class=\"mat-menu-item\"\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"userSelection(user)\">\r\n </mat-checkbox>\r\n <button *ngIf=\"user.childs\"\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n mat-menu-item>\r\n {{user.title}}\r\n </button>\r\n <button\r\n mat-menu-item\r\n *ngIf=\"!user.childs\">\r\n {{user.title}}\r\n </button>\r\n </span>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <mat-checkbox *ngFor=\"let child of user.childs\"\r\n class=\"mat-menu-item\"\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"userSelection(child, user)\">\r\n {{child.title}}\r\n </mat-checkbox>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span class=\"profilsMenu\">\r\n <mat-checkbox\r\n class=\"mat-menu-item\"\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\">\r\n </mat-checkbox>\r\n <button mat-menu-item>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </button>\r\n </span>\r\n </mat-menu>\r\n\r\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\r\n\r\n <igo-collapsible *ngIf=\"groupContexts.value.length && auth.authenticated\" [title]=\"titleMapping[groupContexts.key] | translate\"\r\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\" (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\">\r\n\r\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"context.id && this.defaultContextId && this.defaultContextId === context.id\"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\">\r\n </igo-context-item>\r\n </ng-template>\r\n\r\n </igo-collapsible>\r\n\r\n <ng-template *ngIf=\"groupContexts.value.length && !auth.authenticated\" ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"configService.getConfig('favoriteContext4NonAuthenticated')\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"configService.getConfig('context') ? defaultContextId === context.id : defaultContextId === context.uri\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\">\r\n </igo-context-item>\r\n </ng-template>\r\n\r\n </ng-template>\r\n</igo-list>\r\n", styles: [".context-filter-max-width{width:calc(100% - 100px);margin:5px;padding-left:6px}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}mat-form-field{height:40px}.profilsMenu{display:flex}.profilsMenu>mat-checkbox{width:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}\n"] }]
2437
2421
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i3.ConfigService }, { type: i2.AuthService }, { type: i1$3.MatDialog }, { type: i3.LanguageService }, { type: i3.StorageService }]; }, { contexts: [{
2438
2422
  type: Input
2439
2423
  }], selectedContext: [{
@@ -2497,12 +2481,9 @@ class ContextListBindingDirective {
2497
2481
  const map = this.mapService.getMap();
2498
2482
  const contextFromMap = this.contextService.getContextFromMap(map);
2499
2483
  const msgSuccess = () => {
2500
- const translate = this.languageService.translate;
2501
- const message = translate.instant('igo.context.contextManager.dialog.saveMsg', {
2484
+ this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, {
2502
2485
  value: context.title
2503
2486
  });
2504
- const title = translate.instant('igo.context.contextManager.dialog.saveTitle');
2505
- this.messageService.success(message, title);
2506
2487
  };
2507
2488
  if (context.imported) {
2508
2489
  contextFromMap.title = context.title;
@@ -2532,12 +2513,9 @@ class ContextListBindingDirective {
2532
2513
  this.messageService.remove(this.previousMessageId);
2533
2514
  }
2534
2515
  this.contextService.defaultContextId$.next(context.id);
2535
- const translate = this.languageService.translate;
2536
- const message = translate.instant('igo.context.contextManager.dialog.favoriteMsg', {
2516
+ const messageObj = this.messageService.success('igo.context.contextManager.dialog.favoriteMsg', 'igo.context.contextManager.dialog.favoriteTitle', undefined, {
2537
2517
  value: context.title
2538
2518
  });
2539
- const title = translate.instant('igo.context.contextManager.dialog.favoriteTitle');
2540
- const messageObj = this.messageService.success(message, title);
2541
2519
  this.previousMessageId = messageObj.toastId;
2542
2520
  this.cdRef.detectChanges();
2543
2521
  });
@@ -2557,11 +2535,7 @@ class ContextListBindingDirective {
2557
2535
  this.contextService
2558
2536
  .delete(context.id, context.imported)
2559
2537
  .subscribe(() => {
2560
- const message = translate.instant('igo.context.contextManager.dialog.deleteMsg', {
2561
- value: context.title
2562
- });
2563
- const title = translate.instant('igo.context.contextManager.dialog.deleteTitle');
2564
- this.messageService.info(message, title);
2538
+ this.messageService.info('igo.context.contextManager.dialog.deleteMsg', 'igo.context.contextManager.dialog.deleteTitle', undefined, { value: context.title });
2565
2539
  });
2566
2540
  }
2567
2541
  });
@@ -2572,12 +2546,7 @@ class ContextListBindingDirective {
2572
2546
  uri: context.uri + '-copy'
2573
2547
  };
2574
2548
  this.contextService.clone(context.id, properties).subscribe(() => {
2575
- const translate = this.languageService.translate;
2576
- const message = translate.instant('igo.context.contextManager.dialog.cloneMsg', {
2577
- value: context.title
2578
- });
2579
- const title = translate.instant('igo.context.contextManager.dialog.cloneTitle');
2580
- this.messageService.success(message, title);
2549
+ this.messageService.success('igo.context.contextManager.dialog.cloneMsg', 'igo.context.contextManager.dialog.cloneTitle', undefined, { value: context.title });
2581
2550
  });
2582
2551
  }
2583
2552
  onCreate(opts) {
@@ -2585,12 +2554,7 @@ class ContextListBindingDirective {
2585
2554
  const context = this.contextService.getContextFromMap(this.component.map, empty);
2586
2555
  context.title = title;
2587
2556
  this.contextService.create(context).subscribe(() => {
2588
- const translate = this.languageService.translate;
2589
- const titleD = translate.instant('igo.context.bookmarkButton.dialog.createTitle');
2590
- const message = translate.instant('igo.context.bookmarkButton.dialog.createMsg', {
2591
- value: context.title
2592
- });
2593
- this.messageService.success(message, titleD);
2557
+ this.messageService.success('igo.context.bookmarkButton.dialog.createMsg', 'igo.context.bookmarkButton.dialog.createTitle', undefined, { value: context.title });
2594
2558
  this.contextService.loadContext(context.uri);
2595
2559
  });
2596
2560
  }
@@ -2745,9 +2709,8 @@ function ContextFormComponent_span_8_Template(rf, ctx) {
2745
2709
  }
2746
2710
  }
2747
2711
  class ContextFormComponent {
2748
- constructor(formBuilder, languageService, messageService) {
2712
+ constructor(formBuilder, messageService) {
2749
2713
  this.formBuilder = formBuilder;
2750
- this.languageService = languageService;
2751
2714
  this.messageService = messageService;
2752
2715
  this._disabled = false;
2753
2716
  // TODO: replace any by ContextOptions or Context
@@ -2793,10 +2756,7 @@ class ContextFormComponent {
2793
2756
  const text = this.prefix + '-' + this.form.value.uri.replace(' ', '');
2794
2757
  const successful = Clipboard.copy(text);
2795
2758
  if (successful) {
2796
- const translate = this.languageService.translate;
2797
- const title = translate.instant('igo.context.contextManager.dialog.copyTitle');
2798
- const msg = translate.instant('igo.context.contextManager.dialog.copyMsg');
2799
- this.messageService.success(msg, title);
2759
+ this.messageService.success('igo.context.contextManager.dialog.copyMsg', 'igo.context.contextManager.dialog.copyTitle');
2800
2760
  }
2801
2761
  }
2802
2762
  buildForm() {
@@ -2810,7 +2770,7 @@ class ContextFormComponent {
2810
2770
  });
2811
2771
  }
2812
2772
  }
2813
- ContextFormComponent.ɵfac = function ContextFormComponent_Factory(t) { return new (t || ContextFormComponent)(i0.ɵɵdirectiveInject(i1$2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService)); };
2773
+ ContextFormComponent.ɵfac = function ContextFormComponent_Factory(t) { return new (t || ContextFormComponent)(i0.ɵɵdirectiveInject(i1$2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.MessageService)); };
2814
2774
  ContextFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextFormComponent, selectors: [["igo-context-form"]], inputs: { btnSubmitText: "btnSubmitText", context: "context", disabled: "disabled" }, outputs: { submitForm: "submitForm", clone: "clone", delete: "delete" }, decls: 19, vars: 18, consts: [[1, "igo-form", 3, "formGroup", "ngSubmit"], [1, "full-width"], ["matInput", "", "required", "", "maxlength", "128", "formControlName", "title", 3, "placeholder"], ["id", "uriInput", 1, "full-width"], ["class", "prefix", 4, "ngIf"], [1, "fieldWrapper"], ["matInput", "", "maxlength", "64", "floatLabel", "always", "formControlName", "uri", 3, "placeholder"], ["id", "copyButton", "type", "button", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "content-copy"], [1, "igo-form-button-group"], ["mat-raised-button", "", "type", "submit", 3, "disabled"], [1, "prefix"]], template: function ContextFormComponent_Template(rf, ctx) {
2815
2775
  if (rf & 1) {
2816
2776
  i0.ɵɵelementStart(0, "form", 0);
@@ -2859,8 +2819,8 @@ ContextFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Contex
2859
2819
  (function () {
2860
2820
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextFormComponent, [{
2861
2821
  type: Component,
2862
- args: [{ selector: 'igo-context-form', template: "<form class=\"igo-form\" [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\">\n\n <mat-form-field class=\"full-width\">\n <input matInput required\n maxlength=\"128\"\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\">\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field id=\"uriInput\" class=\"full-width\">\n <span *ngIf=\"prefix\" class=\"prefix\">{{prefix}}-</span>\n <span class=\"fieldWrapper\">\n <input matInput\n maxlength=\"64\"\n floatLabel = \"always\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\">\n </span>\n </mat-form-field>\n\n <button\n id=\"copyButton\"\n type=\"button\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard()\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid || disabled\">\n {{ 'igo.context.contextManager.form.edit' | translate }}\n </button>\n </div>\n\n</form>\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"] }]
2863
- }], function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i3.LanguageService }, { type: i3.MessageService }]; }, { btnSubmitText: [{
2822
+ args: [{ selector: 'igo-context-form', template: "<form class=\"igo-form\" [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\">\r\n\r\n <mat-form-field class=\"full-width\">\r\n <input matInput required\r\n maxlength=\"128\"\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\">\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field id=\"uriInput\" class=\"full-width\">\r\n <span *ngIf=\"prefix\" class=\"prefix\">{{prefix}}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input matInput\r\n maxlength=\"64\"\r\n floatLabel = \"always\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\">\r\n </span>\r\n </mat-form-field>\r\n\r\n <button\r\n id=\"copyButton\"\r\n type=\"button\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard()\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid || disabled\">\r\n {{ 'igo.context.contextManager.form.edit' | translate }}\r\n </button>\r\n </div>\r\n\r\n</form>\r\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"] }]
2823
+ }], function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i3.MessageService }]; }, { btnSubmitText: [{
2864
2824
  type: Input
2865
2825
  }], context: [{
2866
2826
  type: Input
@@ -2916,7 +2876,7 @@ ContextEditComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Contex
2916
2876
  (function () {
2917
2877
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextEditComponent, [{
2918
2878
  type: Component,
2919
- args: [{ selector: 'igo-context-edit', template: "<igo-context-form *ngIf=\"context\"\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n [context]=\"context\"\n (submitForm)=\"submitForm.emit($event)\">\n</igo-context-form>\n" }]
2879
+ args: [{ selector: 'igo-context-edit', template: "<igo-context-form *ngIf=\"context\"\r\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\r\n [context]=\"context\"\r\n (submitForm)=\"submitForm.emit($event)\">\r\n</igo-context-form>\r\n" }]
2920
2880
  }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { context: [{
2921
2881
  type: Input
2922
2882
  }], submitForm: [{
@@ -2925,22 +2885,18 @@ ContextEditComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Contex
2925
2885
  })();
2926
2886
 
2927
2887
  class ContextEditBindingDirective {
2928
- constructor(component, contextService, messageService, languageService) {
2888
+ constructor(component, contextService, messageService) {
2929
2889
  this.contextService = contextService;
2930
2890
  this.messageService = messageService;
2931
- this.languageService = languageService;
2932
2891
  this.submitSuccessed = new EventEmitter();
2933
2892
  this.component = component;
2934
2893
  }
2935
2894
  onEdit(context) {
2936
2895
  const id = this.component.context.id;
2937
2896
  this.contextService.update(id, context).subscribe(() => {
2938
- const translate = this.languageService.translate;
2939
- const message = translate.instant('igo.context.contextManager.dialog.saveMsg', {
2897
+ this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, {
2940
2898
  value: context.title || this.component.context.title
2941
2899
  });
2942
- const title = translate.instant('igo.context.contextManager.dialog.saveTitle');
2943
- this.messageService.success(message, title);
2944
2900
  this.contextService.setEditedContext(undefined);
2945
2901
  this.submitSuccessed.emit(context);
2946
2902
  });
@@ -2955,7 +2911,7 @@ class ContextEditBindingDirective {
2955
2911
  this.component.context = context;
2956
2912
  }
2957
2913
  }
2958
- ContextEditBindingDirective.ɵfac = function ContextEditBindingDirective_Factory(t) { return new (t || ContextEditBindingDirective)(i0.ɵɵdirectiveInject(ContextEditComponent, 2), i0.ɵɵdirectiveInject(ContextService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i3.LanguageService)); };
2914
+ ContextEditBindingDirective.ɵfac = function ContextEditBindingDirective_Factory(t) { return new (t || ContextEditBindingDirective)(i0.ɵɵdirectiveInject(ContextEditComponent, 2), i0.ɵɵdirectiveInject(ContextService), i0.ɵɵdirectiveInject(i3.MessageService)); };
2959
2915
  ContextEditBindingDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: ContextEditBindingDirective, selectors: [["", "igoContextEditBinding", ""]], hostBindings: function ContextEditBindingDirective_HostBindings(rf, ctx) {
2960
2916
  if (rf & 1) {
2961
2917
  i0.ɵɵlistener("submitForm", function ContextEditBindingDirective_submitForm_HostBindingHandler($event) { return ctx.onEdit($event); });
@@ -2970,7 +2926,7 @@ ContextEditBindingDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type:
2970
2926
  }], function () {
2971
2927
  return [{ type: ContextEditComponent, decorators: [{
2972
2928
  type: Self
2973
- }] }, { type: ContextService }, { type: i3.MessageService }, { type: i3.LanguageService }];
2929
+ }] }, { type: ContextService }, { type: i3.MessageService }];
2974
2930
  }, { submitSuccessed: [{
2975
2931
  type: Output
2976
2932
  }], onEdit: [{
@@ -3289,7 +3245,7 @@ ContextPermissionsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
3289
3245
  (function () {
3290
3246
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextPermissionsComponent, [{
3291
3247
  type: Component,
3292
- args: [{ selector: 'igo-context-permissions', template: "<div *ngIf=\"context\">\n\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\n </div>\n\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\n <mat-radio-group [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\">\n <mat-radio-button value=\"private\">\n {{ 'igo.context.permission.scope.private' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"protected\">\n {{ 'igo.context.permission.scope.shared' | translate }}\n </mat-radio-button>\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\n {{ 'igo.context.permission.scope.public' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <form *ngIf=\"context.scope !== 'private' && canWrite\" [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\">\n\n <mat-form-field class=\"full-width\">\n <input matInput required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\">\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\n {{profil.title}}<br>\n <small class=\"mat-typography\">{{profil.name}}</small>\n </mat-option>\n </mat-autocomplete>\n <mat-error>\n {{ 'igo.context.permission.profilRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n\n <mat-radio-group formControlName=\"typePermission\">\n <mat-radio-button value=\"read\">\n {{ 'igo.context.permission.read' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"write\">\n {{ 'igo.context.permission.write' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\n\n </form>\n\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\n <igo-collapsible\n *ngIf=\"groupPermissions.value.length\"\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\">\n\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\n <mat-list-item>\n <mat-icon mat-list-avatar svgIcon=\"account-outline\"></mat-icon>\n <h4 mat-line>{{permission.profilTitle}} <small class=\"mat-typography\">{{permission.profil}}</small></h4>\n\n <div igoStopPropagation\n class=\"igo-actions-container\">\n\n <button *ngIf=\"canWrite || permission.profil === authService.decodeToken().user.sourceId\"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}mat-option ::ng-deep .mat-option-text{line-height:normal;line-height:initial}\n"] }]
3248
+ args: [{ selector: 'igo-context-permissions', template: "<div *ngIf=\"context\">\r\n\r\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\r\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\r\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\r\n </div>\r\n\r\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\r\n <mat-radio-group [(ngModel)]=\"context.scope\"\r\n (change)=\"scopeChanged.emit(context)\">\r\n <mat-radio-button value=\"private\">\r\n {{ 'igo.context.permission.scope.private' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"protected\">\r\n {{ 'igo.context.permission.scope.shared' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\r\n {{ 'igo.context.permission.scope.public' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <form *ngIf=\"context.scope !== 'private' && canWrite\" [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\">\r\n\r\n <mat-form-field class=\"full-width\">\r\n <input matInput required\r\n [placeholder]=\"'igo.context.permission.user' | translate\"\r\n [formControl]=\"formControl\"\r\n [matAutocomplete]=\"auto\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onProfilSelected($event.option.value)\"\r\n [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\r\n {{profil.title}}<br>\r\n <small class=\"mat-typography\">{{profil.name}}</small>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error>\r\n {{ 'igo.context.permission.profilRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n\r\n <mat-radio-group formControlName=\"typePermission\">\r\n <mat-radio-button value=\"read\">\r\n {{ 'igo.context.permission.read' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"write\">\r\n {{ 'igo.context.permission.write' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid\">\r\n {{ 'igo.context.permission.addBtn' | translate }}\r\n </button>\r\n </div>\r\n\r\n </form>\r\n\r\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\r\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupPermissions.value.length\"\r\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\">\r\n\r\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\r\n <mat-list-item>\r\n <mat-icon mat-list-avatar svgIcon=\"account-outline\"></mat-icon>\r\n <h4 mat-line>{{permission.profilTitle}} <small class=\"mat-typography\">{{permission.profil}}</small></h4>\r\n\r\n <div igoStopPropagation\r\n class=\"igo-actions-container\">\r\n\r\n <button *ngIf=\"canWrite || permission.profil === authService.decodeToken().user.sourceId\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n color=\"warn\"\r\n (click)=\"removePermission.emit(permission)\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n </mat-list-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n </ng-template>\r\n </igo-list>\r\n\r\n</div>\r\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}mat-option ::ng-deep .mat-option-text{line-height:normal;line-height:initial}\n"] }]
3293
3249
  }], function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.ConfigService }]; }, { context: [{
3294
3250
  type: Input
3295
3251
  }], permissions: [{
@@ -3312,11 +3268,8 @@ class ContextPermissionsBindingDirective {
3312
3268
  this.component = component;
3313
3269
  }
3314
3270
  onAddPermission(permission) {
3315
- const translate = this.languageService.translate;
3316
3271
  if (!permission.profil) {
3317
- const message = translate.instant('igo.context.contextManager.errors.addPermissionEmpty');
3318
- const title = translate.instant('igo.context.contextManager.errors.addPermissionTitle');
3319
- this.messageService.error(message, title);
3272
+ this.messageService.error('igo.context.contextManager.errors.addPermissionEmpty', 'igo.context.contextManager.errors.addPermissionTitle');
3320
3273
  return;
3321
3274
  }
3322
3275
  const contextId = this.component.context.id;
@@ -3327,11 +3280,7 @@ class ContextPermissionsBindingDirective {
3327
3280
  this.component.permissions[permission.typePermission].push(p);
3328
3281
  }
3329
3282
  const profil = permission.profil;
3330
- const message = translate.instant('igo.context.permission.dialog.addMsg', {
3331
- value: profil
3332
- });
3333
- const title = translate.instant('igo.context.permission.dialog.addTitle');
3334
- this.messageService.success(message, title);
3283
+ this.messageService.success('igo.context.permission.dialog.addMsg', 'igo.context.permission.dialog.addTitle', undefined, { value: profil });
3335
3284
  this.cd.detectChanges();
3336
3285
  });
3337
3286
  }
@@ -3345,24 +3294,14 @@ class ContextPermissionsBindingDirective {
3345
3294
  });
3346
3295
  this.component.permissions[permission.typePermission].splice(index, 1);
3347
3296
  const profil = permission.profil;
3348
- const translate = this.languageService.translate;
3349
- const message = translate.instant('igo.context.permission.dialog.deleteMsg', {
3350
- value: profil
3351
- });
3352
- const title = translate.instant('igo.context.permission.dialog.deleteTitle');
3353
- this.messageService.success(message, title);
3297
+ this.messageService.success('igo.context.permission.dialog.deleteMsg', 'igo.context.permission.dialog.deleteTitle', undefined, { value: profil });
3354
3298
  this.cd.detectChanges();
3355
3299
  });
3356
3300
  }
3357
3301
  onScopeChanged(context) {
3358
3302
  const scope = context.scope;
3359
3303
  this.contextService.update(context.id, { scope }).subscribe(() => {
3360
- const translate = this.languageService.translate;
3361
- const message = translate.instant('igo.context.permission.dialog.scopeChangedMsg', {
3362
- value: translate.instant('igo.context.permission.scope.' + scope)
3363
- });
3364
- const title = translate.instant('igo.context.permission.dialog.scopeChangedTitle');
3365
- this.messageService.success(message, title);
3304
+ this.messageService.success('igo.context.permission.dialog.scopeChangedMsg', 'igo.context.permission.dialog.scopeChangedTitle', undefined, { value: 'igo.context.permission.scope.' + scope });
3366
3305
  });
3367
3306
  }
3368
3307
  ngOnInit() {
@@ -3421,10 +3360,9 @@ ContextPermissionsBindingDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective(
3421
3360
  })();
3422
3361
 
3423
3362
  class BookmarkButtonComponent {
3424
- constructor(dialog, contextService, languageService, messageService) {
3363
+ constructor(dialog, contextService, messageService) {
3425
3364
  this.dialog = dialog;
3426
3365
  this.contextService = contextService;
3427
- this.languageService = languageService;
3428
3366
  this.messageService = messageService;
3429
3367
  }
3430
3368
  get map() {
@@ -3449,19 +3387,14 @@ class BookmarkButtonComponent {
3449
3387
  const context = this.contextService.getContextFromMap(this.map);
3450
3388
  context.title = title;
3451
3389
  this.contextService.create(context).subscribe(() => {
3452
- const translate = this.languageService.translate;
3453
- const titleD = translate.instant('igo.context.bookmarkButton.dialog.createTitle');
3454
- const message = translate.instant('igo.context.bookmarkButton.dialog.createMsg', {
3455
- value: context.title
3456
- });
3457
- this.messageService.success(message, titleD);
3390
+ this.messageService.success('igo.context.bookmarkButton.dialog.createMsg', 'igo.context.bookmarkButton.dialog.createTitle', undefined, { value: context.title });
3458
3391
  this.contextService.loadContext(context.uri);
3459
3392
  });
3460
3393
  }
3461
3394
  });
3462
3395
  }
3463
3396
  }
3464
- BookmarkButtonComponent.ɵfac = function BookmarkButtonComponent_Factory(t) { return new (t || BookmarkButtonComponent)(i0.ɵɵdirectiveInject(i1$3.MatDialog), i0.ɵɵdirectiveInject(ContextService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService)); };
3397
+ BookmarkButtonComponent.ɵfac = function BookmarkButtonComponent_Factory(t) { return new (t || BookmarkButtonComponent)(i0.ɵɵdirectiveInject(i1$3.MatDialog), i0.ɵɵdirectiveInject(ContextService), i0.ɵɵdirectiveInject(i3.MessageService)); };
3465
3398
  BookmarkButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BookmarkButtonComponent, selectors: [["igo-bookmark-button"]], inputs: { map: "map", color: "color" }, decls: 4, vars: 4, consts: [[1, "igo-bookmark-button-container"], ["mat-icon-button", "", "matTooltipPosition", "above", 3, "matTooltip", "color", "click"], ["svgIcon", "star"]], template: function BookmarkButtonComponent_Template(rf, ctx) {
3466
3399
  if (rf & 1) {
3467
3400
  i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
@@ -3478,8 +3411,8 @@ BookmarkButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Boo
3478
3411
  (function () {
3479
3412
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BookmarkButtonComponent, [{
3480
3413
  type: Component,
3481
- args: [{ selector: 'igo-bookmark-button', template: "<div class=\"igo-bookmark-button-container\">\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"createContext()\">\n <mat-icon svgIcon=\"star\"></mat-icon>\n </button>\n</div>\n", styles: [".igo-bookmark-button-container{width:40px}.igo-bookmark-button-container button{background-color:#fff}.igo-bookmark-button-container button:hover{background-color:#efefef}button,:host ::ng-deep button .mat-button-ripple-round{border-radius:0}\n"] }]
3482
- }], function () { return [{ type: i1$3.MatDialog }, { type: ContextService }, { type: i3.LanguageService }, { type: i3.MessageService }]; }, { map: [{
3414
+ args: [{ selector: 'igo-bookmark-button', template: "<div class=\"igo-bookmark-button-container\">\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"createContext()\">\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [".igo-bookmark-button-container{width:40px}.igo-bookmark-button-container button{background-color:#fff}.igo-bookmark-button-container button:hover{background-color:#efefef}button,:host ::ng-deep button .mat-button-ripple-round{border-radius:0}\n"] }]
3415
+ }], function () { return [{ type: i1$3.MatDialog }, { type: ContextService }, { type: i3.MessageService }]; }, { map: [{
3483
3416
  type: Input
3484
3417
  }], color: [{
3485
3418
  type: Input
@@ -3529,7 +3462,7 @@ PoiDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoiDialo
3529
3462
  (function () {
3530
3463
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoiDialogComponent, [{
3531
3464
  type: Component,
3532
- args: [{ selector: 'igo-poi-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{ 'igo.context.poiButton.dialog.title' | translate }}</h1>\n<div mat-dialog-content>\n <mat-form-field>\n <input matInput required autocomplete=\"off\"\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button mat-button color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\">\n {{'igo.common.confirmDialog.confirmBtn' | translate}}\n </button>\n <button mat-button\n (click)=\"dialogRef.close(false)\">\n {{'igo.common.confirmDialog.cancelBtn' |\u00A0translate}}\n </button>\n</div>\n" }]
3465
+ args: [{ selector: 'igo-poi-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{ 'igo.context.poiButton.dialog.title' | translate }}</h1>\r\n<div mat-dialog-content>\r\n <mat-form-field>\r\n <input matInput required autocomplete=\"off\"\r\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\r\n [(ngModel)]=\"title\">\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button mat-button color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\">\r\n {{'igo.common.confirmDialog.confirmBtn' | translate}}\r\n </button>\r\n <button mat-button\r\n (click)=\"dialogRef.close(false)\">\r\n {{'igo.common.confirmDialog.cancelBtn' |\u00A0translate}}\r\n </button>\r\n</div>\r\n" }]
3533
3466
  }], function () { return [{ type: i1$3.MatDialogRef }]; }, null);
3534
3467
  })();
3535
3468
 
@@ -3616,17 +3549,12 @@ class PoiButtonComponent {
3616
3549
  }
3617
3550
  deletePoi(poi) {
3618
3551
  if (poi && poi.id) {
3619
- const translate = this.languageService.translate;
3620
3552
  this.confirmDialogService
3621
- .open(translate.instant('igo.context.poiButton.dialog.confirmDelete'))
3553
+ .open(this.languageService.translate.instant('igo.context.poiButton.dialog.confirmDelete'))
3622
3554
  .subscribe(confirm => {
3623
3555
  if (confirm) {
3624
3556
  this.poiService.delete(poi.id).subscribe(() => {
3625
- const title = translate.instant('igo.context.poiButton.dialog.deleteTitle');
3626
- const message = translate.instant('igo.context.poiButton.dialog.deleteMsg', {
3627
- value: poi.title
3628
- });
3629
- this.messageService.info(message, title);
3557
+ this.messageService.info('igo.context.poiButton.dialog.deleteMsg', 'igo.context.poiButton.dialog.deleteTitle', undefined, { value: poi.title });
3630
3558
  this.pois = this.pois.filter(p => p.id !== poi.id);
3631
3559
  }, err => {
3632
3560
  err.error.title = 'DELETE Pois';
@@ -3661,12 +3589,7 @@ class PoiButtonComponent {
3661
3589
  if (title) {
3662
3590
  poi.title = title;
3663
3591
  this.poiService.create(poi).subscribe(newPoi => {
3664
- const translate = this.languageService.translate;
3665
- const titleD = translate.instant('igo.context.poiButton.dialog.createTitle');
3666
- const message = translate.instant('igo.context.poiButton.dialog.createMsg', {
3667
- value: poi.title
3668
- });
3669
- this.messageService.success(message, titleD);
3592
+ this.messageService.success('igo.context.poiButton.dialog.createMsg', 'igo.context.poiButton.dialog.createTitle', undefined, { value: poi.title });
3670
3593
  poi.id = newPoi.id;
3671
3594
  this.pois.push(poi);
3672
3595
  }, err => {
@@ -3716,7 +3639,7 @@ PoiButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoiButto
3716
3639
  (function () {
3717
3640
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoiButtonComponent, [{
3718
3641
  type: Component,
3719
- args: [{ selector: 'igo-poi-button', template: "<mat-select [placeholder]=\"'igo.context.poiButton.placeholder' |\u00A0translate\"\n floatPlaceholder=\"never\">\n\n <mat-option (click)=\"createPoi()\">\n <div class=\"titlePoi\">{{ 'igo.context.poiButton.create' |\u00A0translate }}</div>\n <button igoStopPropagation class=\"addPoi buttonPoi\"\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\">\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-option *ngFor=\"let poi of pois\" [value]=\"poi.id\" (click)=\"zoomOnPoi(poi.id)\">\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button igoStopPropagation class=\"deletePoi buttonPoi\"\n mat-icon-button\n color=\"warn\"\n (click)=\"deletePoi(poi)\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: ["mat-select{width:150px;background-color:#fff;height:40px;padding-top:0}mat-select ::ng-deep .mat-select-trigger{height:40px}mat-select ::ng-deep .mat-select-value-text,mat-select ::ng-deep .mat-select-placeholder{padding:5px;position:relative}.mat-option{text-overflow:inherit}.titlePoi{max-width:135px;overflow:hidden;text-overflow:ellipsis;float:left}.buttonPoi{float:right;margin:4px -10px 4px 0}.buttonPoi ::ng-deep .mat-icon{margin:0 8px}\n"] }]
3642
+ args: [{ selector: 'igo-poi-button', template: "<mat-select [placeholder]=\"'igo.context.poiButton.placeholder' |\u00A0translate\"\r\n floatPlaceholder=\"never\">\r\n\r\n <mat-option (click)=\"createPoi()\">\r\n <div class=\"titlePoi\">{{ 'igo.context.poiButton.create' |\u00A0translate }}</div>\r\n <button igoStopPropagation class=\"addPoi buttonPoi\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"createPoi()\">\r\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n <mat-option *ngFor=\"let poi of pois\" [value]=\"poi.id\" (click)=\"zoomOnPoi(poi.id)\">\r\n <div class=\"titlePoi\">{{ poi.title }}</div>\r\n <button igoStopPropagation class=\"deletePoi buttonPoi\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"deletePoi(poi)\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n</mat-select>\r\n", styles: ["mat-select{width:150px;background-color:#fff;height:40px;padding-top:0}mat-select ::ng-deep .mat-select-trigger{height:40px}mat-select ::ng-deep .mat-select-value-text,mat-select ::ng-deep .mat-select-placeholder{padding:5px;position:relative}.mat-option{text-overflow:inherit}.titlePoi{max-width:135px;overflow:hidden;text-overflow:ellipsis;float:left}.buttonPoi{float:right;margin:4px -10px 4px 0}.buttonPoi ::ng-deep .mat-icon{margin:0 8px}\n"] }]
3720
3643
  }], function () { return [{ type: i1$3.MatDialog }, { type: i2.AuthService }, { type: PoiService }, { type: i3.MessageService }, { type: i3.LanguageService }, { type: i13.ConfirmDialogService }]; }, { map: [{
3721
3644
  type: Input
3722
3645
  }], color: [{
@@ -3784,7 +3707,7 @@ UserDialogComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserDia
3784
3707
  (function () {
3785
3708
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserDialogComponent, [{
3786
3709
  type: Component,
3787
- args: [{ selector: 'igo-user-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{'igo.context.userButton.infoTitle' | translate}}</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <p>{{'igo.context.userButton.dialog.user' | translate}}: {{user.sourceId}}</p>\n <p>{{'igo.context.userButton.dialog.email' | translate}}: {{user.email}}</p>\n <p>{{'igo.context.userButton.dialog.expiration' | translate}}: {{exp}}</p>\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\n {{'igo.context.userButton.dialog.clearPreferences' | translate}}\n </button>\n <br>\n</div>\n<div mat-dialog-actions style=\"justify-content: center\">\n <button mat-raised-button color=\"primary\"\n (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n" }]
3710
+ args: [{ selector: 'igo-user-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">{{'igo.context.userButton.infoTitle' | translate}}</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <p>{{'igo.context.userButton.dialog.user' | translate}}: {{user.sourceId}}</p>\r\n <p>{{'igo.context.userButton.dialog.email' | translate}}: {{user.email}}</p>\r\n <p>{{'igo.context.userButton.dialog.expiration' | translate}}: {{exp}}</p>\r\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\r\n {{'igo.context.userButton.dialog.clearPreferences' | translate}}\r\n </button>\r\n <br>\r\n</div>\r\n<div mat-dialog-actions style=\"justify-content: center\">\r\n <button mat-raised-button color=\"primary\"\r\n (click)=\"dialogRef.close(false)\">\r\n OK\r\n </button>\r\n</div>\r\n" }]
3788
3711
  }], function () { return [{ type: i1$3.MatDialogRef }, { type: i2.AuthService }, { type: i3.StorageService }]; }, null);
3789
3712
  })();
3790
3713
 
@@ -3898,7 +3821,7 @@ UserButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserBut
3898
3821
  (function () {
3899
3822
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserButtonComponent, [{
3900
3823
  type: Component,
3901
- args: [{ selector: 'igo-user-button', animations: [userButtonSlideInOut()], template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\n <div class=\"igo-user-button-more-container\" [@userButtonState]=\"expand ? 'expand' : 'collapse'\">\n\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"infoUser()\">\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.logout' |\u00A0translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"logout()\">\n <mat-icon svgIcon=\"power\"></mat-icon>\n </button>\n\n </div>\n\n <button\n mat-icon-button\n [color]=\"auth.authenticated ? color : 'warn'\"\n (click)=\"accountClick()\">\n <mat-icon svgIcon=\"account-box\"></mat-icon>\n </button>\n</div>\n", styles: [".igo-user-button-container button{background-color:#fff}.igo-user-button-container button:hover{background-color:#efefef}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.igo-user-button-container>button{position:absolute;bottom:0}}.igo-user-button-more-container{float:left;height:40px}.igo-user-button-more-container>*{margin-right:2px;float:left}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.igo-user-button-more-container{height:80px;width:150px;position:relative;left:24px}}button,:host ::ng-deep button .mat-button-ripple-round{border-radius:0}\n"] }]
3824
+ args: [{ selector: 'igo-user-button', animations: [userButtonSlideInOut()], template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\r\n <div class=\"igo-user-button-more-container\" [@userButtonState]=\"expand ? 'expand' : 'collapse'\">\r\n\r\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"infoUser()\">\r\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.logout' |\u00A0translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"logout()\">\r\n <mat-icon svgIcon=\"power\"></mat-icon>\r\n </button>\r\n\r\n </div>\r\n\r\n <button\r\n mat-icon-button\r\n [color]=\"auth.authenticated ? color : 'warn'\"\r\n (click)=\"accountClick()\">\r\n <mat-icon svgIcon=\"account-box\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [".igo-user-button-container button{background-color:#fff}.igo-user-button-container button:hover{background-color:#efefef}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.igo-user-button-container>button{position:absolute;bottom:0}}.igo-user-button-more-container{float:left;height:40px}.igo-user-button-more-container>*{margin-right:2px;float:left}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.igo-user-button-more-container{height:80px;width:150px;position:relative;left:24px}}button,:host ::ng-deep button .mat-button-ripple-round{border-radius:0}\n"] }]
3902
3825
  }], function () { return [{ type: i1$3.MatDialog }, { type: i3.ConfigService }, { type: i2.AuthService }]; }, { map: [{
3903
3826
  type: Input
3904
3827
  }], color: [{
@@ -4597,7 +4520,7 @@ ShareMapUrlComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareM
4597
4520
  (function () {
4598
4521
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareMapUrlComponent, [{
4599
4522
  type: Component,
4600
- args: [{ selector: 'igo-share-map-url', template: "<div class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea #textArea matInput readonly rows=\"3\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"></textarea>\n </mat-form-field>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n {{ 'igo.context.shareMap.copy' | translate }}\n </button>\n </div>\n <div>\n <br/>\n <section class=\"mat-typography\">\n <div *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate)===''\">\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate)!==''\">{{'igo.context.shareMap.included' | translate}}</h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.context' | translate)!==''\">{{'igo.context.shareMap.context' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.center' | translate)!==''\">{{'igo.context.shareMap.center' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate)!==''\">{{'igo.context.shareMap.zoom' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate)!==''\">{{'igo.context.shareMap.addedLayers' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate)!==''\">{{'igo.context.shareMap.visibleInvisible' | translate}}</li>\n </ul>\n\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate)!==''\">{{'igo.context.shareMap.excluded' | translate}}</h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.order' | translate)!==''\">{{'igo.context.shareMap.order' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate)!==''\">{{'igo.context.shareMap.opacity' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate)!==''\">{{'igo.context.shareMap.filterOgc' | translate}}</li>\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate)!==''\">{{'igo.context.shareMap.filterTime' | translate}}</li>\n </ul>\n </div>\n <igo-custom-html class=\"shareCustomPadding\" *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate)!==''\" class=\"mat-typography\"\n [html]=\"('igo.context.shareMap.htmlClarifications' | translate)\">\n </igo-custom-html>\n </section>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"] }]
4523
+ args: [{ selector: 'igo-share-map-url', template: "<div class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea #textArea matInput readonly rows=\"3\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"></textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n (click)=\"copyTextToClipboard(textArea)\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n {{ 'igo.context.shareMap.copy' | translate }}\r\n </button>\r\n </div>\r\n <div>\r\n <br/>\r\n <section class=\"mat-typography\">\r\n <div *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate)===''\">\r\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate)!==''\">{{'igo.context.shareMap.included' | translate}}</h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.context' | translate)!==''\">{{'igo.context.shareMap.context' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.center' | translate)!==''\">{{'igo.context.shareMap.center' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate)!==''\">{{'igo.context.shareMap.zoom' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate)!==''\">{{'igo.context.shareMap.addedLayers' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate)!==''\">{{'igo.context.shareMap.visibleInvisible' | translate}}</li>\r\n </ul>\r\n\r\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate)!==''\">{{'igo.context.shareMap.excluded' | translate}}</h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.order' | translate)!==''\">{{'igo.context.shareMap.order' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate)!==''\">{{'igo.context.shareMap.opacity' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate)!==''\">{{'igo.context.shareMap.filterOgc' | translate}}</li>\r\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate)!==''\">{{'igo.context.shareMap.filterTime' | translate}}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html class=\"shareCustomPadding\" *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate)!==''\" class=\"mat-typography\"\r\n [html]=\"('igo.context.shareMap.htmlClarifications' | translate)\">\r\n </igo-custom-html>\r\n </section>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"] }]
4601
4524
  }], function () { return [{ type: i3.MessageService }, { type: ShareMapService }, { type: i0.ChangeDetectorRef }]; }, { map: [{
4602
4525
  type: Input
4603
4526
  }] });
@@ -4686,11 +4609,7 @@ class ShareMapApiComponent {
4686
4609
  this.url = this.shareMapService.getUrlWithApi(inputs);
4687
4610
  this.shareMapService.createContextShared(this.map, inputs).subscribe(rep => {
4688
4611
  this.idContextShared = rep.id;
4689
- const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
4690
- const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
4691
- value: inputs.title
4692
- });
4693
- this.messageService.success(msg, title);
4612
+ this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, { value: inputs.title });
4694
4613
  }, err => {
4695
4614
  err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
4696
4615
  this.messageService.showError(err);
@@ -4700,11 +4619,7 @@ class ShareMapApiComponent {
4700
4619
  const inputs = Object.assign({}, values);
4701
4620
  inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
4702
4621
  this.shareMapService.updateContextShared(this.map, inputs, this.idContextShared).subscribe(rep => {
4703
- const title = this.languageService.translate.instant('igo.context.contextManager.dialog.saveTitle');
4704
- const msg = this.languageService.translate.instant('igo.context.contextManager.dialog.saveMsg', {
4705
- value: inputs.title
4706
- });
4707
- this.messageService.success(msg, title);
4622
+ this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, { value: inputs.title });
4708
4623
  }, err => {
4709
4624
  err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
4710
4625
  this.messageService.showError(err);
@@ -4713,10 +4628,7 @@ class ShareMapApiComponent {
4713
4628
  copyTextToClipboard(textArea) {
4714
4629
  const successful = Clipboard.copy(textArea);
4715
4630
  if (successful) {
4716
- const translate = this.languageService.translate;
4717
- const title = translate.instant('igo.context.shareMap.dialog.copyTitle');
4718
- const msg = translate.instant('igo.context.shareMap.dialog.copyMsg');
4719
- this.messageService.success(msg, title);
4631
+ this.messageService.success('igo.context.shareMap.dialog.copyMsg', 'igo.context.shareMap.dialog.copyTitle');
4720
4632
  }
4721
4633
  }
4722
4634
  buildForm() {
@@ -4781,7 +4693,7 @@ ShareMapApiComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareM
4781
4693
  (function () {
4782
4694
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareMapApiComponent, [{
4783
4695
  type: Component,
4784
- args: [{ selector: 'igo-share-map-api', template: "<form class=\"igo-form\" [formGroup]=\"form\"\n (ngSubmit)=\"createUrl(form.value)\">\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input matInput required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\">\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div id=\"uriInput\" class=\"igo-input-container\">\n <mat-form-field>\n <span *ngIf=\"userId\" class=\"prefix\">{{userId}}-</span>\n <span class=\"fieldWrapper\">\n <input matInput required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\">\n </span>\n <mat-error>\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\">\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\">\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\n </button>\n </div>\n</form>\n\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea #textArea matInput readonly rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"></textarea>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </mat-form-field>\n<div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
4696
+ args: [{ selector: 'igo-share-map-api', template: "<form class=\"igo-form\" [formGroup]=\"form\"\r\n (ngSubmit)=\"createUrl(form.value)\">\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input matInput required\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\">\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div id=\"uriInput\" class=\"igo-input-container\">\r\n <mat-form-field>\r\n <span *ngIf=\"userId\" class=\"prefix\">{{userId}}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input matInput required\r\n [readonly]=\"!userId\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\">\r\n </span>\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button *ngIf=\"!url\"\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid\">\r\n {{ 'igo.context.shareMap.button' | translate }}\r\n </button>\r\n <button *ngIf=\"url\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"updateContextShared(form.value)\">\r\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\r\n </button>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea #textArea matInput readonly rows=\"3\"\r\n class=\"textAreaWithButton\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"></textarea>\r\n <button\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard(textArea)\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n<div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
4785
4697
  }], function () { return [{ type: i3.LanguageService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: ShareMapService }, { type: i1$2.UntypedFormBuilder }]; }, { map: [{
4786
4698
  type: Input
4787
4699
  }] });
@@ -4841,7 +4753,7 @@ ShareMapComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ShareMapC
4841
4753
  (function () {
4842
4754
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ShareMapComponent, [{
4843
4755
  type: Component,
4844
- args: [{ selector: 'igo-share-map', template: "<mat-tab-group *ngIf=\"hasApi\" >\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\n </mat-tab>\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\n </mat-tab>\n</mat-tab-group>\n\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\n" }]
4756
+ args: [{ selector: 'igo-share-map', template: "<mat-tab-group *ngIf=\"hasApi\" >\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\r\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\r\n </mat-tab>\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\r\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\r\n </mat-tab>\r\n</mat-tab-group>\r\n\r\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\r\n" }]
4845
4757
  }], function () { return [{ type: i3.ConfigService }]; }, { map: [{
4846
4758
  type: Input
4847
4759
  }] });
@@ -5062,7 +4974,7 @@ SidenavComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SidenavCom
5062
4974
  (function () {
5063
4975
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SidenavComponent, [{
5064
4976
  type: Component,
5065
- args: [{ selector: 'igo-sidenav', template: "<mat-sidenav\n #sidenav\n igoSidenavShim\n mode=\"side\"\n [opened]=\"opened\">\n\n <div class=\"igo-sidenav-content\">\n\n <igo-flexible\n #topPanel\n initial=\"50%\" initialMobile=\"100%\"\n expanded=\"calc(100% - 58px)\"\n [state]=\"topPanelState\">\n\n <div class=\"igo-content\">\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\n <button\n mat-icon-button\n panelLeftButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\n *ngIf=\"tool\">\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\n *ngIf=\"tool\">\n <mat-icon svgIcon=\"menu\"></mat-icon>\n </button>\n\n </igo-panel>\n </div>\n\n <div igoFlexibleFill class=\"igo-content\">\n <igo-panel\n [title]=\"featureTitle\"\n *ngIf=\"feature && media !== 'mobile'\">\n\n <button\n mat-icon-button\n panelLeftButton\n class=\"igo-icon-button\"\n (click)=\"toggleTopPanel()\">\n <mat-icon [svgIcon]=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0 ? 'arrow_downward' : 'arrow_upward'\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n class=\"igo-icon-button\"\n (click)=\"zoomToFeatureExtent()\"\n *ngIf=\"feature.geometry\">\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\n </button>\n\n <igo-feature-details\n [feature]=\"feature\"\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\">\n </igo-feature-details>\n </igo-panel>\n </div>\n\n </igo-flexible>\n\n </div>\n</mat-sidenav>\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"] }]
4977
+ args: [{ selector: 'igo-sidenav', template: "<mat-sidenav\r\n #sidenav\r\n igoSidenavShim\r\n mode=\"side\"\r\n [opened]=\"opened\">\r\n\r\n <div class=\"igo-sidenav-content\">\r\n\r\n <igo-flexible\r\n #topPanel\r\n initial=\"50%\" initialMobile=\"100%\"\r\n expanded=\"calc(100% - 58px)\"\r\n [state]=\"topPanelState\">\r\n\r\n <div class=\"igo-content\">\r\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\r\n *ngIf=\"tool\">\r\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\r\n *ngIf=\"tool\">\r\n <mat-icon svgIcon=\"menu\"></mat-icon>\r\n </button>\r\n\r\n </igo-panel>\r\n </div>\r\n\r\n <div igoFlexibleFill class=\"igo-content\">\r\n <igo-panel\r\n [title]=\"featureTitle\"\r\n *ngIf=\"feature && media !== 'mobile'\">\r\n\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n class=\"igo-icon-button\"\r\n (click)=\"toggleTopPanel()\">\r\n <mat-icon [svgIcon]=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0 ? 'arrow_downward' : 'arrow_upward'\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n class=\"igo-icon-button\"\r\n (click)=\"zoomToFeatureExtent()\"\r\n *ngIf=\"feature.geometry\">\r\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\r\n </button>\r\n\r\n <igo-feature-details\r\n [feature]=\"feature\"\r\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\">\r\n </igo-feature-details>\r\n </igo-panel>\r\n </div>\r\n\r\n </igo-flexible>\r\n\r\n </div>\r\n</mat-sidenav>\r\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"] }]
5066
4978
  }], function () { return [{ type: i1$4.Title }]; }, { map: [{
5067
4979
  type: Input
5068
4980
  }], opened: [{