diff options
author | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-09-19 19:43:11 +0200 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-09-19 19:43:11 +0200 |
commit | 7bdce37fd3f18e2712e18c4e2c64cac69af0aca1 (patch) | |
tree | b7ad3f1cca92e2dfd2664ae9e65652bd03ff58b2 /src_frontend/routes/WidgetRoute.svelte | |
parent | e6880cd8ccf82d993f222cb14b4860581654acb8 (diff) | |
download | Luxcena-Neo-7bdce37fd3f18e2712e18c4e2c64cac69af0aca1.tar.gz Luxcena-Neo-7bdce37fd3f18e2712e18c4e2c64cac69af0aca1.zip |
:boom: Introduce new UI based on svelte, and rewrite a lot of the node app and the NeoRuntime
Diffstat (limited to 'src_frontend/routes/WidgetRoute.svelte')
-rw-r--r-- | src_frontend/routes/WidgetRoute.svelte | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src_frontend/routes/WidgetRoute.svelte b/src_frontend/routes/WidgetRoute.svelte new file mode 100644 index 0000000..a3bbbe7 --- /dev/null +++ b/src_frontend/routes/WidgetRoute.svelte @@ -0,0 +1,130 @@ +<script> + import { onMount } from "svelte"; + import { openSocket } from "../stores/socketStore"; + + let instanceName = "-" + let brightness = 0; + let powerIsOn = false; + + openSocket.on("name", (name) => instanceName = name); + openSocket.on("power", (power) => powerIsOn = power); + openSocket.on("brightness", (value) => brightness = value); + // openSocket.on("mode", (newMode) => activeMode = newMode); + + function setBrightness() { + openSocket.emit("brightness:set", brightness); + } + function setPower() { + openSocket.emit("power:set", powerIsOn); + } + + onMount(async () => { + openSocket.emit("name:get"); + openSocket.emit("power:get"); + openSocket.emit("brightness:get"); + }); +</script> + +<style> + .wrapper { + background-color: #3c3b3b; + width: 100%; + height: 100%; + display: grid; + grid-template-columns: 1fr 60px; + grid-template-rows: 80% 1fr; + grid-template-areas: + "name power" + "brightness brightness" + ; + padding: 15px; + box-sizing: border-box; + } + .name { + color: white; + grid-area: name; + font-weight: bold; + align-self: center; + } + .power { + grid-area: power; + align-self: center; + } + .brightness { grid-area: brightness; } + input[type=range] { + width: 100%; + } + + /* The switch - the box around the slider */ + .switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; + } + + /* Hide default HTML checkbox */ + .switch input { + opacity: 0; + width: 0; + height: 0; + } + + /* The slider */ + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + border-radius: 34px; + } + + .slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + border-radius: 50%; + } + + input:checked + .slider { + background-color: #2196F3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196F3; + } + + input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + /* .slider.round { border-radius: 34px; } + .slider.round:before { border-radius: 50%; } */ +</style> + +<div class="wrapper"> + <div class="name"> + {instanceName} + </div> + <div class="power"> + <label class="switch"> + <input type="checkbox" bind:checked={powerIsOn} on:change={setPower}/> + <span class="slider round"></span> + </label> + </div> + <div class="brightness"> + <input type="range" min=0 max=255 bind:value={brightness} on:change={setBrightness}/> + </div> +</div>
\ No newline at end of file |