diff --git a/public/js/extra.js b/public/js/extra.js index aed97417..f2fd6a72 100644 --- a/public/js/extra.js +++ b/public/js/extra.js @@ -322,7 +322,26 @@ function autoLinkify(view) { for (var level = 1; level <= 6; level++) { linkifyAnchors(level, contentBlock); } -}; +} + +function deduplicatedHeaderId(view) { + var headers = view.find(':header').toArray(); + for (var i = 0; i < headers.length; i++) { + var id = $(headers[i]).attr('id'); + if (!id) continue; + var duplicatedHeaders = view.find(':header[id=' + id + ']').toArray(); + for (var j = 0; j < duplicatedHeaders.length; j++) { + if (duplicatedHeaders[j] != headers[i]) { + var newId = id + j; + var $duplicatedHeader = $(duplicatedHeaders[j]); + $duplicatedHeader.attr('id', newId); + var $headerLink = $duplicatedHeader.find('> .header-link'); + $headerLink.attr('href', '#' + newId); + $headerLink.attr('title', newId); + } + } + } +} function scrollToHash() { var hash = location.hash; diff --git a/public/js/index.js b/public/js/index.js index 86bba7f5..c414b0b5 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -1725,6 +1725,7 @@ function updateView() { lastResult = $(result).clone(); finishView(ui.area.view); autoLinkify(ui.area.view); + deduplicatedHeaderId(ui.area.view); generateToc('toc'); generateToc('toc-affix'); generateScrollspy(); diff --git a/public/js/pretty.js b/public/js/pretty.js index 52882e98..ad5655d6 100644 --- a/public/js/pretty.js +++ b/public/js/pretty.js @@ -5,6 +5,7 @@ markdown.html(result.html()); $(document.body).show(); finishView(markdown); autoLinkify(markdown); +deduplicatedHeaderId(markdown); generateToc('toc'); generateToc('toc-affix'); smoothHashScroll();