16
16
toc : ''
17
17
}
18
18
} ,
19
- settings = $ . extend ( defaults , options ) ;
19
+ settings = $ . extend ( defaults , options ) ;
20
20
21
21
function fixedEncodeURIComponent ( str ) {
22
22
return encodeURIComponent ( str ) . replace ( / [ ! ' ( ) * ] / g, function ( c ) {
25
25
}
26
26
27
27
function createLink ( header ) {
28
- var innerText = ( header . textContent === undefined ) ? header . innerText : header . textContent ;
28
+ var innerText = header . textContent || header . innerText ;
29
29
return "<a class='" + settings . classes . link + "' href='#" + fixedEncodeURIComponent ( header . id ) + "'>" + innerText + "</a>" ;
30
30
}
31
31
32
32
var headers = $ ( settings . headers ) . filter ( function ( ) {
33
- // get all headers with an ID
34
- var previousSiblingName = $ ( this ) . prev ( ) . attr ( "name" ) ;
35
- if ( ! this . id && previousSiblingName ) {
36
- this . id = $ ( this ) . attr ( "id" , previousSiblingName . replace ( / \. / g, "-" ) ) ;
33
+ // Ensure headers have IDs
34
+ if ( ! this . id ) {
35
+ this . id = $ ( this ) . text ( ) . trim ( ) . replace ( / \s + / g, '-' ) . toLowerCase ( ) ;
37
36
}
38
37
return this . id ;
39
38
} ) , output = $ ( this ) ;
40
39
41
40
// Check if there are any headers
42
41
if ( ! headers . length || headers . length < settings . minimumHeaders || ! output . length ) {
43
-
44
42
$ ( '#main' ) . removeClass ( "add-grid" ) ;
45
43
$ ( "#toc" ) . hide ( ) ;
46
44
return ; // Exit early if there are no headers
47
45
}
48
46
49
- if ( 0 === settings . showSpeed ) {
47
+ if ( settings . showSpeed === 0 ) {
50
48
settings . showEffect = 'none' ;
51
49
}
52
50
53
- $ ( this ) . addClass ( settings . classes . toc )
51
+ $ ( this ) . addClass ( settings . classes . toc ) ;
54
52
55
53
var render = {
56
54
show : function ( ) { output . hide ( ) . html ( html ) . show ( settings . showSpeed ) ; } ,
64
62
var return_to_top = '<i class="icon-arrow-up back-to-top"> </i>' ;
65
63
66
64
var level = get_level ( headers [ 0 ] ) ,
67
- this_level ,
68
- html = settings . title + " <" + settings . listType + " class=\"" + settings . classes . list + "\">" ;
69
- headers . on ( 'click' , function ( ) {
70
- if ( ! settings . noBackToTopLinks ) {
71
- window . location . hash = this . id ;
65
+ this_level ,
66
+ html = settings . title + " <" + settings . listType + " class=\"" + settings . classes . list + "\">" ;
67
+ headers . each ( function ( _ , header ) {
68
+ this_level = get_level ( header ) ;
69
+ if ( ! settings . noBackToTopLinks && this_level === highest_level ) {
70
+ $ ( header ) . addClass ( 'top-level-header' ) . after ( return_to_top ) ;
72
71
}
73
- } )
74
- . addClass ( 'clickable-header' )
75
- . each ( function ( _ , header ) {
76
- this_level = get_level ( header ) ;
77
- if ( ! settings . noBackToTopLinks && this_level === highest_level ) {
78
- $ ( header ) . addClass ( 'top-level-header' ) . after ( return_to_top ) ;
79
- }
80
- if ( this_level === level ) // same level as before; same indenting
81
- html += "<li class=\"" + settings . classes . item + "\">" + createLink ( header ) ;
82
- else if ( this_level <= level ) { // higher level than before; end parent ol
83
- for ( var i = this_level ; i < level ; i ++ ) {
84
- html += "</li></" + settings . listType + ">"
85
- }
86
- html += "<li class=\"" + settings . classes . item + "\">" + createLink ( header ) ;
72
+ if ( this_level === level ) { // same level as before; same indenting
73
+ html += "<li class=\"" + settings . classes . item + "\">" + createLink ( header ) ;
74
+ } else if ( this_level <= level ) { // higher level than before; end parent ol
75
+ for ( var i = this_level ; i < level ; i ++ ) {
76
+ html += "</li></" + settings . listType + ">"
87
77
}
88
- else if ( this_level > level ) { // lower level than before; expand the previous to contain a ol
89
- for ( i = this_level ; i > level ; i -- ) {
90
- html += "<" + settings . listType + " class=\"" + settings . classes . list + "\">" +
91
- "<li class=\"" + settings . classes . item + "\">"
92
- }
93
- html += createLink ( header ) ;
78
+ html += "<li class=\"" + settings . classes . item + "\">" + createLink ( header ) ;
79
+ } else if ( this_level > level ) { // lower level than before; expand the previous to contain a ol
80
+ for ( i = this_level ; i > level ; i -- ) {
81
+ html += "<" + settings . listType + " class=\"" + settings . classes . list + "\">" +
82
+ "<li class=\"" + settings . classes . item + "\">"
94
83
}
95
- level = this_level ; // update for the next one
96
- } ) ;
84
+ html += createLink ( header ) ;
85
+ }
86
+ level = this_level ; // update for the next one
87
+ } ) ;
97
88
html += "</" + settings . listType + ">" ;
89
+
98
90
if ( ! settings . noBackToTopLinks ) {
99
91
$ ( document ) . on ( 'click' , '.back-to-top' , function ( ) {
100
92
$ ( window ) . scrollTop ( 0 ) ;
104
96
105
97
render [ settings . showEffect ] ( ) ;
106
98
} ;
107
- } ) ( jQuery ) ;
99
+ } ) ( jQuery ) ;
0 commit comments