aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--javascript/dragdrop.js5
-rw-r--r--script.js28
2 files changed, 19 insertions, 14 deletions
diff --git a/javascript/dragdrop.js b/javascript/dragdrop.js
index e316a365..398a33f9 100644
--- a/javascript/dragdrop.js
+++ b/javascript/dragdrop.js
@@ -81,7 +81,10 @@ window.addEventListener('paste', e => {
}
const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid="image"]')]
- .filter(el => uiElementIsVisible(el));
+ .filter(el => uiElementIsVisible(el))
+ .sort((a,b) => uiElementInSight(b) - uiElementInSight(a));
+
+
if (!visibleImageFields.length) {
return;
}
diff --git a/script.js b/script.js
index db4d9157..f7612779 100644
--- a/script.js
+++ b/script.js
@@ -92,19 +92,21 @@ 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';
+
+ if (!isVisible) return false;
+ return uiElementIsVisible(el.parentNode);
+}
+
+function uiElementInSight(el) {
+ const clRect = el.getBoundingClientRect();
+ const windowHeight = window.innerHeight;
+ const isOnScreen = clRect.bottom > 0 && clRect.top < windowHeight;
+
+ return isOnScreen;
}