mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// SPDX-License-Identifier: MIT
 | 
						|
/**
 | 
						|
 | 
						|
Doxygen Awesome
 | 
						|
https://github.com/jothepro/doxygen-awesome-css
 | 
						|
 | 
						|
Copyright (c) 2022 - 2025 jothepro
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
class DoxygenAwesomeInteractiveToc {
 | 
						|
    static topOffset = 38
 | 
						|
    static hideMobileMenu = true
 | 
						|
    static headers = []
 | 
						|
 | 
						|
    static init() {
 | 
						|
        window.addEventListener("load", () => {
 | 
						|
            let toc = document.querySelector(".contents > .toc")
 | 
						|
            if(toc) {
 | 
						|
                toc.classList.add("interactive")
 | 
						|
                if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) {
 | 
						|
                    toc.classList.add("open")
 | 
						|
                }
 | 
						|
                document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => {
 | 
						|
                    if(toc.classList.contains("open")) {
 | 
						|
                        toc.classList.remove("open")
 | 
						|
                    } else {
 | 
						|
                        toc.classList.add("open")
 | 
						|
                    }
 | 
						|
                })
 | 
						|
 | 
						|
                document.querySelectorAll(".contents > .toc > ul a").forEach((node) => {
 | 
						|
                    let id = node.getAttribute("href").substring(1)
 | 
						|
                    DoxygenAwesomeInteractiveToc.headers.push({
 | 
						|
                        node: node,
 | 
						|
                        headerNode: document.getElementById(id)
 | 
						|
                    })
 | 
						|
 | 
						|
                    document.getElementById("doc-content")?.addEventListener("scroll",this.throttle(DoxygenAwesomeInteractiveToc.update, 100))
 | 
						|
                })
 | 
						|
                DoxygenAwesomeInteractiveToc.update()
 | 
						|
            }
 | 
						|
        })
 | 
						|
    }
 | 
						|
 | 
						|
    static update() {
 | 
						|
        let active = DoxygenAwesomeInteractiveToc.headers[0]?.node
 | 
						|
        DoxygenAwesomeInteractiveToc.headers.forEach((header) => {
 | 
						|
            let position = header.headerNode.getBoundingClientRect().top
 | 
						|
            header.node.classList.remove("active")
 | 
						|
            header.node.classList.remove("aboveActive")
 | 
						|
            if(position < DoxygenAwesomeInteractiveToc.topOffset) {
 | 
						|
                active = header.node
 | 
						|
                active?.classList.add("aboveActive")
 | 
						|
            }
 | 
						|
        })
 | 
						|
        active?.classList.add("active")
 | 
						|
        active?.classList.remove("aboveActive")
 | 
						|
    }
 | 
						|
 | 
						|
    static throttle(func, delay) {
 | 
						|
        let lastCall = 0;
 | 
						|
        return function (...args) {
 | 
						|
            const now = new Date().getTime();
 | 
						|
            if (now - lastCall < delay) {
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            lastCall = now;
 | 
						|
            return setTimeout(() => {func(...args)}, delay);
 | 
						|
        };
 | 
						|
    }
 | 
						|
}
 |