From 43ff4e44a8cc3406d22f2a2caa41cb1c1c749ce5 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Thu, 4 Mar 2021 16:01:50 +0100 Subject: [PATCH] Added table of contents js functions --- webapp/src/main/webapp/themes/iph/js/toc.js | 34 +++++++++++++++++++ .../webapp/themes/iph/templates/text-lib.ftl | 33 +++++++++--------- 2 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 webapp/src/main/webapp/themes/iph/js/toc.js diff --git a/webapp/src/main/webapp/themes/iph/js/toc.js b/webapp/src/main/webapp/themes/iph/js/toc.js new file mode 100644 index 00000000..7f5d4434 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/js/toc.js @@ -0,0 +1,34 @@ + document.addEventListener('DOMContentLoaded', createTOC(), false); + + function createTOC(){ + var complexDocElement = document.getElementById("complexDocument"); + var tocElement = document.getElementById("tocPlaceHolder"); + + if (complexDocElement === null || tocElement === null){ + console.log("no complex document or no placeholder"); + return; + } + addItemsToTOC(complexDocElement,tocElement) + } + function addItemsToTOC(docPart, tocElement){ + var docPartChilds = docPart.childNodes; + for (var i = 0; i < docPartChilds.length; i++){ + var docPartChild = docPartChilds[i]; + if ( docPartChild.nodeType === Node.ELEMENT_NODE && docPartChild.classList.contains("documentPart")){ + var tocElementChild = createTOCItem(docPartChild, tocElement); + addItemsToTOC(docPartChild,tocElementChild); + } + } + } + function createTOCItem(docPart, tocElement){ + var newTOCElement = document.createElement("div"); + var anchor = docPart.getAttribute('id'); + var docPartButton = docPart.previousElementSibling; + var itemName = docPartButton.textContent; + var link = document.createElement("a"); + link.setAttribute("href","#" + anchor); + link.innerText = itemName; + newTOCElement.appendChild(link); + tocElement.appendChild(newTOCElement); + return newTOCElement; + } \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl b/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl index a63819ba..fad4c505 100644 --- a/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl @@ -53,7 +53,7 @@ <#macro arrangeDocumentParts > -
+
<#assign lastLevel = 0 > <#list paths as order> <#-- ${order.path} --> @@ -65,32 +65,33 @@ <#assign bibliographyCounter = excerptProperties.bibliographyCounter > - <@startDocumentPart order.level?number lastLevel/> + <@startDocumentPart order.level?number order.path lastLevel/> <#if excerptText?? && excerptTextName?? && excerptTextName?has_content && excerptText?has_content>
${excerptText} - <@arrangeSources works worksCounter?number order.elenphExcerpt /> - <@arrangeLiterature bibliography bibliographyCounter?number order.elenphExcerpt />
+ <@arrangeSources works worksCounter?number order.path order.elenphExcerpt /> + <@arrangeLiterature bibliography bibliographyCounter?number order.path order.elenphExcerpt /> <#assign lastLevel = order.level?number > <@endDocumentPart lastLevel /> + <@arrangeSources works works?size "anchor-all-sources" /> + <@arrangeLiterature bibliography bibliography?size "anchor-all-literature" />
- <@arrangeSources works works?size /> - <@arrangeLiterature bibliography bibliography?size /> + -<#macro startDocumentPart newLevel lastLevel=0 > +<#macro startDocumentPart newLevel path lastLevel=0 > <#assign depth = newLevel - lastLevel > <#if depth == 0> <@closeDocPart 1 /> - <@openDocPart 1 /> + <@openDocPart 1 path /> <#elseif depth > 0> - <@openDocPart depth /> + <@openDocPart depth path /> <#else > <@closeDocPart -depth+1 /> - <@openDocPart 1 /> + <@openDocPart 1 path /> @@ -107,17 +108,17 @@ -<#macro openDocPart count> +<#macro openDocPart count path > <#list 1..count as x> -
+
-<#macro arrangeSources sources counter filter="none"> +<#macro arrangeSources sources counter identifier filter="none"> <#if sources?? && sources?has_content && counter > 0> -
+
<#list sources as source> <#if filter == "none" || source.excerpt == filter >
@@ -129,10 +130,10 @@ -<#macro arrangeLiterature literature counter filter="none"> +<#macro arrangeLiterature literature counter identifier filter="none"> <#if literature?? && literature?has_content && counter > 0> -
+
<#list literature as literatureItem> <#if filter == "none" || literatureItem.excerpt == filter >