@igo2/context 19.0.0-next.27 → 19.0.0-next.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igo2-context.mjs +1283 -457
- package/fesm2022/igo2-context.mjs.map +1 -1
- package/lib/context-manager/shared/context.interface.d.ts +1 -1
- package/lib/context-manager/shared/context.service.d.ts +4 -3
- package/lib/context-manager/shared/layer-context.directive.d.ts +8 -7
- package/lib/context-manager/shared/map-context.directive.d.ts +4 -1
- package/lib/share-map/share-map/share-map-api.component.d.ts +5 -1
- package/lib/share-map/share-map/share-map-url.component.d.ts +10 -10
- package/lib/share-map/shared/index.d.ts +3 -0
- package/lib/share-map/shared/share-map-definitions.d.ts +2 -0
- package/lib/share-map/shared/share-map-encoder.d.ts +62 -0
- package/lib/share-map/shared/share-map-legacy.service.d.ts +18 -0
- package/lib/share-map/shared/share-map-parser.d.ts +20 -0
- package/lib/share-map/shared/share-map.interface.d.ts +81 -0
- package/lib/share-map/shared/share-map.service.d.ts +17 -11
- package/lib/share-map/shared/share-map.utils.d.ts +13 -0
- package/package.json +6 -6
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { NgIf, NgFor, AsyncPipe, NgClass, KeyValuePipe } from '@angular/common';
|
|
2
|
+
import { Inject, Injectable, Optional, Input, Component, NgModule, EventEmitter, Output, HostListener, Self, Directive, ChangeDetectionStrategy } from '@angular/core';
|
|
3
|
+
import { DOCUMENT, NgIf, NgFor, AsyncPipe, NgClass, KeyValuePipe } from '@angular/common';
|
|
4
4
|
import * as i4$1 from '@angular/forms';
|
|
5
5
|
import { Validators, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
|
|
6
|
-
import * as
|
|
6
|
+
import * as i9 from '@angular/material/button';
|
|
7
7
|
import { MatButtonModule } from '@angular/material/button';
|
|
8
8
|
import * as i7 from '@angular/material/button-toggle';
|
|
9
9
|
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
10
10
|
import { MatOptionModule } from '@angular/material/core';
|
|
11
|
-
import * as i12 from '@angular/material/divider';
|
|
12
11
|
import { MatDividerModule } from '@angular/material/divider';
|
|
13
12
|
import * as i6$1 from '@angular/material/form-field';
|
|
14
13
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
@@ -17,45 +16,46 @@ import { MatInputModule } from '@angular/material/input';
|
|
|
17
16
|
import * as i11 from '@angular/material/select';
|
|
18
17
|
import { MatSelectModule } from '@angular/material/select';
|
|
19
18
|
import { SpinnerComponent } from '@igo2/common/spinner';
|
|
20
|
-
import * as i1$
|
|
19
|
+
import * as i1$2 from '@igo2/core/config';
|
|
21
20
|
import * as i4 from '@igo2/core/language';
|
|
22
21
|
import { IgoLanguageModule } from '@igo2/core/language';
|
|
23
22
|
import * as i3 from '@igo2/core/message';
|
|
24
23
|
import { BehaviorSubject, Subject, of, Observable, ReplaySubject, timer, EMPTY, combineLatest } from 'rxjs';
|
|
25
|
-
import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, debounce, filter } from 'rxjs/operators';
|
|
26
|
-
import * as i1 from '@angular/common/http';
|
|
24
|
+
import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, debounce, switchMap, filter } from 'rxjs/operators';
|
|
25
|
+
import * as i1$1 from '@angular/common/http';
|
|
26
|
+
import { HttpParams } from '@angular/common/http';
|
|
27
27
|
import * as i2 from '@igo2/auth';
|
|
28
|
-
import * as
|
|
28
|
+
import * as i1 from '@igo2/core/route';
|
|
29
29
|
import * as i6 from '@igo2/core/storage';
|
|
30
|
-
import * as i1$
|
|
31
|
-
import { isLayerGroup, FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource,
|
|
30
|
+
import * as i1$3 from '@igo2/geo';
|
|
31
|
+
import { QueryFormat, isLayerGroupOptions, ID_GROUP_PREFIX, isLayerGroup, isLayerItem, getLayerOptionIdentifier, findParentId, generateIdFromSourceOptions, FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, sortLayersByZindex, mergeLayersOptions, moveToOlFeatures, FeatureMotion, FeatureDetailsComponent } from '@igo2/geo';
|
|
32
32
|
import { ObjectUtils, uuid, downloadContent } from '@igo2/utils';
|
|
33
33
|
import GeoJSON from 'ol/format/GeoJSON';
|
|
34
34
|
import olPoint from 'ol/geom/Point';
|
|
35
35
|
import Cluster from 'ol/source/Cluster';
|
|
36
36
|
import olVectorSource from 'ol/source/Vector';
|
|
37
|
+
import * as i8 from '@angular/material/autocomplete';
|
|
38
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
39
|
+
import * as i3$1 from '@angular/material/list';
|
|
40
|
+
import { MatListModule } from '@angular/material/list';
|
|
37
41
|
import * as i7$2 from '@ngx-translate/core';
|
|
38
|
-
import * as i1$
|
|
42
|
+
import * as i1$4 from '@angular/cdk/clipboard';
|
|
39
43
|
import * as i6$2 from '@angular/material/icon';
|
|
40
44
|
import { MatIconModule } from '@angular/material/icon';
|
|
41
45
|
import * as i5 from '@angular/material/tooltip';
|
|
42
46
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
43
|
-
import * as i3$1 from '@angular/material/list';
|
|
44
|
-
import { MatListModule } from '@angular/material/list';
|
|
45
47
|
import { CollapseDirective, CollapsibleComponent } from '@igo2/common/collapsible';
|
|
46
48
|
import { StopPropagationDirective } from '@igo2/common/stop-propagation';
|
|
47
49
|
import * as i5$1 from '@igo2/common/confirm-dialog';
|
|
48
50
|
import { ConfirmDialogService } from '@igo2/common/confirm-dialog';
|
|
49
51
|
import * as i13 from '@angular/material/checkbox';
|
|
50
52
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
51
|
-
import * as i1$
|
|
53
|
+
import * as i1$5 from '@angular/material/dialog';
|
|
52
54
|
import { MatDialogTitle, MatDialogContent, MatDialogActions } from '@angular/material/dialog';
|
|
53
|
-
import * as i12
|
|
55
|
+
import * as i12 from '@angular/material/menu';
|
|
54
56
|
import { MatMenuModule } from '@angular/material/menu';
|
|
55
57
|
import { ActionStore, ActionbarMode, ActionbarComponent } from '@igo2/common/action';
|
|
56
58
|
import { ListComponent, ListItemDirective } from '@igo2/common/list';
|
|
57
|
-
import * as i8$1 from '@angular/material/autocomplete';
|
|
58
|
-
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
59
59
|
import * as i5$2 from '@angular/material/radio';
|
|
60
60
|
import { MatRadioModule } from '@angular/material/radio';
|
|
61
61
|
import * as i3$2 from '@igo2/core/media';
|
|
@@ -67,11 +67,1028 @@ import * as i2$1 from '@angular/material/tabs';
|
|
|
67
67
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
68
68
|
import * as i2$2 from '@angular/material/sidenav';
|
|
69
69
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
70
|
-
import * as i1$
|
|
70
|
+
import * as i1$6 from '@angular/platform-browser';
|
|
71
71
|
import { getEntityTitle } from '@igo2/common/entity';
|
|
72
72
|
import { FlexibleComponent } from '@igo2/common/flexible';
|
|
73
73
|
import { PanelComponent } from '@igo2/common/panel';
|
|
74
74
|
|
|
75
|
+
const ServiceType = [
|
|
76
|
+
'wms',
|
|
77
|
+
'wmts',
|
|
78
|
+
'arcgisrest',
|
|
79
|
+
'imagearcgisrest',
|
|
80
|
+
'tilearcgisrest'
|
|
81
|
+
];
|
|
82
|
+
var ServiceTypeEnum;
|
|
83
|
+
(function (ServiceTypeEnum) {
|
|
84
|
+
ServiceTypeEnum[ServiceTypeEnum["wms"] = 0] = "wms";
|
|
85
|
+
ServiceTypeEnum[ServiceTypeEnum["wmts"] = 1] = "wmts";
|
|
86
|
+
ServiceTypeEnum[ServiceTypeEnum["arcgisrest"] = 2] = "arcgisrest";
|
|
87
|
+
ServiceTypeEnum[ServiceTypeEnum["imagearcgisrest"] = 3] = "imagearcgisrest";
|
|
88
|
+
ServiceTypeEnum[ServiceTypeEnum["tilearcgisrest"] = 4] = "tilearcgisrest";
|
|
89
|
+
})(ServiceTypeEnum || (ServiceTypeEnum = {}));
|
|
90
|
+
const BaseLayerParamsKeys = [
|
|
91
|
+
'visible',
|
|
92
|
+
'opacity',
|
|
93
|
+
'zIndex',
|
|
94
|
+
'parentId'
|
|
95
|
+
];
|
|
96
|
+
const LayerParamsKeys = [
|
|
97
|
+
'index',
|
|
98
|
+
'names',
|
|
99
|
+
'type',
|
|
100
|
+
'version',
|
|
101
|
+
'queryString',
|
|
102
|
+
...BaseLayerParamsKeys
|
|
103
|
+
];
|
|
104
|
+
const GroupParamsKeys = [
|
|
105
|
+
'title',
|
|
106
|
+
'id',
|
|
107
|
+
'expanded',
|
|
108
|
+
...BaseLayerParamsKeys
|
|
109
|
+
];
|
|
110
|
+
const PositionParamsKeys = [
|
|
111
|
+
'center',
|
|
112
|
+
'zoom',
|
|
113
|
+
'rotation',
|
|
114
|
+
'projection'
|
|
115
|
+
];
|
|
116
|
+
const SHARE_MAP_KEYS_DEFAULT_OPTIONS = {
|
|
117
|
+
context: 'ctx',
|
|
118
|
+
urls: 'urls',
|
|
119
|
+
position: 'pos',
|
|
120
|
+
layers: 'layers',
|
|
121
|
+
groups: 'groups',
|
|
122
|
+
center: 'ctr',
|
|
123
|
+
zoom: 'z',
|
|
124
|
+
projection: 'p',
|
|
125
|
+
rotation: 'r',
|
|
126
|
+
opacity: 'o'
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
function shareMapKeyDefs(options) {
|
|
130
|
+
return {
|
|
131
|
+
contextKey: options.context,
|
|
132
|
+
urlsKey: options.urls,
|
|
133
|
+
languageKey: options.languageKey,
|
|
134
|
+
pos: {
|
|
135
|
+
key: options.position,
|
|
136
|
+
params: {
|
|
137
|
+
zoom: {
|
|
138
|
+
key: options.zoom,
|
|
139
|
+
parse: (params) => parseIntergerParam(params, options.zoom)
|
|
140
|
+
},
|
|
141
|
+
center: {
|
|
142
|
+
key: '@',
|
|
143
|
+
parse: parseCenter,
|
|
144
|
+
stringify: stringifyCenter
|
|
145
|
+
},
|
|
146
|
+
rotation: {
|
|
147
|
+
key: options.rotation,
|
|
148
|
+
parse: (params) => parseRotation(params, options.rotation),
|
|
149
|
+
stringify: formatNumber
|
|
150
|
+
},
|
|
151
|
+
projection: {
|
|
152
|
+
key: options.projection,
|
|
153
|
+
parse: (params) => extractParam(params, options.projection)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
layers: {
|
|
158
|
+
key: options.layers,
|
|
159
|
+
params: {
|
|
160
|
+
index: undefined,
|
|
161
|
+
names: {
|
|
162
|
+
key: 'n',
|
|
163
|
+
parse: (params) => extractParam(params, 'n'),
|
|
164
|
+
stringify: (value) => `[${value}]`
|
|
165
|
+
},
|
|
166
|
+
opacity: {
|
|
167
|
+
key: 'o',
|
|
168
|
+
parse: (params) => parseFloatParam(params, 'o')
|
|
169
|
+
},
|
|
170
|
+
visible: {
|
|
171
|
+
key: 'v',
|
|
172
|
+
parse: (params) => parseBooleanParam(params, 'v'),
|
|
173
|
+
stringify: stringifyBoolean
|
|
174
|
+
},
|
|
175
|
+
type: {
|
|
176
|
+
key: 't',
|
|
177
|
+
parse: (params) => parseLayerType(params, 't'),
|
|
178
|
+
stringify: stringifyType
|
|
179
|
+
},
|
|
180
|
+
zIndex: {
|
|
181
|
+
key: 'z',
|
|
182
|
+
parse: (params) => parseIntergerParam(params, 'z')
|
|
183
|
+
},
|
|
184
|
+
parentId: {
|
|
185
|
+
key: 'pid',
|
|
186
|
+
parse: (params) => extractParam(params, 'pid')
|
|
187
|
+
},
|
|
188
|
+
version: {
|
|
189
|
+
key: 'vrn',
|
|
190
|
+
parse: (params) => extractParam(params, 'vrn')
|
|
191
|
+
},
|
|
192
|
+
queryString: {
|
|
193
|
+
key: 'q',
|
|
194
|
+
parse: (params) => extractParam(params, 'q')
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
groups: {
|
|
199
|
+
key: options.groups,
|
|
200
|
+
params: {
|
|
201
|
+
id: {
|
|
202
|
+
key: 'id',
|
|
203
|
+
parse: (params) => extractIdParam(params, 'id')
|
|
204
|
+
},
|
|
205
|
+
parentId: {
|
|
206
|
+
key: 'pid',
|
|
207
|
+
parse: (params) => extractIdParam(params, 'pid')
|
|
208
|
+
},
|
|
209
|
+
title: { key: 't', parse: (params) => extractParam(params, 't') },
|
|
210
|
+
visible: {
|
|
211
|
+
key: 'v',
|
|
212
|
+
parse: (params) => parseBooleanParam(params, 'v'),
|
|
213
|
+
stringify: stringifyBoolean
|
|
214
|
+
},
|
|
215
|
+
opacity: {
|
|
216
|
+
key: 'o',
|
|
217
|
+
parse: (params) => parseFloatParam(params, 'o')
|
|
218
|
+
},
|
|
219
|
+
zIndex: {
|
|
220
|
+
key: 'z',
|
|
221
|
+
parse: (params) => parseIntergerParam(params, 'z')
|
|
222
|
+
},
|
|
223
|
+
expanded: {
|
|
224
|
+
key: 'e',
|
|
225
|
+
parse: (params) => parseBooleanParam(params, 'e'),
|
|
226
|
+
stringify: stringifyBoolean
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function stringifyBoolean(value) {
|
|
233
|
+
return value ? '1' : '0';
|
|
234
|
+
}
|
|
235
|
+
function parseBoolean(params) {
|
|
236
|
+
return !!parseInt(params);
|
|
237
|
+
}
|
|
238
|
+
function stringifyType(value) {
|
|
239
|
+
return String(ServiceTypeEnum[value]);
|
|
240
|
+
}
|
|
241
|
+
function parseLayerType(params, key) {
|
|
242
|
+
const param = extractParam(params, key);
|
|
243
|
+
if (!param) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const type = Number(param);
|
|
247
|
+
return ServiceTypeEnum[type];
|
|
248
|
+
}
|
|
249
|
+
function stringifyCenter(values) {
|
|
250
|
+
return values.map(formatNumber).join(',');
|
|
251
|
+
}
|
|
252
|
+
function parseCenter(params) {
|
|
253
|
+
if (!params?.startsWith('@')) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const paramsSplitted = params.split(',');
|
|
257
|
+
const index = paramsSplitted.findIndex((param) => param.startsWith('@'));
|
|
258
|
+
return [
|
|
259
|
+
Number(paramsSplitted[index].slice(1)),
|
|
260
|
+
Number(paramsSplitted[index + 1])
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
function parseRotation(params, key) {
|
|
264
|
+
const param = extractParam(params, key);
|
|
265
|
+
if (!param) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const degree = parseInteger(param);
|
|
269
|
+
return (degree * Math.PI) / 180;
|
|
270
|
+
}
|
|
271
|
+
function parseIntergerParam(params, key) {
|
|
272
|
+
const param = extractParam(params, key);
|
|
273
|
+
if (!param) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
return parseInteger(param);
|
|
277
|
+
}
|
|
278
|
+
function parseBooleanParam(params, key) {
|
|
279
|
+
const param = extractParam(params, key);
|
|
280
|
+
if (!param) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
return parseBoolean(param);
|
|
284
|
+
}
|
|
285
|
+
function parseFloatParam(params, key) {
|
|
286
|
+
const param = extractParam(params, key);
|
|
287
|
+
if (!param) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
return parseFloat(param);
|
|
291
|
+
}
|
|
292
|
+
function extractParam(params, suffix) {
|
|
293
|
+
return params
|
|
294
|
+
?.split(',')
|
|
295
|
+
.find((param) => param.endsWith(suffix))
|
|
296
|
+
?.slice(0, -suffix.length);
|
|
297
|
+
}
|
|
298
|
+
function extractIdParam(params, suffix) {
|
|
299
|
+
const paramsSplited = params.split(',');
|
|
300
|
+
// Find the parameter that ends with exact id/pid and isn't part of another word
|
|
301
|
+
const param = paramsSplited.find((param) => {
|
|
302
|
+
const key = param.slice(-suffix.length);
|
|
303
|
+
if (key !== suffix) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
if (suffix === 'pid') {
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
const prefixChar = param.slice(-suffix.length - 1, -suffix.length);
|
|
310
|
+
return prefixChar !== 'p';
|
|
311
|
+
});
|
|
312
|
+
return param?.slice(0, -suffix.length);
|
|
313
|
+
}
|
|
314
|
+
function parseInteger(value) {
|
|
315
|
+
return parseInt(value, 10);
|
|
316
|
+
}
|
|
317
|
+
function formatNumber(value) {
|
|
318
|
+
return value.toFixed(5).replace(/\.([^0]+)0+$/, '.$1');
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function buildDataSourceOptions(type, url, layers, version) {
|
|
322
|
+
const isLayerType = [
|
|
323
|
+
'wmts',
|
|
324
|
+
'arcgisrest',
|
|
325
|
+
'imagearcgisrest',
|
|
326
|
+
'tilearcgisrest'
|
|
327
|
+
].includes(type);
|
|
328
|
+
const arcgisClause = type === 'arcgisrest' ||
|
|
329
|
+
type === 'imagearcgisrest' ||
|
|
330
|
+
type === 'tilearcgisrest';
|
|
331
|
+
const params = type === 'wms' ? { LAYERS: layers.join(','), VERSION: version } : undefined;
|
|
332
|
+
const layer = isLayerType ? layers.join(',') : undefined;
|
|
333
|
+
const baseParams = {
|
|
334
|
+
type: type,
|
|
335
|
+
url,
|
|
336
|
+
params,
|
|
337
|
+
layer,
|
|
338
|
+
version: type === 'wmts' ? '1.0.0' : undefined
|
|
339
|
+
};
|
|
340
|
+
if (arcgisClause) {
|
|
341
|
+
return {
|
|
342
|
+
...baseParams,
|
|
343
|
+
queryable: true,
|
|
344
|
+
queryFormat: QueryFormat.ESRIJSON
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
return baseParams;
|
|
348
|
+
}
|
|
349
|
+
function getFlattenOptions(options) {
|
|
350
|
+
return options.reduce((accumulator, option) => {
|
|
351
|
+
if (isLayerGroupOptions(option)) {
|
|
352
|
+
const children = option.children
|
|
353
|
+
? getFlattenOptions(option.children)
|
|
354
|
+
: [];
|
|
355
|
+
accumulator.push(option, ...children);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
accumulator.push(option);
|
|
359
|
+
}
|
|
360
|
+
return accumulator;
|
|
361
|
+
}, []);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Checks if the provided query parameters contain legacy parameter pairs
|
|
365
|
+
* (e.g., layers and URLs) that indicate older configuration formats.
|
|
366
|
+
*/
|
|
367
|
+
function hasLegacyParams(params, optionsLegacy) {
|
|
368
|
+
const { layersKey, wmsUrlKey, wmsLayersKey, wmtsUrlKey, wmtsLayersKey, arcgisUrlKey, arcgisLayersKey, iarcgisUrlKey, iarcgisLayersKey, tarcgisUrlKey, tarcgisLayersKey } = optionsLegacy;
|
|
369
|
+
// Define valid legacy parameter pairs
|
|
370
|
+
const legacyPairs = [
|
|
371
|
+
[layersKey, wmsUrlKey],
|
|
372
|
+
[wmsLayersKey, wmsUrlKey],
|
|
373
|
+
[wmtsLayersKey, wmtsUrlKey],
|
|
374
|
+
[arcgisLayersKey, arcgisUrlKey],
|
|
375
|
+
[iarcgisLayersKey, iarcgisUrlKey],
|
|
376
|
+
[tarcgisLayersKey, tarcgisUrlKey]
|
|
377
|
+
].filter(([layer, url]) => layer && url);
|
|
378
|
+
// Check if any legacy pair exists in the query parameters
|
|
379
|
+
return legacyPairs.some(([layer, url]) => getParamValue(params, layer) && getParamValue(params, url));
|
|
380
|
+
}
|
|
381
|
+
function hasModernShareParams(params, keysDefinitions) {
|
|
382
|
+
const { urlsKey, layers, groups } = keysDefinitions;
|
|
383
|
+
const hasGroups = !!getParamValue(params, groups.key);
|
|
384
|
+
const hasLayers = !!getParamValue(params, layers.key);
|
|
385
|
+
const hasUrls = !!getParamValue(params, urlsKey);
|
|
386
|
+
return (hasLayers && hasUrls) || hasGroups;
|
|
387
|
+
}
|
|
388
|
+
function getParamValue(params, key) {
|
|
389
|
+
const value = params[key];
|
|
390
|
+
return value !== '' ? value : undefined;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
class ShareMapEncoder {
|
|
394
|
+
SHARE_MAP_DEFS;
|
|
395
|
+
document;
|
|
396
|
+
context;
|
|
397
|
+
constructor(SHARE_MAP_DEFS, document) {
|
|
398
|
+
this.SHARE_MAP_DEFS = SHARE_MAP_DEFS;
|
|
399
|
+
this.document = document;
|
|
400
|
+
}
|
|
401
|
+
generateUrl(map, context, publicShareOption, language) {
|
|
402
|
+
this.context = context;
|
|
403
|
+
const querystring = publicShareOption.layerlistControls?.querystring ?? '';
|
|
404
|
+
const layers = [
|
|
405
|
+
map.layerController.baseLayer,
|
|
406
|
+
...map.layerController.layersFlattened
|
|
407
|
+
].filter(Boolean);
|
|
408
|
+
const queryUrl = this.buildQueryUrl(layers, querystring);
|
|
409
|
+
const urlBaseConfig = this.getBaseUrlConfig(map.viewController, language);
|
|
410
|
+
return queryUrl !== '' ? urlBaseConfig + '&' + queryUrl : urlBaseConfig;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Replaces local group IDs with unique IDs to avoid conflicts and have short URL.
|
|
414
|
+
* This is necessary for sharing the map context.
|
|
415
|
+
*/
|
|
416
|
+
replaceGroupLocalIds(layers) {
|
|
417
|
+
const idMap = new Map();
|
|
418
|
+
const existingIds = new Set(layers.map((layer) => layer.id).filter(Boolean));
|
|
419
|
+
// eslint-disable-next-line prefer-const
|
|
420
|
+
let counter = 1;
|
|
421
|
+
layers.forEach((layer) => {
|
|
422
|
+
if (layer.id && layer.id.includes(ID_GROUP_PREFIX)) {
|
|
423
|
+
const newId = this.getUniqueId(existingIds, counter);
|
|
424
|
+
idMap.set(layer.id, String(newId));
|
|
425
|
+
layer.options.id = newId;
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
getUniqueId(existingIds, counter) {
|
|
430
|
+
while (existingIds.has(String(counter))) {
|
|
431
|
+
counter++;
|
|
432
|
+
}
|
|
433
|
+
existingIds.add(String(counter));
|
|
434
|
+
return counter;
|
|
435
|
+
}
|
|
436
|
+
getCurrentContext() {
|
|
437
|
+
return ObjectUtils.removeUndefined({
|
|
438
|
+
layers: this.context?.layers,
|
|
439
|
+
center: this.context?.map.view.center,
|
|
440
|
+
projection: this.context?.map.view.projection,
|
|
441
|
+
zoom: this.context?.map.view.zoom,
|
|
442
|
+
rotation: this.context?.map.view.rotation
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Filters layers to include only LayerGroups or LayerItems with a valid ServiceType.
|
|
447
|
+
*/
|
|
448
|
+
isLayerSharable(layers) {
|
|
449
|
+
return layers.filter((layer) => isLayerGroup(layer) ||
|
|
450
|
+
(isLayerItem(layer) &&
|
|
451
|
+
ServiceType.includes(layer.dataSource?.options?.type)));
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Extracts only LayerGroup items from the filtered layers.
|
|
455
|
+
*/
|
|
456
|
+
getLayerGroups(layers) {
|
|
457
|
+
return layers.filter(isLayerGroup);
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Extracts only LayerItem items from the filtered layers.
|
|
461
|
+
*/
|
|
462
|
+
getLayerItems(layers) {
|
|
463
|
+
return layers.filter(isLayerItem);
|
|
464
|
+
}
|
|
465
|
+
buildQueryUrl(layers, querystring) {
|
|
466
|
+
const layersSharable = this.isLayerSharable(layers);
|
|
467
|
+
const layersChanged = this.getFilteredMapLayers(layersSharable);
|
|
468
|
+
const groups = this.getLayerGroups(layersChanged);
|
|
469
|
+
this.replaceGroupLocalIds(groups);
|
|
470
|
+
const groupsQueryUrl = this.buildGroupsQueryUrl(groups);
|
|
471
|
+
const layersByService = this.generateLayersOptionsByService(this.getLayerItems(layersChanged), querystring);
|
|
472
|
+
const layersQueryUrl = this.buildLayersQueryUrl(layersByService);
|
|
473
|
+
return [layersQueryUrl, groupsQueryUrl].filter(Boolean).join('&');
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Retrieves the current context layers and maps them by identifier.
|
|
477
|
+
*/
|
|
478
|
+
getContextLayersMap() {
|
|
479
|
+
const ctxLayers = this.getCurrentContext()?.layers || [];
|
|
480
|
+
const ctxFlattened = getFlattenOptions(ctxLayers);
|
|
481
|
+
return new Map(ctxFlattened.map((lctx) => {
|
|
482
|
+
const identifier = getLayerOptionIdentifier(lctx);
|
|
483
|
+
return [identifier, lctx];
|
|
484
|
+
}));
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Filters layers and context layers based on visibility, opacity, and expanded state.
|
|
488
|
+
*/
|
|
489
|
+
getFilteredMapLayers(filteredLayers) {
|
|
490
|
+
const ctxLayersMap = this.getContextLayersMap();
|
|
491
|
+
return filteredLayers.filter((layer) => {
|
|
492
|
+
const mapLayerIdentifier = getLayerOptionIdentifier(layer.options);
|
|
493
|
+
if (!mapLayerIdentifier)
|
|
494
|
+
return false;
|
|
495
|
+
const ctxLayer = ctxLayersMap.get(mapLayerIdentifier);
|
|
496
|
+
if (!ctxLayer)
|
|
497
|
+
return true;
|
|
498
|
+
const visibilityChange = layer.visible !== (ctxLayer.visible ?? true);
|
|
499
|
+
const opacityChange = layer.opacity !== (ctxLayer.opacity ?? 1);
|
|
500
|
+
const layerParentId = this.getIdsNestedParent(layer)?.join('.');
|
|
501
|
+
const ctxParentId = ctxLayer.parentId ?? findParentId(this.context.layers, ctxLayer);
|
|
502
|
+
const parentIdChange = ctxParentId !== layerParentId;
|
|
503
|
+
let expandedChange = false;
|
|
504
|
+
let titleChange = false;
|
|
505
|
+
if (isLayerGroup(layer) && isLayerGroupOptions(ctxLayer)) {
|
|
506
|
+
// Check if the layer group was assign an local id
|
|
507
|
+
// If so, we don't support any change for this case
|
|
508
|
+
if (String(ctxLayer.id).includes(ID_GROUP_PREFIX)) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
expandedChange = (ctxLayer.expanded ?? false) !== layer.expanded;
|
|
512
|
+
titleChange = (ctxLayer.title ?? false) !== layer.title;
|
|
513
|
+
}
|
|
514
|
+
return (visibilityChange ||
|
|
515
|
+
opacityChange ||
|
|
516
|
+
expandedChange ||
|
|
517
|
+
titleChange ||
|
|
518
|
+
parentIdChange);
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
getIdsNestedParent(node, ids) {
|
|
522
|
+
if (!node.parent)
|
|
523
|
+
return ids;
|
|
524
|
+
if (node.parent) {
|
|
525
|
+
if (!ids) {
|
|
526
|
+
ids = [node.parent.id];
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
ids.unshift(node.parent.id);
|
|
530
|
+
}
|
|
531
|
+
return this.getIdsNestedParent(node.parent, ids);
|
|
532
|
+
}
|
|
533
|
+
return ids;
|
|
534
|
+
}
|
|
535
|
+
generateLayersOptionsByService(layers, querystring) {
|
|
536
|
+
const layersByUrl = new Map();
|
|
537
|
+
layers.forEach((layer) => {
|
|
538
|
+
const [url, params] = this.generateLayerOption(layer, querystring);
|
|
539
|
+
if (!layersByUrl.has(url)) {
|
|
540
|
+
layersByUrl.set(url, [params]);
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
layersByUrl.get(url).push(params);
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
return Array.from(layersByUrl.entries()).map(([url, layerParams], i) => {
|
|
547
|
+
layerParams.forEach((params) => {
|
|
548
|
+
params.index = i;
|
|
549
|
+
});
|
|
550
|
+
return [url, layerParams];
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
generateLayerOption(layer, querystring) {
|
|
554
|
+
const dataSourceOptions = layer.dataSource.options;
|
|
555
|
+
return [
|
|
556
|
+
this.concatUrlWithVersion(dataSourceOptions),
|
|
557
|
+
this.getLayerParams(layer, querystring)
|
|
558
|
+
];
|
|
559
|
+
}
|
|
560
|
+
getLayerNames(dataSourceOptions) {
|
|
561
|
+
const type = dataSourceOptions.type.toLowerCase();
|
|
562
|
+
if (type === 'wms') {
|
|
563
|
+
const params = dataSourceOptions
|
|
564
|
+
.params;
|
|
565
|
+
return params.LAYERS;
|
|
566
|
+
}
|
|
567
|
+
return 'layer' in dataSourceOptions ? dataSourceOptions.layer : '';
|
|
568
|
+
}
|
|
569
|
+
getWmsVersion(dataSourceOptions) {
|
|
570
|
+
const params = dataSourceOptions?.params;
|
|
571
|
+
return params?.VERSION && params.VERSION !== '1.3.0'
|
|
572
|
+
? params.VERSION
|
|
573
|
+
: undefined;
|
|
574
|
+
}
|
|
575
|
+
concatUrlWithVersion(dataSourceOptions) {
|
|
576
|
+
const url = dataSourceOptions.url;
|
|
577
|
+
if (dataSourceOptions.type.toLowerCase() === 'wms') {
|
|
578
|
+
const version = this.getWmsVersion(dataSourceOptions);
|
|
579
|
+
if (version) {
|
|
580
|
+
const operator = url.includes('?') ? '&' : '?';
|
|
581
|
+
const { version: versionDef } = this.SHARE_MAP_DEFS.layers.params;
|
|
582
|
+
return `${url}${operator}${versionDef.key}=${version}`;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
return dataSourceOptions.url;
|
|
586
|
+
}
|
|
587
|
+
getLayerParams(layer, queryString) {
|
|
588
|
+
const dataSourceOptions = layer.dataSource.options;
|
|
589
|
+
return {
|
|
590
|
+
index: undefined,
|
|
591
|
+
names: this.getLayerNames(dataSourceOptions),
|
|
592
|
+
type: dataSourceOptions?.type,
|
|
593
|
+
opacity: this.getOpacity(layer.opacity),
|
|
594
|
+
parentId: layer.parent?.id,
|
|
595
|
+
visible: this.getVisibility(layer.visible),
|
|
596
|
+
zIndex: layer.zIndex,
|
|
597
|
+
queryString: this.getQueryString(dataSourceOptions?.type, queryString)
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
getOpacity(opacity) {
|
|
601
|
+
return opacity === 1 ? undefined : opacity;
|
|
602
|
+
}
|
|
603
|
+
getVisibility(visibility) {
|
|
604
|
+
return !!visibility;
|
|
605
|
+
}
|
|
606
|
+
getQueryString(type, queryString) {
|
|
607
|
+
return (type === 'wms' || type === 'wmts') && queryString !== ''
|
|
608
|
+
? queryString
|
|
609
|
+
: undefined;
|
|
610
|
+
}
|
|
611
|
+
buildLayersQueryUrl(layersByService) {
|
|
612
|
+
if (layersByService.length === 0)
|
|
613
|
+
return undefined;
|
|
614
|
+
const { urlsKey, layers } = this.SHARE_MAP_DEFS;
|
|
615
|
+
const urls = layersByService.map(([url]) => url).join(',');
|
|
616
|
+
const layersWithParams = layersByService
|
|
617
|
+
.flatMap(([_, params]) => params.map((p) => this.stringifyLayerParams(p)))
|
|
618
|
+
.join(';');
|
|
619
|
+
return `${urlsKey}=${urls}&${layers.key}=${layersWithParams}`;
|
|
620
|
+
}
|
|
621
|
+
stringifyLayerParams(params) {
|
|
622
|
+
const { index, ...restParams } = params;
|
|
623
|
+
const stringifiedParams = this.stringifyDefinitions(restParams, this.SHARE_MAP_DEFS.layers.params);
|
|
624
|
+
return `${index},${stringifiedParams}`;
|
|
625
|
+
}
|
|
626
|
+
getBaseUrlConfig(viewController, language) {
|
|
627
|
+
const { pos, contextKey, languageKey } = this.SHARE_MAP_DEFS;
|
|
628
|
+
const href = this.document.location.href;
|
|
629
|
+
const baseUrl = this.sanitizeBaseUrl(href);
|
|
630
|
+
const params = [];
|
|
631
|
+
if (pos) {
|
|
632
|
+
const positionStringified = this.stringifyPosition(this.getPosition(viewController));
|
|
633
|
+
params.push(`${pos.key}=${positionStringified}`);
|
|
634
|
+
}
|
|
635
|
+
const contextUri = this.context?.uri;
|
|
636
|
+
if (contextUri)
|
|
637
|
+
params.push(`${contextKey}=${contextUri}`);
|
|
638
|
+
if (language && !baseUrl.includes(`${languageKey}=`))
|
|
639
|
+
params.push(`${languageKey}=${language}`);
|
|
640
|
+
return `${baseUrl}${params.join('&')}`;
|
|
641
|
+
}
|
|
642
|
+
sanitizeBaseUrl(baseUrl) {
|
|
643
|
+
if (!baseUrl.includes('?')) {
|
|
644
|
+
return `${baseUrl}?`;
|
|
645
|
+
}
|
|
646
|
+
const keys = this.extractKeys(this.SHARE_MAP_DEFS);
|
|
647
|
+
const [base, queryString] = baseUrl.split('?');
|
|
648
|
+
const params = new URLSearchParams(queryString);
|
|
649
|
+
keys.forEach((key) => {
|
|
650
|
+
params.delete(key);
|
|
651
|
+
});
|
|
652
|
+
const newQueryString = params.toString();
|
|
653
|
+
if (newQueryString !== '') {
|
|
654
|
+
return `${base}?${newQueryString}&`;
|
|
655
|
+
}
|
|
656
|
+
return `${base}?`;
|
|
657
|
+
}
|
|
658
|
+
extractKeys(defs) {
|
|
659
|
+
const keys = [];
|
|
660
|
+
for (const key in defs) {
|
|
661
|
+
if (Object.prototype.hasOwnProperty.call(defs, key)) {
|
|
662
|
+
const value = defs[key];
|
|
663
|
+
if (typeof value === 'string') {
|
|
664
|
+
keys.push(value);
|
|
665
|
+
}
|
|
666
|
+
else if (typeof value === 'object' && value !== null) {
|
|
667
|
+
keys.push(value.key);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return keys;
|
|
672
|
+
}
|
|
673
|
+
getPosition(viewController) {
|
|
674
|
+
return ObjectUtils.removeUndefined({
|
|
675
|
+
center: viewController.getCenter('EPSG:4326'),
|
|
676
|
+
zoom: this.getZoom(viewController),
|
|
677
|
+
rotation: this.getRotation(viewController),
|
|
678
|
+
projection: this.getProjection(viewController)
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
getProjection(viewController) {
|
|
682
|
+
const ctxProjection = this.getCurrentContext().projection;
|
|
683
|
+
const mapProjection = viewController.getOlProjection().getCode();
|
|
684
|
+
return ctxProjection === mapProjection ? undefined : mapProjection;
|
|
685
|
+
}
|
|
686
|
+
getZoom(viewController) {
|
|
687
|
+
const mapZoom = viewController.getZoom();
|
|
688
|
+
const ctxZoom = this.getCurrentContext().zoom;
|
|
689
|
+
return ctxZoom === mapZoom ? undefined : mapZoom;
|
|
690
|
+
}
|
|
691
|
+
getRotation(viewController) {
|
|
692
|
+
const rotationRadians = viewController.getRotation();
|
|
693
|
+
const rotationDegree = (rotationRadians * 180) / Math.PI;
|
|
694
|
+
const ctxRotation = this.getCurrentContext().rotation;
|
|
695
|
+
return rotationDegree === ctxRotation || rotationDegree === 0
|
|
696
|
+
? undefined
|
|
697
|
+
: rotationDegree;
|
|
698
|
+
}
|
|
699
|
+
stringifyPosition(position) {
|
|
700
|
+
const definitions = this.SHARE_MAP_DEFS.pos.params;
|
|
701
|
+
const { center, ...restPosition } = position;
|
|
702
|
+
const stringifiedParams = this.stringifyDefinitions(restPosition, definitions);
|
|
703
|
+
const result = [
|
|
704
|
+
`${definitions.center.key}${definitions.center.stringify(center)}`,
|
|
705
|
+
stringifiedParams
|
|
706
|
+
].filter(Boolean);
|
|
707
|
+
return result.join(',');
|
|
708
|
+
}
|
|
709
|
+
stringifyDefinitions(values, definitions) {
|
|
710
|
+
const result = Object.keys(ObjectUtils.removeUndefined(values))
|
|
711
|
+
.map((key) => {
|
|
712
|
+
const { key: defKey, stringify } = definitions[key];
|
|
713
|
+
const value = stringify ? stringify(values[key]) : values[key];
|
|
714
|
+
return `${value}${defKey}`;
|
|
715
|
+
})
|
|
716
|
+
.join(',');
|
|
717
|
+
return result === '' ? undefined : result;
|
|
718
|
+
}
|
|
719
|
+
buildGroupsQueryUrl(layers) {
|
|
720
|
+
if (layers.length === 0)
|
|
721
|
+
return undefined;
|
|
722
|
+
const { key } = this.SHARE_MAP_DEFS.groups;
|
|
723
|
+
const queryUrl = layers
|
|
724
|
+
.map((layer) => {
|
|
725
|
+
const params = this.getLayerGroupParams(layer);
|
|
726
|
+
return this.stringifyGroupParams(params);
|
|
727
|
+
})
|
|
728
|
+
.join(';');
|
|
729
|
+
return `${key}=${queryUrl}`;
|
|
730
|
+
}
|
|
731
|
+
getLayerGroupParams(layer) {
|
|
732
|
+
return {
|
|
733
|
+
id: layer.id,
|
|
734
|
+
title: layer.title,
|
|
735
|
+
zIndex: layer.zIndex,
|
|
736
|
+
parentId: layer.parent?.id,
|
|
737
|
+
visible: this.getVisibility(layer.visible),
|
|
738
|
+
opacity: this.getOpacity(layer.opacity),
|
|
739
|
+
expanded: layer.expanded
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
stringifyGroupParams(params) {
|
|
743
|
+
return this.stringifyDefinitions(params, this.SHARE_MAP_DEFS.groups.params);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
class ShareMapLegacyParser {
|
|
748
|
+
options;
|
|
749
|
+
constructor(options) {
|
|
750
|
+
this.options = options;
|
|
751
|
+
}
|
|
752
|
+
parseUrl(params) {
|
|
753
|
+
const layerOptions = ServiceType.flatMap((type) => this.readLayersQueryParamsByType(params, type)).filter(Boolean);
|
|
754
|
+
return layerOptions;
|
|
755
|
+
}
|
|
756
|
+
parsePosition(params) {
|
|
757
|
+
const center = params[this.options.centerKey];
|
|
758
|
+
const projection = params[this.options.projectionKey];
|
|
759
|
+
const zoom = params[this.options.zoomKey];
|
|
760
|
+
const rotation = params[this.options.rotationKey];
|
|
761
|
+
return ObjectUtils.removeUndefined({
|
|
762
|
+
center: center?.split(',').map(Number),
|
|
763
|
+
projection,
|
|
764
|
+
zoom: zoom ? Number(zoom) : undefined,
|
|
765
|
+
rotation: rotation ? Number(rotation) : undefined
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
readLayersQueryParamsByType(params, type) {
|
|
769
|
+
const [nameParamLayersKey, urlsKey] = this.getQueryKeyByType(params, type);
|
|
770
|
+
if (!nameParamLayersKey || !urlsKey) {
|
|
771
|
+
return undefined;
|
|
772
|
+
}
|
|
773
|
+
const layersByService = params[nameParamLayersKey].split('),(');
|
|
774
|
+
const urls = params[urlsKey].split(',');
|
|
775
|
+
return urls
|
|
776
|
+
.map((urlSrc, index) => {
|
|
777
|
+
// Sanitize URL and extract version
|
|
778
|
+
const [url, version] = this.sanitizeUrl(urlSrc);
|
|
779
|
+
const layersConfig = this.extractLayersByService(this.removeParenthesis(layersByService[index]));
|
|
780
|
+
// Generate layer options for the current service
|
|
781
|
+
return this.extractLayersOptions(layersConfig, url, type, version, params);
|
|
782
|
+
})
|
|
783
|
+
.flat();
|
|
784
|
+
}
|
|
785
|
+
getQueryKeyByType(params, type) {
|
|
786
|
+
let nameParamLayersKey;
|
|
787
|
+
let urlsKey;
|
|
788
|
+
const { layersKey, wmsUrlKey, wmsLayersKey, wmtsUrlKey, wmtsLayersKey, arcgisUrlKey, arcgisLayersKey, iarcgisUrlKey, iarcgisLayersKey, tarcgisUrlKey, tarcgisLayersKey } = this.options;
|
|
789
|
+
switch (type) {
|
|
790
|
+
case 'wms':
|
|
791
|
+
if ((params[layersKey] || params[wmsLayersKey]) && params[wmsUrlKey]) {
|
|
792
|
+
urlsKey = wmsUrlKey;
|
|
793
|
+
nameParamLayersKey = params[wmsLayersKey] ? wmsLayersKey : layersKey;
|
|
794
|
+
}
|
|
795
|
+
break;
|
|
796
|
+
case 'wmts':
|
|
797
|
+
if (params[wmtsLayersKey] && params[wmtsUrlKey]) {
|
|
798
|
+
urlsKey = wmtsUrlKey;
|
|
799
|
+
nameParamLayersKey = wmtsLayersKey;
|
|
800
|
+
}
|
|
801
|
+
break;
|
|
802
|
+
case 'arcgisrest':
|
|
803
|
+
if (params[arcgisLayersKey] && params[arcgisUrlKey]) {
|
|
804
|
+
urlsKey = arcgisUrlKey;
|
|
805
|
+
nameParamLayersKey = arcgisLayersKey;
|
|
806
|
+
}
|
|
807
|
+
break;
|
|
808
|
+
case 'imagearcgisrest':
|
|
809
|
+
if (params[iarcgisLayersKey] && params[iarcgisUrlKey]) {
|
|
810
|
+
urlsKey = iarcgisUrlKey;
|
|
811
|
+
nameParamLayersKey = iarcgisLayersKey;
|
|
812
|
+
}
|
|
813
|
+
break;
|
|
814
|
+
case 'tilearcgisrest':
|
|
815
|
+
if (params[tarcgisLayersKey] && params[tarcgisUrlKey]) {
|
|
816
|
+
urlsKey = tarcgisUrlKey;
|
|
817
|
+
nameParamLayersKey = tarcgisLayersKey;
|
|
818
|
+
}
|
|
819
|
+
break;
|
|
820
|
+
}
|
|
821
|
+
if (!nameParamLayersKey || !urlsKey) {
|
|
822
|
+
return [undefined, undefined];
|
|
823
|
+
}
|
|
824
|
+
return [nameParamLayersKey, urlsKey];
|
|
825
|
+
}
|
|
826
|
+
sanitizeUrl(url) {
|
|
827
|
+
const version = this.getQueryParam('version', url.toLocaleLowerCase()) || undefined;
|
|
828
|
+
if (version) {
|
|
829
|
+
const versionRegex = new RegExp(`[?&]version=${version}`, 'i');
|
|
830
|
+
url = url.replace(versionRegex, '').replace(/[?&]$/, '');
|
|
831
|
+
}
|
|
832
|
+
if (url.endsWith('?')) {
|
|
833
|
+
url = url.substring(0, url.length - 1);
|
|
834
|
+
}
|
|
835
|
+
return [url, version];
|
|
836
|
+
}
|
|
837
|
+
getQueryParam(name, url) {
|
|
838
|
+
let paramValue;
|
|
839
|
+
if (url.includes('?')) {
|
|
840
|
+
const httpParams = new HttpParams({ fromString: url.split('?')[1] });
|
|
841
|
+
paramValue = httpParams.get(name);
|
|
842
|
+
}
|
|
843
|
+
return paramValue;
|
|
844
|
+
}
|
|
845
|
+
extractLayersByService(layersByService) {
|
|
846
|
+
if (!layersByService.includes(':igoz')) {
|
|
847
|
+
return [
|
|
848
|
+
{
|
|
849
|
+
layers: layersByService.split(','),
|
|
850
|
+
zIndex: null
|
|
851
|
+
}
|
|
852
|
+
];
|
|
853
|
+
}
|
|
854
|
+
const layers = layersByService.match(/([^(),:]+(?:,[^(),:]+)*(:[^(),:]+(?:[:][^(),:]+)*)?)/g);
|
|
855
|
+
return layers.map((layer) => {
|
|
856
|
+
const [names, zIndex] = layer.split(':igoz');
|
|
857
|
+
return {
|
|
858
|
+
layers: names.split(','),
|
|
859
|
+
zIndex: parseInt(zIndex)
|
|
860
|
+
};
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
removeParenthesis(value) {
|
|
864
|
+
if (value.startsWith('(')) {
|
|
865
|
+
value = value.substr(1);
|
|
866
|
+
}
|
|
867
|
+
if (value.endsWith(')')) {
|
|
868
|
+
value = value.slice(0, -1);
|
|
869
|
+
}
|
|
870
|
+
return value;
|
|
871
|
+
}
|
|
872
|
+
extractLayersOptions(layersConfig, url, type, version, params) {
|
|
873
|
+
return layersConfig.map((layerConfig) => {
|
|
874
|
+
const sourceOptions = buildDataSourceOptions(type, url, layerConfig.layers, version);
|
|
875
|
+
const id = generateIdFromSourceOptions(sourceOptions);
|
|
876
|
+
const visible = this.computeLayerVisibilityFromUrl(params, id);
|
|
877
|
+
return ObjectUtils.removeUndefined({
|
|
878
|
+
id,
|
|
879
|
+
visible: visible,
|
|
880
|
+
zIndex: layerConfig.zIndex,
|
|
881
|
+
sourceOptions
|
|
882
|
+
});
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
computeLayerVisibilityFromUrl(params, currentLayerid) {
|
|
886
|
+
const queryParams = params;
|
|
887
|
+
let visible = true;
|
|
888
|
+
if (!queryParams || !currentLayerid) {
|
|
889
|
+
return visible;
|
|
890
|
+
}
|
|
891
|
+
let visibleOnLayersParams = '';
|
|
892
|
+
let visibleOffLayersParams = '';
|
|
893
|
+
let visiblelayers = [];
|
|
894
|
+
let invisiblelayers = [];
|
|
895
|
+
if (queryParams['visiblelayers']) {
|
|
896
|
+
visibleOnLayersParams = queryParams['visiblelayers'];
|
|
897
|
+
}
|
|
898
|
+
if (queryParams['invisiblelayers']) {
|
|
899
|
+
visibleOffLayersParams = queryParams['invisiblelayers'];
|
|
900
|
+
}
|
|
901
|
+
/* This order is important because to control whichever
|
|
902
|
+
the order of * param. First whe open and close everything.*/
|
|
903
|
+
if (visibleOnLayersParams === '*') {
|
|
904
|
+
visible = true;
|
|
905
|
+
}
|
|
906
|
+
if (visibleOffLayersParams === '*') {
|
|
907
|
+
visible = false;
|
|
908
|
+
}
|
|
909
|
+
// After, managing named layer by id (context.json OR id from datasource)
|
|
910
|
+
visiblelayers = visibleOnLayersParams.split(',');
|
|
911
|
+
invisiblelayers = visibleOffLayersParams.split(',');
|
|
912
|
+
if (visiblelayers.indexOf(currentLayerid) > -1 ||
|
|
913
|
+
visiblelayers.indexOf(currentLayerid.toString()) > -1) {
|
|
914
|
+
visible = true;
|
|
915
|
+
}
|
|
916
|
+
if (invisiblelayers.indexOf(currentLayerid) > -1 ||
|
|
917
|
+
invisiblelayers.indexOf(currentLayerid.toString()) > -1) {
|
|
918
|
+
visible = false;
|
|
919
|
+
}
|
|
920
|
+
return visible;
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
class ShareMapParser {
|
|
925
|
+
keysDefinitions;
|
|
926
|
+
legacyOptions;
|
|
927
|
+
legacy;
|
|
928
|
+
constructor(keysDefinitions, legacyOptions) {
|
|
929
|
+
this.keysDefinitions = keysDefinitions;
|
|
930
|
+
this.legacyOptions = legacyOptions;
|
|
931
|
+
this.legacy = new ShareMapLegacyParser(legacyOptions);
|
|
932
|
+
}
|
|
933
|
+
parseLayers(params) {
|
|
934
|
+
if (!hasModernShareParams(params, this.keysDefinitions) &&
|
|
935
|
+
hasLegacyParams(params, this.legacyOptions)) {
|
|
936
|
+
return this.legacy.parseUrl(params);
|
|
937
|
+
}
|
|
938
|
+
const { urlsKey, layers: layersDef, groups: groupsDef } = this.keysDefinitions;
|
|
939
|
+
const layersArray = this.splitParam(getParamValue(params, layersDef.key), ';');
|
|
940
|
+
const urlsArray = this.splitParam(getParamValue(params, urlsKey), ',');
|
|
941
|
+
const groupsArray = this.splitParam(getParamValue(params, groupsDef.key), ';');
|
|
942
|
+
const groupsOptions = groupsArray.map((layer) => this.parseGroup(layer));
|
|
943
|
+
const layersOptions = layersArray
|
|
944
|
+
.map((layer) => this.parseLayer(layer, urlsArray))
|
|
945
|
+
.filter(Boolean);
|
|
946
|
+
return [...groupsOptions, ...layersOptions];
|
|
947
|
+
}
|
|
948
|
+
splitParam(value, delimiter) {
|
|
949
|
+
return value ? value.split(delimiter) : [];
|
|
950
|
+
}
|
|
951
|
+
parsePosition(params) {
|
|
952
|
+
const position = params[this.keysDefinitions.pos.key];
|
|
953
|
+
if (!position) {
|
|
954
|
+
return this.legacy.parsePosition(params);
|
|
955
|
+
}
|
|
956
|
+
const { center, zoom, rotation, projection } = this.keysDefinitions.pos.params;
|
|
957
|
+
return ObjectUtils.removeUndefined({
|
|
958
|
+
center: center.parse(position),
|
|
959
|
+
zoom: zoom.parse(position),
|
|
960
|
+
rotation: rotation.parse(position),
|
|
961
|
+
projection: projection.parse(position)
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
parseLayer(layer, urls) {
|
|
965
|
+
const urlIndex = this.extractUrlIndex(layer);
|
|
966
|
+
if (urlIndex === undefined)
|
|
967
|
+
return undefined;
|
|
968
|
+
const layerNames = this.extractLayerNames(layer);
|
|
969
|
+
if (layerNames === undefined)
|
|
970
|
+
return undefined;
|
|
971
|
+
const { zIndex, visibility, type, opacity, parentId } = this.extractLayerProperties(layer);
|
|
972
|
+
const url = urls[urlIndex];
|
|
973
|
+
const version = this.extractVersionFromUrl(url);
|
|
974
|
+
const sourceOptions = buildDataSourceOptions(type, url, layerNames, version);
|
|
975
|
+
return ObjectUtils.removeUndefined({
|
|
976
|
+
sourceOptions,
|
|
977
|
+
visible: visibility,
|
|
978
|
+
zIndex,
|
|
979
|
+
opacity,
|
|
980
|
+
parentId
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
parseGroup(properties) {
|
|
984
|
+
const { params } = this.keysDefinitions.groups;
|
|
985
|
+
return ObjectUtils.removeUndefined({
|
|
986
|
+
id: params.id.parse(properties),
|
|
987
|
+
title: params.title.parse(properties),
|
|
988
|
+
zIndex: params.zIndex.parse(properties),
|
|
989
|
+
visible: params.visible.parse(properties),
|
|
990
|
+
opacity: params.opacity.parse(properties),
|
|
991
|
+
parentId: params.parentId.parse(properties),
|
|
992
|
+
expanded: params.expanded.parse(properties),
|
|
993
|
+
type: 'group'
|
|
994
|
+
});
|
|
995
|
+
}
|
|
996
|
+
extractVersionFromUrl(url) {
|
|
997
|
+
const versionDef = this.keysDefinitions.layers.params.version;
|
|
998
|
+
return versionDef.parse(url);
|
|
999
|
+
}
|
|
1000
|
+
extractUrlIndex(layer) {
|
|
1001
|
+
const { index } = this.keysDefinitions.layers.params;
|
|
1002
|
+
const regex = index ? new RegExp(`([\\d.]+)${index}`) : /([\d.]+)/;
|
|
1003
|
+
const match = layer.match(regex);
|
|
1004
|
+
return match ? parseInt(match[1], 10) : undefined;
|
|
1005
|
+
}
|
|
1006
|
+
extractLayerNames(layer) {
|
|
1007
|
+
const { names } = this.keysDefinitions.layers.params;
|
|
1008
|
+
const pattern = new RegExp(`\\[.*?\\]${names.key}`, 'g');
|
|
1009
|
+
const matches = layer.match(pattern);
|
|
1010
|
+
if (!matches)
|
|
1011
|
+
return undefined;
|
|
1012
|
+
return matches
|
|
1013
|
+
.map((match) => match.slice(1, -`]${names.key}`.length))
|
|
1014
|
+
.join('\n')
|
|
1015
|
+
.split(',');
|
|
1016
|
+
}
|
|
1017
|
+
extractLayerProperties(properties) {
|
|
1018
|
+
const { params } = this.keysDefinitions.layers;
|
|
1019
|
+
return {
|
|
1020
|
+
zIndex: params.zIndex.parse(properties),
|
|
1021
|
+
visibility: params.visible.parse(properties),
|
|
1022
|
+
type: params.type.parse(properties),
|
|
1023
|
+
opacity: params.opacity.parse(properties),
|
|
1024
|
+
parentId: params.parentId.parse(properties)
|
|
1025
|
+
};
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
class ShareMapService {
|
|
1030
|
+
routeService;
|
|
1031
|
+
document;
|
|
1032
|
+
language = '';
|
|
1033
|
+
options;
|
|
1034
|
+
optionsLegacy;
|
|
1035
|
+
keysDefinitions;
|
|
1036
|
+
encoder;
|
|
1037
|
+
parser;
|
|
1038
|
+
constructor(routeService, document) {
|
|
1039
|
+
this.routeService = routeService;
|
|
1040
|
+
this.document = document;
|
|
1041
|
+
this.options = SHARE_MAP_KEYS_DEFAULT_OPTIONS;
|
|
1042
|
+
this.optionsLegacy = this.routeService.legacyOptions;
|
|
1043
|
+
this.keysDefinitions = shareMapKeyDefs({
|
|
1044
|
+
...SHARE_MAP_KEYS_DEFAULT_OPTIONS,
|
|
1045
|
+
languageKey: this.routeService.options.languageKey
|
|
1046
|
+
});
|
|
1047
|
+
this.encoder = new ShareMapEncoder(this.keysDefinitions, document);
|
|
1048
|
+
this.parser = new ShareMapParser(this.keysDefinitions, this.routeService.legacyOptions);
|
|
1049
|
+
this.routeService.queryParams.subscribe((params) => {
|
|
1050
|
+
const language = this.options.languageKey;
|
|
1051
|
+
if (params[language]) {
|
|
1052
|
+
this.language = params[language];
|
|
1053
|
+
}
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
getContext(params) {
|
|
1057
|
+
return (params[this.options.context] ?? params[this.optionsLegacy.contextKey]);
|
|
1058
|
+
}
|
|
1059
|
+
getZoom(params) {
|
|
1060
|
+
return this.parser.parsePosition(params).zoom;
|
|
1061
|
+
}
|
|
1062
|
+
getUrlWithApi(formValues) {
|
|
1063
|
+
const loc = this.document.location;
|
|
1064
|
+
const origin = loc.origin;
|
|
1065
|
+
const pathname = loc.pathname;
|
|
1066
|
+
return this.language
|
|
1067
|
+
? `${origin + pathname}?context=${formValues.uri}&lang=${this.language}`
|
|
1068
|
+
: `${origin + pathname}?context=${formValues.uri}`;
|
|
1069
|
+
}
|
|
1070
|
+
hasPositionParams(params) {
|
|
1071
|
+
const { projectionKey, rotationKey, zoomKey, centerKey } = this.optionsLegacy;
|
|
1072
|
+
const { pos } = this.keysDefinitions;
|
|
1073
|
+
return Boolean(params[pos.key] ||
|
|
1074
|
+
params[projectionKey] ||
|
|
1075
|
+
params[rotationKey] ||
|
|
1076
|
+
params[zoomKey] ||
|
|
1077
|
+
params[centerKey]);
|
|
1078
|
+
}
|
|
1079
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapService, deps: [{ token: i1.RouteService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1080
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapService, providedIn: 'root' });
|
|
1081
|
+
}
|
|
1082
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapService, decorators: [{
|
|
1083
|
+
type: Injectable,
|
|
1084
|
+
args: [{
|
|
1085
|
+
providedIn: 'root'
|
|
1086
|
+
}]
|
|
1087
|
+
}], ctorParameters: () => [{ type: i1.RouteService }, { type: Document, decorators: [{
|
|
1088
|
+
type: Inject,
|
|
1089
|
+
args: [DOCUMENT]
|
|
1090
|
+
}] }] });
|
|
1091
|
+
|
|
75
1092
|
var TypePermission;
|
|
76
1093
|
(function (TypePermission) {
|
|
77
1094
|
TypePermission[TypePermission["null"] = 0] = "null";
|
|
@@ -93,6 +1110,7 @@ class ContextService {
|
|
|
93
1110
|
messageService;
|
|
94
1111
|
storageService;
|
|
95
1112
|
exportService;
|
|
1113
|
+
shareMapService;
|
|
96
1114
|
route;
|
|
97
1115
|
context$ = new BehaviorSubject(undefined);
|
|
98
1116
|
contexts$ = new BehaviorSubject({ ours: [] });
|
|
@@ -116,7 +1134,7 @@ class ContextService {
|
|
|
116
1134
|
this._defaultContextUri = uri;
|
|
117
1135
|
}
|
|
118
1136
|
_defaultContextUri;
|
|
119
|
-
constructor(http, authService, languageService, config, messageService, storageService, exportService, route) {
|
|
1137
|
+
constructor(http, authService, languageService, config, messageService, storageService, exportService, shareMapService, route) {
|
|
120
1138
|
this.http = http;
|
|
121
1139
|
this.authService = authService;
|
|
122
1140
|
this.languageService = languageService;
|
|
@@ -124,6 +1142,7 @@ class ContextService {
|
|
|
124
1142
|
this.messageService = messageService;
|
|
125
1143
|
this.storageService = storageService;
|
|
126
1144
|
this.exportService = exportService;
|
|
1145
|
+
this.shareMapService = shareMapService;
|
|
127
1146
|
this.route = route;
|
|
128
1147
|
this.options = Object.assign({
|
|
129
1148
|
basePath: 'contexts',
|
|
@@ -131,7 +1150,6 @@ class ContextService {
|
|
|
131
1150
|
defaultContextUri: '_default'
|
|
132
1151
|
}, this.config.getConfig('context'));
|
|
133
1152
|
this.baseUrl = this.options.url ?? '';
|
|
134
|
-
this.readParamsFromRoute();
|
|
135
1153
|
if (this.authService.hasAuthService) {
|
|
136
1154
|
this.authService.logged$.subscribe((logged) => {
|
|
137
1155
|
if (logged) {
|
|
@@ -343,9 +1361,9 @@ class ContextService {
|
|
|
343
1361
|
this.loadContext(this.defaultContextUri);
|
|
344
1362
|
}
|
|
345
1363
|
};
|
|
346
|
-
if (this.route
|
|
1364
|
+
if (this.route) {
|
|
347
1365
|
this.route.queryParams.pipe(debounceTime(100)).subscribe((params) => {
|
|
348
|
-
const contextParam =
|
|
1366
|
+
const contextParam = this.shareMapService.getContext(params);
|
|
349
1367
|
let direct = false;
|
|
350
1368
|
if (contextParam) {
|
|
351
1369
|
this.defaultContextUri = contextParam;
|
|
@@ -568,28 +1586,6 @@ class ContextService {
|
|
|
568
1586
|
getContextLayers(map) {
|
|
569
1587
|
return map.layerController.treeLayers;
|
|
570
1588
|
}
|
|
571
|
-
readParamsFromRoute() {
|
|
572
|
-
if (!this.route) {
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
this.route.queryParams.subscribe((params) => {
|
|
576
|
-
const centerKey = this.route.options.centerKey;
|
|
577
|
-
if (centerKey && params[centerKey]) {
|
|
578
|
-
const centerParams = params[centerKey];
|
|
579
|
-
this.mapViewFromRoute.center = centerParams.split(',').map(Number);
|
|
580
|
-
}
|
|
581
|
-
const projectionKey = this.route.options.projectionKey;
|
|
582
|
-
if (projectionKey && params[projectionKey]) {
|
|
583
|
-
const projectionParam = params[projectionKey];
|
|
584
|
-
this.mapViewFromRoute.projection = projectionParam;
|
|
585
|
-
}
|
|
586
|
-
const zoomKey = this.route.options.zoomKey;
|
|
587
|
-
if (zoomKey && params[zoomKey]) {
|
|
588
|
-
const zoomParam = params[zoomKey];
|
|
589
|
-
this.mapViewFromRoute.zoom = Number(zoomParam);
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
1589
|
getPath(file) {
|
|
594
1590
|
const basePath = this.options.basePath.replace(/\/$/, '');
|
|
595
1591
|
return `${basePath}/${file}`;
|
|
@@ -663,15 +1659,15 @@ class ContextService {
|
|
|
663
1659
|
}
|
|
664
1660
|
return found;
|
|
665
1661
|
}
|
|
666
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
667
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1662
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextService, deps: [{ token: i1$1.HttpClient }, { token: i2.AuthService }, { token: i4.LanguageService }, { token: i1$2.ConfigService }, { token: i3.MessageService }, { token: i6.StorageService }, { token: i1$3.ExportService }, { token: ShareMapService }, { token: i1.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1663
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextService, providedIn: 'root' });
|
|
668
1664
|
}
|
|
669
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1665
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextService, decorators: [{
|
|
670
1666
|
type: Injectable,
|
|
671
1667
|
args: [{
|
|
672
1668
|
providedIn: 'root'
|
|
673
1669
|
}]
|
|
674
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i4.LanguageService }, { type: i1$
|
|
1670
|
+
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.AuthService }, { type: i4.LanguageService }, { type: i1$2.ConfigService }, { type: i3.MessageService }, { type: i6.StorageService }, { type: i1$3.ExportService }, { type: ShareMapService }, { type: i1.RouteService, decorators: [{
|
|
675
1671
|
type: Optional
|
|
676
1672
|
}] }] });
|
|
677
1673
|
|
|
@@ -713,10 +1709,10 @@ class ContextExportService {
|
|
|
713
1709
|
}
|
|
714
1710
|
return false;
|
|
715
1711
|
}
|
|
716
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
717
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1712
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1713
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextExportService, providedIn: 'root' });
|
|
718
1714
|
}
|
|
719
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextExportService, decorators: [{
|
|
720
1716
|
type: Injectable,
|
|
721
1717
|
args: [{
|
|
722
1718
|
providedIn: 'root'
|
|
@@ -981,15 +1977,15 @@ class ContextImportService {
|
|
|
981
1977
|
const context = JSON.parse(data);
|
|
982
1978
|
return context;
|
|
983
1979
|
}
|
|
984
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
985
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1980
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextImportService, deps: [{ token: i1$2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1981
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextImportService, providedIn: 'root' });
|
|
986
1982
|
}
|
|
987
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1983
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextImportService, decorators: [{
|
|
988
1984
|
type: Injectable,
|
|
989
1985
|
args: [{
|
|
990
1986
|
providedIn: 'root'
|
|
991
1987
|
}]
|
|
992
|
-
}], ctorParameters: () => [{ type: i1$
|
|
1988
|
+
}], ctorParameters: () => [{ type: i1$2.ConfigService }] });
|
|
993
1989
|
|
|
994
1990
|
class ContextImportExportComponent {
|
|
995
1991
|
contextImportService;
|
|
@@ -1085,10 +2081,10 @@ class ContextImportExportComponent {
|
|
|
1085
2081
|
onImportExportChange(event) {
|
|
1086
2082
|
this.activeImportExport = event.value;
|
|
1087
2083
|
}
|
|
1088
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1089
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2084
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextImportExportComponent, deps: [{ token: ContextImportService }, { token: ContextExportService }, { token: i3.MessageService }, { token: i4$1.UntypedFormBuilder }, { token: i1$2.ConfigService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2085
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextImportExportComponent, isStandalone: true, selector: "igo-context-import-export", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeImportExport\"\n (change)=\"onImportExportChange($event)\"\n >\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\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\"\n [disabled]=\"loading$ | async\"\n >\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($any($event.target).files)\"\n />\n </div>\n </form>\n <section class=\"mat-typography\">\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n <ul>\n <li>\n {{\n 'igo.geo.importExportForm.importSizeMax'\n | translate: { size: fileSizeMb }\n }}\n </li>\n </ul>\n </section>\n</div>\n\n<form\n class=\"igo-form\"\n *ngIf=\"activeImportExport === 'export'\"\n [formGroup]=\"form\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field class=\"example-full-width\">\n <mat-label>{{\n 'igo.context.contextImportExport.export.exportContextName' | translate\n }}</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>{{\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\n }}</mat-label>\n <mat-select formControlName=\"layers\" multiple>\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\n {{\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\n }}\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let layer of userControlledLayerList\"\n [value]=\"layer\"\n >{{ layer.title }}</mat-option\n >\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 >\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"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
1090
2086
|
}
|
|
1091
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2087
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextImportExportComponent, decorators: [{
|
|
1092
2088
|
type: Component,
|
|
1093
2089
|
args: [{ selector: 'igo-context-import-export', imports: [
|
|
1094
2090
|
MatButtonToggleModule,
|
|
@@ -1106,7 +2102,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
1106
2102
|
AsyncPipe,
|
|
1107
2103
|
IgoLanguageModule
|
|
1108
2104
|
], template: "<div class=\"import-export-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeImportExport\"\n (change)=\"onImportExportChange($event)\"\n >\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\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\"\n [disabled]=\"loading$ | async\"\n >\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($any($event.target).files)\"\n />\n </div>\n </form>\n <section class=\"mat-typography\">\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n <ul>\n <li>\n {{\n 'igo.geo.importExportForm.importSizeMax'\n | translate: { size: fileSizeMb }\n }}\n </li>\n </ul>\n </section>\n</div>\n\n<form\n class=\"igo-form\"\n *ngIf=\"activeImportExport === 'export'\"\n [formGroup]=\"form\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field class=\"example-full-width\">\n <mat-label>{{\n 'igo.context.contextImportExport.export.exportContextName' | translate\n }}</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>{{\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\n }}</mat-label>\n <mat-select formControlName=\"layers\" multiple>\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\n {{\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\n }}\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let layer of userControlledLayerList\"\n [value]=\"layer\"\n >{{ layer.title }}</mat-option\n >\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 >\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"] }]
|
|
1109
|
-
}], ctorParameters: () => [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.MessageService }, { type: i4$1.UntypedFormBuilder }, { type: i1$
|
|
2105
|
+
}], ctorParameters: () => [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.MessageService }, { type: i4$1.UntypedFormBuilder }, { type: i1$2.ConfigService }, { type: ContextService }], propDecorators: { map: [{
|
|
1110
2106
|
type: Input
|
|
1111
2107
|
}] } });
|
|
1112
2108
|
|
|
@@ -1119,11 +2115,11 @@ class IgoContextImportExportModule {
|
|
|
1119
2115
|
ngModule: IgoContextImportExportModule
|
|
1120
2116
|
};
|
|
1121
2117
|
}
|
|
1122
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1123
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
1124
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
2118
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextImportExportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2119
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoContextImportExportModule, imports: [ContextImportExportComponent], exports: [ContextImportExportComponent] });
|
|
2120
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextImportExportModule, imports: [ContextImportExportComponent] });
|
|
1125
2121
|
}
|
|
1126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextImportExportModule, decorators: [{
|
|
1127
2123
|
type: NgModule,
|
|
1128
2124
|
args: [{
|
|
1129
2125
|
imports: [ContextImportExportComponent],
|
|
@@ -1200,10 +2196,10 @@ class ContextFormComponent {
|
|
|
1200
2196
|
uri: [uri || ' ']
|
|
1201
2197
|
});
|
|
1202
2198
|
}
|
|
1203
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1204
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2199
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextFormComponent, deps: [{ token: i1$4.Clipboard }, { token: i4$1.UntypedFormBuilder }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2200
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextFormComponent, isStandalone: true, selector: "igo-context-form", inputs: { btnSubmitText: "btnSubmitText", context: "context", disabled: "disabled" }, outputs: { submitForm: "submitForm", clone: "clone", delete: "delete" }, ngImport: i0, template: "<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n>\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n maxlength=\"128\"\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\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\n matInput\n maxlength=\"64\"\n floatLabel=\"always\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\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 >\n <mat-icon>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 >\n {{ 'igo.context.contextManager.form.edit' | translate }}\n </button>\n </div>\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"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
1205
2201
|
}
|
|
1206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextFormComponent, decorators: [{
|
|
1207
2203
|
type: Component,
|
|
1208
2204
|
args: [{ selector: 'igo-context-form', imports: [
|
|
1209
2205
|
FormsModule,
|
|
@@ -1216,7 +2212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
1216
2212
|
MatIconModule,
|
|
1217
2213
|
IgoLanguageModule
|
|
1218
2214
|
], template: "<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n>\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n maxlength=\"128\"\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\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\n matInput\n maxlength=\"64\"\n floatLabel=\"always\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\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 >\n <mat-icon>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 >\n {{ 'igo.context.contextManager.form.edit' | translate }}\n </button>\n </div>\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"] }]
|
|
1219
|
-
}], ctorParameters: () => [{ type: i1$
|
|
2215
|
+
}], ctorParameters: () => [{ type: i1$4.Clipboard }, { type: i4$1.UntypedFormBuilder }, { type: i3.MessageService }], propDecorators: { btnSubmitText: [{
|
|
1220
2216
|
type: Input
|
|
1221
2217
|
}], context: [{
|
|
1222
2218
|
type: Input
|
|
@@ -1247,10 +2243,10 @@ class ContextEditComponent {
|
|
|
1247
2243
|
refresh() {
|
|
1248
2244
|
this.cd.detectChanges();
|
|
1249
2245
|
}
|
|
1250
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1251
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2246
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextEditComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2247
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextEditComponent, isStandalone: true, selector: "igo-context-edit", inputs: { context: "context" }, outputs: { submitForm: "submitForm" }, ngImport: i0, template: "<igo-context-form\n *ngIf=\"context\"\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n [context]=\"context\"\n (submitForm)=\"submitForm.emit($event)\"\n>\n</igo-context-form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ContextFormComponent, selector: "igo-context-form", inputs: ["btnSubmitText", "context", "disabled"], outputs: ["submitForm", "clone", "delete"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
1252
2248
|
}
|
|
1253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2249
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextEditComponent, decorators: [{
|
|
1254
2250
|
type: Component,
|
|
1255
2251
|
args: [{ selector: 'igo-context-edit', imports: [NgIf, ContextFormComponent, IgoLanguageModule], template: "<igo-context-form\n *ngIf=\"context\"\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n [context]=\"context\"\n (submitForm)=\"submitForm.emit($event)\"\n>\n</igo-context-form>\n" }]
|
|
1256
2252
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { context: [{
|
|
@@ -1289,10 +2285,10 @@ class ContextEditBindingDirective {
|
|
|
1289
2285
|
handleEditedContextChange(context) {
|
|
1290
2286
|
this.component.context = context;
|
|
1291
2287
|
}
|
|
1292
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1293
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
2288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextEditBindingDirective, deps: [{ token: ContextEditComponent, self: true }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2289
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: ContextEditBindingDirective, isStandalone: true, selector: "[igoContextEditBinding]", outputs: { submitSuccessed: "submitSuccessed" }, host: { listeners: { "submitForm": "onEdit($event)" } }, ngImport: i0 });
|
|
1294
2290
|
}
|
|
1295
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextEditBindingDirective, decorators: [{
|
|
1296
2292
|
type: Directive,
|
|
1297
2293
|
args: [{
|
|
1298
2294
|
selector: '[igoContextEditBinding]',
|
|
@@ -1339,10 +2335,10 @@ class ContextItemComponent {
|
|
|
1339
2335
|
favoriteClick(context) {
|
|
1340
2336
|
this.favorite.emit(context);
|
|
1341
2337
|
}
|
|
1342
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1343
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2338
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextItemComponent, deps: [{ token: i2.AuthService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2339
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextItemComponent, isStandalone: true, selector: "igo-context-item", inputs: { showFavorite: "showFavorite", context: "context", default: "default", selected: "selected" }, outputs: { edit: "edit", delete: "delete", save: "save", clone: "clone", hide: "hide", show: "show", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools" }, ngImport: i0, template: "<mat-list-item\n class=\"mat-list-item\"\n [ngClass]=\"{ 'mat-list-item-light': hidden }\"\n>\n <button\n *ngIf=\"auth.authenticated\"\n matListItemAvatar\n mat-icon-button\n igoStopPropagation\n [matTooltip]=\"\n auth.authenticated\n ? ('igo.context.contextManager.favorite' | translate)\n : ''\n \"\n matTooltipShowDelay=\"500\"\n [color]=\"default ? 'primary' : 'default'\"\n (click)=\"favoriteClick(context)\"\n >\n <mat-icon *ngIf=\"!context.iconImage\">{{\n context.icon\n ? context.icon\n : context.scope === 'public'\n ? 'public'\n : 'star'\n }}</mat-icon>\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\" />\n </button>\n <button\n matListItemAvatar\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 >\n <mat-icon>star</mat-icon>\n </button>\n <span matListItemTitle>{{ context.title }}</span>\n\n <div\n *ngIf=\"auth.authenticated\"\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n collapsed &&\n selected &&\n (context.permission === typePermission[typePermission.write] ||\n context.imported)\n \"\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 >\n <mat-icon>save</mat-icon>\n </button>\n\n <div #actions class=\"igo-actions-expand-container\">\n <button\n *ngIf=\"canShare && !context.imported\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.managePermissions' | translate\n \"\n matTooltipShowDelay=\"500\"\n [color]=\"color\"\n (click)=\"managePermissions.emit(context)\"\n >\n <mat-icon>manage_accounts</mat-icon>\n </button>\n\n <button\n *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 >\n <mat-icon>content_copy</mat-icon>\n </button>\n\n <button\n *ngIf=\"\n context.permission === typePermission[typePermission.write] &&\n !context.imported\n \"\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 >\n <mat-icon>edit</mat-icon>\n </button>\n\n <button\n *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 >\n <mat-icon>visibility</mat-icon>\n </button>\n\n <button\n *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 >\n <mat-icon>visibility_off</mat-icon>\n </button>\n\n <button\n *ngIf=\"\n context.permission === typePermission[typePermission.write] ||\n context.imported\n \"\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 >\n <mat-icon>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 >\n <mat-icon>more_horiz</mat-icon>\n </button>\n </div>\n</mat-list-item>\n", styles: [":host{overflow:hidden}:host .igo-actions-container{flex-shrink:0}:host .igo-actions-expand-container{display:inline-flex}:host mat-icon.disabled{color:#00000061}:host button[matlistitemavatar]{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$1.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i3$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i3$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CollapseDirective, selector: "[igoCollapse]", inputs: ["target", "collapsed"], outputs: ["toggle"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1344
2340
|
}
|
|
1345
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2341
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextItemComponent, decorators: [{
|
|
1346
2342
|
type: Component,
|
|
1347
2343
|
args: [{ selector: 'igo-context-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1348
2344
|
MatListModule,
|
|
@@ -1389,10 +2385,10 @@ class BookmarkDialogComponent {
|
|
|
1389
2385
|
constructor(dialogRef) {
|
|
1390
2386
|
this.dialogRef = dialogRef;
|
|
1391
2387
|
}
|
|
1392
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1393
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2388
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookmarkDialogComponent, deps: [{ token: i1$5.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2389
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: BookmarkDialogComponent, isStandalone: true, selector: "igo-bookmark-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n maxlength=\"128\"\n [placeholder]=\"\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\n \"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
1394
2390
|
}
|
|
1395
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2391
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookmarkDialogComponent, decorators: [{
|
|
1396
2392
|
type: Component,
|
|
1397
2393
|
args: [{ selector: 'igo-bookmark-dialog', imports: [
|
|
1398
2394
|
MatDialogTitle,
|
|
@@ -1404,7 +2400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
1404
2400
|
MatButtonModule,
|
|
1405
2401
|
IgoLanguageModule
|
|
1406
2402
|
], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n maxlength=\"128\"\n [placeholder]=\"\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\n \"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n" }]
|
|
1407
|
-
}], ctorParameters: () => [{ type: i1$
|
|
2403
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialogRef }] });
|
|
1408
2404
|
|
|
1409
2405
|
var ContextListControlsEnum;
|
|
1410
2406
|
(function (ContextListControlsEnum) {
|
|
@@ -1732,10 +2728,10 @@ class ContextListComponent {
|
|
|
1732
2728
|
context.hidden = false;
|
|
1733
2729
|
this.show.emit(context);
|
|
1734
2730
|
}
|
|
1735
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1736
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <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 >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n class=\"sort-alpha\"\n [class.--active]=\"sortedAlpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort()\"\n >\n <mat-icon color=\"primary\">sort_by_alpha</mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"add\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\">filter_alt</mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\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 >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.sort-alpha.--active mat-icon{color:red}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2731
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$2.ConfigService }, { token: i2.AuthService }, { token: i1$5.MatDialog }, { token: i4.LanguageService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2732
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <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 >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n class=\"sort-alpha\"\n [class.--active]=\"sortedAlpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort()\"\n >\n <mat-icon color=\"primary\">sort_by_alpha</mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"add\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\">filter_alt</mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\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 >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.sort-alpha.--active mat-icon{color:red}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1737
2733
|
}
|
|
1738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2734
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextListComponent, decorators: [{
|
|
1739
2735
|
type: Component,
|
|
1740
2736
|
args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1741
2737
|
ListComponent,
|
|
@@ -1757,7 +2753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
1757
2753
|
KeyValuePipe,
|
|
1758
2754
|
IgoLanguageModule
|
|
1759
2755
|
], template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <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 >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n class=\"sort-alpha\"\n [class.--active]=\"sortedAlpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort()\"\n >\n <mat-icon color=\"primary\">sort_by_alpha</mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"add\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\">filter_alt</mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\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 >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.sort-alpha.--active mat-icon{color:red}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
|
|
1760
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$
|
|
2756
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$2.ConfigService }, { type: i2.AuthService }, { type: i1$5.MatDialog }, { type: i4.LanguageService }, { type: i6.StorageService }], propDecorators: { contexts: [{
|
|
1761
2757
|
type: Input
|
|
1762
2758
|
}], selectedContext: [{
|
|
1763
2759
|
type: Input
|
|
@@ -1984,10 +2980,10 @@ class ContextListBindingDirective {
|
|
|
1984
2980
|
handleContextsChange(contexts) {
|
|
1985
2981
|
this.component.contexts = contexts;
|
|
1986
2982
|
}
|
|
1987
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1988
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
2983
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextListBindingDirective, deps: [{ token: ContextListComponent, self: true }, { token: ContextService }, { token: i1$3.MapService }, { token: i4.LanguageService }, { token: i5$1.ConfirmDialogService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: i6.StorageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2984
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: ContextListBindingDirective, isStandalone: true, selector: "[igoContextListBinding]", host: { listeners: { "select": "onSelect($event)", "edit": "onEdit($event)", "save": "onSave($event)", "favorite": "onFavorite($event)", "manageTools": "onManageTools($event)", "managePermissions": "onManagePermissions($event)", "delete": "onDelete($event)", "clone": "onClone($event)", "create": "onCreate($event)", "filterPermissionsChanged": "loadContexts()", "showHiddenContexts": "showHiddenContexts()", "show": "onShowContext($event)", "hide": "onHideContext($event)" } }, providers: [ConfirmDialogService], ngImport: i0 });
|
|
1989
2985
|
}
|
|
1990
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2986
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextListBindingDirective, decorators: [{
|
|
1991
2987
|
type: Directive,
|
|
1992
2988
|
args: [{
|
|
1993
2989
|
selector: '[igoContextListBinding]',
|
|
@@ -1996,7 +2992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
1996
2992
|
}]
|
|
1997
2993
|
}], ctorParameters: () => [{ type: ContextListComponent, decorators: [{
|
|
1998
2994
|
type: Self
|
|
1999
|
-
}] }, { type: ContextService }, { type: i1$
|
|
2995
|
+
}] }, { type: ContextService }, { type: i1$3.MapService }, { type: i4.LanguageService }, { type: i5$1.ConfirmDialogService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: i6.StorageService }, { type: i0.ChangeDetectorRef }], propDecorators: { onSelect: [{
|
|
2000
2996
|
type: HostListener,
|
|
2001
2997
|
args: ['select', ['$event']]
|
|
2002
2998
|
}], onEdit: [{
|
|
@@ -2135,10 +3131,10 @@ class ContextPermissionsComponent {
|
|
|
2135
3131
|
typePermission: this.form.value.typePermission
|
|
2136
3132
|
});
|
|
2137
3133
|
}
|
|
2138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: ContextPermissionsComponent, isStandalone: true, selector: "igo-context-permissions", inputs: { context: "context", permissions: "permissions" }, outputs: { addPermission: "addPermission", removePermission: "removePermission", scopeChanged: "scopeChanged" }, ngImport: i0, template: "<div *ngIf=\"context\">\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\n [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\"\n >\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\n *ngIf=\"context.scope !== 'private' && canWrite\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n >\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\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 <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 <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\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 matListItemIcon>person</mat-icon>\n <h4 matListItemTitle>\n {{ permission.profilTitle }}\n <small class=\"mat-typography\">{{ permission.profil }}</small>\n </h4>\n\n <div\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n canWrite ||\n permission.profil === authService.decodeToken().user.sourceId\n \"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i5$2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5$2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i3$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i3$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
3134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextPermissionsComponent, deps: [{ token: i4$1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i1$1.HttpClient }, { token: i2.AuthService }, { token: i1$2.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3135
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ContextPermissionsComponent, isStandalone: true, selector: "igo-context-permissions", inputs: { context: "context", permissions: "permissions" }, outputs: { addPermission: "addPermission", removePermission: "removePermission", scopeChanged: "scopeChanged" }, ngImport: i0, template: "<div *ngIf=\"context\">\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\n [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\"\n >\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\n *ngIf=\"context.scope !== 'private' && canWrite\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n >\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\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 <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 <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\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 matListItemIcon>person</mat-icon>\n <h4 matListItemTitle>\n {{ permission.profilTitle }}\n <small class=\"mat-typography\">{{ permission.profil }}</small>\n </h4>\n\n <div\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n canWrite ||\n permission.profil === authService.decodeToken().user.sourceId\n \"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i5$2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5$2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i3$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i3$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
2140
3136
|
}
|
|
2141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextPermissionsComponent, decorators: [{
|
|
2142
3138
|
type: Component,
|
|
2143
3139
|
args: [{ selector: 'igo-context-permissions', imports: [
|
|
2144
3140
|
NgIf,
|
|
@@ -2160,7 +3156,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2160
3156
|
KeyValuePipe,
|
|
2161
3157
|
IgoLanguageModule
|
|
2162
3158
|
], template: "<div *ngIf=\"context\">\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\n [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\"\n >\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\n *ngIf=\"context.scope !== 'private' && canWrite\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n >\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\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 <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 <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\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 matListItemIcon>person</mat-icon>\n <h4 matListItemTitle>\n {{ permission.profilTitle }}\n <small class=\"mat-typography\">{{ permission.profil }}</small>\n </h4>\n\n <div\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n canWrite ||\n permission.profil === authService.decodeToken().user.sourceId\n \"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"] }]
|
|
2163
|
-
}], ctorParameters: () => [{ type: i4$1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i1$
|
|
3159
|
+
}], ctorParameters: () => [{ type: i4$1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1$1.HttpClient }, { type: i2.AuthService }, { type: i1$2.ConfigService }], propDecorators: { context: [{
|
|
2164
3160
|
type: Input
|
|
2165
3161
|
}], permissions: [{
|
|
2166
3162
|
type: Input
|
|
@@ -2249,10 +3245,10 @@ class ContextPermissionsBindingDirective {
|
|
|
2249
3245
|
});
|
|
2250
3246
|
}
|
|
2251
3247
|
}
|
|
2252
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2253
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
3248
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextPermissionsBindingDirective, deps: [{ token: ContextPermissionsComponent, self: true }, { token: ContextService }, { token: i4.LanguageService }, { token: i3.MessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3249
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: ContextPermissionsBindingDirective, isStandalone: true, selector: "[igoContextPermissionsBinding]", host: { listeners: { "addPermission": "onAddPermission($event)", "removePermission": "onRemovePermission($event)", "scopeChanged": "onScopeChanged($event)" } }, ngImport: i0 });
|
|
2254
3250
|
}
|
|
2255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ContextPermissionsBindingDirective, decorators: [{
|
|
2256
3252
|
type: Directive,
|
|
2257
3253
|
args: [{
|
|
2258
3254
|
selector: '[igoContextPermissionsBinding]',
|
|
@@ -2278,37 +3274,31 @@ class LayerContextDirective {
|
|
|
2278
3274
|
configService;
|
|
2279
3275
|
styleListService;
|
|
2280
3276
|
styleService;
|
|
2281
|
-
|
|
3277
|
+
shareMapService;
|
|
2282
3278
|
context$$;
|
|
2283
3279
|
queryParams;
|
|
2284
3280
|
contextLayers = [];
|
|
2285
3281
|
removeLayersOnContextChange = true;
|
|
3282
|
+
contextLayersLoaded = new EventEmitter();
|
|
2286
3283
|
get map() {
|
|
2287
3284
|
return this.component.map;
|
|
2288
3285
|
}
|
|
2289
|
-
constructor(component, contextService, layerService, configService, styleListService, styleService,
|
|
3286
|
+
constructor(component, contextService, layerService, configService, styleListService, styleService, shareMapService) {
|
|
2290
3287
|
this.component = component;
|
|
2291
3288
|
this.contextService = contextService;
|
|
2292
3289
|
this.layerService = layerService;
|
|
2293
3290
|
this.configService = configService;
|
|
2294
3291
|
this.styleListService = styleListService;
|
|
2295
3292
|
this.styleService = styleService;
|
|
2296
|
-
this.
|
|
3293
|
+
this.shareMapService = shareMapService;
|
|
2297
3294
|
}
|
|
2298
3295
|
ngOnInit() {
|
|
2299
|
-
this.context$$ = this.
|
|
2300
|
-
.pipe(
|
|
3296
|
+
this.context$$ = this.shareMapService.routeService.queryParams
|
|
3297
|
+
.pipe(switchMap((params) => {
|
|
3298
|
+
this.queryParams = params ?? {};
|
|
3299
|
+
return this.contextService.context$.pipe(filter((context) => context !== undefined));
|
|
3300
|
+
}))
|
|
2301
3301
|
.subscribe((context) => this.handleContextChange(context));
|
|
2302
|
-
if (this.route &&
|
|
2303
|
-
this.route.options.visibleOnLayersKey &&
|
|
2304
|
-
this.route.options.visibleOffLayersKey &&
|
|
2305
|
-
this.route.options.contextKey) {
|
|
2306
|
-
this.route.queryParams
|
|
2307
|
-
.pipe(first((params) => !ObjectUtils.isEmpty(params)))
|
|
2308
|
-
.subscribe((params) => {
|
|
2309
|
-
this.queryParams = params;
|
|
2310
|
-
});
|
|
2311
|
-
}
|
|
2312
3302
|
}
|
|
2313
3303
|
ngOnDestroy() {
|
|
2314
3304
|
this.context$$.unsubscribe();
|
|
@@ -2317,6 +3307,14 @@ class LayerContextDirective {
|
|
|
2317
3307
|
if (context.layers === undefined) {
|
|
2318
3308
|
return;
|
|
2319
3309
|
}
|
|
3310
|
+
/**
|
|
3311
|
+
* Assign an id to each layer group if it doesn't have one.
|
|
3312
|
+
* This is needed to be able to detect layer groups in the context that doesn't have and id and be able to ignore them in the share
|
|
3313
|
+
*/
|
|
3314
|
+
if (context.layers?.length) {
|
|
3315
|
+
addIdToGroups(context.layers);
|
|
3316
|
+
}
|
|
3317
|
+
const contextLayers = this.handleContextWithSharedUrl(ObjectUtils.copyDeep(context));
|
|
2320
3318
|
if (this.removeLayersOnContextChange === true) {
|
|
2321
3319
|
this.map.layerController.reset();
|
|
2322
3320
|
}
|
|
@@ -2327,7 +3325,7 @@ class LayerContextDirective {
|
|
|
2327
3325
|
this.layerService.unavailableLayers = [];
|
|
2328
3326
|
const importExportOptions = this.configService.getConfig('importExport');
|
|
2329
3327
|
this.layerService
|
|
2330
|
-
.createLayers(
|
|
3328
|
+
.createLayers(contextLayers, context.uri)
|
|
2331
3329
|
.subscribe((layers) => {
|
|
2332
3330
|
this.handleAddLayers(layers);
|
|
2333
3331
|
if (context.extraFeatures) {
|
|
@@ -2340,28 +3338,15 @@ class LayerContextDirective {
|
|
|
2340
3338
|
}
|
|
2341
3339
|
});
|
|
2342
3340
|
}
|
|
3341
|
+
this.contextLayersLoaded.emit(true);
|
|
2343
3342
|
});
|
|
2344
|
-
if (this.configService.getConfig('
|
|
3343
|
+
if (this.configService.getConfig('importExport.allowToStoreLayer', false)) {
|
|
2345
3344
|
this.layerService
|
|
2346
3345
|
.createAsyncIdbLayers(context.uri)
|
|
2347
3346
|
.pipe(debounceTime(500))
|
|
2348
3347
|
.subscribe((layers) => this.handleAddLayers(layers));
|
|
2349
3348
|
}
|
|
2350
3349
|
}
|
|
2351
|
-
getFlattenOptions(options) {
|
|
2352
|
-
return options.reduce((accumulator, option) => {
|
|
2353
|
-
if (isLayerGroupOptions(option)) {
|
|
2354
|
-
const children = option.children
|
|
2355
|
-
? this.getFlattenOptions(option.children)
|
|
2356
|
-
: [];
|
|
2357
|
-
accumulator.push(option, ...children);
|
|
2358
|
-
}
|
|
2359
|
-
else {
|
|
2360
|
-
accumulator.push(option);
|
|
2361
|
-
}
|
|
2362
|
-
return accumulator;
|
|
2363
|
-
}, []);
|
|
2364
|
-
}
|
|
2365
3350
|
handleAddLayers(layers) {
|
|
2366
3351
|
const layersFiltrered = layers
|
|
2367
3352
|
.filter((layer) => layer)
|
|
@@ -2381,21 +3366,19 @@ class LayerContextDirective {
|
|
|
2381
3366
|
if (!params || !currentLayerid) {
|
|
2382
3367
|
return visible;
|
|
2383
3368
|
}
|
|
2384
|
-
const contextParams =
|
|
3369
|
+
const contextParams = this.shareMapService.getContext(params);
|
|
2385
3370
|
if (contextParams === currentContext || !contextParams) {
|
|
2386
3371
|
let visibleOnLayersParams = '';
|
|
2387
3372
|
let visibleOffLayersParams = '';
|
|
2388
3373
|
let visiblelayers = [];
|
|
2389
3374
|
let invisiblelayers = [];
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
3375
|
+
const visibleOnLayers = params[this.shareMapService.routeService.options.visibleOnLayersKey];
|
|
3376
|
+
const visibleOffLayers = params[this.shareMapService.routeService.options.visibleOffLayersKey];
|
|
3377
|
+
if (visibleOnLayers) {
|
|
3378
|
+
visibleOnLayersParams = visibleOnLayers;
|
|
2394
3379
|
}
|
|
2395
|
-
if (
|
|
2396
|
-
|
|
2397
|
-
visibleOffLayersParams =
|
|
2398
|
-
params[this.route.options.visibleOffLayersKey];
|
|
3380
|
+
if (visibleOffLayers) {
|
|
3381
|
+
visibleOffLayersParams = visibleOffLayers;
|
|
2399
3382
|
}
|
|
2400
3383
|
/* This order is important because to control whichever
|
|
2401
3384
|
the order of * param. First whe open and close everything.*/
|
|
@@ -2419,37 +3402,69 @@ class LayerContextDirective {
|
|
|
2419
3402
|
}
|
|
2420
3403
|
return visible;
|
|
2421
3404
|
}
|
|
2422
|
-
|
|
2423
|
-
|
|
3405
|
+
handleContextWithSharedUrl(context) {
|
|
3406
|
+
if (!this.queryParams ||
|
|
3407
|
+
(!hasLegacyParams(this.queryParams, this.shareMapService.optionsLegacy) &&
|
|
3408
|
+
!hasModernShareParams(this.queryParams, this.shareMapService.keysDefinitions))) {
|
|
3409
|
+
return context.layers;
|
|
3410
|
+
}
|
|
3411
|
+
const { layers, uri } = context;
|
|
3412
|
+
const contextValue = this.shareMapService.getContext(this.queryParams);
|
|
3413
|
+
if (!contextValue || contextValue === uri) {
|
|
3414
|
+
const layersOptions = this.shareMapService.parser.parseLayers(this.queryParams);
|
|
3415
|
+
if (layersOptions.length) {
|
|
3416
|
+
return mergeLayersOptions([...layers], layersOptions);
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
return layers;
|
|
3420
|
+
}
|
|
3421
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LayerContextDirective, deps: [{ token: i1$3.MapBrowserComponent }, { token: ContextService }, { token: i1$3.LayerService }, { token: i1$2.ConfigService }, { token: i1$3.StyleListService }, { token: i1$3.StyleService }, { token: ShareMapService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3422
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: LayerContextDirective, isStandalone: true, selector: "[igoLayerContext]", inputs: { removeLayersOnContextChange: "removeLayersOnContextChange" }, outputs: { contextLayersLoaded: "contextLayersLoaded" }, ngImport: i0 });
|
|
2424
3423
|
}
|
|
2425
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3424
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LayerContextDirective, decorators: [{
|
|
2426
3425
|
type: Directive,
|
|
2427
3426
|
args: [{
|
|
2428
|
-
selector: '[igoLayerContext]'
|
|
2429
|
-
standalone: true
|
|
3427
|
+
selector: '[igoLayerContext]'
|
|
2430
3428
|
}]
|
|
2431
|
-
}], ctorParameters: () => [{ type: i1$
|
|
2432
|
-
type: Optional
|
|
2433
|
-
}] }], propDecorators: { removeLayersOnContextChange: [{
|
|
3429
|
+
}], ctorParameters: () => [{ type: i1$3.MapBrowserComponent }, { type: ContextService }, { type: i1$3.LayerService }, { type: i1$2.ConfigService }, { type: i1$3.StyleListService }, { type: i1$3.StyleService }, { type: ShareMapService }], propDecorators: { removeLayersOnContextChange: [{
|
|
2434
3430
|
type: Input
|
|
3431
|
+
}], contextLayersLoaded: [{
|
|
3432
|
+
type: Output
|
|
2435
3433
|
}] } });
|
|
3434
|
+
/** Recursive */
|
|
3435
|
+
function addIdToGroups(layerOptions) {
|
|
3436
|
+
for (const options of layerOptions) {
|
|
3437
|
+
if (isLayerGroupOptions(options) && !options.id) {
|
|
3438
|
+
options.id = ID_GROUP_PREFIX + uuid();
|
|
3439
|
+
if (Array.isArray(options.children)) {
|
|
3440
|
+
addIdToGroups(options.children);
|
|
3441
|
+
}
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
}
|
|
2436
3445
|
|
|
2437
3446
|
class MapContextDirective {
|
|
2438
3447
|
contextService;
|
|
2439
3448
|
mediaService;
|
|
3449
|
+
shareMapService;
|
|
2440
3450
|
component;
|
|
2441
3451
|
context$$;
|
|
2442
3452
|
get map() {
|
|
2443
3453
|
return this.component.map;
|
|
2444
3454
|
}
|
|
2445
|
-
|
|
3455
|
+
queryParams;
|
|
3456
|
+
constructor(component, contextService, mediaService, shareMapService) {
|
|
2446
3457
|
this.contextService = contextService;
|
|
2447
3458
|
this.mediaService = mediaService;
|
|
3459
|
+
this.shareMapService = shareMapService;
|
|
2448
3460
|
this.component = component;
|
|
2449
3461
|
}
|
|
2450
3462
|
ngOnInit() {
|
|
2451
|
-
this.context$$ = this.
|
|
2452
|
-
.pipe(
|
|
3463
|
+
this.context$$ = this.shareMapService.routeService.queryParams
|
|
3464
|
+
.pipe(switchMap((params) => {
|
|
3465
|
+
this.queryParams = params ?? {};
|
|
3466
|
+
return this.contextService.context$.pipe(filter((context) => context !== undefined));
|
|
3467
|
+
}))
|
|
2453
3468
|
.subscribe((context) => this.handleContextChange(context));
|
|
2454
3469
|
}
|
|
2455
3470
|
ngOnDestroy() {
|
|
@@ -2460,9 +3475,15 @@ class MapContextDirective {
|
|
|
2460
3475
|
return;
|
|
2461
3476
|
}
|
|
2462
3477
|
const viewContext = context.map.view;
|
|
2463
|
-
|
|
3478
|
+
const shouldOverrideView = !this.component.view ||
|
|
2464
3479
|
viewContext.keepCurrentView !== true ||
|
|
2465
|
-
context.map.view.projection !== this.map.projection
|
|
3480
|
+
context.map.view.projection !== this.map.projection;
|
|
3481
|
+
if (this.shareMapService.hasPositionParams(this.queryParams) &&
|
|
3482
|
+
shouldOverrideView) {
|
|
3483
|
+
const positions = this.shareMapService.parser.parsePosition(this.queryParams);
|
|
3484
|
+
this.component.view = { ...viewContext, ...positions };
|
|
3485
|
+
}
|
|
3486
|
+
else if (shouldOverrideView) {
|
|
2466
3487
|
this.component.view = viewContext;
|
|
2467
3488
|
}
|
|
2468
3489
|
if (this.component.map.geolocationController) {
|
|
@@ -2482,16 +3503,15 @@ class MapContextDirective {
|
|
|
2482
3503
|
this.component.controls = controlsContext;
|
|
2483
3504
|
}
|
|
2484
3505
|
}
|
|
2485
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2486
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
3506
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: MapContextDirective, deps: [{ token: i1$3.MapBrowserComponent }, { token: ContextService }, { token: i3$2.MediaService }, { token: ShareMapService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3507
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: MapContextDirective, isStandalone: true, selector: "[igoMapContext]", ngImport: i0 });
|
|
2487
3508
|
}
|
|
2488
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: MapContextDirective, decorators: [{
|
|
2489
3510
|
type: Directive,
|
|
2490
3511
|
args: [{
|
|
2491
|
-
selector: '[igoMapContext]'
|
|
2492
|
-
standalone: true
|
|
3512
|
+
selector: '[igoMapContext]'
|
|
2493
3513
|
}]
|
|
2494
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3514
|
+
}], ctorParameters: () => [{ type: i1$3.MapBrowserComponent }, { type: ContextService }, { type: i3$2.MediaService }, { type: ShareMapService }] });
|
|
2495
3515
|
|
|
2496
3516
|
/**
|
|
2497
3517
|
* @deprecated import the components/directives directly or CONTEXT_MANAGER_DIRECTIVES for the set
|
|
@@ -2502,8 +3522,8 @@ class IgoContextManagerModule {
|
|
|
2502
3522
|
ngModule: IgoContextManagerModule
|
|
2503
3523
|
};
|
|
2504
3524
|
}
|
|
2505
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2506
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
3525
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
3526
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoContextManagerModule, imports: [ContextListComponent,
|
|
2507
3527
|
ContextListBindingDirective,
|
|
2508
3528
|
ContextItemComponent,
|
|
2509
3529
|
ContextFormComponent,
|
|
@@ -2522,13 +3542,13 @@ class IgoContextManagerModule {
|
|
|
2522
3542
|
ContextPermissionsBindingDirective,
|
|
2523
3543
|
LayerContextDirective,
|
|
2524
3544
|
MapContextDirective] });
|
|
2525
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
3545
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextManagerModule, imports: [ContextListComponent,
|
|
2526
3546
|
ContextItemComponent,
|
|
2527
3547
|
ContextFormComponent,
|
|
2528
3548
|
ContextEditComponent,
|
|
2529
3549
|
ContextPermissionsComponent] });
|
|
2530
3550
|
}
|
|
2531
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextManagerModule, decorators: [{
|
|
2532
3552
|
type: NgModule,
|
|
2533
3553
|
args: [{
|
|
2534
3554
|
imports: [
|
|
@@ -2597,13 +3617,13 @@ class BookmarkButtonComponent {
|
|
|
2597
3617
|
}
|
|
2598
3618
|
});
|
|
2599
3619
|
}
|
|
2600
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2601
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3620
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookmarkButtonComponent, deps: [{ token: i1$5.MatDialog }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3621
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: BookmarkButtonComponent, isStandalone: true, selector: "igo-bookmark-button", inputs: { map: "map", color: "color" }, ngImport: i0, 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 >\n <mat-icon>star</mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
2602
3622
|
}
|
|
2603
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3623
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
|
|
2604
3624
|
type: Component,
|
|
2605
3625
|
args: [{ selector: 'igo-bookmark-button', imports: [MatButtonModule, MatTooltipModule, MatIconModule, IgoLanguageModule], 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 >\n <mat-icon>star</mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"] }]
|
|
2606
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3626
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialog }, { type: ContextService }, { type: i3.MessageService }], propDecorators: { map: [{
|
|
2607
3627
|
type: Input
|
|
2608
3628
|
}], color: [{
|
|
2609
3629
|
type: Input
|
|
@@ -2615,10 +3635,10 @@ class PoiDialogComponent {
|
|
|
2615
3635
|
constructor(dialogRef) {
|
|
2616
3636
|
this.dialogRef = dialogRef;
|
|
2617
3637
|
}
|
|
2618
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2619
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3638
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiDialogComponent, deps: [{ token: i1$5.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3639
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: PoiDialogComponent, isStandalone: true, selector: "igo-poi-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.poiButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
2620
3640
|
}
|
|
2621
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3641
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiDialogComponent, decorators: [{
|
|
2622
3642
|
type: Component,
|
|
2623
3643
|
args: [{ selector: 'igo-poi-dialog', imports: [
|
|
2624
3644
|
MatDialogTitle,
|
|
@@ -2630,7 +3650,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2630
3650
|
MatButtonModule,
|
|
2631
3651
|
IgoLanguageModule
|
|
2632
3652
|
], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.poiButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n" }]
|
|
2633
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3653
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialogRef }] });
|
|
2634
3654
|
|
|
2635
3655
|
class PoiService {
|
|
2636
3656
|
http;
|
|
@@ -2656,12 +3676,12 @@ class PoiService {
|
|
|
2656
3676
|
const url = this.baseUrl + '/pois';
|
|
2657
3677
|
return this.http.post(url, context);
|
|
2658
3678
|
}
|
|
2659
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2660
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
3679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiService, deps: [{ token: i1$1.HttpClient }, { token: i1$2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3680
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiService });
|
|
2661
3681
|
}
|
|
2662
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiService, decorators: [{
|
|
2663
3683
|
type: Injectable
|
|
2664
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$
|
|
3684
|
+
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1$2.ConfigService }] });
|
|
2665
3685
|
|
|
2666
3686
|
class PoiButtonComponent {
|
|
2667
3687
|
dialog;
|
|
@@ -2769,10 +3789,10 @@ class PoiButtonComponent {
|
|
|
2769
3789
|
easing: oleasing.easeOut
|
|
2770
3790
|
});
|
|
2771
3791
|
}
|
|
2772
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2773
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3792
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiButtonComponent, deps: [{ token: i1$5.MatDialog }, { token: i2.AuthService }, { token: PoiService }, { token: i3.MessageService }, { token: i4.LanguageService }, { token: i5$1.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3793
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: PoiButtonComponent, isStandalone: true, selector: "igo-poi-button", inputs: { map: "map", color: "color" }, providers: [PoiService], ngImport: i0, template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon>add-circle</mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"], dependencies: [{ kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
2774
3794
|
}
|
|
2775
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3795
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: PoiButtonComponent, decorators: [{
|
|
2776
3796
|
type: Component,
|
|
2777
3797
|
args: [{ selector: 'igo-poi-button', imports: [
|
|
2778
3798
|
MatSelectModule,
|
|
@@ -2784,7 +3804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2784
3804
|
NgFor,
|
|
2785
3805
|
IgoLanguageModule
|
|
2786
3806
|
], providers: [PoiService], template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon>add-circle</mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"] }]
|
|
2787
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3807
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialog }, { type: i2.AuthService }, { type: PoiService }, { type: i3.MessageService }, { type: i4.LanguageService }, { type: i5$1.ConfirmDialogService }], propDecorators: { map: [{
|
|
2788
3808
|
type: Input
|
|
2789
3809
|
}], color: [{
|
|
2790
3810
|
type: Input
|
|
@@ -2823,10 +3843,10 @@ class UserDialogComponent {
|
|
|
2823
3843
|
clearPreferences() {
|
|
2824
3844
|
this.storageService.clear();
|
|
2825
3845
|
}
|
|
2826
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2827
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3846
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: UserDialogComponent, deps: [{ token: i1$5.MatDialogRef }, { token: i2.AuthService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3847
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: UserDialogComponent, isStandalone: true, selector: "igo-user-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.userButton.infoTitle' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <p>\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\n </p>\n <p>\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\n </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\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
2828
3848
|
}
|
|
2829
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3849
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: UserDialogComponent, decorators: [{
|
|
2830
3850
|
type: Component,
|
|
2831
3851
|
args: [{ selector: 'igo-user-dialog', imports: [
|
|
2832
3852
|
MatDialogTitle,
|
|
@@ -2835,7 +3855,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2835
3855
|
MatDialogActions,
|
|
2836
3856
|
IgoLanguageModule
|
|
2837
3857
|
], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.userButton.infoTitle' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <p>\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\n </p>\n <p>\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\n </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\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n" }]
|
|
2838
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3858
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialogRef }, { type: i2.AuthService }, { type: i6.StorageService }] });
|
|
2839
3859
|
|
|
2840
3860
|
class UserButtonComponent {
|
|
2841
3861
|
dialog;
|
|
@@ -2880,10 +3900,10 @@ class UserButtonComponent {
|
|
|
2880
3900
|
infoUser() {
|
|
2881
3901
|
this.dialog.open(UserDialogComponent, { disableClose: false });
|
|
2882
3902
|
}
|
|
2883
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2884
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3903
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: UserButtonComponent, deps: [{ token: i1$5.MatDialog }, { token: i1$2.ConfigService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3904
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: UserButtonComponent, isStandalone: true, selector: "igo-user-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\n <div\n class=\"igo-user-button-more-container\"\n [@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 >\n <mat-icon>info</mat-icon>\n </button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"logout()\"\n >\n <mat-icon>power_settings_new</mat-icon>\n </button>\n </div>\n\n <button\n mat-icon-button\n [color]=\"auth.authenticated ? color : 'warn'\"\n (click)=\"accountClick()\"\n >\n <mat-icon>account_box</mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PoiButtonComponent, selector: "igo-poi-button", inputs: ["map", "color"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], animations: [userButtonSlideInOut()] });
|
|
2885
3905
|
}
|
|
2886
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3906
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: UserButtonComponent, decorators: [{
|
|
2887
3907
|
type: Component,
|
|
2888
3908
|
args: [{ selector: 'igo-user-button', animations: [userButtonSlideInOut()], imports: [
|
|
2889
3909
|
NgIf,
|
|
@@ -2893,7 +3913,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2893
3913
|
MatIconModule,
|
|
2894
3914
|
IgoLanguageModule
|
|
2895
3915
|
], template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\n <div\n class=\"igo-user-button-more-container\"\n [@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 >\n <mat-icon>info</mat-icon>\n </button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"logout()\"\n >\n <mat-icon>power_settings_new</mat-icon>\n </button>\n </div>\n\n <button\n mat-icon-button\n [color]=\"auth.authenticated ? color : 'warn'\"\n (click)=\"accountClick()\"\n >\n <mat-icon>account_box</mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"] }]
|
|
2896
|
-
}], ctorParameters: () => [{ type: i1$
|
|
3916
|
+
}], ctorParameters: () => [{ type: i1$5.MatDialog }, { type: i1$2.ConfigService }, { type: i2.AuthService }], propDecorators: { map: [{
|
|
2897
3917
|
type: Input
|
|
2898
3918
|
}], color: [{
|
|
2899
3919
|
type: Input
|
|
@@ -2908,20 +3928,20 @@ class IgoContextMapButtonModule {
|
|
|
2908
3928
|
ngModule: IgoContextMapButtonModule
|
|
2909
3929
|
};
|
|
2910
3930
|
}
|
|
2911
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2912
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
3931
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextMapButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
3932
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoContextMapButtonModule, imports: [BookmarkButtonComponent,
|
|
2913
3933
|
BookmarkDialogComponent,
|
|
2914
3934
|
PoiButtonComponent,
|
|
2915
3935
|
UserButtonComponent], exports: [BookmarkButtonComponent,
|
|
2916
3936
|
PoiButtonComponent,
|
|
2917
3937
|
UserButtonComponent,
|
|
2918
3938
|
BookmarkDialogComponent] });
|
|
2919
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
3939
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextMapButtonModule, providers: [PoiService], imports: [BookmarkButtonComponent,
|
|
2920
3940
|
BookmarkDialogComponent,
|
|
2921
3941
|
PoiButtonComponent,
|
|
2922
3942
|
UserButtonComponent] });
|
|
2923
3943
|
}
|
|
2924
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3944
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextMapButtonModule, decorators: [{
|
|
2925
3945
|
type: NgModule,
|
|
2926
3946
|
args: [{
|
|
2927
3947
|
imports: [
|
|
@@ -2940,221 +3960,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
2940
3960
|
}]
|
|
2941
3961
|
}] });
|
|
2942
3962
|
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
}
|
|
2956
|
-
getUrlWithApi(formValues) {
|
|
2957
|
-
return this.language
|
|
2958
|
-
? `${location.origin + location.pathname}?context=${formValues.uri}&lang=${this.language}`
|
|
2959
|
-
: `${location.origin + location.pathname}?context=${formValues.uri}`;
|
|
2960
|
-
}
|
|
2961
|
-
createContextShared(map, formValues) {
|
|
2962
|
-
const context = this.contextService.getContextFromMap(map);
|
|
2963
|
-
context.scope = 'public';
|
|
2964
|
-
context.title = formValues.title;
|
|
2965
|
-
context.uri = formValues.uri;
|
|
2966
|
-
return this.contextService.create(context);
|
|
2967
|
-
}
|
|
2968
|
-
updateContextShared(map, formValues, id) {
|
|
2969
|
-
const context = this.contextService.getContextFromMap(map);
|
|
2970
|
-
return this.contextService.update(id, {
|
|
2971
|
-
title: formValues.title,
|
|
2972
|
-
map: context.map
|
|
2973
|
-
});
|
|
2974
|
-
}
|
|
2975
|
-
getUrlWithoutApi(map, publicShareOption) {
|
|
2976
|
-
if (!this.route ||
|
|
2977
|
-
!this.route.options.visibleOnLayersKey ||
|
|
2978
|
-
!this.route.options.visibleOffLayersKey ||
|
|
2979
|
-
!map.viewController.getZoom()) {
|
|
2980
|
-
return;
|
|
2981
|
-
}
|
|
2982
|
-
const llc = publicShareOption.layerlistControls.querystring;
|
|
2983
|
-
let visibleKey = this.route.options.visibleOnLayersKey;
|
|
2984
|
-
let invisibleKey = this.route.options.visibleOffLayersKey;
|
|
2985
|
-
const layers = map.layerController.all.filter((layer) => isLayerItem(layer));
|
|
2986
|
-
const visibleLayers = layers.filter((lay) => lay.visible && !lay.isIgoInternalLayer);
|
|
2987
|
-
const invisibleLayers = layers.filter((lay) => !lay.visible && !lay.isIgoInternalLayer);
|
|
2988
|
-
if (visibleLayers.length === 0) {
|
|
2989
|
-
visibleKey = '';
|
|
2990
|
-
}
|
|
2991
|
-
if (invisibleLayers.length === 0) {
|
|
2992
|
-
invisibleKey = '';
|
|
2993
|
-
}
|
|
2994
|
-
let layersUrl = '';
|
|
2995
|
-
let layersToLoop = [];
|
|
2996
|
-
if (visibleLayers.length > invisibleLayers.length) {
|
|
2997
|
-
layersUrl = `${visibleKey}=*&${invisibleKey}=`;
|
|
2998
|
-
layersToLoop = invisibleLayers;
|
|
2999
|
-
}
|
|
3000
|
-
else {
|
|
3001
|
-
layersUrl = `${invisibleKey}=*&${visibleKey}=`;
|
|
3002
|
-
layersToLoop = visibleLayers;
|
|
3003
|
-
}
|
|
3004
|
-
for (const layer of layersToLoop) {
|
|
3005
|
-
if (layer.id) {
|
|
3006
|
-
layersUrl += layer.id + ',';
|
|
3007
|
-
}
|
|
3008
|
-
}
|
|
3009
|
-
const contextLayersID = [];
|
|
3010
|
-
const contextLayers = this.contextService.context$.value.layers;
|
|
3011
|
-
for (const contextLayer of contextLayers) {
|
|
3012
|
-
if (typeof contextLayer.id !== 'undefined' ||
|
|
3013
|
-
typeof contextLayer.source !== 'undefined') {
|
|
3014
|
-
contextLayersID.push(contextLayer.id || contextLayer.source.id);
|
|
3015
|
-
}
|
|
3016
|
-
}
|
|
3017
|
-
const addedLayersQueryParamsWms = this.makeLayersByService(layers, contextLayersID, 'wms');
|
|
3018
|
-
const addedLayersQueryParamsWmts = this.makeLayersByService(layers, contextLayersID, 'wmts');
|
|
3019
|
-
const addedLayersQueryParamsArcgisRest = this.makeLayersByService(layers, contextLayersID, 'arcgisrest');
|
|
3020
|
-
const addedLayersQueryParamsImageArcgisRest = this.makeLayersByService(layers, contextLayersID, 'imagearcgisrest');
|
|
3021
|
-
const addedLayersQueryParamsTileArcgisRest = this.makeLayersByService(layers, contextLayersID, 'tilearcgisrest');
|
|
3022
|
-
layersUrl = layersUrl.substr(0, layersUrl.length - 1);
|
|
3023
|
-
const zoomKey = this.route.options.zoomKey;
|
|
3024
|
-
const centerKey = this.route.options.centerKey;
|
|
3025
|
-
const contextKey = this.route.options.contextKey;
|
|
3026
|
-
const zoom = `${zoomKey}=${map.viewController.getZoom()}`;
|
|
3027
|
-
const arrayCenter = map.viewController.getCenter('EPSG:4326') || [];
|
|
3028
|
-
const long = arrayCenter[0].toFixed(5).replace(/\.([^0]+)0+$/, '.$1');
|
|
3029
|
-
const lat = arrayCenter[1].toFixed(5).replace(/\.([^0]+)0+$/, '.$1');
|
|
3030
|
-
const center = `${centerKey}=${long},${lat}`.replace(/.00000/g, '');
|
|
3031
|
-
let context = '';
|
|
3032
|
-
if (this.contextService.context$.value) {
|
|
3033
|
-
context = `${contextKey}=${this.contextService.context$.value.uri}`;
|
|
3034
|
-
}
|
|
3035
|
-
let url = this.language
|
|
3036
|
-
? `${location.origin}${location.pathname}?${context}&${zoom}&${center}&${layersUrl}&${llc}&${addedLayersQueryParamsWms}&${llc}&${addedLayersQueryParamsWmts}&${addedLayersQueryParamsArcgisRest}&${addedLayersQueryParamsImageArcgisRest}&${addedLayersQueryParamsTileArcgisRest}&lang=${this.language}`
|
|
3037
|
-
: `${location.origin}${location.pathname}?${context}&${zoom}&${center}&${layersUrl}&${llc}&${addedLayersQueryParamsWms}&${llc}&${addedLayersQueryParamsWmts}&${addedLayersQueryParamsArcgisRest}&${addedLayersQueryParamsImageArcgisRest}&${addedLayersQueryParamsTileArcgisRest}`;
|
|
3038
|
-
for (let i = 0; i < 5; i++) {
|
|
3039
|
-
url = url.replace(/&&/g, '&');
|
|
3040
|
-
url = url.endsWith('&') ? url.slice(0, -1) : url;
|
|
3041
|
-
}
|
|
3042
|
-
url = url.endsWith('&') ? url.slice(0, -1) : url;
|
|
3043
|
-
url = url.replace('?&wm', '&wm');
|
|
3044
|
-
url = url.replace('?&', '?');
|
|
3045
|
-
return url;
|
|
3046
|
-
}
|
|
3047
|
-
makeLayersByService(layers, contextLayersID, typeService) {
|
|
3048
|
-
const addedLayersByService = [];
|
|
3049
|
-
for (const layer of layers.filter((l) => l.dataSource.options?.type === typeService)) {
|
|
3050
|
-
if (contextLayersID.indexOf(layer.id) === -1) {
|
|
3051
|
-
let linkUrl = encodeURIComponent(layer.dataSource.options.url);
|
|
3052
|
-
let addedLayer = '';
|
|
3053
|
-
let layerVersion;
|
|
3054
|
-
switch (layer.dataSource.options.type.toLowerCase()) {
|
|
3055
|
-
case 'wms': {
|
|
3056
|
-
const datasourceOptions = layer.dataSource
|
|
3057
|
-
.options;
|
|
3058
|
-
addedLayer = encodeURIComponent(datasourceOptions.params.LAYERS);
|
|
3059
|
-
layerVersion =
|
|
3060
|
-
datasourceOptions.params.VERSION === '1.3.0'
|
|
3061
|
-
? layerVersion
|
|
3062
|
-
: datasourceOptions.params.VERSION;
|
|
3063
|
-
break;
|
|
3064
|
-
}
|
|
3065
|
-
case 'wmts':
|
|
3066
|
-
case 'arcgisrest':
|
|
3067
|
-
case 'imagearcgisrest':
|
|
3068
|
-
case 'tilearcgisrest':
|
|
3069
|
-
addedLayer = encodeURIComponent(layer.dataSource.options.layer);
|
|
3070
|
-
break;
|
|
3071
|
-
}
|
|
3072
|
-
const addedLayerPosition = `${addedLayer}:igoz${layer.zIndex}`;
|
|
3073
|
-
let version = '';
|
|
3074
|
-
if (layerVersion) {
|
|
3075
|
-
const operator = layer.dataSource.options.url.indexOf('?') === -1
|
|
3076
|
-
? '?'
|
|
3077
|
-
: '&';
|
|
3078
|
-
version = encodeURIComponent(`${operator}VERSION=${layerVersion}`);
|
|
3079
|
-
}
|
|
3080
|
-
linkUrl = `${linkUrl}${version}`;
|
|
3081
|
-
if (!addedLayersByService.find((definedUrl) => definedUrl.url === linkUrl)) {
|
|
3082
|
-
addedLayersByService.push({
|
|
3083
|
-
url: linkUrl,
|
|
3084
|
-
layers: [addedLayerPosition]
|
|
3085
|
-
});
|
|
3086
|
-
}
|
|
3087
|
-
else {
|
|
3088
|
-
addedLayersByService.forEach((service) => {
|
|
3089
|
-
if (service.url === linkUrl) {
|
|
3090
|
-
service.layers.push(addedLayerPosition);
|
|
3091
|
-
}
|
|
3092
|
-
});
|
|
3093
|
-
}
|
|
3094
|
-
}
|
|
3095
|
-
}
|
|
3096
|
-
let addedLayersQueryParams = '';
|
|
3097
|
-
if (addedLayersByService.length >= 1) {
|
|
3098
|
-
let linkUrlKey;
|
|
3099
|
-
let layersKey;
|
|
3100
|
-
/*
|
|
3101
|
-
const linkUrlKey = (typeService === 'wms') ? this.route.options.wmsUrlKey :
|
|
3102
|
-
(typeService === 'wmts') ? this.route.options.wmtsUrlKey : '' ;
|
|
3103
|
-
const layersKey = (typeService === 'wms') ? this.route.options.wmsLayersKey :
|
|
3104
|
-
(typeService === 'wmts') ? this.route.options.wmtsLayersKey : '' ;
|
|
3105
|
-
*/
|
|
3106
|
-
switch (typeService.toLowerCase()) {
|
|
3107
|
-
case 'wms':
|
|
3108
|
-
linkUrlKey = this.route.options.wmsUrlKey;
|
|
3109
|
-
layersKey = this.route.options.wmsLayersKey;
|
|
3110
|
-
break;
|
|
3111
|
-
case 'wmts':
|
|
3112
|
-
linkUrlKey = this.route.options.wmtsUrlKey;
|
|
3113
|
-
layersKey = this.route.options.wmtsLayersKey;
|
|
3114
|
-
break;
|
|
3115
|
-
case 'arcgisrest':
|
|
3116
|
-
linkUrlKey = this.route.options.arcgisUrlKey;
|
|
3117
|
-
layersKey = this.route.options.arcgisLayersKey;
|
|
3118
|
-
break;
|
|
3119
|
-
case 'imagearcgisrest':
|
|
3120
|
-
linkUrlKey = this.route.options.iarcgisUrlKey;
|
|
3121
|
-
layersKey = this.route.options.iarcgisLayersKey;
|
|
3122
|
-
break;
|
|
3123
|
-
case 'tilearcgisrest':
|
|
3124
|
-
linkUrlKey = this.route.options.tarcgisUrlKey;
|
|
3125
|
-
layersKey = this.route.options.tarcgisLayersKey;
|
|
3126
|
-
break;
|
|
3127
|
-
default:
|
|
3128
|
-
linkUrlKey = '';
|
|
3129
|
-
layersKey = '';
|
|
3130
|
-
}
|
|
3131
|
-
let linkUrlQueryParams = '';
|
|
3132
|
-
let layersQueryParams = '';
|
|
3133
|
-
addedLayersByService.forEach((service) => {
|
|
3134
|
-
linkUrlQueryParams += `${service.url},`;
|
|
3135
|
-
layersQueryParams += `(${service.layers.join(',')}),`;
|
|
3136
|
-
});
|
|
3137
|
-
linkUrlQueryParams = linkUrlQueryParams.endsWith(',')
|
|
3138
|
-
? linkUrlQueryParams.slice(0, -1)
|
|
3139
|
-
: linkUrlQueryParams;
|
|
3140
|
-
layersQueryParams = layersQueryParams.endsWith(',')
|
|
3141
|
-
? layersQueryParams.slice(0, -1)
|
|
3142
|
-
: layersQueryParams;
|
|
3143
|
-
addedLayersQueryParams = `${linkUrlKey}=${linkUrlQueryParams}&${layersKey}=${layersQueryParams}`;
|
|
3144
|
-
}
|
|
3145
|
-
return addedLayersQueryParams;
|
|
3146
|
-
}
|
|
3147
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShareMapService, deps: [{ token: ContextService }, { token: i8.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
3148
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShareMapService, providedIn: 'root' });
|
|
3149
|
-
}
|
|
3150
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ShareMapService, decorators: [{
|
|
3151
|
-
type: Injectable,
|
|
3152
|
-
args: [{
|
|
3153
|
-
providedIn: 'root'
|
|
3154
|
-
}]
|
|
3155
|
-
}], ctorParameters: () => [{ type: ContextService }, { type: i8.RouteService, decorators: [{
|
|
3156
|
-
type: Optional
|
|
3157
|
-
}] }] });
|
|
3963
|
+
const CONTEXT_MANAGER_DIRECTIVES = [
|
|
3964
|
+
ContextListComponent,
|
|
3965
|
+
ContextListBindingDirective,
|
|
3966
|
+
ContextItemComponent,
|
|
3967
|
+
ContextFormComponent,
|
|
3968
|
+
ContextEditComponent,
|
|
3969
|
+
ContextEditBindingDirective,
|
|
3970
|
+
ContextPermissionsComponent,
|
|
3971
|
+
ContextPermissionsBindingDirective,
|
|
3972
|
+
MapContextDirective,
|
|
3973
|
+
LayerContextDirective
|
|
3974
|
+
];
|
|
3158
3975
|
|
|
3159
3976
|
class ShareMapApiComponent {
|
|
3160
3977
|
clipboard;
|
|
@@ -3163,18 +3980,20 @@ class ShareMapApiComponent {
|
|
|
3163
3980
|
auth;
|
|
3164
3981
|
shareMapService;
|
|
3165
3982
|
formBuilder;
|
|
3983
|
+
contextService;
|
|
3166
3984
|
form;
|
|
3167
3985
|
map;
|
|
3168
3986
|
url;
|
|
3169
3987
|
userId;
|
|
3170
3988
|
idContextShared;
|
|
3171
|
-
constructor(clipboard, languageService, messageService, auth, shareMapService, formBuilder) {
|
|
3989
|
+
constructor(clipboard, languageService, messageService, auth, shareMapService, formBuilder, contextService) {
|
|
3172
3990
|
this.clipboard = clipboard;
|
|
3173
3991
|
this.languageService = languageService;
|
|
3174
3992
|
this.messageService = messageService;
|
|
3175
3993
|
this.auth = auth;
|
|
3176
3994
|
this.shareMapService = shareMapService;
|
|
3177
3995
|
this.formBuilder = formBuilder;
|
|
3996
|
+
this.contextService = contextService;
|
|
3178
3997
|
}
|
|
3179
3998
|
ngOnInit() {
|
|
3180
3999
|
this.auth.authenticate$.subscribe(() => {
|
|
@@ -3187,7 +4006,7 @@ class ShareMapApiComponent {
|
|
|
3187
4006
|
const inputs = Object.assign({}, values);
|
|
3188
4007
|
inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
|
|
3189
4008
|
this.url = this.shareMapService.getUrlWithApi(inputs);
|
|
3190
|
-
this.
|
|
4009
|
+
this.createContextShared(this.map, inputs).subscribe((rep) => {
|
|
3191
4010
|
this.idContextShared = rep.id;
|
|
3192
4011
|
this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, { value: inputs.title });
|
|
3193
4012
|
}, (err) => {
|
|
@@ -3198,9 +4017,7 @@ class ShareMapApiComponent {
|
|
|
3198
4017
|
updateContextShared(values = {}) {
|
|
3199
4018
|
const inputs = Object.assign({}, values);
|
|
3200
4019
|
inputs.uri = this.userId ? `${this.userId}-${values.uri}` : values.uri;
|
|
3201
|
-
this.
|
|
3202
|
-
.updateContextShared(this.map, inputs, this.idContextShared)
|
|
3203
|
-
.subscribe(() => {
|
|
4020
|
+
this._updateContextShared(this.map, inputs, this.idContextShared).subscribe(() => {
|
|
3204
4021
|
this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, { value: inputs.title });
|
|
3205
4022
|
}, (err) => {
|
|
3206
4023
|
err.error.title = this.languageService.translate.instant('igo.context.shareMap.errorTitle');
|
|
@@ -3223,10 +4040,24 @@ class ShareMapApiComponent {
|
|
|
3223
4040
|
uri: [id]
|
|
3224
4041
|
});
|
|
3225
4042
|
}
|
|
3226
|
-
|
|
3227
|
-
|
|
4043
|
+
createContextShared(map, formValues) {
|
|
4044
|
+
const context = this.contextService.getContextFromMap(map);
|
|
4045
|
+
context.scope = 'public';
|
|
4046
|
+
context.title = formValues.title;
|
|
4047
|
+
context.uri = formValues.uri;
|
|
4048
|
+
return this.contextService.create(context);
|
|
4049
|
+
}
|
|
4050
|
+
_updateContextShared(map, formValues, id) {
|
|
4051
|
+
const context = this.contextService.getContextFromMap(map);
|
|
4052
|
+
return this.contextService.update(id, {
|
|
4053
|
+
title: formValues.title,
|
|
4054
|
+
map: context.map
|
|
4055
|
+
});
|
|
4056
|
+
}
|
|
4057
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapApiComponent, deps: [{ token: i1$4.Clipboard }, { token: i4.LanguageService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: ShareMapService }, { token: i4$1.UntypedFormBuilder }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4058
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ShareMapApiComponent, isStandalone: true, selector: "igo-share-map-api", inputs: { map: "map" }, ngImport: i0, template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\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\n matInput\n required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\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\n *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button\n *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\"\n >\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\n #textArea\n matInput\n readonly\n rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></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 >\n <mat-icon>content_copy</mat-icon>\n </button>\n </mat-form-field>\n <div></div>\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"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
3228
4059
|
}
|
|
3229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4060
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapApiComponent, decorators: [{
|
|
3230
4061
|
type: Component,
|
|
3231
4062
|
args: [{ selector: 'igo-share-map-api', imports: [
|
|
3232
4063
|
FormsModule,
|
|
@@ -3239,7 +4070,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
3239
4070
|
MatIconModule,
|
|
3240
4071
|
IgoLanguageModule
|
|
3241
4072
|
], template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\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\n matInput\n required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\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\n *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button\n *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\"\n >\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\n #textArea\n matInput\n readonly\n rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></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 >\n <mat-icon>content_copy</mat-icon>\n </button>\n </mat-form-field>\n <div></div>\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"] }]
|
|
3242
|
-
}], ctorParameters: () => [{ type: i1$
|
|
4073
|
+
}], ctorParameters: () => [{ type: i1$4.Clipboard }, { type: i4.LanguageService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: ShareMapService }, { type: i4$1.UntypedFormBuilder }, { type: ContextService }], propDecorators: { map: [{
|
|
3243
4074
|
type: Input
|
|
3244
4075
|
}] } });
|
|
3245
4076
|
|
|
@@ -3247,37 +4078,45 @@ class ShareMapUrlComponent {
|
|
|
3247
4078
|
clipboard;
|
|
3248
4079
|
messageService;
|
|
3249
4080
|
shareMapService;
|
|
4081
|
+
contextService;
|
|
3250
4082
|
cdRef;
|
|
4083
|
+
route;
|
|
3251
4084
|
mapState$$;
|
|
3252
4085
|
map;
|
|
3253
4086
|
url;
|
|
3254
4087
|
publicShareOption = {
|
|
3255
4088
|
layerlistControls: { querystring: '' }
|
|
3256
4089
|
};
|
|
3257
|
-
|
|
4090
|
+
language;
|
|
4091
|
+
constructor(clipboard, messageService, shareMapService, contextService, cdRef, route) {
|
|
3258
4092
|
this.clipboard = clipboard;
|
|
3259
4093
|
this.messageService = messageService;
|
|
3260
4094
|
this.shareMapService = shareMapService;
|
|
4095
|
+
this.contextService = contextService;
|
|
3261
4096
|
this.cdRef = cdRef;
|
|
4097
|
+
this.route = route;
|
|
4098
|
+
this.route.queryParams.subscribe((params) => {
|
|
4099
|
+
const lang = params[this.route.options.languageKey];
|
|
4100
|
+
if (lang) {
|
|
4101
|
+
this.language = lang;
|
|
4102
|
+
}
|
|
4103
|
+
});
|
|
3262
4104
|
}
|
|
3263
4105
|
ngOnInit() {
|
|
3264
|
-
this.
|
|
4106
|
+
this.generateUrl();
|
|
3265
4107
|
this.mapState$$ = combineLatest([
|
|
3266
4108
|
this.map.viewController.state$,
|
|
3267
4109
|
this.map.status$
|
|
3268
4110
|
]).subscribe(() => {
|
|
3269
|
-
this.
|
|
4111
|
+
this.generateUrl();
|
|
3270
4112
|
this.cdRef.detectChanges();
|
|
3271
4113
|
});
|
|
3272
4114
|
}
|
|
3273
|
-
ngAfterViewInit() {
|
|
3274
|
-
this.resetUrl();
|
|
3275
|
-
}
|
|
3276
4115
|
ngOnDestroy() {
|
|
3277
|
-
this.mapState
|
|
4116
|
+
this.mapState$$?.unsubscribe();
|
|
3278
4117
|
}
|
|
3279
|
-
|
|
3280
|
-
this.url = this.shareMapService.
|
|
4118
|
+
generateUrl() {
|
|
4119
|
+
this.url = this.shareMapService.encoder.generateUrl(this.map, this.contextService.context$.value, this.publicShareOption, this.language);
|
|
3281
4120
|
}
|
|
3282
4121
|
copyTextToClipboard(textArea) {
|
|
3283
4122
|
const successful = this.clipboard.copy(textArea.value);
|
|
@@ -3285,10 +4124,10 @@ class ShareMapUrlComponent {
|
|
|
3285
4124
|
this.messageService.success('igo.context.shareMap.dialog.copyMsg', 'igo.context.shareMap.dialog.copyTitle');
|
|
3286
4125
|
}
|
|
3287
4126
|
}
|
|
3288
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3289
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
4127
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapUrlComponent, deps: [{ token: i1$4.Clipboard }, { token: i3.MessageService }, { token: ShareMapService }, { token: ContextService }, { token: i0.ChangeDetectorRef }, { token: i1.RouteService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4128
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ShareMapUrlComponent, isStandalone: true, selector: "igo-share-map-url", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n </mat-form-field>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon>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\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\n >\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\n {{ 'igo.context.shareMap.included' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\n {{ 'igo.context.shareMap.context' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\n {{ 'igo.context.shareMap.center' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\n {{ 'igo.context.shareMap.zoom' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\n {{ 'igo.context.shareMap.addedLayers' | translate }}\n </li>\n <li\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\n >\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\n </li>\n </ul>\n\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\n {{ 'igo.context.shareMap.excluded' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\n {{ 'igo.context.shareMap.order' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\n {{ 'igo.context.shareMap.opacity' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterOgc' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterTime' | translate }}\n </li>\n </ul>\n </div>\n <igo-custom-html\n class=\"shareCustomPadding\"\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\n class=\"mat-typography\"\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\n >\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"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CustomHtmlComponent, selector: "igo-custom-html", inputs: ["html"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
3290
4129
|
}
|
|
3291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapUrlComponent, decorators: [{
|
|
3292
4131
|
type: Component,
|
|
3293
4132
|
args: [{ selector: 'igo-share-map-url', imports: [
|
|
3294
4133
|
MatFormFieldModule,
|
|
@@ -3299,7 +4138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
3299
4138
|
CustomHtmlComponent,
|
|
3300
4139
|
IgoLanguageModule
|
|
3301
4140
|
], template: "<div class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n </mat-form-field>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon>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\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\n >\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\n {{ 'igo.context.shareMap.included' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\n {{ 'igo.context.shareMap.context' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\n {{ 'igo.context.shareMap.center' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\n {{ 'igo.context.shareMap.zoom' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\n {{ 'igo.context.shareMap.addedLayers' | translate }}\n </li>\n <li\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\n >\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\n </li>\n </ul>\n\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\n {{ 'igo.context.shareMap.excluded' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\n {{ 'igo.context.shareMap.order' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\n {{ 'igo.context.shareMap.opacity' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterOgc' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterTime' | translate }}\n </li>\n </ul>\n </div>\n <igo-custom-html\n class=\"shareCustomPadding\"\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\n class=\"mat-typography\"\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\n >\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"] }]
|
|
3302
|
-
}], ctorParameters: () => [{ type: i1$
|
|
4141
|
+
}], ctorParameters: () => [{ type: i1$4.Clipboard }, { type: i3.MessageService }, { type: ShareMapService }, { type: ContextService }, { type: i0.ChangeDetectorRef }, { type: i1.RouteService }], propDecorators: { map: [{
|
|
3303
4142
|
type: Input
|
|
3304
4143
|
}] } });
|
|
3305
4144
|
|
|
@@ -3311,10 +4150,10 @@ class ShareMapComponent {
|
|
|
3311
4150
|
this.config = config;
|
|
3312
4151
|
this.hasApi = this.config.getConfig('context.url') ? true : false;
|
|
3313
4152
|
}
|
|
3314
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3315
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
4153
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapComponent, deps: [{ token: i1$2.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4154
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ShareMapComponent, isStandalone: true, selector: "igo-share-map", inputs: { map: "map" }, ngImport: i0, 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", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: ShareMapApiComponent, selector: "igo-share-map-api", inputs: ["map"] }, { kind: "component", type: ShareMapUrlComponent, selector: "igo-share-map-url", inputs: ["map"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
3316
4155
|
}
|
|
3317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ShareMapComponent, decorators: [{
|
|
3318
4157
|
type: Component,
|
|
3319
4158
|
args: [{ selector: 'igo-share-map', imports: [
|
|
3320
4159
|
NgIf,
|
|
@@ -3323,7 +4162,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
3323
4162
|
ShareMapUrlComponent,
|
|
3324
4163
|
IgoLanguageModule
|
|
3325
4164
|
], 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" }]
|
|
3326
|
-
}], ctorParameters: () => [{ type: i1$
|
|
4165
|
+
}], ctorParameters: () => [{ type: i1$2.ConfigService }], propDecorators: { map: [{
|
|
3327
4166
|
type: Input
|
|
3328
4167
|
}] } });
|
|
3329
4168
|
|
|
@@ -3341,11 +4180,11 @@ class IgoShareMapModule {
|
|
|
3341
4180
|
ngModule: IgoShareMapModule
|
|
3342
4181
|
};
|
|
3343
4182
|
}
|
|
3344
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3345
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
3346
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
4183
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoShareMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
4184
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoShareMapModule, imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent], exports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent] });
|
|
4185
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoShareMapModule, imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent] });
|
|
3347
4186
|
}
|
|
3348
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoShareMapModule, decorators: [{
|
|
3349
4188
|
type: NgModule,
|
|
3350
4189
|
args: [{
|
|
3351
4190
|
imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent],
|
|
@@ -3425,10 +4264,10 @@ class SidenavComponent {
|
|
|
3425
4264
|
this.topPanelState = 'initial';
|
|
3426
4265
|
}
|
|
3427
4266
|
}
|
|
3428
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3429
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
4267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SidenavComponent, deps: [{ token: i1$6.Title }], target: i0.ɵɵFactoryTarget.Component });
|
|
4268
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: SidenavComponent, isStandalone: true, selector: "igo-sidenav", inputs: { map: "map", opened: "opened", feature: "feature", tool: "tool", media: "media", title: "title" }, ngImport: i0, template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\n <div class=\"igo-sidenav-content\">\n <igo-flexible\n #topPanel\n initial=\"50%\"\n 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 >\n <mat-icon>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 >\n <mat-icon>menu</mat-icon>\n </button>\n </igo-panel>\n </div>\n\n <div igoFlexibleFill class=\"igo-content\">\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\n <button\n mat-icon-button\n panelLeftButton\n class=\"igo-icon-button\"\n (click)=\"toggleTopPanel()\"\n >\n <mat-icon>{{\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\n ? 'arrow_downward'\n : 'arrow_upward'\n }}</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 >\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <igo-feature-details\n [feature]=\"feature\"\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\n >\n </igo-feature-details>\n </igo-panel>\n </div>\n </igo-flexible>\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{-moz-box-shadow:2px 0px 2px 0px #dddddd;-webkit-box-shadow:2px 0px 2px 0px #dddddd;-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"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: FlexibleComponent, selector: "igo-flexible", inputs: ["initial", "collapsed", "expanded", "initialMobile", "collapsedMobile", "expandedMobile", "direction", "state"] }, { kind: "component", type: PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FeatureDetailsComponent, selector: "igo-feature-details", inputs: ["source", "map", "toolbox", "feature"], outputs: ["routeEvent", "selectFeature", "htmlDisplayEvent"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
3430
4269
|
}
|
|
3431
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SidenavComponent, decorators: [{
|
|
3432
4271
|
type: Component,
|
|
3433
4272
|
args: [{ selector: 'igo-sidenav', imports: [
|
|
3434
4273
|
MatSidenavModule,
|
|
@@ -3441,7 +4280,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
3441
4280
|
FeatureDetailsComponent,
|
|
3442
4281
|
IgoLanguageModule
|
|
3443
4282
|
], template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\n <div class=\"igo-sidenav-content\">\n <igo-flexible\n #topPanel\n initial=\"50%\"\n 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 >\n <mat-icon>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 >\n <mat-icon>menu</mat-icon>\n </button>\n </igo-panel>\n </div>\n\n <div igoFlexibleFill class=\"igo-content\">\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\n <button\n mat-icon-button\n panelLeftButton\n class=\"igo-icon-button\"\n (click)=\"toggleTopPanel()\"\n >\n <mat-icon>{{\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\n ? 'arrow_downward'\n : 'arrow_upward'\n }}</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 >\n <mat-icon>zoom_in</mat-icon>\n </button>\n\n <igo-feature-details\n [feature]=\"feature\"\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\n >\n </igo-feature-details>\n </igo-panel>\n </div>\n </igo-flexible>\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{-moz-box-shadow:2px 0px 2px 0px #dddddd;-webkit-box-shadow:2px 0px 2px 0px #dddddd;-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"] }]
|
|
3444
|
-
}], ctorParameters: () => [{ type: i1$
|
|
4283
|
+
}], ctorParameters: () => [{ type: i1$6.Title }], propDecorators: { map: [{
|
|
3445
4284
|
type: Input
|
|
3446
4285
|
}], opened: [{
|
|
3447
4286
|
type: Input
|
|
@@ -3464,11 +4303,11 @@ class IgoSidenavModule {
|
|
|
3464
4303
|
ngModule: IgoSidenavModule
|
|
3465
4304
|
};
|
|
3466
4305
|
}
|
|
3467
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3468
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
3469
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
4306
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
4307
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoSidenavModule, imports: [SidenavComponent], exports: [SidenavComponent] });
|
|
4308
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoSidenavModule, imports: [SidenavComponent] });
|
|
3470
4309
|
}
|
|
3471
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4310
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoSidenavModule, decorators: [{
|
|
3472
4311
|
type: NgModule,
|
|
3473
4312
|
args: [{
|
|
3474
4313
|
imports: [SidenavComponent],
|
|
@@ -3485,19 +4324,19 @@ class IgoContextModule {
|
|
|
3485
4324
|
ngModule: IgoContextModule
|
|
3486
4325
|
};
|
|
3487
4326
|
}
|
|
3488
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
3489
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
4327
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
4328
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoContextModule, exports: [IgoContextImportExportModule,
|
|
3490
4329
|
IgoContextManagerModule,
|
|
3491
4330
|
IgoContextMapButtonModule,
|
|
3492
4331
|
IgoShareMapModule,
|
|
3493
4332
|
IgoSidenavModule] });
|
|
3494
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
4333
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextModule, imports: [IgoContextImportExportModule,
|
|
3495
4334
|
IgoContextManagerModule,
|
|
3496
4335
|
IgoContextMapButtonModule,
|
|
3497
4336
|
IgoShareMapModule,
|
|
3498
4337
|
IgoSidenavModule] });
|
|
3499
4338
|
}
|
|
3500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4339
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoContextModule, decorators: [{
|
|
3501
4340
|
type: NgModule,
|
|
3502
4341
|
args: [{
|
|
3503
4342
|
declarations: [],
|
|
@@ -3511,19 +4350,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
3511
4350
|
}]
|
|
3512
4351
|
}] });
|
|
3513
4352
|
|
|
3514
|
-
const CONTEXT_MANAGER_DIRECTIVES = [
|
|
3515
|
-
ContextListComponent,
|
|
3516
|
-
ContextListBindingDirective,
|
|
3517
|
-
ContextItemComponent,
|
|
3518
|
-
ContextFormComponent,
|
|
3519
|
-
ContextEditComponent,
|
|
3520
|
-
ContextEditBindingDirective,
|
|
3521
|
-
ContextPermissionsComponent,
|
|
3522
|
-
ContextPermissionsBindingDirective,
|
|
3523
|
-
MapContextDirective,
|
|
3524
|
-
LayerContextDirective
|
|
3525
|
-
];
|
|
3526
|
-
|
|
3527
4353
|
const CONTEXT_MAP_BUTTON_DIRECTIVES = [
|
|
3528
4354
|
BookmarkButtonComponent,
|
|
3529
4355
|
BookmarkDialogComponent,
|
|
@@ -3539,5 +4365,5 @@ const CONTEXT_MAP_BUTTON_DIRECTIVES = [
|
|
|
3539
4365
|
* Generated bundle index. Do not edit.
|
|
3540
4366
|
*/
|
|
3541
4367
|
|
|
3542
|
-
export { BookmarkButtonComponent, BookmarkDialogComponent, CONTEXT_MANAGER_DIRECTIVES, CONTEXT_MAP_BUTTON_DIRECTIVES, ContextEditBindingDirective, ContextEditComponent, ContextExportService, ContextFormComponent, ContextImportExportComponent, ContextImportService, ContextItemComponent, ContextListBindingDirective, ContextListComponent, ContextPermissionsBindingDirective, ContextPermissionsComponent, ContextService, ExportError, ExportInvalidFileError, ExportNothingToExportError, IgoContextImportExportModule, IgoContextManagerModule, IgoContextMapButtonModule, IgoContextModule, IgoShareMapModule, IgoSidenavModule, ImportError, ImportInvalidFileError, ImportNothingToImportError, ImportSRSError, ImportSizeError, ImportUnreadableFileError, LayerContextDirective, MapContextDirective, PoiButtonComponent, PoiDialogComponent, PoiService, SHARE_MAP_DIRECTIVES, Scope, ShareMapApiComponent, ShareMapComponent, ShareMapService, ShareMapUrlComponent, SidenavComponent, TypePermission, UserButtonComponent, UserDialogComponent, addContextToContextList, addImportedFeaturesStyledToMap, addImportedFeaturesToMap, computeLayerTitleFromFile, getFileExtension, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleNothingToExportError, handleNothingToImportError, handleSizeFileImportError, handleUnreadbleFileImportError };
|
|
4368
|
+
export { BookmarkButtonComponent, BookmarkDialogComponent, CONTEXT_MANAGER_DIRECTIVES, CONTEXT_MAP_BUTTON_DIRECTIVES, ContextEditBindingDirective, ContextEditComponent, ContextExportService, ContextFormComponent, ContextImportExportComponent, ContextImportService, ContextItemComponent, ContextListBindingDirective, ContextListComponent, ContextPermissionsBindingDirective, ContextPermissionsComponent, ContextService, ExportError, ExportInvalidFileError, ExportNothingToExportError, GroupParamsKeys, IgoContextImportExportModule, IgoContextManagerModule, IgoContextMapButtonModule, IgoContextModule, IgoShareMapModule, IgoSidenavModule, ImportError, ImportInvalidFileError, ImportNothingToImportError, ImportSRSError, ImportSizeError, ImportUnreadableFileError, LayerContextDirective, LayerParamsKeys, MapContextDirective, PoiButtonComponent, PoiDialogComponent, PoiService, SHARE_MAP_DIRECTIVES, SHARE_MAP_KEYS_DEFAULT_OPTIONS, Scope, ServiceType, ServiceTypeEnum, ShareMapApiComponent, ShareMapComponent, ShareMapLegacyParser, ShareMapService, ShareMapUrlComponent, SidenavComponent, TypePermission, UserButtonComponent, UserDialogComponent, addContextToContextList, addImportedFeaturesStyledToMap, addImportedFeaturesToMap, buildDataSourceOptions, computeLayerTitleFromFile, getFileExtension, getFlattenOptions, getParamValue, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleNothingToExportError, handleNothingToImportError, handleSizeFileImportError, handleUnreadbleFileImportError, hasLegacyParams, hasModernShareParams };
|
|
3543
4369
|
//# sourceMappingURL=igo2-context.mjs.map
|