diff --git a/src/routes/graphs/+page.svelte b/src/routes/graphs/+page.svelte index a85aa7ff7e10b8bfaadda74243777095c8d9d762..89817bf8401c0a9fe3430bdf7a1e05451a1deac5 100644 --- a/src/routes/graphs/+page.svelte +++ b/src/routes/graphs/+page.svelte @@ -1,4 +1,6 @@ <script> + //Dummy Page + import {Styles} from "@sveltestrap/sveltestrap"; import { LayerCake, Svg } from 'layercake'; diff --git a/src/routes/logs/+page.svelte b/src/routes/logs/+page.svelte index e0062cacd824460095ad313e4a6706f191121935..4882b2a6be2e1501a40100bc620007bc9acd95f5 100644 --- a/src/routes/logs/+page.svelte +++ b/src/routes/logs/+page.svelte @@ -1,4 +1,6 @@ <script> + //Testpage to show logs + import {Container, Styles, TabContent, TabPane} from "@sveltestrap/sveltestrap"; import {onMount} from "svelte"; let tabs = ["convergenceLoop", "calculatePolar","createMissionXML","empennageSizing","engineSizing","fuselageDesign","initialSizing","landingGearDesign","propulsionIntegration","wingDesign"] diff --git a/src/routes/model/+page.svelte b/src/routes/model/+page.svelte index da2b13137e55b6c8c0021cddde2468eeb5e613d9..5b66f26095e9fcb9eebfd22ddc603ebc83fb5f32 100644 --- a/src/routes/model/+page.svelte +++ b/src/routes/model/+page.svelte @@ -1,4 +1,6 @@ <script lang="ts"> + //Prototyp Page for a modular Simulationmodelpage + import { Alert, Button, @@ -14,12 +16,7 @@ import {onMount} from "svelte"; import InPlaceEdit from './InPlaceEdit.svelte'; - - let dropIndex: number | null = null; - let changed = false; - let open = false; - let saveAlert = false; - + //Interface for Ui-elements in module settings and it's implementations interface SettingsUi { type: string; label: string; @@ -96,15 +93,21 @@ } } + //template for datatype of dictionaries, only to avoid errors in Typescript type dictionary = { [key: string]: any } + + /* Dictionary with information of the module + * including the json response and the settings elements it needs to implement in the dom + */ let modalModule: dictionary = { name: '', response: {}, html: [] } + //Class for a group of modules class group { name: string; loop: string = 'true'; @@ -117,21 +120,42 @@ } } + //Index for drag and drop + let dropIndex: number | null = null; + + //Flag for changes in simulationmodel by the user + let changed = false; + + //Flag for Alarm which is invoked by changes + let saveAlert = false; + + //Flag for changes in settingsmodal by the user + let modalChanged: boolean = false; + + //Array of all the groups of the model let groups: group[] = []; + + //Array of available modules to choose let modules: string[] = []; + + //Variables and Methods for modals + let open:boolean = false; + let loopOpen: boolean = false; let modulesModalOpen: boolean = false; let modulesModalIndex: number; - let loopOpen: boolean = false; - let modalChanged: boolean = false; const toggle = () => (open = !open); const toggleModules = () => (modulesModalOpen = !modulesModalOpen); const toggleLoop = () => (loopOpen = !loopOpen); onMount(async () => { + await loadAvailableModules() await loadModel(); }) - async function loadModel() { + //Function for loading list of available modules from server + async function loadAvailableModules(){ + //transitionally reading from convergenceloop_conf.xml + //TO-DO: replace with something more recent const res = await fetch("http://127.0.0.1:8000/convergence"); const data = await res.json(); modules = data["SetupSteps"]; @@ -140,9 +164,13 @@ modules = modules.concat(data["SizingLoop"]); modules = Array.from(new Set(modules)) modules.sort() - const res2 = await fetch("http://127.0.0.1:8000/modules"); - const data2 = await res2.json(); - groups = data2["groups"] + } + + //Function for loading the recent saved model from server + async function loadModel() { + const res = await fetch("http://127.0.0.1:8000/modules"); + const data = await res.json(); + groups = data["groups"] changed = false; changed = changed; saveAlert = false; @@ -153,6 +181,7 @@ //dummy-Function } + //Function to save model on the server async function uploadModel() { const response = await fetch('http://127.0.0.1:8000/modules/update', { method: 'PUT', @@ -168,7 +197,9 @@ saveAlert = saveAlert; } + //Function for loading the selected settings xml config and show it on the DOM async function getModuleConf(module: string) { + //TO-DO: Implementation for editing xml files in an unknown format try { const res = await fetch(`http://127.0.0.1:8000/modules/${module}/config`); const data = await res.json(); @@ -194,10 +225,15 @@ getModuleConf(item).catch(console.error); return (event: MouseEvent & { currentTarget: EventTarget & HTMLLIElement }) => { toggle(); + loadAvailableModules().catch(console.error); getModuleConf(item).catch(console.error); }; } + /*Parse json response to matching SettingsUi-Elements + * to potray it later in the DOM + * recursive Function + * */ function generateHTML(json: dictionary) { Object.entries(json).forEach(([key, value]) => { if (value == null) { @@ -235,6 +271,7 @@ }) } + //Save Settings of Module to Server async function uploadModuleConf() { const response = await fetch('http://127.0.0.1:8000/modules/config/update', { method: 'PUT', @@ -248,21 +285,25 @@ modalChanged = modalChanged; } + //Replacing underscores to space function formatLabel(label: string) { return label.replaceAll("_", " ") } + //check if the settings modal of a module changed function checkModalChanged() { - console.log("change") modalChanged = true; modalChanged = modalChanged; } + //reset settings of an module async function resetModuleConf() { const res = await fetch(`http://127.0.0.1:8000/modules/${modalModule.name}/config/reset`); getModuleConf(modalModule.name); } + //Methods for drag and drop of modules + function dragStart(event: any, groupIndex: number, itemIndex: number) { const data = {groupIndex, itemIndex}; event.dataTransfer.setData('text/plain', JSON.stringify(data)); @@ -288,6 +329,7 @@ dropIndex = index; } + //update Page with new inputs function updateAll() { groups = groups; changed = true; @@ -296,36 +338,43 @@ changed = changed; } + //Makes new group and adding it to groups function addGroup() { groups.push(new group("group " + groups.length, 1)) updateAll() } + //Adding a Module to a group function addModules(index: number, modulname: string) { groups.at(index)?.modules.push(modulname) updateAll() } + //Change name of a group function submitGrpName(field: number) { return ({detail}: { detail: string }) => { groups[field].name = detail; } } + //Clearing groups function clearModel() { groups = [] } + //Deleting a group function deleteGroup(index: number) { groups.splice(index, 1); updateAll() } + //Deleting a model in a group function deleteModul(grpIndex: number, modulIndex: number) { groups.at(grpIndex)?.modules.splice(modulIndex, 1); updateAll() } + //Copy selected group function copyGroup(index: number) { const newGroup = new group("copy of " + groups[index].name, groups[index].loopsize); newGroup.modules = newGroup.modules.concat(groups[index].modules); diff --git a/src/routes/reports/+page.svelte b/src/routes/reports/+page.svelte index 795159c1743db6385b6b61c3e55e83ecf3d9b8ac..49c924a823737df499d38e4ce60507b519dfc647 100644 --- a/src/routes/reports/+page.svelte +++ b/src/routes/reports/+page.svelte @@ -1,4 +1,6 @@ <script> + //Testpage to show html report outputs + import {Container, Styles, TabContent, TabPane} from "@sveltestrap/sveltestrap"; import {onMount} from "svelte"; diff --git a/src/routes/settings/+page.svelte b/src/routes/settings/+page.svelte index de63aafa9a67e585f4cf5ba74b0bdf804c04fe69..85503ea5e5cb6c833eddd705d8d942fe5164943b 100644 --- a/src/routes/settings/+page.svelte +++ b/src/routes/settings/+page.svelte @@ -1,4 +1,6 @@ <script lang="ts"> + //Testpage to show possible look of a settingspage + import { Button, ButtonGroup,