Making the passcode entry faster

This commit is contained in:
Scott Idem
2025-04-18 15:00:16 -04:00
parent ccba530223
commit 6d235d9159
2 changed files with 57 additions and 9 deletions

View File

@@ -2,6 +2,7 @@
// *** Import Svelte specific // *** Import Svelte specific
import { onDestroy, onMount, tick } from 'svelte'; import { onDestroy, onMount, tick } from 'svelte';
import { afterNavigate } from '$app/navigation';
// *** Import other supporting libraries // *** Import other supporting libraries
// import { liveQuery } from "dexie"; // import { liveQuery } from "dexie";
@@ -52,6 +53,10 @@ onMount(() => {
} }
entered_passcode = ''; entered_passcode = '';
trigger = null; trigger = null;
/** @type {HTMLElement | null} */
const to_focus = document.getElementById('access_passcode_input');
to_focus?.focus();
}); });
onDestroy(() => { onDestroy(() => {
@@ -67,6 +72,13 @@ onDestroy(() => {
trigger = null; trigger = null;
}); });
// afterNavigate(() => {
// /** @type {HTMLElement | null} */
// const to_focus = document.getElementById('access_passcode_input');
// to_focus?.focus();
// });
$effect(() => { $effect(() => {
if (entered_passcode && entered_passcode.length >= 5 && entered_passcode != checked_passcode) { if (entered_passcode && entered_passcode.length >= 5 && entered_passcode != checked_passcode) {
checked_passcode = entered_passcode; checked_passcode = entered_passcode;
@@ -101,6 +113,18 @@ $effect(() => {
} }
}); });
// This does not seem to work. I feel like it should though...?
$effect(async () => {
if (show_passcode_input) {
// await tick();
// document.getElementById('access_passcode_input')?.focus();
console.log('Effect: Setting focus on the passcode input field');
/** @type {HTMLElement | null} */
const to_focus = document.getElementById('access_passcode_input');
to_focus?.focus();
}
});
function handle_check_access_type_passcode() { function handle_check_access_type_passcode() {
if (log_lvl > 1) { if (log_lvl > 1) {
@@ -397,17 +421,27 @@ function handle_clear_access() {
type="button" type="button"
onclick={async () => { onclick={async () => {
show_passcode_input = !show_passcode_input; show_passcode_input = !show_passcode_input;
entered_passcode = ''; // Clear the entered passcode when showing the input if (show_passcode_input) {
await tick(); // console.log('Button click: Setting focus on the passcode input field');
document.getElementById('access_passcode_input')?.focus(); // document.getElementById('access_passcode_input')?.focus();
// element.focus({preventScroll:false}); // element.focus({preventScroll:false});
} else {
entered_passcode = ''; // Clear the entered passcode when showing the input
}
}} }}
class="btn btn-sm variant-glass-success hover:variant-filled-warning access_type_unlock_btn transition-all" class="btn btn-sm variant-glass-success hover:variant-filled-warning access_type_unlock_btn transition-all"
title="Anonymous public access is currently set. Access mode is disabled/locked." title="Anonymous public access is currently set. Access mode is disabled/locked."
> >
<span class="fas fa-lock mx-1 lock_icon"></span> <span class="fas fa-lock mx-1 lock_icon"></span>
<span class="lock_icon">Locked</span>
<span class="fas fa-unlock mx-1 unlock_icon hidden"></span> <span class="fas fa-unlock mx-1 unlock_icon hidden"></span>
<span class="unlock_text">Unlock?</span> {#if (show_passcode_input)}
<span class="unlock_text">Cancel</span>
{:else}
<span class="unlock_text">Access?</span>
{/if}
<!-- <span class="unlock_text">Cancel?</span> -->
</button> </button>
<input <input
@@ -417,6 +451,7 @@ function handle_clear_access() {
class:hidden={!show_passcode_input} class:hidden={!show_passcode_input}
type="text" type="text"
placeholder="Access code" placeholder="Access code"
autofocus={show_passcode_input}
/> />
<!-- <div class="current_text transition-all">{$ae_loc.access_type}</div> --> <!-- <div class="current_text transition-all">{$ae_loc.access_type}</div> -->
{/if} {/if}

View File

@@ -5,7 +5,7 @@
let log_lvl: number = 0; let log_lvl: number = 0;
// *** Import Svelte specific // *** Import Svelte specific
// import { tick } from 'svelte'; import { tick } from 'svelte';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import '../app.postcss'; import '../app.postcss';
@@ -762,7 +762,7 @@ max-w-max -->
if ($ae_loc?.app_cfg?.show_element__menu_btn) { if ($ae_loc?.app_cfg?.show_element__menu_btn) {
$ae_loc.app_cfg.show_element__menu = true; $ae_loc.app_cfg.show_element__menu = true;
$ae_loc.app_cfg.show_element__menu_btn = false; $ae_loc.app_cfg.show_element__menu_btn = false;
$ae_loc.app_cfg.show_element__passcode_input = false; $ae_loc.app_cfg.show_element__access_type = false;
} else { } else {
$ae_loc.app_cfg.show_element__menu = false; $ae_loc.app_cfg.show_element__menu = false;
$ae_loc.app_cfg.show_element__menu_btn = true; $ae_loc.app_cfg.show_element__menu_btn = true;
@@ -776,11 +776,17 @@ max-w-max -->
{:else} {:else}
<button <button
type="button" type="button"
onclick={() => { onclick={async () => {
if ($ae_loc?.app_cfg?.show_element__menu_btn) { if ($ae_loc?.app_cfg?.show_element__menu_btn) {
$ae_loc.app_cfg.show_element__menu = true; $ae_loc.app_cfg.show_element__menu = true;
$ae_loc.app_cfg.show_element__menu_btn = false; $ae_loc.app_cfg.show_element__menu_btn = false;
$ae_loc.app_cfg.show_element__access_type = true;
$ae_loc.app_cfg.show_element__passcode_input = true; $ae_loc.app_cfg.show_element__passcode_input = true;
await tick();
console.log('Layout button click: Focus on passcode input!');
/** @type {HTMLElement | null} */
const to_focus = document.getElementById('access_passcode_input');
to_focus?.focus();
} else { } else {
$ae_loc.app_cfg.show_element__menu = false; $ae_loc.app_cfg.show_element__menu = false;
$ae_loc.app_cfg.show_element__menu_btn = true; $ae_loc.app_cfg.show_element__menu_btn = true;
@@ -806,10 +812,17 @@ max-w-max -->
type="button" type="button"
class="btn btn-sm variant-outline-surface hover:variant-ghost-success *:hover:inline-block w-full hidden px-6 py-1" class="btn btn-sm variant-outline-surface hover:variant-ghost-success *:hover:inline-block w-full hidden px-6 py-1"
title="Sign In" title="Sign In"
onclick={() => { onclick={async () => {
if ($ae_loc?.app_cfg?.show_element__menu_btn) { if ($ae_loc?.app_cfg?.show_element__menu_btn) {
$ae_loc.app_cfg.show_element__menu = true; $ae_loc.app_cfg.show_element__menu = true;
$ae_loc.app_cfg.show_element__menu_btn = false; $ae_loc.app_cfg.show_element__menu_btn = false;
$ae_loc.app_cfg.show_element__access_type = true;
$ae_loc.app_cfg.show_element__passcode_input = true;
await tick();
console.log('Layout button click: Focus on passcode input!');
/** @type {HTMLElement | null} */
const to_focus = document.getElementById('access_passcode_input');
to_focus?.focus();
} else { } else {
$ae_loc.app_cfg.show_element__menu = false; $ae_loc.app_cfg.show_element__menu = false;
$ae_loc.app_cfg.show_element__menu_btn = true; $ae_loc.app_cfg.show_element__menu_btn = true;