Browse Source

improving usability on mobile devices

feature/grid
Stephan Richter 1 month ago
parent
commit
25ed0c6cc9
  1. 59
      frontend/src/Components/LineEditor.svelte

59
frontend/src/Components/LineEditor.svelte

@ -15,6 +15,8 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -92,5 +103,5 @@
{#if editable && editing}
<input bind:value={editValue} onkeyup={typed} autofocus />
{:else}
<svelte:element this={type} href={href} {onclick} {onmousedown} {onmouseup} {ontouchstart} {ontouchend} {oncontextmenu} class={{editable}} title={t('long_click_to_edit')} >{value}</svelte:element>
<svelte:element this={type} href={href} onclick={ignore} {onmousedown} {onmouseup} {ontouchstart} {ontouchend} {oncontextmenu} class={{editable}} title={t('long_click_to_edit')} >{value}</svelte:element>
{/if}

Loading…
Cancel
Save