fix for frontend parsing settings

This commit is contained in:
Yeicor
2024-03-03 20:30:03 +01:00
parent cb1088fe71
commit 075682ff18
3 changed files with 18 additions and 14 deletions

View File

@@ -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 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 open [the viewer](https://yeicor-3d.github.io/yet-another-cad-viewer/) with
the `preloadModels=ws://<host>:32323/` query parameter (by default it already tries localhost). the `preload=ws://<host>: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 Note that [yacv_server](yacv_server) also hosts the frontend at `http://localhost:32323/` if you have no access to the
internet. internet.
@@ -32,13 +32,13 @@ internet.
### Static deployment ### Static deployment
To deploy the viewer and models as a static website you can simply copy the latest build directory to your server. 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. 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 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 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) ![Demo](assets/screenshot.png)

View File

@@ -46,7 +46,7 @@ async function onModelRemoveRequest(name: string) {
let networkMgr = new NetworkManager(); let networkMgr = new NetworkManager();
networkMgr.addEventListener('update', (e) => onModelLoadRequest(e as NetworkUpdateEvent)); networkMgr.addEventListener('update', (e) => onModelLoadRequest(e as NetworkUpdateEvent));
// Start loading all configured models ASAP // Start loading all configured models ASAP
for (let model of settings.preloadModels) { for (let model of settings.preload) {
networkMgr.load(model); networkMgr.load(model);
} }

View File

@@ -1,6 +1,6 @@
// These are the default values for the settings, which are overridden below // These are the default values for the settings, which are overridden below
export const settings = { export const settings = {
preloadModels: [ preload: [
// @ts-ignore // @ts-ignore
// new URL('../../assets/fox.glb', import.meta.url).href, // new URL('../../assets/fox.glb', import.meta.url).href,
// @ts-ignore // @ts-ignore
@@ -29,15 +29,19 @@ function parseSetting(name: string, value: string): any {
if (arrayElem) name = name.slice(0, -2); if (arrayElem) name = name.slice(0, -2);
let prevValue = (settings as any)[name]; let prevValue = (settings as any)[name];
if (prevValue === undefined) throw new Error(`Unknown setting: ${name}`); if (prevValue === undefined) throw new Error(`Unknown setting: ${name}`);
if (Array.isArray(prevValue) && !arrayElem) { if (Array.isArray(prevValue)) {
let toExtend = [] if (!arrayElem) {
if (!firstTimeNames.includes(name)) { let toExtend = []
firstTimeNames.push(name); if (!firstTimeNames.includes(name)) {
firstTimeNames.push(name);
} else {
toExtend = prevValue;
}
toExtend.push(parseSetting(name + ".0", value));
return toExtend;
} else { } else {
toExtend = prevValue; prevValue = prevValue[0];
} }
toExtend.push(parseSetting(name + ".0", value));
return toExtend;
} }
switch (typeof prevValue) { switch (typeof prevValue) {
case 'boolean': case 'boolean':
@@ -47,7 +51,7 @@ function parseSetting(name: string, value: string): any {
case 'string': case 'string':
return value; return value;
default: default:
throw new Error(`Unknown setting type: ${typeof prevValue}`); throw new Error(`Unknown setting type: ${typeof prevValue} -- ${prevValue}`);
} }
} }