Browse Source

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
Thottyottyotty 2 years ago
parent
commit
e373fd0c00
1 changed files with 11 additions and 13 deletions
  1. 11 13
      script.js

+ 11 - 13
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);
 }