84 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| /* All the things */
 | |
| 
 | |
| let currentUrl = window.location.hostname;
 | |
| if (window.location.port) {
 | |
|     currentUrl += ':' + window.location.port
 | |
| }
 | |
| 
 | |
| /* Screenshots */
 | |
| const lightbox = document.getElementById("lightbox");
 | |
| 
 | |
| const showScreenshotOverlay = (e, el, index) => {
 | |
|     lightbox.classList.add('show');
 | |
|     document.addEventListener('keydown', nextScreenshotKeyboardListener);
 | |
|     return showScreenshot(e, index);
 | |
| };
 | |
| 
 | |
| const showScreenshot = (e, index) => {
 | |
|     const actualIndex = resolveScreenshotIndex(index);
 | |
|     lightbox.innerHTML = '<div class="close-lightbox"></div>' + screenshots[actualIndex].innerHTML;
 | |
|     lightbox.querySelector('img').onclick = (e) => { return showScreenshot(e,actualIndex+1); };
 | |
|     currentScreenshotIndex = actualIndex;
 | |
|     e.stopPropagation();
 | |
|     return false;
 | |
| };
 | |
| 
 | |
| const nextScreenshot = (e) => {
 | |
|     return showScreenshot(e, currentScreenshotIndex+1);
 | |
| };
 | |
| 
 | |
| const previousScreenshot = (e) => {
 | |
|     return showScreenshot(e, currentScreenshotIndex-1);
 | |
| };
 | |
| 
 | |
| const resolveScreenshotIndex = (index) => {
 | |
|     if (index < 0) {
 | |
|         return screenshots.length - 1;
 | |
|     } else if (index > screenshots.length - 1) {
 | |
|         return 0;
 | |
|     }
 | |
|     return index;
 | |
| };
 | |
| 
 | |
| const hideScreenshotOverlay = (e) => {
 | |
|     lightbox.classList.remove('show');
 | |
|     document.removeEventListener('keydown', nextScreenshotKeyboardListener);
 | |
| };
 | |
| 
 | |
| const nextScreenshotKeyboardListener = (e) => {
 | |
|     switch (e.keyCode) {
 | |
|         case 37:
 | |
|             previousScreenshot(e);
 | |
|             break;
 | |
|         case 39:
 | |
|             nextScreenshot(e);
 | |
|             break;
 | |
|     }
 | |
| };
 | |
| 
 | |
| let currentScreenshotIndex = 0;
 | |
| const screenshots = [...document.querySelectorAll("#screenshots a")];
 | |
| screenshots.forEach((el, index) => {
 | |
|     el.onclick = (e) => { return showScreenshotOverlay(e, el, index); };
 | |
| });
 | |
| 
 | |
| lightbox.onclick = hideScreenshotOverlay;
 | |
| 
 | |
| // Add anchor links
 | |
| document.querySelectorAll('.anchor').forEach((el) => {
 | |
|     if (el.hasAttribute('id')) {
 | |
|         const id = el.getAttribute('id');
 | |
|         const anchor = document.createElement('a');
 | |
|         anchor.innerHTML = `<a href="#${id}" class="anchorLink">#</a>`;
 | |
|         el.appendChild(anchor);
 | |
|     }
 | |
| });
 | |
| 
 | |
| // Change ntfy.sh url and protocol to match self-hosted one
 | |
| document.querySelectorAll('.ntfyUrl').forEach((el) => {
 | |
|     el.innerHTML = currentUrl;
 | |
| });
 | |
| document.querySelectorAll('.ntfyProtocol').forEach((el) => {
 | |
|     el.innerHTML = window.location.protocol + "//";
 | |
| });
 |