|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- var UID = {
- _current: 0,
- getNew: function(){
- this._current++;
- return this._current;
- }
- };
-
- HTMLElement.prototype.pseudoStyle = function(element,prop,value){
- var _this = this;
- var _sheetId = "pseudoStyles";
- var _head = document.head || document.getElementsByTagName('head')[0];
- var _sheet = document.getElementById(_sheetId) || document.createElement('style');
- _sheet.id = _sheetId;
- var className = "pseudoStyle" + UID.getNew();
-
- _this.className += " "+className;
-
- _sheet.innerHTML += " ."+className+":"+element+"{"+prop+":"+value+"}";
- _head.appendChild(_sheet);
- return this;
- };
-
- class Sandpoints extends Paged.Handler {
- constructor(chunker, polisher, caller) {
- super(chunker, polisher, caller);
- }
-
- beforeParsed(content) {
- var d = {};
- content.querySelectorAll('*').forEach((n, i)=> {
- if (n.hasAttribute("printhref")) {
- n.setAttribute("href", n.getAttribute("printhref"))
- }
-
- if (n.classList.length > 0 ) {
- n.classList.forEach((c, i)=>{
- if (c.startsWith("css-")) {
- (c in d) ? d[c]++ : d[c] = 1
- let s = ""
- Object.keys(d).filter(ks => ks.startsWith(c.slice(0, -1))).forEach((t, i)=> {if (c >= t) {s += `${d[t]}.`}})
- n.pseudoStyle('before','content', `"${s} "`)
- }
- })
- }
- })
- }
-
- afterPageLayout(pageElement, page, breakToken, chunker) {
- // Find all split table elements
- let tables = pageElement.querySelectorAll("table[data-split-from]");
-
- tables.forEach((table) => {
- // There is an edge case where the previous page table
- // has zero height (isn't visible).
- // To avoid double header we will only add header if there is none.
- let tableHeader = table.querySelector("thead");
- if (tableHeader) {
- return;
- }
-
- // Get the reference UUID of the node
- let ref = table.dataset.ref;
- // Find the node in the original source
- let sourceTable = chunker.source.querySelector("[data-ref='" + ref + "']");
-
- // Find if there is a header
- let sourceHeader = sourceTable.querySelector("thead");
- if (sourceHeader) {
- // Clone the header element
- let clonedHeader = sourceHeader.cloneNode(true);
- // Insert the header at the start of the split table
- table.insertBefore(clonedHeader, table.firstChild);
- }
- });
-
- // Find all tables
- tables = pageElement.querySelectorAll("table");
-
- // special case which might not fit for everyone
- tables.forEach((table) => {
- // if the table has no rows in body, hide it.
- // This happens because my render engine creates empty tables.
- let sourceBody = table.querySelector("tbody > tr");
- if (!sourceBody) {
- console.log("Table was hidden, because it has no rows in tbody.");
- table.style.visibility = "hidden";
- table.style.position = "absolute";
-
- var lineSpacer = table.nextSibling;
- if (lineSpacer) {
- lineSpacer.style.visibility = "hidden";
- lineSpacer.style.position = "absolute";
- }
- }
- });
- }
- }
-
- Paged.registerHandlers(Sandpoints);
|