added save button and shortcut (s) to Modal View

This commit is contained in:
Florian Horn 2022-10-27 16:20:01 +02:00
parent 737eb28fac
commit 0995e879ce
3 changed files with 50 additions and 5 deletions

View File

@ -81,6 +81,25 @@ function modalImageSwitch(offset) {
} }
} }
function saveImage(){
const tabTxt2Img = gradioApp().getElementById("tab_txt2img")
const tabImg2Img = gradioApp().getElementById("tab_img2img")
const saveTxt2Img = "save_txt2img"
const saveImg2Img = "save_img2img"
if (tabTxt2Img.style["display"] != "none") {
gradioApp().getElementById(saveTxt2Img).click()
} else if (tabImg2Img.style["display"] != "none") {
gradioApp().getElementById(saveImg2Img).click()
} else {
console.error("missing implementation for saving modal of this type")
}
}
function modalSaveImage(event) {
saveImage()
event.stopPropagation()
}
function modalNextImage(event) { function modalNextImage(event) {
modalImageSwitch(1) modalImageSwitch(1)
event.stopPropagation() event.stopPropagation()
@ -93,6 +112,9 @@ function modalPrevImage(event) {
function modalKeyHandler(event) { function modalKeyHandler(event) {
switch (event.key) { switch (event.key) {
case "s":
saveImage()
break;
case "ArrowLeft": case "ArrowLeft":
modalPrevImage(event) modalPrevImage(event)
break; break;
@ -198,6 +220,13 @@ document.addEventListener("DOMContentLoaded", function() {
modalTileImage.title = "Preview tiling"; modalTileImage.title = "Preview tiling";
modalControls.appendChild(modalTileImage) modalControls.appendChild(modalTileImage)
const modalSave = document.createElement("span")
modalSave.className = "modalSave cursor"
modalSave.innerHTML = "🖫"
modalSave.addEventListener("click", modalSaveImage, true)
modalSave.title = "Save Image(s)"
modalControls.appendChild(modalSave)
const modalClose = document.createElement('span') const modalClose = document.createElement('span')
modalClose.className = 'modalClose cursor'; modalClose.className = 'modalClose cursor';
modalClose.innerHTML = '×' modalClose.innerHTML = '×'

View File

@ -630,7 +630,7 @@ def create_ui(wrap_gradio_gpu_call):
import modules.img2img import modules.img2img
import modules.txt2img import modules.txt2img
with gr.Blocks(analytics_enabled=False) as txt2img_interface: with gr.Blocks(analytics_enabled=False) as txt2img_interface:
txt2img_prompt, roll, txt2img_prompt_style, txt2img_negative_prompt, txt2img_prompt_style2, submit, _, _, txt2img_prompt_style_apply, txt2img_save_style, txt2img_paste, token_counter, token_button = create_toprow(is_img2img=False) txt2img_prompt, roll, txt2img_prompt_style, txt2img_negative_prompt, txt2img_prompt_style2, submit, _, _, txt2img_prompt_style_apply, txt2img_save_style, txt2img_paste, token_counter, token_button = create_toprow(is_img2img=False)
dummy_component = gr.Label(visible=False) dummy_component = gr.Label(visible=False)
@ -683,7 +683,8 @@ def create_ui(wrap_gradio_gpu_call):
with gr.Column(): with gr.Column():
with gr.Row(): with gr.Row():
save = gr.Button('Save') saveButtonId = 'save_txt2img'
save = gr.Button('Save', elem_id=saveButtonId)
send_to_img2img = gr.Button('Send to img2img') send_to_img2img = gr.Button('Send to img2img')
send_to_inpaint = gr.Button('Send to inpaint') send_to_inpaint = gr.Button('Send to inpaint')
send_to_extras = gr.Button('Send to extras') send_to_extras = gr.Button('Send to extras')
@ -901,7 +902,8 @@ def create_ui(wrap_gradio_gpu_call):
with gr.Column(): with gr.Column():
with gr.Row(): with gr.Row():
save = gr.Button('Save') saveButtonId = 'save_img2img'
save = gr.Button('Save', elem_id=saveButtonId)
img2img_send_to_img2img = gr.Button('Send to img2img') img2img_send_to_img2img = gr.Button('Send to img2img')
img2img_send_to_inpaint = gr.Button('Send to inpaint') img2img_send_to_inpaint = gr.Button('Send to inpaint')
img2img_send_to_extras = gr.Button('Send to extras') img2img_send_to_extras = gr.Button('Send to extras')

View File

@ -314,8 +314,8 @@ input[type="range"]{
.modalControls { .modalControls {
display: grid; display: grid;
grid-template-columns: 32px auto 1fr 32px; grid-template-columns: 32px auto 32px 1fr 32px;
grid-template-areas: "zoom tile space close"; grid-template-areas: "zoom tile save space close";
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -333,6 +333,10 @@ input[type="range"]{
grid-area: zoom; grid-area: zoom;
} }
.modalSave {
grid-area: save;
}
.modalTileImage { .modalTileImage {
grid-area: tile; grid-area: tile;
} }
@ -346,8 +350,18 @@ input[type="range"]{
cursor: pointer; cursor: pointer;
} }
.modalSave {
color: white;
font-size: 30px;
margin-top: 6px;
font-weight: bold;
cursor: pointer;
}
.modalClose:hover, .modalClose:hover,
.modalClose:focus, .modalClose:focus,
.modalSave:hover,
.modalSave:focus,
.modalZoom:hover, .modalZoom:hover,
.modalZoom:focus { .modalZoom:focus {
color: #999; color: #999;