baseline & toc
This commit is contained in:
parent
831d276d41
commit
79b2753fdb
16 changed files with 385 additions and 16 deletions
|
|
@ -8,13 +8,19 @@ export default class snapToBaseline extends Handler {
|
|||
|
||||
beforeParsed(content){
|
||||
this.baseline = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseline').trim());
|
||||
// console.log("========================================");
|
||||
// console.log("baseline = " + this.baseline);
|
||||
|
||||
content.querySelectorAll('blockquote').forEach((bq) => {
|
||||
const prev = bq.previousElementSibling;
|
||||
if (!prev || prev.nodeName !== 'P') {
|
||||
bq.style.color = 'red';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
renderNode(node, sourceNode){
|
||||
if (node.nodeName === 'P') {
|
||||
this.baseline = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseline').trim());
|
||||
if (!shouldSnap(node)) return node;
|
||||
const area = node.closest('.pagedjs_area');
|
||||
if (area) {
|
||||
const areaRect = area.getBoundingClientRect();
|
||||
|
|
@ -22,18 +28,37 @@ export default class snapToBaseline extends Handler {
|
|||
const relativeTop = nodeRect.top - areaRect.top;
|
||||
const modulo = relativeTop % this.baseline;
|
||||
if (modulo !== 0) {
|
||||
let newPadding = this.baseline - modulo;
|
||||
node.style.paddingTop = newPadding + 'px';
|
||||
node.style.paddingTop = (this.baseline - modulo) + 'px';
|
||||
}
|
||||
}
|
||||
return node;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
afterPageLayout(pageElement, page, breakToken){
|
||||
const area = pageElement.querySelector('.pagedjs_area');
|
||||
if (!area) return;
|
||||
|
||||
const areaRect = area.getBoundingClientRect();
|
||||
const paragraphs = pageElement.querySelectorAll('p');
|
||||
|
||||
paragraphs.forEach((node) => {
|
||||
const nodeRect = node.getBoundingClientRect();
|
||||
if (nodeRect.bottom < areaRect.bottom - this.baseline) return;
|
||||
if (!shouldSnap(node)) return;
|
||||
|
||||
const relativeTop = nodeRect.top - areaRect.top;
|
||||
const modulo = relativeTop % this.baseline;
|
||||
if (modulo !== 0) {
|
||||
node.style.paddingTop = (this.baseline - modulo) + 'px';
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function shouldSnap(node) {
|
||||
return !node.closest('blockquote');
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue