@@ -13,6 +13,15 @@ function showModal(event) {
13
13
}
14
14
lb . style . display = "block" ;
15
15
lb . focus ( )
16
+
17
+ const tabTxt2Img = gradioApp ( ) . getElementById ( "tab_txt2img" )
18
+ const tabImg2Img = gradioApp ( ) . getElementById ( "tab_img2img" )
19
+ // show the save button in modal only on txt2img or img2img tabs
20
+ if ( tabTxt2Img . style . display != "none" || tabImg2Img . style . display != "none" ) {
21
+ gradioApp ( ) . getElementById ( "modal_save" ) . style . display = "inline"
22
+ } else {
23
+ gradioApp ( ) . getElementById ( "modal_save" ) . style . display = "none"
24
+ }
16
25
event . stopPropagation ( )
17
26
}
18
27
@@ -81,6 +90,25 @@ function modalImageSwitch(offset) {
81
90
}
82
91
}
83
92
93
+ function saveImage ( ) {
94
+ const tabTxt2Img = gradioApp ( ) . getElementById ( "tab_txt2img" )
95
+ const tabImg2Img = gradioApp ( ) . getElementById ( "tab_img2img" )
96
+ const saveTxt2Img = "save_txt2img"
97
+ const saveImg2Img = "save_img2img"
98
+ if ( tabTxt2Img . style . display != "none" ) {
99
+ gradioApp ( ) . getElementById ( saveTxt2Img ) . click ( )
100
+ } else if ( tabImg2Img . style . display != "none" ) {
101
+ gradioApp ( ) . getElementById ( saveImg2Img ) . click ( )
102
+ } else {
103
+ console . error ( "missing implementation for saving modal of this type" )
104
+ }
105
+ }
106
+
107
+ function modalSaveImage ( event ) {
108
+ saveImage ( )
109
+ event . stopPropagation ( )
110
+ }
111
+
84
112
function modalNextImage ( event ) {
85
113
modalImageSwitch ( 1 )
86
114
event . stopPropagation ( )
@@ -93,6 +121,9 @@ function modalPrevImage(event) {
93
121
94
122
function modalKeyHandler ( event ) {
95
123
switch ( event . key ) {
124
+ case "s" :
125
+ saveImage ( )
126
+ break ;
96
127
case "ArrowLeft" :
97
128
modalPrevImage ( event )
98
129
break ;
@@ -198,6 +229,14 @@ document.addEventListener("DOMContentLoaded", function() {
198
229
modalTileImage . title = "Preview tiling" ;
199
230
modalControls . appendChild ( modalTileImage )
200
231
232
+ const modalSave = document . createElement ( "span" )
233
+ modalSave . className = "modalSave cursor"
234
+ modalSave . id = "modal_save"
235
+ modalSave . innerHTML = "🖫"
236
+ modalSave . addEventListener ( "click" , modalSaveImage , true )
237
+ modalSave . title = "Save Image(s)"
238
+ modalControls . appendChild ( modalSave )
239
+
201
240
const modalClose = document . createElement ( 'span' )
202
241
modalClose . className = 'modalClose cursor' ;
203
242
modalClose . innerHTML = '×'
0 commit comments