From 45a90a7c86fd0a4f0fe10e970372f81f1d0b1d04 Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Wed, 21 May 2025 11:12:28 +0100 Subject: [PATCH 1/3] Ensure only heading element text is used --- src/js/02-on-this-page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/02-on-this-page.js b/src/js/02-on-this-page.js index bd2060e1..4dc724da 100644 --- a/src/js/02-on-this-page.js +++ b/src/js/02-on-this-page.js @@ -29,7 +29,7 @@ var links = {} var list = headings.reduce(function (accum, heading) { var link = document.createElement('a') - link.textContent = heading.textContent + link.textContent = [...heading.childNodes].reduce((acc, el) => { return acc + (el.nodeType === Node.TEXT_NODE ? el.textContent : '') }, '') links[(link.href = '#' + heading.id)] = link var listItem = document.createElement('li') listItem.dataset.level = parseInt(heading.nodeName.slice(1)) - 1 From d53c0b6a0d2545da58932dd7cb7a076455e6a8ba Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Wed, 21 May 2025 13:07:00 +0100 Subject: [PATCH 2/3] preserve inline elements in headings --- src/js/02-on-this-page.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/js/02-on-this-page.js b/src/js/02-on-this-page.js index 4dc724da..bfd82a8c 100644 --- a/src/js/02-on-this-page.js +++ b/src/js/02-on-this-page.js @@ -29,7 +29,9 @@ var links = {} var list = headings.reduce(function (accum, heading) { var link = document.createElement('a') - link.textContent = [...heading.childNodes].reduce((acc, el) => { return acc + (el.nodeType === Node.TEXT_NODE ? el.textContent : '') }, '') + var headingClone = heading.cloneNode(true) + headingClone.querySelectorAll('div, a').forEach(function (el) { el.remove() }) + link.innerHTML = headingClone.innerHTML links[(link.href = '#' + heading.id)] = link var listItem = document.createElement('li') listItem.dataset.level = parseInt(heading.nodeName.slice(1)) - 1 From b0928960ef67cfa524604617e2126420b6a2af3f Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Wed, 21 May 2025 13:48:06 +0100 Subject: [PATCH 3/3] no discrete headings in contents --- src/js/02-on-this-page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/02-on-this-page.js b/src/js/02-on-this-page.js index bfd82a8c..08e47a32 100644 --- a/src/js/02-on-this-page.js +++ b/src/js/02-on-this-page.js @@ -12,7 +12,7 @@ var selectors = document.querySelector('.nav-container .selectors') var selectorsHeight = selectors ? selectors.getBoundingClientRect().height : 0 var headingSelector = [] - for (var l = 0; l <= levels; l++) headingSelector.push(l ? '.sect' + l + '>h' + (l + 1) + '[id]' : 'h1[id].sect0') + for (var l = 0; l <= levels; l++) headingSelector.push(l ? '.sect' + l + ':not(.discrete)>h' + (l + 1) + '[id]' : 'h1[id].sect0') var headings = find(headingSelector.join(','), article) var menu = sidebar.querySelector('.toc-menu-placeholder')