pagedjs
Version:
Chunks up a document into paged media flows and applies print styles
204 lines (197 loc) • 763 kB
JavaScript
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _wrapNativeSuper2=_interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _awaitAsyncGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));var _wrapAsyncGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));function _createForOfIteratorHelper(o,allowArrayLike){var it=typeof Symbol!=="undefined"&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]};},e:function e(_e){throw _e;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var normalCompletion=true,didErr=false,err;return{s:function s(){it=it.call(o);},n:function n(){var step=it.next();normalCompletion=step.done;return step;},e:function e(_e2){didErr=true;err=_e2;},f:function f(){try{if(!normalCompletion&&it["return"]!=null)it["return"]();}finally{if(didErr)throw err;}}};}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen);}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2;}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=(0,_getPrototypeOf2["default"])(Derived),result;if(hasNativeReflectConstruct){var NewTarget=(0,_getPrototypeOf2["default"])(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return(0,_possibleConstructorReturn2["default"])(this,result);};}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true;}catch(e){return false;}}/**
* @license Paged.js v0.4.3 | MIT | https://gitlab.coko.foundation/pagedjs/pagedjs
*/(function(global,factory){(typeof exports==="undefined"?"undefined":(0,_typeof2["default"])(exports))==='object'&&typeof module!=='undefined'?factory(exports):typeof define==='function'&&define.amd?define(['exports'],factory):(global=typeof globalThis!=='undefined'?globalThis:global||self,factory(global.Paged={}));})(void 0,function(exports){'use strict';var _marked=/*#__PURE__*/_regenerator["default"].mark(walk$2),_marked2=/*#__PURE__*/_regenerator["default"].mark(words),_marked3=/*#__PURE__*/_regenerator["default"].mark(letters);function getBoundingClientRect(element){if(!element){return;}var rect;if(typeof element.getBoundingClientRect!=="undefined"){rect=element.getBoundingClientRect();}else{var range=document.createRange();range.selectNode(element);rect=range.getBoundingClientRect();}return rect;}function getClientRects(element){if(!element){return;}var rect;if(typeof element.getClientRects!=="undefined"){rect=element.getClientRects();}else{var range=document.createRange();range.selectNode(element);rect=range.getClientRects();}return rect;}/**
* Generates a UUID
* based on: http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
* @returns {string} uuid
*/function UUID(){var d=new Date().getTime();if(typeof performance!=="undefined"&&typeof performance.now==="function"){d+=performance.now();//use high-precision timer if available
}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=(d+Math.random()*16)%16|0;d=Math.floor(d/16);return(c==="x"?r:r&0x3|0x8).toString(16);});}function attr(element,attributes){for(var i=0;i<attributes.length;i++){if(element.hasAttribute(attributes[i])){return element.getAttribute(attributes[i]);}}}/* Based on by https://mths.be/cssescape v1.5.1 by @mathias | MIT license
* Allows # and .
*/function querySelectorEscape(value){if(arguments.length==0){throw new TypeError("`CSS.escape` requires an argument.");}var string=String(value);var length=string.length;var index=-1;var codeUnit;var result="";var firstCodeUnit=string.charCodeAt(0);while(++index<length){codeUnit=string.charCodeAt(index);// Note: there’s no need to special-case astral symbols, surrogate
// pairs, or lone surrogates.
// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER
// (U+FFFD).
if(codeUnit==0x0000){result+="\uFFFD";continue;}if(// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
// U+007F, […]
codeUnit>=0x0001&&codeUnit<=0x001F||codeUnit==0x007F||// If the character is the first character and is in the range [0-9]
// (U+0030 to U+0039), […]
index==0&&codeUnit>=0x0030&&codeUnit<=0x0039||// If the character is the second character and is in the range [0-9]
// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
index==1&&codeUnit>=0x0030&&codeUnit<=0x0039&&firstCodeUnit==0x002D){// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point
result+="\\"+codeUnit.toString(16)+" ";continue;}if(// If the character is the first character and is a `-` (U+002D), and
// there is no second character, […]
index==0&&length==1&&codeUnit==0x002D){result+="\\"+string.charAt(index);continue;}// support for period character in id
if(codeUnit==0x002E){if(string.charAt(0)=="#"){result+="\\.";continue;}}// If the character is not handled by one of the above rules and is
// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
// U+005A), or [a-z] (U+0061 to U+007A), […]
if(codeUnit>=0x0080||codeUnit==0x002D||codeUnit==0x005F||codeUnit==35||// Allow #
codeUnit==46||// Allow .
codeUnit>=0x0030&&codeUnit<=0x0039||codeUnit>=0x0041&&codeUnit<=0x005A||codeUnit>=0x0061&&codeUnit<=0x007A){// the character itself
result+=string.charAt(index);continue;}// Otherwise, the escaped character.
// https://drafts.csswg.org/cssom/#escape-a-character
result+="\\"+string.charAt(index);}return result;}/**
* Creates a new pending promise and provides methods to resolve or reject it.
* From: https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Deferred#backwards_forwards_compatible
* @returns {object} defered
*/function defer(){var _this2=this;this.resolve=null;this.reject=null;this.id=UUID();this.promise=new Promise(function(resolve,reject){_this2.resolve=resolve;_this2.reject=reject;});Object.freeze(this);}var requestIdleCallback=typeof window!=="undefined"&&("requestIdleCallback"in window?window.requestIdleCallback:window.requestAnimationFrame);function CSSValueToString(obj){return obj.value+(obj.unit||"");}function isElement(node){return node&&node.nodeType===1;}function isText(node){return node&&node.nodeType===3;}function walk$2(start,limiter){var node;return _regenerator["default"].wrap(function walk$2$(_context){while(1)switch(_context.prev=_context.next){case 0:node=start;case 1:if(!node){_context.next=27;break;}_context.next=4;return node;case 4:if(!node.childNodes.length){_context.next=8;break;}node=node.firstChild;_context.next=25;break;case 8:if(!node.nextSibling){_context.next=15;break;}if(!(limiter&&node===limiter)){_context.next=12;break;}node=undefined;return _context.abrupt("break",27);case 12:node=node.nextSibling;_context.next=25;break;case 15:if(!node){_context.next=25;break;}node=node.parentNode;if(!(limiter&&node===limiter)){_context.next=20;break;}node=undefined;return _context.abrupt("break",25);case 20:if(!(node&&node.nextSibling)){_context.next=23;break;}node=node.nextSibling;return _context.abrupt("break",25);case 23:_context.next=15;break;case 25:_context.next=1;break;case 27:case"end":return _context.stop();}},_marked);}function nodeAfter(node,limiter){if(limiter&&node===limiter){return;}var significantNode=nextSignificantNode(node);if(significantNode){return significantNode;}if(node.parentNode){while(node=node.parentNode){if(limiter&&node===limiter){return;}significantNode=nextSignificantNode(node);if(significantNode){return significantNode;}}}}function nodeBefore(node,limiter){if(limiter&&node===limiter){return;}var significantNode=previousSignificantNode(node);if(significantNode){return significantNode;}if(node.parentNode){while(node=node.parentNode){if(limiter&&node===limiter){return;}significantNode=previousSignificantNode(node);if(significantNode){return significantNode;}}}}function elementAfter(node,limiter){var after=nodeAfter(node,limiter);while(after&&after.nodeType!==1){after=nodeAfter(after,limiter);}return after;}function elementBefore(node,limiter){var before=nodeBefore(node,limiter);while(before&&before.nodeType!==1){before=nodeBefore(before,limiter);}return before;}function displayedElementAfter(node,limiter){var after=elementAfter(node,limiter);while(after&&after.dataset.undisplayed){after=elementAfter(after,limiter);}return after;}function displayedElementBefore(node,limiter){var before=elementBefore(node,limiter);while(before&&before.dataset.undisplayed){before=elementBefore(before,limiter);}return before;}function rebuildAncestors(node){var parent,ancestor;var ancestors=[];var added=[];var fragment=document.createDocumentFragment();// Handle rowspan on table
if(node.nodeName==="TR"){var previousRow=node.previousElementSibling;var previousRowDistance=1;while(previousRow){// previous row has more columns, might indicate a rowspan.
if(previousRow.childElementCount>node.childElementCount){var initialColumns=Array.from(node.children);while(node.firstChild){node.firstChild.remove();}var k=0;for(var j=0;j<previousRow.children.length;j++){var column=previousRow.children[j];if(column.rowSpan&&column.rowSpan>previousRowDistance){var duplicatedColumn=column.cloneNode(true);// Adjust rowspan value
duplicatedColumn.rowSpan=column.rowSpan-previousRowDistance;// Add the column to the row
node.appendChild(duplicatedColumn);}else{// Fill the gap with the initial columns (if exists)
var initialColumn=initialColumns[k++];// The initial column can be undefined if the newly created table has less columns than the original table
if(initialColumn){node.appendChild(initialColumn);}}}}previousRow=previousRow.previousElementSibling;previousRowDistance++;}}// Gather all ancestors
var element=node;while(element.parentNode&&element.parentNode.nodeType===1){ancestors.unshift(element.parentNode);element=element.parentNode;}for(var i=0;i<ancestors.length;i++){ancestor=ancestors[i];parent=ancestor.cloneNode(false);parent.setAttribute("data-split-from",parent.getAttribute("data-ref"));// ancestor.setAttribute("data-split-to", parent.getAttribute("data-ref"));
if(parent.hasAttribute("id")){var dataID=parent.getAttribute("id");parent.setAttribute("data-id",dataID);parent.removeAttribute("id");}// This is handled by css :not, but also tidied up here
if(parent.hasAttribute("data-break-before")){parent.removeAttribute("data-break-before");}if(parent.hasAttribute("data-previous-break-after")){parent.removeAttribute("data-previous-break-after");}if(added.length){var container=added[added.length-1];container.appendChild(parent);}else{fragment.appendChild(parent);}added.push(parent);// rebuild table rows
if(parent.nodeName==="TD"&&ancestor.parentElement.contains(ancestor)){var td=ancestor;var prev=parent;while(td=td.previousElementSibling){var sib=td.cloneNode(false);parent.parentElement.insertBefore(sib,prev);prev=sib;}}}added=undefined;return fragment;}/*
export function split(bound, cutElement, breakAfter) {
let needsRemoval = [];
let index = indexOf(cutElement);
if (!breakAfter && index === 0) {
return;
}
if (breakAfter && index === (cutElement.parentNode.children.length - 1)) {
return;
}
// Create a fragment with rebuilt ancestors
let fragment = rebuildAncestors(cutElement);
// Clone cut
if (!breakAfter) {
let clone = cutElement.cloneNode(true);
let ref = cutElement.parentNode.getAttribute('data-ref');
let parent = fragment.querySelector("[data-ref='" + ref + "']");
parent.appendChild(clone);
needsRemoval.push(cutElement);
}
// Remove all after cut
let next = nodeAfter(cutElement, bound);
while (next) {
let clone = next.cloneNode(true);
let ref = next.parentNode.getAttribute('data-ref');
let parent = fragment.querySelector("[data-ref='" + ref + "']");
parent.appendChild(clone);
needsRemoval.push(next);
next = nodeAfter(next, bound);
}
// Remove originals
needsRemoval.forEach((node) => {
if (node) {
node.remove();
}
});
// Insert after bounds
bound.parentNode.insertBefore(fragment, bound.nextSibling);
return [bound, bound.nextSibling];
}
*/function needsBreakBefore(node){if(typeof node!=="undefined"&&typeof node.dataset!=="undefined"&&typeof node.dataset.breakBefore!=="undefined"&&(node.dataset.breakBefore==="always"||node.dataset.breakBefore==="page"||node.dataset.breakBefore==="left"||node.dataset.breakBefore==="right"||node.dataset.breakBefore==="recto"||node.dataset.breakBefore==="verso")){return true;}return false;}function needsPreviousBreakAfter(node){if(typeof node!=="undefined"&&typeof node.dataset!=="undefined"&&typeof node.dataset.previousBreakAfter!=="undefined"&&(node.dataset.previousBreakAfter==="always"||node.dataset.previousBreakAfter==="page"||node.dataset.previousBreakAfter==="left"||node.dataset.previousBreakAfter==="right"||node.dataset.previousBreakAfter==="recto"||node.dataset.previousBreakAfter==="verso")){return true;}return false;}function needsPageBreak(node,previousSignificantNode){if(typeof node==="undefined"||!previousSignificantNode||isIgnorable(node)){return false;}if(node.dataset&&node.dataset.undisplayed){return false;}var previousSignificantNodePage=previousSignificantNode.dataset?previousSignificantNode.dataset.page:undefined;if(typeof previousSignificantNodePage==="undefined"){var nodeWithNamedPage=getNodeWithNamedPage(previousSignificantNode);if(nodeWithNamedPage){previousSignificantNodePage=nodeWithNamedPage.dataset.page;}}var currentNodePage=node.dataset?node.dataset.page:undefined;if(typeof currentNodePage==="undefined"){var _nodeWithNamedPage=getNodeWithNamedPage(node,previousSignificantNode);if(_nodeWithNamedPage){currentNodePage=_nodeWithNamedPage.dataset.page;}}return currentNodePage!==previousSignificantNodePage;}function words(node){var currentText,max,currentOffset,currentLetter,range,significantWhitespaces;return _regenerator["default"].wrap(function words$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:currentText=node.nodeValue;max=currentText.length;currentOffset=0;significantWhitespaces=node.parentElement&&node.parentElement.nodeName==="PRE";case 4:if(!(currentOffset<max)){_context2.next=18;break;}currentLetter=currentText[currentOffset];if(!(/^[\S\u202F\u00A0]$/.test(currentLetter)||significantWhitespaces)){_context2.next=10;break;}if(!range){range=document.createRange();range.setStart(node,currentOffset);}_context2.next=15;break;case 10:if(!range){_context2.next=15;break;}range.setEnd(node,currentOffset);_context2.next=14;return range;case 14:range=undefined;case 15:currentOffset+=1;_context2.next=4;break;case 18:if(!range){_context2.next=22;break;}range.setEnd(node,currentOffset);_context2.next=22;return range;case 22:case"end":return _context2.stop();}},_marked2);}function letters(wordRange){var currentText,max,currentOffset,range;return _regenerator["default"].wrap(function letters$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:currentText=wordRange.startContainer;max=currentText.length;currentOffset=wordRange.startOffset;// let currentLetter;
case 3:if(!(currentOffset<max)){_context3.next=12;break;}// currentLetter = currentText[currentOffset];
range=document.createRange();range.setStart(currentText,currentOffset);range.setEnd(currentText,currentOffset+1);_context3.next=9;return range;case 9:currentOffset+=1;_context3.next=3;break;case 12:case"end":return _context3.stop();}},_marked3);}function isContainer(node){var container;if(typeof node.tagName==="undefined"){return true;}if(node.style&&node.style.display==="none"){return false;}switch(node.tagName){// Inline
case"A":case"ABBR":case"ACRONYM":case"B":case"BDO":case"BIG":case"BR":case"BUTTON":case"CITE":case"CODE":case"DFN":case"EM":case"I":case"IMG":case"INPUT":case"KBD":case"LABEL":case"MAP":case"OBJECT":case"Q":case"SAMP":case"SCRIPT":case"SELECT":case"SMALL":case"SPAN":case"STRONG":case"SUB":case"SUP":case"TEXTAREA":case"TIME":case"TT":case"VAR":case"P":case"H1":case"H2":case"H3":case"H4":case"H5":case"H6":case"FIGCAPTION":case"BLOCKQUOTE":case"PRE":case"LI":case"TD":case"DT":case"DD":case"VIDEO":case"CANVAS":container=false;break;default:container=true;}return container;}function cloneNode(n){var deep=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return n.cloneNode(deep);}function findElement(node,doc,forceQuery){var ref=node.getAttribute("data-ref");return findRef(ref,doc,forceQuery);}function findRef(ref,doc,forceQuery){if(!forceQuery&&doc.indexOfRefs&&doc.indexOfRefs[ref]){return doc.indexOfRefs[ref];}else{return doc.querySelector("[data-ref='".concat(ref,"']"));}}function validNode(node){if(isText(node)){return true;}if(isElement(node)&&node.dataset.ref){return true;}return false;}function prevValidNode(node){while(!validNode(node)){if(node.previousSibling){node=node.previousSibling;}else{node=node.parentNode;}if(!node){break;}}return node;}function indexOf$2(node){var parent=node.parentNode;if(!parent){return 0;}return Array.prototype.indexOf.call(parent.childNodes,node);}function child(node,index){return node.childNodes[index];}function hasContent(node){if(isElement(node)){return true;}else if(isText(node)&&node.textContent.trim().length){return true;}return false;}function indexOfTextNode(node,parent){if(!isText(node)){return-1;}var nodeTextContent=node.textContent;var child;var index=-1;for(var i=0;i<parent.childNodes.length;i++){child=parent.childNodes[i];if(child.nodeType===3){var text=parent.childNodes[i].textContent;if(text.includes(nodeTextContent)){index=i;break;}}}return index;}/**
* Throughout, whitespace is defined as one of the characters
* "\t" TAB \u0009
* "\n" LF \u000A
* "\r" CR \u000D
* " " SPC \u0020
*
* This does not use Javascript's "\s" because that includes non-breaking
* spaces (and also some other characters).
*/ /**
* Determine if a node should be ignored by the iterator functions.
* taken from https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace#Whitespace_helper_functions
*
* @param {Node} node An object implementing the DOM1 |Node| interface.
* @return {boolean} true if the node is:
* 1) A |Text| node that is all whitespace
* 2) A |Comment| node
* and otherwise false.
*/function isIgnorable(node){return node.nodeType===8||// A comment node
node.nodeType===3&&isAllWhitespace(node);// a text node, all whitespace
}/**
* Determine whether a node's text content is entirely whitespace.
*
* @param {Node} node A node implementing the |CharacterData| interface (i.e., a |Text|, |Comment|, or |CDATASection| node
* @return {boolean} true if all of the text content of |nod| is whitespace, otherwise false.
*/function isAllWhitespace(node){return!/[^\t\n\r ]/.test(node.textContent);}/**
* Version of |previousSibling| that skips nodes that are entirely
* whitespace or comments. (Normally |previousSibling| is a property
* of all DOM nodes that gives the sibling node, the node that is
* a child of the same parent, that occurs immediately before the
* reference node.)
*
* @param {ChildNode} sib The reference node.
* @return {Node|null} Either:
* 1) The closest previous sibling to |sib| that is not ignorable according to |is_ignorable|, or
* 2) null if no such node exists.
*/function previousSignificantNode(sib){while(sib=sib.previousSibling){if(!isIgnorable(sib))return sib;}return null;}function getNodeWithNamedPage(node,limiter){if(node&&node.dataset&&node.dataset.page){return node;}if(node.parentNode){while(node=node.parentNode){if(limiter&&node===limiter){return;}if(node.dataset&&node.dataset.page){return node;}}}return null;}function breakInsideAvoidParentNode(node){while(node=node.parentNode){if(node&&node.dataset&&node.dataset.breakInside==="avoid"){return node;}}return null;}/**
* Find a parent with a given node name.
* @param {Node} node - initial Node
* @param {string} nodeName - node name (eg. "TD", "TABLE", "STRONG"...)
* @param {Node} limiter - go up to the parent until there's no more parent or the current node is equals to the limiter
* @returns {Node|undefined} - Either:
* 1) The closest parent for a the given node name, or
* 2) undefined if no such node exists.
*/function parentOf(node,nodeName,limiter){if(limiter&&node===limiter){return;}if(node.parentNode){while(node=node.parentNode){if(limiter&&node===limiter){return;}if(node.nodeName===nodeName){return node;}}}}/**
* Version of |nextSibling| that skips nodes that are entirely
* whitespace or comments.
*
* @param {ChildNode} sib The reference node.
* @return {Node|null} Either:
* 1) The closest next sibling to |sib| that is not ignorable according to |is_ignorable|, or
* 2) null if no such node exists.
*/function nextSignificantNode(sib){while(sib=sib.nextSibling){if(!isIgnorable(sib))return sib;}return null;}function filterTree(content,func,what){var treeWalker=document.createTreeWalker(content||this.dom,what||NodeFilter.SHOW_ALL,func?{acceptNode:func}:null,false);var node;var current;node=treeWalker.nextNode();while(node){current=node;node=treeWalker.nextNode();current.parentNode.removeChild(current);}}/**
* BreakToken
* @class
*/var BreakToken=/*#__PURE__*/function(){function BreakToken(node,offset){(0,_classCallCheck2["default"])(this,BreakToken);this.node=node;this.offset=offset;}(0,_createClass2["default"])(BreakToken,[{key:"equals",value:function equals(otherBreakToken){if(!otherBreakToken){return false;}if(this["node"]&&otherBreakToken["node"]&&this["node"]!==otherBreakToken["node"]){return false;}if(this["offset"]&&otherBreakToken["offset"]&&this["offset"]!==otherBreakToken["offset"]){return false;}return true;}},{key:"toJSON",value:function toJSON(hash){var node;var index=0;if(!this.node){return{};}if(isElement(this.node)&&this.node.dataset.ref){node=this.node.dataset.ref;}else if(hash){node=this.node.parentElement.dataset.ref;}if(this.node.parentElement){var children=Array.from(this.node.parentElement.childNodes);index=children.indexOf(this.node);}return JSON.stringify({"node":node,"index":index,"offset":this.offset});}}]);return BreakToken;}();/**
* Render result.
* @class
*/var RenderResult=/*#__PURE__*/(0,_createClass2["default"])(function RenderResult(breakToken,error){(0,_classCallCheck2["default"])(this,RenderResult);this.breakToken=breakToken;this.error=error;});var OverflowContentError=/*#__PURE__*/function(_Error){(0,_inherits2["default"])(OverflowContentError,_Error);var _super=_createSuper(OverflowContentError);function OverflowContentError(message,items){var _this3;(0,_classCallCheck2["default"])(this,OverflowContentError);_this3=_super.call(this,message);_this3.items=items;return _this3;}return(0,_createClass2["default"])(OverflowContentError);}(/*#__PURE__*/(0,_wrapNativeSuper2["default"])(Error));function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var eventEmitter={exports:{}};var d$2={exports:{}};var isImplemented$6=function isImplemented$6(){var assign=Object.assign,obj;if(typeof assign!=="function")return false;obj={foo:"raz"};assign(obj,{bar:"dwa"},{trzy:"trzy"});return obj.foo+obj.bar+obj.trzy==="razdwatrzy";};var isImplemented$5;var hasRequiredIsImplemented$1;function requireIsImplemented$1(){if(hasRequiredIsImplemented$1)return isImplemented$5;hasRequiredIsImplemented$1=1;isImplemented$5=function isImplemented$5(){try{Object.keys("primitive");return true;}catch(e){return false;}};return isImplemented$5;}// eslint-disable-next-line no-empty-function
var noop$4=function noop$4(){};var _undefined=noop$4();// Support ES3 engines
var isValue$3=function isValue$3(val){return val!==_undefined&&val!==null;};var shim$5;var hasRequiredShim$5;function requireShim$5(){if(hasRequiredShim$5)return shim$5;hasRequiredShim$5=1;var isValue=isValue$3;var keys=Object.keys;shim$5=function shim$5(object){return keys(isValue(object)?Object(object):object);};return shim$5;}var keys;var hasRequiredKeys;function requireKeys(){if(hasRequiredKeys)return keys;hasRequiredKeys=1;keys=requireIsImplemented$1()()?Object.keys:requireShim$5();return keys;}var isValue$2=isValue$3;var validValue=function validValue(value){if(!isValue$2(value))throw new TypeError("Cannot use null or undefined");return value;};var shim$4;var hasRequiredShim$4;function requireShim$4(){if(hasRequiredShim$4)return shim$4;hasRequiredShim$4=1;var keys=requireKeys(),value=validValue,max=Math.max;shim$4=function shim$4(dest,src/*, …srcn*/){var error,i,length=max(arguments.length,2),assign;dest=Object(value(dest));assign=function assign(key){try{dest[key]=src[key];}catch(e){if(!error)error=e;}};for(i=1;i<length;++i){src=arguments[i];keys(src).forEach(assign);}if(error!==undefined)throw error;return dest;};return shim$4;}var assign$2=isImplemented$6()?Object.assign:requireShim$4();var isValue$1=isValue$3;var forEach$1=Array.prototype.forEach,create$5=Object.create;var process=function process(src,obj){var key;for(key in src)obj[key]=src[key];};// eslint-disable-next-line no-unused-vars
var normalizeOptions=function normalizeOptions(opts1/*, …options*/){var result=create$5(null);forEach$1.call(arguments,function(options){if(!isValue$1(options))return;process(Object(options),result);});return result;};var isCallable$1=function isCallable$1(obj){return typeof obj==="function";};var str="razdwatrzy";var isImplemented$4=function isImplemented$4(){if(typeof str.contains!=="function")return false;return str.contains("dwa")===true&&str.contains("foo")===false;};var shim$3;var hasRequiredShim$3;function requireShim$3(){if(hasRequiredShim$3)return shim$3;hasRequiredShim$3=1;var indexOf=String.prototype.indexOf;shim$3=function shim$3(searchString/*, position*/){return indexOf.call(this,searchString,arguments[1])>-1;};return shim$3;}var contains$1=isImplemented$4()?String.prototype.contains:requireShim$3();var assign$1=assign$2,normalizeOpts=normalizeOptions,isCallable=isCallable$1,contains=contains$1,d$1;d$1=d$2.exports=function(dscr,value/*, options*/){var c,e,w,options,desc;if(arguments.length<2||typeof dscr!=='string'){options=value;value=dscr;dscr=null;}else{options=arguments[2];}if(dscr==null){c=w=true;e=false;}else{c=contains.call(dscr,'c');e=contains.call(dscr,'e');w=contains.call(dscr,'w');}desc={value:value,configurable:c,enumerable:e,writable:w};return!options?desc:assign$1(normalizeOpts(options),desc);};d$1.gs=function(dscr,get,set/*, options*/){var c,e,options,desc;if(typeof dscr!=='string'){options=set;set=get;get=dscr;dscr=null;}else{options=arguments[3];}if(get==null){get=undefined;}else if(!isCallable(get)){options=get;get=set=undefined;}else if(set==null){set=undefined;}else if(!isCallable(set)){options=set;set=undefined;}if(dscr==null){c=true;e=false;}else{c=contains.call(dscr,'c');e=contains.call(dscr,'e');}desc={get:get,set:set,configurable:c,enumerable:e};return!options?desc:assign$1(normalizeOpts(options),desc);};var dExports=d$2.exports;var validCallable=function validCallable(fn){if(typeof fn!=="function")throw new TypeError(fn+" is not a function");return fn;};(function(module,exports){var d=dExports,callable=validCallable,apply=Function.prototype.apply,call=Function.prototype.call,create=Object.create,defineProperty=Object.defineProperty,defineProperties=Object.defineProperties,hasOwnProperty=Object.prototype.hasOwnProperty,descriptor={configurable:true,enumerable:false,writable:true},on,_once2,off,emit,methods,descriptors,base;on=function on(type,listener){var data;callable(listener);if(!hasOwnProperty.call(this,'__ee__')){data=descriptor.value=create(null);defineProperty(this,'__ee__',descriptor);descriptor.value=null;}else{data=this.__ee__;}if(!data[type])data[type]=listener;else if((0,_typeof2["default"])(data[type])==='object')data[type].push(listener);else data[type]=[data[type],listener];return this;};_once2=function once(type,listener){var _once,self;callable(listener);self=this;on.call(this,type,_once=function once(){off.call(self,type,_once);apply.call(listener,this,arguments);});_once.__eeOnceListener__=listener;return this;};off=function off(type,listener){var data,listeners,candidate,i;callable(listener);if(!hasOwnProperty.call(this,'__ee__'))return this;data=this.__ee__;if(!data[type])return this;listeners=data[type];if((0,_typeof2["default"])(listeners)==='object'){for(i=0;candidate=listeners[i];++i){if(candidate===listener||candidate.__eeOnceListener__===listener){if(listeners.length===2)data[type]=listeners[i?0:1];else listeners.splice(i,1);}}}else{if(listeners===listener||listeners.__eeOnceListener__===listener){delete data[type];}}return this;};emit=function emit(type){var i,l,listener,listeners,args;if(!hasOwnProperty.call(this,'__ee__'))return;listeners=this.__ee__[type];if(!listeners)return;if((0,_typeof2["default"])(listeners)==='object'){l=arguments.length;args=new Array(l-1);for(i=1;i<l;++i)args[i-1]=arguments[i];listeners=listeners.slice();for(i=0;listener=listeners[i];++i){apply.call(listener,this,args);}}else{switch(arguments.length){case 1:call.call(listeners,this);break;case 2:call.call(listeners,this,arguments[1]);break;case 3:call.call(listeners,this,arguments[1],arguments[2]);break;default:l=arguments.length;args=new Array(l-1);for(i=1;i<l;++i){args[i-1]=arguments[i];}apply.call(listeners,this,args);}}};methods={on:on,once:_once2,off:off,emit:emit};descriptors={on:d(on),once:d(_once2),off:d(off),emit:d(emit)};base=defineProperties({},descriptors);module.exports=exports=function exports(o){return o==null?create(base):defineProperties(Object(o),descriptors);};exports.methods=methods;})(eventEmitter,eventEmitter.exports);var eventEmitterExports=eventEmitter.exports;var EventEmitter=/*@__PURE__*/getDefaultExportFromCjs(eventEmitterExports);/**
* Hooks allow for injecting functions that must all complete in order before finishing
* They will execute in parallel but all must finish before continuing
* Functions may return a promise if they are asycn.
* From epubjs/src/utils/hooks
* @param {any} context scope of this
* @example this.content = new Hook(this);
*/var Hook=/*#__PURE__*/function(){function Hook(context){(0,_classCallCheck2["default"])(this,Hook);this.context=context||this;this.hooks=[];}/**
* Adds a function to be run before a hook completes
* @example this.content.register(function(){...});
* @return {undefined} void
*/(0,_createClass2["default"])(Hook,[{key:"register",value:function register(){for(var i=0;i<arguments.length;++i){if(typeof arguments[i]==="function"){this.hooks.push(arguments[i]);}else{// unpack array
for(var j=0;j<arguments[i].length;++j){this.hooks.push(arguments[i][j]);}}}}/**
* Triggers a hook to run all functions
* @example this.content.trigger(args).then(function(){...});
* @return {Promise} results
*/},{key:"trigger",value:function trigger(){var args=arguments;var context=this.context;var promises=[];this.hooks.forEach(function(task){var executing=task.apply(context,args);if(executing&&typeof executing["then"]==="function"){// Task is a function that returns a promise
promises.push(executing);}else{// Otherwise Task resolves immediately, add resolved promise with result
promises.push(new Promise(function(resolve,reject){resolve(executing);}));}});return Promise.all(promises);}/**
* Triggers a hook to run all functions synchronously
* @example this.content.trigger(args).then(function(){...});
* @return {Array} results
*/},{key:"triggerSync",value:function triggerSync(){var args=arguments;var context=this.context;var results=[];this.hooks.forEach(function(task){var executing=task.apply(context,args);results.push(executing);});return results;}// Adds a function to be run before a hook completes
},{key:"list",value:function list(){return this.hooks;}},{key:"clear",value:function clear(){return this.hooks=[];}}]);return Hook;}();var MAX_CHARS_PER_BREAK=1500;/**
* Layout
* @class
*/var Layout=/*#__PURE__*/function(){function Layout(element,hooks,options){(0,_classCallCheck2["default"])(this,Layout);this.element=element;this.bounds=this.element.getBoundingClientRect();this.parentBounds=this.element.offsetParent.getBoundingClientRect();var gap=parseFloat(window.getComputedStyle(this.element).columnGap);if(gap){var leftMargin=this.bounds.left-this.parentBounds.left;this.gap=gap-leftMargin;}else{this.gap=0;}if(hooks){this.hooks=hooks;}else{this.hooks={};this.hooks.onPageLayout=new Hook();this.hooks.layout=new Hook();this.hooks.renderNode=new Hook();this.hooks.layoutNode=new Hook();this.hooks.beforeOverflow=new Hook();this.hooks.onOverflow=new Hook();this.hooks.afterOverflowRemoved=new Hook();this.hooks.onBreakToken=new Hook();this.hooks.beforeRenderResult=new Hook();}this.settings=options||{};this.maxChars=this.settings.maxChars||MAX_CHARS_PER_BREAK;this.forceRenderBreak=false;}(0,_createClass2["default"])(Layout,[{key:"renderTo",value:function(){var _renderTo=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(wrapper,source,breakToken){var bounds,start,walker,node,prevNode,done,next,hasRenderedContent,newBreakToken,length,prevBreakToken,imgs,_imgs,after,named,_page,shallow,rendered,_imgs2,_after,_args5=arguments;return _regenerator["default"].wrap(function _callee$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:bounds=_args5.length>3&&_args5[3]!==undefined?_args5[3]:this.bounds;start=this.getStart(source,breakToken);walker=walk$2(start,source);hasRenderedContent=false;length=0;prevBreakToken=breakToken||new BreakToken(start);this.hooks&&this.hooks.onPageLayout.trigger(wrapper,prevBreakToken,this);case 7:if(!(!done&&!newBreakToken)){_context4.next=77;break;}next=walker.next();prevNode=node;node=next.value;done=next.done;if(node){_context4.next=26;break;}this.hooks&&this.hooks.layout.trigger(wrapper,this);imgs=wrapper.querySelectorAll("img");if(!imgs.length){_context4.next=18;break;}_context4.next=18;return this.waitForImages(imgs);case 18:newBreakToken=this.findBreakToken(wrapper,source,bounds,prevBreakToken);if(!(newBreakToken&&newBreakToken.equals(prevBreakToken))){_context4.next=23;break;}console.warn("Unable to layout item: ",prevNode);this.hooks&&this.hooks.beforeRenderResult.trigger(undefined,wrapper,this);return _context4.abrupt("return",new RenderResult(undefined,new OverflowContentError("Unable to layout item",[prevNode])));case 23:this.rebuildTableFromBreakToken(newBreakToken,wrapper);this.hooks&&this.hooks.beforeRenderResult.trigger(newBreakToken,wrapper,this);return _context4.abrupt("return",new RenderResult(newBreakToken));case 26:this.hooks&&this.hooks.layoutNode.trigger(node);// Check if the rendered element has a break set
if(!(hasRenderedContent&&this.shouldBreak(node,start))){_context4.next=45;break;}this.hooks&&this.hooks.layout.trigger(wrapper,this);_imgs=wrapper.querySelectorAll("img");if(!_imgs.length){_context4.next=33;break;}_context4.next=33;return this.waitForImages(_imgs);case 33:newBreakToken=this.findBreakToken(wrapper,source,bounds,prevBreakToken);if(!newBreakToken){newBreakToken=this.breakAt(node);}else{this.rebuildTableFromBreakToken(newBreakToken,wrapper);}if(!(newBreakToken&&newBreakToken.equals(prevBreakToken))){_context4.next=43;break;}console.warn("Unable to layout item: ",node);after=newBreakToken.node&&nodeAfter(newBreakToken.node);if(!after){_context4.next=42;break;}newBreakToken=new BreakToken(after);_context4.next=43;break;case 42:return _context4.abrupt("return",new RenderResult(undefined,new OverflowContentError("Unable to layout item",[node])));case 43:length=0;return _context4.abrupt("break",77);case 45:if(node.dataset&&node.dataset.page){named=node.dataset.page;_page=this.element.closest(".pagedjs_page");_page.classList.add("pagedjs_named_page");_page.classList.add("pagedjs_"+named+"_page");if(!node.dataset.splitFrom){_page.classList.add("pagedjs_"+named+"_first_page");}}// Should the Node be a shallow or deep clone
shallow=isContainer(node);rendered=this.append(node,wrapper,breakToken,shallow);length+=rendered.textContent.length;// Check if layout has content yet
if(!hasRenderedContent){hasRenderedContent=hasContent(node);}// Skip to the next node if a deep clone was rendered
if(!shallow){walker=walk$2(nodeAfter(node,source),source);}if(!this.forceRenderBreak){_context4.next=58;break;}this.hooks&&this.hooks.layout.trigger(wrapper,this);newBreakToken=this.findBreakToken(wrapper,source,bounds,prevBreakToken);if(!newBreakToken){newBreakToken=this.breakAt(node);}else{this.rebuildTableFromBreakToken(newBreakToken,wrapper);}length=0;this.forceRenderBreak=false;return _context4.abrupt("break",77);case 58:if(!(length>=this.maxChars)){_context4.next=75;break;}this.hooks&&this.hooks.layout.trigger(wrapper,this);_imgs2=wrapper.querySelectorAll("img");if(!_imgs2.length){_context4.next=64;break;}_context4.next=64;return this.waitForImages(_imgs2);case 64:newBreakToken=this.findBreakToken(wrapper,source,bounds,prevBreakToken);if(newBreakToken){length=0;this.rebuildTableFromBreakToken(newBreakToken,wrapper);}if(!(newBreakToken&&newBreakToken.equals(prevBreakToken))){_context4.next=75;break;}console.warn("Unable to layout item: ",node);_after=newBreakToken.node&&nodeAfter(newBreakToken.node);if(!_after){_context4.next=73;break;}newBreakToken=new BreakToken(_after);_context4.next=75;break;case 73:this.hooks&&this.hooks.beforeRenderResult.trigger(undefined,wrapper,this);return _context4.abrupt("return",new RenderResult(undefined,new OverflowContentError("Unable to layout item",[node])));case 75:_context4.next=7;break;case 77:this.hooks&&this.hooks.beforeRenderResult.trigger(newBreakToken,wrapper,this);return _context4.abrupt("return",new RenderResult(newBreakToken));case 79:case"end":return _context4.stop();}},_callee,this);}));function renderTo(_x,_x2,_x3){return _renderTo.apply(this,arguments);}return renderTo;}()},{key:"breakAt",value:function breakAt(node){var offset=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var newBreakToken=new BreakToken(node,offset);var breakHooks=this.hooks.onBreakToken.triggerSync(newBreakToken,undefined,node,this);breakHooks.forEach(function(newToken){if(typeof newToken!="undefined"){newBreakToken=newToken;}});return newBreakToken;}},{key:"shouldBreak",value:function shouldBreak(node,limiter){var previousNode=nodeBefore(node,limiter);var parentNode=node.parentNode;var parentBreakBefore=needsBreakBefore(node)&&parentNode&&!previousNode&&needsBreakBefore(parentNode);var doubleBreakBefore;if(parentBreakBefore){doubleBreakBefore=node.dataset.breakBefore===parentNode.dataset.breakBefore;}return!doubleBreakBefore&&needsBreakBefore(node)||needsPreviousBreakAfter(node)||needsPageBreak(node,previousNode);}},{key:"forceBreak",value:function forceBreak(){this.forceRenderBreak=true;}},{key:"getStart",value:function getStart(source,breakToken){var start;var node=breakToken&&breakToken.node;if(node){start=node;}else{start=source.firstChild;}return start;}},{key:"append",value:function append(node,dest,breakToken){var shallow=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var rebuild=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;var clone=cloneNode(node,!shallow);if(node.parentNode&&isElement(node.parentNode)){var parent=findElement(node.parentNode,dest);// Rebuild chain
if(parent){parent.appendChild(clone);}else if(rebuild){var fragment=rebuildAncestors(node);parent=findElement(node.parentNode,fragment);if(!parent){dest.appendChild(clone);}else if(breakToken&&isText(breakToken.node)&&breakToken.offset>0){clone.textContent=clone.textContent.substring(breakToken.offset);parent.appendChild(clone);}else{parent.appendChild(clone);}dest.appendChild(fragment);}else{dest.appendChild(clone);}}else{dest.appendChild(clone);}if(clone.dataset&&clone.dataset.ref){if(!dest.indexOfRefs){dest.indexOfRefs={};}dest.indexOfRefs[clone.dataset.ref]=clone;}var nodeHooks=this.hooks.renderNode.triggerSync(clone,node,this);nodeHooks.forEach(function(newNode){if(typeof newNode!="undefined"){clone=newNode;}});return clone;}},{key:"rebuildTableFromBreakToken",value:function rebuildTableFromBreakToken(breakToken,dest){if(!breakToken||!breakToken.node){return;}var node=breakToken.node;var td=isElement(node)?node.closest("td"):node.parentElement.closest("td");if(td){var rendered=findElement(td,dest,true);if(!rendered){return;}while(td=td.nextElementSibling){this.append(td,dest,null,true);}}}},{key:"waitForImages",value:function(){var _waitForImages=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(imgs){var _this4=this;var results;return _regenerator["default"].wrap(function _callee3$(_context6){while(1)switch(_context6.prev=_context6.next){case 0:results=Array.from(imgs).map(/*#__PURE__*/function(){var _ref=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(img){return _regenerator["default"].wrap(function _callee2$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:return _context5.abrupt("return",_this4.awaitImageLoaded(img));case 1:case"end":return _context5.stop();}},_callee2);}));return function(_x5){return _ref.apply(this,arguments);};}());_context6.next=3;return Promise.all(results);case 3:case"end":return _context6.stop();}},_callee3);}));function waitForImages(_x4){return _waitForImages.apply(this,arguments);}return waitForImages;}()},{key:"awaitImageLoaded",value:function(){var _awaitImageLoaded=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(image){return _regenerator["default"].wrap(function _callee4$(_context7){while(1)switch(_context7.prev=_context7.next){case 0:return _context7.abrupt("return",new Promise(function(resolve){if(image.complete!==true){image.onload=function(){var _window$getComputedSt=window.getComputedStyle(image),width=_window$getComputedSt.width,height=_window$getComputedSt.height;resolve(width,height);};image.onerror=function(e){var _window$getComputedSt2=window.getComputedStyle(image),width=_window$getComputedSt2.width,height=_window$getComputedSt2.height;resolve(width,height,e);};}else{var _window$getComputedSt3=window.getComputedStyle(image),_width=_window$getComputedSt3.width,_height=_window$getComputedSt3.height;resolve(_width,_height);}}));case 1:case"end":return _context7.stop();}},_callee4);}));function awaitImageLoaded(_x6){return _awaitImageLoaded.apply(this,arguments);}return awaitImageLoaded;}()},{key:"avoidBreakInside",value:function avoidBreakInside(node,limiter){var breakNode;if(node===limiter){return;}while(node.parentNode){node=node.parentNode;if(node===limiter){break;}if(window.getComputedStyle(node)["break-inside"]==="avoid"){breakNode=node;break;}}return breakNode;}},{key:"createBreakToken",value:function createBreakToken(overflow,rendered,source){var container=overflow.startContainer;var offset=overflow.startOffset;var node,renderedNode,parent,index,temp;if(isElement(container)){temp=child(container,offset);if(isElement(temp)){renderedNode=findElement(temp,rendered);if(!renderedNode){// Find closest element with data-ref
var prevNode=prevValidNode(temp);if(!isElement(prevNode)){prevNode=prevNode.parentElement;}renderedNode=findElement(prevNode,rendered);// Check if temp is the last rendered node at its level.
if(!temp.nextSibling){// We need to ensure that the previous sibling of temp is fully rendered.
var renderedNodeFromSource=findElement(renderedNode,source);var _walker=document.createTreeWalker(renderedNodeFromSource,NodeFilter.SHOW_ELEMENT);var lastChildOfRenderedNodeFromSource=_walker.lastChild();var lastChildOfRenderedNodeMatchingFromRendered=findElement(lastChildOfRenderedNodeFromSource,rendered);// Check if we found that the last child in source
if(!lastChildOfRenderedNodeMatchingFromRendered){// Pending content to be rendered before virtual break token
return;}// Otherwise we will return a break token as per below
}// renderedNode is actually the last unbroken box that does not overflow.
// Break Token is therefore the next sibling of renderedNode within source node.
node=findElement(renderedNode,source).nextSibling;offset=0;}else{node=findElement(renderedNode,source);offset=0;}}else{renderedNode=findElement(container,rendered);if(!renderedNode){renderedNode=findElement(prevValidNode(container),rendered);}parent=findElement(renderedNode,source);index=indexOfTextNode(temp,parent);// No seperatation for the first textNode of an element
if(index===0){node=parent;offset=0;}else{node=child(parent,index);offset=0;}}}else{renderedNode=findElement(container.parentNode,rendered);if(!renderedNode){renderedNode=findElement(prevValidNode(container.parentNode),rendered);}parent=findElement(renderedNode,source);index=indexOfTextNode(container,parent);if(index===-1){return;}node=child(parent,index);offset+=node.textContent.indexOf(container.textContent);}if(!node){return;}return new BreakToken(node,offset);}},{key:"findBreakToken",value:function findBreakToken(rendered,source){var bounds=arguments.length>2&&arguments[2]!==undefined?arguments[2]:this.bounds;var prevBreakToken=arguments.length>3?arguments[3]:undefined;var extract=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;var overflow=this.findOverflow(rendered,bounds);var breakToken,breakLetter;var overflowHooks=this.hooks.onOverflow.triggerSync(overflow,rendered,bounds,this);overflowHooks.forEach(function(newOverflow){if(typeof newOverflow!="undefined"){overflow=newOverflow;}});if(overflow){breakToken=this.createBreakToken(overflow,rendered,source);// breakToken is nullable
var breakHooks=this.hooks.onBreakToken.triggerSync(breakToken,overflow,rendered,this);breakHooks.forEach(function(newToken){if(typeof newToken!="undefined"){breakToken=newToken;}});// Stop removal if we are in a loop
if(breakToken&&breakToken.equals(prevBreakToken)){return breakToken;}if(breakToken&&breakToken["node"]&&breakToken["offset"]&&breakToken["node"].textContent){breakLetter=breakToken["node"].textContent.charAt(breakToken["offset"]);}else{breakLetter=undefined;}if(breakToken&&breakToken.node&&extract){var removed=this.removeOverflow(overflow,breakLetter);this.hooks&&this.hooks.afterOverflowRemoved.trigger(removed,rendered,this);}}return breakToken;}},{key:"hasOverflow",value:function hasOverflow(element){var bounds=arguments.length>1&&arguments[1]!==undefined?arguments[1]:this.bounds;var constrainingElement=element&&element.parentNode;// this gets the element, instead of the wrapper for the width workaround
var _element$getBoundingC=element.getBoundingClientRect(),width=_element$getBoundingC.width,height=_element$getBoundingC.height;var scrollWidth=constrainingElement?constrainingElement.scrollWidth:0;var scrollHeight=constrainingElement?constrainingElement.scrollHeight:0;return Math.max(Math.floor(width),scrollWidth)>Math.round(bounds.width)||Math.max(Math.floor(height),scrollHeight)>Math.round(bounds.height);}},{key:"findOverflow",value:function findOverflow(rendered){var bounds=arguments.length>1&&arguments[1]!==undefined?arguments[1]:this.bounds;var gap=arguments.length>2&&arguments[2]!==undefined?arguments[2]:this.gap;if(!this.hasOverflow(rendered,bounds))return;var start=Math.floor(bounds.left);var end=Math.round(bounds.right+gap);var vStart=Math.round(bounds.top);var vEnd=Math.round(bounds.bottom);var range;var walker=walk$2(rendered.firstChild,rendered);// Find Start
var next,done,node,offset,skip,breakAvoid,prev,br;while(!done){next=walker.next();done=next.done;node=next.value;skip=false;breakAvoid=false;prev=undefined;br=undefined;if(node){var pos=getBoundingClientRect(node);var _left=Math.round(pos.left);var _right=Math.floor(pos.right);var _top=Math.round(pos.top);var _bottom=Math.floor(pos.bottom);if(!range&&(_left>=end||_top>=vEnd)){// Check if it is a float
var isFloat=false;// Check if the node is inside a break-inside: avoid table cell
var insideTableCell=parentOf(node,"TD",rendered);if(insideTableCell&&window.getComputedStyle(insideTableCell)["break-inside"]==="av