From 921f79beadea017dbfce281240a78af0be7ac19c Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Mon, 18 May 2026 12:21:14 +0200 Subject: [PATCH 01/12] update vue files to composition api --- web/siteplan/src/App.vue | 101 ++-- .../src/components/FeatureInfoPopup.vue | 267 ++++----- .../src/components/FeatureService.vue | 561 +++++++++--------- web/siteplan/src/components/Lageplan.vue | 80 ++- web/siteplan/src/components/MapContainer.vue | 190 +++--- .../src/components/MapSourceSelection.vue | 123 ++-- .../src/components/SideInfoControl.vue | 60 +- .../src/components/toolbar/KatalogMenuBar.vue | 43 +- .../src/components/toolbar/Menubar.vue | 33 +- .../src/components/toolbar/Toolbar.vue | 132 ++--- 10 files changed, 745 insertions(+), 845 deletions(-) diff --git a/web/siteplan/src/App.vue b/web/siteplan/src/App.vue index 76e0367e60..c04d14a57f 100644 --- a/web/siteplan/src/App.vue +++ b/web/siteplan/src/App.vue @@ -13,73 +13,67 @@ - diff --git a/web/siteplan/src/components/popup/PZBPopup.vue b/web/siteplan/src/components/popup/PZBPopup.vue index 6f2e664dc5..83429559b8 100644 --- a/web/siteplan/src/components/popup/PZBPopup.vue +++ b/web/siteplan/src/components/popup/PZBPopup.vue @@ -19,13 +19,13 @@ - diff --git a/web/siteplan/src/components/popup/RouteInfo.vue b/web/siteplan/src/components/popup/RouteInfo.vue index cae88cc0ca..66f1b44b5d 100644 --- a/web/siteplan/src/components/popup/RouteInfo.vue +++ b/web/siteplan/src/components/popup/RouteInfo.vue @@ -22,26 +22,19 @@ - diff --git a/web/siteplan/src/components/popup/SignalPopup.vue b/web/siteplan/src/components/popup/SignalPopup.vue index b276b812a2..eec63151ba 100644 --- a/web/siteplan/src/components/popup/SignalPopup.vue +++ b/web/siteplan/src/components/popup/SignalPopup.vue @@ -16,49 +16,29 @@ - diff --git a/web/siteplan/src/components/popup/TrackLockPopup.vue b/web/siteplan/src/components/popup/TrackLockPopup.vue index bd9615acc9..fb90365222 100644 --- a/web/siteplan/src/components/popup/TrackLockPopup.vue +++ b/web/siteplan/src/components/popup/TrackLockPopup.vue @@ -11,7 +11,7 @@

Gleissperre: {{ trackLockLabel }}

