@@ -3,8 +3,21 @@ global_progressbars = {}
3
3
galleries = { }
4
4
galleryObservers = { }
5
5
6
+ // this tracks laumnches of window.setTimeout for progressbar to prevent starting a new timeout when the previous is still running
7
+ timeoutIds = { }
8
+
6
9
function check_progressbar ( id_part , id_progressbar , id_progressbar_span , id_skip , id_interrupt , id_preview , id_gallery ) {
7
- var progressbar = gradioApp ( ) . getElementById ( id_progressbar )
10
+ // gradio 3.8's enlightened approach allows them to create two nested div elements inside each other with same id
11
+ // every time you use gr.HTML(elem_id='xxx'), so we handle this here
12
+ var progressbar = gradioApp ( ) . querySelector ( "#" + id_progressbar + " #" + id_progressbar )
13
+ var progressbarParent
14
+ if ( progressbar ) {
15
+ progressbarParent = gradioApp ( ) . querySelector ( "#" + id_progressbar )
16
+ } else {
17
+ progressbar = gradioApp ( ) . getElementById ( id_progressbar )
18
+ progressbarParent = null
19
+ }
20
+
8
21
var skip = id_skip ? gradioApp ( ) . getElementById ( id_skip ) : null
9
22
var interrupt = gradioApp ( ) . getElementById ( id_interrupt )
10
23
@@ -26,18 +39,26 @@ function check_progressbar(id_part, id_progressbar, id_progressbar_span, id_skip
26
39
global_progressbars [ id_progressbar ] = progressbar
27
40
28
41
var mutationObserver = new MutationObserver ( function ( m ) {
42
+ if ( timeoutIds [ id_part ] ) return ;
43
+
29
44
preview = gradioApp ( ) . getElementById ( id_preview )
30
45
gallery = gradioApp ( ) . getElementById ( id_gallery )
31
46
32
47
if ( preview != null && gallery != null ) {
33
48
preview . style . width = gallery . clientWidth + "px"
34
49
preview . style . height = gallery . clientHeight + "px"
50
+ if ( progressbarParent ) progressbar . style . width = progressbarParent . clientWidth + "px"
35
51
36
52
//only watch gallery if there is a generation process going on
37
53
check_gallery ( id_gallery ) ;
38
54
39
55
var progressDiv = gradioApp ( ) . querySelectorAll ( '#' + id_progressbar_span ) . length > 0 ;
40
- if ( ! progressDiv ) {
56
+ if ( progressDiv ) {
57
+ timeoutIds [ id_part ] = window . setTimeout ( function ( ) {
58
+ timeoutIds [ id_part ] = null
59
+ requestMoreProgress ( id_part , id_progressbar_span , id_skip , id_interrupt )
60
+ } , 500 )
61
+ } else {
41
62
if ( skip ) {
42
63
skip . style . display = "none"
43
64
}
@@ -47,13 +68,10 @@ function check_progressbar(id_part, id_progressbar, id_progressbar_span, id_skip
47
68
if ( galleryObservers [ id_gallery ] ) {
48
69
galleryObservers [ id_gallery ] . disconnect ( ) ;
49
70
galleries [ id_gallery ] = null ;
50
- }
71
+ }
51
72
}
52
-
53
-
54
73
}
55
74
56
- window . setTimeout ( function ( ) { requestMoreProgress ( id_part , id_progressbar_span , id_skip , id_interrupt ) } , 500 )
57
75
} ) ;
58
76
mutationObserver . observe ( progressbar , { childList :true , subtree :true } )
59
77
}
0 commit comments