From 1078117660b5982efaddd6b8a8e53ba7f3bcd56e Mon Sep 17 00:00:00 2001
From: duc_buitien <duc.buitien@ilr.rwth-aachen.de>
Date: Wed, 28 Aug 2024 14:24:10 +0200
Subject: [PATCH] add variable Stepsize of numberinputs

---
 src/routes/model/+page.svelte | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/routes/model/+page.svelte b/src/routes/model/+page.svelte
index 5b66f260..a0830a92 100644
--- a/src/routes/model/+page.svelte
+++ b/src/routes/model/+page.svelte
@@ -139,7 +139,7 @@
     let modules: string[] = [];
 
     //Variables and Methods for modals
-    let open:boolean = false;
+    let open: boolean = false;
     let loopOpen: boolean = false;
     let modulesModalOpen: boolean = false;
     let modulesModalIndex: number;
@@ -153,7 +153,7 @@
     })
 
     //Function for loading list of available modules from server
-    async function loadAvailableModules(){
+    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");
@@ -221,7 +221,7 @@
     }
 
     //Wrapper to give Click-Eventhandler a synchronous Output
-    function getModuleConfClickWrapper(item:string) {
+    function getModuleConfClickWrapper(item: string) {
         getModuleConf(item).catch(console.error);
         return (event: MouseEvent & { currentTarget: EventTarget & HTMLLIElement }) => {
             toggle();
@@ -382,6 +382,18 @@
         groups.push(newGroup);
         updateAll()
     }
+
+    //Calculate Stepsize of number inputs from current value
+    function calcStepSize(value:number){
+        const numberString = value.toString()
+        if (!numberString.includes('.')) {
+            return 1;
+        } else {
+            const decimalPart = numberString.split('.')[1];
+            return Math.pow(10, -decimalPart.length);
+        }
+    }
+
 </script>
 <Container>
     <h2>Simulationsmodel</h2>
@@ -431,7 +443,7 @@
                         </Button>
                         <Button color="dark" outline on:click={()=>{modulesModalIndex=groupIndex;toggleLoop()}}>
                             <Icon name="arrow-clockwise"/>
-                            {#if groupitem.loop==='true'}
+                            {#if groupitem.loop === 'true'}
                                 {groupitem.loopsize}
                             {:else}
                                 auto
@@ -502,7 +514,7 @@
                         <Input type="range" min={element.min} max={element.max} step={1} bind:value={element.bind.value}
                                placeholder="range placeholder" on:change={()=>checkModalChanged()}/>
                     {/if}
-                    <Input id="uiElement{index}" type="number" min={element.min} max={element.max}
+                    <Input id="uiElement{index}" type="number" min={element.min} max={element.max} step={calcStepSize(element.bind.value)}
                            bind:value={element.bind.value} on:change={()=>checkModalChanged()}/>
                     <Tooltip target="uiElement{index}" placement="left">
                         {element.description}
@@ -562,7 +574,7 @@
                 <Input name="loop" type="radio" bind:group={groups[modulesModalIndex].loop} value="false"
                        label={"Autoloop"}/>
                 <br>
-                {#if groups[modulesModalIndex].loop==='true'}
+                {#if groups[modulesModalIndex].loop === 'true'}
                     <InputGroup size="sm">
                         <InputGroupText>Loopsize</InputGroupText>
                         <Input type="number" min={0} bind:value={groups[modulesModalIndex].loopsize}
-- 
GitLab