@@ -2,10 +2,10 @@ let scrollTimeout;
2
2
3
3
const listenActive = ( ) => {
4
4
const elems = document . querySelector ( ".pagetoc" ) . children ;
5
- [ ...elems ] . forEach ( el => {
6
- el . addEventListener ( "click" , ( event ) => {
5
+ [ ...elems ] . forEach ( ( el ) => {
6
+ el . addEventListener ( "click" , ( ) => {
7
7
clearTimeout ( scrollTimeout ) ;
8
- [ ...elems ] . forEach ( el => el . classList . remove ( "active" ) ) ;
8
+ [ ...elems ] . forEach ( ( el ) => el . classList . remove ( "active" ) ) ;
9
9
el . classList . add ( "active" ) ;
10
10
// Prevent scroll updates for a short period
11
11
scrollTimeout = setTimeout ( ( ) => {
@@ -15,16 +15,24 @@ const listenActive = () => {
15
15
} ) ;
16
16
} ;
17
17
18
- const getPagetoc = ( ) => document . querySelector ( ".pagetoc" ) || autoCreatePagetoc ( ) ;
18
+ const getPagetoc = ( ) => {
19
+ return document . querySelector ( ".pagetoc" ) || autoCreatePagetoc ( ) ;
20
+ } ;
19
21
20
22
const 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
+ ) ;
22
26
const content = Object . assign ( document . createElement ( "div" ) , {
23
- className : "content-wrap"
27
+ className : "content-wrap" ,
24
28
} ) ;
25
29
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
+ } ) ;
28
36
divAddedToc . appendChild ( navAddedToc ) ;
29
37
content . appendChild ( divAddedToc ) ;
30
38
chapter . replaceWith ( content ) ;
@@ -35,34 +43,34 @@ const updateFunction = () => {
35
43
if ( scrollTimeout ) return ; // Skip updates if within the cooldown period from a click
36
44
const headers = [ ...document . getElementsByClassName ( "header" ) ] ;
37
45
const scrolledY = window . scrollY ;
38
- let lastHeader = null ;
39
46
40
47
// 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 ( ) ;
47
52
48
53
const pagetocLinks = [ ...document . querySelector ( ".pagetoc" ) . children ] ;
49
- pagetocLinks . forEach ( link => link . classList . remove ( "active" ) ) ;
54
+ pagetocLinks . forEach ( ( link ) => link . classList . remove ( "active" ) ) ;
50
55
51
56
if ( lastHeader ) {
52
- const activeLink = pagetocLinks . find ( link => lastHeader . href === link . href ) ;
57
+ const activeLink = pagetocLinks . find (
58
+ ( link ) => lastHeader . href === link . href
59
+ ) ;
53
60
if ( activeLink ) activeLink . classList . add ( "active" ) ;
54
61
}
55
62
} ;
56
63
57
- window . addEventListener ( ' load' , ( ) => {
64
+ window . addEventListener ( " load" , ( ) => {
58
65
const pagetoc = getPagetoc ( ) ;
66
+ console . log ( pagetoc ) ;
59
67
var headers = [ ...document . getElementsByClassName ( "header" ) ] ;
60
68
headers . shift ( ) ;
61
- headers . forEach ( header => {
69
+ headers . forEach ( ( header ) => {
62
70
const link = Object . assign ( document . createElement ( "a" ) , {
63
71
textContent : header . text ,
64
72
href : header . href ,
65
- className : `pagetoc-${ header . parentElement . tagName } `
73
+ className : `pagetoc-${ header . parentElement . tagName } ` ,
66
74
} ) ;
67
75
pagetoc . appendChild ( link ) ;
68
76
} ) ;
0 commit comments