mirror of
				https://github.com/imfing/hextra.git
				synced 2025-10-30 21:40:16 -04:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			copilot/ad
			...
			9d350812f2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 9d350812f2 | ||
|   | 06eb8a66a1 | ||
|   | 081ad8b84f | ||
|   | 7593ef4ae4 | ||
|   | b70d729283 | 
| @@ -1,8 +1,43 @@ | ||||
| document.addEventListener("DOMContentLoaded", function () { | ||||
|   scrollToActiveItem(); | ||||
|   enableCollapsibles(); | ||||
|   initializeSidebar(); | ||||
| }); | ||||
|  | ||||
| function initializeSidebar() { | ||||
|   const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); | ||||
|   if (!sidebarScrollbar) return; | ||||
|  | ||||
|   enableCollapsibles(); | ||||
|   restoreSidebarPosition(sidebarScrollbar); | ||||
|  | ||||
|   const debouncedSave = debounce((position) => { | ||||
|     saveSidebarPosition(position); | ||||
|   }, 150); | ||||
|    | ||||
|   sidebarScrollbar.addEventListener('scroll', function() { | ||||
|     debouncedSave(this.scrollTop); | ||||
|   }); | ||||
|  | ||||
|   document.querySelectorAll('a').forEach(link => { | ||||
|     if (link.hostname === window.location.hostname) { | ||||
|       link.addEventListener('click', function(e) { | ||||
|         saveSidebarPosition(sidebarScrollbar.scrollTop); | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function debounce(func, wait) { | ||||
|   let timeout; | ||||
|   return function executedFunction(...args) { | ||||
|     const later = () => { | ||||
|       clearTimeout(timeout); | ||||
|       func(...args); | ||||
|     }; | ||||
|     clearTimeout(timeout); | ||||
|     timeout = setTimeout(later, wait); | ||||
|   }; | ||||
| } | ||||
|  | ||||
| function enableCollapsibles() { | ||||
|   const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); | ||||
|   buttons.forEach(function (button) { | ||||
| @@ -16,21 +51,16 @@ function enableCollapsibles() { | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function scrollToActiveItem() { | ||||
|   const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); | ||||
|   const activeItems = document.querySelectorAll(".sidebar-active-item"); | ||||
|   const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { | ||||
|     return activeItem.getBoundingClientRect().height > 0; | ||||
|   }); | ||||
|  | ||||
|   if (!visibleActiveItem) { | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   const yOffset = visibleActiveItem.clientHeight; | ||||
|   const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; | ||||
|   sidebarScrollbar.scrollTo({ | ||||
|     behavior: "instant", | ||||
|     top: yDistance - yOffset | ||||
|   }); | ||||
| function saveSidebarPosition(scrollPosition) { | ||||
|   localStorage.setItem('sidebarScrollPosition', scrollPosition); | ||||
| } | ||||
|  | ||||
| function restoreSidebarPosition(sidebarScrollbar) { | ||||
|   const savedPosition = localStorage.getItem('sidebarScrollPosition'); | ||||
|    | ||||
|   if (savedPosition !== null) { | ||||
|     requestAnimationFrame(() => { | ||||
|       sidebarScrollbar.scrollTop = parseInt(savedPosition); | ||||
|     }); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user