From 02bfc3b07bce3b3c2773077a9534cd124c1f65d2 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Fri, 12 Apr 2024 13:43:51 +0200 Subject: [PATCH] layer control progress --- website/src/lib/assets/layers.ts | 6 +- .../src/lib/components/LayerControl.svelte | 59 ---------------- website/src/lib/components/LayerTree.svelte | 35 ---------- website/src/lib/components/Map.svelte | 2 +- .../layer-control/LayerControl.svelte | 69 +++++++++++++++++++ .../components/layer-control/LayerTree.svelte | 14 ++++ .../layer-control/LayerTreeNode.svelte | 47 +++++++++++++ website/src/routes/+page.svelte | 2 +- 8 files changed, 136 insertions(+), 98 deletions(-) delete mode 100644 website/src/lib/components/LayerControl.svelte delete mode 100644 website/src/lib/components/LayerTree.svelte create mode 100644 website/src/lib/components/layer-control/LayerControl.svelte create mode 100644 website/src/lib/components/layer-control/LayerTree.svelte create mode 100644 website/src/lib/components/layer-control/LayerTreeNode.svelte diff --git a/website/src/lib/assets/layers.ts b/website/src/lib/assets/layers.ts index b9371fef..d832a4bc 100644 --- a/website/src/lib/assets/layers.ts +++ b/website/src/lib/assets/layers.ts @@ -371,7 +371,9 @@ export const opacities: { [key: string]: number; } = { swisstopoSlope: 0.4, }; -export const basemapTree = { +export type LayerTreeType = string[] | { [key: string]: LayerTreeType; }; + +export const basemapTree: LayerTreeType = { world: ['mapboxOutdoors', 'mapboxSatellite', 'openStreetMap', 'openTopoMap', 'openHikingMap', 'cyclOSM'], countries: { bulgaria: ['bgMountains'], @@ -387,7 +389,7 @@ export const basemapTree = { }, } -export const overlayTree = { +export const overlayTree: LayerTreeType = { world: { cyclOSM: ['cyclOSMlite'], waymarkedTrails: ['waymarkedTrailsHiking', 'waymarkedTrailsCycling', 'waymarkedTrailsMTB', 'waymarkedTrailsSkating', 'waymarkedTrailsHorseRiding', 'waymarkedTrailsWinter'] diff --git a/website/src/lib/components/LayerControl.svelte b/website/src/lib/components/LayerControl.svelte deleted file mode 100644 index ea54b74c..00000000 --- a/website/src/lib/components/LayerControl.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - -
- -
- { - map.setStyle(basemaps[id]); - }} - onOverlayChange={(id, checked) => { - if (checked) { - if (!map.getSource(id)) { - map.addSource(id, overlays[id]); - } - map.addLayer({ - id, - type: overlays[id].type === 'raster' ? 'raster' : 'line', - source: id, - paint: { - ...(id in opacities - ? overlays[id].type === 'raster' - ? { 'raster-opacity': opacities[id] } - : { 'line-opacity': opacities[id] } - : {}) - } - }); - } else { - map.removeLayer(id); - } - }} - /> -
diff --git a/website/src/lib/components/LayerTree.svelte b/website/src/lib/components/LayerTree.svelte deleted file mode 100644 index 28878850..00000000 --- a/website/src/lib/components/LayerTree.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/website/src/lib/components/Map.svelte b/website/src/lib/components/Map.svelte index a1d8d5d3..62ea07fa 100644 --- a/website/src/lib/components/Map.svelte +++ b/website/src/lib/components/Map.svelte @@ -6,7 +6,7 @@ import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder'; import '@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css'; - import LayerControl from './LayerControl.svelte'; + import LayerControl from '$lib/components/layer-control/LayerControl.svelte'; mapboxgl.accessToken = 'pk.eyJ1IjoiZ3B4c3R1ZGlvIiwiYSI6ImNrdHVoM2pjNTBodmUycG1yZTNwcnJ3MzkifQ.YZnNs9s9oCQPzoXAWs_SLg'; diff --git a/website/src/lib/components/layer-control/LayerControl.svelte b/website/src/lib/components/layer-control/LayerControl.svelte new file mode 100644 index 00000000..8daf96b8 --- /dev/null +++ b/website/src/lib/components/layer-control/LayerControl.svelte @@ -0,0 +1,69 @@ + + + +
+ +
+ +
diff --git a/website/src/lib/components/layer-control/LayerTree.svelte b/website/src/lib/components/layer-control/LayerTree.svelte new file mode 100644 index 00000000..9e043c83 --- /dev/null +++ b/website/src/lib/components/layer-control/LayerTree.svelte @@ -0,0 +1,14 @@ + + +
+ +
diff --git a/website/src/lib/components/layer-control/LayerTreeNode.svelte b/website/src/lib/components/layer-control/LayerTreeNode.svelte new file mode 100644 index 00000000..03723936 --- /dev/null +++ b/website/src/lib/components/layer-control/LayerTreeNode.svelte @@ -0,0 +1,47 @@ + + +
+ {#if Array.isArray(node)} + {#each node as id} +
+ {#if multiple} + { + onValueChange(id, e.target.checked); + }} + /> + {:else} + { + onValueChange(id, true); + }} + /> + {/if} + +
+ {/each} + {:else} + {#each Object.keys(node) as id} +
+ {id} + +
+ {/each} + {/if} +
diff --git a/website/src/routes/+page.svelte b/website/src/routes/+page.svelte index 0205fa64..25490dda 100644 --- a/website/src/routes/+page.svelte +++ b/website/src/routes/+page.svelte @@ -10,5 +10,5 @@ -
Test
+
Test