diff --git a/main.meta.js b/main.meta.js index f48b992..0e87f2b 100644 --- a/main.meta.js +++ b/main.meta.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.70 +// @version 0.71 // @description uhh // @author You // @match https://boards.4channel.org/* diff --git a/main.user.js b/main.user.js index 8c43532..07ce6ba 100644 --- a/main.user.js +++ b/main.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.70 +// @version 0.71 // @description uhh // @author You // @match https://boards.4channel.org/* @@ -14455,7 +14455,10 @@ $$invalidate(3, isAudio = type.mime.startsWith("audio/")); $$invalidate(2, isImage = type.mime.startsWith("image/")); if (hovering) { - setTimeout(recompute, 10); + setTimeout(() => { + recompute(); + hoverUpdate(); + }, 20); } } async function bepis() { @@ -14521,7 +14524,9 @@ if (isVideo) hoverVideo.pause(); } + let lastev; function hoverUpdate(ev) { + lastev = lastev || ev; if ($settings.dh) return; if (!contracted) @@ -14529,7 +14534,7 @@ const [sw, sh] = [visualViewport.width, visualViewport.height]; let width = dims[0]; let height = dims[1] + 25; - let { clientX, clientY } = ev; + let { clientX, clientY } = ev || lastev; let top = Math.max(0, clientY * (sh - height) / sh); let threshold = sw / 2; let marginX = (clientX <= threshold ? clientX : sw - clientX) + 45; diff --git a/src/Embedding.svelte b/src/Embedding.svelte index 8202ce3..7d022e2 100644 --- a/src/Embedding.svelte +++ b/src/Embedding.svelte @@ -71,7 +71,10 @@ isImage = type.mime.startsWith('image/') if (hovering) { // reset hovering to recompute proper image coordinates - setTimeout(recompute, 10); + setTimeout(() => { + recompute(); + hoverUpdate(); + }, 20); } } @@ -150,14 +153,16 @@ if (isVideo) hoverVideo.pause() } - function hoverUpdate(ev: MouseEvent) { + let lastev: MouseEvent | undefined; + function hoverUpdate(ev?: MouseEvent) { + lastev = lastev || ev; if ($settings.dh) return; if (!contracted) return const [sw, sh] = [visualViewport.width, visualViewport.height] // shamelessly stolen from 4chanX let width = dims[0] let height = dims[1] + 25 - let { clientX, clientY } = ev + let { clientX, clientY } = (ev || lastev!) let top = Math.max(0, (clientY * (sh - height)) / sh) let threshold = sw / 2 let marginX: number | string =