@ -1,5 +1,7 @@
// code related to showing and updating progressbar shown as the image is being made
global _progressbars = { }
galleries = { }
galleryObservers = { }
function check _progressbar ( id _part , id _progressbar , id _progressbar _span , id _skip , id _interrupt , id _preview , id _gallery ) {
var progressbar = gradioApp ( ) . getElementById ( id _progressbar )
@ -31,6 +33,9 @@ function check_progressbar(id_part, id_progressbar, id_progressbar_span, id_skip
preview . style . width = gallery . clientWidth + "px"
preview . style . height = gallery . clientHeight + "px"
//only watch gallery if there is a generation process going on
check _gallery ( id _gallery ) ;
var progressDiv = gradioApp ( ) . querySelectorAll ( '#' + id _progressbar _span ) . length > 0 ;
if ( ! progressDiv ) {
if ( skip ) {
@ -38,6 +43,12 @@ function check_progressbar(id_part, id_progressbar, id_progressbar_span, id_skip
}
interrupt . style . display = "none"
}
//disconnect observer once generation finished, so user can close selected image if they want
if ( galleryObservers [ id _gallery ] ) {
galleryObservers [ id _gallery ] . disconnect ( ) ;
galleries [ id _gallery ] = null ;
}
}
window . setTimeout ( function ( ) { requestMoreProgress ( id _part , id _progressbar _span , id _skip , id _interrupt ) } , 500 )
@ -46,6 +57,27 @@ function check_progressbar(id_part, id_progressbar, id_progressbar_span, id_skip
}
}
function check _gallery ( id _gallery ) {
let gallery = gradioApp ( ) . getElementById ( id _gallery )
// if gallery has no change, no need to setting up observer again.
if ( gallery && galleries [ id _gallery ] !== gallery ) {
galleries [ id _gallery ] = gallery ;
if ( galleryObservers [ id _gallery ] ) {
galleryObservers [ id _gallery ] . disconnect ( ) ;
}
galleryObservers [ id _gallery ] = new MutationObserver ( function ( ) {
let galleryButtons = gradioApp ( ) . querySelectorAll ( '#' + id _gallery + ' .gallery-item' )
let galleryBtnSelected = gradioApp ( ) . querySelector ( '#' + id _gallery + ' .gallery-item.\\!ring-2' )
if ( galleryButtons . length === 1 && ! galleryBtnSelected ) {
//automatically open when there is only 1 gallery btn, and was previously selected
galleryButtons [ 0 ] . click ( ) ;
console . log ( 'clicked' ) ;
}
} )
galleryObservers [ id _gallery ] . observe ( gallery , { childList : true , subtree : false } )
}
}
onUiUpdate ( function ( ) {
check _progressbar ( 'txt2img' , 'txt2img_progressbar' , 'txt2img_progress_span' , 'txt2img_skip' , 'txt2img_interrupt' , 'txt2img_preview' , 'txt2img_gallery' )
check _progressbar ( 'img2img' , 'img2img_progressbar' , 'img2img_progress_span' , 'img2img_skip' , 'img2img_interrupt' , 'img2img_preview' , 'img2img_gallery' )