| 
									
										
										
										
											2022-09-18 09:00:06 +03:00
										 |  |  | // A full size 'lightbox' preview modal shown when left clicking on gallery previews
 | 
					
						
							| 
									
										
										
										
											2022-09-13 00:44:08 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  | function closeModal() { | 
					
						
							|  |  |  |   gradioApp().getElementById("lightboxModal").style.display = "none"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 15:29:06 +01:00
										 |  |  | function showModal(event) { | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |   const source = event.target || event.srcElement; | 
					
						
							|  |  |  |   const modalImage = gradioApp().getElementById("modalImage") | 
					
						
							|  |  |  |   const lb = gradioApp().getElementById("lightboxModal") | 
					
						
							|  |  |  |   modalImage.src = source.src | 
					
						
							|  |  |  |   if (modalImage.style.display === 'none') { | 
					
						
							|  |  |  |     lb.style.setProperty('background-image', 'url(' + source.src + ')'); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |   lb.style.display = "block"; | 
					
						
							|  |  |  |   lb.focus() | 
					
						
							| 
									
										
										
										
											2022-09-17 15:29:06 +01:00
										 |  |  |   event.stopPropagation() | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  | function negmod(n, m) { | 
					
						
							|  |  |  |   return ((n % m) + m) % m; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function modalImageSwitch(offset){ | 
					
						
							| 
									
										
										
										
											2022-09-23 21:29:01 +01:00
										 |  |  |   var allgalleryButtons = gradioApp().querySelectorAll(".gallery-item.transition-all") | 
					
						
							|  |  |  |   var galleryButtons = [] | 
					
						
							|  |  |  |   allgalleryButtons.forEach(function(elem){ | 
					
						
							|  |  |  |     if(elem.parentElement.offsetParent){ | 
					
						
							|  |  |  |         galleryButtons.push(elem); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }) | 
					
						
							| 
									
										
										
										
											2022-09-17 15:29:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |   if(galleryButtons.length>1){ | 
					
						
							| 
									
										
										
										
											2022-09-23 21:29:01 +01:00
										 |  |  |       var allcurrentButtons = gradioApp().querySelectorAll(".gallery-item.transition-all.\\!ring-2") | 
					
						
							|  |  |  |       var currentButton = null | 
					
						
							|  |  |  |       allcurrentButtons.forEach(function(elem){ | 
					
						
							|  |  |  |         if(elem.parentElement.offsetParent){ | 
					
						
							|  |  |  |             currentButton = elem; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }) | 
					
						
							| 
									
										
										
										
											2022-09-17 15:29:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |       var result = -1 | 
					
						
							|  |  |  |       galleryButtons.forEach(function(v, i){ if(v==currentButton) { result = i } }) | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |       if(result != -1){ | 
					
						
							|  |  |  |         nextButton = galleryButtons[negmod((result+offset),galleryButtons.length)] | 
					
						
							|  |  |  |         nextButton.click() | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |         const modalImage = gradioApp().getElementById("modalImage"); | 
					
						
							|  |  |  |         const modal = gradioApp().getElementById("lightboxModal"); | 
					
						
							|  |  |  |         modalImage.src = nextButton.children[0].src; | 
					
						
							|  |  |  |         if (modalImage.style.display === 'none') { | 
					
						
							|  |  |  |             modal.style.setProperty('background-image', `url(${modalImage.src})`) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         setTimeout( function(){modal.focus()},10) | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |       } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  | function modalNextImage(event){ | 
					
						
							|  |  |  |   modalImageSwitch(1) | 
					
						
							|  |  |  |   event.stopPropagation() | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  | function modalPrevImage(event){ | 
					
						
							|  |  |  |   modalImageSwitch(-1)   | 
					
						
							|  |  |  |   event.stopPropagation() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function modalKeyHandler(event){ | 
					
						
							|  |  |  |     switch (event.key) { | 
					
						
							|  |  |  |         case "ArrowLeft": | 
					
						
							|  |  |  |             modalPrevImage(event) | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         case "ArrowRight": | 
					
						
							|  |  |  |             modalNextImage(event) | 
					
						
							|  |  |  |             break; | 
					
						
							| 
									
										
										
										
											2022-09-18 11:42:55 -05:00
										 |  |  |         case "Escape": | 
					
						
							|  |  |  |             closeModal(); | 
					
						
							|  |  |  |             break; | 
					
						
							| 
									
										
										
										
											2022-09-17 03:26:47 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 18:03:52 +01:00
										 |  |  | function showGalleryImage(){ | 
					
						
							|  |  |  |     setTimeout(function() { | 
					
						
							|  |  |  |         fullImg_preview = gradioApp().querySelectorAll('img.w-full.object-contain') | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         if(fullImg_preview != null){ | 
					
						
							|  |  |  |             fullImg_preview.forEach(function function_name(e) { | 
					
						
							| 
									
										
										
										
											2022-10-08 16:01:34 +08:00
										 |  |  |                 if (e.dataset.modded) | 
					
						
							|  |  |  |                     return; | 
					
						
							|  |  |  |                 e.dataset.modded = true; | 
					
						
							| 
									
										
										
										
											2022-09-17 18:03:52 +01:00
										 |  |  |                 if(e && e.parentElement.tagName == 'DIV'){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     e.style.cursor='pointer' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     e.addEventListener('click', function (evt) { | 
					
						
							| 
									
										
										
										
											2022-09-18 22:25:18 +03:00
										 |  |  |                         if(!opts.js_modal_lightbox) return; | 
					
						
							| 
									
										
										
										
											2022-10-08 15:12:24 -04:00
										 |  |  |                         modalZoomSet(gradioApp().getElementById('modalImage'), opts.js_modal_lightbox_initially_zoomed) | 
					
						
							| 
									
										
										
										
											2022-09-18 22:25:18 +03:00
										 |  |  |                         showModal(evt) | 
					
						
							| 
									
										
										
										
											2022-09-17 18:03:52 +01:00
										 |  |  |                     },true); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     }, 100); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-19 17:16:04 +03:00
										 |  |  | function modalZoomSet(modalImage, enable){ | 
					
						
							|  |  |  |     if( enable ){ | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  |         modalImage.classList.add('modalImageFullscreen'); | 
					
						
							| 
									
										
										
										
											2022-09-19 17:16:04 +03:00
										 |  |  |     } else{ | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  |         modalImage.classList.remove('modalImageFullscreen'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-19 17:16:04 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function modalZoomToggle(event){ | 
					
						
							|  |  |  |     modalImage = gradioApp().getElementById("modalImage"); | 
					
						
							|  |  |  |     modalZoomSet(modalImage, !modalImage.classList.contains('modalImageFullscreen')) | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  |     event.stopPropagation() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  | function modalTileImageToggle(event){ | 
					
						
							|  |  |  |     const modalImage = gradioApp().getElementById("modalImage"); | 
					
						
							|  |  |  |     const modal = gradioApp().getElementById("lightboxModal"); | 
					
						
							|  |  |  |     const isTiling = modalImage.style.display === 'none'; | 
					
						
							|  |  |  |     if (isTiling) { | 
					
						
							|  |  |  |         modalImage.style.display = 'block'; | 
					
						
							|  |  |  |         modal.style.setProperty('background-image', 'none') | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         modalImage.style.display = 'none'; | 
					
						
							|  |  |  |         modal.style.setProperty('background-image', `url(${modalImage.src})`) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     event.stopPropagation() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 18:03:52 +01:00
										 |  |  | function galleryImageHandler(e){ | 
					
						
							|  |  |  |     if(e && e.parentElement.tagName == 'BUTTON'){ | 
					
						
							|  |  |  |         e.onclick = showGalleryImage; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-18 08:37:03 +03:00
										 |  |  | onUiUpdate(function(){ | 
					
						
							| 
									
										
										
										
											2022-09-19 14:05:30 +01:00
										 |  |  |     fullImg_preview = gradioApp().querySelectorAll('img.w-full') | 
					
						
							|  |  |  |         if(fullImg_preview != null){ | 
					
						
							|  |  |  | 	    fullImg_preview.forEach(galleryImageHandler); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-18 08:37:03 +03:00
										 |  |  | }) | 
					
						
							| 
									
										
										
										
											2022-08-31 22:19:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | document.addEventListener("DOMContentLoaded", function() { | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  |     const modalFragment = document.createDocumentFragment(); | 
					
						
							|  |  |  |     const modal = document.createElement('div') | 
					
						
							|  |  |  |     modal.onclick = closeModal; | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  |     modal.id = "lightboxModal"; | 
					
						
							|  |  |  |     modal.tabIndex=0 | 
					
						
							|  |  |  |     modal.addEventListener('keydown', modalKeyHandler, true) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |     const modalControls = document.createElement('div') | 
					
						
							|  |  |  |     modalControls.className = 'modalControls gradio-container'; | 
					
						
							|  |  |  |     modal.append(modalControls); | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  |     const modalZoom = document.createElement('span') | 
					
						
							|  |  |  |     modalZoom.className = 'modalZoom cursor'; | 
					
						
							|  |  |  |     modalZoom.innerHTML = '⤡' | 
					
						
							|  |  |  |     modalZoom.addEventListener('click', modalZoomToggle, true) | 
					
						
							| 
									
										
										
										
											2022-09-21 14:22:16 +03:00
										 |  |  |     modalZoom.title = "Toggle zoomed view"; | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |     modalControls.appendChild(modalZoom) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-21 14:22:16 +03:00
										 |  |  |     const modalTileImage = document.createElement('span') | 
					
						
							|  |  |  |     modalTileImage.className = 'modalTileImage cursor'; | 
					
						
							|  |  |  |     modalTileImage.innerHTML = '⊞' | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |     modalTileImage.addEventListener('click', modalTileImageToggle, true) | 
					
						
							| 
									
										
										
										
											2022-09-21 14:22:16 +03:00
										 |  |  |     modalTileImage.title = "Preview tiling"; | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |     modalControls.appendChild(modalTileImage) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const modalClose = document.createElement('span') | 
					
						
							|  |  |  |     modalClose.className = 'modalClose cursor'; | 
					
						
							|  |  |  |     modalClose.innerHTML = '×' | 
					
						
							|  |  |  |     modalClose.onclick = closeModal; | 
					
						
							| 
									
										
										
										
											2022-09-21 14:22:16 +03:00
										 |  |  |     modalClose.title = "Close image viewer"; | 
					
						
							| 
									
										
										
										
											2022-09-21 03:31:07 -05:00
										 |  |  |     modalControls.appendChild(modalClose) | 
					
						
							| 
									
										
										
										
											2022-09-19 02:35:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  |     const modalImage = document.createElement('img') | 
					
						
							|  |  |  |     modalImage.id = 'modalImage'; | 
					
						
							|  |  |  |     modalImage.onclick = closeModal; | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |     modalImage.tabIndex=0 | 
					
						
							|  |  |  |     modalImage.addEventListener('keydown', modalKeyHandler, true) | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  |     modal.appendChild(modalImage) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 17:58:33 +01:00
										 |  |  |     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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-17 01:03:03 +01:00
										 |  |  |     gradioApp().getRootNode().appendChild(modal) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     document.body.appendChild(modalFragment); | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2022-08-31 22:19:30 +03:00
										 |  |  | }); |