diff --git a/website/src/lib/components/FileList.svelte b/website/src/lib/components/FileList.svelte new file mode 100644 index 00000000..aaa6703c --- /dev/null +++ b/website/src/lib/components/FileList.svelte @@ -0,0 +1,16 @@ + + + +
+ {#each $files as file} + + {/each} +
+
diff --git a/website/src/lib/components/tools/Load.svelte b/website/src/lib/components/tools/Load.svelte index f2fec26a..0080d75e 100644 --- a/website/src/lib/components/tools/Load.svelte +++ b/website/src/lib/components/tools/Load.svelte @@ -1,38 +1,10 @@ - { - if (input) { - input.click(); - } - }} -> + Load from desktop... ⌘O - - diff --git a/website/src/lib/components/tools/tools.ts b/website/src/lib/components/tools/tools.ts new file mode 100644 index 00000000..c9917223 --- /dev/null +++ b/website/src/lib/components/tools/tools.ts @@ -0,0 +1,38 @@ +import { files } from '$lib/stores'; + +import { parseGPX } from 'gpx'; + +export function triggerFileInput() { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = '.gpx'; + input.multiple = true; + input.className = 'hidden'; + input.onchange = () => { + if (input.files) { + loadFiles(input.files); + } + }; + input.click(); +} + +export function loadFiles(files: FileList) { + for (let i = 0; i < files.length; i++) { + loadFile(files[i]); + } +} + +export function loadFile(file: File) { + const reader = new FileReader(); + reader.onload = () => { + let data = reader.result?.toString() ?? null; + if (data) { + let gpx = parseGPX(data); + if (gpx.metadata.name === undefined) { + gpx.metadata['name'] = file.name.split('.').slice(0, -1).join('.'); + } + files.update($files => [...$files, gpx]); + } + }; + reader.readAsText(file); +} \ No newline at end of file diff --git a/website/src/routes/+page.svelte b/website/src/routes/+page.svelte index 09dee7d7..bf61aef1 100644 --- a/website/src/routes/+page.svelte +++ b/website/src/routes/+page.svelte @@ -1,9 +1,12 @@
@@ -14,5 +17,16 @@
-
Test
+
+ +
+ + { + if (e.key === 'o' && (e.metaKey || e.ctrlKey)) { + triggerFileInput(); + e.preventDefault(); + } + }} +/>