@vcmap/ui 5.2.4 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/base.config.json +54 -0
- package/config/www.config.json +4 -0
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.83d353.js → core.380ce3.js} +3498 -3347
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-b466fb2c.js +1 -0
- package/dist/assets/ol.js +1 -1
- package/dist/assets/{ui.300809.css → ui.cf282c.css} +1 -1
- package/dist/assets/{ui.300809.js → ui.cf282c.js} +7275 -6745
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.b3de7a.js → vuetify.12f757.js} +1 -1
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +1 -1
- package/index.d.ts +4 -0
- package/index.js +2 -0
- package/package.json +2 -2
- package/plugins/package.json +2 -1
- package/src/application/VcsApp.vue +162 -1
- package/src/application/VcsApp.vue.d.ts +15 -0
- package/src/application/VcsCustomScreen.vue +45 -0
- package/src/application/VcsCustomScreen.vue.d.ts +15 -0
- package/src/application/VcsSettings.vue +67 -0
- package/src/application/VcsSettings.vue.d.ts +2 -0
- package/src/application/VcsSplashScreen.vue +140 -0
- package/src/application/VcsSplashScreen.vue.d.ts +36 -0
- package/src/application/markdownHelper.js +19 -1
- package/src/components/icons/+all.js +4 -0
- package/src/components/icons/CrosshairIcon.vue +33 -0
- package/src/components/icons/CrosshairIcon.vue.d.ts +2 -0
- package/src/i18n/de.d.ts +43 -18
- package/src/i18n/de.js +25 -0
- package/src/i18n/en.d.ts +43 -18
- package/src/i18n/en.js +25 -0
- package/src/navigation/MapNavigation.vue +74 -4
- package/src/navigation/MapNavigation.vue.d.ts +36 -0
- package/src/navigation/ObliqueRotation.vue +8 -0
- package/src/navigation/ObliqueRotation.vue.d.ts +13 -1
- package/src/navigation/TiltSlider.vue +8 -1
- package/src/navigation/TiltSlider.vue.d.ts +13 -1
- package/src/navigation/VcsCompass.vue +7 -1
- package/src/navigation/VcsCompass.vue.d.ts +11 -0
- package/src/navigation/VcsZoomButton.vue +10 -0
- package/src/navigation/VcsZoomButton.vue.d.ts +15 -1
- package/src/navigation/locatorHelper.d.ts +9 -0
- package/src/navigation/locatorHelper.js +294 -0
- package/src/navigation/overviewMap.d.ts +21 -20
- package/src/navigation/overviewMap.js +51 -39
- package/src/uiConfig.d.ts +67 -0
- package/src/uiConfig.js +30 -0
- package/dist/assets/index-69733149.js +0 -1
- /package/dist/assets/{cesium.162cd3.js → cesium.86b93e.js} +0 -0
- /package/dist/assets/{ol.7cdede.js → ol.d0972a.js} +0 -0
- /package/dist/assets/{vue.27f25a.js → vue.89f1c0.js} +0 -0
- /package/dist/assets/{vuetify.b3de7a.css → vuetify.12f757.css} +0 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{
|
2
|
+
value: {
|
3
|
+
type: BooleanConstructor;
|
4
|
+
default: boolean;
|
5
|
+
};
|
6
|
+
options: {
|
7
|
+
type: ObjectConstructor;
|
8
|
+
required: true;
|
9
|
+
};
|
10
|
+
}, {
|
11
|
+
localValue: any;
|
12
|
+
exitScreen: () => void;
|
13
|
+
splashScreenText: import("vue").ComputedRef<string>;
|
14
|
+
splashScreenCheckboxText: import("vue").ComputedRef<string>;
|
15
|
+
checkBox: import("vue").Ref<boolean>;
|
16
|
+
acceptInput: any;
|
17
|
+
buttonTitle: any;
|
18
|
+
position: import("vue").ComputedRef<{
|
19
|
+
width: any;
|
20
|
+
height: any;
|
21
|
+
maxWidth: any;
|
22
|
+
maxHeight: any;
|
23
|
+
}>;
|
24
|
+
}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{
|
25
|
+
value: {
|
26
|
+
type: BooleanConstructor;
|
27
|
+
default: boolean;
|
28
|
+
};
|
29
|
+
options: {
|
30
|
+
type: ObjectConstructor;
|
31
|
+
required: true;
|
32
|
+
};
|
33
|
+
}>>, {
|
34
|
+
value: boolean;
|
35
|
+
}>;
|
36
|
+
export default _default;
|
@@ -1,12 +1,30 @@
|
|
1
1
|
import { marked } from 'marked';
|
2
2
|
import DOMPurify from 'dompurify';
|
3
3
|
|
4
|
+
// Create a custom renderer
|
5
|
+
const renderer = new marked.Renderer();
|
6
|
+
|
7
|
+
renderer.link = (href, title, text) => {
|
8
|
+
const target = '_blank';
|
9
|
+
const titleAttr = title ? ` title="${title}"` : '';
|
10
|
+
return `<a href="${href}" target="${target}"${titleAttr}>${text}</a>`;
|
11
|
+
};
|
12
|
+
|
13
|
+
// Set options for marked to use the custom renderer
|
14
|
+
marked.setOptions({
|
15
|
+
renderer,
|
16
|
+
breaks: true, // Enable line breaks
|
17
|
+
});
|
18
|
+
|
4
19
|
/**
|
5
20
|
* @param {string} content
|
6
21
|
* @returns {string}
|
7
22
|
*/
|
8
23
|
export function parseAndSanitizeMarkdown(content) {
|
9
|
-
|
24
|
+
// First, convert the Markdown to HTML using marked
|
25
|
+
const html = marked(content);
|
26
|
+
// Then sanitize the HTML using DOMPurify
|
27
|
+
return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });
|
10
28
|
}
|
11
29
|
|
12
30
|
/**
|
@@ -24,6 +24,7 @@ import CompassIcon from './CompassIcon.vue';
|
|
24
24
|
import ComponentsIcon from './ComponentsIcon.vue';
|
25
25
|
import ComponentsPlusIcon from './ComponentsPlusIcon.vue';
|
26
26
|
import ConeIcon from './ConeIcon.vue';
|
27
|
+
import CrosshairIcon from './CrosshairIcon.vue';
|
27
28
|
import DimensionsHouseIcon from './DimensionsHouseIcon.vue';
|
28
29
|
import EditIcon from './EditIcon.vue';
|
29
30
|
import EditVerticesIcon from './EditVerticesIcon.vue';
|
@@ -218,6 +219,9 @@ const IconMap = {
|
|
218
219
|
cone: {
|
219
220
|
component: ConeIcon,
|
220
221
|
},
|
222
|
+
crosshair: {
|
223
|
+
component: CrosshairIcon,
|
224
|
+
},
|
221
225
|
dimensionsHouse: {
|
222
226
|
component: DimensionsHouseIcon,
|
223
227
|
},
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<template>
|
2
|
+
<svg
|
3
|
+
id="CrosshairIcon"
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
5
|
+
width="16"
|
6
|
+
height="16"
|
7
|
+
viewBox="0 0 16 16"
|
8
|
+
>
|
9
|
+
<g id="Gruppe_877" transform="translate(-2408 -282)">
|
10
|
+
<circle
|
11
|
+
id="Ellipse_100"
|
12
|
+
cx="3"
|
13
|
+
cy="3"
|
14
|
+
r="3"
|
15
|
+
transform="translate(2412.979 286.953)"
|
16
|
+
fill="currentColor"
|
17
|
+
/>
|
18
|
+
<path
|
19
|
+
fill="currentColor"
|
20
|
+
id="Pfad_445"
|
21
|
+
d="M15.316,7.359l-1.36-.008A6,6,0,0,0,8.666,2.062V.73a.666.666,0,0,0-1.332,0V2.062a6,6,0,0,0-5.29,5.289L.683,7.359a.666.666,0,0,0,0,1.331s0,0,0-.015l1.355-.007a6,6,0,0,0,5.289,5.3v1.361a.666.666,0,0,0,1.332,0V13.965a6,6,0,0,0,5.289-5.3l1.354.007c0,.015,0,.015,0,.015a.666.666,0,0,0,0-1.331ZM8,12.673a4.66,4.66,0,1,1,4.663-4.66A4.666,4.666,0,0,1,8,12.673Z"
|
22
|
+
transform="translate(2407.979 281.936)"
|
23
|
+
/>
|
24
|
+
</g>
|
25
|
+
<rect
|
26
|
+
id="size"
|
27
|
+
width="16"
|
28
|
+
height="16"
|
29
|
+
transform="translate(0 0)"
|
30
|
+
fill="none"
|
31
|
+
/>
|
32
|
+
</svg>
|
33
|
+
</template>
|
@@ -0,0 +1,2 @@
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
2
|
+
export default _default;
|
package/src/i18n/de.d.ts
CHANGED
@@ -46,6 +46,12 @@ declare namespace messages {
|
|
46
46
|
let pitchTooltip: string;
|
47
47
|
let overviewMapTooltip: string;
|
48
48
|
let homeButton: string;
|
49
|
+
namespace locator {
|
50
|
+
let errorAccess: string;
|
51
|
+
let errorCurrentPosition: string;
|
52
|
+
let errorConnection: string;
|
53
|
+
let errorPosition: string;
|
54
|
+
}
|
49
55
|
}
|
50
56
|
export namespace categoryManager {
|
51
57
|
let title_5: string;
|
@@ -147,9 +153,19 @@ declare namespace messages {
|
|
147
153
|
export { _export as export };
|
148
154
|
export let exportPath: string;
|
149
155
|
}
|
150
|
-
export namespace
|
156
|
+
export namespace splashScreen {
|
151
157
|
let name_2: string;
|
152
158
|
export { name_2 as name };
|
159
|
+
export let checkBoxText: string;
|
160
|
+
export let buttonTitle: string;
|
161
|
+
}
|
162
|
+
export namespace customScreen {
|
163
|
+
let name_3: string;
|
164
|
+
export { name_3 as name };
|
165
|
+
}
|
166
|
+
export namespace viewpoint {
|
167
|
+
let name_4: string;
|
168
|
+
export { name_4 as name };
|
153
169
|
let title_7: string;
|
154
170
|
export { title_7 as title };
|
155
171
|
let titlePlaceholder_1: string;
|
@@ -250,16 +266,25 @@ declare namespace messages {
|
|
250
266
|
let tooltip_3: string;
|
251
267
|
export { tooltip_3 as tooltip };
|
252
268
|
export let languageSelector: string;
|
253
|
-
export namespace
|
269
|
+
export namespace displayQuality {
|
254
270
|
let title_10: string;
|
255
271
|
export { title_10 as title };
|
272
|
+
export namespace level {
|
273
|
+
let low: string;
|
274
|
+
let medium: string;
|
275
|
+
let high: string;
|
276
|
+
}
|
277
|
+
}
|
278
|
+
export namespace theme {
|
279
|
+
let title_11: string;
|
280
|
+
export { title_11 as title };
|
256
281
|
export let dark: string;
|
257
282
|
export let light: string;
|
258
283
|
}
|
259
284
|
}
|
260
285
|
export namespace help_1 {
|
261
|
-
let
|
262
|
-
export {
|
286
|
+
let title_12: string;
|
287
|
+
export { title_12 as title };
|
263
288
|
let tooltip_4: string;
|
264
289
|
export { tooltip_4 as tooltip };
|
265
290
|
}
|
@@ -269,8 +294,8 @@ declare namespace messages {
|
|
269
294
|
let deactivateToolTitle: string;
|
270
295
|
}
|
271
296
|
export namespace legend {
|
272
|
-
let
|
273
|
-
export {
|
297
|
+
let title_13: string;
|
298
|
+
export { title_13 as title };
|
274
299
|
let tooltip_5: string;
|
275
300
|
export { tooltip_5 as tooltip };
|
276
301
|
let empty_2: string;
|
@@ -279,8 +304,8 @@ declare namespace messages {
|
|
279
304
|
export let defaultLabelText: string;
|
280
305
|
}
|
281
306
|
export namespace search_1 {
|
282
|
-
let
|
283
|
-
export {
|
307
|
+
let title_14: string;
|
308
|
+
export { title_14 as title };
|
284
309
|
let tooltip_6: string;
|
285
310
|
export { tooltip_6 as tooltip };
|
286
311
|
export let select: string;
|
@@ -296,31 +321,31 @@ declare namespace messages {
|
|
296
321
|
export let miscellaneous: string;
|
297
322
|
}
|
298
323
|
export namespace footer {
|
299
|
-
let
|
300
|
-
export {
|
324
|
+
let title_15: string;
|
325
|
+
export { title_15 as title };
|
301
326
|
export namespace attributions {
|
302
|
-
let
|
303
|
-
export {
|
327
|
+
let title_16: string;
|
328
|
+
export { title_16 as title };
|
304
329
|
let tooltip_7: string;
|
305
330
|
export { tooltip_7 as tooltip };
|
306
331
|
let empty_3: string;
|
307
332
|
export { empty_3 as empty };
|
308
333
|
}
|
309
334
|
export namespace imprint {
|
310
|
-
let
|
311
|
-
export {
|
335
|
+
let title_17: string;
|
336
|
+
export { title_17 as title };
|
312
337
|
let tooltip_8: string;
|
313
338
|
export { tooltip_8 as tooltip };
|
314
339
|
}
|
315
340
|
export namespace dataProtection {
|
316
|
-
let
|
317
|
-
export {
|
341
|
+
let title_18: string;
|
342
|
+
export { title_18 as title };
|
318
343
|
let tooltip_9: string;
|
319
344
|
export { tooltip_9 as tooltip };
|
320
345
|
}
|
321
346
|
export namespace positionDisplay {
|
322
|
-
let
|
323
|
-
export {
|
347
|
+
let title_19: string;
|
348
|
+
export { title_19 as title };
|
324
349
|
let projection_1: string;
|
325
350
|
export { projection_1 as projection };
|
326
351
|
}
|
package/src/i18n/de.js
CHANGED
@@ -42,6 +42,14 @@ const messages = {
|
|
42
42
|
pitchTooltip: 'Kameraneigung: {0}°',
|
43
43
|
overviewMapTooltip: 'Übersichtskarte',
|
44
44
|
homeButton: 'Zur Startansicht springen',
|
45
|
+
locator: {
|
46
|
+
errorAccess: 'Der Zugriff auf Ihre Position wurde verweigert.',
|
47
|
+
errorCurrentPosition:
|
48
|
+
'Ihre momentane Position konnte leider nicht erfasst werden.',
|
49
|
+
errorConnection:
|
50
|
+
'Während dem ermitteln Ihrer Position wurde die Verbindung verloren',
|
51
|
+
errorPosition: 'Ihre Position kann leider nicht erfasst werden',
|
52
|
+
},
|
45
53
|
},
|
46
54
|
categoryManager: {
|
47
55
|
title: 'Mein Arbeitsbereich',
|
@@ -136,6 +144,15 @@ const messages = {
|
|
136
144
|
export: 'Flug exportieren',
|
137
145
|
exportPath: 'Flugpfad exportieren',
|
138
146
|
},
|
147
|
+
splashScreen: {
|
148
|
+
name: 'Splash Screen',
|
149
|
+
checkBoxText:
|
150
|
+
'Bitte akzeptieren sie die [Bedingungen](https://vc.systems/) um Fortzufahren',
|
151
|
+
buttonTitle: 'Weiter',
|
152
|
+
},
|
153
|
+
customScreen: {
|
154
|
+
name: 'Benutzerdefinierter Screen',
|
155
|
+
},
|
139
156
|
viewpoint: {
|
140
157
|
name: 'Name (ID)',
|
141
158
|
title: 'Titel',
|
@@ -227,6 +244,14 @@ const messages = {
|
|
227
244
|
title: 'Einstellungen',
|
228
245
|
tooltip: 'Einstellungen',
|
229
246
|
languageSelector: 'Sprache',
|
247
|
+
displayQuality: {
|
248
|
+
title: 'Anzeigequalität',
|
249
|
+
level: {
|
250
|
+
low: 'Niedrige',
|
251
|
+
medium: 'Mittlere',
|
252
|
+
high: 'Hohe',
|
253
|
+
},
|
254
|
+
},
|
230
255
|
theme: {
|
231
256
|
title: 'Farbschema',
|
232
257
|
dark: 'Dunkel',
|
package/src/i18n/en.d.ts
CHANGED
@@ -46,6 +46,12 @@ declare namespace messages {
|
|
46
46
|
let pitchTooltip: string;
|
47
47
|
let overviewMapTooltip: string;
|
48
48
|
let homeButton: string;
|
49
|
+
namespace locator {
|
50
|
+
let errorAccess: string;
|
51
|
+
let errorCurrentPosition: string;
|
52
|
+
let errorConnection: string;
|
53
|
+
let errorPosition: string;
|
54
|
+
}
|
49
55
|
}
|
50
56
|
export namespace categoryManager {
|
51
57
|
let title_5: string;
|
@@ -147,9 +153,19 @@ declare namespace messages {
|
|
147
153
|
export { _export as export };
|
148
154
|
export let exportPath: string;
|
149
155
|
}
|
150
|
-
export namespace
|
156
|
+
export namespace splashScreen {
|
151
157
|
let name_2: string;
|
152
158
|
export { name_2 as name };
|
159
|
+
export let checkBoxText: string;
|
160
|
+
export let buttonTitle: string;
|
161
|
+
}
|
162
|
+
export namespace customScreen {
|
163
|
+
let name_3: string;
|
164
|
+
export { name_3 as name };
|
165
|
+
}
|
166
|
+
export namespace viewpoint {
|
167
|
+
let name_4: string;
|
168
|
+
export { name_4 as name };
|
153
169
|
let title_7: string;
|
154
170
|
export { title_7 as title };
|
155
171
|
let titlePlaceholder_1: string;
|
@@ -250,16 +266,25 @@ declare namespace messages {
|
|
250
266
|
let tooltip_3: string;
|
251
267
|
export { tooltip_3 as tooltip };
|
252
268
|
export let languageSelector: string;
|
253
|
-
export namespace
|
269
|
+
export namespace displayQuality {
|
254
270
|
let title_10: string;
|
255
271
|
export { title_10 as title };
|
272
|
+
export namespace level {
|
273
|
+
let low: string;
|
274
|
+
let medium: string;
|
275
|
+
let high: string;
|
276
|
+
}
|
277
|
+
}
|
278
|
+
export namespace theme {
|
279
|
+
let title_11: string;
|
280
|
+
export { title_11 as title };
|
256
281
|
export let dark: string;
|
257
282
|
export let light: string;
|
258
283
|
}
|
259
284
|
}
|
260
285
|
export namespace help_1 {
|
261
|
-
let
|
262
|
-
export {
|
286
|
+
let title_12: string;
|
287
|
+
export { title_12 as title };
|
263
288
|
let tooltip_4: string;
|
264
289
|
export { tooltip_4 as tooltip };
|
265
290
|
}
|
@@ -269,8 +294,8 @@ declare namespace messages {
|
|
269
294
|
let deactivateToolTitle: string;
|
270
295
|
}
|
271
296
|
export namespace legend {
|
272
|
-
let
|
273
|
-
export {
|
297
|
+
let title_13: string;
|
298
|
+
export { title_13 as title };
|
274
299
|
let tooltip_5: string;
|
275
300
|
export { tooltip_5 as tooltip };
|
276
301
|
let empty_2: string;
|
@@ -279,8 +304,8 @@ declare namespace messages {
|
|
279
304
|
export let defaultLabelText: string;
|
280
305
|
}
|
281
306
|
export namespace search_1 {
|
282
|
-
let
|
283
|
-
export {
|
307
|
+
let title_14: string;
|
308
|
+
export { title_14 as title };
|
284
309
|
let tooltip_6: string;
|
285
310
|
export { tooltip_6 as tooltip };
|
286
311
|
export let select: string;
|
@@ -296,31 +321,31 @@ declare namespace messages {
|
|
296
321
|
export let miscellaneous: string;
|
297
322
|
}
|
298
323
|
export namespace footer {
|
299
|
-
let
|
300
|
-
export {
|
324
|
+
let title_15: string;
|
325
|
+
export { title_15 as title };
|
301
326
|
export namespace attributions {
|
302
|
-
let
|
303
|
-
export {
|
327
|
+
let title_16: string;
|
328
|
+
export { title_16 as title };
|
304
329
|
let tooltip_7: string;
|
305
330
|
export { tooltip_7 as tooltip };
|
306
331
|
let empty_3: string;
|
307
332
|
export { empty_3 as empty };
|
308
333
|
}
|
309
334
|
export namespace imprint {
|
310
|
-
let
|
311
|
-
export {
|
335
|
+
let title_17: string;
|
336
|
+
export { title_17 as title };
|
312
337
|
let tooltip_8: string;
|
313
338
|
export { tooltip_8 as tooltip };
|
314
339
|
}
|
315
340
|
export namespace dataProtection {
|
316
|
-
let
|
317
|
-
export {
|
341
|
+
let title_18: string;
|
342
|
+
export { title_18 as title };
|
318
343
|
let tooltip_9: string;
|
319
344
|
export { tooltip_9 as tooltip };
|
320
345
|
}
|
321
346
|
export namespace positionDisplay {
|
322
|
-
let
|
323
|
-
export {
|
347
|
+
let title_19: string;
|
348
|
+
export { title_19 as title };
|
324
349
|
let projection_1: string;
|
325
350
|
export { projection_1 as projection };
|
326
351
|
}
|
package/src/i18n/en.js
CHANGED
@@ -42,6 +42,14 @@ const messages = {
|
|
42
42
|
pitchTooltip: 'Camera pitch: {0}°',
|
43
43
|
overviewMapTooltip: 'Show overview map',
|
44
44
|
homeButton: 'Go to home view',
|
45
|
+
locator: {
|
46
|
+
errorAccess: 'Access to your location has been denied',
|
47
|
+
errorCurrentPosition:
|
48
|
+
'Unfortunately, your current position could not be recorded',
|
49
|
+
errorConnection:
|
50
|
+
'The connection was lost while your position was being determined',
|
51
|
+
errorPosition: 'Unfortunately, your position cannot be recorded',
|
52
|
+
},
|
45
53
|
},
|
46
54
|
categoryManager: {
|
47
55
|
title: 'My Workspace',
|
@@ -136,6 +144,15 @@ const messages = {
|
|
136
144
|
export: 'Export flight',
|
137
145
|
exportPath: 'Export flight path',
|
138
146
|
},
|
147
|
+
splashScreen: {
|
148
|
+
name: 'Splash Screen',
|
149
|
+
checkBoxText:
|
150
|
+
'Please accept the [Conditions](https://vc.systems/) to continue',
|
151
|
+
buttonTitle: 'Continue',
|
152
|
+
},
|
153
|
+
customScreen: {
|
154
|
+
name: 'Custom Screen',
|
155
|
+
},
|
139
156
|
viewpoint: {
|
140
157
|
name: 'Name (ID)',
|
141
158
|
title: 'Title',
|
@@ -227,6 +244,14 @@ const messages = {
|
|
227
244
|
title: 'Settings',
|
228
245
|
tooltip: 'Configure settings',
|
229
246
|
languageSelector: 'Language',
|
247
|
+
displayQuality: {
|
248
|
+
title: 'Display Settings',
|
249
|
+
level: {
|
250
|
+
low: 'Low',
|
251
|
+
medium: 'Medium',
|
252
|
+
high: 'High',
|
253
|
+
},
|
254
|
+
},
|
230
255
|
theme: {
|
231
256
|
title: 'Color theme',
|
232
257
|
dark: 'Dark',
|
@@ -3,17 +3,37 @@
|
|
3
3
|
:class="$vuetify.breakpoint.xs ? 'nav-container mobile' : 'nav-container'"
|
4
4
|
>
|
5
5
|
<v-row>
|
6
|
-
<VcsCompass
|
6
|
+
<VcsCompass
|
7
|
+
:view-mode="viewMode"
|
8
|
+
v-model="heading"
|
9
|
+
:disabled="movementApiCallsDisabled"
|
10
|
+
/>
|
7
11
|
</v-row>
|
8
12
|
<v-row v-if="isOblique">
|
9
|
-
<ObliqueRotation v-model="heading" />
|
13
|
+
<ObliqueRotation v-model="heading" :disabled="movementApiCallsDisabled" />
|
10
14
|
</v-row>
|
15
|
+
<template v-if="$vuetify.breakpoint.mobile">
|
16
|
+
<v-row justify="center">
|
17
|
+
<OrientationToolsButton
|
18
|
+
v-if="showLocatorButton"
|
19
|
+
:icon="locatorAction.icon"
|
20
|
+
:tooltip="locatorAction.title"
|
21
|
+
:color="locatorAction.active ? 'primary' : undefined"
|
22
|
+
@click.stop="locatorAction.callback($event)"
|
23
|
+
:disabled="movementApiCallsDisabled"
|
24
|
+
></OrientationToolsButton>
|
25
|
+
</v-row>
|
26
|
+
</template>
|
11
27
|
<template v-if="$vuetify.breakpoint.mdAndUp">
|
12
28
|
<v-row justify="center">
|
13
|
-
<VcsZoomButton
|
29
|
+
<VcsZoomButton
|
30
|
+
@zoom-out="zoomOut()"
|
31
|
+
@zoom-in="zoomIn()"
|
32
|
+
:disabled="movementApiCallsDisabled"
|
33
|
+
/>
|
14
34
|
</v-row>
|
15
35
|
<v-row justify="center" v-if="is3D && $vuetify.breakpoint.mdAndUp">
|
16
|
-
<TiltSlider v-model="tilt" />
|
36
|
+
<TiltSlider v-model="tilt" :disabled="movementApiCallsDisabled" />
|
17
37
|
</v-row>
|
18
38
|
<v-row justify="center">
|
19
39
|
<OrientationToolsButton
|
@@ -21,6 +41,7 @@
|
|
21
41
|
:icon="homeAction.icon"
|
22
42
|
:tooltip="homeAction.title"
|
23
43
|
@click.stop="homeAction.callback($event)"
|
44
|
+
:disabled="movementApiCallsDisabled"
|
24
45
|
/>
|
25
46
|
</v-row>
|
26
47
|
<v-row justify="center">
|
@@ -41,6 +62,7 @@
|
|
41
62
|
import { ObliqueMap, CesiumMap } from '@vcmap/core';
|
42
63
|
import { VContainer, VRow } from 'vuetify/lib';
|
43
64
|
import { createOverviewMapAction } from '../actions/actionHelper.js';
|
65
|
+
import { createLocatorAction } from './locatorHelper.js';
|
44
66
|
import {
|
45
67
|
getWindowComponentOptions,
|
46
68
|
overviewMapLayerSymbol,
|
@@ -137,6 +159,30 @@
|
|
137
159
|
await map.gotoViewpoint(viewpoint);
|
138
160
|
}
|
139
161
|
|
162
|
+
/**
|
163
|
+
* @param {import("@src/vcsUiApp.js").default} app
|
164
|
+
* @param {import("vue").Ref} isDisabled
|
165
|
+
* @returns {() => void}
|
166
|
+
*/
|
167
|
+
function setupMovementDisabledListener(app, isDisabled) {
|
168
|
+
let movementDisabledListener = () => {};
|
169
|
+
const mapActivatedListener = app.maps.mapActivated.addEventListener(
|
170
|
+
(map) => {
|
171
|
+
movementDisabledListener();
|
172
|
+
isDisabled.value = map.movementApiCallsDisabled;
|
173
|
+
movementDisabledListener = map.movementDisabledChanged.addEventListener(
|
174
|
+
(mapControlOptions) => {
|
175
|
+
isDisabled.value = mapControlOptions.apiCalls;
|
176
|
+
},
|
177
|
+
);
|
178
|
+
},
|
179
|
+
);
|
180
|
+
return () => {
|
181
|
+
movementDisabledListener();
|
182
|
+
mapActivatedListener();
|
183
|
+
};
|
184
|
+
}
|
185
|
+
|
140
186
|
export default {
|
141
187
|
components: {
|
142
188
|
OrientationToolsButton,
|
@@ -204,6 +250,15 @@
|
|
204
250
|
const showOverviewButton = ref(
|
205
251
|
app.overviewMap.map.layerCollection.size > 0,
|
206
252
|
);
|
253
|
+
// Locator
|
254
|
+
const { action: locatorAction, destroy: destroyLocator } =
|
255
|
+
createLocatorAction(app);
|
256
|
+
|
257
|
+
const showLocatorButton = ref(true);
|
258
|
+
if (app.uiConfig.getByKey('showLocator')?.value === false) {
|
259
|
+
showLocatorButton.value = false;
|
260
|
+
}
|
261
|
+
|
207
262
|
const overviewMapListeners = [
|
208
263
|
app.overviewMap.map.layerCollection.added.addEventListener(() => {
|
209
264
|
showOverviewButton.value = true;
|
@@ -221,17 +276,29 @@
|
|
221
276
|
}),
|
222
277
|
];
|
223
278
|
|
279
|
+
const movementApiCallsDisabled = ref(
|
280
|
+
!!app.maps.activeMap?.movementApiCallsDisabled,
|
281
|
+
);
|
282
|
+
const removeMovementDisabledListener = setupMovementDisabledListener(
|
283
|
+
app,
|
284
|
+
movementApiCallsDisabled,
|
285
|
+
);
|
286
|
+
|
224
287
|
const { action: homeAction, destroy: homeDestroy } = setupHomeButton(app);
|
225
288
|
|
226
289
|
onUnmounted(() => {
|
227
290
|
if (overviewDestroy) {
|
228
291
|
overviewDestroy();
|
229
292
|
}
|
293
|
+
if (destroyLocator) {
|
294
|
+
destroyLocator();
|
295
|
+
}
|
230
296
|
if (homeDestroy) {
|
231
297
|
homeDestroy();
|
232
298
|
}
|
233
299
|
postRenderHandler();
|
234
300
|
overviewMapListeners.forEach((cb) => cb());
|
301
|
+
removeMovementDisabledListener();
|
235
302
|
});
|
236
303
|
|
237
304
|
return {
|
@@ -251,8 +318,11 @@
|
|
251
318
|
zoom(app.maps.activeMap, true);
|
252
319
|
},
|
253
320
|
overviewAction: reactive(overviewAction),
|
321
|
+
locatorAction: reactive(locatorAction),
|
254
322
|
showOverviewButton,
|
323
|
+
showLocatorButton,
|
255
324
|
homeAction,
|
325
|
+
movementApiCallsDisabled,
|
256
326
|
};
|
257
327
|
},
|
258
328
|
};
|
@@ -40,7 +40,43 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
40
40
|
*/
|
41
41
|
disabled?: boolean | undefined;
|
42
42
|
};
|
43
|
+
locatorAction: {
|
44
|
+
/**
|
45
|
+
* - reactive and translatable name rendered in overflow
|
46
|
+
*/
|
47
|
+
name: string;
|
48
|
+
/**
|
49
|
+
* - reactive and translatable title rendered as tooltip
|
50
|
+
*/
|
51
|
+
title?: string | undefined;
|
52
|
+
/**
|
53
|
+
* - icon rendered on the button. If no icon provided, item is rendered in overflow
|
54
|
+
*/
|
55
|
+
icon?: string | undefined;
|
56
|
+
/**
|
57
|
+
* - callback function is triggered when the button is clicked
|
58
|
+
*/
|
59
|
+
callback: import("../actions/actionHelper.js").ActionCallback;
|
60
|
+
/**
|
61
|
+
* - optional state of button. If active, button is rendered in primary color
|
62
|
+
*/
|
63
|
+
active?: boolean | undefined;
|
64
|
+
/**
|
65
|
+
* - optional hasUpdate of button. If true, a yellow notification is rendered next to the button
|
66
|
+
*/
|
67
|
+
hasUpdate?: boolean | undefined;
|
68
|
+
/**
|
69
|
+
* - optional background state. If active and background, button is rendered in primary color outlined
|
70
|
+
*/
|
71
|
+
background?: boolean | undefined;
|
72
|
+
/**
|
73
|
+
* - optional flag to indicate that the action is disabled
|
74
|
+
*/
|
75
|
+
disabled?: boolean | undefined;
|
76
|
+
};
|
43
77
|
showOverviewButton: import("vue").Ref<boolean>;
|
78
|
+
showLocatorButton: import("vue").Ref<boolean>;
|
44
79
|
homeAction: any;
|
80
|
+
movementApiCallsDisabled: import("vue").Ref<boolean>;
|
45
81
|
}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
46
82
|
export default _default;
|