63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
/***************
|
|
* Paginator JS *
|
|
***************/
|
|
|
|
function getNumberOfDiagramPagesFromCode(code) {
|
|
// count `newpage` inside code
|
|
// known issue: a `newpage` starting in a newline inside a multiline comment will also be counted
|
|
return code.match(/^\s*newpage\s?.*$/gm)?.length + 1 || 1;
|
|
}
|
|
|
|
function updatePaginatorSelection() {
|
|
const paginator = document.getElementById("paginator");
|
|
const index = document.appData.index;
|
|
if (index === undefined || paginator.childNodes.length <= index) {
|
|
for (const node of paginator.childNodes) {
|
|
node.checked = false;
|
|
}
|
|
} else {
|
|
paginator.childNodes[index].checked = true;
|
|
}
|
|
}
|
|
|
|
const updatePaginator = (function() {
|
|
function updateNumberOfPagingElements(paginator, pages) {
|
|
// remove elements (buttons) if there are to many
|
|
while (paginator.childElementCount > pages) {
|
|
paginator.removeChild(paginator.lastChild)
|
|
}
|
|
// add elements (buttons) if there are to less
|
|
while (paginator.childElementCount < pages) {
|
|
const radioBtn = document.createElement("input");
|
|
radioBtn.name = "paginator";
|
|
radioBtn.type = "radio";
|
|
radioBtn.value = paginator.childElementCount;
|
|
radioBtn.addEventListener("click", (event) => {
|
|
sendMessage({
|
|
sender: "paginator",
|
|
data: { index: event.target.value },
|
|
synchronize: true,
|
|
});
|
|
});
|
|
paginator.appendChild(radioBtn);
|
|
}
|
|
}
|
|
return function() {
|
|
const paginator = document.getElementById("paginator");
|
|
const pages = document.appData.numberOfDiagramPages;
|
|
if (pages > 1) {
|
|
updateNumberOfPagingElements(paginator, pages);
|
|
setVisibility(paginator, true);
|
|
} else {
|
|
setVisibility(paginator, false);
|
|
}
|
|
};
|
|
})();
|
|
|
|
function initializePaginator() {
|
|
if (document.appData.numberOfDiagramPages > 1) {
|
|
updatePaginator();
|
|
updatePaginatorSelection();
|
|
}
|
|
}
|