Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
772b7cd
refactor(layerChooser): add skeleton for the migration of the layerCh…
dopenguin Sep 1, 2025
3a75e8a
refactor(layerChooser): add basic component structure
dopenguin Sep 1, 2025
cc2dd93
feat: add layerChooser to the iconMenu
dopenguin Sep 1, 2025
b1a8427
refactor(iconMenu): remove css rule causing unwanted styling
dopenguin Sep 1, 2025
d5e84f4
feat(core): add reusable component for checkbox inputs
dopenguin Sep 4, 2025
81264cf
feat(core): add reusable component for radio inputs
dopenguin Sep 4, 2025
7de9fd4
feat(core): implement card component according to design docs
dopenguin Sep 4, 2025
faee5af
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Sep 4, 2025
b0481cb
refactor(layerChooser): migrate utility function areLayersActive
dopenguin Sep 4, 2025
fa421c7
refactor(layerChooser): migrate utility function getBackgroundsAndMasks
dopenguin Sep 4, 2025
26db01e
chore(core): add todo regarding grouping of mask layers by type
dopenguin Sep 4, 2025
d490fcf
refactor(core): readd map instantiation to ensure type safety
dopenguin Sep 4, 2025
ace31c7
refactor(layerChooser): migrate locales
dopenguin Sep 4, 2025
d6ae04b
refactor(core): remove replaced component RadioCard
dopenguin Sep 4, 2025
8066eb5
refactor(layerChooser): add capabilities module directly to the layer…
dopenguin Sep 4, 2025
6938372
refactor(layerChooser): implement store logic for basic usage of the …
dopenguin Sep 4, 2025
2d0ecad
refactor(layerChooser): correctly display the select component
dopenguin Sep 4, 2025
d8e232d
refactor(layerChooser): implement selectability for background and ma…
dopenguin Sep 4, 2025
9598106
chore: initially show layerChooser and update an icon and hint
dopenguin Sep 4, 2025
046a575
chore: use hint added by iconMenu for layerChooser
dopenguin Sep 4, 2025
5c21c8f
chore: use a different icon for the mock plugin
dopenguin Sep 4, 2025
54c5ba4
chore(layerChooser): remove unwanted console.warn
dopenguin Sep 4, 2025
95842ed
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 5, 2025
0ee40dd
refactor: properly align the label with the radio input
dopenguin Sep 5, 2025
2cead99
refactor: add a slot for e.g. an option button the checkboxes
dopenguin Sep 5, 2025
c35649e
refactor: update prop legendNs to localeNs to generally define the na…
dopenguin Sep 5, 2025
e9ff7b0
refactor: add the possibility to add a button directly to component i…
dopenguin Sep 5, 2025
3b83cad
refactor(layerChooser): use updated prop
dopenguin Sep 5, 2025
190aae4
refactor(layerChooser): add an options button to check LayerSelection
dopenguin Sep 5, 2025
b193579
refactor(layerChooser): shorten disabledMasks by using ready to use g…
dopenguin Sep 5, 2025
9a30f3c
refactor: add options.action prop to trigger on when clicking the opt…
dopenguin Sep 5, 2025
1643a37
refactor(layerChooser): remove migrated Selection component
dopenguin Sep 5, 2025
8dcad0d
refactor(core): update reusable components to use less redundant code
dopenguin Sep 9, 2025
28206dc
refactor: remove redundant $props in template
dopenguin Sep 9, 2025
ff01d21
chore(iconMenu): update comment
dopenguin Sep 9, 2025
82718d2
fix(iconMenu): remove maxWidth causing some issues with some content
dopenguin Sep 9, 2025
c5e485b
fix(core): layers should be required when using options
dopenguin Sep 9, 2025
1bdc311
fix: remove hover styling on disabled elements
dopenguin Sep 9, 2025
178eff2
chore: remove resolved todo
dopenguin Sep 9, 2025
7e47a39
refactor(layerChooser): remove plugin specific options type as only t…
dopenguin Sep 10, 2025
aa3f969
refactor(layerChooser): add type for options feature
dopenguin Sep 10, 2025
cb198fb
refactor(layerChooser): implement store logic for layer options feature
dopenguin Sep 10, 2025
b6098c7
feat: use local service register to speed up startup times and add la…
dopenguin Sep 10, 2025
81542ea
chore: add todo regarding internalization
dopenguin Sep 10, 2025
5f1421b
refactor(layerChooser): update locales for later usage
dopenguin Sep 10, 2025
40b34fb
refactor(layerChooser): update computed value based on updated store
dopenguin Sep 10, 2025
5842cce
refactor(layerChooser): update layer selection implementation to use …
dopenguin Sep 10, 2025
48f03bd
refactor(layerChooser): add icon button to be able to open layer opti…
dopenguin Sep 10, 2025
d6518e0
refactor(layerChooser): move findCapabilities
dopenguin Sep 10, 2025
ef4ecd9
refactor(layerChooser): implement user interface for layer options
dopenguin Sep 10, 2025
8738579
chore(layerChooser): update function signatures
dopenguin Sep 10, 2025
326bcc5
chore(layerChooser): remove migrated functionality
dopenguin Sep 10, 2025
9925f1a
refactor(layerChooser): add documentation of layerChooser to relevant…
dopenguin Sep 10, 2025
865f045
refactor: combine both checkbox and radio inputs into one reusable co…
dopenguin Sep 10, 2025
7413fb4
refactor: update styling of reusable components based on design
dopenguin Sep 10, 2025
fe492eb
refactor(core): use kern variable for font-size of the zoom map overlay
dopenguin Sep 10, 2025
7f3eb9f
refactor(iconMenu): use rem instead of px
dopenguin Sep 10, 2025
5f3f401
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 10, 2025
a366d11
fix(layerChooser): add type assertion to fix error
dopenguin Sep 10, 2025
fc68f14
fix(layerChooser): update modelValue type to allow both string and st…
dopenguin Sep 10, 2025
4b444a2
chore(iconMenu): update margin to rem
dopenguin Sep 10, 2025
c65d20b
fix(fullscreen): add missing margin to fullscreen button if it is ren…
dopenguin Sep 10, 2025
a35a5ef
chore: shorten imports
dopenguin Sep 10, 2025
d482ba0
chore: remove todo meant for another branch
dopenguin Sep 10, 2025
4714485
fix(iconMenu): add file ending to appease architecture test
dopenguin Sep 10, 2025
6048f1f
refactor(layerChooser): add console error message if no background la…
dopenguin Sep 11, 2025
c6e6c63
refactor(layerChooser): add missing empty line
dopenguin Sep 11, 2025
d43137b
refactor(layerChooser): convert loadCapabilities from an action to a …
dopenguin Sep 11, 2025
8fe4fe4
refactor(layerChooser): convert capabilities related functionality to…
dopenguin Sep 11, 2025
c0ab7f1
refactor: change denkmal layer to be initially visible
dopenguin Sep 11, 2025
7b492c0
fix: reorder addPlugin calls to ensure correct DOM order
dopenguin Sep 12, 2025
1660a83
refactor(core): update TSDoc to include information regarding DOM ord…
dopenguin Sep 12, 2025
9b04672
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 19, 2025
ca0e2f2
refactor(fullscreen): update specificity for nineRegions styling
dopenguin Sep 19, 2025
0c06fd7
refactor(layerChooser): use a generic type parameter to ensure type s…
dopenguin Sep 19, 2025
3b9d738
fix(core): initialize services earlier to ensure the map has been cre…
dopenguin Sep 23, 2025
f0ae3f5
Merge branch 'vue3/fix-map-creation' into vue3/migrate-plugin-layer-c…
dopenguin Sep 23, 2025
03947ed
refactor(layerChooser): remove now redundant interval to wait for the…
dopenguin Sep 23, 2025
46befc5
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 25, 2025
ff6a082
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 25, 2025
a0a94b1
fix(layerChooser): remove unused import
dopenguin Sep 25, 2025
2890d19
fix(fullscreen): skip failing tests (#AILike)
dopenguin Sep 29, 2025
05e653a
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Sep 29, 2025
db3c4af
Merge branch 'vue3/migrate-plugin-icon-menu' into vue3/migrate-plugin…
dopenguin Oct 15, 2025
3518da0
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Oct 15, 2025
2cb9c9b
fix: add pointer-events to various elements
dopenguin Oct 20, 2025
9b58ca8
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Oct 20, 2025
dde3ee1
refactor(layerChooser): add missing module tsdoc comment
dopenguin Oct 21, 2025
77ab7e2
refactor: remove redundant $t in locale
dopenguin Oct 21, 2025
fa0e277
fix(core): use type import for Map import
dopenguin Oct 21, 2025
5772898
fix(layerChooser): add missing space between icon and label
dopenguin Oct 21, 2025
32ea0b7
refactor(layerChooser): add a watcher for activeBackgroundId instead …
dopenguin Oct 21, 2025
171c289
refactor(layerChooser): add a watcher for activeMaskIds instead of us…
dopenguin Oct 21, 2025
0edd011
refactor: use void instead of ignoring the eslint rule
dopenguin Oct 21, 2025
08e66ee
refactor(layerChooser): remove redundant curly braces
dopenguin Oct 21, 2025
b90eb0d
fix(layerChooser): remove moveend listener on plugin teardown
dopenguin Oct 21, 2025
3ecbe86
feat(layerChooser): add tsdoc information for LayerOptions
dopenguin Oct 21, 2025
0c144bf
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Oct 21, 2025
9eef72c
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Oct 21, 2025
51b30e2
fix: also add pointer events to the label so it can be clicked as well
dopenguin Oct 22, 2025
5298f0f
Merge branch 'next' into vue3/migrate-plugin-layer-chooser
dopenguin Oct 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions examples/snowbox/AnotherEmptyComponent.vue

This file was deleted.

54 changes: 38 additions & 16 deletions examples/snowbox/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@
} from '@polar/polar'
import pluginFullscreen from '@polar/polar/plugins/fullscreen'
import pluginIconMenu from '@polar/polar/plugins/iconMenu'
import pluginLayerChooser from '@polar/polar/plugins/layerChooser'
import pluginToast from '@polar/polar/plugins/toast'
import EmptyComponent from './EmptyComponent.vue'
import styleJsonUrl from './style.json?url'
import AnotherEmptyComponent from './AnotherEmptyComponent.vue'
import services from './services.js'
import YetAnotherEmptyComponent from './YetAnotherEmptyComponent.vue'
import GeoLocationMockCe from './GeoLocationMock.ce.vue'

