Added TOC collapse/expand scripts
This commit is contained in:
parent
532f33f313
commit
6a0b31a2d3
2 changed files with 118 additions and 2 deletions
|
@ -8,8 +8,13 @@
|
||||||
console.log("no complex document or no placeholder");
|
console.log("no complex document or no placeholder");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addItemsToTOC(complexDocElement,tocElement)
|
addItemsToTOC(complexDocElement,tocElement);
|
||||||
|
|
||||||
|
collapseAllTOCElements("tocPlaceHolder");
|
||||||
|
//show created TOC
|
||||||
|
tocElement.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
function addItemsToTOC(docPart, tocElement){
|
function addItemsToTOC(docPart, tocElement){
|
||||||
var docPartChilds = docPart.childNodes;
|
var docPartChilds = docPart.childNodes;
|
||||||
for (var i = 0; i < docPartChilds.length; i++){
|
for (var i = 0; i < docPartChilds.length; i++){
|
||||||
|
@ -17,13 +22,124 @@
|
||||||
if ( docPartChild.nodeType === Node.ELEMENT_NODE && docPartChild.classList.contains("documentPart")){
|
if ( docPartChild.nodeType === Node.ELEMENT_NODE && docPartChild.classList.contains("documentPart")){
|
||||||
var tocElementChild = createTOCItem(docPartChild, tocElement);
|
var tocElementChild = createTOCItem(docPartChild, tocElement);
|
||||||
addItemsToTOC(docPartChild,tocElementChild);
|
addItemsToTOC(docPartChild,tocElementChild);
|
||||||
|
addElementControls(tocElementChild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function addElementControls(tocElement){
|
||||||
|
var elementChild = tocElement.querySelector('.tocElement');
|
||||||
|
if (elementChild === null){
|
||||||
|
//no controls need as no childs appear.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var nameContainer = tocElement.querySelector('.tocElementName');
|
||||||
|
if (nameContainer === null){
|
||||||
|
console.log("no nameContainer found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tocElement.id === null){
|
||||||
|
console.log("no tocElement id found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//var elementSwitchButton = document.createElement("button");
|
||||||
|
//elementSwitchButton.className = "tocElementSwitchButton";
|
||||||
|
|
||||||
|
var switchImage = document.createElement("img");
|
||||||
|
switchImage.onclick = function() {switchTOCElement(tocElement.id);};
|
||||||
|
switchImage.className = "tocElementSwitchImage";
|
||||||
|
nameContainer.prepend(switchImage);
|
||||||
|
//elementSwitchButton.appendChild(switchImage);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function switchTOCElement(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var elementChild = tocElement.querySelector('.tocElement');
|
||||||
|
if (elementChild.style.display === "none"){
|
||||||
|
expandTOCElementChilds(id);
|
||||||
|
setCollapseImageToElement(id);
|
||||||
|
} else {
|
||||||
|
collapseTOCElementDescendants(id);
|
||||||
|
setExpandImageToElement(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setCollapseImageToElement(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var nameContainer = tocElement.querySelector('.tocElementName');
|
||||||
|
if (nameContainer === null){
|
||||||
|
console.log("no nameContainer found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$.extend(this, urlsBase);
|
||||||
|
var imgElement = nameContainer.firstElementChild;
|
||||||
|
imgElement.src = urlsBase + "/themes/iph/images/save.svg";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setExpandImageToElement(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var nameContainer = tocElement.querySelector('.tocElementName');
|
||||||
|
if (nameContainer === null){
|
||||||
|
console.log("no nameContainer found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$.extend(this, urlsBase);
|
||||||
|
var imgElement = nameContainer.firstElementChild;
|
||||||
|
imgElement.src = urlsBase + "/themes/iph/images/print.svg";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function expandTOCElementChilds(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var elementChilds = tocElement.querySelectorAll(':scope > .tocElement');
|
||||||
|
for (let i = 0; i < elementChilds.length; i++) {
|
||||||
|
elementChilds[i].style.display = "block";
|
||||||
|
setExpandImageToElement(elementChilds[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function expandTOCElementDescendants(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var elementChilds = tocElement.querySelectorAll('.tocElement');
|
||||||
|
for (let i = 0; i < elementChilds.length; i++) {
|
||||||
|
elementChilds[i].style.display = "block";
|
||||||
|
setExpandImageToElement(elementChilds[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function collapseAllTOCElements(placeHolderId){
|
||||||
|
var tocRoot = document.getElementById(placeHolderId);
|
||||||
|
var elementChilds = tocRoot.querySelectorAll('.tocElement');
|
||||||
|
for (let i = 0; i < elementChilds.length; i++) {
|
||||||
|
collapseTOCElementDescendants(elementChilds[i].id);
|
||||||
|
setExpandImageToElement(elementChilds[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function expandAllTOCElements(placeHolderId){
|
||||||
|
var tocRoot = document.getElementById(placeHolderId);
|
||||||
|
var elementChilds = tocRoot.querySelectorAll('.tocElement');
|
||||||
|
for (let i = 0; i < elementChilds.length; i++) {
|
||||||
|
expandTOCElementDescendants(elementChilds[i].id);
|
||||||
|
setCollapseImageToElement(elementChilds[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function collapseTOCElementDescendants(id){
|
||||||
|
var tocElement = document.getElementById(id);
|
||||||
|
var elementChilds = tocElement.querySelectorAll('.tocElement');
|
||||||
|
for (let i = 0; i < elementChilds.length; i++) {
|
||||||
|
elementChilds[i].style.display = "none";
|
||||||
|
setCollapseImageToElement(elementChilds[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function createTOCItem(docPart, tocElement){
|
function createTOCItem(docPart, tocElement){
|
||||||
var newTOCElement = document.createElement("div");
|
var newTOCElement = document.createElement("div");
|
||||||
var newTOCElementName = document.createElement("div");
|
var newTOCElementName = document.createElement("div");
|
||||||
var anchor = docPart.getAttribute('id');
|
var anchor = docPart.getAttribute('id');
|
||||||
|
var tocElementID = "toc-" + anchor;
|
||||||
|
newTOCElement.id = tocElementID;
|
||||||
var docPartButton = docPart.previousElementSibling;
|
var docPartButton = docPart.previousElementSibling;
|
||||||
var itemName = docPartButton.textContent;
|
var itemName = docPartButton.textContent;
|
||||||
var link = document.createElement("a");
|
var link = document.createElement("a");
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<head>
|
<head>
|
||||||
<#include "head.ftl">
|
<#include "head.ftl">
|
||||||
</head>
|
</head>
|
||||||
|
<script>var urlsBase = "${urls.base}";</script>
|
||||||
<body class="${bodyClasses!}" onload="${bodyOnload!}">
|
<body class="${bodyClasses!}" onload="${bodyOnload!}">
|
||||||
<#include "identity.ftl">
|
<#include "identity.ftl">
|
||||||
<#include "menu.ftl">
|
<#include "menu.ftl">
|
||||||
|
|
Loading…
Add table
Reference in a new issue