@@ -2,8 +2,16 @@ function forEach(elems, fun) {
22 Array . prototype . forEach . call ( elems , fun ) ;
33}
44
5+ function getPagetoc ( ) {
6+ return document . getElementsByClassName ( "pagetoc" ) [ 0 ]
7+ }
8+
59function getPagetocElems ( ) {
6- return document . getElementsByClassName ( "pagetoc" ) [ 0 ] . children ;
10+ return getPagetoc ( ) . children ;
11+ }
12+
13+ function getHeaders ( ) {
14+ return document . getElementsByClassName ( "header" )
715}
816
917// Un-active everything when you click it
@@ -38,19 +46,22 @@ var updateFunction = function (elem = undefined) {
3846 }
3947
4048 if ( ! id ) {
41- var elements = document . getElementsByClassName ( "header" ) ;
42- let menuBottom = getRect ( document . getElementById ( "menu-bar" ) ) . bottom ;
43- let contentCenter = window . innerHeight / 2 ;
44- let margin = contentCenter / 3 ;
49+ var elements = getHeaders ( ) ;
50+ let margin = window . innerHeight / 3 ;
4551
4652 forEach ( elements , function ( el , i , arr ) {
47- if ( ! id && getRect ( el ) . bottom >= menuBottom ) {
48- if ( getRect ( el ) . top >= contentCenter + margin ) {
49- id = arr [ Math . max ( 0 , i - 1 ) ] ;
50- } else {
53+ if ( ! id && getRect ( el ) . top >= 0 ) {
54+ if ( getRect ( el ) . top < margin ) {
5155 id = el ;
56+ } else {
57+ id = arr [ Math . max ( 0 , i - 1 ) ] ;
5258 }
5359 }
60+ // a very long last section
61+ // its heading is over the screen
62+ if ( ! id && i == arr . length - 1 ) {
63+ id = el
64+ }
5465 } ) ;
5566 }
5667
@@ -63,7 +74,7 @@ var updateFunction = function (elem = undefined) {
6374 forPagetocElem ( function ( el ) {
6475 if ( id . href . localeCompare ( el . href ) == 0 ) {
6576 el . classList . add ( "active" ) ;
66- let pagetoc = document . getElementsByClassName ( "pagetoc" ) [ 0 ] ;
77+ let pagetoc = getPagetoc ( ) ;
6778 if ( overflowTop ( pagetoc , el ) > 0 ) {
6879 pagetoc . scrollTop = el . offsetTop ;
6980 }
@@ -74,13 +85,13 @@ var updateFunction = function (elem = undefined) {
7485 } ) ;
7586} ;
7687
77- var elements = document . getElementsByClassName ( "header" ) ;
88+ let elements = getHeaders ( ) ;
7889
7990if ( elements . length > 1 ) {
8091 // Populate sidebar on load
8192 window . addEventListener ( "load" , function ( ) {
82- var pagetoc = document . getElementsByClassName ( "pagetoc" ) [ 0 ] ;
83- var elements = document . getElementsByClassName ( "header" ) ;
93+ var pagetoc = getPagetoc ( ) ;
94+ var elements = getHeaders ( ) ;
8495 forEach ( elements , function ( el ) {
8596 var link = document . createElement ( "a" ) ;
8697 link . appendChild ( document . createTextNode ( el . text ) ) ;
0 commit comments