- diff --git a/web/siteplan/src/components/popup/TrackSectionPopup.vue b/web/siteplan/src/components/popup/TrackSectionPopup.vue index 52145714c9..aa58b38c6d 100644 --- a/web/siteplan/src/components/popup/TrackSectionPopup.vue +++ b/web/siteplan/src/components/popup/TrackSectionPopup.vue @@ -20,7 +20,7 @@ - diff --git a/web/siteplan/src/components/popup/TrackSwitchPopup.vue b/web/siteplan/src/components/popup/TrackSwitchPopup.vue index 97a5f09905..6666a98f92 100644 --- a/web/siteplan/src/components/popup/TrackSwitchPopup.vue +++ b/web/siteplan/src/components/popup/TrackSwitchPopup.vue @@ -24,11 +24,11 @@ - From 837b88e31164f6f4aa1e5353689d763232171104 Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Tue, 26 May 2026 13:08:17 +0200 Subject: [PATCH 03/12] trigger CI From 975a9a402285ce86b12082a89434bbb3fa2d4fd8 Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Thu, 28 May 2026 14:49:47 +0200 Subject: [PATCH 04/12] remove unused props and components, add missing JSDoc --- .../src/components/FeatureService.vue | 1 - web/siteplan/src/components/MapContainer.vue | 6 ++++ .../src/components/MapSourceSelection.vue | 6 ++++ .../src/components/development/JumpToGuid.vue | 5 ++-- .../src/components/popup/EmptyPopup.vue | 30 ------------------- .../src/components/toolbar/Toolbar.vue | 8 ----- 6 files changed, 15 insertions(+), 41 deletions(-) delete mode 100644 web/siteplan/src/components/popup/EmptyPopup.vue diff --git a/web/siteplan/src/components/FeatureService.vue b/web/siteplan/src/components/FeatureService.vue index 3c2ff4e5fc..8954406ef0 100644 --- a/web/siteplan/src/components/FeatureService.vue +++ b/web/siteplan/src/components/FeatureService.vue @@ -11,7 +11,6 @@ (null) diff --git a/web/siteplan/src/components/MapSourceSelection.vue b/web/siteplan/src/components/MapSourceSelection.vue index 0890bfb014..afbd1988c9 100644 --- a/web/siteplan/src/components/MapSourceSelection.vue +++ b/web/siteplan/src/components/MapSourceSelection.vue @@ -74,6 +74,12 @@ import OpenStreetMap from '../util/MapSources/OpenStreetMap' import Sentinel2DE from '../util/MapSources/Sentinel2DE' import TopPlusOpen from '../util/MapSources/TopPlusOpen' +/** + * Selector for a tile layer with multiple sources + * + * @author Stuecker + */ + const map: OlMap = store.state.map const emptyMap: EmptyMap = new EmptyMap() const selected = ref(store.state.selectedSourceMap) diff --git a/web/siteplan/src/components/development/JumpToGuid.vue b/web/siteplan/src/components/development/JumpToGuid.vue index 02b39b6324..e6889ef7a1 100644 --- a/web/siteplan/src/components/development/JumpToGuid.vue +++ b/web/siteplan/src/components/development/JumpToGuid.vue @@ -38,7 +38,6 @@ import { onBeforeUnmount, ref } from 'vue' const props = defineProps<{ map: Map featureLayers: NamedFeatureLayer[] - model: object }>() const selectFeatureOffset = ref(0) @@ -86,7 +85,9 @@ const featureHasGuid = ( return false } - const guids = getFeatureGUIDs(feat).map(g => g?.toUpperCase()) + const guids = getFeatureGUIDs(feat) + .filter((g): g is string => !!g) + .map(g => g.toUpperCase()) const upperSearchGuid = searchGuid?.toUpperCase() return guids.some(g => g.search(upperSearchGuid) !== -1) } diff --git a/web/siteplan/src/components/popup/EmptyPopup.vue b/web/siteplan/src/components/popup/EmptyPopup.vue deleted file mode 100644 index 4c03921802..0000000000 --- a/web/siteplan/src/components/popup/EmptyPopup.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/web/siteplan/src/components/toolbar/Toolbar.vue b/web/siteplan/src/components/toolbar/Toolbar.vue index d283cf7078..2fa7cec8b2 100644 --- a/web/siteplan/src/components/toolbar/Toolbar.vue +++ b/web/siteplan/src/components/toolbar/Toolbar.vue @@ -54,14 +54,6 @@ import { useRouter } from 'vue-router' * Lageplan Toolbar * @author Truong */ -defineProps({ - model: - { - type: Object, - default: null - } -}) - const emit = defineEmits(['show-menu']) const router = useRouter() From 1414ec891537172a7363ddaf005c98c5ddf19f17 Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Thu, 28 May 2026 15:03:16 +0200 Subject: [PATCH 05/12] fix typo in settings editor --- web/siteplan/src/components/development/SettingEditor.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/siteplan/src/components/development/SettingEditor.vue b/web/siteplan/src/components/development/SettingEditor.vue index c55c6cd7b3..2173b34876 100644 --- a/web/siteplan/src/components/development/SettingEditor.vue +++ b/web/siteplan/src/components/development/SettingEditor.vue @@ -102,8 +102,8 @@ From c695db075e3666580baea835a699856da508e4d8 Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Tue, 2 Jun 2026 11:01:07 +0200 Subject: [PATCH 06/12] declare all functions with "function" instead of "const" arrow functions --- .../src/components/SVG/SignalBruecke.vue | 4 ++-- web/siteplan/src/components/SVG/Svg.vue | 8 ++++---- .../src/components/SVG/SvgKatalog.vue | 4 ++-- .../src/components/SVG/SvgSingleSignal.vue | 2 +- .../components/development/FeatureSearch.vue | 8 ++++---- .../src/components/development/JumpToGuid.vue | 20 +++++++++---------- .../components/development/LayerControl.vue | 16 +++++++-------- .../components/development/SettingEditor.vue | 12 +++++------ .../src/components/popup/CantLinePopup.vue | 2 +- .../src/components/popup/CantPopup.vue | 4 ++-- .../src/components/popup/JumpMenuPopup.vue | 2 +- .../src/components/popup/LockKeyPopup.vue | 2 +- .../src/components/popup/MenuPopup.vue | 12 +++++------ .../src/components/popup/PZBPopup.vue | 4 ++-- .../src/components/popup/TrackLockPopup.vue | 2 +- .../components/popup/TrackSectionPopup.vue | 8 ++++---- .../src/components/popup/TrackSwitchPopup.vue | 4 ++-- 17 files changed, 57 insertions(+), 57 deletions(-) diff --git a/web/siteplan/src/components/SVG/SignalBruecke.vue b/web/siteplan/src/components/SVG/SignalBruecke.vue index 6ccd869847..bec2199a1f 100644 --- a/web/siteplan/src/components/SVG/SignalBruecke.vue +++ b/web/siteplan/src/components/SVG/SignalBruecke.vue @@ -49,7 +49,7 @@ const listMast = [ const selectedMast = ref(SignalMountType.SignalauslegerLinks) -const randomSelectSchirm = (): ISvgElement[] => { +function randomSelectSchirm (): ISvgElement[] { const result = new Array() const listschirm = props.svgService.getSvgElementInGroup(HauptVorSignalGroup.KsSys) if (listschirm) { @@ -63,7 +63,7 @@ const randomSelectSchirm = (): ISvgElement[] => { return result } -const draw = (): string | null => { +function draw (): string | null { const listSchirm = randomSelectSchirm() const bridgeScreen: SignalBridgePart[] = [] listSchirm.forEach(screen => { diff --git a/web/siteplan/src/components/SVG/Svg.vue b/web/siteplan/src/components/SVG/Svg.vue index 318b7a7af5..3e2bab124d 100644 --- a/web/siteplan/src/components/SVG/Svg.vue +++ b/web/siteplan/src/components/SVG/Svg.vue @@ -53,7 +53,7 @@ const schirmList = ref([]) const route = useRoute() -const getSvgList = (signalGroup: HauptVorSignalGroup | AndereSignalGroup): void => { +function getSvgList (signalGroup: HauptVorSignalGroup | AndereSignalGroup): void { schirmList.value = svgService.getSvgElementInGroup(signalGroup) ?? [] const hauptVotSignalGroup: (HauptVorSignalGroup | AndereSignalGroup)[] = Object.values(HauptVorSignalGroup) const andereSignalGroup: (HauptVorSignalGroup | AndereSignalGroup)[] = Object.values(AndereSignalGroup) @@ -66,15 +66,15 @@ const getSvgList = (signalGroup: HauptVorSignalGroup | AndereSignalGroup): void } } -const getZusatzSignal = (): ZusatzSignal[] => { +function getZusatzSignal (): ZusatzSignal[] { return (svgService.getSvgElementInGroup(AndereSignalGroup.ZusatzSignale) ?? []) as ZusatzSignal[] } -const getShortMast = (): void => { +function getShortMast (): void { mastList.value = svgService.getSvgElementInGroup(SVGMast.ShortMount) ?? [] } -const setMode = (): void => { +function setMode (): void { const m = route.query.mode if (m) { mode.value = m.toString() diff --git a/web/siteplan/src/components/SVG/SvgKatalog.vue b/web/siteplan/src/components/SVG/SvgKatalog.vue index ac5ca086e1..66900d8a4e 100644 --- a/web/siteplan/src/components/SVG/SvgKatalog.vue +++ b/web/siteplan/src/components/SVG/SvgKatalog.vue @@ -63,7 +63,7 @@ const listSignalwithoutMast = [ AndereSignalGroup.Zuordnungstafel.toString() ] -const isWithoutMast = (value: string): boolean => { +function isWithoutMast (value: string): boolean { return listSignalwithoutMast.includes(value) } @@ -77,7 +77,7 @@ watch(selectedSignalGroup, (value: string): void => { } }) -const drawElementInGroup = (): string | null => { +function drawElementInGroup (): string | null { if (!props.listSchirm) { return null } diff --git a/web/siteplan/src/components/SVG/SvgSingleSignal.vue b/web/siteplan/src/components/SVG/SvgSingleSignal.vue index e170006049..920ad614db 100644 --- a/web/siteplan/src/components/SVG/SvgSingleSignal.vue +++ b/web/siteplan/src/components/SVG/SvgSingleSignal.vue @@ -113,7 +113,7 @@ watch(() => props.mastList, (value: ISvgElement[]): void => { } }) -const drawEinzelnSignal = (): string | null => { +function drawEinzelnSignal (): string | null { return SvgDraw.drawSignal( seletecSignalSchirm.value, selectedMast.value, diff --git a/web/siteplan/src/components/development/FeatureSearch.vue b/web/siteplan/src/components/development/FeatureSearch.vue index f3e1e30e2e..45ad610db5 100644 --- a/web/siteplan/src/components/development/FeatureSearch.vue +++ b/web/siteplan/src/components/development/FeatureSearch.vue @@ -67,7 +67,7 @@ onBeforeUnmount(() => { unsubscribe() }) -const setPosition = (): void => { +function setPosition (): void { const elementSearch = document.getElementById('searchInput') if (!elementSearch) { console.warn('no searchInput found') @@ -83,7 +83,7 @@ onMounted(() => { setPosition() }) -const searchSubmit = (): void => { +function searchSubmit (): void { suggestionsVisible.value = false if (searchInput.value === lastSearchInput.value) { selectedFeatureOffset.value++ @@ -94,14 +94,14 @@ const searchSubmit = (): void => { lastSearchInput.value = searchInput.value } -const updateSearchInput = (value: string): void => { +function updateSearchInput (value: string): void { selectedFeatureOffset.value = 0 if (!value) { suggestionsVisible.value = false } } -const getResultText = (): string => { +function getResultText (): string { if (matchingCount.value === 0) { return '0 Treffer' } else { diff --git a/web/siteplan/src/components/development/JumpToGuid.vue b/web/siteplan/src/components/development/JumpToGuid.vue index e6889ef7a1..79eddf6c18 100644 --- a/web/siteplan/src/components/development/JumpToGuid.vue +++ b/web/siteplan/src/components/development/JumpToGuid.vue @@ -53,15 +53,15 @@ const FLASH_CIRCLE_RADIUS_MIN = 5 const FLASH_CIRCLE_RADIUS_MAX = 25 const FLASH_COLOR = 'rgba(255, 0, 0, {})' -const setSelectFeatureOffset = (offset: number): void => { +function setSelectFeatureOffset (offset: number): void { selectFeatureOffset.value = offset } -const isDeselected = (guid: string): boolean => { +function isDeselected (guid: string): boolean { return guid === '' || guid === 'DESELECTED' } -const deselected = () => { +function deselected () { try { if (listernerKey) { unByKey(listernerKey) @@ -77,10 +77,10 @@ const deselected = () => { } } -const featureHasGuid = ( +function featureHasGuid ( feat: Feature, searchGuid: string | null -): boolean => { +): boolean { if (!searchGuid) { return false } @@ -92,7 +92,7 @@ const featureHasGuid = ( return guids.some(g => g.search(upperSearchGuid) !== -1) } -const activeLayer = (feat: Feature) => { +function activeLayer (feat: Feature) { const featureType = getFeatureType(feat) const layerType = getFeatureLayerByType(featureType) const matchLayer = props.featureLayers.find(layer => layer.getLayerType() === layerType) @@ -103,7 +103,7 @@ const activeLayer = (feat: Feature) => { matchLayer.setVisible(true) } -const createFlashFeature = (originalFeature: Feature) => { +function createFlashFeature (originalFeature: Feature) { const geometryType = originalFeature.getGeometry()?.getType() const featureData: FlashFeatureData = { guid: guid.value, @@ -119,7 +119,7 @@ const createFlashFeature = (originalFeature: Feature) => { return createFeature(FeatureType.Flash, featureData, originalFeature.getGeometry()) } -const createFlashStyle = (feat: Feature, elapsedRatio: number, resolution: number) => { +function createFlashStyle (feat: Feature, elapsedRatio: number, resolution: number) { const type = feat.getGeometry()?.getType() switch (type) { case 'Point':{ @@ -161,7 +161,7 @@ const createFlashStyle = (feat: Feature, elapsedRatio: number, resolut } } -const flash = (feat: Feature) => { +function flash (feat: Feature) { const flashLayer = props.featureLayers.find( layer => layer.getLayerType() === FeatureLayerType.Flash ) @@ -198,7 +198,7 @@ const flash = (feat: Feature) => { }) } -const jumpToFeature = (searchGuid: string): void => { +function jumpToFeature (searchGuid: string): void { if (isDeselected(searchGuid)) { deselected() guid.value = '' diff --git a/web/siteplan/src/components/development/LayerControl.vue b/web/siteplan/src/components/development/LayerControl.vue index 3d87bddf04..37c7d8cabd 100644 --- a/web/siteplan/src/components/development/LayerControl.vue +++ b/web/siteplan/src/components/development/LayerControl.vue @@ -101,7 +101,7 @@ onBeforeUnmount(() => { unsubscribe() }) -const getEditableLayers = (): NamedFeatureLayer[] => { +function getEditableLayers (): NamedFeatureLayer[] { // Do not allow to disable/edit the Layer for highlighting features const layers = featureLayers.value.filter( layer => layer.getLayerType() !== FeatureLayerType.Flash @@ -111,15 +111,15 @@ const getEditableLayers = (): NamedFeatureLayer[] => { return sorted } -const toggleShowLayer = (layer: NamedFeatureLayer): void => { +function toggleShowLayer (layer: NamedFeatureLayer): void { layer.setVisible(!layer.getVisible()) } -const getLayerIndex = (layer: NamedFeatureLayer): number => { +function getLayerIndex (layer: NamedFeatureLayer): number { return getEditableLayers().findIndex(l => l === layer) } -const dragStart = (evt: DragEvent, layer: NamedFeatureLayer): void => { +function dragStart (evt: DragEvent, layer: NamedFeatureLayer): void { draggedLayer.value = layer if (evt.dataTransfer) { evt.dataTransfer.dropEffect = 'move' @@ -127,12 +127,12 @@ const dragStart = (evt: DragEvent, layer: NamedFeatureLayer): void => { } } -const dragEnd = (): void => { +function dragEnd (): void { dragTargetLayer.value = null draggedLayer.value = null } -const dragOver = (evt: DragEvent, layer: NamedFeatureLayer): void => { +function dragOver (evt: DragEvent, layer: NamedFeatureLayer): void { if (draggedLayer.value === layer || !draggedLayer.value) { // The element cannot be dropped onto itself return @@ -159,7 +159,7 @@ const dragOver = (evt: DragEvent, layer: NamedFeatureLayer): void => { evt.preventDefault() } -const moveLayer = (source: NamedFeatureLayer, offset: number): void => { +function moveLayer (source: NamedFeatureLayer, offset: number): void { if (offset === 0) { return } @@ -183,7 +183,7 @@ const moveLayer = (source: NamedFeatureLayer, offset: number): void => { collision?.dispatchEvent('changeIndex') } -const dragDrop = (): void => { +function dragDrop (): void { if (!dragTargetLayer.value || !draggedLayer.value) { return } diff --git a/web/siteplan/src/components/development/SettingEditor.vue b/web/siteplan/src/components/development/SettingEditor.vue index 2173b34876..5297bdb205 100644 --- a/web/siteplan/src/components/development/SettingEditor.vue +++ b/web/siteplan/src/components/development/SettingEditor.vue @@ -210,7 +210,7 @@ watch(ppm, (value: number) => { store.commit('setCustomPpm', value) }) -const reset = (): void => { +function reset (): void { store.commit('defaultTrackWidth', trackWidth) boundingBoxScale.value = 90 store.commit('setBoundingBoxScaleFactor', boundingBoxScale.value) @@ -218,7 +218,7 @@ const reset = (): void => { store.commit('setCollisionEnabled', true) } -const getMaxValue = (track: string): number => { +function getMaxValue (track: string): number { switch (track) { case 'Main': return trackWidth.intervall_main.max @@ -233,7 +233,7 @@ const getMaxValue = (track: string): number => { } } -const getMinValue = (track: string): number => { +function getMinValue (track: string): number { switch (track) { case 'Main': return trackWidth.intervall_main.min @@ -248,15 +248,15 @@ const getMinValue = (track: string): number => { } } -const getCRSList = () => { +function getCRSList () { return Object.values(DBRef) } -const isSheetCutAvaiable = () => { +function isSheetCutAvaiable () { return store.state.isSheetCutAvaiable } -const isDevelopmentMode = () => { +function isDevelopmentMode () { return Configuration.developmentMode() } diff --git a/web/siteplan/src/components/popup/CantLinePopup.vue b/web/siteplan/src/components/popup/CantLinePopup.vue index 90f196eec6..2f103f9503 100644 --- a/web/siteplan/src/components/popup/CantLinePopup.vue +++ b/web/siteplan/src/components/popup/CantLinePopup.vue @@ -48,7 +48,7 @@ const checked = computed(() => { }) // eslint-disable-next-line @typescript-eslint/no-explicit-any -const showCantLine = (event: any) => { +function showCantLine (event: any) { if (event.target.checked) { store.commit('setCantVisible', cant.value.guid) } else { diff --git a/web/siteplan/src/components/popup/CantPopup.vue b/web/siteplan/src/components/popup/CantPopup.vue index 41e77cbefa..a442d8c5be 100644 --- a/web/siteplan/src/components/popup/CantPopup.vue +++ b/web/siteplan/src/components/popup/CantPopup.vue @@ -56,12 +56,12 @@ const cantLines = computed(() => { } }) -const checked = (line: Cant) => { +function checked (line: Cant) { return store.state.visibleCants[line.guid] ?? false } // eslint-disable-next-line @typescript-eslint/no-explicit-any -const showCantLine = (line: Cant, event: any) => { +function showCantLine (line: Cant, event: any) { if (event.target.checked) { store.commit('setCantVisible', line.guid) } else { diff --git a/web/siteplan/src/components/popup/JumpMenuPopup.vue b/web/siteplan/src/components/popup/JumpMenuPopup.vue index 06f27f48e7..ef3b8982df 100644 --- a/web/siteplan/src/components/popup/JumpMenuPopup.vue +++ b/web/siteplan/src/components/popup/JumpMenuPopup.vue @@ -41,7 +41,7 @@ const guid = computed(() => getFeatureGUIDs(props.feature)[0]) const elementType = computed(() => getFeatureName(getFeatureType(props.feature))) const elementLabel = computed(() => getFeatureLabel(props.feature)) -const jumpToTextSicht = () => { +function jumpToTextSicht () { PlanProToolbox.jumpToTextView(guid.value) } diff --git a/web/siteplan/src/components/popup/LockKeyPopup.vue b/web/siteplan/src/components/popup/LockKeyPopup.vue index 658bd8aa8b..c028bec7a4 100644 --- a/web/siteplan/src/components/popup/LockKeyPopup.vue +++ b/web/siteplan/src/components/popup/LockKeyPopup.vue @@ -45,7 +45,7 @@ const planningObject = computed(() => const lockKeyLabel = computed(() => getFeatureLabel(props.feature)) -const getType = (lockkey: LockKey) => { +function getType (lockkey: LockKey) { switch (lockkey.type) { case LockKeyType.Inside: return 'innen' diff --git a/web/siteplan/src/components/popup/MenuPopup.vue b/web/siteplan/src/components/popup/MenuPopup.vue index 2f4c0e0b7e..7a1098be03 100644 --- a/web/siteplan/src/components/popup/MenuPopup.vue +++ b/web/siteplan/src/components/popup/MenuPopup.vue @@ -134,7 +134,7 @@ const selectedPopup = computed(() => { return emit('removePopup') }) -const getFeatures = (): Feature[] => { +function getFeatures (): Feature[] { if (props.features === null || !props.features) { return [] } @@ -159,15 +159,15 @@ const getFeatures = (): Feature[] => { }) } -const getFeatureName = (feature: Feature): string => { +function getFeatureName (feature: Feature): string { return getFeatureNameOfType(getFeatureType(feature)) } -const getLabel = (feature: Feature): string => { +function getLabel (feature: Feature): string { return getFeatureLabel(feature) } -const isMultiFeature = (): boolean => { +function isMultiFeature (): boolean { const selectedFeatures = getFeatures() if (selectedFeatures.length > 1) { return true @@ -177,11 +177,11 @@ const isMultiFeature = (): boolean => { return false } -const backToMenu = () => { +function backToMenu () { selectedFeature.value = null } -const selectedItem = (feature: Feature) => { +function selectedItem (feature: Feature) { selectedFeature.value = feature } diff --git a/web/siteplan/src/components/popup/PZBPopup.vue b/web/siteplan/src/components/popup/PZBPopup.vue index 83429559b8..00a1baf918 100644 --- a/web/siteplan/src/components/popup/PZBPopup.vue +++ b/web/siteplan/src/components/popup/PZBPopup.vue @@ -43,7 +43,7 @@ const pzb = computed(() => getFeatureData(props.feature)) const planningObject = computed(() => isPlanningObject(getFeatureGUID(props.feature)) ? 'Ja' : 'Nein') -const pzbArtText = (): string => { +function pzbArtText (): string { switch (pzb.value.element) { case PZBElement.F500Hz: return '500Hz' @@ -58,7 +58,7 @@ const pzbArtText = (): string => { } } -const pzbTypText = (): string => { +function pzbTypText (): string { switch (pzb.value.type) { case PZBType.GM: return 'Gleismagnet' diff --git a/web/siteplan/src/components/popup/TrackLockPopup.vue b/web/siteplan/src/components/popup/TrackLockPopup.vue index fb90365222..afb23de76c 100644 --- a/web/siteplan/src/components/popup/TrackLockPopup.vue +++ b/web/siteplan/src/components/popup/TrackLockPopup.vue @@ -57,7 +57,7 @@ const trackLockLabel = computed(() => { return getFeatureLabel(props.feature) }) -const operatingModeToText = (): string => { +function operatingModeToText (): string { if (!tracklock.value) { return 'Unbestimmt' } diff --git a/web/siteplan/src/components/popup/TrackSectionPopup.vue b/web/siteplan/src/components/popup/TrackSectionPopup.vue index aa58b38c6d..e0791e06b9 100644 --- a/web/siteplan/src/components/popup/TrackSectionPopup.vue +++ b/web/siteplan/src/components/popup/TrackSectionPopup.vue @@ -40,7 +40,7 @@ const props = defineProps<{ feature: Feature }>() -const getData = (): TrackSectionFeatureData | undefined => { +function getData (): TrackSectionFeatureData | undefined { return getFeatureData(props.feature) as TrackSectionFeatureData | undefined } @@ -62,7 +62,7 @@ const trackGuid = computed(() => { const isDevelopmentMode = Configuration.developmentMode() -const trackTrackShapeToText = (): string => { +function trackTrackShapeToText (): string { switch (trackSection.value.shape) { case TrackShape.Straight: return 'Gerade' @@ -89,7 +89,7 @@ const trackTrackShapeToText = (): string => { } } -const trackTypeToText = (type: TrackType): string => { +function trackTypeToText (type: TrackType): string { switch (type) { case TrackType.Other: return 'Sonstige' @@ -108,7 +108,7 @@ const trackTypeToText = (type: TrackType): string => { } } -const trackType = (): string => { +function trackType (): string { if (trackSegment.value.type.length === 0) { return 'Unbekannt' } diff --git a/web/siteplan/src/components/popup/TrackSwitchPopup.vue b/web/siteplan/src/components/popup/TrackSwitchPopup.vue index 6666a98f92..728ea231d9 100644 --- a/web/siteplan/src/components/popup/TrackSwitchPopup.vue +++ b/web/siteplan/src/components/popup/TrackSwitchPopup.vue @@ -50,7 +50,7 @@ const props = defineProps<{ feature: Feature }>() -const getData = (): TrackSwitchFeatureData | undefined => { +function getData (): TrackSwitchFeatureData | undefined { return getFeatureData(props.feature) as TrackSwitchFeatureData | undefined } @@ -70,7 +70,7 @@ const trackSwitchLabel = computed(() => { return getFeatureLabel(props.feature) }) -const operatingModeToText = (): string => { +function operatingModeToText (): string { switch (trackSwitchComponent.value.operatingMode) { case TurnoutOperatingMode.ElectricRemote: return 'elektrisch ferngestellt' From 5b0e6b0c9bdb166a761935e10cb62c3d9f57f30a Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Tue, 2 Jun 2026 11:29:57 +0200 Subject: [PATCH 07/12] replaced concatenated strings with interpolation --- web/siteplan/src/components/FeatureService.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/siteplan/src/components/FeatureService.vue b/web/siteplan/src/components/FeatureService.vue index 8954406ef0..54ff75991c 100644 --- a/web/siteplan/src/components/FeatureService.vue +++ b/web/siteplan/src/components/FeatureService.vue @@ -245,11 +245,11 @@ function loadFeatureType ( } } catch (e) { console.error(e) - console.error('Cannot load feature ' + featureClass.constructor.name) + console.error(`Cannot load feature ${featureClass.constructor.name}`) store.commit('setLoading', false) store.commit('setError', { iserror: true, - msg: 'Cannot load ' + featureClass.constructor.name + msg: `Cannot load ${featureClass.constructor.name}` }) } return [] From 3b3bbc264a52aaa4d3f94550f4623e2d6fbc6c3e Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Tue, 2 Jun 2026 11:32:40 +0200 Subject: [PATCH 08/12] replaced another concatenated string with interpolation --- web/siteplan/src/components/development/FeatureSearch.vue | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/web/siteplan/src/components/development/FeatureSearch.vue b/web/siteplan/src/components/development/FeatureSearch.vue index 45ad610db5..6ab728e4d3 100644 --- a/web/siteplan/src/components/development/FeatureSearch.vue +++ b/web/siteplan/src/components/development/FeatureSearch.vue @@ -105,13 +105,7 @@ function getResultText (): string { if (matchingCount.value === 0) { return '0 Treffer' } else { - return ( - (selectedFeatureOffset.value % matchingCount.value) + - 1 + - ' von ' + - matchingCount.value + - ' Treffern' - ) + return `${(selectedFeatureOffset.value % matchingCount.value) + 1} von ${matchingCount.value} Treffern` } } From 57b1650d52e2184e4fba09b9430be5d64fa54b78 Mon Sep 17 00:00:00 2001 From: Linus Brombacher Date: Wed, 3 Jun 2026 11:25:26 +0200 Subject: [PATCH 09/12] use template ref instead of DOM calls in vue components --- web/siteplan/src/components/FeatureInfoPopup.vue | 10 +++++++--- .../src/components/development/FeatureSearch.vue | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/web/siteplan/src/components/FeatureInfoPopup.vue b/web/siteplan/src/components/FeatureInfoPopup.vue index be44b509d5..1354ef063b 100644 --- a/web/siteplan/src/components/FeatureInfoPopup.vue +++ b/web/siteplan/src/components/FeatureInfoPopup.vue @@ -8,7 +8,10 @@ -->