@vcmap/ui 5.0.0-rc.24 → 5.0.0-rc.26
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/build/build.js +132 -14
- package/build/buildHelpers.js +196 -92
- package/build/bundle.js +56 -0
- package/build/commonViteConfig.js +2 -2
- package/config/base.config.json +29 -2
- package/config/dev.config.json +29 -1
- package/config/www.config.json +81 -39
- package/dist/assets/@mdi/font/LICENSE +20 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +3 -0
- package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-85d9e53a.js → AxisAlignedBoundingBox-4140c51f.js} +1 -1
- package/dist/assets/cesium/Workers/{BoundingRectangle-1ee7eb47.js → BoundingRectangle-c714b156.js} +1 -1
- package/dist/assets/cesium/Workers/{BoxGeometry-3b2be784.js → BoxGeometry-6f3da43d.js} +1 -1
- package/dist/assets/cesium/Workers/{Color-f107c84d.js → Color-8a565ff2.js} +5 -5
- package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-78d71993.js → CoplanarPolygonGeometryLibrary-4b4d4096.js} +1 -1
- package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-50d99b33.js → CorridorGeometryLibrary-7b94502b.js} +1 -1
- package/dist/assets/cesium/Workers/{CylinderGeometry-51b0d9bf.js → CylinderGeometry-ca070b87.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseGeometry-bcfb5d87.js → EllipseGeometry-122e51fa.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-e94f8472.js → EllipseGeometryLibrary-4d326efc.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-28e3a1bb.js → EllipseOutlineGeometry-16cc2bd7.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidGeometry-b222fa63.js → EllipsoidGeometry-cb148ca2.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-38a3fb5b.js → EllipsoidOutlineGeometry-0fa10c79.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-8c89f28c.js → EllipsoidTangentPlane-6dd1b7af.js} +1 -1
- package/dist/assets/cesium/Workers/{FrustumGeometry-bdd3a04d.js → FrustumGeometry-ee73037c.js} +1 -1
- package/dist/assets/cesium/Workers/{GeometryAttribute-153115c5.js → GeometryAttribute-ff5b4fb1.js} +1 -1
- package/dist/assets/cesium/Workers/{GeometryPipeline-acb2399c.js → GeometryPipeline-1f8fbf05.js} +1 -1
- package/dist/assets/cesium/Workers/{IntersectionTests-271e513e.js → IntersectionTests-70d39ba9.js} +1 -1
- package/dist/assets/cesium/Workers/{OrientedBoundingBox-5e04e31f.js → OrientedBoundingBox-159cf1d6.js} +1 -1
- package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-6762b65b.js → PolygonGeometryLibrary-076a5d25.js} +1 -1
- package/dist/assets/cesium/Workers/{PolygonPipeline-7dc7a431.js → PolygonPipeline-b9f2810a.js} +1 -1
- package/dist/assets/cesium/Workers/{PolylinePipeline-15fde655.js → PolylinePipeline-639192e0.js} +1 -1
- package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-ba7dfed5.js → PolylineVolumeGeometryLibrary-b73549fb.js} +1 -1
- package/dist/assets/cesium/Workers/{PrimitivePipeline-68f0b9a2.js → PrimitivePipeline-10ede1b6.js} +1 -1
- package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-8eaf23da.js → RectangleGeometryLibrary-c35a7356.js} +1 -1
- package/dist/assets/cesium/Workers/{TerrainEncoding-eb8a645a.js → TerrainEncoding-668d242f.js} +1 -1
- package/dist/assets/cesium/Workers/{Transforms-f6451f99.js → Transforms-a2a85221.js} +14 -0
- package/dist/assets/cesium/Workers/{WallGeometryLibrary-feef3109.js → WallGeometryLibrary-1938bf0d.js} +1 -1
- package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +1 -1
- package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCircleGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSphereGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
- package/dist/assets/cesium/Workers/createWallGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/package.js +1 -1
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/dist/assets/{cesium.253914.js → cesium.305b7c.js} +58656 -33170
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/core.f3d6d4.js +19060 -0
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-f94d5be3.js +1 -0
- package/dist/assets/{ol.1c946a.js → ol.39cc05.js} +27344 -12118
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.74022f.css +5 -0
- package/dist/assets/ui.74022f.js +13466 -0
- package/dist/assets/ui.js +1 -1
- package/dist/assets/{vue.c1ece7.js → vue.9b8c6e.js} +834 -598
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.6efa21.css → vuetify.30486f.css} +1 -1
- package/dist/assets/{vuetify.6efa21.js → vuetify.30486f.js} +343 -103
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +7 -6
- package/index.html +14 -6
- package/index.js +19 -2
- package/lib/olLib.js +19 -16
- package/package.json +15 -14
- package/plugins/@vcmap/create-link/fallbackCreateLink.vue +0 -2
- package/plugins/@vcmap/simple-graph/index.js +1 -1
- package/plugins/@vcmap-show-case/README.md +2 -1
- package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +55 -79
- package/plugins/@vcmap-show-case/category-tester/CategoriesExample.vue +135 -0
- package/plugins/@vcmap-show-case/category-tester/CollectionComponentOptions.vue +209 -0
- package/plugins/@vcmap-show-case/category-tester/index.js +19 -1
- package/plugins/@vcmap-show-case/collection-manager-example/CollectionManagerExample.vue +182 -0
- package/plugins/@vcmap-show-case/collection-manager-example/README.md +3 -0
- package/plugins/@vcmap-show-case/collection-manager-example/index.js +74 -0
- package/plugins/@vcmap-show-case/collection-manager-example/package.json +5 -0
- package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +20 -3
- package/plugins/@vcmap-show-case/switch-map-callback-example/README.md +21 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/SwitchMapCallback.js +47 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/config.json +3 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/index.js +34 -0
- package/plugins/@vcmap-show-case/switch-map-callback-example/package.json +5 -0
- package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +0 -1
- package/plugins/package.json +3 -1
- package/public/assets/@mdi/font/LICENSE +20 -0
- package/public/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
- package/public/assets/@mdi/font/css/materialdesignicons.min.css +3 -0
- package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/public/assets/favicon-128.png +0 -0
- package/public/assets/favicon-180.png +0 -0
- package/public/assets/favicon-192.png +0 -0
- package/public/assets/favicon-32.png +0 -0
- package/src/application/VcsApp.vue +38 -8
- package/src/application/VcsAttributions.vue +20 -5
- package/src/application/VcsAttributionsFooter.vue +0 -1
- package/src/application/VcsNavbar.vue +29 -22
- package/src/callback/activateLayersCallback.js +54 -0
- package/src/callback/applyLayerStyleCallback.js +63 -0
- package/src/callback/deactivateLayersCallback.js +54 -0
- package/src/callback/goToViewpointCallback.js +54 -0
- package/src/callback/vcsCallback.js +66 -0
- package/src/components/buttons/VcsActionButtonList.vue +28 -10
- package/src/components/buttons/VcsButton.vue +38 -100
- package/src/components/buttons/VcsFormButton.vue +6 -4
- package/src/components/buttons/VcsToolButton.vue +161 -0
- package/src/components/form-inputs-controls/VcsDatePicker.vue +19 -5
- package/src/components/form-inputs-controls/VcsFormSection.vue +0 -1
- package/src/components/form-inputs-controls/VcsSelect.vue +16 -2
- package/src/components/form-inputs-controls/VcsSlider.vue +72 -0
- package/src/components/form-inputs-controls/VcsTextField.vue +24 -13
- package/src/components/form-inputs-controls/VcsWizard.vue +13 -14
- package/src/components/form-inputs-controls/VcsWizardStep.vue +0 -1
- package/src/components/lists/VcsList.vue +3 -2
- package/src/components/lists/VcsTreeviewLeaf.vue +0 -1
- package/src/components/tables/VcsDataTable.vue +5 -5
- package/src/components/tables/VcsTable.vue +1 -1
- package/src/contentTree/LayerTree.vue +15 -9
- package/src/contentTree/contentTreeCollection.js +1 -1
- package/src/contentTree/contentTreeItem.js +22 -3
- package/src/contentTree/groupContentTreeItem.js +1 -0
- package/src/contentTree/layerContentTreeItem.js +4 -14
- package/src/contentTree/layerGroupContentTreeItem.js +4 -14
- package/src/contentTree/obliqueCollectionContentTreeItem.js +4 -0
- package/src/contentTree/viewpointContentTreeItem.js +1 -0
- package/src/featureInfo/BalloonComponent.vue +0 -1
- package/src/featureInfo/abstractFeatureInfoView.js +16 -1
- package/src/featureInfo/featureInfo.js +45 -56
- package/src/i18n/de.js +5 -2
- package/src/i18n/en.js +5 -2
- package/src/i18n/i18nCollection.js +1 -2
- package/src/init.js +1 -4
- package/src/legend/vcsLegend.vue +1 -1
- package/src/manager/buttonManager.js +15 -0
- package/src/manager/{categoryManager/CategoryComponent.vue → collectionManager/CollectionComponent.vue} +57 -66
- package/src/manager/collectionManager/CollectionComponentList.vue +62 -0
- package/src/manager/collectionManager/CollectionComponentProvider.vue +38 -0
- package/src/manager/collectionManager/CollectionManager.vue +43 -0
- package/src/manager/collectionManager/categoryManager.js +83 -0
- package/src/manager/collectionManager/collectionComponent.js +453 -0
- package/src/manager/collectionManager/collectionManager.js +432 -0
- package/src/manager/navbarManager.js +5 -4
- package/src/manager/toolbox/GroupToolboxComponent.vue +5 -7
- package/src/manager/toolbox/SelectToolboxComponent.vue +6 -9
- package/src/manager/toolbox/ToolboxManager.vue +4 -5
- package/src/manager/window/WindowComponentHeader.vue +0 -4
- package/src/manager/window/WindowManager.vue +22 -5
- package/src/navigation/mapNavigation.vue +34 -8
- package/src/navigation/overviewMap.js +7 -1
- package/src/notifier/notifierComponent.vue +0 -1
- package/src/pluginHelper.js +5 -0
- package/src/search/resultItem.vue +0 -1
- package/src/search/searchComponent.vue +7 -9
- package/src/styles/_theming.scss +0 -16
- package/src/styles/_typography.scss +2 -2
- package/src/styles/main.scss +8 -0
- package/src/styles/vcsFont.scss +1 -22
- package/src/vcsUiApp.js +76 -12
- package/src/vuePlugins/i18n.js +18 -19
- package/src/vuePlugins/vuetify.js +0 -1
- package/dist/assets/core.3a8205.js +0 -18426
- package/dist/assets/index.91ae2d55.js +0 -1
- package/dist/assets/ui.0025be.css +0 -5
- package/dist/assets/ui.0025be.js +0 -18534
- package/plugins/@vcmap-show-case/category-tester/Categories.vue +0 -291
- package/plugins/@vcmap-show-case/category-tester/Category.vue +0 -164
- package/src/manager/categoryManager/CategoryComponentList.vue +0 -82
- package/src/manager/categoryManager/CategoryManager.vue +0 -47
- package/src/manager/categoryManager/categoryManager.js +0 -633
- package/start.js +0 -9
- /package/{src/assets/favicon-128.png → dist/assets/favicon-128.4c4ce5.png} +0 -0
- /package/{src/assets/favicon-180.png → dist/assets/favicon-180.5b99c0.png} +0 -0
- /package/{src/assets/favicon-192.png → dist/assets/favicon-192.0e205e.png} +0 -0
- /package/{src/assets/favicon-32.png → dist/assets/favicon-32.6b9add.png} +0 -0
- /package/dist/assets/{favicon.decf54cc.svg → favicon.d5ec97.svg} +0 -0
- /package/dist/assets/font/{TitilliumWeb-Regular.woff2 → TitilliumWeb-Regular.9ca076.woff2} +0 -0
- /package/{src → public}/assets/favicon.svg +0 -0
- /package/{src → public}/assets/font/OFL.txt +0 -0
- /package/{src → public}/assets/font/TitilliumWeb-Regular.woff2 +0 -0
- /package/src/{assets/logo-mobile.svg → logo-mobile.svg} +0 -0
- /package/src/{assets/logo.svg → logo.svg} +0 -0
@@ -1,11 +1,8 @@
|
|
1
1
|
import {
|
2
2
|
EventType,
|
3
|
-
makeOverrideCollection,
|
4
3
|
Collection,
|
5
|
-
getObjectFromClassRegistry,
|
6
4
|
VcsEvent,
|
7
5
|
vcsLayerName,
|
8
|
-
OverrideClassRegistry,
|
9
6
|
ClassRegistry,
|
10
7
|
fromCesiumColor,
|
11
8
|
VectorLayer,
|
@@ -155,23 +152,49 @@ function setupFeatureInfoTool(app) {
|
|
155
152
|
},
|
156
153
|
};
|
157
154
|
|
158
|
-
|
159
|
-
|
155
|
+
function addFeatureInfoButton() {
|
156
|
+
if (app.uiConfig.getByKey('startingFeatureInfo')?.value !== false) {
|
157
|
+
action.callback();
|
158
|
+
}
|
159
|
+
app.toolboxManager.add(
|
160
|
+
{
|
161
|
+
id: 'featureInfo',
|
162
|
+
type: ToolboxType.SINGLE,
|
163
|
+
action,
|
164
|
+
},
|
165
|
+
vcsAppSymbol,
|
166
|
+
);
|
160
167
|
}
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
168
|
+
|
169
|
+
if ([...app.layers].some((l) => l.properties?.featureInfo)) {
|
170
|
+
addFeatureInfoButton();
|
171
|
+
}
|
172
|
+
|
173
|
+
const listeners = [
|
174
|
+
app.layers.added.addEventListener((layer) => {
|
175
|
+
if (
|
176
|
+
layer?.properties?.featureInfo &&
|
177
|
+
!app.toolboxManager.has('featureInfo')
|
178
|
+
) {
|
179
|
+
addFeatureInfoButton();
|
180
|
+
}
|
181
|
+
}),
|
182
|
+
app.layers.removed.addEventListener(() => {
|
183
|
+
if (
|
184
|
+
![...app.layers].some((l) => l.properties?.featureInfo) &&
|
185
|
+
app.toolboxManager.has('featureInfo')
|
186
|
+
) {
|
187
|
+
app.toolboxManager.remove('featureInfo');
|
188
|
+
}
|
189
|
+
}),
|
190
|
+
];
|
169
191
|
|
170
192
|
return () => {
|
171
193
|
if (session) {
|
172
194
|
session.stop();
|
173
195
|
}
|
174
196
|
app.toolboxManager.remove('featureInfo');
|
197
|
+
listeners.forEach((cb) => cb());
|
175
198
|
};
|
176
199
|
}
|
177
200
|
|
@@ -194,37 +217,22 @@ export const featureInfoViewSymbol = Symbol('featureInfoView');
|
|
194
217
|
|
195
218
|
/**
|
196
219
|
* @class FeatureInfo
|
197
|
-
* @description Provides registration of featureInfoClasses and stores featureInfoView instances
|
220
|
+
* @description Provides registration of featureInfoClasses and stores featureInfoView instances.
|
221
|
+
* @extends {Collection<AbstractFeatureInfoView>}
|
222
|
+
* @implements {import("@vcmap/core").OverrideCollectionInterface<AbstractFeatureInfoView>}
|
198
223
|
*/
|
199
|
-
class FeatureInfo {
|
224
|
+
class FeatureInfo extends Collection {
|
200
225
|
/**
|
201
226
|
* @param {VcsUiApp} app
|
202
227
|
*/
|
203
228
|
constructor(app) {
|
229
|
+
super();
|
230
|
+
|
204
231
|
/**
|
205
232
|
* @type {VcsUiApp}
|
206
233
|
* @private
|
207
234
|
*/
|
208
235
|
this._app = app;
|
209
|
-
/**
|
210
|
-
* @type {import("@vcmap/core").OverrideCollection<AbstractFeatureInfoView>}
|
211
|
-
* @private
|
212
|
-
*/
|
213
|
-
this._collection = makeOverrideCollection(
|
214
|
-
new Collection(),
|
215
|
-
() => this._app.dynamicModuleId,
|
216
|
-
null,
|
217
|
-
(config) =>
|
218
|
-
getObjectFromClassRegistry(this._featureInfoClassRegistry, config),
|
219
|
-
AbstractFeatureInfoView,
|
220
|
-
);
|
221
|
-
/**
|
222
|
-
* @type {OverrideClassRegistry<AbstractFeatureInfoView>}
|
223
|
-
* @private
|
224
|
-
*/
|
225
|
-
this._featureInfoClassRegistry = new OverrideClassRegistry(
|
226
|
-
featureInfoClassRegistry,
|
227
|
-
);
|
228
236
|
/**
|
229
237
|
* @type {function():void|null}
|
230
238
|
* @private
|
@@ -301,22 +309,6 @@ class FeatureInfo {
|
|
301
309
|
this._destroyFeatureInfoTool = setupFeatureInfoTool(this._app);
|
302
310
|
}
|
303
311
|
|
304
|
-
/**
|
305
|
-
* @type {import("@vcmap/core").OverrideCollection<AbstractFeatureInfoView>}
|
306
|
-
* @readonly
|
307
|
-
*/
|
308
|
-
get collection() {
|
309
|
-
return this._collection;
|
310
|
-
}
|
311
|
-
|
312
|
-
/**
|
313
|
-
* @type {OverrideClassRegistry<AbstractFeatureInfoView>}
|
314
|
-
* @readonly
|
315
|
-
*/
|
316
|
-
get classRegistry() {
|
317
|
-
return this._featureInfoClassRegistry;
|
318
|
-
}
|
319
|
-
|
320
312
|
/**
|
321
313
|
* @type {VcsEvent<null|FeatureType>}
|
322
314
|
* @readonly
|
@@ -379,13 +371,11 @@ class FeatureInfo {
|
|
379
371
|
);
|
380
372
|
return null;
|
381
373
|
}
|
382
|
-
if (!this.
|
374
|
+
if (!this.hasKey(name)) {
|
383
375
|
getLogger().warning(`No view with name '${name}' has been registered.`);
|
384
376
|
return null;
|
385
377
|
}
|
386
|
-
return /** @type {AbstractFeatureInfoView} */ this.
|
387
|
-
name,
|
388
|
-
);
|
378
|
+
return /** @type {AbstractFeatureInfoView} */ this.getByKey(name);
|
389
379
|
}
|
390
380
|
|
391
381
|
/**
|
@@ -502,6 +492,7 @@ class FeatureInfo {
|
|
502
492
|
* Destroys the feature info and all its events & listeners
|
503
493
|
*/
|
504
494
|
destroy() {
|
495
|
+
super.destroy();
|
505
496
|
this._clearInternal();
|
506
497
|
this._featureChanged.destroy();
|
507
498
|
this._destroyFeatureInfoTool();
|
@@ -511,8 +502,6 @@ class FeatureInfo {
|
|
511
502
|
}
|
512
503
|
this._listeners.forEach((cb) => cb());
|
513
504
|
this._listeners.splice(0);
|
514
|
-
this._collection.destroy();
|
515
|
-
this._featureInfoClassRegistry.destroy();
|
516
505
|
}
|
517
506
|
}
|
518
507
|
|
package/src/i18n/de.js
CHANGED
@@ -14,6 +14,7 @@ const messages = {
|
|
14
14
|
},
|
15
15
|
content: {
|
16
16
|
title: 'Inhalte',
|
17
|
+
empty: 'Aktuell sind keine Einträge verfügbar.',
|
17
18
|
search: {
|
18
19
|
placeholder: 'Elemente suchen',
|
19
20
|
},
|
@@ -41,8 +42,10 @@ const messages = {
|
|
41
42
|
homeButton: 'Springe zur Startansicht',
|
42
43
|
},
|
43
44
|
categoryManager: {
|
44
|
-
title: '
|
45
|
-
tooltip: '
|
45
|
+
title: 'Mein Arbeitsbereich',
|
46
|
+
tooltip: 'Mein Arbeitsbereich',
|
47
|
+
},
|
48
|
+
collectionManager: {
|
46
49
|
more: 'Weitere anzeigen...',
|
47
50
|
empty: 'Es gibt noch keine Einträge.',
|
48
51
|
},
|
package/src/i18n/en.js
CHANGED
@@ -14,6 +14,7 @@ const messages = {
|
|
14
14
|
},
|
15
15
|
content: {
|
16
16
|
title: 'Content',
|
17
|
+
empty: 'Currently there are no entries available.',
|
17
18
|
search: {
|
18
19
|
placeholder: 'Search elements',
|
19
20
|
},
|
@@ -41,8 +42,10 @@ const messages = {
|
|
41
42
|
homeButton: 'Go to starting view',
|
42
43
|
},
|
43
44
|
categoryManager: {
|
44
|
-
title: '
|
45
|
-
tooltip: '
|
45
|
+
title: 'My Workspace',
|
46
|
+
tooltip: 'My Workspace',
|
47
|
+
},
|
48
|
+
collectionManager: {
|
46
49
|
more: 'Show more...',
|
47
50
|
empty: 'There are no entries yet.',
|
48
51
|
},
|
@@ -103,8 +103,7 @@ class I18nCollection extends IndexedCollection {
|
|
103
103
|
async parseItems(configArray, moduleId) {
|
104
104
|
if (Array.isArray(configArray)) {
|
105
105
|
configArray.forEach((item) => {
|
106
|
-
item[moduleIdSymbol]
|
107
|
-
this.add(item);
|
106
|
+
this.add({ ...item, [moduleIdSymbol]: moduleId });
|
108
107
|
});
|
109
108
|
}
|
110
109
|
}
|
package/src/init.js
CHANGED
@@ -3,7 +3,6 @@ import { check, checkMaybe, is } from '@vcsuite/check';
|
|
3
3
|
import { VcsModule } from '@vcmap/core';
|
4
4
|
import VcsAppComponentWrapper from './application/vcsAppWrapper.vue';
|
5
5
|
import { vuetify } from './vuePlugins/vuetify.js';
|
6
|
-
import { createVueI18n, setupI18n } from './vuePlugins/i18n.js';
|
7
6
|
import VcsUiApp from './vcsUiApp.js';
|
8
7
|
|
9
8
|
/**
|
@@ -45,10 +44,9 @@ export const VcsUiAppConfigPattern = {
|
|
45
44
|
export default async function initApp(mountTarget) {
|
46
45
|
check(mountTarget, String);
|
47
46
|
const app = new VcsUiApp();
|
48
|
-
const i18n = createVueI18n();
|
49
47
|
new Vue({
|
50
48
|
vuetify,
|
51
|
-
i18n,
|
49
|
+
i18n: app.vueI18n,
|
52
50
|
render: (h) =>
|
53
51
|
h(VcsAppComponentWrapper, {
|
54
52
|
props: {
|
@@ -57,7 +55,6 @@ export default async function initApp(mountTarget) {
|
|
57
55
|
}),
|
58
56
|
}).$mount(mountTarget);
|
59
57
|
|
60
|
-
setupI18n(app, i18n);
|
61
58
|
return app;
|
62
59
|
}
|
63
60
|
|
package/src/legend/vcsLegend.vue
CHANGED
@@ -5,10 +5,20 @@ import { check, checkMaybe } from '@vcsuite/check';
|
|
5
5
|
import { vcsAppSymbol } from '../pluginHelper.js';
|
6
6
|
import { ActionPattern } from '../components/lists/VcsActionList.vue';
|
7
7
|
|
8
|
+
/**
|
9
|
+
* @param {number} weightA
|
10
|
+
* @param {number} weightB
|
11
|
+
* @returns {number}
|
12
|
+
*/
|
13
|
+
export function sortByWeight(weightA, weightB) {
|
14
|
+
return weightB - weightA;
|
15
|
+
}
|
16
|
+
|
8
17
|
/**
|
9
18
|
* @typedef ButtonComponentOptions
|
10
19
|
* @property {string} [id] Optional ID, If not provided an uuid will be generated.
|
11
20
|
* @property {VcsAction} action Action performed by button.
|
21
|
+
* @property {number} [weight=0] Optional weight affecting the displaying order
|
12
22
|
*/
|
13
23
|
|
14
24
|
/**
|
@@ -16,6 +26,7 @@ import { ActionPattern } from '../components/lists/VcsActionList.vue';
|
|
16
26
|
* @property {string} id
|
17
27
|
* @property {string|vcsAppSymbol} owner
|
18
28
|
* @property {VcsAction} action
|
29
|
+
* @property {number} weight
|
19
30
|
*/
|
20
31
|
|
21
32
|
/**
|
@@ -86,6 +97,7 @@ class ButtonManager {
|
|
86
97
|
*/
|
87
98
|
add(buttonComponentOptions, owner) {
|
88
99
|
checkMaybe(buttonComponentOptions.id, String);
|
100
|
+
checkMaybe(buttonComponentOptions.weight, Number);
|
89
101
|
check(buttonComponentOptions.action, ActionPattern);
|
90
102
|
check(owner, [String, vcsAppSymbol]);
|
91
103
|
|
@@ -109,6 +121,9 @@ class ButtonManager {
|
|
109
121
|
get action() {
|
110
122
|
return reactive(buttonComponentOptions.action);
|
111
123
|
},
|
124
|
+
get weight() {
|
125
|
+
return buttonComponentOptions.weight || 0;
|
126
|
+
},
|
112
127
|
};
|
113
128
|
|
114
129
|
this._buttonComponents.set(id, buttonComponent);
|
@@ -1,47 +1,42 @@
|
|
1
1
|
<template>
|
2
|
-
<v-expansion-panel
|
3
|
-
<v-expansion-panel-header hide-actions>
|
2
|
+
<v-expansion-panel @change="active = !active">
|
3
|
+
<v-expansion-panel-header hide-actions class="px-2">
|
4
4
|
<template #default="{ open }">
|
5
5
|
<div class="d-flex justify-space-between">
|
6
6
|
<div class="d-flex align-center">
|
7
7
|
<v-icon class="mr-1" :class="{ rotate: !open }">
|
8
8
|
mdi-chevron-down
|
9
9
|
</v-icon>
|
10
|
-
{{ $t(
|
10
|
+
{{ $t(title) }}
|
11
11
|
</div>
|
12
|
-
<VcsActionButtonList
|
13
|
-
v-if="category.actions?.length > 0"
|
14
|
-
:actions="category.actions"
|
15
|
-
small
|
16
|
-
class="float-end"
|
17
|
-
/>
|
12
|
+
<VcsActionButtonList v-if="actions?.length > 0" :actions="actions" />
|
18
13
|
</div>
|
19
14
|
</template>
|
20
15
|
</v-expansion-panel-header>
|
21
16
|
<v-expansion-panel-content class="pb-1">
|
22
17
|
<vcs-list
|
23
|
-
:items="
|
24
|
-
:draggable="
|
25
|
-
:selectable="
|
26
|
-
:single-select="
|
18
|
+
:items="items.slice(0, 10)"
|
19
|
+
:draggable="draggable"
|
20
|
+
:selectable="selectable"
|
21
|
+
:single-select="singleSelect"
|
27
22
|
v-model="selection"
|
28
23
|
:show-title="false"
|
29
|
-
@
|
24
|
+
@item-moved="move"
|
30
25
|
/>
|
31
|
-
<v-sheet v-if="
|
32
|
-
<VcsButton @click="
|
33
|
-
{{ $t('
|
26
|
+
<v-sheet v-if="items.length > 10" class="ma-2 pl-2">
|
27
|
+
<VcsButton @click="openCollectionComponentList">
|
28
|
+
{{ $t('collectionManager.more') }}
|
34
29
|
</VcsButton>
|
35
30
|
</v-sheet>
|
36
|
-
<v-sheet v-else-if="
|
37
|
-
{{ $t('
|
31
|
+
<v-sheet v-else-if="items.length === 0" class="ma-2 pl-2">
|
32
|
+
{{ $t('collectionManager.empty') }}
|
38
33
|
</v-sheet>
|
39
34
|
</v-expansion-panel-content>
|
40
35
|
</v-expansion-panel>
|
41
36
|
</template>
|
42
37
|
|
43
38
|
<script>
|
44
|
-
import {
|
39
|
+
import { inject, ref } from 'vue';
|
45
40
|
import {
|
46
41
|
VIcon,
|
47
42
|
VExpansionPanel,
|
@@ -54,11 +49,15 @@
|
|
54
49
|
import VcsActionButtonList from '../../components/buttons/VcsActionButtonList.vue';
|
55
50
|
import VcsButton from '../../components/buttons/VcsButton.vue';
|
56
51
|
import { vcsAppSymbol } from '../../pluginHelper.js';
|
57
|
-
import CategoryComponentList from './CategoryComponentList.vue';
|
58
52
|
import { WindowSlot } from '../window/windowManager.js';
|
53
|
+
import CollectionComponentList from './CollectionComponentList.vue';
|
59
54
|
|
55
|
+
/**
|
56
|
+
* Renders the first ten items of a collectionComponent in a List. Uses CollectionComponentList to render more items.
|
57
|
+
* The collectionComponent must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
58
|
+
*/
|
60
59
|
export default {
|
61
|
-
name: '
|
60
|
+
name: 'CollectionComponent',
|
62
61
|
components: {
|
63
62
|
VcsActionButtonList,
|
64
63
|
VcsButton,
|
@@ -69,45 +68,37 @@
|
|
69
68
|
VSheet,
|
70
69
|
VIcon,
|
71
70
|
},
|
72
|
-
|
73
|
-
category: {
|
74
|
-
type: Object,
|
75
|
-
required: true,
|
76
|
-
},
|
77
|
-
},
|
78
|
-
setup(props) {
|
71
|
+
setup() {
|
79
72
|
/** @type {VcsUiApp} */
|
80
73
|
const app = inject('vcsApp');
|
81
|
-
const windowId = `${props.category.id}-category-list`;
|
82
|
-
const active = ref(false);
|
83
|
-
|
84
|
-
const selection = computed({
|
85
|
-
get() {
|
86
|
-
return props.category.selection;
|
87
|
-
},
|
88
|
-
set(value) {
|
89
|
-
// eslint-disable-next-line vue/no-mutating-props
|
90
|
-
props.category.selection = value;
|
91
|
-
},
|
92
|
-
});
|
93
|
-
|
94
|
-
const { collection } = app.categories.getByKey(
|
95
|
-
props.category.categoryName,
|
96
|
-
);
|
97
74
|
/**
|
98
|
-
*
|
99
|
-
* @type {ComputedRef<number>}
|
75
|
+
* @type {CollectionComponent}
|
100
76
|
*/
|
101
|
-
const
|
102
|
-
|
103
|
-
|
104
|
-
);
|
105
|
-
});
|
77
|
+
const collectionComponent = inject('collectionComponent');
|
78
|
+
const windowId = `${collectionComponent.id}-list`;
|
79
|
+
const active = ref(false);
|
106
80
|
|
107
81
|
return {
|
108
|
-
|
82
|
+
title: collectionComponent.title,
|
83
|
+
items: collectionComponent.items,
|
84
|
+
selection: collectionComponent.selection,
|
85
|
+
draggable: collectionComponent.draggable,
|
86
|
+
selectable: collectionComponent.selectable,
|
87
|
+
singleSelect: collectionComponent.singleSelect,
|
88
|
+
actions: collectionComponent.getActions(),
|
89
|
+
move({ item, targetIndex }) {
|
90
|
+
if (collectionComponent.collection instanceof IndexedCollection) {
|
91
|
+
const collectionItem = collectionComponent.collection.getByKey(
|
92
|
+
item.name,
|
93
|
+
);
|
94
|
+
collectionComponent.collection.moveTo(
|
95
|
+
collectionItem,
|
96
|
+
targetIndex, // collectionItemOffset.value for paginated lists?
|
97
|
+
);
|
98
|
+
}
|
99
|
+
},
|
109
100
|
active,
|
110
|
-
|
101
|
+
openCollectionComponentList() {
|
111
102
|
if (app.windowManager.has(windowId)) {
|
112
103
|
setTimeout(() => {
|
113
104
|
app.windowManager.bringWindowToTop(windowId);
|
@@ -116,13 +107,12 @@
|
|
116
107
|
app.windowManager.add(
|
117
108
|
{
|
118
109
|
id: windowId,
|
119
|
-
component:
|
110
|
+
component: CollectionComponentList,
|
120
111
|
props: {
|
121
|
-
category: props.category,
|
122
112
|
windowId,
|
123
113
|
},
|
124
114
|
provides: {
|
125
|
-
|
115
|
+
collectionComponent,
|
126
116
|
},
|
127
117
|
slot: WindowSlot.DYNAMIC_LEFT,
|
128
118
|
},
|
@@ -130,15 +120,6 @@
|
|
130
120
|
);
|
131
121
|
}
|
132
122
|
},
|
133
|
-
move({ item, targetIndex }) {
|
134
|
-
if (collection instanceof IndexedCollection) {
|
135
|
-
const collectionItem = collection.getByKey(item.id);
|
136
|
-
collection.moveTo(
|
137
|
-
collectionItem,
|
138
|
-
targetIndex + collectionItemOffset.value,
|
139
|
-
);
|
140
|
-
}
|
141
|
-
},
|
142
123
|
};
|
143
124
|
},
|
144
125
|
};
|
@@ -148,4 +129,14 @@
|
|
148
129
|
.rotate {
|
149
130
|
transform: rotate(-90deg);
|
150
131
|
}
|
132
|
+
.v-icon {
|
133
|
+
font-size: 16px;
|
134
|
+
}
|
135
|
+
::v-deep {
|
136
|
+
.v-list {
|
137
|
+
.v-list-item {
|
138
|
+
padding: 4px 8px 4px 28px;
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
151
142
|
</style>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<template>
|
2
|
+
<vcs-list
|
3
|
+
:items="items"
|
4
|
+
:draggable="draggable"
|
5
|
+
:selectable="selectable"
|
6
|
+
:single-select="singleSelect"
|
7
|
+
v-model="selection"
|
8
|
+
:title="title"
|
9
|
+
@item-moved="move"
|
10
|
+
/>
|
11
|
+
</template>
|
12
|
+
|
13
|
+
<script>
|
14
|
+
import { inject } from 'vue';
|
15
|
+
import { IndexedCollection } from '@vcmap/core';
|
16
|
+
import VcsList from '../../components/lists/VcsList.vue';
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Renders the items of a CollectionComponent in a List.
|
20
|
+
* The collectionComponent must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
21
|
+
*/
|
22
|
+
export default {
|
23
|
+
name: 'CollectionComponentList',
|
24
|
+
components: {
|
25
|
+
VcsList,
|
26
|
+
},
|
27
|
+
props: {
|
28
|
+
windowId: {
|
29
|
+
type: String,
|
30
|
+
required: true,
|
31
|
+
},
|
32
|
+
},
|
33
|
+
setup() {
|
34
|
+
/**
|
35
|
+
* @type {CollectionComponent}
|
36
|
+
*/
|
37
|
+
const collectionComponent = inject('collectionComponent');
|
38
|
+
|
39
|
+
return {
|
40
|
+
title: collectionComponent.title,
|
41
|
+
items: collectionComponent.items,
|
42
|
+
selection: collectionComponent.selection,
|
43
|
+
draggable: collectionComponent.draggable,
|
44
|
+
selectable: collectionComponent.selectable,
|
45
|
+
singleSelect: collectionComponent.singleSelect,
|
46
|
+
move({ item, targetIndex }) {
|
47
|
+
if (collectionComponent.collection instanceof IndexedCollection) {
|
48
|
+
const collectionItem = collectionComponent.collection.getByKey(
|
49
|
+
item.id,
|
50
|
+
);
|
51
|
+
collectionComponent.collection.moveTo(
|
52
|
+
collectionItem,
|
53
|
+
targetIndex, // collectionItemOffset.value for paginated lists?
|
54
|
+
);
|
55
|
+
}
|
56
|
+
},
|
57
|
+
};
|
58
|
+
},
|
59
|
+
};
|
60
|
+
</script>
|
61
|
+
|
62
|
+
<style lang="scss" scoped></style>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="w-full">
|
3
|
+
<slot>
|
4
|
+
<collection-component />
|
5
|
+
</slot>
|
6
|
+
</div>
|
7
|
+
</template>
|
8
|
+
|
9
|
+
<script>
|
10
|
+
import { inject, provide } from 'vue';
|
11
|
+
import CollectionComponent from './CollectionComponent.vue';
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Provides a CollectionComponent of a CollectionManager.
|
15
|
+
* The collectionManager must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
16
|
+
* @vue-data {slot} [#default] - Slot rendering collection component.
|
17
|
+
*/
|
18
|
+
export default {
|
19
|
+
name: 'CollectionManagerProvider',
|
20
|
+
components: {
|
21
|
+
CollectionComponent,
|
22
|
+
},
|
23
|
+
props: {
|
24
|
+
componentId: {
|
25
|
+
type: String,
|
26
|
+
required: true,
|
27
|
+
},
|
28
|
+
},
|
29
|
+
setup(props) {
|
30
|
+
/**
|
31
|
+
* @type {CollectionManager}
|
32
|
+
*/
|
33
|
+
const collectionManager = inject('collectionManager');
|
34
|
+
const collectionComponent = collectionManager.get(props.componentId);
|
35
|
+
provide('collectionComponent', collectionComponent);
|
36
|
+
},
|
37
|
+
};
|
38
|
+
</script>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<template>
|
2
|
+
<v-container class="pa-0">
|
3
|
+
<v-expansion-panels
|
4
|
+
accordion
|
5
|
+
multiple
|
6
|
+
v-if="componentIds.length > 0"
|
7
|
+
class="rounded-0"
|
8
|
+
>
|
9
|
+
<collection-component-provider
|
10
|
+
v-for="componentId in componentIds"
|
11
|
+
:component-id="componentId"
|
12
|
+
:key="componentId"
|
13
|
+
/>
|
14
|
+
</v-expansion-panels>
|
15
|
+
</v-container>
|
16
|
+
</template>
|
17
|
+
|
18
|
+
<script>
|
19
|
+
import { inject, ref } from 'vue';
|
20
|
+
import { VExpansionPanels, VContainer } from 'vuetify/lib';
|
21
|
+
import CollectionComponentProvider from './CollectionComponentProvider.vue';
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Renders the all managed CollectionComponents of a CollectionManager.
|
25
|
+
* The collectionManager must be passed via {@link https://vuejs.org/api/composition-api-dependency-injection.html |provide }.
|
26
|
+
*/
|
27
|
+
export default {
|
28
|
+
name: 'CollectionManager',
|
29
|
+
components: {
|
30
|
+
VExpansionPanels,
|
31
|
+
VContainer,
|
32
|
+
CollectionComponentProvider,
|
33
|
+
},
|
34
|
+
setup() {
|
35
|
+
const collectionManager = inject('collectionManager');
|
36
|
+
const componentIds = ref(collectionManager.componentIds);
|
37
|
+
|
38
|
+
return {
|
39
|
+
componentIds,
|
40
|
+
};
|
41
|
+
},
|
42
|
+
};
|
43
|
+
</script>
|