@vcmap/ui 5.0.0-rc.29 → 5.0.0-rc.31
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/buildHelpers.js +4 -3
- package/config/base.config.json +5 -4
- package/config/dev.config.json +8 -0
- package/config/graphFeatureInfo.config.json +1 -1
- package/config/projects.config.json +2 -2
- package/dist/assets/cesium/ThirdParty/Workers/basis_transcoder.js +1 -1
- package/dist/assets/cesium/Workers/chunk-227AJNOA.js +59 -0
- package/dist/assets/cesium/Workers/chunk-2R5O53JW.js +157 -0
- package/dist/assets/cesium/Workers/chunk-34YUDLRP.js +781 -0
- package/dist/assets/cesium/Workers/chunk-3W63OHNJ.js +100 -0
- package/dist/assets/cesium/Workers/chunk-4MFFIWUA.js +163 -0
- package/dist/assets/cesium/Workers/chunk-66QLLS45.js +218 -0
- package/dist/assets/cesium/Workers/chunk-6BTKZDRG.js +77 -0
- package/dist/assets/cesium/Workers/chunk-A4JVFBQ3.js +101 -0
- package/dist/assets/cesium/Workers/chunk-ABADGKYE.js +58 -0
- package/dist/assets/cesium/Workers/chunk-AFFLIKOH.js +353 -0
- package/dist/assets/cesium/Workers/chunk-AHKEZ2OE.js +629 -0
- package/dist/assets/cesium/Workers/chunk-C3SXRKRW.js +476 -0
- package/dist/assets/cesium/Workers/chunk-CCFQRR6D.js +55 -0
- package/dist/assets/cesium/Workers/chunk-CHHNOC2C.js +1860 -0
- package/dist/assets/cesium/Workers/chunk-CTELOFLA.js +196 -0
- package/dist/assets/cesium/Workers/chunk-DUHWWBQQ.js +3273 -0
- package/dist/assets/cesium/Workers/chunk-EW2GWJYB.js +44 -0
- package/dist/assets/cesium/Workers/chunk-GLZBE3ML.js +421 -0
- package/dist/assets/cesium/Workers/chunk-HARLBUOL.js +236 -0
- package/dist/assets/cesium/Workers/chunk-HQF437NJ.js +117 -0
- package/dist/assets/cesium/Workers/chunk-IPA4EACJ.js +368 -0
- package/dist/assets/cesium/Workers/chunk-J3JY6I2C.js +1009 -0
- package/dist/assets/cesium/Workers/chunk-JB2LWGH4.js +390 -0
- package/dist/assets/cesium/Workers/chunk-JS3AW5BK.js +634 -0
- package/dist/assets/cesium/Workers/chunk-K36FEYS7.js +452 -0
- package/dist/assets/cesium/Workers/chunk-KD4Y7CZL.js +400 -0
- package/dist/assets/cesium/Workers/chunk-KTJSNCK4.js +842 -0
- package/dist/assets/cesium/Workers/chunk-LLUNNUJV.js +258 -0
- package/dist/assets/cesium/Workers/{package.js → chunk-MPAZH4BF.js} +13 -2
- package/dist/assets/cesium/Workers/chunk-MYZB7C4T.js +1258 -0
- package/dist/assets/cesium/Workers/chunk-N3JIFFX2.js +501 -0
- package/dist/assets/cesium/Workers/chunk-O5AMBQ36.js +430 -0
- package/dist/assets/cesium/Workers/chunk-OAVNIRB4.js +124 -0
- package/dist/assets/cesium/Workers/chunk-OYFCF4PL.js +171 -0
- package/dist/assets/cesium/Workers/chunk-OZJDGN5F.js +1477 -0
- package/dist/assets/cesium/Workers/chunk-PCJWUS4M.js +2041 -0
- package/dist/assets/cesium/Workers/chunk-PFQBCKBM.js +8644 -0
- package/dist/assets/cesium/Workers/chunk-QIKODV5G.js +305 -0
- package/dist/assets/cesium/Workers/chunk-QJ3DFBH3.js +73 -0
- package/dist/assets/cesium/Workers/chunk-QMEMZIJI.js +138 -0
- package/dist/assets/cesium/Workers/chunk-QT3MPEMI.js +102 -0
- package/dist/assets/cesium/Workers/chunk-RP2A7BR5.js +289 -0
- package/dist/assets/cesium/Workers/chunk-RW6LU2CJ.js +138 -0
- package/dist/assets/cesium/Workers/chunk-TFC6TZ3S.js +757 -0
- package/dist/assets/cesium/Workers/chunk-V3NGATMV.js +693 -0
- package/dist/assets/cesium/Workers/chunk-VLGOATD6.js +1075 -0
- package/dist/assets/cesium/Workers/chunk-WXTV4ATB.js +39 -0
- package/dist/assets/cesium/Workers/chunk-X4SU25DT.js +302 -0
- package/dist/assets/cesium/Workers/chunk-XTY7B2N6.js +2716 -0
- package/dist/assets/cesium/Workers/chunk-XY7MGBKC.js +513 -0
- package/dist/assets/cesium/Workers/chunk-Z24VKNDO.js +834 -0
- package/dist/assets/cesium/Workers/chunk-ZA25DG4Y.js +684 -0
- package/dist/assets/cesium/Workers/chunk-ZFOBYDGF.js +73 -0
- package/dist/assets/cesium/Workers/combineGeometry.js +65 -15
- package/dist/assets/cesium/Workers/createBoxGeometry.js +55 -10
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +231 -310
- package/dist/assets/cesium/Workers/createCircleGeometry.js +185 -202
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +141 -155
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +477 -557
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +1162 -1307
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +533 -569
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +57 -10
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +224 -258
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +68 -12
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +61 -12
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +56 -10
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +58 -13
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +55 -10
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +226 -243
- package/dist/assets/cesium/Workers/createGeometry.js +143 -48
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +1484 -2011
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +216 -243
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +121 -113
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +1041 -1327
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +516 -657
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +471 -547
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +352 -384
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +271 -295
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +1128 -1331
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +445 -500
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +381 -440
- package/dist/assets/cesium/Workers/createSphereGeometry.js +112 -118
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +112 -121
- package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +32 -127
- package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +462 -505
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +377 -436
- package/dist/assets/cesium/Workers/createVectorTilePoints.js +110 -77
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +369 -391
- package/dist/assets/cesium/Workers/createVectorTilePolylines.js +252 -244
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +2244 -2677
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -926
- package/dist/assets/cesium/Workers/createWallGeometry.js +459 -593
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +324 -419
- package/dist/assets/cesium/Workers/decodeDraco.js +327 -347
- package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
- package/dist/assets/cesium/Workers/decodeI3S.js +765 -970
- package/dist/assets/cesium/Workers/transcodeKTX2.js +3353 -1464
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +3 -4
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +748 -953
- package/dist/assets/{cesium.16590b.js → cesium.77d0f7.js} +8915 -13165
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.74da2a.js → core.720589.js} +3421 -3365
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-dd539204.js +1 -0
- package/dist/assets/{ol.50a512.js → ol.e48649.js} +4 -4
- package/dist/assets/ol.js +1 -1
- package/dist/assets/{ui.d3054c.css → ui.50452a.css} +2 -2
- package/dist/assets/{ui.d3054c.js → ui.50452a.js} +5312 -4776
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.946bd8.js → vuetify.f0a769.js} +1 -1
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +27 -23
- package/index.html +23 -22
- package/index.js +6 -0
- package/package.json +5 -5
- package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +37 -1
- package/plugins/@vcmap-show-case/form-inputs-example/index.js +3 -0
- package/plugins/@vcmap-show-case/form-inputs-example/validation.js +11 -0
- package/plugins/@vcmap-show-case/plugin-editors/PluginEditors.vue +119 -0
- package/plugins/@vcmap-show-case/plugin-editors/index.js +41 -0
- package/plugins/@vcmap-show-case/plugin-editors/package.json +5 -0
- package/plugins/{@vcmap → @vcmap-show-case}/project-selector/ProjectSelectorComponent.vue +1 -1
- package/plugins/{@vcmap → @vcmap-show-case}/project-selector/config.json +2 -2
- package/plugins/{@vcmap → @vcmap-show-case}/project-selector/package.json +1 -1
- package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/package.json +1 -1
- package/plugins/@vcmap-show-case/style-input-example/styleExample.vue +0 -1
- package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +1 -1
- package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/ThemeChangerComponent.vue +1 -1
- package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/config.json +2 -2
- package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/package.json +1 -1
- package/plugins/@vcmap-show-case/vector-properties-example/index.js +40 -0
- package/plugins/@vcmap-show-case/vector-properties-example/package.json +5 -0
- package/plugins/@vcmap-show-case/vector-properties-example/vectorPropertiesExample.vue +128 -0
- package/plugins/package.json +6 -2
- package/src/application/VcsAttributions.vue +27 -20
- package/src/components/form-inputs-controls/VcsChipArrayInput.vue +290 -0
- package/src/components/form-inputs-controls/VcsSlider.vue +1 -0
- package/src/components/form-inputs-controls/VcsTextField.vue +9 -3
- package/src/components/icons/2DAreaIcon.vue +2 -17
- package/src/components/icons/2DDistanceIcon.vue +0 -3
- package/src/components/icons/3DAreaIcon.vue +2 -17
- package/src/components/icons/3DDistanceIcon.vue +0 -3
- package/src/components/icons/3DHeightIcon.vue +0 -3
- package/src/components/icons/AngleIcon.vue +0 -1
- package/src/components/icons/AssociationsIcon.vue +1 -3
- package/src/components/icons/AxisIcon.vue +0 -4
- package/src/components/icons/BoundingBoxIcon.vue +1 -4
- package/src/components/icons/CheckboxIcon.vue +0 -2
- package/src/components/icons/CheckboxIndeterminateIcon.vue +1 -5
- package/src/components/icons/CircleIcon.vue +1 -6
- package/src/components/icons/ClippingHorizontalIcon.vue +0 -1
- package/src/components/icons/ClippingIcon.vue +0 -1
- package/src/components/icons/ClippingVerticalIcon.vue +0 -1
- package/src/components/icons/ColorPickerIcon.vue +0 -1
- package/src/components/icons/ColorSwatchIcon.vue +0 -2
- package/src/components/icons/CommentIcon.vue +0 -1
- package/src/components/icons/CompassIcon.vue +0 -2
- package/src/components/icons/ComponentsIcon.vue +0 -1
- package/src/components/icons/ConeIcon.vue +1 -4
- package/src/components/icons/DimensionsHouseIcon.vue +0 -2
- package/src/components/icons/EditIcon.vue +0 -1
- package/src/components/icons/EditVerticesIcon.vue +0 -4
- package/src/components/icons/ElevationProfileIcon.vue +1 -13
- package/src/components/icons/ExportAreaIcon.vue +0 -1
- package/src/components/icons/ExportFlightIcon.vue +0 -1
- package/src/components/icons/ExportIcon.vue +12 -8
- package/src/components/icons/ExternalLinkIcon.vue +0 -2
- package/src/components/icons/FastForwardIcon.vue +0 -1
- package/src/components/icons/FilterIcon.vue +0 -1
- package/src/components/icons/GlobeNatureIcon.vue +0 -3
- package/src/components/icons/GroundIcon.vue +0 -1
- package/src/components/icons/HealthCareIndustriesIcon.vue +1 -11
- package/src/components/icons/HideIcon.vue +0 -1
- package/src/components/icons/HomePointIcon.vue +0 -1
- package/src/components/icons/HospitalsIcon.vue +1 -20
- package/src/components/icons/HouseIcon.vue +3 -13
- package/src/components/icons/ImportIcon.vue +6 -14
- package/src/components/icons/InfoIcon.vue +0 -2
- package/src/components/icons/KebabIcon.vue +1 -9
- package/src/components/icons/LabelIcon.vue +0 -2
- package/src/components/icons/LayersIcon.vue +1 -9
- package/src/components/icons/LegendIcon.vue +0 -1
- package/src/components/icons/LineIcon.vue +0 -2
- package/src/components/icons/LinkIcon.vue +0 -1
- package/src/components/icons/LogoutIcon.vue +0 -1
- package/src/components/icons/MapIcon.vue +0 -2
- package/src/components/icons/MenuIcon.vue +1 -5
- package/src/components/icons/MinusIcon.vue +0 -2
- package/src/components/icons/ObjectSelectIcon.vue +0 -2
- package/src/components/icons/ObliqueViewIcon.vue +0 -1
- package/src/components/icons/PdfIcon.vue +0 -1
- package/src/components/icons/PedestrianIcon.vue +0 -1
- package/src/components/icons/PenIcon.vue +0 -1
- package/src/components/icons/PlayCircleIcon.vue +1 -8
- package/src/components/icons/PlusIcon.vue +0 -2
- package/src/components/icons/PoiIcon.vue +0 -1
- package/src/components/icons/PointIcon.vue +2 -6
- package/src/components/icons/PointSelectIcon.vue +0 -1
- package/src/components/icons/PresentationModeIcon.vue +0 -1
- package/src/components/icons/ProgressIcon.vue +1 -1
- package/src/components/icons/QueryIcon.vue +0 -1
- package/src/components/icons/RectangleIcon.vue +1 -6
- package/src/components/icons/ReturnIcon.vue +0 -1
- package/src/components/icons/RewindIcon.vue +0 -1
- package/src/components/icons/RotateLeftIcon.vue +0 -1
- package/src/components/icons/RotateRightIcon.vue +0 -1
- package/src/components/icons/ScreenshotIcon.vue +1 -6
- package/src/components/icons/SearchIcon.vue +0 -1
- package/src/components/icons/ShadowIcon.vue +0 -2
- package/src/components/icons/ShapesIcon.vue +1 -4
- package/src/components/icons/ShareIcon.vue +0 -1
- package/src/components/icons/SimpleCircleFilledIcon.vue +0 -1
- package/src/components/icons/SimpleCircleHalfFilledIcon.vue +0 -1
- package/src/components/icons/SimpleCircleOutlinedIcon.vue +1 -7
- package/src/components/icons/SkipPreviousIcon.vue +1 -6
- package/src/components/icons/SplitViewIcon.vue +0 -1
- package/src/components/icons/TextStyleIcon.vue +0 -3
- package/src/components/icons/ThreeDimensionsIcon.vue +0 -1
- package/src/components/icons/ToolsIcon.vue +0 -1
- package/src/components/icons/TouchIcon.vue +0 -1
- package/src/components/icons/TriangleIcon.vue +0 -3
- package/src/components/icons/TwoDimensionsIcon.vue +0 -2
- package/src/components/icons/UploadIcon.vue +0 -1
- package/src/components/icons/UserProfileIcon.vue +0 -1
- package/src/components/icons/UserShareIcon.vue +0 -1
- package/src/components/icons/ViewpointFlightIcon.vue +0 -1
- package/src/components/icons/ViewpointIcon.vue +0 -1
- package/src/components/icons/Viewshed360Icon.vue +0 -1
- package/src/components/icons/ViewshedConeIcon.vue +0 -1
- package/src/components/icons/ViewshedIcon.vue +0 -1
- package/src/components/icons/WalkingIcon.vue +0 -1
- package/src/components/icons/WallIcon.vue +1 -4
- package/src/components/icons/WandIcon.vue +22 -70
- package/src/components/lists/VcsList.vue +18 -12
- package/src/components/plugins/AbstractConfigEditor.vue +84 -0
- package/src/components/style/VcsImageSelector.vue +6 -5
- package/src/components/style/VcsTextSelector.vue +1 -1
- package/src/components/tables/VcsDataTable.vue +1 -1
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +780 -0
- package/src/components/vector-properties/composables.js +93 -0
- package/src/contentTree/contentTreeCollection.js +30 -9
- package/src/i18n/de.js +41 -7
- package/src/i18n/en.js +39 -5
- package/src/i18n/i18nCollection.js +19 -65
- package/src/manager/buttonManager.js +4 -0
- package/src/manager/collectionManager/collectionComponent.js +1 -1
- package/src/manager/contextMenu/contextMenuManager.js +2 -0
- package/src/pluginHelper.js +57 -17
- package/src/vcsUiApp.js +25 -30
- package/src/vuePlugins/i18n.js +0 -8
- package/dist/assets/cesium/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
- package/dist/assets/cesium/Workers/ArcType-2d9abbbc.js +0 -37
- package/dist/assets/cesium/Workers/AttributeCompression-f9f6c717.js +0 -716
- package/dist/assets/cesium/Workers/AxisAlignedBoundingBox-4140c51f.js +0 -258
- package/dist/assets/cesium/Workers/BoundingRectangle-c714b156.js +0 -369
- package/dist/assets/cesium/Workers/BoxGeometry-6f3da43d.js +0 -884
- package/dist/assets/cesium/Workers/Check-6ede7e26.js +0 -290
- package/dist/assets/cesium/Workers/Color-8a565ff2.js +0 -2262
- package/dist/assets/cesium/Workers/ComponentDatatype-cf1fa08e.js +0 -341
- package/dist/assets/cesium/Workers/CoplanarPolygonGeometryLibrary-4b4d4096.js +0 -132
- package/dist/assets/cesium/Workers/CorridorGeometryLibrary-7b94502b.js +0 -498
- package/dist/assets/cesium/Workers/CylinderGeometry-ca070b87.js +0 -467
- package/dist/assets/cesium/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
- package/dist/assets/cesium/Workers/EllipseGeometry-122e51fa.js +0 -1304
- package/dist/assets/cesium/Workers/EllipseGeometryLibrary-4d326efc.js +0 -366
- package/dist/assets/cesium/Workers/EllipseOutlineGeometry-16cc2bd7.js +0 -443
- package/dist/assets/cesium/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
- package/dist/assets/cesium/Workers/EllipsoidGeometry-cb148ca2.js +0 -637
- package/dist/assets/cesium/Workers/EllipsoidOutlineGeometry-0fa10c79.js +0 -454
- package/dist/assets/cesium/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
- package/dist/assets/cesium/Workers/EllipsoidTangentPlane-6dd1b7af.js +0 -373
- package/dist/assets/cesium/Workers/EncodedCartesian3-57415c8a.js +0 -171
- package/dist/assets/cesium/Workers/FrustumGeometry-ee73037c.js +0 -2540
- package/dist/assets/cesium/Workers/GeometryAttribute-ff5b4fb1.js +0 -619
- package/dist/assets/cesium/Workers/GeometryAttributes-ad136444.js +0 -91
- package/dist/assets/cesium/Workers/GeometryInstance-34d9e21e.js +0 -121
- package/dist/assets/cesium/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
- package/dist/assets/cesium/Workers/GeometryPipeline-1f8fbf05.js +0 -3690
- package/dist/assets/cesium/Workers/IndexDatatype-2643aa47.js +0 -200
- package/dist/assets/cesium/Workers/IntersectionTests-70d39ba9.js +0 -1836
- package/dist/assets/cesium/Workers/Math-0a2ac845.js +0 -1340
- package/dist/assets/cesium/Workers/Matrix2-e1298525.js +0 -7086
- package/dist/assets/cesium/Workers/Matrix3-41c58dde.js +0 -4283
- package/dist/assets/cesium/Workers/OrientedBoundingBox-159cf1d6.js +0 -1259
- package/dist/assets/cesium/Workers/Plane-4c3d403b.js +0 -309
- package/dist/assets/cesium/Workers/PolygonGeometryLibrary-076a5d25.js +0 -1074
- package/dist/assets/cesium/Workers/PolygonPipeline-b9f2810a.js +0 -1344
- package/dist/assets/cesium/Workers/PolylinePipeline-639192e0.js +0 -573
- package/dist/assets/cesium/Workers/PolylineVolumeGeometryLibrary-b73549fb.js +0 -781
- package/dist/assets/cesium/Workers/PrimitivePipeline-10ede1b6.js +0 -966
- package/dist/assets/cesium/Workers/RectangleGeometryLibrary-c35a7356.js +0 -280
- package/dist/assets/cesium/Workers/RuntimeError-ef395448.js +0 -68
- package/dist/assets/cesium/Workers/TerrainEncoding-668d242f.js +0 -1227
- package/dist/assets/cesium/Workers/Transforms-a2a85221.js +0 -14712
- package/dist/assets/cesium/Workers/VertexFormat-030f11ff.js +0 -312
- package/dist/assets/cesium/Workers/WallGeometryLibrary-1938bf0d.js +0 -211
- package/dist/assets/cesium/Workers/WebGLConstants-0b1ce7ba.js +0 -620
- package/dist/assets/cesium/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
- package/dist/assets/cesium/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
- package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +0 -1363
- package/dist/assets/cesium/Workers/combine-d9581036.js +0 -82
- package/dist/assets/cesium/Workers/defaultValue-fe22d8c0.js +0 -51
- package/dist/assets/index-cb070eff.js +0 -1
- package/plugins/@vcmap/create-link/fallbackCreateLink.vue +0 -76
- package/plugins/@vcmap/create-link/index.js +0 -95
- package/plugins/@vcmap/create-link/package.json +0 -6
- package/plugins/@vcmap/search-nominatim/LICENSE.md +0 -13
- package/plugins/@vcmap/search-nominatim/README.md +0 -3
- package/plugins/@vcmap/search-nominatim/config.json +0 -3
- package/plugins/@vcmap/search-nominatim/index.js +0 -29
- package/plugins/@vcmap/search-nominatim/nominatim.js +0 -175
- package/plugins/@vcmap/search-nominatim/package.json +0 -9
- /package/dist/assets/{vue.30740e.js → vue.5d696e.js} +0 -0
- /package/dist/assets/{vuetify.946bd8.css → vuetify.f0a769.css} +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/ModulesListComponent.vue +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/README.md +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/de.json +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/en.json +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/index.js +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/README.md +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/SimpleGraphComponent.vue +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/index.js +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/simpleGraphView.js +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/README.md +0 -0
- /package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/index.js +0 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
import { computed } from 'vue';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Creates a computed property with a getter and a setter for a specific primitive object property/key of the modelled object. This composable allows to pass the computed to an v-model of a sub component. The getter returns the value of the key. The setter merges the passed value with the other object properties of the modelled object and emits the whole object as a input event, and only the changed props as an change event.
|
5
|
+
* @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
|
6
|
+
* @param {string} key The key of the modelObject that should be returned on get and updated on set.
|
7
|
+
* @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
|
8
|
+
* @returns {import('vue').WriteableComputedRef} A computed with a getter and a setter.
|
9
|
+
*/
|
10
|
+
export function usePrimitiveProperty(modelObject, key, emit) {
|
11
|
+
return computed({
|
12
|
+
get() {
|
13
|
+
return modelObject()[key];
|
14
|
+
},
|
15
|
+
set(value) {
|
16
|
+
if (modelObject()[key] !== value) {
|
17
|
+
const newParams = structuredClone(modelObject());
|
18
|
+
const changedParams = { [key]: value || undefined }; // XXX boolean values need to be handled differently
|
19
|
+
emit('input', Object.assign(newParams, changedParams));
|
20
|
+
emit('propertyChange', changedParams);
|
21
|
+
}
|
22
|
+
},
|
23
|
+
});
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Creates an object with the entries of the input array as keys and computed properties as values. These have a getter and a setter for a specific entry of the array, that is an object property/key of the modelled object. This composable allows to pass the computeds to an v-model of a sub component. The getter returns the value of the array entry. The setter first merges the passed value with the other array entries, and then with the other object properties of the modelled object and emits the whole object as a input event, and only the changed props as an change event.
|
28
|
+
* @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
|
29
|
+
* @param {string} key The key of the modelObject that should be returned on get and updated on set.
|
30
|
+
* @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
|
31
|
+
* @param {number} arrayLength The length of the array property.
|
32
|
+
* @returns {Object<string, import('vue').WriteableComputedRef>} An object with the provided names as keys and the corresponding computed properties with a getter and a setter.
|
33
|
+
*/
|
34
|
+
export function useArrayProperty(modelObject, key, emit, arrayLength) {
|
35
|
+
return Array(arrayLength)
|
36
|
+
.fill()
|
37
|
+
.map((entry, index) => {
|
38
|
+
return computed({
|
39
|
+
get() {
|
40
|
+
if (modelObject()?.[key]) {
|
41
|
+
return modelObject()[key][index];
|
42
|
+
} else {
|
43
|
+
return undefined;
|
44
|
+
}
|
45
|
+
},
|
46
|
+
set(value) {
|
47
|
+
const newParams = structuredClone(modelObject());
|
48
|
+
let changedParams;
|
49
|
+
if (!modelObject()?.[key]) {
|
50
|
+
const newArray = Array(arrayLength).fill();
|
51
|
+
newArray[index] = value;
|
52
|
+
changedParams = { [key]: newArray };
|
53
|
+
} else if (modelObject()[key][index] !== value) {
|
54
|
+
const newArray = [...modelObject()[key]];
|
55
|
+
newArray[index] = value;
|
56
|
+
changedParams = { [key]: newArray };
|
57
|
+
}
|
58
|
+
|
59
|
+
if (changedParams) {
|
60
|
+
emit('input', Object.assign(newParams, changedParams));
|
61
|
+
emit('propertyChange', changedParams);
|
62
|
+
}
|
63
|
+
},
|
64
|
+
});
|
65
|
+
});
|
66
|
+
}
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Creates a computed property that returns whether a specific key of the modelled object (value prop) is undefined or not. If set to true, the provided default value is applied to the key of the modelled object.
|
70
|
+
* @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
|
71
|
+
* @param {string} key The key of the modelObject that should be return on get and updated on set.
|
72
|
+
* @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
|
73
|
+
* @param {*} valueDefault The defualt value that is set when `true` is provided to the setter of the computed property.
|
74
|
+
* @returns {import('vue').WriteableComputedRef} A computed ref with a setter and a getter.
|
75
|
+
*/
|
76
|
+
export function useHasProperty(modelObject, key, emit, valueDefault) {
|
77
|
+
return computed({
|
78
|
+
get() {
|
79
|
+
return modelObject()?.[key] !== undefined;
|
80
|
+
},
|
81
|
+
set(value) {
|
82
|
+
const newParams = structuredClone(modelObject());
|
83
|
+
let changedParams;
|
84
|
+
if (value) {
|
85
|
+
changedParams = { [key]: valueDefault };
|
86
|
+
} else {
|
87
|
+
changedParams = { [key]: undefined };
|
88
|
+
}
|
89
|
+
emit('input', Object.assign(newParams, changedParams));
|
90
|
+
emit('propertyChange', changedParams);
|
91
|
+
},
|
92
|
+
});
|
93
|
+
}
|
@@ -17,6 +17,7 @@ import { ButtonLocation } from '../manager/navbarManager.js';
|
|
17
17
|
* @type {symbol}
|
18
18
|
*/
|
19
19
|
const subTreeOpenStateSymbol = Symbol('SubTreeOpenState');
|
20
|
+
const subTreeItemWeight = Symbol('SubTreeItemWeight');
|
20
21
|
|
21
22
|
/**
|
22
23
|
* @typedef {Object} ParentTreeViewItem
|
@@ -39,9 +40,9 @@ class ContentTreeCollection extends IndexedCollection {
|
|
39
40
|
*/
|
40
41
|
this._app = app;
|
41
42
|
|
42
|
-
const recreateTree = () => {
|
43
|
+
const recreateTree = (resetSubTreeButtons) => {
|
43
44
|
if (!this._suspendListeners) {
|
44
|
-
this._setTreeView();
|
45
|
+
this._setTreeView(resetSubTreeButtons);
|
45
46
|
}
|
46
47
|
};
|
47
48
|
|
@@ -76,7 +77,7 @@ class ContentTreeCollection extends IndexedCollection {
|
|
76
77
|
this._subTreeViewItems.value.delete(child.name);
|
77
78
|
}
|
78
79
|
}),
|
79
|
-
this.moved.addEventListener(recreateTree),
|
80
|
+
this.moved.addEventListener(() => recreateTree(true)),
|
80
81
|
];
|
81
82
|
/**
|
82
83
|
* This is the default content tree.
|
@@ -128,9 +129,9 @@ class ContentTreeCollection extends IndexedCollection {
|
|
128
129
|
const { action, destroy } = createToggleAction(
|
129
130
|
// TODO icon & title are not reactive
|
130
131
|
{
|
131
|
-
name: subTreeViewItem.name,
|
132
|
+
name: subTreeViewItem.title ?? subTreeViewItem.name,
|
132
133
|
icon: subTreeViewItem.icon,
|
133
|
-
title: subTreeViewItem.
|
134
|
+
title: subTreeViewItem.tooltip,
|
134
135
|
},
|
135
136
|
{
|
136
137
|
component: LayerTree,
|
@@ -149,7 +150,7 @@ class ContentTreeCollection extends IndexedCollection {
|
|
149
150
|
);
|
150
151
|
|
151
152
|
this._app.navbarManager.add(
|
152
|
-
{ id, action, weight:
|
153
|
+
{ id, action, weight: subTreeViewItem[subTreeItemWeight] },
|
153
154
|
vcsAppSymbol,
|
154
155
|
ButtonLocation.CONTENT,
|
155
156
|
);
|
@@ -162,11 +163,13 @@ class ContentTreeCollection extends IndexedCollection {
|
|
162
163
|
}
|
163
164
|
|
164
165
|
/**
|
166
|
+
* @param {boolean} [resetSubtreeButtons=false]
|
165
167
|
* @private
|
166
168
|
*/
|
167
|
-
_setTreeView() {
|
169
|
+
_setTreeView(resetSubtreeButtons = false) {
|
168
170
|
/** @type {Map<string, ParentTreeViewItem>} */
|
169
171
|
const baseTreeMap = new Map();
|
172
|
+
let maxWeight = 0;
|
170
173
|
[...this._array]
|
171
174
|
.sort((a, b) => {
|
172
175
|
const depthA = a.name.split('.').length;
|
@@ -183,6 +186,10 @@ class ContentTreeCollection extends IndexedCollection {
|
|
183
186
|
const treeViewItem = item.getTreeViewItem();
|
184
187
|
const namespace = treeViewItem.name.split('.');
|
185
188
|
const name = namespace.pop();
|
189
|
+
maxWeight = item.weight > maxWeight ? item.weight : maxWeight;
|
190
|
+
if (namespace.length === 0) {
|
191
|
+
treeViewItem[subTreeItemWeight] = item.weight;
|
192
|
+
}
|
186
193
|
/** @type {ParentTreeViewItem} */
|
187
194
|
let parentItem = { children: baseTreeMap };
|
188
195
|
namespace.forEach((parentName) => {
|
@@ -208,6 +215,7 @@ class ContentTreeCollection extends IndexedCollection {
|
|
208
215
|
const topLevelItems = [...baseTreeMap.values()].map(setChildren);
|
209
216
|
const defaultSubTreeViewItem = this._defaultSubtreeItem.getTreeViewItem();
|
210
217
|
defaultSubTreeViewItem.children.splice(0);
|
218
|
+
defaultSubTreeViewItem[subTreeItemWeight] = maxWeight + 1;
|
211
219
|
defaultSubTreeViewItem.children.push(
|
212
220
|
...topLevelItems.filter((i) => !i[subTreeSymbol]),
|
213
221
|
);
|
@@ -217,11 +225,17 @@ class ContentTreeCollection extends IndexedCollection {
|
|
217
225
|
];
|
218
226
|
|
219
227
|
subTrees.forEach((subTree) => {
|
220
|
-
if (!this._app.navbarManager.has(subTree.name)) {
|
228
|
+
if (!this._app.navbarManager.has(subTree.name) || resetSubtreeButtons) {
|
229
|
+
this._subTreeListeners.get(subTree.name)?.();
|
221
230
|
this._subTreeListeners.set(
|
222
231
|
subTree.name,
|
223
232
|
this._createSubtreeActionButton(subTree),
|
224
233
|
);
|
234
|
+
} else {
|
235
|
+
const buttonComponent = this._app.navbarManager.get(subTree.name);
|
236
|
+
if (buttonComponent.weight !== subTree[subTreeItemWeight]) {
|
237
|
+
buttonComponent.weight = subTree[subTreeItemWeight];
|
238
|
+
}
|
225
239
|
}
|
226
240
|
});
|
227
241
|
}
|
@@ -243,7 +257,14 @@ class ContentTreeCollection extends IndexedCollection {
|
|
243
257
|
* @readonly
|
244
258
|
*/
|
245
259
|
get subTreeIds() {
|
246
|
-
|
260
|
+
const [defaultItem, ...rest] = [...this._subTreeViewItems.value.entries()];
|
261
|
+
rest.sort(([, a], [, b]) => {
|
262
|
+
if (a[subTreeItemWeight] === b[subTreeItemWeight]) {
|
263
|
+
return 0;
|
264
|
+
}
|
265
|
+
return a[subTreeItemWeight] > b[subTreeItemWeight] ? -1 : 1;
|
266
|
+
});
|
267
|
+
return [defaultItem, ...rest].map(([id]) => id);
|
247
268
|
}
|
248
269
|
|
249
270
|
/**
|
package/src/i18n/de.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
const messages = {
|
2
2
|
navbar: {
|
3
3
|
maps: {
|
4
|
-
CesiumMap: '3D
|
5
|
-
OpenlayersMap: '2D
|
6
|
-
ObliqueMap: '
|
4
|
+
CesiumMap: '3D-Karte aktivieren',
|
5
|
+
OpenlayersMap: '2D-Karte aktivieren',
|
6
|
+
ObliqueMap: 'Schrägluftbildkarte aktivieren',
|
7
7
|
},
|
8
8
|
menu: {
|
9
9
|
tooltip: 'Menü',
|
@@ -52,6 +52,8 @@ const messages = {
|
|
52
52
|
components: {
|
53
53
|
pin: 'Fenster andocken',
|
54
54
|
close: 'Fenster schließen',
|
55
|
+
apply: 'Anwenden',
|
56
|
+
cancel: 'Abbrechen',
|
55
57
|
vcsFormSection: {
|
56
58
|
help: 'Hilfe anzeigen',
|
57
59
|
},
|
@@ -69,8 +71,8 @@ const messages = {
|
|
69
71
|
noResultsPlaceholder: 'Keine übereinstimmenden Einträge gefunden',
|
70
72
|
},
|
71
73
|
style: {
|
72
|
-
fill: '
|
73
|
-
stroke: '
|
74
|
+
fill: 'Füllung',
|
75
|
+
stroke: 'Linie',
|
74
76
|
reset: 'Zurücksetzen',
|
75
77
|
lineWidth: 'Linienbreite',
|
76
78
|
type: 'Typ',
|
@@ -81,7 +83,7 @@ const messages = {
|
|
81
83
|
rotation: 'Rotation',
|
82
84
|
scale: 'Skalierung',
|
83
85
|
opacity: 'Deckkraft',
|
84
|
-
image: '
|
86
|
+
image: 'Symbol',
|
85
87
|
icon: 'Icon',
|
86
88
|
presets: 'Vorlagen',
|
87
89
|
shape: 'Form',
|
@@ -97,10 +99,41 @@ const messages = {
|
|
97
99
|
italic: 'Kursiv',
|
98
100
|
text: 'Text',
|
99
101
|
enterText: 'Text hier eingeben',
|
102
|
+
offset: 'Versatz',
|
103
|
+
},
|
104
|
+
vectorProperties: {
|
105
|
+
header: 'Vektor Eigenschaften',
|
106
|
+
altitudeMode: 'Höhenmodus',
|
107
|
+
clampToGround: 'Auf Gelände legen',
|
108
|
+
absolute: 'Absolut',
|
109
|
+
relativeToGround: 'Relativ zum Gelände',
|
110
|
+
groundLevel: 'Geländehöhe',
|
111
|
+
classificationType: 'Klassifizierung',
|
112
|
+
none: 'Keine',
|
113
|
+
both: 'Beide',
|
114
|
+
cesium3DTile: '3D Tiles',
|
115
|
+
terrain: 'Gelände',
|
116
|
+
heightAboveGround: 'Höhe über Gelände',
|
117
|
+
allowPicking: 'Auswahl erlauben',
|
118
|
+
scaleByDistance: 'Distanzskalierung',
|
119
|
+
eyeOffset: 'Blick Versatz',
|
120
|
+
storeys: 'Stockwerke',
|
121
|
+
storeyHeights: 'Stockwerkshöhe(n)',
|
122
|
+
aboveGround: 'Über Grund',
|
123
|
+
belowGround: 'Unter Grund',
|
124
|
+
modelUrl: 'Modell URL',
|
125
|
+
modelHeading: 'Modell Ausrichtung',
|
126
|
+
modelPitch: 'Modell Neigung',
|
127
|
+
modelRoll: 'Modell Rotation',
|
128
|
+
baseUrl: 'Basis URL',
|
129
|
+
extrudedHeight: 'Extrusion',
|
130
|
+
skirt: 'Skirts',
|
131
|
+
modelScale: 'Modell Skalierung',
|
132
|
+
},
|
133
|
+
validation: {
|
100
134
|
allowedRange: 'Erlaubter Wertebereich',
|
101
135
|
notValid: 'Eingabe nicht gültig',
|
102
136
|
required: 'Eingabe ist erforderlich',
|
103
|
-
offset: 'Versatz',
|
104
137
|
},
|
105
138
|
},
|
106
139
|
settings: {
|
@@ -145,6 +178,7 @@ const messages = {
|
|
145
178
|
attributions: {
|
146
179
|
title: 'Attributionen',
|
147
180
|
tooltip: 'Öffne Attributionsfenster',
|
181
|
+
empty: 'Aktuell sind keine Attributionseinträge verfügbar.',
|
148
182
|
},
|
149
183
|
},
|
150
184
|
notification: {
|
package/src/i18n/en.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
const messages = {
|
2
2
|
navbar: {
|
3
3
|
maps: {
|
4
|
-
CesiumMap: 'Enable 3D
|
5
|
-
OpenlayersMap: 'Enable 2D
|
6
|
-
ObliqueMap: 'Enable oblique
|
4
|
+
CesiumMap: 'Enable 3D map',
|
5
|
+
OpenlayersMap: 'Enable 2D map',
|
6
|
+
ObliqueMap: 'Enable oblique imagery map',
|
7
7
|
},
|
8
8
|
menu: {
|
9
9
|
tooltip: 'Menu',
|
@@ -52,6 +52,8 @@ const messages = {
|
|
52
52
|
components: {
|
53
53
|
pin: 'Dock window',
|
54
54
|
close: 'Close window',
|
55
|
+
apply: 'Apply',
|
56
|
+
cancel: 'Cancel',
|
55
57
|
vcsFormSection: {
|
56
58
|
help: 'Show help',
|
57
59
|
},
|
@@ -81,7 +83,7 @@ const messages = {
|
|
81
83
|
rotation: 'Rotation',
|
82
84
|
scale: 'Scale',
|
83
85
|
opacity: 'Opacity',
|
84
|
-
image: '
|
86
|
+
image: 'Symbol',
|
85
87
|
icon: 'Icon',
|
86
88
|
shape: 'Shape',
|
87
89
|
presets: 'Presets',
|
@@ -97,10 +99,41 @@ const messages = {
|
|
97
99
|
italic: 'Italic',
|
98
100
|
text: 'Text',
|
99
101
|
enterText: 'Enter text here',
|
102
|
+
offset: 'Offset',
|
103
|
+
},
|
104
|
+
vectorProperties: {
|
105
|
+
header: 'Vector properties',
|
106
|
+
altitudeMode: 'Altitude mode',
|
107
|
+
clampToGround: 'Clamp to ground',
|
108
|
+
absolute: 'Absolute',
|
109
|
+
relativeToGround: 'Relative to ground',
|
110
|
+
groundLevel: 'Ground level',
|
111
|
+
classificationType: 'Classification',
|
112
|
+
none: 'None',
|
113
|
+
both: 'Both',
|
114
|
+
cesium3DTile: '3D Tiles',
|
115
|
+
terrain: 'Terrain',
|
116
|
+
heightAboveGround: 'Height above ground',
|
117
|
+
allowPicking: 'Allow picking',
|
118
|
+
scaleByDistance: 'Scale by distance',
|
119
|
+
eyeOffset: 'Eye offset',
|
120
|
+
storeys: 'Storeys',
|
121
|
+
storeyHeights: 'Storey height(s)',
|
122
|
+
aboveGround: 'Above ground',
|
123
|
+
belowGround: 'Below ground',
|
124
|
+
modelUrl: 'Model URL',
|
125
|
+
modelHeading: 'Model heading',
|
126
|
+
modelPitch: 'Model pitch',
|
127
|
+
modelRoll: 'Model roll',
|
128
|
+
baseUrl: 'Base URL',
|
129
|
+
extrudedHeight: 'Extrusion',
|
130
|
+
skirt: 'Skirts',
|
131
|
+
modelScale: 'Model scale',
|
132
|
+
},
|
133
|
+
validation: {
|
100
134
|
allowedRange: 'Allowed value range',
|
101
135
|
notValid: 'Input not valid',
|
102
136
|
required: 'Input is required',
|
103
|
-
offset: 'Offset',
|
104
137
|
},
|
105
138
|
},
|
106
139
|
settings: {
|
@@ -145,6 +178,7 @@ const messages = {
|
|
145
178
|
attributions: {
|
146
179
|
title: 'Attributions',
|
147
180
|
tooltip: 'Open attributions window',
|
181
|
+
empty: 'Currently there are no attribution entries available.',
|
148
182
|
},
|
149
183
|
},
|
150
184
|
notification: {
|
@@ -1,12 +1,7 @@
|
|
1
|
-
// eslint-disable-next-line max-classes-per-file
|
2
|
-
import { v5 as uuidv5 } from 'uuid';
|
3
1
|
import { IndexedCollection, moduleIdSymbol } from '@vcmap/core';
|
4
2
|
import { getLogger } from '@vcsuite/logger';
|
5
|
-
|
6
|
-
|
7
|
-
* @type {string}
|
8
|
-
*/
|
9
|
-
const uniqueNamespace = '9c27cc2d-552f-4637-9194-09329ed4c1dc';
|
3
|
+
import en from './en.js';
|
4
|
+
import de from './de.js';
|
10
5
|
|
11
6
|
/**
|
12
7
|
* returns true if the given value is of type object and not an array.
|
@@ -70,64 +65,20 @@ export function mergeDeep(...sources) {
|
|
70
65
|
* @extends {IndexedCollection<I18nConfigurationItem>}
|
71
66
|
*/
|
72
67
|
class I18nCollection extends IndexedCollection {
|
73
|
-
|
74
|
-
* @param {function():string} getDynamicModuleId - function to get the current dynamic module id
|
75
|
-
*/
|
76
|
-
constructor(getDynamicModuleId) {
|
68
|
+
constructor() {
|
77
69
|
super();
|
78
70
|
/**
|
79
|
-
*
|
71
|
+
* VC Map default I18n Messages
|
72
|
+
* @type {Object}
|
80
73
|
* @private
|
81
74
|
*/
|
82
|
-
this.
|
83
|
-
}
|
84
|
-
|
85
|
-
/**
|
86
|
-
* @inheritDoc
|
87
|
-
*/
|
88
|
-
add(item) {
|
89
|
-
if (!item[moduleIdSymbol]) {
|
90
|
-
item[moduleIdSymbol] = this._getDynamicModuleId();
|
91
|
-
}
|
92
|
-
if (!item.name) {
|
93
|
-
item.name = uuidv5(JSON.stringify(item), uniqueNamespace);
|
94
|
-
}
|
95
|
-
super.add(item);
|
96
|
-
}
|
97
|
-
|
98
|
-
/**
|
99
|
-
* @param {Array<I18nConfigurationItem>} configArray
|
100
|
-
* @param {string} moduleId
|
101
|
-
* @returns {Promise<void>}
|
102
|
-
*/
|
103
|
-
async parseItems(configArray, moduleId) {
|
104
|
-
if (Array.isArray(configArray)) {
|
105
|
-
configArray.forEach((item) => {
|
106
|
-
this.add({ ...item, [moduleIdSymbol]: moduleId });
|
107
|
-
});
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
/**
|
112
|
-
* @param {string} moduleId
|
113
|
-
*/
|
114
|
-
async removeModule(moduleId) {
|
115
|
-
[...this]
|
116
|
-
.filter((item) => item[moduleIdSymbol] === moduleId)
|
117
|
-
.forEach((item) => {
|
118
|
-
this.remove(item);
|
119
|
-
});
|
120
|
-
}
|
75
|
+
this._defaultMessages = { name: 'default', en, de };
|
121
76
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
return [...this]
|
128
|
-
.filter((item) => item[moduleIdSymbol] === moduleId)
|
129
|
-
.filter((item) => !item[i18nPluginSymbol])
|
130
|
-
.map((item) => JSON.parse(JSON.stringify(item)));
|
77
|
+
/**
|
78
|
+
* @type {IndexedCollection<Object>}
|
79
|
+
* @private
|
80
|
+
*/
|
81
|
+
this._pluginMessages = new IndexedCollection(false);
|
131
82
|
}
|
132
83
|
|
133
84
|
/**
|
@@ -138,10 +89,11 @@ class I18nCollection extends IndexedCollection {
|
|
138
89
|
* @param {Object} messages
|
139
90
|
*/
|
140
91
|
addPluginMessages(plugin, moduleId, messages) {
|
141
|
-
messages[i18nPluginSymbol] = plugin;
|
142
92
|
messages[moduleIdSymbol] = moduleId;
|
93
|
+
messages[i18nPluginSymbol] = plugin;
|
143
94
|
messages.name = plugin;
|
144
|
-
this.add(messages);
|
95
|
+
this._pluginMessages.add(messages);
|
96
|
+
this.added.raiseEvent(messages);
|
145
97
|
}
|
146
98
|
|
147
99
|
/**
|
@@ -151,14 +103,15 @@ class I18nCollection extends IndexedCollection {
|
|
151
103
|
* @param {string} moduleId
|
152
104
|
*/
|
153
105
|
removePluginMessages(pluginName, moduleId) {
|
154
|
-
[...this]
|
106
|
+
[...this._pluginMessages]
|
155
107
|
.filter(
|
156
108
|
(item) =>
|
157
109
|
item[i18nPluginSymbol] === pluginName &&
|
158
110
|
item[moduleIdSymbol] === moduleId,
|
159
111
|
)
|
160
112
|
.forEach((item) => {
|
161
|
-
this.remove(item);
|
113
|
+
this._pluginMessages.remove(item);
|
114
|
+
this.removed.raiseEvent(item);
|
162
115
|
});
|
163
116
|
}
|
164
117
|
|
@@ -167,13 +120,14 @@ class I18nCollection extends IndexedCollection {
|
|
167
120
|
* @returns {Object}
|
168
121
|
*/
|
169
122
|
getMergedMessages() {
|
170
|
-
return mergeDeep(...this);
|
123
|
+
return mergeDeep(this._defaultMessages, ...this._pluginMessages, ...this);
|
171
124
|
}
|
172
125
|
|
173
126
|
/**
|
174
127
|
* @inheritDoc
|
175
128
|
*/
|
176
129
|
destroy() {
|
130
|
+
this._pluginMessages.destroy();
|
177
131
|
this._getDynamicModuleId = null;
|
178
132
|
super.destroy();
|
179
133
|
}
|
@@ -124,6 +124,10 @@ class ButtonManager {
|
|
124
124
|
get weight() {
|
125
125
|
return buttonComponentOptions.weight || 0;
|
126
126
|
},
|
127
|
+
set weight(value) {
|
128
|
+
check(value, Number);
|
129
|
+
buttonComponentOptions.weight = value;
|
130
|
+
},
|
127
131
|
};
|
128
132
|
|
129
133
|
this._buttonComponents.set(id, buttonComponent);
|
@@ -243,7 +243,7 @@ class CollectionComponent {
|
|
243
243
|
* @private
|
244
244
|
*/
|
245
245
|
_insertListItem(listItem) {
|
246
|
-
if (!this._listItems.value.
|
246
|
+
if (!this._listItems.value.some((i) => i.name === listItem.name)) {
|
247
247
|
if (this._collection instanceof IndexedCollection) {
|
248
248
|
const newItemIndex = this._collection.indexOfKey(listItem.name);
|
249
249
|
if (newItemIndex === this._collection.size - 1) {
|
package/src/pluginHelper.js
CHANGED
@@ -25,9 +25,21 @@ export const pluginFactorySymbol = Symbol('pluginFactory');
|
|
25
25
|
*/
|
26
26
|
export const pluginBaseUrlSymbol = Symbol('pluginBaseUrl');
|
27
27
|
|
28
|
+
/**
|
29
|
+
* A symbol added to each plugin which describes the module URL from which the plugin was loaded (with the filename and including searchParams)
|
30
|
+
* @type {symbol}
|
31
|
+
*/
|
32
|
+
export const pluginModuleUrlSymbol = Symbol('pluginModuleUrl');
|
33
|
+
/**
|
34
|
+
* A symbol added to each plugin which describes the configured version range
|
35
|
+
* @type {symbol}
|
36
|
+
*/
|
37
|
+
export const pluginVersionRangeSymbol = Symbol('pluginVersionRange');
|
38
|
+
|
28
39
|
/**
|
29
40
|
* A helper function to create an absolute URL from a relative plugin asset URL. For example, when
|
30
41
|
* shipping your plugin with a "plugin-asset/icon.png", you can always retrieve said icon with getPluginAssetUrl(app, name, 'pluing-assets/icon.png')
|
42
|
+
* Sets the plugin version as searchParam.
|
31
43
|
* Returns null, if the plugin does not exist.
|
32
44
|
* @param {VcsUiApp} app
|
33
45
|
* @param {string} pluginName
|
@@ -47,6 +59,7 @@ export function getPluginAssetUrl(app, pluginName, asset) {
|
|
47
59
|
assetUrl.searchParams.set(key, value);
|
48
60
|
}
|
49
61
|
});
|
62
|
+
assetUrl.searchParams.set('version', plugin.version);
|
50
63
|
return assetUrl.toString();
|
51
64
|
}
|
52
65
|
return null;
|
@@ -114,15 +127,24 @@ export async function loadPlugin(name, config) {
|
|
114
127
|
baseUrl.pathname = baseUrl.pathname.replace(/\/[^/]+$/, '/');
|
115
128
|
const pluginInstance = await plugin.default(config, baseUrl.toString());
|
116
129
|
|
117
|
-
if (!pluginInstance.name) {
|
118
|
-
getLogger().error(
|
130
|
+
if (!(pluginInstance.name || pluginInstance.version)) {
|
131
|
+
getLogger().error(
|
132
|
+
`plugin ${name} does not conform to the VcsPlugin interface, which requires a name and version`,
|
133
|
+
);
|
119
134
|
if (pluginInstance.destroy) {
|
120
135
|
pluginInstance.destroy();
|
121
136
|
}
|
122
137
|
return null;
|
123
138
|
}
|
139
|
+
if (!isValidPackageName(pluginInstance.name)) {
|
140
|
+
getLogger().warning(
|
141
|
+
`plugin ${pluginInstance.name} has no valid package name!`,
|
142
|
+
);
|
143
|
+
}
|
124
144
|
pluginInstance[pluginFactorySymbol] = plugin.default;
|
125
145
|
pluginInstance[pluginBaseUrlSymbol] = baseUrl.toString();
|
146
|
+
pluginInstance[pluginModuleUrlSymbol] = module;
|
147
|
+
pluginInstance[pluginVersionRangeSymbol] = config.version;
|
126
148
|
return pluginInstance;
|
127
149
|
} catch (err) {
|
128
150
|
getLogger().error(`failed to load plugin ${name}`);
|
@@ -132,19 +154,25 @@ export async function loadPlugin(name, config) {
|
|
132
154
|
}
|
133
155
|
|
134
156
|
/**
|
157
|
+
* Returns relative url, if base is same, otherwise absolute url
|
158
|
+
* Removes version from searchParams, since version is serialized itself
|
135
159
|
* @param {string} base
|
136
|
-
* @param {string}
|
160
|
+
* @param {string} pluginUrl
|
137
161
|
* @returns {string}
|
138
162
|
*/
|
139
|
-
export function getPluginEntry(base,
|
163
|
+
export function getPluginEntry(base, pluginUrl) {
|
140
164
|
const baseUrl = new URL(base);
|
141
|
-
const
|
142
|
-
|
143
|
-
|
165
|
+
const pluginModuleUrl = new URL(pluginUrl);
|
166
|
+
pluginModuleUrl.searchParams.delete('version'); // semver is part of config
|
167
|
+
if (baseUrl.origin !== pluginModuleUrl.origin) {
|
168
|
+
return pluginModuleUrl.toString();
|
144
169
|
}
|
145
170
|
const baseSubs = baseUrl.pathname.split('/');
|
146
|
-
const pluginSubs =
|
147
|
-
|
171
|
+
const pluginSubs = pluginModuleUrl.pathname.split('/');
|
172
|
+
pluginModuleUrl.pathname = pluginSubs
|
173
|
+
.filter((sub, idx) => sub !== baseSubs[idx])
|
174
|
+
.join('/');
|
175
|
+
return `${pluginModuleUrl.pathname}${pluginModuleUrl.search}`.substring(1);
|
148
176
|
}
|
149
177
|
|
150
178
|
/**
|
@@ -154,24 +182,36 @@ export function getPluginEntry(base, pluginBase) {
|
|
154
182
|
export function serializePlugin(plugin) {
|
155
183
|
const serializedPlugin = plugin.toJSON ? plugin.toJSON() : {};
|
156
184
|
serializedPlugin.name = plugin.name;
|
185
|
+
if (plugin[pluginVersionRangeSymbol]) {
|
186
|
+
serializedPlugin.version = plugin[pluginVersionRangeSymbol];
|
187
|
+
}
|
157
188
|
serializedPlugin.entry = getPluginEntry(
|
158
189
|
window.location.href,
|
159
|
-
plugin[
|
190
|
+
plugin[pluginModuleUrlSymbol],
|
160
191
|
);
|
161
192
|
serializedPlugin[pluginFactorySymbol] = plugin[pluginFactorySymbol];
|
162
193
|
serializedPlugin[pluginBaseUrlSymbol] = plugin[pluginBaseUrlSymbol];
|
194
|
+
serializedPlugin[pluginModuleUrlSymbol] = plugin[pluginModuleUrlSymbol];
|
195
|
+
serializedPlugin[pluginVersionRangeSymbol] = plugin[pluginVersionRangeSymbol];
|
163
196
|
return serializedPlugin;
|
164
197
|
}
|
165
198
|
|
166
199
|
/**
|
167
200
|
* @param {Object} serializedPlugin
|
168
|
-
* @returns {Promise<VcsPlugin>}
|
201
|
+
* @returns {Promise<VcsPlugin|null>}
|
169
202
|
*/
|
170
203
|
export async function deserializePlugin(serializedPlugin) {
|
171
|
-
|
172
|
-
serializedPlugin
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
204
|
+
if (serializedPlugin[pluginFactorySymbol]) {
|
205
|
+
const reincarnation = await serializedPlugin[pluginFactorySymbol](
|
206
|
+
serializedPlugin,
|
207
|
+
);
|
208
|
+
reincarnation[pluginFactorySymbol] = serializedPlugin[pluginFactorySymbol];
|
209
|
+
reincarnation[pluginBaseUrlSymbol] = serializedPlugin[pluginBaseUrlSymbol];
|
210
|
+
reincarnation[pluginModuleUrlSymbol] =
|
211
|
+
serializedPlugin[pluginModuleUrlSymbol];
|
212
|
+
reincarnation[pluginVersionRangeSymbol] =
|
213
|
+
serializedPlugin[pluginVersionRangeSymbol];
|
214
|
+
return reincarnation;
|
215
|
+
}
|
216
|
+
return loadPlugin(serializedPlugin.name, serializedPlugin);
|
177
217
|
}
|