From fcbf3ce37ca8f90a3e36d524a3274ffc063a40e3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 14 Apr 2024 15:26:02 +0200 Subject: Adding upstream version 0.10.2+dfsg1. Signed-off-by: Daniel Baumann --- public/js/layout-plugins/page-breaker.js | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 public/js/layout-plugins/page-breaker.js (limited to 'public/js/layout-plugins/page-breaker.js') diff --git a/public/js/layout-plugins/page-breaker.js b/public/js/layout-plugins/page-breaker.js new file mode 100644 index 0000000..bdf04ec --- /dev/null +++ b/public/js/layout-plugins/page-breaker.js @@ -0,0 +1,44 @@ +/* Icinga PDF Export | (c) 2021 Icinga GmbH | GPLv2 */ + +"use strict"; + +(() => { + Layout.registerPlugin('page-breaker', () => { + let pageBreaksFor = document.querySelector('[data-pdfexport-page-breaks-at]'); + if (! pageBreaksFor) { + return; + } + + let pageBreaksAt = pageBreaksFor.dataset.pdfexportPageBreaksAt; + if (! pageBreaksAt) { + return; + } + + let contentHeight = document.body.dataset.contentHeight; + let items = Array.from(pageBreaksFor.querySelectorAll(':scope > ' + pageBreaksAt)); + + let remainingHeight = contentHeight; + items.forEach((item, i) => { + let requiredHeight; + if (i < items.length - 1) { + requiredHeight = items[i + 1].getBoundingClientRect().top - item.getBoundingClientRect().top; + } else { + requiredHeight = item.parentElement.getBoundingClientRect().bottom - item.getBoundingClientRect().top; + } + + if (remainingHeight < requiredHeight) { + if (!! item.previousElementSibling) { + item.previousElementSibling.style.pageBreakAfter = 'always'; + item.previousElementSibling.classList.add('page-break-follows'); + } else { + item.style.pageBreakAfter = 'always'; + item.classList.add('page-break-follows'); + } + + remainingHeight = contentHeight; + } + + remainingHeight -= requiredHeight; + }); + }); +})(); -- cgit v1.2.3