39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
import { Handler } from '/csspageweaver/lib/paged.esm.js';
|
|
|
|
export default class snapToBaseline extends Handler {
|
|
constructor(chunker, polisher, caller) {
|
|
super(chunker, polisher, caller);
|
|
this.baseline;
|
|
}
|
|
|
|
beforeParsed(content){
|
|
this.baseline = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseline').trim());
|
|
// console.log("========================================");
|
|
// console.log("baseline = " + this.baseline);
|
|
}
|
|
|
|
renderNode(node, sourceNode){
|
|
if (node.nodeName === 'P') {
|
|
this.baseline = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--baseline').trim());
|
|
const area = node.closest('.pagedjs_area');
|
|
if (area) {
|
|
const areaRect = area.getBoundingClientRect();
|
|
const nodeRect = node.getBoundingClientRect();
|
|
const relativeTop = nodeRect.top - areaRect.top;
|
|
const modulo = relativeTop % this.baseline;
|
|
if (modulo !== 0) {
|
|
let newPadding = this.baseline - modulo;
|
|
node.style.paddingTop = newPadding + 'px';
|
|
}
|
|
}
|
|
return node;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|