From 879b65953f8a50e63178fe0eccb294af5e95cd1a Mon Sep 17 00:00:00 2001 From: vcoppe Date: Wed, 14 Aug 2024 11:29:23 +0200 Subject: [PATCH] backward compatibility with old embedding URLs --- .../src/lib/components/embedding/Embedding.ts | 51 ++++++++++++++++++- website/src/routes/+layout.svelte | 10 ++++ .../src/routes/l/[[language]]/+page.svelte | 14 +++++ website/svelte.config.js | 2 +- 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 website/src/routes/l/[[language]]/+page.svelte diff --git a/website/src/lib/components/embedding/Embedding.ts b/website/src/lib/components/embedding/Embedding.ts index fd69a1b3..e7fa2866 100644 --- a/website/src/lib/components/embedding/Embedding.ts +++ b/website/src/lib/components/embedding/Embedding.ts @@ -1,3 +1,4 @@ +import { PUBLIC_MAPBOX_TOKEN } from "$env/static/public"; import { basemaps } from "$lib/assets/layers"; export type EmbeddingOptions = { @@ -77,4 +78,52 @@ export function getCleanedEmbeddingOptions(options: any, defaultOptions: any = d return cleanedOptions; } -export const allowedEmbeddingBasemaps = Object.keys(basemaps).filter(basemap => !['ordnanceSurvey'].includes(basemap)); \ No newline at end of file +export const allowedEmbeddingBasemaps = Object.keys(basemaps).filter(basemap => !['ordnanceSurvey'].includes(basemap)); + +export function getURLForGoogleDriveFile(fileId: string): string { + return `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media&key=AIzaSyA2ZadQob_hXiT2VaYIkAyafPvz_4ZMssk`; +} + +export function convertOldEmbeddingOptions(options: URLSearchParams): any { + let newOptions: any = { + token: PUBLIC_MAPBOX_TOKEN, + files: [], + }; + if (options.has('state')) { + let state = JSON.parse(options.get('state')!); + if (state.ids) { + newOptions.files.push(...state.ids.map(getURLForGoogleDriveFile)); + } + if (state.urls) { + newOptions.files.push(...state.urls); + } + } + if (options.has('source')) { + let basemap = options.get('source')!; + if (basemap === 'satellite') { + newOptions.basemap = 'mapboxSatellite'; + } else if (basemap === 'otm') { + newOptions.basemap = 'openTopoMap'; + } else if (basemap === 'ohm') { + newOptions.basemap = 'openHikingMap'; + } + } + if (options.has('imperial')) { + newOptions.distanceUnits = 'imperial'; + } + if (options.has('running')) { + newOptions.velocityUnits = 'pace'; + } + if (options.has('distance')) { + newOptions.distanceMarkers = true; + } + if (options.has('direction')) { + newOptions.directionMarkers = true; + } + if (options.has('slope')) { + newOptions.elevation = { + fill: 'slope', + }; + } + return newOptions; +} \ No newline at end of file diff --git a/website/src/routes/+layout.svelte b/website/src/routes/+layout.svelte index 71b8c378..0f93eb63 100644 --- a/website/src/routes/+layout.svelte +++ b/website/src/routes/+layout.svelte @@ -6,9 +6,19 @@ import Head from '$lib/components/Head.svelte'; import Nav from '$lib/components/Nav.svelte'; import Footer from '$lib/components/Footer.svelte'; + import { onMount } from 'svelte'; + import { convertOldEmbeddingOptions } from '$lib/components/embedding/Embedding'; const appRoutes = ['/[[language]]/app', '/[[language]]/embed']; + onMount(() => { + if ($page.url.searchParams.has('embed')) { + // convert old embedding options to new format and redirect to new embed page + let locale = $page.params.language; + window.location.href = `${locale ? '/' + locale : ''}/embed?options=${encodeURIComponent(JSON.stringify(convertOldEmbeddingOptions($page.url.searchParams)))}`; + } + }); + $: showNavAndFooter = $page.route.id === null || !appRoutes.includes($page.route.id); diff --git a/website/src/routes/l/[[language]]/+page.svelte b/website/src/routes/l/[[language]]/+page.svelte new file mode 100644 index 00000000..2b488537 --- /dev/null +++ b/website/src/routes/l/[[language]]/+page.svelte @@ -0,0 +1,14 @@ + + + +
+ {#each Object.entries(languages) as [lang, label]} + {#if lang !== 'en'} + + {label} + + {/if} + {/each} +
diff --git a/website/svelte.config.js b/website/svelte.config.js index ea11374a..d5d11a82 100644 --- a/website/svelte.config.js +++ b/website/svelte.config.js @@ -23,7 +23,7 @@ const config = { base: process.argv.includes('dev') ? '' : process.env.BASE_PATH }, prerender: { - entries: ['/', '/404'], + entries: ['/', '/404', '/l/fr/'], crawl: true, } }