Skip to content

Commit

Permalink
refactored image paste handling to fill unset images successively, th…
Browse files Browse the repository at this point in the history
…en replace last existing image (fixes AUTOMATIC1111#981)
  • Loading branch information
Connum authored and AUTOMATIC1111 committed Sep 27, 2022
1 parent 8dcac9a commit c0b1177
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
24 changes: 15 additions & 9 deletions javascript/dragdrop.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,19 @@ window.addEventListener('paste', e => {
if ( ! isValidImageList( files ) ) {
return;
}
[...gradioApp().querySelectorAll('input[type=file][accept="image/x-png,image/gif,image/jpeg"]')]
.filter(input => !input.matches('.\\!hidden input[type=file]'))
.forEach(input => {
input.files = files;
input.dispatchEvent(new Event('change'))
});
[...gradioApp().querySelectorAll('[data-testid="image"]')]
.filter(imgWrap => !imgWrap.closest('.\\!hidden'))
.forEach(imgWrap => dropReplaceImage( imgWrap, files ));

const visibleImageFields = [...gradioApp().querySelectorAll('[data-testid="image"]')]
.filter(el => uiElementIsVisible(el));
if ( ! visibleImageFields.length ) {
return;
}

const firstFreeImageField = visibleImageFields
.filter(el => el.querySelector('input[type=file]'))?.[0];

dropReplaceImage(
firstFreeImageField ?
firstFreeImageField :
visibleImageFields[visibleImageFields.length - 1]
, files );
});
21 changes: 21 additions & 0 deletions script.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,24 @@ document.addEventListener("DOMContentLoaded", function() {
});
mutationObserver.observe( gradioApp(), { childList:true, subtree:true })
});

/**
* 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;
}

while( isVisible = el.closest('.tabitem')?.style.display !== 'none' ) {
if ( ! isVisible ) {
return false;
} else if ( el.parentElement ) {
el = el.parentElement
} else {
break;
}
}
return isVisible;
}

0 comments on commit c0b1177

Please sign in to comment.