From e373fd0c009beed4cd78af78583bf71b425b118e Mon Sep 17 00:00:00 2001 From: Thottyottyotty Date: Thu, 18 May 2023 16:09:09 -0700 Subject: rewrite uiElementIsVisible rewrite visibility checking to be more generic/cleaner as well as add functionality to check if the element is scrolled on screen for more intuitive paste-target selection --- script.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'script.js') diff --git a/script.js b/script.js index db4d9157..53390be3 100644 --- a/script.js +++ b/script.js @@ -92,19 +92,17 @@ document.addEventListener('keydown', function(e) { * checks that a UI element is not in another hidden element or tab content */ function uiElementIsVisible(el) { - let isVisible = !el.closest('.\\!hidden'); - if (!isVisible) { - return false; + if (el === document) { + return true; } - while ((isVisible = el.closest('.tabitem')?.style.display) !== 'none') { - if (!isVisible) { - return false; - } else if (el.parentElement) { - el = el.parentElement; - } else { - break; - } - } - return isVisible; + const computedStyle = getComputedStyle(el); + const isVisible = computedStyle.display !== 'none'; + + const clRect = el.getBoundingClientRect(); + const windowHeight = window.innerHeight; + const onScreen = clRect.bottom > 0 && clRect.top < windowHeight; + + if (!isVisible || !onScreen) return false; + return uiElementIsVisible(el.parentNode); } -- cgit v1.2.3 From 7b61acbd35e9db43a5279a42afad3f3dc68462c9 Mon Sep 17 00:00:00 2001 From: Thottyottyotty Date: Thu, 18 May 2023 23:43:01 -0700 Subject: split visibility method and sort instead split out the visibility method for pasting and use a sort inside the paste handler to prioritize on-screen fields rather than targeting ONLY on screen fields --- script.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'script.js') diff --git a/script.js b/script.js index 53390be3..f7612779 100644 --- a/script.js +++ b/script.js @@ -99,10 +99,14 @@ function uiElementIsVisible(el) { const computedStyle = getComputedStyle(el); const isVisible = computedStyle.display !== 'none'; + if (!isVisible) return false; + return uiElementIsVisible(el.parentNode); +} + +function uiElementInSight(el) { const clRect = el.getBoundingClientRect(); const windowHeight = window.innerHeight; - const onScreen = clRect.bottom > 0 && clRect.top < windowHeight; + const isOnScreen = clRect.bottom > 0 && clRect.top < windowHeight; - if (!isVisible || !onScreen) return false; - return uiElementIsVisible(el.parentNode); + return isOnScreen; } -- cgit v1.2.3