diff --git a/website/src/lib/components/Menu.svelte b/website/src/lib/components/Menu.svelte
index 541ec7d1..da782e3b 100644
--- a/website/src/lib/components/Menu.svelte
+++ b/website/src/lib/components/Menu.svelte
@@ -43,6 +43,18 @@
let undoDisabled = derived(canUndo, ($canUndo) => !$canUndo);
let redoDisabled = derived(canRedo, ($canRedo) => !$canRedo);
+
+ function switchBasemaps() {
+ [$currentBasemap, $previousBasemap] = [$previousBasemap, $currentBasemap];
+ }
+
+ function toggleOverlays() {
+ if (anySelectedLayer($currentOverlays)) {
+ [$currentOverlays, $previousOverlays] = [defaultOverlays, $currentOverlays];
+ } else {
+ [$currentOverlays, $previousOverlays] = [$previousOverlays, defaultOverlays];
+ }
+ }
@@ -127,6 +139,17 @@
+
+ {$_('menu.view')}
+
+ {$_('menu.switch_basemap')}
+ {$_('menu.toggle_overlays')}
+
+
{$_('menu.settings')}
{
@@ -109,12 +109,14 @@
-
+ {#if $currentOverlays}
+
+ {/if}
diff --git a/website/src/lib/components/layer-control/LayerTreeNode.svelte b/website/src/lib/components/layer-control/LayerTreeNode.svelte
index ec80089e..e8de81db 100644
--- a/website/src/lib/components/layer-control/LayerTreeNode.svelte
+++ b/website/src/lib/components/layer-control/LayerTreeNode.svelte
@@ -17,6 +17,8 @@
export let multiple: boolean = false;
export let open: CollapsedInfoTreeType
;
+ export let checked: LayerTreeType;
+
if (!Array.isArray(node)) {
Object.keys(node).forEach((id) => {
if (!open.children.hasOwnProperty(id)) {
@@ -27,8 +29,6 @@
}
});
}
-
- export let checked: LayerTreeType;
Object.keys(node).forEach((id) => {
if (!checked.hasOwnProperty(id)) {
if (typeof node[id] == 'boolean') {
diff --git a/website/src/lib/db.ts b/website/src/lib/db.ts
index f80250cd..a89af5f1 100644
--- a/website/src/lib/db.ts
+++ b/website/src/lib/db.ts
@@ -47,6 +47,26 @@ function dexieSettingStore(setting: string, initial: any): Writable {
};
}
+// Wrap Dexie live queries in a Svelte store to avoid triggering the query for every subscriber, and updates to the store are pushed to the DB
+function dexieUninitializedSettingStore(setting: string, initial: any): Writable {
+ let store = writable(undefined);
+ liveQuery(() => db.settings.get(setting)).subscribe(value => {
+ if (value !== undefined) {
+ store.set(value);
+ } else {
+ store.set(initial);
+ }
+ });
+ return {
+ subscribe: store.subscribe,
+ set: (value: any) => db.settings.put(value, setting),
+ update: (callback: (value: any) => any) => {
+ let newValue = callback(get(store));
+ db.settings.put(newValue, setting);
+ }
+ };
+}
+
export const settings = {
distanceUnits: dexieSettingStore('distanceUnits', 'metric'),
velocityUnits: dexieSettingStore('velocityUnits', 'speed'),
@@ -64,7 +84,7 @@ export const settings = {
currentBasemap: dexieSettingStore('currentBasemap', defaultBasemap),
previousBasemap: dexieSettingStore('previousBasemap', defaultBasemap),
selectedBasemapTree: dexieSettingStore('selectedBasemapTree', defaultBasemapTree),
- currentOverlays: dexieSettingStore('currentOverlays', defaultOverlays),
+ currentOverlays: dexieUninitializedSettingStore('currentOverlays', defaultOverlays),
previousOverlays: dexieSettingStore('previousOverlays', defaultOverlays),
selectedOverlayTree: dexieSettingStore('selectedOverlayTree', defaultOverlayTree),
};
diff --git a/website/src/locales/en.json b/website/src/locales/en.json
index e0214be7..ab440928 100644
--- a/website/src/locales/en.json
+++ b/website/src/locales/en.json
@@ -14,6 +14,9 @@
"delete": "Delete",
"delete_all": "Delete all",
"select_all": "Select all",
+ "view": "View",
+ "switch_basemap": "Switch to previous basemap",
+ "toggle_overlays": "Toggle overlays",
"settings": "Settings",
"distance_units": "Distance units",
"metric": "Metric",