const basemapId = '23420'
const basemapGreyId = '23421'
const ausgleichsflaechen = '1454'
const reports = '6059'
const denkmal = 'denkmaelerWMS'

// eslint-disable-next-line no-unused-vars
const dataportTheme = {
Expand Down Expand Up @@ -53,7 +55,7 @@
},
}

// TODO: Re-enable with isSelectable

Check warning on line 58 in examples/snowbox/index.js

View workflow job for this annotation

GitHub Actions / lint

Unexpected 'todo' comment: 'TODO: Re-enable with isSelectable'
/*
// arbitrary condition for testing
const isEvenId = (mmlid) => Number(mmlid.slice(-1)) % 2 === 0
Expand All @@ -71,30 +73,54 @@
'snowbox',
{
layers: [
// TODO: Add internalization to snowbox

Check warning on line 76 in examples/snowbox/index.js

View workflow job for this annotation

GitHub Actions / lint

Unexpected 'todo' comment: 'TODO: Add internalization to snowbox'
{
id: basemapId,
visibility: true,
type: 'background',
name: 'snowbox.layers.basemap',
name: 'Basemap.de (Farbe)',
},
{
id: basemapGreyId,
type: 'background',
name: 'snowbox.layers.basemapGrey',
name: 'Basemap.de (Grau)',
maxZoom: 6,
},
{
id: reports,
type: 'mask',
name: 'snowbox.layers.reports',
visibility: true,
styleId: 'panda',
name: 'Anliegen (MML)',
visibility: false,
},
{
id: ausgleichsflaechen,
type: 'mask',
name: 'snowbox.layers.ausgleichsflaechen',
name: 'Ausgleichsflächen',
styleId: 'panda',
visibility: true,
minZoom: 5,
},
{
id: denkmal,
type: 'mask',
name: 'Kulturdenkmale',
visibility: true,
options: {
layers: {
order: '6,24,25,4,3,2,1,0',
title: {
6: 'Denkmalbereich',
24: 'Mehrheit von baulichen Anlagen',
25: 'Sachgesamtheit',
4: 'Baudenkmal',
3: 'Gründenkmal',
2: 'Gewässer',
1: 'Baudenkmal (Fläche)',
0: 'Gründenkmal (Fläche)',
},
legend: true,
},
},
},
],
layout: 'standard',
Expand All @@ -120,14 +146,14 @@
stroke: '#FFFFFF',
fill: '#333333',
},
// TODO(dopenguin): Has some HMR issues, needs to be fixed

Check warning on line 149 in examples/snowbox/index.js

View workflow job for this annotation

GitHub Actions / lint

Unexpected 'todo' comment: 'TODO(dopenguin): Has some HMR issues,...'
// isSelectable: isReportSelectable,
},
],
clusterClickZoom: true,
},
// theme: dataportTheme,
/*

Check warning on line 156 in examples/snowbox/index.js

View workflow job for this annotation

GitHub Actions / lint

Unexpected 'todo' comment: 'TODO(dopenguin): Surrounding application...'
TODO(dopenguin): Surrounding application should be able give information about dark or light mode via update of a state parameter; light mode by default
*/
locales: [
Expand All @@ -150,7 +176,7 @@
},
],
},
'https://geodienste.hamburg.de/services-internet.json'
services
)

