From 866e504a82150432ffcb8e2bfb255943fec556f5 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Sat, 12 Mar 2016 19:25:24 +0100 Subject: [PATCH] toc.js: fix wrong link being highlighted when page length changes dynamically - from https://github.com/jgallen23/toc/pull/48 --- assets/_src/js/vendor/toc.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/assets/_src/js/vendor/toc.js b/assets/_src/js/vendor/toc.js index 1beb853..cef6942 100644 --- a/assets/_src/js/vendor/toc.js +++ b/assets/_src/js/vendor/toc.js @@ -59,9 +59,17 @@ var container = $(opts.container); var headings = $(opts.selectors, container); - var headingOffsets = []; var activeClassName = opts.activeClass; + var headingOffsets = function() { + var offsets = []; + headings.each(function(i, heading) { + var $h = $(heading); + offsets.push($h.offset().top - opts.highlightOffset); + }); + return offsets; + }; + var scrollTo = function(e, callback) { if (opts.smoothScrolling && typeof opts.smoothScrolling === 'function') { e.preventDefault(); @@ -82,10 +90,11 @@ timeout = setTimeout(function() { var top = $(window).scrollTop(), highlighted, closest = Number.MAX_VALUE, - index = 0; + index = 0 + offsets = headingOffsets(); - for (var i = 0, c = headingOffsets.length; i < c; i++) { - var currentClosest = Math.abs(headingOffsets[i] - top); + for (var i = 0, c = offsets.length; i < c; i++) { + var currentClosest = Math.abs(offsets[i] - top); if (currentClosest < closest) { index = i; closest = currentClosest; @@ -109,7 +118,6 @@ headings.each(function(i, heading) { var $h = $(heading); - headingOffsets.push($h.offset().top - opts.highlightOffset); var anchorName = opts.anchorName(i, heading, opts.prefix);