diff --git a/website/src/lib/components/embedding/Embedding.svelte b/website/src/lib/components/embedding/Embedding.svelte
index 62f719d8..7b89e517 100644
--- a/website/src/lib/components/embedding/Embedding.svelte
+++ b/website/src/lib/components/embedding/Embedding.svelte
@@ -1,264 +1,272 @@
-
-
-
-
-
- {#if $fileObservers.size > 1}
-
-
-
- {/if}
-
-
-
- {#if options.elevation.show}
- dataset !== null)}
- elevationFill={options.elevation.fill}
- panelSize={options.elevation.height}
- showControls={options.elevation.controls}
- class="py-2"
- />
- {/if}
-
+
+
+
+
+
+ {#if $fileObservers.size > 1}
+
+
+
+ {/if}
+
+
+
+ {#if options.elevation.show}
+ dataset !== null)}
+ elevationFill={options.elevation.fill}
+ panelSize={options.elevation.height}
+ showControls={options.elevation.controls}
+ class="py-2"
+ />
+ {/if}
+
diff --git a/website/src/lib/components/embedding/Embedding.ts b/website/src/lib/components/embedding/Embedding.ts
index 6681550e..d67f6475 100644
--- a/website/src/lib/components/embedding/Embedding.ts
+++ b/website/src/lib/components/embedding/Embedding.ts
@@ -2,140 +2,147 @@ import { PUBLIC_MAPBOX_TOKEN } from '$env/static/public';
import { basemaps } from '$lib/assets/layers';
export type EmbeddingOptions = {
- token: string;
- files: string[];
- basemap: string;
- elevation: {
- show: boolean;
- height: number;
- controls: boolean;
- fill: 'slope' | 'surface' | undefined;
- speed: boolean;
- hr: boolean;
- cad: boolean;
- temp: boolean;
- power: boolean;
- };
- distanceMarkers: boolean;
- directionMarkers: boolean;
- distanceUnits: 'metric' | 'imperial' | 'nautical';
- velocityUnits: 'speed' | 'pace';
- temperatureUnits: 'celsius' | 'fahrenheit';
- theme: 'system' | 'light' | 'dark';
+ token: string;
+ files: string[];
+ ids: string[];
+ basemap: string;
+ elevation: {
+ show: boolean;
+ height: number;
+ controls: boolean;
+ fill: 'slope' | 'surface' | undefined;
+ speed: boolean;
+ hr: boolean;
+ cad: boolean;
+ temp: boolean;
+ power: boolean;
+ };
+ distanceMarkers: boolean;
+ directionMarkers: boolean;
+ distanceUnits: 'metric' | 'imperial' | 'nautical';
+ velocityUnits: 'speed' | 'pace';
+ temperatureUnits: 'celsius' | 'fahrenheit';
+ theme: 'system' | 'light' | 'dark';
};
export const defaultEmbeddingOptions = {
- token: '',
- files: [],
- basemap: 'mapboxOutdoors',
- elevation: {
- show: true,
- height: 170,
- controls: true,
- fill: undefined,
- speed: false,
- hr: false,
- cad: false,
- temp: false,
- power: false
- },
- distanceMarkers: false,
- directionMarkers: false,
- distanceUnits: 'metric',
- velocityUnits: 'speed',
- temperatureUnits: 'celsius',
- theme: 'system'
+ token: '',
+ files: [],
+ ids: [],
+ basemap: 'mapboxOutdoors',
+ elevation: {
+ show: true,
+ height: 170,
+ controls: true,
+ fill: undefined,
+ speed: false,
+ hr: false,
+ cad: false,
+ temp: false,
+ power: false
+ },
+ distanceMarkers: false,
+ directionMarkers: false,
+ distanceUnits: 'metric',
+ velocityUnits: 'speed',
+ temperatureUnits: 'celsius',
+ theme: 'system'
};
export function getDefaultEmbeddingOptions(): EmbeddingOptions {
- return JSON.parse(JSON.stringify(defaultEmbeddingOptions));
+ return JSON.parse(JSON.stringify(defaultEmbeddingOptions));
}
export function getMergedEmbeddingOptions(
- options: any,
- defaultOptions: any = defaultEmbeddingOptions
+ options: any,
+ defaultOptions: any = defaultEmbeddingOptions
): EmbeddingOptions {
- const mergedOptions = JSON.parse(JSON.stringify(defaultOptions));
- for (const key in options) {
- if (typeof options[key] === 'object' && options[key] !== null && !Array.isArray(options[key])) {
- mergedOptions[key] = getMergedEmbeddingOptions(options[key], defaultOptions[key]);
- } else {
- mergedOptions[key] = options[key];
- }
- }
- return mergedOptions;
+ const mergedOptions = JSON.parse(JSON.stringify(defaultOptions));
+ for (const key in options) {
+ if (typeof options[key] === 'object' && options[key] !== null && !Array.isArray(options[key])) {
+ mergedOptions[key] = getMergedEmbeddingOptions(options[key], defaultOptions[key]);
+ } else {
+ mergedOptions[key] = options[key];
+ }
+ }
+ return mergedOptions;
}
export function getCleanedEmbeddingOptions(
- options: any,
- defaultOptions: any = defaultEmbeddingOptions
+ options: any,
+ defaultOptions: any = defaultEmbeddingOptions
): any {
- const cleanedOptions = JSON.parse(JSON.stringify(options));
- for (const key in cleanedOptions) {
- if (
- typeof cleanedOptions[key] === 'object' &&
- cleanedOptions[key] !== null &&
- !Array.isArray(cleanedOptions[key])
- ) {
- cleanedOptions[key] = getCleanedEmbeddingOptions(cleanedOptions[key], defaultOptions[key]);
- if (Object.keys(cleanedOptions[key]).length === 0) {
- delete cleanedOptions[key];
- }
- } else if (JSON.stringify(cleanedOptions[key]) === JSON.stringify(defaultOptions[key])) {
- delete cleanedOptions[key];
- }
- }
- return cleanedOptions;
+ const cleanedOptions = JSON.parse(JSON.stringify(options));
+ for (const key in cleanedOptions) {
+ if (
+ typeof cleanedOptions[key] === 'object' &&
+ cleanedOptions[key] !== null &&
+ !Array.isArray(cleanedOptions[key])
+ ) {
+ cleanedOptions[key] = getCleanedEmbeddingOptions(cleanedOptions[key], defaultOptions[key]);
+ if (Object.keys(cleanedOptions[key]).length === 0) {
+ delete cleanedOptions[key];
+ }
+ } else if (JSON.stringify(cleanedOptions[key]) === JSON.stringify(defaultOptions[key])) {
+ delete cleanedOptions[key];
+ }
+ }
+ return cleanedOptions;
}
export const allowedEmbeddingBasemaps = Object.keys(basemaps).filter(
- (basemap) => !['ordnanceSurvey'].includes(basemap)
+ (basemap) => !['ordnanceSurvey'].includes(basemap)
);
+export function getFilesFromEmbeddingOptions(options: EmbeddingOptions): string[] {
+ return options.files.concat(options.ids.map((id) => getURLForGoogleDriveFile(id)));
+}
+
export function getURLForGoogleDriveFile(fileId: string): string {
- return `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media&key=AIzaSyA2ZadQob_hXiT2VaYIkAyafPvz_4ZMssk`;
+ 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;
+ let newOptions: any = {
+ token: PUBLIC_MAPBOX_TOKEN,
+ files: [],
+ ids: [],
+ };
+ if (options.has('state')) {
+ let state = JSON.parse(options.get('state')!);
+ if (state.ids) {
+ newOptions.ids.push(...state.ids);
+ }
+ 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;
}
diff --git a/website/src/lib/components/embedding/EmbeddingPlayground.svelte b/website/src/lib/components/embedding/EmbeddingPlayground.svelte
index e1d8c5ec..1a75b978 100644
--- a/website/src/lib/components/embedding/EmbeddingPlayground.svelte
+++ b/website/src/lib/components/embedding/EmbeddingPlayground.svelte
@@ -35,15 +35,21 @@
];
let files = options.files[0];
- let driveIds = '';
- $: if (files || driveIds) {
+ $: {
let urls = files.split(',');
urls = urls.filter((url) => url.length > 0);
- let ids = driveIds.split(',');
- ids = ids.filter((id) => id.length > 0);
- urls.push(...ids.map(getURLForGoogleDriveFile));
if (JSON.stringify(urls) !== JSON.stringify(options.files)) {
options.files = urls;
+ console.log(options.files);
+ }
+ }
+ let driveIds = '';
+ $: {
+ let ids = driveIds.split(',');
+ ids = ids.filter((id) => id.length > 0);
+ if (JSON.stringify(ids) !== JSON.stringify(options.ids)) {
+ options.ids = ids;
+ console.log(options.ids);
}
}
diff --git a/website/src/lib/components/embedding/OpenIn.svelte b/website/src/lib/components/embedding/OpenIn.svelte
index 960ce411..bf6d8518 100644
--- a/website/src/lib/components/embedding/OpenIn.svelte
+++ b/website/src/lib/components/embedding/OpenIn.svelte
@@ -1,18 +1,23 @@
diff --git a/website/src/routes/[[language]]/app/+page.svelte b/website/src/routes/[[language]]/app/+page.svelte
index f5d814ef..a272794c 100644
--- a/website/src/routes/[[language]]/app/+page.svelte
+++ b/website/src/routes/[[language]]/app/+page.svelte
@@ -17,6 +17,7 @@
import { page } from '$app/stores';
import { languages } from '$lib/languages';
import { getURLForLanguage } from '$lib/utils';
+ import { getURLForGoogleDriveFile } from '$lib/components/embedding/Embedding';
const {
verticalFileView,
@@ -30,11 +31,13 @@
onMount(() => {
observeFilesFromDatabase();
- let files = JSON.parse($page.url.searchParams.get('files') || '[]');
+ let files: string[] = JSON.parse($page.url.searchParams.get('files') || '[]');
+ let ids: string[] = JSON.parse($page.url.searchParams.get('ids') || '[]');
+ let urls: string[] = files.concat(ids.map(getURLForGoogleDriveFile));
- if (files.length > 0) {
+ if (urls.length > 0) {
let downloads: Promise[] = [];
- files.forEach((url) => {
+ urls.forEach((url) => {
downloads.push(
fetch(url)
.then((response) => response.blob())