From bc31e9fe3b5a720c369826fe959f9830b98c2ccc Mon Sep 17 00:00:00 2001
From: Wu Cheng-Han
Date: Fri, 25 Sep 2015 14:27:23 +0800
Subject: Added deduplicatedHeaderId to avoid multiple same header id

---
 public/js/extra.js  | 21 ++++++++++++++++++++-
 public/js/index.js  |  1 +
 public/js/pretty.js |  1 +
 3 files changed, 22 insertions(+), 1 deletion(-)

(limited to 'public/js')

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();
-- 
cgit v1.2.3