document.getElementById('secondMap').addEventListener('click', async () => {
Expand Down Expand Up @@ -192,7 +218,7 @@
pluginIconMenu({
displayComponent: true,
layoutTag: 'TOP_RIGHT',
initiallyOpen: 'kewl',
initiallyOpen: 'layerChooser',
focusMenus: [
{
plugin: {
Expand All @@ -204,7 +230,7 @@
},
],
menus: [
// TODO: Delete the mock plugins including the components once the correct plugins have been implemented

Check warning on line 233 in examples/snowbox/index.js

View workflow job for this annotation

GitHub Actions / lint

Unexpected 'todo' comment: 'TODO: Delete the mock plugins including...'
[
{
plugin: {
Expand All @@ -217,7 +243,7 @@
[
{
plugin: {
component: AnotherEmptyComponent,
component: EmptyComponent,
id: 'realKewl',
locales: [],
},
Expand All @@ -226,12 +252,8 @@
],
[
{
plugin: {
component: EmptyComponent,
id: 'kewl',
locales: [],
},
icon: 'kern-icon-fill--layers',
plugin: pluginLayerChooser({}),
icon: 'kern-icon--layers',
},
{
plugin: pluginFullscreen({}),
Expand Down
77 changes: 77 additions & 0 deletions examples/snowbox/services.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
export default [
{
id: '23420',
name: 'basemap.de Web Raster Farbe',
url: 'https://sgx.geodatenzentrum.de/wms_basemapde',
typ: 'WMS',
layers: 'de_basemapde_web_raster_farbe',
format: 'image/png',
version: '1.3.0',
singleTile: false,
transparent: true,
transparency: 0,
urlIsVisible: true,
tilesize: 512,
gutter: 0,
minScale: '0',
maxScale: '2500000',
legendURL: '',
cache: false,
featureCount: 5,
},
{
id: '23421',
name: 'basemap.de Web Raster Grau',
url: 'https://sgx.geodatenzentrum.de/wms_basemapde',
typ: 'WMS',
layers: 'de_basemapde_web_raster_grau',
format: 'image/png',
version: '1.3.0',
singleTile: false,
transparent: true,
transparency: 0,
urlIsVisible: true,
tilesize: 512,
gutter: 0,
minScale: '0',
maxScale: '2500000',
legendURL: '',
cache: false,
featureCount: 5,
},
{
id: '1454',
name: 'Ausgleichsflächen',
url: 'https://geodienste.hamburg.de/HH_WFS_Ausgleichsflaechen',
typ: 'WFS',
featureType: 'ausgleichsflaechen',
outputFormat: 'XML',
version: '1.1.0',
featureNS: 'https://registry.gdi-de.org/id/de.hh.up',
featurePrefix: 'de.hh.up',
legendURL: '',
},
{
id: '6059',
name: 'MML Anliegen',
url: 'https://geodienste.hamburg.de/lgv-config/anliegen_extern.json',
typ: 'GeoJSON',
format: 'XML',
version: '1.0',
minScale: '0',
maxScale: '2500000',
legendURL: '',
urlIsVisible: true,
},
{
id: 'denkmaelerWMS',
name: 'Denkmal WMS',
url: 'https://efi2-deegree.schleswig-holstein.de/dish-deegree/services/wms_shp',
typ: 'WMS',
layers: '0,1,2,3,4,6,24,25',
legendURL: 'ignore',
format: 'image/png',
version: '1.3.0',
transparent: true,
},
]
28 changes: 28 additions & 0 deletions src/components/PolarCard.ce.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<template>
<article class="kern-card kern-card--small">
<div class="kern-card__container">
<slot />
</div>
</article>
</template>

<script setup lang="ts">
// NOTE: This comment is needed to have the <script>-tag not empty
</script>

<style scoped>
.kern-card {
height: inherit;
min-width: 25rem;
border-radius: 0.5rem;
box-shadow:
0 1px 1px 0 rgba(53, 57, 86, 0.16),
0 1px 2px 0 rgba(53, 57, 86, 0.25),
0 1px 6px 0 rgba(110, 117, 151, 0.25);

.kern-card__container {
padding: var(--kern-metric-space-small);
padding-bottom: 0.625rem;
}
}
</style>
54 changes: 54 additions & 0 deletions src/components/PolarInput.ce.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<template>
<div class="kern-form-check">
<input
:id="`polar-${type}-${value}-${idSuffix}`"
v-model="model"
:class="`polar-input kern-form-check__${type}`"
:name="value"
:value="value"
:type="type"
:disabled="disabled"
/>
<label
class="polar-input kern-label"
:for="`polar-${type}-${value}-${idSuffix}`"
>
{{ label }}
</label>
</div>
</template>

<script setup lang="ts" generic="T extends 'checkbox' | 'radio'">
// NOTE: It is fine here that props is only used as a type in the script.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const props = defineProps<{
idSuffix: string
label: string
type: T
value: string
disabled?: boolean
}>()
const model = defineModel<
typeof props.type extends 'checkbox' ? string[] : string
>({ required: true })
</script>

<style scoped>
.polar-input {
pointer-events: all;
}

.kern-form-check__radio[disabled],
.kern-form-check__checkbox[disabled] {
&:hover {
border: var(--kern-metric-border-width-default) solid
var(--kern-color-form-input-border);
}
}

.kern-form-check__checkbox[disabled] {
&:checked:hover::before {
margin: 0.25rem;
}
}
</style>
41 changes: 41 additions & 0 deletions src/components/PolarInputGroup.ce.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<template>
<fieldset class="kern-fieldset">
<legend class="kern-label">
{{ legend }}
</legend>
<div class="kern-fieldset__body">
<slot />
</div>
</fieldset>
</template>

<script setup lang="ts">
defineProps<{
legend: string
}>()
</script>

<style scoped>
.kern-fieldset {
width: 100%;
}

.kern-fieldset__body {
width: 100%;
padding: var(--kern-metric-space-small) 0;
gap: var(--kern-metric-space-small);
border-radius: var(--kern-metric-border-radius-default, 0.25rem);
background-color: var(--kern-color-layout-background-hued);
}

.kern-label {
padding-left: 0.75rem;
}

:deep(.kern-form-check) {
align-items: center;
gap: var(--kern-metric-space-large, 1.5rem);
margin-left: 0.75rem;
padding-right: 0;
}
</style>
3 changes: 1 addition & 2 deletions src/core/components/PolarMap.ce.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ import { easeOut } from 'ol/easing'
import { t } from 'i18next'
import { useMainStore } from '../stores/main'

import { checkServiceAvailability } from '../utils/checkServiceAvailability'
import { updateDragAndZoomInteractions } from '../utils/map/updateDragAndZoomInteractions'
import { setupStyling } from '../utils/map/setupStyling'

import { checkServiceAvailability } from '../utils/checkServiceAvailability'
import { setupMarkers } from '../utils/map/setupMarkers'
import { useT } from '../composables/useT'
import PolarMapOverlay from './PolarMapOverlay.ce.vue'
Expand Down
2 changes: 1 addition & 1 deletion src/core/components/PolarMapOverlay.ce.vue
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ defineExpose({
width: inherit;
height: inherit;
z-index: 42;
font-size: 22px;
font-size: var(--kern-typography-font-size-static-large);
text-align: center;
color: white;
background-color: rgba(0, 0, 0, 0.45);
Expand Down
6 changes: 3 additions & 3 deletions src/core/components/layouts/NineLayout.ce.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia'
import { computed } from 'vue'
import { useMainStore } from '@/core/stores/main'
import { usePluginStore } from '@/core/stores/plugin'
import { NineLayoutTag } from '@/core/utils/NineLayoutTag'
import { useMainStore } from '../../stores/main'
import { usePluginStore } from '../../stores/plugin'
import { NineLayoutTag } from '../../utils/NineLayoutTag'

const tags = Object.entries(NineLayoutTag)

Expand Down
2 changes: 1 addition & 1 deletion src/core/components/layouts/StandardLayout.ce.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

<script lang="ts" setup>
import { computed } from 'vue'
import { usePluginStore } from '@/core/stores/plugin'
import { usePluginStore } from '../../stores/plugin'

const pluginStore = usePluginStore()

Expand Down
Loading
Loading