diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2022-09-17 17:30:25 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-17 17:30:25 +0000 |
commit | 23a0ec04c005957091ab35c26c4c31485e75d146 (patch) | |
tree | 30c3bddb9eede2520143da4aebcb02ff830bfd7c /script.js | |
parent | 1dd721d13661ddd80109c3fde5999a014190899e (diff) | |
parent | f9cae046cb0a676efeda2577761474e58c27abed (diff) | |
download | stable-diffusion-webui-gfx803-23a0ec04c005957091ab35c26c4c31485e75d146.tar.gz stable-diffusion-webui-gfx803-23a0ec04c005957091ab35c26c4c31485e75d146.tar.bz2 stable-diffusion-webui-gfx803-23a0ec04c005957091ab35c26c4c31485e75d146.zip |
Merge pull request #616 from dfaker/patch-3
Block event propagation when lightbox is triggered
Diffstat (limited to 'script.js')
-rw-r--r-- | script.js | 85 |
1 files changed, 78 insertions, 7 deletions
@@ -80,9 +80,57 @@ function closeModal() { gradioApp().getElementById("lightboxModal").style.display = "none"; } -function showModal(elem) { - gradioApp().getElementById("modalImage").src = elem.src - gradioApp().getElementById("lightboxModal").style.display = "block"; +function showModal(event) { + var source = event.target || event.srcElement; + gradioApp().getElementById("modalImage").src = source.src + 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") + + if(galleryButtons.length>1){ + var currentButton = gradioApp().querySelector(".gallery-item.transition-all.\\!ring-2") + + var result = -1 + galleryButtons.forEach(function(v, i){ if(v==currentButton) { result = i } }) + + 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) + } + } + +} + +function modalNextImage(event){ + modalImageSwitch(1) + event.stopPropagation() +} + +function modalPrevImage(event){ + modalImageSwitch(-1) + event.stopPropagation() +} + +function modalKeyHandler(event){ + switch (event.key) { + case "ArrowLeft": + modalPrevImage(event) + break; + case "ArrowRight": + modalNextImage(event) + break; + } } function showGalleryImage(){ @@ -92,12 +140,13 @@ function showGalleryImage(){ if(fullImg_preview != null){ fullImg_preview.forEach(function function_name(e) { if(e && e.parentElement.tagName == 'DIV'){ + e.style.cursor='pointer' - elemfunc = function(elem){ - elem.onclick = function(){showModal(elem)}; - } - elemfunc(e) + e.addEventListener('click', function (evt) { + showModal(evt) + + },true); } }); } @@ -181,13 +230,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); |