Skip to content

Commit 9571f05

Browse files
committed
first fix
1 parent bd0f510 commit 9571f05

File tree

2 files changed

+49
-38
lines changed

2 files changed

+49
-38
lines changed

_includes/toc.html

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
11
<script>
22
$(document).ready(function () {
3-
$('#toc-contents').toc({ minimumHeaders: {{site.theme_variables.toc.min_headings | default: 1 }}, listType: 'ul', classes: { list: 'list-unstyled' }, noBackToTopLinks: true, showSpeed: 0, headers: '{{site.theme_variables.toc.headings | default: 'main h2' }}' , title: '<strong class="my-2">On this page</strong><hr class="my-2">' });
3+
// Ensure that the TOC is generated after the document is fully loaded
4+
$('#toc-contents').toc({
5+
minimumHeaders: {{site.theme_variables.toc.min_headings | default: 1 }},
6+
listType: 'ul',
7+
classes: { list: 'list-unstyled' },
8+
noBackToTopLinks: true,
9+
showSpeed: 0,
10+
headers: '{{site.theme_variables.toc.headings | default: "main h2" }}',
11+
title: '<strong class="my-2">On this page</strong><hr class="my-2">'
12+
});
13+
14+
// After generating the TOC, check the hash in the URL and scroll to the anchor if present
15+
if (window.location.hash) {
16+
var target = $(window.location.hash);
17+
if (target.length) {
18+
$('html, body').animate({
19+
scrollTop: target.offset().top
20+
}, 0);
21+
}
22+
}
423
});
524
</script>
625
<button id="btn-toc-hide" class="btn bg-light d-xl-none hover-primary mb-3" type="button" data-bs-toggle="collapse" data-bs-target="#toc-contents" aria-expanded="true" aria-controls="toc-contents">

assets/js/toc.js

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
toc: ''
1717
}
1818
},
19-
settings = $.extend(defaults, options);
19+
settings = $.extend(defaults, options);
2020

2121
function fixedEncodeURIComponent(str) {
2222
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
@@ -25,32 +25,30 @@
2525
}
2626

2727
function createLink(header) {
28-
var innerText = (header.textContent === undefined) ? header.innerText : header.textContent;
28+
var innerText = header.textContent || header.innerText;
2929
return "<a class='" + settings.classes.link + "' href='#" + fixedEncodeURIComponent(header.id) + "'>" + innerText + "</a>";
3030
}
3131

3232
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();
3736
}
3837
return this.id;
3938
}), output = $(this);
4039

4140
// Check if there are any headers
4241
if (!headers.length || headers.length < settings.minimumHeaders || !output.length) {
43-
4442
$('#main').removeClass("add-grid");
4543
$("#toc").hide();
4644
return; // Exit early if there are no headers
4745
}
4846

49-
if (0 === settings.showSpeed) {
47+
if (settings.showSpeed === 0) {
5048
settings.showEffect = 'none';
5149
}
5250

53-
$(this).addClass(settings.classes.toc)
51+
$(this).addClass(settings.classes.toc);
5452

5553
var render = {
5654
show: function () { output.hide().html(html).show(settings.showSpeed); },
@@ -64,37 +62,31 @@
6462
var return_to_top = '<i class="icon-arrow-up back-to-top"> </i>';
6563

6664
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);
7271
}
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 + ">"
8777
}
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 + "\">"
9483
}
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+
});
9788
html += "</" + settings.listType + ">";
89+
9890
if (!settings.noBackToTopLinks) {
9991
$(document).on('click', '.back-to-top', function () {
10092
$(window).scrollTop(0);
@@ -104,4 +96,4 @@
10496

10597
render[settings.showEffect]();
10698
};
107-
})(jQuery);
99+
})(jQuery);

0 commit comments

Comments
 (0)