diff options
author | DepFA <35278260+dfaker@users.noreply.github.com> | 2022-09-17 16:58:33 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-17 16:58:33 +0000 |
commit | 0e5527b4df6199d52aa6a424dcf95954cfd87d1f (patch) | |
tree | 317a52deda89ebc85d8ba87c9627d9c957c3903e /script.js | |
parent | fb668c58ef9bfe7ab63af0a70c27c5ff8a70cf64 (diff) | |
download | stable-diffusion-webui-gfx803-0e5527b4df6199d52aa6a424dcf95954cfd87d1f.tar.gz stable-diffusion-webui-gfx803-0e5527b4df6199d52aa6a424dcf95954cfd87d1f.tar.bz2 stable-diffusion-webui-gfx803-0e5527b4df6199d52aa6a424dcf95954cfd87d1f.zip |
Add previous and next to modal with key shortcuts
Diffstat (limited to 'script.js')
-rw-r--r-- | script.js | 78 |
1 files changed, 59 insertions, 19 deletions
@@ -83,35 +83,53 @@ function closeModal() { function showModal(event) { var source = event.target || event.srcElement; gradioApp().getElementById("modalImage").src = source.src - gradioApp().getElementById("lightboxModal").style.display = "block"; + var lb = gradioApp().getElementById("lightboxModal") + lb.style.display = "block"; + lb.focus() event.stopPropagation() } +function negmod(n, m) { + return ((n % m) + m) % m; +} + +function modalImageSwitch(offset){ + var galleryButtons = gradioApp().querySelectorAll(".gallery-item.transition-all") -function showGalleryImage(){ - setTimeout(function() { - fullImg_preview = gradioApp().querySelectorAll('img.w-full.object-contain') - - if(fullImg_preview != null){ - fullImg_preview.forEach(function function_name(e) { - if(e && e.parentElement.tagName == 'DIV'){ + if(galleryButtons.length>1){ + var currentButton = gradioApp().querySelector(".gallery-item.transition-all.\\!ring-2") - e.style.cursor='pointer' + var result = -1 + galleryButtons.forEach(function(v, i){ if(v==currentButton) { result = i } }) - e.addEventListener('click', function (evt) { - showModal(evt) + if(result != -1){ + nextButton = galleryButtons[negmod((result+offset),galleryButtons.length)] + nextButton.click() + gradioApp().getElementById("modalImage").src = nextButton.children[0].src + setTimeout( function(){gradioApp().getElementById("lightboxModal").focus()},10) + } + } - },true); - } - }); - } +} - }, 100); +function modalNextImage(event){ + modalImageSwitch(1) + event.stopPropagation() } -function galleryImageHandler(e){ - if(e && e.parentElement.tagName == 'BUTTON'){ - e.onclick = showGalleryImage; +function modalPrevImage(event){ + modalImageSwitch(-1) + event.stopPropagation() +} + +function modalKeyHandler(event){ + switch (event.key) { + case "ArrowLeft": + modalPrevImage(event) + break; + case "ArrowRight": + modalNextImage(event) + break; } } @@ -185,13 +203,35 @@ document.addEventListener("DOMContentLoaded", function() { modalClose.innerHTML = '×' modalClose.onclick = closeModal; modal.id = "lightboxModal"; + modal.tabIndex=0 + modal.addEventListener('keydown', modalKeyHandler, true) modal.appendChild(modalClose) const modalImage = document.createElement('img') modalImage.id = 'modalImage'; modalImage.onclick = closeModal; + modalImage.tabIndex=0 + modalImage.addEventListener('keydown', modalKeyHandler, true) modal.appendChild(modalImage) + const modalPrev = document.createElement('a') + modalPrev.className = 'modalPrev'; + modalPrev.innerHTML = '❮' + modalPrev.tabIndex=0 + modalPrev.addEventListener('click',modalPrevImage,true); + modalPrev.addEventListener('keydown', modalKeyHandler, true) + modal.appendChild(modalPrev) + + const modalNext = document.createElement('a') + modalNext.className = 'modalNext'; + modalNext.innerHTML = '❯' + modalNext.tabIndex=0 + modalNext.addEventListener('click',modalNextImage,true); + modalNext.addEventListener('keydown', modalKeyHandler, true) + + modal.appendChild(modalNext) + + gradioApp().getRootNode().appendChild(modal) document.body.appendChild(modalFragment); |