Skip to content

Commit 1233bec

Browse files
Merge pull request #3798 from aurror/modal-save-button-and-shortcut
added save image button and a hotkey to Modal Image View
2 parents 02b5478 + 76086f6 commit 1233bec

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

javascript/imageviewer.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ function showModal(event) {
1313
}
1414
lb.style.display = "block";
1515
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+
}
1625
event.stopPropagation()
1726
}
1827

@@ -81,6 +90,25 @@ function modalImageSwitch(offset) {
8190
}
8291
}
8392

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+
84112
function modalNextImage(event) {
85113
modalImageSwitch(1)
86114
event.stopPropagation()
@@ -93,6 +121,9 @@ function modalPrevImage(event) {
93121

94122
function modalKeyHandler(event) {
95123
switch (event.key) {
124+
case "s":
125+
saveImage()
126+
break;
96127
case "ArrowLeft":
97128
modalPrevImage(event)
98129
break;
@@ -198,6 +229,14 @@ document.addEventListener("DOMContentLoaded", function() {
198229
modalTileImage.title = "Preview tiling";
199230
modalControls.appendChild(modalTileImage)
200231

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+
201240
const modalClose = document.createElement('span')
202241
modalClose.className = 'modalClose cursor';
203242
modalClose.innerHTML = '×'

modules/ui.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,6 @@ def create_ui(wrap_gradio_gpu_call):
715715
with gr.Group():
716716
custom_inputs = modules.scripts.scripts_txt2img.setup_ui(is_img2img=False)
717717

718-
719-
720718
txt2img_gallery, generation_info, html_info = create_output_panel("txt2img", opts.outdir_txt2img_samples)
721719

722720
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)

style.css

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,8 @@ input[type="range"]{
314314

315315
.modalControls {
316316
display: grid;
317-
grid-template-columns: 32px auto 1fr 32px;
318-
grid-template-areas: "zoom tile space close";
317+
grid-template-columns: 32px 32px 32px 1fr 32px;
318+
grid-template-areas: "zoom tile save space close";
319319
position: absolute;
320320
top: 0;
321321
left: 0;
@@ -333,6 +333,10 @@ input[type="range"]{
333333
grid-area: zoom;
334334
}
335335

336+
.modalSave {
337+
grid-area: save;
338+
}
339+
336340
.modalTileImage {
337341
grid-area: tile;
338342
}
@@ -346,8 +350,18 @@ input[type="range"]{
346350
cursor: pointer;
347351
}
348352

353+
.modalSave {
354+
color: white;
355+
font-size: 28px;
356+
margin-top: 8px;
357+
font-weight: bold;
358+
cursor: pointer;
359+
}
360+
349361
.modalClose:hover,
350362
.modalClose:focus,
363+
.modalSave:hover,
364+
.modalSave:focus,
351365
.modalZoom:hover,
352366
.modalZoom:focus {
353367
color: #999;

0 commit comments

Comments
 (0)