@@ -2,10 +2,10 @@ let scrollTimeout;
22
33const listenActive = ( ) => {
44 const elems = document . querySelector ( ".pagetoc" ) . children ;
5- [ ...elems ] . forEach ( el => {
6- el . addEventListener ( "click" , ( event ) => {
5+ [ ...elems ] . forEach ( ( el ) => {
6+ el . addEventListener ( "click" , ( ) => {
77 clearTimeout ( scrollTimeout ) ;
8- [ ...elems ] . forEach ( el => el . classList . remove ( "active" ) ) ;
8+ [ ...elems ] . forEach ( ( el ) => el . classList . remove ( "active" ) ) ;
99 el . classList . add ( "active" ) ;
1010 // Prevent scroll updates for a short period
1111 scrollTimeout = setTimeout ( ( ) => {
@@ -15,16 +15,24 @@ const listenActive = () => {
1515 } ) ;
1616} ;
1717
18- const getPagetoc = ( ) => document . querySelector ( ".pagetoc" ) || autoCreatePagetoc ( ) ;
18+ const getPagetoc = ( ) => {
19+ return document . querySelector ( ".pagetoc" ) || autoCreatePagetoc ( ) ;
20+ } ;
1921
2022const autoCreatePagetoc = ( ) => {
21- const chapter = document . querySelector ( "body nav#sidebar.sidebar li.chapter-item.expanded a.active" ) ;
23+ const chapter = document . querySelector (
24+ "body nav#sidebar.sidebar li.chapter-item.expanded a.active"
25+ ) ;
2226 const content = Object . assign ( document . createElement ( "div" ) , {
23- className : "content-wrap"
27+ className : "content-wrap" ,
2428 } ) ;
2529 content . appendChild ( chapter . cloneNode ( true ) ) ;
26- const divAddedToc = Object . assign ( document . createElement ( "div" ) , { className : "sidetoc" } ) ;
27- const navAddedToc = Object . assign ( document . createElement ( "nav" ) , { className : "pagetoc" } ) ;
30+ const divAddedToc = Object . assign ( document . createElement ( "div" ) , {
31+ className : "sidetoc" ,
32+ } ) ;
33+ const navAddedToc = Object . assign ( document . createElement ( "nav" ) , {
34+ className : "pagetoc" ,
35+ } ) ;
2836 divAddedToc . appendChild ( navAddedToc ) ;
2937 content . appendChild ( divAddedToc ) ;
3038 chapter . replaceWith ( content ) ;
@@ -35,34 +43,34 @@ const updateFunction = () => {
3543 if ( scrollTimeout ) return ; // Skip updates if within the cooldown period from a click
3644 const headers = [ ...document . getElementsByClassName ( "header" ) ] ;
3745 const scrolledY = window . scrollY ;
38- let lastHeader = null ;
3946
4047 // Find the last header that is above the current scroll position
41- for ( let i = headers . length - 1 ; i >= 0 ; i -- ) {
42- if ( scrolledY >= headers [ i ] . offsetTop ) {
43- lastHeader = headers [ i ] ;
44- break ;
45- }
46- }
48+ let headerOffsets = headers . filter ( ( el ) => {
49+ return scrolledY >= el . offsetTop ;
50+ } ) ;
51+ const lastHeader = headerOffsets . reverse ( ) . shift ( ) ;
4752
4853 const pagetocLinks = [ ...document . querySelector ( ".pagetoc" ) . children ] ;
49- pagetocLinks . forEach ( link => link . classList . remove ( "active" ) ) ;
54+ pagetocLinks . forEach ( ( link ) => link . classList . remove ( "active" ) ) ;
5055
5156 if ( lastHeader ) {
52- const activeLink = pagetocLinks . find ( link => lastHeader . href === link . href ) ;
57+ const activeLink = pagetocLinks . find (
58+ ( link ) => lastHeader . href === link . href
59+ ) ;
5360 if ( activeLink ) activeLink . classList . add ( "active" ) ;
5461 }
5562} ;
5663
57- window . addEventListener ( ' load' , ( ) => {
64+ window . addEventListener ( " load" , ( ) => {
5865 const pagetoc = getPagetoc ( ) ;
66+ console . log ( pagetoc ) ;
5967 var headers = [ ...document . getElementsByClassName ( "header" ) ] ;
6068 headers . shift ( ) ;
61- headers . forEach ( header => {
69+ headers . forEach ( ( header ) => {
6270 const link = Object . assign ( document . createElement ( "a" ) , {
6371 textContent : header . text ,
6472 href : header . href ,
65- className : `pagetoc-${ header . parentElement . tagName } `
73+ className : `pagetoc-${ header . parentElement . tagName } ` ,
6674 } ) ;
6775 pagetoc . appendChild ( link ) ;
6876 } ) ;
0 commit comments