feat: Add long press functionality to AutoresizeArea component
This commit is contained in:
@@ -245,7 +245,9 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{#if editMode}
|
{#if editMode}
|
||||||
<AutoresizeArea bind:value={message} />
|
<AutoresizeArea bind:value={message} handleLongPress={(e) => {
|
||||||
|
editMode = false
|
||||||
|
}} />
|
||||||
{:else if blankMessage}
|
{:else if blankMessage}
|
||||||
<div class="w-full flex justify-center text-textcolor2 italic mb-12">
|
<div class="w-full flex justify-center text-textcolor2 italic mb-12">
|
||||||
{language.noMessage}
|
{language.noMessage}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { DataBase } from "../../../ts/storage/database";
|
import { DataBase } from "../../../ts/storage/database";
|
||||||
|
import { longpress } from 'src/ts/gui/longtouch';
|
||||||
|
|
||||||
let textarea;
|
let textarea;
|
||||||
let previousScrollHeight = 0;
|
let previousScrollHeight = 0;
|
||||||
export let value = ''
|
export let value = ''
|
||||||
|
export let handleLongPress = (e:MouseEvent) => {};
|
||||||
|
|
||||||
function resize() {
|
function resize() {
|
||||||
textarea.style.height = '0px'; // Reset the textarea height
|
textarea.style.height = '0px'; // Reset the textarea height
|
||||||
@@ -39,6 +41,7 @@
|
|||||||
<textarea
|
<textarea
|
||||||
bind:this={textarea}
|
bind:this={textarea}
|
||||||
on:input={handleInput}
|
on:input={handleInput}
|
||||||
|
use:longpress={handleLongPress}
|
||||||
bind:value={value}
|
bind:value={value}
|
||||||
style:font-size="{0.875 * ($DataBase.zoomsize / 100)}rem"
|
style:font-size="{0.875 * ($DataBase.zoomsize / 100)}rem"
|
||||||
style:line-height="{1.25 * ($DataBase.zoomsize / 100)}rem"
|
style:line-height="{1.25 * ($DataBase.zoomsize / 100)}rem"
|
||||||
|
|||||||
27
src/ts/gui/longtouch.ts
Normal file
27
src/ts/gui/longtouch.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export function longpress(node:HTMLElement, callback:(e:MouseEvent)=>void) {
|
||||||
|
const TIME_MS = 500;
|
||||||
|
let timeoutPtr: number;
|
||||||
|
function handleMouseDown(e:MouseEvent) {
|
||||||
|
window.addEventListener('mousemove', handleMoveBeforeLong);
|
||||||
|
timeoutPtr = window.setTimeout(() => {
|
||||||
|
window.removeEventListener('mousemove', handleMoveBeforeLong);
|
||||||
|
callback(e);
|
||||||
|
}, TIME_MS);
|
||||||
|
}
|
||||||
|
function handleMoveBeforeLong(e:MouseEvent) {
|
||||||
|
window.clearTimeout(timeoutPtr);
|
||||||
|
window.removeEventListener('mousemove', handleMoveBeforeLong);
|
||||||
|
}
|
||||||
|
function handleMouseUp(e:MouseEvent) {
|
||||||
|
window.clearTimeout(timeoutPtr);
|
||||||
|
window.removeEventListener('mousemove', handleMoveBeforeLong);
|
||||||
|
}
|
||||||
|
node.addEventListener('mousedown', handleMouseDown);
|
||||||
|
node.addEventListener('mouseup', handleMouseUp);
|
||||||
|
return {
|
||||||
|
destroy: () => {
|
||||||
|
node.removeEventListener('mousedown', handleMouseDown);
|
||||||
|
node.removeEventListener('mouseup', handleMouseUp);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user