From 25ed0c6cc90d5bbd7a8c8bd44c27e729a34d8e85 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sat, 20 Sep 2025 23:32:42 +0200 Subject: [PATCH] improving usability on mobile devices --- frontend/src/Components/LineEditor.svelte | 59 ++++++++++++++--------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/frontend/src/Components/LineEditor.svelte b/frontend/src/Components/LineEditor.svelte index bc8171b..1207236 100644 --- a/frontend/src/Components/LineEditor.svelte +++ b/frontend/src/Components/LineEditor.svelte @@ -15,6 +15,8 @@ let editing = $state(simple); let editValue = value; let start = 0; + let x = 0; + let y = 0; async function applyEdit(){ let success = await onSet(editValue); @@ -22,22 +24,14 @@ editing=false; } - function resetEdit(){ - editing = false; - editValue = value; - } - - function startEdit(){ - activeField.update((n) => n+1); - editing = editable; - } - - function typed(ev){ - if (ev.keyCode == 13) applyEdit(); - if (ev.keyCode == 27) resetEdit(); + function ignore(evt){ + evt.preventDefault(); + evt.stopPropagation(); + return false; } - function measured(evt,duration){ + function measured(evt,duration,d){ + if (d > 100) return; if (duration < 500){ onclick(evt); } else { @@ -46,29 +40,46 @@ } function oncontextmenu(evt){ - evt.preventDefault(); - evt.stopPropagation(); - return false; + startEdit(); + return ignore(evt); } function onmousedown(evt){ - evt.preventDefault(); start = evt.timeStamp; + return ignore(evt); } function onmouseup(evt){ - evt.preventDefault(); - measured(evt, evt.timeStamp - start); + measured(evt, evt.timeStamp - start,0); + return ignore(evt); } function ontouchstart(evt){ - evt.preventDefault(); start = evt.timeStamp; + x = evt.touches[0].clientX; + y = evt.touches[0].clientY; + return ignore(evt); } function ontouchend(evt){ - evt.preventDefault(); - measured(evt, evt.timeStamp - start); + let d = Math.abs(x - evt.changedTouches[0].clientX) + Math.abs(y - evt.changedTouches[0].clientY); + measured(evt, evt.timeStamp - start, d); + return ignore(evt); + } + + function resetEdit(){ + editing = false; + editValue = value; + } + + function startEdit(){ + activeField.update((n) => n+1); + editing = editable; + } + + function typed(ev){ + if (ev.keyCode == 13) applyEdit(); + if (ev.keyCode == 27) resetEdit(); } activeField.subscribe((val) => resetEdit()); @@ -92,5 +103,5 @@ {#if editable && editing} {:else} -{value} +{value} {/if}