From f2f61f32f21e8f6be35b3e51a165b7fc529c8cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Fri, 29 Dec 2023 15:04:33 +0100 Subject: [PATCH] feat: add reset options resolves #70 --- src/lib/serial/device.ts | 7 ++++ src/routes/PageTransition.svelte | 1 + src/routes/config/settings/+page.svelte | 11 +++++ .../config/settings/ConfirmChallenge.svelte | 38 +++++++++++++++++ src/routes/config/settings/ResetPopup.svelte | 42 +++++++++++++++++++ .../config/settings/confirm-challenge.ts | 37 ++++++++++++++++ 6 files changed, 136 insertions(+) create mode 100644 src/routes/config/settings/ConfirmChallenge.svelte create mode 100644 src/routes/config/settings/ResetPopup.svelte create mode 100644 src/routes/config/settings/confirm-challenge.ts diff --git a/src/lib/serial/device.ts b/src/lib/serial/device.ts index 6a83ef23..63fc12af 100644 --- a/src/lib/serial/device.ts +++ b/src/lib/serial/device.ts @@ -318,6 +318,13 @@ export class CharaDevice { await this.send("RST BOOTLOADER") } + /** + * Resets the device + */ + async reset(type: "FACTORY" | "PARAMS" | "KEYMAPS" | "STARTER" | "CLEARCML" | "FUNC") { + await this.send(`RST ${type}`) + } + /** * Returns the current number of bytes available in SRAM. * diff --git a/src/routes/PageTransition.svelte b/src/routes/PageTransition.svelte index c88560c2..1b870954 100644 --- a/src/routes/PageTransition.svelte +++ b/src/routes/PageTransition.svelte @@ -15,6 +15,7 @@ beforeNavigate(navigation => { const from = navigation.from?.url.pathname const to = navigation.to?.url.pathname + if (from === to) return isNavigating = true if (!(from && to && routeOrder.includes(from) && routeOrder.includes(to))) { diff --git a/src/routes/config/settings/+page.svelte b/src/routes/config/settings/+page.svelte index 0ae7e02e..f72ba656 100644 --- a/src/routes/config/settings/+page.svelte +++ b/src/routes/config/settings/+page.svelte @@ -1,7 +1,9 @@ {#if $serialPort} @@ -154,6 +156,7 @@ Device + {#if $serialPort.device === "LITE"} @@ -179,6 +182,14 @@ padding-block-end: 48px; } + button.outline { + border: 1px solid currentcolor; + border-radius: 8px; + height: 2em; + margin-block: 2em; + margin-inline: auto; + } + legend, legend > label { font-size: 24px; diff --git a/src/routes/config/settings/ConfirmChallenge.svelte b/src/routes/config/settings/ConfirmChallenge.svelte new file mode 100644 index 00000000..5481653b --- /dev/null +++ b/src/routes/config/settings/ConfirmChallenge.svelte @@ -0,0 +1,38 @@ + + +

Type the following to confim the action

+ +

{challengeString}

+ + + + + diff --git a/src/routes/config/settings/ResetPopup.svelte b/src/routes/config/settings/ResetPopup.svelte new file mode 100644 index 00000000..ea3d08c7 --- /dev/null +++ b/src/routes/config/settings/ResetPopup.svelte @@ -0,0 +1,42 @@ + + +

Reset Device

+{#each options as category, i} + {#if i > 0} +
+ {/if} + {#each category as [command, description]} + + {/each} +{/each} + + diff --git a/src/routes/config/settings/confirm-challenge.ts b/src/routes/config/settings/confirm-challenge.ts new file mode 100644 index 00000000..3c629a8d --- /dev/null +++ b/src/routes/config/settings/confirm-challenge.ts @@ -0,0 +1,37 @@ +import type {Action} from "svelte/action" +import ConfirmChallenge from "./ConfirmChallenge.svelte" +import tippy from "tippy.js" + +export const confirmChallenge: Action void; challenge: string}> = ( + node, + {onConfirm, challenge}, +) => { + let component: ConfirmChallenge | undefined + let target: HTMLElement | undefined + const edit = tippy(node, { + interactive: true, + trigger: "click", + onShow(instance) { + target = instance.popper.querySelector(".tippy-content") as HTMLElement + target.classList.add("active") + if (component === undefined) { + component = new ConfirmChallenge({target, props: {challenge}}) + component.$on("confirm", () => { + edit.hide() + onConfirm() + }) + } + }, + onHidden() { + component?.$destroy() + target?.classList.remove("active") + component = undefined + }, + }) + + return { + destroy() { + edit.destroy() + }, + } +}