diff --git a/themes/V3/5ePHB/snippets/tableOfContents.gen.js b/themes/V3/5ePHB/snippets/tableOfContents.gen.js index e10cb50d7..44655c625 100644 --- a/themes/V3/5ePHB/snippets/tableOfContents.gen.js +++ b/themes/V3/5ePHB/snippets/tableOfContents.gen.js @@ -1,26 +1,23 @@ const _ = require('lodash'); const dedent = require('dedent-tabs').default; -const walkPages = (iframeDocument, pageMap)=>{ - let current = 0; - let skip = 0; - let reset = 0; +const mapPages = (iframeDocument, pageMap)=>{ + let actualPage = 0; + let mappedPage = 0; const pages = iframeDocument.querySelectorAll('.page'); _.each(pages, (page)=>{ - let showPage = true; - current++; - const doSkip = (page.querySelector('.skipCounting')); - const doReset = (page.querySelector('.resetCounting')); - if(doReset) { - reset = current - 1; - skip = 0; - } else if(doSkip){ - skip += 1; - showPage = false; - } - pageMap[current] = { - pageNumber : current - reset - skip, - showPage : showPage + actualPage++; + const doSkip = page.querySelector('.skipCounting'); + const doReset = page.querySelector('.resetCounting'); + + if(doReset) + mappedPage = 1; + if(!doSkip && !doReset) + mappedPage++; + + pageMap[actualPage] = { + mappedPage : mappedPage, + showPage : !doSkip }; }); }; @@ -51,24 +48,24 @@ const recursiveAdd = (title, page, actualPage, targetDepth, child, curDepth=0)=> const getTOC = ()=>{ const pageMap = []; - const res = []; + const entries = []; const iframe = document.getElementById('BrewRenderer'); const iframeDocument = iframe.contentDocument || iframe.contentWindow.document; const headings = iframeDocument.querySelectorAll('h1, h2, h3, h4, h5, h6'); const headerDepth = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']; - walkPages(iframeDocument, pageMap); + mapPages(iframeDocument, pageMap); _.each(headings, (heading)=>{ const onPage = parseInt(heading.closest('.page').id?.replace(/^p/, '')); const ToCExclude = getComputedStyle(heading).getPropertyValue('--TOC'); if(ToCExclude != 'exclude') { - recursiveAdd(heading.textContent.trim(), pageMap[onPage], onPage, headerDepth.indexOf(heading.tagName), res); + recursiveAdd(heading.textContent.trim(), pageMap[onPage], onPage, headerDepth.indexOf(heading.tagName), entries); } }); - return res; + return entries; }; @@ -76,7 +73,7 @@ const ToCIterate = (entries, curDepth=0)=>{ const levelPad = ['- ###', ' - ####', ' - ', ' - ', ' - ', ' - ']; const toc = []; if(entries.title !== null){ - if(entries.page.showPage) toc.push(`${levelPad[curDepth]} [{{ ${entries.title}}}{{ ${entries.page.pageNumber}}}](#${entries.anchor})`); + if(entries.page.showPage) toc.push(`${levelPad[curDepth]} [{{ ${entries.title}}}{{ ${entries.page.mappedPage}}}](#${entries.anchor})`); } if(entries.children.length) { _.each(entries.children, (entry, idx)=>{