From de18f531e13a061dbc9fd3d7f1281369403a748a Mon Sep 17 00:00:00 2001 From: 7nik <--global> Date: Sat, 2 Sep 2023 23:36:21 +0300 Subject: [PATCH] Improve compatibility with touch devices --- CHANGELOG.md | 3 +++ app/components/elements/DoubleRange.svelte | 22 ++++++++++----- .../trade-window/TradeWindowEditOffer.svelte | 27 +++++++++++++++++-- app/utils/tooltip.css | 10 +++++++ app/utils/tooltip.ts | 13 +++++++++ package.json | 2 +- 6 files changed, 67 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdebf54..febce09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # NeonMob Trade Enhancements changelog +## 3.3.2 +* Improve compatibility with touch devices + ## 3.3.1 * Fixed not running in Safari (old version only?) * Fixed not playing animated cards in some cases diff --git a/app/components/elements/DoubleRange.svelte b/app/components/elements/DoubleRange.svelte index 99f04e3..b054168 100644 --- a/app/components/elements/DoubleRange.svelte +++ b/app/components/elements/DoubleRange.svelte @@ -93,21 +93,23 @@ }, 300); } - function startDrag (ev: MouseEvent, isLeft: boolean) { + function startDrag (ev: MouseEvent | TouchEvent, isLeft: boolean) { ev.preventDefault(); + const isTouch = ev instanceof TouchEvent; const elem = ev.target as HTMLElement; elem.classList.add("dragging"); const { left, width } = elem.closest(".slider")!.getBoundingClientRect(); - window.addEventListener("mousemove", move); + window.addEventListener(isTouch ? "touchmove" : "mousemove", move); window.addEventListener( - "mouseup", + isTouch ? "touchend" : "mouseup", () => { - window.removeEventListener("mousemove", move); + window.removeEventListener(isTouch ? "touchmove" : "mousemove", move); elem.classList.remove("dragging"); }, { once: true }, ); - function move ({ clientX: x }: MouseEvent) { + function move (ev: MouseEvent | TouchEvent) { + const x = ev instanceof MouseEvent ? ev.clientX : ev.touches[0].clientX; if (isLeft) { setValue(0, lim(0, end, (x - left) / width)); } else { @@ -165,11 +167,17 @@
-
startDrag(ev, true)}> +
startDrag(ev, true)} + on:touchstart={(ev) => startDrag(ev, true)} + >
{num2text(toStep(start))}
{#if start < 1} -
startDrag(ev, false)}> +
startDrag(ev, false)} + on:touchstart={(ev) => startDrag(ev, false)} + >
{num2text(toStep(end))}
{/if} diff --git a/app/components/trade-window/TradeWindowEditOffer.svelte b/app/components/trade-window/TradeWindowEditOffer.svelte index 379364d..56567b8 100644 --- a/app/components/trade-window/TradeWindowEditOffer.svelte +++ b/app/components/trade-window/TradeWindowEditOffer.svelte @@ -148,6 +148,8 @@ filterMenuBtn.style.setProperty("--left", `${left}px`); filterMenuBtn.style.setProperty("--top", `${top}px`); } + + let holdMenuOpened = false; @@ -156,11 +158,22 @@
Add cards {isItYou ? "you" : cardOwner.first_name} will give + { + holdMenuOpened = false; + }} bind:this={filterMenuBtn} > - +
+ dispatch("close")}> @@ -298,11 +312,20 @@ } } .edit-filters-btn > :global(:first-child:hover + .filters-menu), - .edit-filters-btn > :global(:first-child:active + .filters-menu), + .edit-filters-btn.opened > :global(.filters-menu), .filters-menu:hover { visibility: visible; transition-delay: 0s; } + .edit-filters-btn.opened:after { + content: ""; + display: block; + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + } .close-btn { align-self: flex-start; cursor: pointer; diff --git a/app/utils/tooltip.css b/app/utils/tooltip.css index 196e6e3..bb02a2e 100644 --- a/app/utils/tooltip.css +++ b/app/utils/tooltip.css @@ -37,3 +37,13 @@ #nmte-tips > div[data-placement=left] .arrow svg { transform: rotate(-90deg); } + +#nmte-tips > .backdrop { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + max-width: none; + opacity: 0; +} diff --git a/app/utils/tooltip.ts b/app/utils/tooltip.ts index 0ffe1ef..dd2dfb9 100644 --- a/app/utils/tooltip.ts +++ b/app/utils/tooltip.ts @@ -192,6 +192,19 @@ export default ( if (!param) return; showTooltip(elem, typeof provider === "function" ? () => provider(param!) : provider); }); + elem.addEventListener("touchstart", (ev) => { + if (!param) return; + ev.preventDefault(); + showTooltip(elem, typeof provider === "function" ? () => provider(param!) : provider); + + const backdrop = document.createElement("div"); + backdrop.classList.add("backdrop"); + backdrop.addEventListener("touchstart", () => { + hideTooltip(); + backdrop.remove(); + }, { once: true }); + attachTip(backdrop); + }); return { update (p) { param = p; diff --git a/package.json b/package.json index 851dcd3..407d26b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neonmob-trade-enhancements", - "version": "3.3.1", + "version": "3.3.2", "private": true, "description": "Adds enhancements to improve trading and usage experience", "scripts": {