From 075682ff185dcba9a274bfea6151165d1ca429dd Mon Sep 17 00:00:00 2001 From: Yeicor <4929005+Yeicor@users.noreply.github.com> Date: Sun, 3 Mar 2024 20:30:03 +0100 Subject: [PATCH] fix for frontend parsing settings --- README.md | 8 ++++---- frontend/App.vue | 2 +- frontend/misc/settings.ts | 22 +++++++++++++--------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index fe23037..9568f9a 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The [logo](yacv_server/logo.py) also works as an example of how to use the viewe To see the live updates you will need to run the [yacv_server](yacv_server) and open [the viewer](https://yeicor-3d.github.io/yet-another-cad-viewer/) with -the `preloadModels=ws://:32323/` query parameter (by default it already tries localhost). +the `preload=ws://:32323/` query parameter (by default it already tries localhost). Note that [yacv_server](yacv_server) also hosts the frontend at `http://localhost:32323/` if you have no access to the internet. @@ -32,13 +32,13 @@ internet. ### Static deployment To deploy the viewer and models as a static website you can simply copy the latest build directory to your server. -To load models use the `preloadModels=...` query parameter in the URL. +To load models use the `preload=...` query parameter in the URL. It can be set multiple times to load multiple models. Note that you can simply reuse the [main deployment](https://yeicor-3d.github.io/yet-another-cad-viewer/) and host only -your own models (linking them from the viewer with the `preloadModels` query parameter). +your own models (linking them from the viewer with the `preload` query parameter). To see a working example of a static deployment you can check out -the [demo](https://yeicor-3d.github.io/yet-another-cad-viewer/?preloadModels=base.glb&preloadModels=fox.glb&preloadModels=img.jpg.glb&preloadModels=location.glb). +the [demo](https://yeicor-3d.github.io/yet-another-cad-viewer/?preload=base.glb&preload=fox.glb&preload=img.jpg.glb&preload=location.glb). ![Demo](assets/screenshot.png) diff --git a/frontend/App.vue b/frontend/App.vue index 39f652e..4852c14 100644 --- a/frontend/App.vue +++ b/frontend/App.vue @@ -46,7 +46,7 @@ async function onModelRemoveRequest(name: string) { let networkMgr = new NetworkManager(); networkMgr.addEventListener('update', (e) => onModelLoadRequest(e as NetworkUpdateEvent)); // Start loading all configured models ASAP -for (let model of settings.preloadModels) { +for (let model of settings.preload) { networkMgr.load(model); } diff --git a/frontend/misc/settings.ts b/frontend/misc/settings.ts index 55660a7..e8e012c 100644 --- a/frontend/misc/settings.ts +++ b/frontend/misc/settings.ts @@ -1,6 +1,6 @@ // These are the default values for the settings, which are overridden below export const settings = { - preloadModels: [ + preload: [ // @ts-ignore // new URL('../../assets/fox.glb', import.meta.url).href, // @ts-ignore @@ -29,15 +29,19 @@ function parseSetting(name: string, value: string): any { if (arrayElem) name = name.slice(0, -2); let prevValue = (settings as any)[name]; if (prevValue === undefined) throw new Error(`Unknown setting: ${name}`); - if (Array.isArray(prevValue) && !arrayElem) { - let toExtend = [] - if (!firstTimeNames.includes(name)) { - firstTimeNames.push(name); + if (Array.isArray(prevValue)) { + if (!arrayElem) { + let toExtend = [] + if (!firstTimeNames.includes(name)) { + firstTimeNames.push(name); + } else { + toExtend = prevValue; + } + toExtend.push(parseSetting(name + ".0", value)); + return toExtend; } else { - toExtend = prevValue; + prevValue = prevValue[0]; } - toExtend.push(parseSetting(name + ".0", value)); - return toExtend; } switch (typeof prevValue) { case 'boolean': @@ -47,7 +51,7 @@ function parseSetting(name: string, value: string): any { case 'string': return value; default: - throw new Error(`Unknown setting type: ${typeof prevValue}`); + throw new Error(`Unknown setting type: ${typeof prevValue} -- ${prevValue}`); } }