mirror of
				https://github.com/imfing/hextra.git
				synced 2025-10-31 09:24:52 -04:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			copilot/ad
			...
			1605d17971
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 1605d17971 | ||
|   | 06eb8a66a1 | ||
|   | 081ad8b84f | ||
|   | 7593ef4ae4 | ||
|   | b70d729283 | 
| @@ -1,8 +1,43 @@ | |||||||
| document.addEventListener("DOMContentLoaded", function () { | document.addEventListener("DOMContentLoaded", function () { | ||||||
|   scrollToActiveItem(); |   initializeSidebar(); | ||||||
|   enableCollapsibles(); |  | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | 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() { | function enableCollapsibles() { | ||||||
|   const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); |   const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); | ||||||
|   buttons.forEach(function (button) { |   buttons.forEach(function (button) { | ||||||
| @@ -16,21 +51,16 @@ function enableCollapsibles() { | |||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
| function scrollToActiveItem() { | function saveSidebarPosition(scrollPosition) { | ||||||
|   const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); |   localStorage.setItem('sidebarScrollPosition', scrollPosition); | ||||||
|   const activeItems = document.querySelectorAll(".sidebar-active-item"); | } | ||||||
|   const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { |  | ||||||
|     return activeItem.getBoundingClientRect().height > 0; | function restoreSidebarPosition(sidebarScrollbar) { | ||||||
|   }); |   const savedPosition = localStorage.getItem('sidebarScrollPosition'); | ||||||
|  |    | ||||||
|   if (!visibleActiveItem) { |   if (savedPosition !== null) { | ||||||
|     return; |     requestAnimationFrame(() => { | ||||||
|   } |       sidebarScrollbar.scrollTop = parseInt(savedPosition); | ||||||
|  |     }); | ||||||
|   const yOffset = visibleActiveItem.clientHeight; |   } | ||||||
|   const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; |  | ||||||
|   sidebarScrollbar.scrollTo({ |  | ||||||
|     behavior: "instant", |  | ||||||
|     top: yDistance - yOffset |  | ||||||
|   }); |  | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user