unvendor: Delete replaced libraries
| @@ -1 +0,0 @@ | |||
| 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("xmldom"),require("JSZip")):"function"==typeof define&&define.amd?define(["xmldom","JSZip"],e):"object"==typeof exports?exports.ePub=e(require("xmldom"),require("JSZip")):t.ePub=e(t.xmldom,t.JSZip)}(window,(function(t,e){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/dist/",i(i.s=86)}([function(t,e,i){"use strict";i.r(e),i.d(e,"requestAnimationFrame",(function(){return r})),i.d(e,"uuid",(function(){return o})),i.d(e,"documentHeight",(function(){return a})),i.d(e,"isElement",(function(){return h})),i.d(e,"isNumber",(function(){return l})),i.d(e,"isFloat",(function(){return c})),i.d(e,"prefixed",(function(){return u})),i.d(e,"defaults",(function(){return d})),i.d(e,"extend",(function(){return f})),i.d(e,"insert",(function(){return p})),i.d(e,"locationOf",(function(){return g})),i.d(e,"indexOfSorted",(function(){return v})),i.d(e,"bounds",(function(){return m})),i.d(e,"borders",(function(){return y})),i.d(e,"nodeBounds",(function(){return b})),i.d(e,"windowBounds",(function(){return w})),i.d(e,"indexOfNode",(function(){return x})),i.d(e,"indexOfTextNode",(function(){return E})),i.d(e,"indexOfElementNode",(function(){return S})),i.d(e,"isXml",(function(){return _})),i.d(e,"createBlob",(function(){return O})),i.d(e,"createBlobUrl",(function(){return C})),i.d(e,"revokeBlobUrl",(function(){return T})),i.d(e,"createBase64Url",(function(){return k})),i.d(e,"type",(function(){return R})),i.d(e,"parse",(function(){return L})),i.d(e,"qs",(function(){return I})),i.d(e,"qsa",(function(){return j})),i.d(e,"qsp",(function(){return N})),i.d(e,"sprint",(function(){return A})),i.d(e,"treeWalker",(function(){return P})),i.d(e,"walk",(function(){return D})),i.d(e,"blob2base64",(function(){return z})),i.d(e,"defer",(function(){return B})),i.d(e,"querySelectorByType",(function(){return q})),i.d(e,"findChildren",(function(){return M})),i.d(e,"parents",(function(){return U})),i.d(e,"filterChildren",(function(){return F})),i.d(e,"getParentByTagName",(function(){return W})),i.d(e,"RangeObject",(function(){return H}));i(24),i(14),i(20);var n=i(38);const r="undefined"!=typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),s="undefined"!=typeof URL?URL:"undefined"!=typeof window?window.URL||window.webkitURL||window.mozURL:void 0;function o(){var t=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var i=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?i:7&i|8).toString(16)}))}function a(){return Math.max(document.documentElement.clientHeight,document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight)}function h(t){return!(!t||1!=t.nodeType)}function l(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){let e=parseFloat(t);return!1!==l(t)&&("string"==typeof t&&t.indexOf(".")>-1||Math.floor(e)!==e)}function u(t){var e=["-webkit-","-webkit-","-moz-","-o-","-ms-"],i=t.toLowerCase(),n=["Webkit","webkit","Moz","O","ms"].length;if("undefined"==typeof document||void 0!==document.body.style[i])return t;for(var r=0;r<n;r++)if(void 0!==document.body.style[e[r]+i])return e[r]+i;return t}function d(t){for(var e=1,i=arguments.length;e<i;e++){var n=arguments[e];for(var r in n)void 0===t[r]&&(t[r]=n[r])}return t}function f(t){var e=[].slice.call(arguments,1);return e.forEach((function(e){e&&Object.getOwnPropertyNames(e).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))}))})),t}function p(t,e,i){var n=g(t,e,i);return e.splice(n,0,t),n}function g(t,e,i,n,r){var s,o=n||0,a=r||e.length,h=parseInt(o+(a-o)/2);return i||(i=function(t,e){return t>e?1:t<e?-1:t==e?0:void 0}),a-o<=0?h:(s=i(e[h],t),a-o==1?s>=0?h:h+1:0===s?h:-1===s?g(t,e,i,h,a):g(t,e,i,o,h))}function v(t,e,i,n,r){var s,o=n||0,a=r||e.length,h=parseInt(o+(a-o)/2);return i||(i=function(t,e){return t>e?1:t<e?-1:t==e?0:void 0}),a-o<=0?-1:(s=i(e[h],t),a-o==1?0===s?h:-1:0===s?h:-1===s?v(t,e,i,h,a):v(t,e,i,o,h))}function m(t){var e=window.getComputedStyle(t),i=0,n=0;return["width","paddingRight","paddingLeft","marginRight","marginLeft","borderRightWidth","borderLeftWidth"].forEach((function(t){i+=parseFloat(e[t])||0})),["height","paddingTop","paddingBottom","marginTop","marginBottom","borderTopWidth","borderBottomWidth"].forEach((function(t){n+=parseFloat(e[t])||0})),{height:n,width:i}}function y(t){var e=window.getComputedStyle(t),i=0,n=0;return["paddingRight","paddingLeft","marginRight","marginLeft","borderRightWidth","borderLeftWidth"].forEach((function(t){i+=parseFloat(e[t])||0})),["paddingTop","paddingBottom","marginTop","marginBottom","borderTopWidth","borderBottomWidth"].forEach((function(t){n+=parseFloat(e[t])||0})),{height:n,width:i}}function b(t){let e,i=t.ownerDocument;if(t.nodeType==Node.TEXT_NODE){let n=i.createRange();n.selectNodeContents(t),e=n.getBoundingClientRect()}else e=t.getBoundingClientRect();return e}function w(){var t=window.innerWidth,e=window.innerHeight;return{top:0,left:0,right:t,bottom:e,width:t,height:e}}function x(t,e){for(var i,n=t.parentNode.childNodes,r=-1,s=0;s<n.length&&((i=n[s]).nodeType===e&&r++,i!=t);s++);return r}function E(t){return x(t,3)}function S(t){return x(t,1)}function _(t){return["xml","opf","ncx"].indexOf(t)>-1}function O(t,e){return new Blob([t],{type:e})}function C(t,e){var i=O(t,e);return s.createObjectURL(i)}function T(t){return s.revokeObjectURL(t)}function k(t,e){if("string"==typeof t)return"data:"+e+";base64,"+btoa(encodeURIComponent(t))}function R(t){return Object.prototype.toString.call(t).slice(8,-1)}function L(t,e,i){var r;return r="undefined"==typeof DOMParser||i?n.DOMParser:DOMParser,65279===t.charCodeAt(0)&&(t=t.slice(1)),(new r).parseFromString(t,e)}function I(t,e){var i;if(!t)throw new Error("No Element Provided");return void 0!==t.querySelector?t.querySelector(e):(i=t.getElementsByTagName(e)).length?i[0]:void 0}function j(t,e){return void 0!==t.querySelector?t.querySelectorAll(e):t.getElementsByTagName(e)}function N(t,e,i){var n,r;if(void 0!==t.querySelector){for(var s in e+="[",i)e+=s+"~='"+i[s]+"'";return e+="]",t.querySelector(e)}if(n=t.getElementsByTagName(e),r=Array.prototype.slice.call(n,0).filter((function(t){for(var e in i)if(t.getAttribute(e)===i[e])return!0;return!1})))return r[0]}function A(t,e){void 0!==(t.ownerDocument||t).createTreeWalker?P(t,e,NodeFilter.SHOW_TEXT):D(t,(function(t){t&&3===t.nodeType&&e(t)}))}function P(t,e,i){var n=document.createTreeWalker(t,i,null,!1);let r;for(;r=n.nextNode();)e(r)}function D(t,e){if(e(t))return!0;if(t=t.firstChild)do{if(D(t,e))return!0;t=t.nextSibling}while(t)}function z(t){return new Promise((function(e,i){var n=new FileReader;n.readAsDataURL(t),n.onloadend=function(){e(n.result)}}))}function B(){this.resolve=null,this.reject=null,this.id=o(),this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e}),Object.freeze(this)}function q(t,e,i){var n;if(void 0!==t.querySelector&&(n=t.querySelector(`${e}[*|type="${i}"]`)),n&&0!==n.length)return n;n=j(t,e);for(var r=0;r<n.length;r++)if(n[r].getAttributeNS("http://www.idpf.org/2007/ops","type")===i||n[r].getAttribute("epub:type")===i)return n[r]}function M(t){for(var e=[],i=t.childNodes,n=0;n<i.length;n++){let t=i[n];1===t.nodeType&&e.push(t)}return e}function U(t){for(var e=[t];t;t=t.parentNode)e.unshift(t);return e}function F(t,e,i){for(var n=[],r=t.childNodes,s=0;s<r.length;s++){let t=r[s];if(1===t.nodeType&&t.nodeName.toLowerCase()===e){if(i)return t;n.push(t)}}if(!i)return n}function W(t,e){let i;if(null!==t&&""!==e)for(i=t.parentNode;1===i.nodeType;){if(i.tagName.toLowerCase()===e)return i;i=i.parentNode}}class H{constructor(){this.collapsed=!1,this.commonAncestorContainer=void 0,this.endContainer=void 0,this.endOffset=void 0,this.startContainer=void 0,this.startOffset=void 0}setStart(t,e){this.startContainer=t,this.startOffset=e,this.endContainer?this.commonAncestorContainer=this._commonAncestorContainer():this.collapse(!0),this._checkCollapsed()}setEnd(t,e){this.endContainer=t,this.endOffset=e,this.startContainer?(this.collapsed=!1,this.commonAncestorContainer=this._commonAncestorContainer()):this.collapse(!1),this._checkCollapsed()}collapse(t){this.collapsed=!0,t?(this.endContainer=this.startContainer,this.endOffset=this.startOffset,this.commonAncestorContainer=this.startContainer.parentNode):(this.startContainer=this.endContainer,this.startOffset=this.endOffset,this.commonAncestorContainer=this.endOffset.parentNode)}selectNode(t){let e=t.parentNode,i=Array.prototype.indexOf.call(e.childNodes,t);this.setStart(e,i),this.setEnd(e,i+1)}selectNodeContents(t){t.childNodes[t.childNodes-1];let e=3===t.nodeType?t.textContent.length:parent.childNodes.length;this.setStart(t,0),this.setEnd(t,e)}_commonAncestorContainer(t,e){var i=U(t||this.startContainer),n=U(e||this.endContainer);if(i[0]==n[0])for(var r=0;r<i.length;r++)if(i[r]!=n[r])return i[r-1]}_checkCollapsed(){this.startContainer===this.endContainer&&this.startOffset===this.endOffset?this.collapsed=!0:this.collapsed=!1}toString(){}}},function(t,e,i){"use strict";i.d(e,"b",(function(){return n})),i.d(e,"a",(function(){return r})),i.d(e,"c",(function(){return s}));const n="0.3",r=["keydown","keyup","keypressed","mouseup","mousedown","click","touchend","touchstart","touchmove"],s={BOOK:{OPEN_FAILED:"openFailed"},CONTENTS:{EXPAND:"expand",RESIZE:"resize",SELECTED:"selected",SELECTED_RANGE:"selectedRange",LINK_CLICKED:"linkClicked"},LOCATIONS:{CHANGED:"changed"},MANAGERS:{RESIZE:"resize",RESIZED:"resized",ORIENTATION_CHANGE:"orientationchange",ADDED:"added",SCROLL:"scroll",SCROLLED:"scrolled",REMOVED:"removed"},VIEWS:{AXIS:"axis",WRITING_MODE:"writingMode",LOAD_ERROR:"loaderror",RENDERED:"rendered",RESIZED:"resized",DISPLAYED:"displayed",SHOWN:"shown",HIDDEN:"hidden",MARK_CLICKED:"markClicked"},RENDITION:{STARTED:"started",ATTACHED:"attached",DISPLAYED:"displayed",DISPLAY_ERROR:"displayerror",RENDERED:"rendered",REMOVED:"removed",RESIZED:"resized",ORIENTATION_CHANGE:"orientationchange",LOCATION_CHANGED:"locationChanged",RELOCATED:"relocated",MARK_CLICKED:"markClicked",SELECTED:"selected",LAYOUT:"layout"},LAYOUT:{UPDATED:"updated"},ANNOTATION:{ATTACH:"attach",DETACH:"detach"}}},function(t,e,i){"use strict";var n=i(0);class r{constructor(t,e,i){var s;if(this.str="",this.base={},this.spinePos=0,this.range=!1,this.path={},this.start=null,this.end=null,!(this instanceof r))return new r(t,e,i);if("string"==typeof e?this.base=this.parseComponent(e):"object"==typeof e&&e.steps&&(this.base=e),"string"===(s=this.checkType(t)))return this.str=t,Object(n.extend)(this,this.parse(t));if("range"===s)return Object(n.extend)(this,this.fromRange(t,this.base,i));if("node"===s)return Object(n.extend)(this,this.fromNode(t,this.base,i));if("EpubCFI"===s&&t.path)return t;if(t)throw new TypeError("not a valid argument for EpubCFI");return this}checkType(t){return this.isCfiString(t)?"string":!t||"object"!=typeof t||"Range"!==Object(n.type)(t)&&void 0===t.startContainer?t&&"object"==typeof t&&void 0!==t.nodeType?"node":!!(t&&"object"==typeof t&&t instanceof r)&&"EpubCFI":"range"}parse(t){var e,i,n,r={spinePos:-1,range:!1,base:{},path:{},start:null,end:null};return"string"!=typeof t?{spinePos:-1}:(0===t.indexOf("epubcfi(")&&")"===t[t.length-1]&&(t=t.slice(8,t.length-1)),(e=this.getChapterComponent(t))?(r.base=this.parseComponent(e),i=this.getPathComponent(t),r.path=this.parseComponent(i),(n=this.getRange(t))&&(r.range=!0,r.start=this.parseComponent(n[0]),r.end=this.parseComponent(n[1])),r.spinePos=r.base.steps[1].index,r):{spinePos:-1})}parseComponent(t){var e,i={steps:[],terminal:{offset:null,assertion:null}},n=t.split(":"),r=n[0].split("/");return n.length>1&&(e=n[1],i.terminal=this.parseTerminal(e)),""===r[0]&&r.shift(),i.steps=r.map(function(t){return this.parseStep(t)}.bind(this)),i}parseStep(t){var e,i,n,r,s;if((r=t.match(/\[(.*)\]/))&&r[1]&&(s=r[1]),i=parseInt(t),!isNaN(i))return i%2==0?(e="element",n=i/2-1):(e="text",n=(i-1)/2),{type:e,index:n,id:s||null}}parseTerminal(t){var e,i,r=t.match(/\[(.*)\]/);return r&&r[1]?(e=parseInt(t.split("[")[0]),i=r[1]):e=parseInt(t),Object(n.isNumber)(e)||(e=null),{offset:e,assertion:i}}getChapterComponent(t){return t.split("!")[0]}getPathComponent(t){var e=t.split("!");if(e[1]){return e[1].split(",")[0]}}getRange(t){var e=t.split(",");return 3===e.length&&[e[1],e[2]]}getCharecterOffsetComponent(t){return t.split(":")[1]||""}joinSteps(t){return t?t.map((function(t){var e="";return"element"===t.type&&(e+=2*(t.index+1)),"text"===t.type&&(e+=1+2*t.index),t.id&&(e+="["+t.id+"]"),e})).join("/"):""}segmentString(t){var e="/";return e+=this.joinSteps(t.steps),t.terminal&&null!=t.terminal.offset&&(e+=":"+t.terminal.offset),t.terminal&&null!=t.terminal.assertion&&(e+="["+t.terminal.assertion+"]"),e}toString(){var t="epubcfi(";return t+=this.segmentString(this.base),t+="!",t+=this.segmentString(this.path),this.range&&this.start&&(t+=",",t+=this.segmentString(this.start)),this.range&&this.end&&(t+=",",t+=this.segmentString(this.end)),t+=")"}compare(t,e){var i,n,s,o;if("string"==typeof t&&(t=new r(t)),"string"==typeof e&&(e=new r(e)),t.spinePos>e.spinePos)return 1;if(t.spinePos<e.spinePos)return-1;t.range?(i=t.path.steps.concat(t.start.steps),s=t.start.terminal):(i=t.path.steps,s=t.path.terminal),e.range?(n=e.path.steps.concat(e.start.steps),o=e.start.terminal):(n=e.path.steps,o=e.path.terminal);for(var a=0;a<i.length;a++){if(!i[a])return-1;if(!n[a])return 1;if(i[a].index>n[a].index)return 1;if(i[a].index<n[a].index)return-1}return i.length<n.length?-1:s.offset>o.offset?1:s.offset<o.offset?-1:0}step(t){var e=3===t.nodeType?"text":"element";return{id:t.id,tagName:t.tagName,type:e,index:this.position(t)}}filteredStep(t,e){var i,n=this.filter(t,e);if(n)return i=3===n.nodeType?"text":"element",{id:n.id,tagName:n.tagName,type:i,index:this.filteredPosition(n,e)}}pathTo(t,e,i){for(var n,r={steps:[],terminal:{offset:null,assertion:null}},s=t;s&&s.parentNode&&9!=s.parentNode.nodeType;)(n=i?this.filteredStep(s,i):this.step(s))&&r.steps.unshift(n),s=s.parentNode;return null!=e&&e>=0&&(r.terminal.offset=e,"text"!=r.steps[r.steps.length-1].type&&r.steps.push({type:"text",index:0})),r}equalStep(t,e){return!(!t||!e)&&(t.index===e.index&&t.id===e.id&&t.type===e.type)}fromRange(t,e,i){var n={range:!1,base:{},path:{},start:null,end:null},r=t.startContainer,s=t.endContainer,o=t.startOffset,a=t.endOffset,h=!1;if(i&&(h=null!=r.ownerDocument.querySelector("."+i)),"string"==typeof e?(n.base=this.parseComponent(e),n.spinePos=n.base.steps[1].index):"object"==typeof e&&(n.base=e),t.collapsed)h&&(o=this.patchOffset(r,o,i)),n.path=this.pathTo(r,o,i);else{n.range=!0,h&&(o=this.patchOffset(r,o,i)),n.start=this.pathTo(r,o,i),h&&(a=this.patchOffset(s,a,i)),n.end=this.pathTo(s,a,i),n.path={steps:[],terminal:null};var l,c=n.start.steps.length;for(l=0;l<c&&this.equalStep(n.start.steps[l],n.end.steps[l]);l++)l===c-1?n.start.terminal===n.end.terminal&&(n.path.steps.push(n.start.steps[l]),n.range=!1):n.path.steps.push(n.start.steps[l]);n.start.steps=n.start.steps.slice(n.path.steps.length),n.end.steps=n.end.steps.slice(n.path.steps.length)}return n}fromNode(t,e,i){var n={range:!1,base:{},path:{},start:null,end:null};return"string"==typeof e?(n.base=this.parseComponent(e),n.spinePos=n.base.steps[1].index):"object"==typeof e&&(n.base=e),n.path=this.pathTo(t,null,i),n}filter(t,e){var i,n,r,s,o,a=!1;return 3===t.nodeType?(a=!0,r=t.parentNode,i=t.parentNode.classList.contains(e)):(a=!1,i=t.classList.contains(e)),i&&a?(s=r.previousSibling,o=r.nextSibling,s&&3===s.nodeType?n=s:o&&3===o.nodeType&&(n=o),n||t):!(i&&!a)&&t}patchOffset(t,e,i){if(3!=t.nodeType)throw new Error("Anchor must be a text node");var n=t,r=e;for(t.parentNode.classList.contains(i)&&(n=t.parentNode);n.previousSibling;){if(1===n.previousSibling.nodeType){if(!n.previousSibling.classList.contains(i))break;r+=n.previousSibling.textContent.length}else r+=n.previousSibling.textContent.length;n=n.previousSibling}return r}normalizedMap(t,e,i){var n,r,s,o={},a=-1,h=t.length;for(n=0;n<h;n++)1===(r=t[n].nodeType)&&t[n].classList.contains(i)&&(r=3),n>0&&3===r&&3===s?o[n]=a:e===r&&(a+=1,o[n]=a),s=r;return o}position(t){var e,i;return 1===t.nodeType?((e=t.parentNode.children)||(e=Object(n.findChildren)(t.parentNode)),i=Array.prototype.indexOf.call(e,t)):i=(e=this.textNodes(t.parentNode)).indexOf(t),i}filteredPosition(t,e){var i,n;return 1===t.nodeType?(i=t.parentNode.children,n=this.normalizedMap(i,1,e)):(i=t.parentNode.childNodes,t.parentNode.classList.contains(e)&&(i=(t=t.parentNode).parentNode.childNodes),n=this.normalizedMap(i,3,e)),n[Array.prototype.indexOf.call(i,t)]}stepsToXpath(t){var e=[".","*"];return t.forEach((function(t){var i=t.index+1;t.id?e.push("*[position()="+i+" and @id='"+t.id+"']"):"text"===t.type?e.push("text()["+i+"]"):e.push("*["+i+"]")})),e.join("/")}stepsToQuerySelector(t){var e=["html"];return t.forEach((function(t){var i=t.index+1;t.id?e.push("#"+t.id):"text"===t.type||e.push("*:nth-child("+i+")")})),e.join(">")}textNodes(t,e){return Array.prototype.slice.call(t.childNodes).filter((function(t){return 3===t.nodeType||!(!e||!t.classList.contains(e))}))}walkToNode(t,e,i){var r,s,o=e||document,a=o.documentElement,h=t.length;for(s=0;s<h&&("element"===(r=t[s]).type?a=r.id?o.getElementById(r.id):(a.children||Object(n.findChildren)(a))[r.index]:"text"===r.type&&(a=this.textNodes(a,i)[r.index]),a);s++);return a}findNode(t,e,i){var n,r,s=e||document;return i||void 0===s.evaluate?n=i?this.walkToNode(t,s,i):this.walkToNode(t,s):(r=this.stepsToXpath(t),n=s.evaluate(r,s,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue),n}fixMiss(t,e,i,n){var r,s,o=this.findNode(t.slice(0,-1),i,n),a=o.childNodes,h=this.normalizedMap(a,3,n),l=t[t.length-1].index;for(let t in h){if(!h.hasOwnProperty(t))return;if(h[t]===l){if(!(e>(s=(r=a[t]).textContent.length))){o=1===r.nodeType?r.childNodes[0]:r;break}e-=s}}return{container:o,offset:e}}toRange(t,e){var i,r,s,o,a,h,l,c,u=t||document,d=!!e&&null!=u.querySelector("."+e);if(i=void 0!==u.createRange?u.createRange():new n.RangeObject,this.range?(r=this.start,h=this.path.steps.concat(r.steps),o=this.findNode(h,u,d?e:null),s=this.end,l=this.path.steps.concat(s.steps),a=this.findNode(l,u,d?e:null)):(r=this.path,h=this.path.steps,o=this.findNode(this.path.steps,u,d?e:null)),!o)return console.log("No startContainer found for",this.toString()),null;try{null!=r.terminal.offset?i.setStart(o,r.terminal.offset):i.setStart(o,0)}catch(t){c=this.fixMiss(h,r.terminal.offset,u,d?e:null),i.setStart(c.container,c.offset)}if(a)try{null!=s.terminal.offset?i.setEnd(a,s.terminal.offset):i.setEnd(a,0)}catch(t){c=this.fixMiss(l,this.end.terminal.offset,u,d?e:null),i.setEnd(c.container,c.offset)}return i}isCfiString(t){return"string"==typeof t&&0===t.indexOf("epubcfi(")&&")"===t[t.length-1]}generateChapterComponent(t,e,i){var n="/"+2*(t+1)+"/";return n+=2*(parseInt(e)+1),i&&(n+="["+i+"]"),n}collapse(t){this.range&&(this.range=!1,t?(this.path.steps=this.path.steps.concat(this.start.steps),this.path.terminal=this.start.terminal):(this.path.steps=this.path.steps.concat(this.end.steps),this.path.terminal=this.end.terminal))}}e.a=r},function(t,e,i){"use strict";var n,r,s,o,a,h,l,c=i(108),u=i(122),d=Function.prototype.apply,f=Function.prototype.call,p=Object.create,g=Object.defineProperty,v=Object.defineProperties,m=Object.prototype.hasOwnProperty,y={configurable:!0,enumerable:!1,writable:!0};r=function(t,e){var i,r;return u(e),r=this,n.call(this,t,i=function(){s.call(r,t,i),d.call(e,this,arguments)}),i.__eeOnceListener__=e,this},a={on:n=function(t,e){var i;return u(e),m.call(this,"__ee__")?i=this.__ee__:(i=y.value=p(null),g(this,"__ee__",y),y.value=null),i[t]?"object"==typeof i[t]?i[t].push(e):i[t]=[i[t],e]:i[t]=e,this},once:r,off:s=function(t,e){var i,n,r,s;if(u(e),!m.call(this,"__ee__"))return this;if(!(i=this.__ee__)[t])return this;if("object"==typeof(n=i[t]))for(s=0;r=n[s];++s)r!==e&&r.__eeOnceListener__!==e||(2===n.length?i[t]=n[s?0:1]:n.splice(s,1));else n!==e&&n.__eeOnceListener__!==e||delete i[t];return this},emit:o=function(t){var e,i,n,r,s;if(m.call(this,"__ee__")&&(r=this.__ee__[t]))if("object"==typeof r){for(i=arguments.length,s=new Array(i-1),e=1;e<i;++e)s[e-1]=arguments[e];for(r=r.slice(),e=0;n=r[e];++e)d.call(n,this,s)}else switch(arguments.length){case 1:f.call(r,this);break;case 2:f.call(r,this,arguments[1]);break;case 3:f.call(r,this,arguments[1],arguments[2]);break;default:for(i=arguments.length,s=new Array(i-1),e=1;e<i;++e)s[e-1]=arguments[e];d.call(r,this,s)}}},h={on:c(n),once:c(r),off:c(s),emit:c(o)},l=v({},h),t.exports=e=function(t){return null==t?p(l):v(Object(t),h)},e.methods=a},function(t,e,i){"use strict";i(14),i(20);var n=i(9),r=i.n(n);e.a=class{constructor(t){var e;t.indexOf("://")>-1&&(t=new URL(t).pathname),e=this.parse(t),this.path=t,this.isDirectory(t)?this.directory=t:this.directory=e.dir+"/",this.filename=e.base,this.extension=e.ext.slice(1)}parse(t){return r.a.parse(t)}isAbsolute(t){return r.a.isAbsolute(t||this.path)}isDirectory(t){return"/"===t.charAt(t.length-1)}resolve(t){return r.a.resolve(this.directory,t)}relative(t){return t&&t.indexOf("://")>-1?t:r.a.relative(this.directory,t)}splitPath(t){return this.splitPathRe.exec(t).slice(1)}toString(){return this.path}}},function(t,e,i){"use strict";i(14),i(20);var n=i(4),r=i(9),s=i.n(r);e.a=class{constructor(t,e){var i=t.indexOf("://")>-1,r=t;if(this.Url=void 0,this.href=t,this.protocol="",this.origin="",this.hash="",this.hash="",this.search="",this.base=e,!i&&!1!==e&&"string"!=typeof e&&window&&window.location&&(this.base=window.location.href),i||this.base)try{this.base?this.Url=new URL(t,this.base):this.Url=new URL(t),this.href=this.Url.href,this.protocol=this.Url.protocol,this.origin=this.Url.origin,this.hash=this.Url.hash,this.search=this.Url.search,r=this.Url.pathname+(this.Url.search?this.Url.search:"")}catch(t){this.Url=void 0,this.base&&(r=new n.a(this.base).resolve(r))}this.Path=new n.a(r),this.directory=this.Path.directory,this.filename=this.Path.filename,this.extension=this.Path.extension}path(){return this.Path}resolve(t){var e;return t.indexOf("://")>-1?t:(e=s.a.resolve(this.directory,t),this.origin+e)}relative(t){return s.a.relative(t,this.directory)}toString(){return this.href}}},function(t,e,i){"use strict";i(14);e.a=class{constructor(t){this.context=t||this,this.hooks=[]}register(){for(var t=0;t<arguments.length;++t)if("function"==typeof arguments[t])this.hooks.push(arguments[t]);else for(var e=0;e<arguments[t].length;++e)this.hooks.push(arguments[t][e])}deregister(t){let e;for(let i=0;i<this.hooks.length;i++)if(e=this.hooks[i],e===t){this.hooks.splice(i,1);break}}trigger(){var t=arguments,e=this.context,i=[];return this.hooks.forEach((function(n){var r=n.apply(e,t);r&&"function"==typeof r.then&&i.push(r)})),Promise.all(i)}list(){return this.hooks}clear(){return this.hooks=[]}}},function(t,e,i){(function(e){var i=function(t){return t&&t.Math==Math&&t};t.exports=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof e&&e)||Function("return this")()}).call(this,i(30))},function(t,e,i){var n=i(7),r=i(66),s=i(10),o=i(67),a=i(70),h=i(99),l=r("wks"),c=n.Symbol,u=h?c:c&&c.withoutSetter||o;t.exports=function(t){return s(l,t)||(a&&s(c,t)?l[t]=c[t]:l[t]=u("Symbol."+t)),l[t]}},function(t,e,i){"use strict";if(!n)var n={cwd:function(){return"/"}};function r(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+t)}function s(t,e){for(var i,n="",r=-1,s=0,o=0;o<=t.length;++o){if(o<t.length)i=t.charCodeAt(o);else{if(47===i)break;i=47}if(47===i){if(r===o-1||1===s);else if(r!==o-1&&2===s){if(n.length<2||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){for(var a=n.length-1,h=a;h>=0&&47!==n.charCodeAt(h);--h);if(h!==a){n=-1===h?"":n.slice(0,h),r=o,s=0;continue}}else if(2===n.length||1===n.length){n="",r=o,s=0;continue}e&&(n.length>0?n+="/..":n="..")}else n.length>0?n+="/"+t.slice(r+1,o):n=t.slice(r+1,o);r=o,s=0}else 46===i&&-1!==s?++s:s=-1}return n}var o={resolve:function(){for(var t,e="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a;o>=0?a=arguments[o]:(void 0===t&&(t=n.cwd()),a=t),r(a),0!==a.length&&(e=a+"/"+e,i=47===a.charCodeAt(0))}return e=s(e,!i),i?e.length>0?"/"+e:"/":e.length>0?e:"."},normalize:function(t){if(r(t),0===t.length)return".";var e=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=s(t,!e)).length||e||(t="."),t.length>0&&i&&(t+="/"),e?"/"+t:t},isAbsolute:function(t){return r(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,e=0;e<arguments.length;++e){var i=arguments[e];r(i),i.length>0&&(void 0===t?t=i:t+="/"+i)}return void 0===t?".":o.normalize(t)},relative:function(t,e){if(r(t),r(e),t===e)return"";if((t=o.resolve(t))===(e=o.resolve(e)))return"";for(var i=1;i<t.length&&47===t.charCodeAt(i);++i);for(var n=t.length,s=n-i,a=1;a<e.length&&47===e.charCodeAt(a);++a);for(var h=e.length-a,l=s<h?s:h,c=-1,u=0;u<=l;++u){if(u===l){if(h>l){if(47===e.charCodeAt(a+u))return e.slice(a+u+1);if(0===u)return e.slice(a+u)}else s>l&&(47===t.charCodeAt(i+u)?c=u:0===u&&(c=0));break}var d=t.charCodeAt(i+u);if(d!==e.charCodeAt(a+u))break;47===d&&(c=u)}var f="";for(u=i+c+1;u<=n;++u)u!==n&&47!==t.charCodeAt(u)||(0===f.length?f+="..":f+="/..");return f.length>0?f+e.slice(a+c):(a+=c,47===e.charCodeAt(a)&&++a,e.slice(a))},_makeLong:function(t){return t},dirname:function(t){if(r(t),0===t.length)return".";for(var e=t.charCodeAt(0),i=47===e,n=-1,s=!0,o=t.length-1;o>=1;--o)if(47===(e=t.charCodeAt(o))){if(!s){n=o;break}}else s=!1;return-1===n?i?"/":".":i&&1===n?"//":t.slice(0,n)},basename:function(t,e){if(void 0!==e&&"string"!=typeof e)throw new TypeError('"ext" argument must be a string');r(t);var i,n=0,s=-1,o=!0;if(void 0!==e&&e.length>0&&e.length<=t.length){if(e.length===t.length&&e===t)return"";var a=e.length-1,h=-1;for(i=t.length-1;i>=0;--i){var l=t.charCodeAt(i);if(47===l){if(!o){n=i+1;break}}else-1===h&&(o=!1,h=i+1),a>=0&&(l===e.charCodeAt(a)?-1==--a&&(s=i):(a=-1,s=h))}return n===s?s=h:-1===s&&(s=t.length),t.slice(n,s)}for(i=t.length-1;i>=0;--i)if(47===t.charCodeAt(i)){if(!o){n=i+1;break}}else-1===s&&(o=!1,s=i+1);return-1===s?"":t.slice(n,s)},extname:function(t){r(t);for(var e=-1,i=0,n=-1,s=!0,o=0,a=t.length-1;a>=0;--a){var h=t.charCodeAt(a);if(47!==h)-1===n&&(s=!1,n=a+1),46===h?-1===e?e=a:1!==o&&(o=1):-1!==e&&(o=-1);else if(!s){i=a+1;break}}return-1===e||-1===n||0===o||1===o&&e===n-1&&e===i+1?"":t.slice(e,n)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('Parameter "pathObject" must be an object, not '+typeof t);return function(t,e){var i=e.dir||e.root,n=e.base||(e.name||"")+(e.ext||"");return i?i===e.root?i+n:i+t+n:n}("/",t)},parse:function(t){r(t);var e={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return e;var i,n=t.charCodeAt(0),s=47===n;s?(e.root="/",i=1):i=0;for(var o=-1,a=0,h=-1,l=!0,c=t.length-1,u=0;c>=i;--c)if(47!==(n=t.charCodeAt(c)))-1===h&&(l=!1,h=c+1),46===n?-1===o?o=c:1!==u&&(u=1):-1!==o&&(u=-1);else if(!l){a=c+1;break}return-1===o||-1===h||0===u||1===u&&o===h-1&&o===a+1?-1!==h&&(e.base=e.name=0===a&&s?t.slice(1,h):t.slice(a,h)):(0===a&&s?(e.name=t.slice(1,o),e.base=t.slice(1,h)):(e.name=t.slice(a,o),e.base=t.slice(a,h)),e.ext=t.slice(o,h)),a>0?e.dir=t.slice(0,a-1):s&&(e.dir="/"),e},sep:"/",delimiter:":",posix:null};t.exports=o},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){"use strict";i.d(e,"a",(function(){return s})),i.d(e,"b",(function(){return o})),i.d(e,"d",(function(){return a})),i.d(e,"c",(function(){return h})),i.d(e,"e",(function(){return l}));i(24);var n=i(0),r=i(5);i(4);function s(t,e){var i,r,s=e.url,o=s.indexOf("://")>-1;t&&(r=Object(n.qs)(t,"head"),(i=Object(n.qs)(r,"base"))||(i=t.createElement("base"),r.insertBefore(i,r.firstChild)),!o&&window&&window.location&&(s=window.location.origin+s),i.setAttribute("href",s))}function o(t,e){var i,r,s=e.canonical;t&&(i=Object(n.qs)(t,"head"),(r=Object(n.qs)(i,"link[rel='canonical']"))?r.setAttribute("href",s):((r=t.createElement("link")).setAttribute("rel","canonical"),r.setAttribute("href",s),i.appendChild(r)))}function a(t,e){var i,r,s=e.idref;t&&(i=Object(n.qs)(t,"head"),(r=Object(n.qs)(i,"link[property='dc.identifier']"))?r.setAttribute("content",s):((r=t.createElement("meta")).setAttribute("name","dc.identifier"),r.setAttribute("content",s),i.appendChild(r)))}function h(t,e){var i=t.querySelectorAll("a[href]");if(i.length)for(var s=Object(n.qs)(t.ownerDocument,"base"),o=s?s.getAttribute("href"):void 0,a=function(t){var i=t.getAttribute("href");if(0!==i.indexOf("mailto:"))if(i.indexOf("://")>-1)t.setAttribute("target","_blank");else{var n;try{n=new r.a(i,o)}catch(t){}t.onclick=function(){return n&&n.hash?e(n.Path.path+n.hash):e(n?n.Path.path:i),!1}}}.bind(this),h=0;h<i.length;h++)a(i[h])}function l(t,e,i){return e.forEach((function(e,n){e&&i[n]&&(e=e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),t=t.replace(new RegExp(e,"g"),i[n]))})),t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){var n=i(17);t.exports=function(t){if(!n(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,i){var n=i(7),r=i(102),s=i(71),o=i(15),a=i(8),h=a("iterator"),l=a("toStringTag"),c=s.values;for(var u in r){var d=n[u],f=d&&d.prototype;if(f){if(f[h]!==c)try{o(f,h,c)}catch(t){f[h]=c}if(f[l]||o(f,l,u),r[u])for(var p in s)if(f[p]!==s[p])try{o(f,p,s[p])}catch(t){f[p]=s[p]}}}},function(t,e,i){var n=i(16),r=i(18),s=i(25);t.exports=n?function(t,e,i){return r.f(t,e,s(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var n=i(12);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){var n=i(16),r=i(62),s=i(13),o=i(41),a=Object.defineProperty;e.f=n?a:function(t,e,i){if(s(t),e=o(e,!0),s(i),r)try{return a(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){var n=i(7),r=i(15),s=i(10),o=i(42),a=i(64),h=i(26),l=h.get,c=h.enforce,u=String(String).split("String");(t.exports=function(t,e,i,a){var h=!!a&&!!a.unsafe,l=!!a&&!!a.enumerable,d=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof e||s(i,"name")||r(i,"name",e),c(i).source=u.join("string"==typeof e?e:"")),t!==n?(h?!d&&t[e]&&(l=!0):delete t[e],l?t[e]=i:r(t,e,i)):l?t[e]=i:o(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||a(this)}))},function(t,e,i){"use strict";i(123);var n,r=i(31),s=i(16),o=i(78),a=i(7),h=i(72),l=i(19),c=i(79),u=i(10),d=i(124),f=i(125),p=i(49).codeAt,g=i(131),v=i(37),m=i(132),y=i(26),b=a.URL,w=m.URLSearchParams,x=m.getState,E=y.set,S=y.getterFor("URL"),_=Math.floor,O=Math.pow,C=/[A-Za-z]/,T=/[\d+-.A-Za-z]/,k=/\d/,R=/^(0x|0X)/,L=/^[0-7]+$/,I=/^\d+$/,j=/^[\dA-Fa-f]+$/,N=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,A=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,P=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,D=/[\u0009\u000A\u000D]/g,z=function(t,e){var i,n,r;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return"Invalid host";if(!(i=q(e.slice(1,-1))))return"Invalid host";t.host=i}else if(G(t)){if(e=g(e),N.test(e))return"Invalid host";if(null===(i=B(e)))return"Invalid host";t.host=i}else{if(A.test(e))return"Invalid host";for(i="",n=f(e),r=0;r<n.length;r++)i+=V(n[r],U);t.host=i}},B=function(t){var e,i,n,r,s,o,a,h=t.split(".");if(h.length&&""==h[h.length-1]&&h.pop(),(e=h.length)>4)return t;for(i=[],n=0;n<e;n++){if(""==(r=h[n]))return t;if(s=10,r.length>1&&"0"==r.charAt(0)&&(s=R.test(r)?16:8,r=r.slice(8==s?1:2)),""===r)o=0;else{if(!(10==s?I:8==s?L:j).test(r))return t;o=parseInt(r,s)}i.push(o)}for(n=0;n<e;n++)if(o=i[n],n==e-1){if(o>=O(256,5-e))return null}else if(o>255)return null;for(a=i.pop(),n=0;n<i.length;n++)a+=i[n]*O(256,3-n);return a},q=function(t){var e,i,n,r,s,o,a,h=[0,0,0,0,0,0,0,0],l=0,c=null,u=0,d=function(){return t.charAt(u)};if(":"==d()){if(":"!=t.charAt(1))return;u+=2,c=++l}for(;d();){if(8==l)return;if(":"!=d()){for(e=i=0;i<4&&j.test(d());)e=16*e+parseInt(d(),16),u++,i++;if("."==d()){if(0==i)return;if(u-=i,l>6)return;for(n=0;d();){if(r=null,n>0){if(!("."==d()&&n<4))return;u++}if(!k.test(d()))return;for(;k.test(d());){if(s=parseInt(d(),10),null===r)r=s;else{if(0==r)return;r=10*r+s}if(r>255)return;u++}h[l]=256*h[l]+r,2!=++n&&4!=n||l++}if(4!=n)return;break}if(":"==d()){if(u++,!d())return}else if(d())return;h[l++]=e}else{if(null!==c)return;u++,c=++l}}if(null!==c)for(o=l-c,l=7;0!=l&&o>0;)a=h[l],h[l--]=h[c+o-1],h[c+--o]=a;else if(8!=l)return;return h},M=function(t){var e,i,n,r;if("number"==typeof t){for(e=[],i=0;i<4;i++)e.unshift(t%256),t=_(t/256);return e.join(".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,i=1,n=null,r=0,s=0;s<8;s++)0!==t[s]?(r>i&&(e=n,i=r),n=null,r=0):(null===n&&(n=s),++r);return r>i&&(e=n,i=r),e}(t),i=0;i<8;i++)r&&0===t[i]||(r&&(r=!1),n===i?(e+=i?":":"::",r=!0):(e+=t[i].toString(16),i<7&&(e+=":")));return"["+e+"]"}return t},U={},F=d({},U,{" ":1,'"':1,"<":1,">":1,"`":1}),W=d({},F,{"#":1,"?":1,"{":1,"}":1}),H=d({},W,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),V=function(t,e){var i=p(t,0);return i>32&&i<127&&!u(e,t)?t:encodeURIComponent(t)},X={ftp:21,file:null,http:80,https:443,ws:80,wss:443},G=function(t){return u(X,t.scheme)},Y=function(t){return""!=t.username||""!=t.password},$=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},K=function(t,e){var i;return 2==t.length&&C.test(t.charAt(0))&&(":"==(i=t.charAt(1))||!e&&"|"==i)},Z=function(t){var e;return t.length>1&&K(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},J=function(t){var e=t.path,i=e.length;!i||"file"==t.scheme&&1==i&&K(e[0],!0)||e.pop()},Q=function(t){return"."===t||"%2e"===t.toLowerCase()},tt={},et={},it={},nt={},rt={},st={},ot={},at={},ht={},lt={},ct={},ut={},dt={},ft={},pt={},gt={},vt={},mt={},yt={},bt={},wt={},xt=function(t,e,i,r){var s,o,a,h,l,c=i||tt,d=0,p="",g=!1,v=!1,m=!1;for(i||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(P,"")),e=e.replace(D,""),s=f(e);d<=s.length;){switch(o=s[d],c){case tt:if(!o||!C.test(o)){if(i)return"Invalid scheme";c=it;continue}p+=o.toLowerCase(),c=et;break;case et:if(o&&(T.test(o)||"+"==o||"-"==o||"."==o))p+=o.toLowerCase();else{if(":"!=o){if(i)return"Invalid scheme";p="",c=it,d=0;continue}if(i&&(G(t)!=u(X,p)||"file"==p&&(Y(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=p,i)return void(G(t)&&X[t.scheme]==t.port&&(t.port=null));p="","file"==t.scheme?c=ft:G(t)&&r&&r.scheme==t.scheme?c=nt:G(t)?c=at:"/"==s[d+1]?(c=rt,d++):(t.cannotBeABaseURL=!0,t.path.push(""),c=yt)}break;case it:if(!r||r.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(r.cannotBeABaseURL&&"#"==o){t.scheme=r.scheme,t.path=r.path.slice(),t.query=r.query,t.fragment="",t.cannotBeABaseURL=!0,c=wt;break}c="file"==r.scheme?ft:st;continue;case nt:if("/"!=o||"/"!=s[d+1]){c=st;continue}c=ht,d++;break;case rt:if("/"==o){c=lt;break}c=mt;continue;case st:if(t.scheme=r.scheme,o==n)t.username=r.username,t.password=r.password,t.host=r.host,t.port=r.port,t.path=r.path.slice(),t.query=r.query;else if("/"==o||"\\"==o&&G(t))c=ot;else if("?"==o)t.username=r.username,t.password=r.password,t.host=r.host,t.port=r.port,t.path=r.path.slice(),t.query="",c=bt;else{if("#"!=o){t.username=r.username,t.password=r.password,t.host=r.host,t.port=r.port,t.path=r.path.slice(),t.path.pop(),c=mt;continue}t.username=r.username,t.password=r.password,t.host=r.host,t.port=r.port,t.path=r.path.slice(),t.query=r.query,t.fragment="",c=wt}break;case ot:if(!G(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=r.username,t.password=r.password,t.host=r.host,t.port=r.port,c=mt;continue}c=lt}else c=ht;break;case at:if(c=ht,"/"!=o||"/"!=p.charAt(d+1))continue;d++;break;case ht:if("/"!=o&&"\\"!=o){c=lt;continue}break;case lt:if("@"==o){g&&(p="%40"+p),g=!0,a=f(p);for(var y=0;y<a.length;y++){var b=a[y];if(":"!=b||m){var w=V(b,H);m?t.password+=w:t.username+=w}else m=!0}p=""}else if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&G(t)){if(g&&""==p)return"Invalid authority";d-=f(p).length+1,p="",c=ct}else p+=o;break;case ct:case ut:if(i&&"file"==t.scheme){c=gt;continue}if(":"!=o||v){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&G(t)){if(G(t)&&""==p)return"Invalid host";if(i&&""==p&&(Y(t)||null!==t.port))return;if(h=z(t,p))return h;if(p="",c=vt,i)return;continue}"["==o?v=!0:"]"==o&&(v=!1),p+=o}else{if(""==p)return"Invalid host";if(h=z(t,p))return h;if(p="",c=dt,i==ut)return}break;case dt:if(!k.test(o)){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&G(t)||i){if(""!=p){var x=parseInt(p,10);if(x>65535)return"Invalid port";t.port=G(t)&&x===X[t.scheme]?null:x,p=""}if(i)return;c=vt;continue}return"Invalid port"}p+=o;break;case ft:if(t.scheme="file","/"==o||"\\"==o)c=pt;else{if(!r||"file"!=r.scheme){c=mt;continue}if(o==n)t.host=r.host,t.path=r.path.slice(),t.query=r.query;else if("?"==o)t.host=r.host,t.path=r.path.slice(),t.query="",c=bt;else{if("#"!=o){Z(s.slice(d).join(""))||(t.host=r.host,t.path=r.path.slice(),J(t)),c=mt;continue}t.host=r.host,t.path=r.path.slice(),t.query=r.query,t.fragment="",c=wt}}break;case pt:if("/"==o||"\\"==o){c=gt;break}r&&"file"==r.scheme&&!Z(s.slice(d).join(""))&&(K(r.path[0],!0)?t.path.push(r.path[0]):t.host=r.host),c=mt;continue;case gt:if(o==n||"/"==o||"\\"==o||"?"==o||"#"==o){if(!i&&K(p))c=mt;else if(""==p){if(t.host="",i)return;c=vt}else{if(h=z(t,p))return h;if("localhost"==t.host&&(t.host=""),i)return;p="",c=vt}continue}p+=o;break;case vt:if(G(t)){if(c=mt,"/"!=o&&"\\"!=o)continue}else if(i||"?"!=o)if(i||"#"!=o){if(o!=n&&(c=mt,"/"!=o))continue}else t.fragment="",c=wt;else t.query="",c=bt;break;case mt:if(o==n||"/"==o||"\\"==o&&G(t)||!i&&("?"==o||"#"==o)){if(".."===(l=(l=p).toLowerCase())||"%2e."===l||".%2e"===l||"%2e%2e"===l?(J(t),"/"==o||"\\"==o&&G(t)||t.path.push("")):Q(p)?"/"==o||"\\"==o&&G(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&K(p)&&(t.host&&(t.host=""),p=p.charAt(0)+":"),t.path.push(p)),p="","file"==t.scheme&&(o==n||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",c=bt):"#"==o&&(t.fragment="",c=wt)}else p+=V(o,W);break;case yt:"?"==o?(t.query="",c=bt):"#"==o?(t.fragment="",c=wt):o!=n&&(t.path[0]+=V(o,U));break;case bt:i||"#"!=o?o!=n&&("'"==o&&G(t)?t.query+="%27":t.query+="#"==o?"%23":V(o,U)):(t.fragment="",c=wt);break;case wt:o!=n&&(t.fragment+=V(o,F))}d++}},Et=function(t){var e,i,n=c(this,Et,"URL"),r=arguments.length>1?arguments[1]:void 0,o=String(t),a=E(n,{type:"URL"});if(void 0!==r)if(r instanceof Et)e=S(r);else if(i=xt(e={},String(r)))throw TypeError(i);if(i=xt(a,o,null,e))throw TypeError(i);var h=a.searchParams=new w,l=x(h);l.updateSearchParams(a.query),l.updateURL=function(){a.query=String(h)||null},s||(n.href=_t.call(n),n.origin=Ot.call(n),n.protocol=Ct.call(n),n.username=Tt.call(n),n.password=kt.call(n),n.host=Rt.call(n),n.hostname=Lt.call(n),n.port=It.call(n),n.pathname=jt.call(n),n.search=Nt.call(n),n.searchParams=At.call(n),n.hash=Pt.call(n))},St=Et.prototype,_t=function(){var t=S(this),e=t.scheme,i=t.username,n=t.password,r=t.host,s=t.port,o=t.path,a=t.query,h=t.fragment,l=e+":";return null!==r?(l+="//",Y(t)&&(l+=i+(n?":"+n:"")+"@"),l+=M(r),null!==s&&(l+=":"+s)):"file"==e&&(l+="//"),l+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==a&&(l+="?"+a),null!==h&&(l+="#"+h),l},Ot=function(){var t=S(this),e=t.scheme,i=t.port;if("blob"==e)try{return new URL(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&G(t)?e+"://"+M(t.host)+(null!==i?":"+i:""):"null"},Ct=function(){return S(this).scheme+":"},Tt=function(){return S(this).username},kt=function(){return S(this).password},Rt=function(){var t=S(this),e=t.host,i=t.port;return null===e?"":null===i?M(e):M(e)+":"+i},Lt=function(){var t=S(this).host;return null===t?"":M(t)},It=function(){var t=S(this).port;return null===t?"":String(t)},jt=function(){var t=S(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},Nt=function(){var t=S(this).query;return t?"?"+t:""},At=function(){return S(this).searchParams},Pt=function(){var t=S(this).fragment;return t?"#"+t:""},Dt=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(s&&h(St,{href:Dt(_t,(function(t){var e=S(this),i=String(t),n=xt(e,i);if(n)throw TypeError(n);x(e.searchParams).updateSearchParams(e.query)})),origin:Dt(Ot),protocol:Dt(Ct,(function(t){var e=S(this);xt(e,String(t)+":",tt)})),username:Dt(Tt,(function(t){var e=S(this),i=f(String(t));if(!$(e)){e.username="";for(var n=0;n<i.length;n++)e.username+=V(i[n],H)}})),password:Dt(kt,(function(t){var e=S(this),i=f(String(t));if(!$(e)){e.password="";for(var n=0;n<i.length;n++)e.password+=V(i[n],H)}})),host:Dt(Rt,(function(t){var e=S(this);e.cannotBeABaseURL||xt(e,String(t),ct)})),hostname:Dt(Lt,(function(t){var e=S(this);e.cannotBeABaseURL||xt(e,String(t),ut)})),port:Dt(It,(function(t){var e=S(this);$(e)||(""==(t=String(t))?e.port=null:xt(e,t,dt))})),pathname:Dt(jt,(function(t){var e=S(this);e.cannotBeABaseURL||(e.path=[],xt(e,t+"",vt))})),search:Dt(Nt,(function(t){var e=S(this);""==(t=String(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",xt(e,t,bt)),x(e.searchParams).updateSearchParams(e.query)})),searchParams:Dt(At),hash:Dt(Pt,(function(t){var e=S(this);""!=(t=String(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",xt(e,t,wt)):e.fragment=null}))}),l(St,"toJSON",(function(){return _t.call(this)}),{enumerable:!0}),l(St,"toString",(function(){return _t.call(this)}),{enumerable:!0}),b){var zt=b.createObjectURL,Bt=b.revokeObjectURL;zt&&l(Et,"createObjectURL",(function(t){return zt.apply(b,arguments)})),Bt&&l(Et,"revokeObjectURL",(function(t){return Bt.apply(b,arguments)}))}v(Et,"URL"),r({global:!0,forced:!o,sham:!s},{URL:Et})},function(t,e,i){"use strict";var n=i(0);e.a=class{constructor(t){this._q=[],this.context=t,this.tick=n.requestAnimationFrame,this.running=!1,this.paused=!1}enqueue(){var t,e,i=[].shift.call(arguments),r=arguments;if(!i)throw new Error("No Task Provided");return e="function"==typeof i?{task:i,args:r,deferred:t=new n.defer,promise:t.promise}:{promise:i},this._q.push(e),0!=this.paused||this.running||this.run(),e.promise}dequeue(){var t,e,i;return!this._q.length||this.paused?((t=new n.defer).deferred.resolve(),t.promise):(e=(t=this._q.shift()).task)?(i=e.apply(this.context,t.args))&&"function"==typeof i.then?i.then(function(){t.deferred.resolve.apply(this.context,arguments)}.bind(this),function(){t.deferred.reject.apply(this.context,arguments)}.bind(this)):(t.deferred.resolve.apply(this.context,i),t.promise):t.promise?t.promise:void 0}dump(){for(;this._q.length;)this.dequeue()}run(){return this.running||(this.running=!0,this.defered=new n.defer),this.tick.call(window,()=>{this._q.length?this.dequeue().then(function(){this.run()}.bind(this)):(this.defered.resolve(),this.running=void 0)}),1==this.paused&&(this.paused=!1),this.defered.promise}flush(){return this.running?this.running:this._q.length?(this.running=this.dequeue().then(function(){return this.running=void 0,this.flush()}.bind(this)),this.running):void 0}clear(){this._q=[]}length(){return this._q.length}pause(){this.paused=!0}stop(){this._q=[],this.running=!1,this.paused=!0}}},function(t,e,i){"use strict";var n=i(3),r=i.n(n),s=i(0);function o(){var t="reverse",e=function(){var t=document.createElement("div");t.dir="rtl",t.style.position="fixed",t.style.width="1px",t.style.height="1px",t.style.top="0px",t.style.left="0px",t.style.overflow="hidden";var e=document.createElement("div");e.style.width="2px";var i=document.createElement("span");i.style.width="1px",i.style.display="inline-block";var n=document.createElement("span");return n.style.width="1px",n.style.display="inline-block",e.appendChild(i),e.appendChild(n),t.appendChild(e),t}();return document.body.appendChild(e),e.scrollLeft>0?t="default":"undefined"!=typeof Element&&Element.prototype.scrollIntoView?(e.children[0].children[1].scrollIntoView(),e.scrollLeft<0&&(t="negative")):(e.scrollLeft=1,0===e.scrollLeft&&(t="negative")),document.body.removeChild(e),t}var a=i(23),h=i(21),l=i(84),c=i.n(l);var u=class{constructor(t){this.settings=t||{},this.id="epubjs-container-"+Object(s.uuid)(),this.container=this.create(this.settings),this.settings.hidden&&(this.wrapper=this.wrap(this.container))}create(t){let e=t.height,i=t.width,n=t.overflow||!1,r=t.axis||"vertical",o=t.direction;Object(s.extend)(this.settings,t),t.height&&Object(s.isNumber)(t.height)&&(e=t.height+"px"),t.width&&Object(s.isNumber)(t.width)&&(i=t.width+"px");let a=document.createElement("div");return a.id=this.id,a.classList.add("epub-container"),a.style.wordSpacing="0",a.style.lineHeight="0",a.style.verticalAlign="top",a.style.position="relative","horizontal"===r&&(a.style.display="flex",a.style.flexDirection="row",a.style.flexWrap="nowrap"),i&&(a.style.width=i),e&&(a.style.height=e),n&&("scroll"===n&&"vertical"===r?(a.style["overflow-y"]=n,a.style["overflow-x"]="hidden"):"scroll"===n&&"horizontal"===r?(a.style["overflow-y"]="hidden",a.style["overflow-x"]=n):a.style.overflow=n),o&&(a.dir=o,a.style.direction=o),o&&this.settings.fullsize&&(document.body.style.direction=o),a}wrap(t){var e=document.createElement("div");return e.style.visibility="hidden",e.style.overflow="hidden",e.style.width="0",e.style.height="0",e.appendChild(t),e}getElement(t){var e;if(Object(s.isElement)(t)?e=t:"string"==typeof t&&(e=document.getElementById(t)),!e)throw new Error("Not an Element");return e}attachTo(t){var e,i=this.getElement(t);if(i)return e=this.settings.hidden?this.wrapper:this.container,i.appendChild(e),this.element=i,i}getContainer(){return this.container}onResize(t){Object(s.isNumber)(this.settings.width)&&Object(s.isNumber)(this.settings.height)||(this.resizeFunc=c()(t,50),window.addEventListener("resize",this.resizeFunc,!1))}onOrientationChange(t){this.orientationChangeFunc=t,window.addEventListener("orientationchange",this.orientationChangeFunc,!1)}size(t,e){var i;let n=t||this.settings.width,r=e||this.settings.height;null===t?(i=this.element.getBoundingClientRect()).width&&(t=Math.floor(i.width),this.container.style.width=t+"px"):Object(s.isNumber)(t)?this.container.style.width=t+"px":this.container.style.width=t,null===e?(i=i||this.element.getBoundingClientRect()).height&&(e=i.height,this.container.style.height=e+"px"):Object(s.isNumber)(e)?this.container.style.height=e+"px":this.container.style.height=e,Object(s.isNumber)(t)||(t=this.container.clientWidth),Object(s.isNumber)(e)||(e=this.container.clientHeight),this.containerStyles=window.getComputedStyle(this.container),this.containerPadding={left:parseFloat(this.containerStyles["padding-left"])||0,right:parseFloat(this.containerStyles["padding-right"])||0,top:parseFloat(this.containerStyles["padding-top"])||0,bottom:parseFloat(this.containerStyles["padding-bottom"])||0};let o=Object(s.windowBounds)(),a=window.getComputedStyle(document.body),h=parseFloat(a["padding-left"])||0,l=parseFloat(a["padding-right"])||0,c=parseFloat(a["padding-top"])||0,u=parseFloat(a["padding-bottom"])||0;return n||(t=o.width-h-l),(this.settings.fullsize&&!r||!r)&&(e=o.height-c-u),{width:t-this.containerPadding.left-this.containerPadding.right,height:e-this.containerPadding.top-this.containerPadding.bottom}}bounds(){let t;return"visible"!==this.container.style.overflow&&(t=this.container&&this.container.getBoundingClientRect()),t&&t.width&&t.height?t:Object(s.windowBounds)()}getSheet(){var t=document.createElement("style");return t.appendChild(document.createTextNode("")),document.head.appendChild(t),t.sheet}addStyleRules(t,e){var i="#"+this.id+" ",n="";this.sheet||(this.sheet=this.getSheet()),e.forEach((function(t){for(var e in t)t.hasOwnProperty(e)&&(n+=e+":"+t[e]+";")})),this.sheet.insertRule(i+t+" {"+n+"}",0)}axis(t){"horizontal"===t?(this.container.style.display="flex",this.container.style.flexDirection="row",this.container.style.flexWrap="nowrap"):this.container.style.display="block",this.settings.axis=t}direction(t){this.container&&(this.container.dir=t,this.container.style.direction=t),this.settings.fullsize&&(document.body.style.direction=t),this.settings.dir=t}overflow(t){this.container&&("scroll"===t&&"vertical"===this.settings.axis?(this.container.style["overflow-y"]=t,this.container.style["overflow-x"]="hidden"):"scroll"===t&&"horizontal"===this.settings.axis?(this.container.style["overflow-y"]="hidden",this.container.style["overflow-x"]=t):this.container.style.overflow=t),this.settings.overflow=t}destroy(){this.element&&(this.settings.hidden?this.wrapper:this.container,this.element.contains(this.container)&&this.element.removeChild(this.container),window.removeEventListener("resize",this.resizeFunc),window.removeEventListener("orientationChange",this.orientationChangeFunc))}};var d=class{constructor(t){this.container=t,this._views=[],this.length=0,this.hidden=!1}all(){return this._views}first(){return this._views[0]}last(){return this._views[this._views.length-1]}indexOf(t){return this._views.indexOf(t)}slice(){return this._views.slice.apply(this._views,arguments)}get(t){return this._views[t]}append(t){return this._views.push(t),this.container&&this.container.appendChild(t.element),this.length++,t}prepend(t){return this._views.unshift(t),this.container&&this.container.insertBefore(t.element,this.container.firstChild),this.length++,t}insert(t,e){return this._views.splice(e,0,t),this.container&&(e<this.container.children.length?this.container.insertBefore(t.element,this.container.children[e]):this.container.appendChild(t.element)),this.length++,t}remove(t){var e=this._views.indexOf(t);e>-1&&this._views.splice(e,1),this.destroy(t),this.length--}destroy(t){t.displayed&&t.destroy(),this.container&&this.container.removeChild(t.element),t=null}forEach(){return this._views.forEach.apply(this._views,arguments)}clear(){var t,e=this.length;if(this.length){for(var i=0;i<e;i++)t=this._views[i],this.destroy(t);this._views=[],this.length=0}}find(t){for(var e,i=this.length,n=0;n<i;n++)if((e=this._views[n]).displayed&&e.section.index==t.index)return e}displayed(){for(var t,e=[],i=this.length,n=0;n<i;n++)(t=this._views[n]).displayed&&e.push(t);return e}show(){for(var t,e=this.length,i=0;i<e;i++)(t=this._views[i]).displayed&&t.show();this.hidden=!1}hide(){for(var t,e=this.length,i=0;i<e;i++)(t=this._views[i]).displayed&&t.hide();this.hidden=!0}},f=i(1);class p{constructor(t){this.name="default",this.optsSettings=t.settings,this.View=t.view,this.request=t.request,this.renditionQueue=t.queue,this.q=new h.a(this),this.settings=Object(s.extend)(this.settings||{},{infinite:!0,hidden:!1,width:void 0,height:void 0,axis:void 0,writingMode:void 0,flow:"scrolled",ignoreClass:"",fullsize:void 0}),Object(s.extend)(this.settings,t.settings||{}),this.viewSettings={ignoreClass:this.settings.ignoreClass,axis:this.settings.axis,flow:this.settings.flow,layout:this.layout,method:this.settings.method,width:0,height:0,forceEvenPages:!0},this.rendered=!1}render(t,e){let i=t.tagName;void 0!==this.settings.fullsize||!i||"body"!=i.toLowerCase()&&"html"!=i.toLowerCase()||(this.settings.fullsize=!0),this.settings.fullsize&&(this.settings.overflow="visible",this.overflow=this.settings.overflow),this.settings.size=e,this.settings.rtlScrollType=o(),this.stage=new u({width:e.width,height:e.height,overflow:this.overflow,hidden:this.settings.hidden,axis:this.settings.axis,fullsize:this.settings.fullsize,direction:this.settings.direction}),this.stage.attachTo(t),this.container=this.stage.getContainer(),this.views=new d(this.container),this._bounds=this.bounds(),this._stageSize=this.stage.size(),this.viewSettings.width=this._stageSize.width,this.viewSettings.height=this._stageSize.height,this.stage.onResize(this.onResized.bind(this)),this.stage.onOrientationChange(this.onOrientationChange.bind(this)),this.addEventListeners(),this.layout&&this.updateLayout(),this.rendered=!0}addEventListeners(){var t;window.addEventListener("unload",function(t){this.destroy()}.bind(this)),t=this.settings.fullsize?window:this.container,this._onScroll=this.onScroll.bind(this),t.addEventListener("scroll",this._onScroll)}removeEventListeners(){(this.settings.fullsize?window:this.container).removeEventListener("scroll",this._onScroll),this._onScroll=void 0}destroy(){clearTimeout(this.orientationTimeout),clearTimeout(this.resizeTimeout),clearTimeout(this.afterScrolled),this.clear(),this.removeEventListeners(),this.stage.destroy(),this.rendered=!1}onOrientationChange(t){let{orientation:e}=window;this.optsSettings.resizeOnOrientationChange&&this.resize(),clearTimeout(this.orientationTimeout),this.orientationTimeout=setTimeout(function(){this.orientationTimeout=void 0,this.optsSettings.resizeOnOrientationChange&&this.resize(),this.emit(f.c.MANAGERS.ORIENTATION_CHANGE,e)}.bind(this),500)}onResized(t){this.resize()}resize(t,e,i){let n=this.stage.size(t,e);this.winBounds=Object(s.windowBounds)(),this.orientationTimeout&&this.winBounds.width===this.winBounds.height?this._stageSize=void 0:this._stageSize&&this._stageSize.width===n.width&&this._stageSize.height===n.height||(this._stageSize=n,this._bounds=this.bounds(),this.clear(),this.viewSettings.width=this._stageSize.width,this.viewSettings.height=this._stageSize.height,this.updateLayout(),this.emit(f.c.MANAGERS.RESIZED,{width:this._stageSize.width,height:this._stageSize.height},i))}createView(t,e){return new this.View(t,Object(s.extend)(this.viewSettings,{forceRight:e}))}handleNextPrePaginated(t,e,i){let n;if("pre-paginated"===this.layout.name&&this.layout.divisor>1){if(t||0===e.index)return;if(n=e.next(),n&&!n.properties.includes("page-spread-left"))return i.call(this,n)}}display(t,e){var i=new s.defer,n=i.promise;(e===t.href||Object(s.isNumber)(e))&&(e=void 0);var r=this.views.find(t);if(r&&t&&"pre-paginated"!==this.layout.name){let t=r.offset();if("ltr"===this.settings.direction)this.scrollTo(t.left,t.top,!0);else{let e=r.width();this.scrollTo(t.left+e,t.top,!0)}if(e){let t=r.locationOf(e);this.moveTo(t)}return i.resolve(),n}this.clear();let o=!1;return"pre-paginated"===this.layout.name&&2===this.layout.divisor&&t.properties.includes("page-spread-right")&&(o=!0),this.add(t,o).then(function(t){if(e){let i=t.locationOf(e);this.moveTo(i)}}.bind(this),t=>{i.reject(t)}).then(function(){return this.handleNextPrePaginated(o,t,this.add)}.bind(this)).then(function(){this.views.show(),i.resolve()}.bind(this)),n}afterDisplayed(t){this.emit(f.c.MANAGERS.ADDED,t)}afterResized(t){this.emit(f.c.MANAGERS.RESIZE,t.section)}moveTo(t){var e=0,i=0;this.isPaginated?(e=Math.floor(t.left/this.layout.delta)*this.layout.delta)+this.layout.delta>this.container.scrollWidth&&(e=this.container.scrollWidth-this.layout.delta):i=t.top,this.scrollTo(e,i,!0)}add(t,e){var i=this.createView(t,e);return this.views.append(i),i.onDisplayed=this.afterDisplayed.bind(this),i.onResize=this.afterResized.bind(this),i.on(f.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),i.on(f.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),i.display(this.request)}append(t,e){var i=this.createView(t,e);return this.views.append(i),i.onDisplayed=this.afterDisplayed.bind(this),i.onResize=this.afterResized.bind(this),i.on(f.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),i.on(f.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),i.display(this.request)}prepend(t,e){var i=this.createView(t,e);return i.on(f.c.VIEWS.RESIZED,t=>{this.counter(t)}),this.views.prepend(i),i.onDisplayed=this.afterDisplayed.bind(this),i.onResize=this.afterResized.bind(this),i.on(f.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),i.on(f.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),i.display(this.request)}counter(t){"vertical"===this.settings.axis?this.scrollBy(0,t.heightDelta,!0):this.scrollBy(t.widthDelta,0,!0)}next(){var t;let e=this.settings.direction;if(this.views.length){if(!this.isPaginated||"horizontal"!==this.settings.axis||e&&"ltr"!==e)if(this.isPaginated&&"horizontal"===this.settings.axis&&"rtl"===e)this.scrollLeft=this.container.scrollLeft,"default"===this.settings.rtlScrollType?this.container.scrollLeft>0?this.scrollBy(this.layout.delta,0,!0):t=this.views.last().section.next():this.container.scrollLeft+-1*this.layout.delta>-1*this.container.scrollWidth?this.scrollBy(this.layout.delta,0,!0):t=this.views.last().section.next();else if(this.isPaginated&&"vertical"===this.settings.axis){this.scrollTop=this.container.scrollTop,this.container.scrollTop+this.container.offsetHeight<this.container.scrollHeight?this.scrollBy(0,this.layout.height,!0):t=this.views.last().section.next()}else t=this.views.last().section.next();else this.scrollLeft=this.container.scrollLeft,this.container.scrollLeft+this.container.offsetWidth+this.layout.delta<=this.container.scrollWidth?this.scrollBy(this.layout.delta,0,!0):t=this.views.last().section.next();if(t){this.clear();let e=!1;return"pre-paginated"===this.layout.name&&2===this.layout.divisor&&t.properties.includes("page-spread-right")&&(e=!0),this.append(t,e).then(function(){return this.handleNextPrePaginated(e,t,this.append)}.bind(this),t=>t).then(function(){this.isPaginated||"horizontal"!==this.settings.axis||"rtl"!==this.settings.direction||"default"!==this.settings.rtlScrollType||this.scrollTo(this.container.scrollWidth,0,!0),this.views.show()}.bind(this))}}}prev(){var t;let e=this.settings.direction;if(this.views.length){if(!this.isPaginated||"horizontal"!==this.settings.axis||e&&"ltr"!==e)if(this.isPaginated&&"horizontal"===this.settings.axis&&"rtl"===e)this.scrollLeft=this.container.scrollLeft,"default"===this.settings.rtlScrollType?this.container.scrollLeft+this.container.offsetWidth<this.container.scrollWidth?this.scrollBy(-this.layout.delta,0,!0):t=this.views.first().section.prev():this.container.scrollLeft<0?this.scrollBy(-this.layout.delta,0,!0):t=this.views.first().section.prev();else if(this.isPaginated&&"vertical"===this.settings.axis){this.scrollTop=this.container.scrollTop,this.container.scrollTop>0?this.scrollBy(0,-this.layout.height,!0):t=this.views.first().section.prev()}else t=this.views.first().section.prev();else this.scrollLeft=this.container.scrollLeft,this.container.scrollLeft>0?this.scrollBy(-this.layout.delta,0,!0):t=this.views.first().section.prev();if(t){this.clear();let e=!1;return"pre-paginated"===this.layout.name&&2===this.layout.divisor&&"object"!=typeof t.prev()&&(e=!0),this.prepend(t,e).then(function(){var e;if("pre-paginated"===this.layout.name&&this.layout.divisor>1&&(e=t.prev()))return this.prepend(e)}.bind(this),t=>t).then(function(){this.isPaginated&&"horizontal"===this.settings.axis&&("rtl"===this.settings.direction?"default"===this.settings.rtlScrollType?this.scrollTo(0,0,!0):this.scrollTo(-1*this.container.scrollWidth+this.layout.delta,0,!0):this.scrollTo(this.container.scrollWidth-this.layout.delta,0,!0)),this.views.show()}.bind(this))}}}current(){var t=this.visible();return t.length?t[t.length-1]:null}clear(){this.views&&(this.views.hide(),this.scrollTo(0,0,!0),this.views.clear())}currentLocation(){return this.isPaginated&&"horizontal"===this.settings.axis?this.location=this.paginatedLocation():this.location=this.scrolledLocation(),this.location}scrolledLocation(){let t=this.visible(),e=this.container.getBoundingClientRect(),i=e.height<window.innerHeight?e.height:window.innerHeight,n=e.width<window.innerWidth?e.width:window.innerWidth,r="vertical"===this.settings.axis,s=(this.settings.direction,0);return this.settings.fullsize&&(s=r?window.scrollY:window.scrollX),t.map(t=>{let o,a,h,l,{index:c,href:u}=t.section,d=t.position(),f=t.width(),p=t.height();r?(o=s+e.top-d.top+0,a=o+i-0,l=this.layout.count(p,i).pages,h=i):(o=s+e.left-d.left+0,a=o+n-0,l=this.layout.count(f,n).pages,h=n);let g=Math.ceil(o/h),v=[],m=Math.ceil(a/h);if("rtl"===this.settings.direction&&!r){let t=g;g=l-m,m=l-t}v=[];for(var y=g;y<=m;y++){let t=y+1;v.push(t)}return{index:c,href:u,pages:v,totalPages:l,mapping:this.mapping.page(t.contents,t.section.cfiBase,o,a)}})}paginatedLocation(){let t=this.visible(),e=this.container.getBoundingClientRect(),i=0,n=0;return this.settings.fullsize&&(i=window.scrollX),t.map(t=>{let r,s,o,a,{index:h,href:l}=t.section,c=t.position(),u=t.width();"rtl"===this.settings.direction?(r=e.right-i,a=Math.min(Math.abs(r-c.left),this.layout.width)-n,o=c.width-(c.right-r)-n,s=o-a):(r=e.left+i,a=Math.min(c.right-r,this.layout.width)-n,s=r-c.left+n,o=s+a),n+=a;let d=this.mapping.page(t.contents,t.section.cfiBase,s,o),f=this.layout.count(u).pages,p=Math.floor(s/this.layout.pageWidth),g=[],v=Math.floor(o/this.layout.pageWidth);if(p<0&&(p=0,v+=1),"rtl"===this.settings.direction){let t=p;p=f-v,v=f-t}for(var m=p+1;m<=v;m++){let t=m;g.push(t)}return{index:h,href:l,pages:g,totalPages:f,mapping:d}})}isVisible(t,e,i,n){var r=t.position(),s=n||this.bounds();return"horizontal"===this.settings.axis&&r.right>s.left-e&&r.left<s.right+i||"vertical"===this.settings.axis&&r.bottom>s.top-e&&r.top<s.bottom+i}visible(){for(var t,e=this.bounds(),i=this.views.displayed(),n=i.length,r=[],s=0;s<n;s++)t=i[s],!0===this.isVisible(t,0,0,e)&&r.push(t);return r}scrollBy(t,e,i){let n="rtl"===this.settings.direction?-1:1;i&&(this.ignore=!0),this.settings.fullsize?window.scrollBy(t*n,e*n):(t&&(this.container.scrollLeft+=t*n),e&&(this.container.scrollTop+=e)),this.scrolled=!0}scrollTo(t,e,i){i&&(this.ignore=!0),this.settings.fullsize?window.scrollTo(t,e):(this.container.scrollLeft=t,this.container.scrollTop=e),this.scrolled=!0}onScroll(){let t,e;this.settings.fullsize?(t=window.scrollY,e=window.scrollX):(t=this.container.scrollTop,e=this.container.scrollLeft),this.scrollTop=t,this.scrollLeft=e,this.ignore?this.ignore=!1:(this.emit(f.c.MANAGERS.SCROLL,{top:t,left:e}),clearTimeout(this.afterScrolled),this.afterScrolled=setTimeout(function(){this.emit(f.c.MANAGERS.SCROLLED,{top:this.scrollTop,left:this.scrollLeft})}.bind(this),20))}bounds(){return this.stage.bounds()}applyLayout(t){this.layout=t,this.updateLayout(),this.views&&this.views.length>0&&"pre-paginated"===this.layout.name&&this.display(this.views.first().section)}updateLayout(){this.stage&&(this._stageSize=this.stage.size(),this.isPaginated?(this.layout.calculate(this._stageSize.width,this._stageSize.height,this.settings.gap),this.settings.offset=this.layout.delta/this.layout.divisor):this.layout.calculate(this._stageSize.width,this._stageSize.height),this.viewSettings.width=this.layout.width,this.viewSettings.height=this.layout.height,this.setLayout(this.layout))}setLayout(t){this.viewSettings.layout=t,this.mapping=new a.a(t.props,this.settings.direction,this.settings.axis),this.views&&this.views.forEach((function(e){e&&e.setLayout(t)}))}updateWritingMode(t){this.writingMode=t}updateAxis(t,e){(e||t!==this.settings.axis)&&(this.settings.axis=t,this.stage&&this.stage.axis(t),this.viewSettings.axis=t,this.mapping&&(this.mapping=new a.a(this.layout.props,this.settings.direction,this.settings.axis)),this.layout&&("vertical"===t?this.layout.spread("none"):this.layout.spread(this.layout.settings.spread)))}updateFlow(t,e="auto"){let i="paginated"===t||"auto"===t;this.isPaginated=i,"scrolled-doc"===t||"scrolled-continuous"===t||"scrolled"===t?this.updateAxis("vertical"):this.updateAxis("horizontal"),this.viewSettings.flow=t,this.settings.overflow?this.overflow=this.settings.overflow:this.overflow=i?"hidden":e,this.stage&&this.stage.overflow(this.overflow),this.updateLayout()}getContents(){var t=[];return this.views?(this.views.forEach((function(e){const i=e&&e.contents;i&&t.push(i)})),t):t}direction(t="ltr"){this.settings.direction=t,this.stage&&this.stage.direction(t),this.viewSettings.direction=t,this.updateLayout()}isRendered(){return this.rendered}}r()(p.prototype);e.a=p},function(t,e,i){"use strict";var n=i(2),r=i(0);e.a=class{constructor(t,e,i,n=!1){this.layout=t,this.horizontal="horizontal"===i,this.direction=e||"ltr",this._dev=n}section(t){var e=this.findRanges(t);return this.rangeListToCfiList(t.section.cfiBase,e)}page(t,e,i,r){var s,o=!(!t||!t.document)&&t.document.body;if(o){if(s=this.rangePairToCfiPair(e,{start:this.findStart(o,i,r),end:this.findEnd(o,i,r)}),!0===this._dev){let e=t.document,i=new n.a(s.start).toRange(e),r=new n.a(s.end).toRange(e),o=e.defaultView.getSelection(),a=e.createRange();o.removeAllRanges(),a.setStart(i.startContainer,i.startOffset),a.setEnd(r.endContainer,r.endOffset),o.addRange(a)}return s}}walk(t,e){if(!t||t.nodeType!==Node.TEXT_NODE){var i=function(t){return t.data.trim().length>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT},n=i;n.acceptNode=i;for(var r,s,o=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,n,!1);(r=o.nextNode())&&!(s=e(r)););return s}}findRanges(t){for(var e,i,n=[],r=t.contents.scrollWidth(),s=Math.ceil(r/this.layout.spreadWidth)*this.layout.divisor,o=this.layout.columnWidth,a=this.layout.gap,h=0;h<s.pages;h++)e=(o+a)*h,i=o*(h+1)+a*h,n.push({start:this.findStart(t.document.body,e,i),end:this.findEnd(t.document.body,e,i)});return n}findStart(t,e,i){for(var n,s,o=[t],a=t;o.length;)if(n=o.shift(),s=this.walk(n,t=>{var n,s,h,l,c;if(c=Object(r.nodeBounds)(t),this.horizontal&&"ltr"===this.direction){if(n=this.horizontal?c.left:c.top,s=this.horizontal?c.right:c.bottom,n>=e&&n<=i)return t;if(s>e)return t;a=t,o.push(t)}else if(this.horizontal&&"rtl"===this.direction){if(n=c.left,(s=c.right)<=i&&s>=e)return t;if(n<i)return t;a=t,o.push(t)}else{if(h=c.top,l=c.bottom,h>=e&&h<=i)return t;if(l>e)return t;a=t,o.push(t)}}))return this.findTextStartRange(s,e,i);return this.findTextStartRange(a,e,i)}findEnd(t,e,i){for(var n,s,o=[t],a=t;o.length;)if(n=o.shift(),s=this.walk(n,t=>{var n,s,h,l,c;if(c=Object(r.nodeBounds)(t),this.horizontal&&"ltr"===this.direction){if(n=Math.round(c.left),s=Math.round(c.right),n>i&&a)return a;if(s>i)return t;a=t,o.push(t)}else if(this.horizontal&&"rtl"===this.direction){if(n=Math.round(this.horizontal?c.left:c.top),(s=Math.round(this.horizontal?c.right:c.bottom))<e&&a)return a;if(n<e)return t;a=t,o.push(t)}else{if(h=Math.round(c.top),l=Math.round(c.bottom),h>i&&a)return a;if(l>i)return t;a=t,o.push(t)}}))return this.findTextEndRange(s,e,i);return this.findTextEndRange(a,e,i)}findTextStartRange(t,e,i){for(var n,r,s=this.splitTextNodeIntoRanges(t),o=0;o<s.length;o++)if(r=(n=s[o]).getBoundingClientRect(),this.horizontal&&"ltr"===this.direction){if(r.left>=e)return n}else if(this.horizontal&&"rtl"===this.direction){if(r.right<=i)return n}else if(r.top>=e)return n;return s[0]}findTextEndRange(t,e,i){for(var n,r,s,o,a,h,l,c=this.splitTextNodeIntoRanges(t),u=0;u<c.length;u++){if(s=(r=c[u]).getBoundingClientRect(),this.horizontal&&"ltr"===this.direction){if(o=s.left,a=s.right,o>i&&n)return n;if(a>i)return r}else if(this.horizontal&&"rtl"===this.direction){if(o=s.left,(a=s.right)<e&&n)return n;if(o<e)return r}else{if(h=s.top,l=s.bottom,h>i&&n)return n;if(l>i)return r}n=r}return c[c.length-1]}splitTextNodeIntoRanges(t,e){var i,n=[],r=(t.textContent||"").trim(),s=t.ownerDocument,o=e||" ",a=r.indexOf(o);if(-1===a||t.nodeType!=Node.TEXT_NODE)return(i=s.createRange()).selectNodeContents(t),[i];for((i=s.createRange()).setStart(t,0),i.setEnd(t,a),n.push(i),i=!1;-1!=a;)(a=r.indexOf(o,a+1))>0&&(i&&(i.setEnd(t,a),n.push(i)),(i=s.createRange()).setStart(t,a+1));return i&&(i.setEnd(t,r.length),n.push(i)),n}rangePairToCfiPair(t,e){var i=e.start,r=e.end;return i.collapse(!0),r.collapse(!1),{start:new n.a(i,t).toString(),end:new n.a(r,t).toString()}}rangeListToCfiList(t,e){for(var i,n=[],r=0;r<e.length;r++)i=this.rangePairToCfiPair(t,e[r]),n.push(i);return n}axis(t){return t&&(this.horizontal="horizontal"===t),this.horizontal}}},function(t,e,i){"use strict";var n=i(87),r=i(13),s=i(36),o=i(46),a=i(35),h=i(33),l=i(100),c=i(101),u=Math.max,d=Math.min,f=Math.floor,p=/\$([$&'`]|\d\d?|<[^>]*>)/g,g=/\$([$&'`]|\d\d?)/g;n("replace",2,(function(t,e,i,n){var v=n.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=n.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(i,n){var r=h(this),s=null==i?void 0:i[t];return void 0!==s?s.call(i,r,n):e.call(String(r),i,n)},function(t,n){if(!v&&m||"string"==typeof n&&-1===n.indexOf(y)){var s=i(e,t,this,n);if(s.done)return s.value}var h=r(t),f=String(this),p="function"==typeof n;p||(n=String(n));var g=h.global;if(g){var w=h.unicode;h.lastIndex=0}for(var x=[];;){var E=c(h,f);if(null===E)break;if(x.push(E),!g)break;""===String(E[0])&&(h.lastIndex=l(f,o(h.lastIndex),w))}for(var S,_="",O=0,C=0;C<x.length;C++){E=x[C];for(var T=String(E[0]),k=u(d(a(E.index),f.length),0),R=[],L=1;L<E.length;L++)R.push(void 0===(S=E[L])?S:String(S));var I=E.groups;if(p){var j=[T].concat(R,k,f);void 0!==I&&j.push(I);var N=String(n.apply(void 0,j))}else N=b(T,f,k,R,I,n);k>=O&&(_+=f.slice(O,k)+N,O=k+T.length)}return _+f.slice(O)}];function b(t,i,n,r,o,a){var h=n+t.length,l=r.length,c=g;return void 0!==o&&(o=s(o),c=p),e.call(a,c,(function(e,s){var a;switch(s.charAt(0)){case"$":return"$";case"&":return t;case"`":return i.slice(0,n);case"'":return i.slice(h);case"<":a=o[s.slice(1,-1)];break;default:var c=+s;if(0===c)return e;if(c>l){var u=f(c/10);return 0===u?e:u<=l?void 0===r[u-1]?s.charAt(1):r[u-1]+s.charAt(1):e}a=r[c-1]}return void 0===a?"":a}))}}))},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){var n,r,s,o=i(89),a=i(7),h=i(17),l=i(15),c=i(10),u=i(43),d=i(44),f=a.WeakMap;if(o){var p=new f,g=p.get,v=p.has,m=p.set;n=function(t,e){return m.call(p,t,e),e},r=function(t){return g.call(p,t)||{}},s=function(t){return v.call(p,t)}}else{var y=u("state");d[y]=!0,n=function(t,e){return l(t,y,e),e},r=function(t){return c(t,y)?t[y]:{}},s=function(t){return c(t,y)}}t.exports={set:n,get:r,has:s,enforce:function(t){return s(t)?r(t):n(t,{})},getterFor:function(t){return function(e){var i;if(!h(e)||(i=r(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return i}}}},function(t,e){t.exports={}},function(t,e,i){"use strict";var n=i(3),r=i.n(n),s=i(0),o=i(2),a=i(23),h=i(11),l=i(1);const c="undefined"!=typeof navigator,u=c&&/Chrome/.test(navigator.userAgent),d=c&&!u&&/AppleWebKit/.test(navigator.userAgent);class f{constructor(t,e,i,n){this.epubcfi=new o.a,this.document=t,this.documentElement=this.document.documentElement,this.content=e||this.document.body,this.window=this.document.defaultView,this._size={width:0,height:0},this.sectionIndex=n||0,this.cfiBase=i||"",this.epubReadingSystem("epub.js",l.b),this.called=0,this.active=!0,this.listeners()}static get listenedEvents(){return l.a}width(t){var e=this.content;return t&&Object(s.isNumber)(t)&&(t+="px"),t&&(e.style.width=t),parseInt(this.window.getComputedStyle(e).width)}height(t){var e=this.content;return t&&Object(s.isNumber)(t)&&(t+="px"),t&&(e.style.height=t),parseInt(this.window.getComputedStyle(e).height)}contentWidth(t){var e=this.content||this.document.body;return t&&Object(s.isNumber)(t)&&(t+="px"),t&&(e.style.width=t),parseInt(this.window.getComputedStyle(e).width)}contentHeight(t){var e=this.content||this.document.body;return t&&Object(s.isNumber)(t)&&(t+="px"),t&&(e.style.height=t),parseInt(this.window.getComputedStyle(e).height)}textWidth(){let t,e,i=this.document.createRange(),n=this.content||this.document.body,r=Object(s.borders)(n);return i.selectNodeContents(n),t=i.getBoundingClientRect(),e=t.width,r&&r.width&&(e+=r.width),Math.round(e)}textHeight(){let t,e,i=this.document.createRange(),n=this.content||this.document.body;return i.selectNodeContents(n),t=i.getBoundingClientRect(),e=t.bottom,Math.round(e)}scrollWidth(){return this.documentElement.scrollWidth}scrollHeight(){return this.documentElement.scrollHeight}overflow(t){return t&&(this.documentElement.style.overflow=t),this.window.getComputedStyle(this.documentElement).overflow}overflowX(t){return t&&(this.documentElement.style.overflowX=t),this.window.getComputedStyle(this.documentElement).overflowX}overflowY(t){return t&&(this.documentElement.style.overflowY=t),this.window.getComputedStyle(this.documentElement).overflowY}css(t,e,i){var n=this.content||this.document.body;return e?n.style.setProperty(t,e,i?"important":""):n.style.removeProperty(t),this.window.getComputedStyle(n)[t]}viewport(t){var e,i=this.document.querySelector("meta[name='viewport']"),n={width:void 0,height:void 0,scale:void 0,minimum:void 0,maximum:void 0,scalable:void 0},r=[];if(i&&i.hasAttribute("content")){let t=i.getAttribute("content"),e=t.match(/width\s*=\s*([^,]*)/),r=t.match(/height\s*=\s*([^,]*)/),s=t.match(/initial-scale\s*=\s*([^,]*)/),o=t.match(/minimum-scale\s*=\s*([^,]*)/),a=t.match(/maximum-scale\s*=\s*([^,]*)/),h=t.match(/user-scalable\s*=\s*([^,]*)/);e&&e.length&&void 0!==e[1]&&(n.width=e[1]),r&&r.length&&void 0!==r[1]&&(n.height=r[1]),s&&s.length&&void 0!==s[1]&&(n.scale=s[1]),o&&o.length&&void 0!==o[1]&&(n.minimum=o[1]),a&&a.length&&void 0!==a[1]&&(n.maximum=a[1]),h&&h.length&&void 0!==h[1]&&(n.scalable=h[1])}return e=Object(s.defaults)(t||{},n),t&&(e.width&&r.push("width="+e.width),e.height&&r.push("height="+e.height),e.scale&&r.push("initial-scale="+e.scale),"no"===e.scalable?(r.push("minimum-scale="+e.scale),r.push("maximum-scale="+e.scale),r.push("user-scalable="+e.scalable)):(e.scalable&&r.push("user-scalable="+e.scalable),e.minimum&&r.push("minimum-scale="+e.minimum),e.maximum&&r.push("minimum-scale="+e.maximum)),i||((i=this.document.createElement("meta")).setAttribute("name","viewport"),this.document.querySelector("head").appendChild(i)),i.setAttribute("content",r.join(", ")),this.window.scrollTo(0,0)),e}expand(){this.emit(l.c.CONTENTS.EXPAND)}listeners(){this.imageLoadListeners(),this.mediaQueryListeners(),this.addEventListeners(),this.addSelectionListeners(),"undefined"==typeof ResizeObserver?(this.resizeListeners(),this.visibilityListeners()):this.resizeObservers(),this.linksHandler()}removeListeners(){this.removeEventListeners(),this.removeSelectionListeners(),this.observer&&this.observer.disconnect(),clearTimeout(this.expanding)}resizeCheck(){let t=this.textWidth(),e=this.textHeight();t==this._size.width&&e==this._size.height||(this._size={width:t,height:e},this.onResize&&this.onResize(this._size),this.emit(l.c.CONTENTS.RESIZE,this._size))}resizeListeners(){clearTimeout(this.expanding),requestAnimationFrame(this.resizeCheck.bind(this)),this.expanding=setTimeout(this.resizeListeners.bind(this),350)}visibilityListeners(){document.addEventListener("visibilitychange",()=>{"visible"===document.visibilityState&&!1===this.active?(this.active=!0,this.resizeListeners()):(this.active=!1,clearTimeout(this.expanding))})}transitionListeners(){let t=this.content;t.style.transitionProperty="font, font-size, font-size-adjust, font-stretch, font-variation-settings, font-weight, width, height",t.style.transitionDuration="0.001ms",t.style.transitionTimingFunction="linear",t.style.transitionDelay="0",this._resizeCheck=this.resizeCheck.bind(this),this.document.addEventListener("transitionend",this._resizeCheck)}mediaQueryListeners(){for(var t=this.document.styleSheets,e=function(t){t.matches&&!this._expanding&&setTimeout(this.expand.bind(this),1)}.bind(this),i=0;i<t.length;i+=1){var n;try{n=t[i].cssRules}catch(t){return}if(!n)return;for(var r=0;r<n.length;r+=1){if(n[r].media)this.window.matchMedia(n[r].media.mediaText).addListener(e)}}}resizeObservers(){this.observer=new ResizeObserver(t=>{requestAnimationFrame(this.resizeCheck.bind(this))}),this.observer.observe(this.document.documentElement)}mutationObservers(){this.observer=new MutationObserver(t=>{this.resizeCheck()});this.observer.observe(this.document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})}imageLoadListeners(){for(var t,e=this.document.querySelectorAll("img"),i=0;i<e.length;i++)void 0!==(t=e[i]).naturalWidth&&0===t.naturalWidth&&(t.onload=this.expand.bind(this))}fontLoadListeners(){this.document&&this.document.fonts&&this.document.fonts.ready.then(function(){this.resizeCheck()}.bind(this))}root(){return this.document?this.document.documentElement:null}locationOf(t,e){var i,n={left:0,top:0};if(!this.document)return n;if(this.epubcfi.isCfiString(t)){let r=new o.a(t).toRange(this.document,e);if(r){try{if(!r.endContainer||r.startContainer==r.endContainer&&r.startOffset==r.endOffset){let t=r.startContainer.textContent.indexOf(" ",r.startOffset);-1==t&&(t=r.startContainer.textContent.length),r.setEnd(r.startContainer,t)}}catch(t){console.error("setting end offset to start container length failed",t)}if(r.startContainer.nodeType===Node.ELEMENT_NODE)i=r.startContainer.getBoundingClientRect(),n.left=i.left,n.top=i.top;else if(d){let t=r.startContainer,e=new Range;try{1===t.nodeType?i=t.getBoundingClientRect():r.startOffset+2<t.length?(e.setStart(t,r.startOffset),e.setEnd(t,r.startOffset+2),i=e.getBoundingClientRect()):r.startOffset-2>0?(e.setStart(t,r.startOffset-2),e.setEnd(t,r.startOffset),i=e.getBoundingClientRect()):i=t.parentNode.getBoundingClientRect()}catch(t){console.error(t,t.stack)}}else i=r.getBoundingClientRect()}}else if("string"==typeof t&&t.indexOf("#")>-1){let e=t.substring(t.indexOf("#")+1),n=this.document.getElementById(e);if(n)if(d){let t=new Range;t.selectNode(n),i=t.getBoundingClientRect()}else i=n.getBoundingClientRect()}return i&&(n.left=i.left,n.top=i.top),n}addStylesheet(t){return new Promise(function(e,i){var n,r=!1;this.document?(n=this.document.querySelector("link[href='"+t+"']"))?e(!0):((n=this.document.createElement("link")).type="text/css",n.rel="stylesheet",n.href=t,n.onload=n.onreadystatechange=function(){r||this.readyState&&"complete"!=this.readyState||(r=!0,setTimeout(()=>{e(!0)},1))},this.document.head.appendChild(n)):e(!1)}.bind(this))}_getStylesheetNode(t){var e;return t="epubjs-inserted-css-"+(t||""),!!this.document&&((e=this.document.getElementById(t))||((e=this.document.createElement("style")).id=t,this.document.head.appendChild(e)),e)}addStylesheetCss(t,e){return!(!this.document||!t)&&(this._getStylesheetNode(e).innerHTML=t,!0)}addStylesheetRules(t,e){var i;if(this.document&&t&&0!==t.length)if(i=this._getStylesheetNode(e).sheet,"[object Array]"===Object.prototype.toString.call(t))for(var n=0,r=t.length;n<r;n++){var s=1,o=t[n],a=t[n][0],h="";"[object Array]"===Object.prototype.toString.call(o[1][0])&&(o=o[1],s=0);for(var l=o.length;s<l;s++){var c=o[s];h+=c[0]+":"+c[1]+(c[2]?" !important":"")+";\n"}i.insertRule(a+"{"+h+"}",i.cssRules.length)}else{Object.keys(t).forEach(e=>{const n=t[e];if(Array.isArray(n))n.forEach(t=>{const n=Object.keys(t).map(e=>`${e}:${t[e]}`).join(";");i.insertRule(`${e}{${n}}`,i.cssRules.length)});else{const t=Object.keys(n).map(t=>`${t}:${n[t]}`).join(";");i.insertRule(`${e}{${t}}`,i.cssRules.length)}})}}addScript(t){return new Promise(function(e,i){var n,r=!1;this.document?((n=this.document.createElement("script")).type="text/javascript",n.async=!0,n.src=t,n.onload=n.onreadystatechange=function(){r||this.readyState&&"complete"!=this.readyState||(r=!0,setTimeout((function(){e(!0)}),1))},this.document.head.appendChild(n)):e(!1)}.bind(this))}addClass(t){var e;this.document&&(e=this.content||this.document.body)&&e.classList.add(t)}removeClass(t){var e;this.document&&(e=this.content||this.document.body)&&e.classList.remove(t)}addEventListeners(){this.document&&(this._triggerEvent=this.triggerEvent.bind(this),l.a.forEach((function(t){this.document.addEventListener(t,this._triggerEvent,{passive:!0})}),this))}removeEventListeners(){this.document&&(l.a.forEach((function(t){this.document.removeEventListener(t,this._triggerEvent,{passive:!0})}),this),this._triggerEvent=void 0)}triggerEvent(t){this.emit(t.type,t)}addSelectionListeners(){this.document&&(this._onSelectionChange=this.onSelectionChange.bind(this),this.document.addEventListener("selectionchange",this._onSelectionChange,{passive:!0}))}removeSelectionListeners(){this.document&&(this.document.removeEventListener("selectionchange",this._onSelectionChange,{passive:!0}),this._onSelectionChange=void 0)}onSelectionChange(t){this.selectionEndTimeout&&clearTimeout(this.selectionEndTimeout),this.selectionEndTimeout=setTimeout(function(){var t=this.window.getSelection();this.triggerSelectedEvent(t)}.bind(this),250)}triggerSelectedEvent(t){var e,i;t&&t.rangeCount>0&&((e=t.getRangeAt(0)).collapsed||(i=new o.a(e,this.cfiBase).toString(),this.emit(l.c.CONTENTS.SELECTED,i),this.emit(l.c.CONTENTS.SELECTED_RANGE,e)))}range(t,e){return new o.a(t).toRange(this.document,e)}cfiFromRange(t,e){return new o.a(t,this.cfiBase,e).toString()}cfiFromNode(t,e){return new o.a(t,this.cfiBase,e).toString()}map(t){return new a.a(t).section()}size(t,e){var i={scale:1,scalable:"no"};this.layoutStyle("scrolling"),t>=0&&(this.width(t),i.width=t,this.css("padding","0 "+t/12+"px")),e>=0&&(this.height(e),i.height=e),this.css("margin","0"),this.css("box-sizing","border-box"),this.viewport(i)}columns(t,e,i,n,r){let o=Object(s.prefixed)("column-axis"),a=Object(s.prefixed)("column-gap"),h=Object(s.prefixed)("column-width"),l=Object(s.prefixed)("column-fill"),c=0===this.writingMode().indexOf("vertical")?"vertical":"horizontal";this.layoutStyle("paginated"),"rtl"===r&&"horizontal"===c&&this.direction(r),this.width(t),this.height(e),this.viewport({width:t,height:e,scale:1,scalable:"no"}),this.css("overflow-y","hidden"),this.css("margin","0",!0),"vertical"===c?(this.css("padding-top",n/2+"px",!0),this.css("padding-bottom",n/2+"px",!0),this.css("padding-left","20px"),this.css("padding-right","20px"),this.css(o,"vertical")):(this.css("padding-top","20px"),this.css("padding-bottom","20px"),this.css("padding-left",n/2+"px",!0),this.css("padding-right",n/2+"px",!0),this.css(o,"horizontal")),this.css("box-sizing","border-box"),this.css("max-width","inherit"),this.css(l,"auto"),this.css(a,n+"px"),this.css(h,i+"px"),this.css("-webkit-line-box-contain","block glyphs replaced")}scaler(t,e,i){var n="scale("+t+")",r="";this.css("transform-origin","top left"),(e>=0||i>=0)&&(r=" translate("+(e||0)+"px, "+(i||0)+"px )"),this.css("transform",n+r)}fit(t,e,i){var n=this.viewport(),r=parseInt(n.width),s=parseInt(n.height),o=t/r,a=e/s,h=o<a?o:a;if(this.layoutStyle("paginated"),this.width(r),this.height(s),this.overflow("hidden"),this.scaler(h,0,0),this.css("background-size",r*h+"px "+s*h+"px"),this.css("background-color","transparent"),i&&i.properties.includes("page-spread-left")){var l=t-r*h;this.css("margin-left",l+"px")}}direction(t){this.documentElement&&(this.documentElement.style.direction=t)}mapPage(t,e,i,n,r){return new a.a(e,r).page(this,t,i,n)}linksHandler(){Object(h.c)(this.content,t=>{this.emit(l.c.CONTENTS.LINK_CLICKED,t)})}writingMode(t){let e=Object(s.prefixed)("writing-mode");return t&&this.documentElement&&(this.documentElement.style[e]=t),this.window.getComputedStyle(this.documentElement)[e]||""}layoutStyle(t){return t&&(this._layoutStyle=t,navigator.epubReadingSystem.layoutStyle=this._layoutStyle),this._layoutStyle||"paginated"}epubReadingSystem(t,e){return navigator.epubReadingSystem={name:t,version:e,layoutStyle:this.layoutStyle(),hasFeature:function(t){switch(t){case"dom-manipulation":case"layout-changes":case"touch-events":case"mouse-events":case"keyboard-events":return!0;case"spine-scripting":default:return!1}}},navigator.epubReadingSystem}destroy(){this.removeListeners()}}r()(f.prototype),e.a=f},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Underline=e.Highlight=e.Mark=e.Pane=void 0;var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=o(i(135)),s=o(i(136));function o(t){return t&&t.__esModule?t:{default:t}}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function h(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}e.Pane=function(){function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.body;l(this,t),this.target=e,this.element=r.default.createElement("svg"),this.marks=[],this.element.style.position="absolute",this.element.setAttribute("pointer-events","none"),s.default.proxyMouse(this.target,this.marks),this.container=i,this.container.appendChild(this.element),this.render()}return n(t,[{key:"addMark",value:function(t){var e=r.default.createElement("g");return this.element.appendChild(e),t.bind(e,this.container),this.marks.push(t),t.render(),t}},{key:"removeMark",value:function(t){var e=this.marks.indexOf(t);if(-1!==e){var i=t.unbind();this.element.removeChild(i),this.marks.splice(e,1)}}},{key:"render",value:function(){var t,e,i,n;!function(t,e){t.style.setProperty("top",e.top+"px","important"),t.style.setProperty("left",e.left+"px","important"),t.style.setProperty("height",e.height+"px","important"),t.style.setProperty("width",e.width+"px","important")}(this.element,(t=this.target,e=this.container,i=e.getBoundingClientRect(),n=t.getBoundingClientRect(),{top:n.top-i.top,left:n.left-i.left,height:t.scrollHeight,width:t.scrollWidth}));var r=!0,s=!1,o=void 0;try{for(var a,h=this.marks[Symbol.iterator]();!(r=(a=h.next()).done);r=!0){a.value.render()}}catch(t){s=!0,o=t}finally{try{!r&&h.return&&h.return()}finally{if(s)throw o}}}}]),t}();var c=e.Mark=function(){function t(){l(this,t),this.element=null}return n(t,[{key:"bind",value:function(t,e){this.element=t,this.container=e}},{key:"unbind",value:function(){var t=this.element;return this.element=null,t}},{key:"render",value:function(){}},{key:"dispatchEvent",value:function(t){this.element&&this.element.dispatchEvent(t)}},{key:"getBoundingClientRect",value:function(){return this.element.getBoundingClientRect()}},{key:"getClientRects",value:function(){for(var t=[],e=this.element.firstChild;e;)t.push(e.getBoundingClientRect()),e=e.nextSibling;return t}},{key:"filteredRanges",value:function(){var t=Array.from(this.range.getClientRects());return t.filter((function(e){for(var i=0;i<t.length;i++){if(t[i]===e)return!0;if(n=t[i],(r=e).right<=n.right&&r.left>=n.left&&r.top>=n.top&&r.bottom<=n.bottom)return!1}var n,r;return!0}))}}]),t}(),u=e.Highlight=function(t){function e(t,i,n,r){l(this,e);var s=a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return s.range=t,s.className=i,s.data=n||{},s.attributes=r||{},s}return h(e,t),n(e,[{key:"bind",value:function(t,i){for(var n in function t(e,i,n){null===e&&(e=Function.prototype);var r=Object.getOwnPropertyDescriptor(e,i);if(void 0===r){var s=Object.getPrototypeOf(e);return null===s?void 0:t(s,i,n)}if("value"in r)return r.value;var o=r.get;return void 0!==o?o.call(n):void 0}(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"bind",this).call(this,t,i),this.data)this.data.hasOwnProperty(n)&&(this.element.dataset[n]=this.data[n]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&this.element.setAttribute(n,this.attributes[n]);this.className&&this.element.classList.add(this.className)}},{key:"render",value:function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);for(var t=this.element.ownerDocument.createDocumentFragment(),e=this.filteredRanges(),i=this.element.getBoundingClientRect(),n=this.container.getBoundingClientRect(),s=0,o=e.length;s<o;s++){var a=e[s],h=r.default.createElement("rect");h.setAttribute("x",a.left-i.left+n.left),h.setAttribute("y",a.top-i.top+n.top),h.setAttribute("height",a.height),h.setAttribute("width",a.width),t.appendChild(h)}this.element.appendChild(t)}}]),e}(c);e.Underline=function(t){function e(t,i,n,r){return l(this,e),a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i,n,r))}return h(e,t),n(e,[{key:"render",value:function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);for(var t=this.element.ownerDocument.createDocumentFragment(),e=this.filteredRanges(),i=this.element.getBoundingClientRect(),n=this.container.getBoundingClientRect(),s=0,o=e.length;s<o;s++){var a=e[s],h=r.default.createElement("rect");h.setAttribute("x",a.left-i.left+n.left),h.setAttribute("y",a.top-i.top+n.top),h.setAttribute("height",a.height),h.setAttribute("width",a.width),h.setAttribute("fill","none");var l=r.default.createElement("line");l.setAttribute("x1",a.left-i.left+n.left),l.setAttribute("x2",a.left-i.left+n.left+a.width),l.setAttribute("y1",a.top-i.top+n.top+a.height-1),l.setAttribute("y2",a.top-i.top+n.top+a.height-1),l.setAttribute("stroke-width",1),l.setAttribute("stroke","black"),l.setAttribute("stroke-linecap","square"),t.appendChild(h),t.appendChild(l)}this.element.appendChild(t)}}]),e}(u)},function(t,e){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){var n=i(7),r=i(59).f,s=i(15),o=i(19),a=i(42),h=i(90),l=i(96);t.exports=function(t,e){var i,c,u,d,f,p=t.target,g=t.global,v=t.stat;if(i=g?n:v?n[p]||a(p,{}):(n[p]||{}).prototype)for(c in e){if(d=e[c],u=t.noTargetGet?(f=r(i,c))&&f.value:i[c],!l(g?c:p+(v?".":"#")+c,t.forced)&&void 0!==u){if(typeof d==typeof u)continue;h(d,u)}(t.sham||u&&u.sham)&&s(d,"sham",!0),o(i,c,d,t)}}},function(t,e,i){var n=i(61),r=i(33);t.exports=function(t){return n(r(t))}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){t.exports=!1},function(t,e){var i=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:i)(t)}},function(t,e,i){var n=i(33);t.exports=function(t){return Object(n(t))}},function(t,e,i){var n=i(18).f,r=i(10),s=i(8)("toStringTag");t.exports=function(t,e,i){t&&!r(t=i?t:t.prototype,s)&&n(t,s,{configurable:!0,value:e})}},function(e,i){e.exports=t},function(t,e,i){"use strict";var n=i(3),r=i.n(n),s=i(0),o=i(6),a=i(2),h=i(21),l=i(1);class c{constructor(t){this.settings=t,this.name=t.layout||"reflowable",this._spread="none"!==t.spread,this._minSpreadWidth=t.minSpreadWidth||800,this._evenSpreads=t.evenSpreads||!1,"scrolled"===t.flow||"scrolled-continuous"===t.flow||"scrolled-doc"===t.flow?this._flow="scrolled":this._flow="paginated",this.width=0,this.height=0,this.spreadWidth=0,this.delta=0,this.columnWidth=0,this.gap=0,this.divisor=1,this.props={name:this.name,spread:this._spread,flow:this._flow,width:0,height:0,spreadWidth:0,delta:0,columnWidth:0,gap:0,divisor:1}}flow(t){return void 0!==t&&(this._flow="scrolled"===t||"scrolled-continuous"===t||"scrolled-doc"===t?"scrolled":"paginated",this.update({flow:this._flow})),this._flow}spread(t,e){return t&&(this._spread="none"!==t,this.update({spread:this._spread})),e>=0&&(this._minSpreadWidth=e),this._spread}calculate(t,e,i){var n,r,s,o,a=1,h=i||0,l=t,c=e,u=Math.floor(l/12);a=this._spread&&l>=this._minSpreadWidth?2:1,"reflowable"!==this.name||"paginated"!==this._flow||i>=0||(h=u%2==0?u:u-1),"pre-paginated"===this.name&&(h=0),a>1?s=(n=l/a-h)+h:(n=l,s=l),"pre-paginated"===this.name&&a>1&&(l=n),r=n*a+h,o=l,this.width=l,this.height=c,this.spreadWidth=r,this.pageWidth=s,this.delta=o,this.columnWidth=n,this.gap=h,this.divisor=a,this.update({width:l,height:c,spreadWidth:r,pageWidth:s,delta:o,columnWidth:n,gap:h,divisor:a})}format(t,e,i){return"pre-paginated"===this.name?t.fit(this.columnWidth,this.height,e):"paginated"===this._flow?t.columns(this.width,this.height,this.columnWidth,this.gap,this.settings.direction):i&&"horizontal"===i?t.size(null,this.height):t.size(this.width,null)}count(t,e){let i,n;return"pre-paginated"===this.name?(i=1,n=1):"paginated"===this._flow?(e=e||this.delta,i=Math.ceil(t/e),n=i*this.divisor):(e=e||this.height,i=Math.ceil(t/e),n=i),{spreads:i,pages:n}}update(t){if(Object.keys(t).forEach(e=>{this.props[e]===t[e]&&delete t[e]}),Object.keys(t).length>0){let e=Object(s.extend)(this.props,t);this.emit(l.c.LAYOUT.UPDATED,e,t)}}}r()(c.prototype);var u=c,d=i(5);var f=class{constructor(t){this.rendition=t,this._themes={default:{rules:{},url:"",serialized:""}},this._overrides={},this._current="default",this._injected=[],this.rendition.hooks.content.register(this.inject.bind(this)),this.rendition.hooks.content.register(this.overrides.bind(this))}register(){if(0!==arguments.length)return 1===arguments.length&&"object"==typeof arguments[0]?this.registerThemes(arguments[0]):1===arguments.length&&"string"==typeof arguments[0]?this.default(arguments[0]):2===arguments.length&&"string"==typeof arguments[1]?this.registerUrl(arguments[0],arguments[1]):2===arguments.length&&"object"==typeof arguments[1]?this.registerRules(arguments[0],arguments[1]):void 0}default(t){if(t)return"string"==typeof t?this.registerUrl("default",t):"object"==typeof t?this.registerRules("default",t):void 0}registerThemes(t){for(var e in t)t.hasOwnProperty(e)&&("string"==typeof t[e]?this.registerUrl(e,t[e]):this.registerRules(e,t[e]))}registerCss(t,e){this._themes[t]={serialized:e},(this._injected[t]||"default"==t)&&this.update(t)}registerUrl(t,e){var i=new d.a(e);this._themes[t]={url:i.toString()},(this._injected[t]||"default"==t)&&this.update(t)}registerRules(t,e){this._themes[t]={rules:e},(this._injected[t]||"default"==t)&&this.update(t)}select(t){var e=this._current;this._current=t,this.update(t),this.rendition.getContents().forEach(i=>{i.removeClass(e),i.addClass(t)})}update(t){this.rendition.getContents().forEach(e=>{this.add(t,e)})}inject(t){var e,i=[],n=this._themes;for(var r in n)!n.hasOwnProperty(r)||r!==this._current&&"default"!==r||(((e=n[r]).rules&&Object.keys(e.rules).length>0||e.url&&-1===i.indexOf(e.url))&&this.add(r,t),this._injected.push(r));"default"!=this._current&&t.addClass(this._current)}add(t,e){var i=this._themes[t];i&&e&&(i.url?e.addStylesheet(i.url):i.serialized?(e.addStylesheetCss(i.serialized,t),i.injected=!0):i.rules&&(e.addStylesheetRules(i.rules,t),i.injected=!0))}override(t,e,i){var n=this.rendition.getContents();this._overrides[t]={value:e,priority:!0===i},n.forEach(e=>{e.css(t,this._overrides[t].value,this._overrides[t].priority)})}removeOverride(t){var e=this.rendition.getContents();delete this._overrides[t],e.forEach(e=>{e.css(t)})}overrides(t){var e=this._overrides;for(var i in e)e.hasOwnProperty(i)&&t.css(i,e[i].value,e[i].priority)}fontSize(t){this.override("font-size",t)}font(t){this.override("font-family",t,!0)}destroy(){this.rendition=void 0,this._themes=void 0,this._overrides=void 0,this._current=void 0,this._injected=void 0}};i(28);class p{constructor({type:t,cfiRange:e,data:i,sectionIndex:n,cb:r,className:s,styles:o}){this.type=t,this.cfiRange=e,this.data=i,this.sectionIndex=n,this.mark=void 0,this.cb=r,this.className=s,this.styles=o}update(t){this.data=t}attach(t){let e,{cfiRange:i,data:n,type:r,mark:s,cb:o,className:a,styles:h}=this;return"highlight"===r?e=t.highlight(i,n,o,a,h):"underline"===r?e=t.underline(i,n,o,a,h):"mark"===r&&(e=t.mark(i,n,o)),this.mark=e,this.emit(l.c.ANNOTATION.ATTACH,e),e}detach(t){let e,{cfiRange:i,type:n}=this;return t&&("highlight"===n?e=t.unhighlight(i):"underline"===n?e=t.ununderline(i):"mark"===n&&(e=t.unmark(i))),this.mark=void 0,this.emit(l.c.ANNOTATION.DETACH,e),e}text(){}}r()(p.prototype);var g=class{constructor(t){this.rendition=t,this.highlights=[],this.underlines=[],this.marks=[],this._annotations={},this._annotationsBySectionIndex={},this.rendition.hooks.render.register(this.inject.bind(this)),this.rendition.hooks.unloaded.register(this.clear.bind(this))}add(t,e,i,n,r,s){let o=encodeURI(e+t),h=new a.a(e).spinePos,l=new p({type:t,cfiRange:e,data:i,sectionIndex:h,cb:n,className:r,styles:s});return this._annotations[o]=l,h in this._annotationsBySectionIndex?this._annotationsBySectionIndex[h].push(o):this._annotationsBySectionIndex[h]=[o],this.rendition.views().forEach(t=>{l.sectionIndex===t.index&&l.attach(t)}),l}remove(t,e){let i=encodeURI(t+e);if(i in this._annotations){let t=this._annotations[i];if(e&&t.type!==e)return;this.rendition.views().forEach(e=>{this._removeFromAnnotationBySectionIndex(t.sectionIndex,i),t.sectionIndex===e.index&&t.detach(e)}),delete this._annotations[i]}}_removeFromAnnotationBySectionIndex(t,e){this._annotationsBySectionIndex[t]=this._annotationsAt(t).filter(t=>t!==e)}_annotationsAt(t){return this._annotationsBySectionIndex[t]}highlight(t,e,i,n,r){return this.add("highlight",t,e,i,n,r)}underline(t,e,i,n,r){return this.add("underline",t,e,i,n,r)}mark(t,e,i){return this.add("mark",t,e,i)}each(){return this._annotations.forEach.apply(this._annotations,arguments)}inject(t){let e=t.index;if(e in this._annotationsBySectionIndex){this._annotationsBySectionIndex[e].forEach(e=>{this._annotations[e].attach(t)})}}clear(t){let e=t.index;if(e in this._annotationsBySectionIndex){this._annotationsBySectionIndex[e].forEach(e=>{this._annotations[e].detach(t)})}}show(){}hide(){}},v=i(54),m=i(22),y=i(56);class b{constructor(t,e){this.settings=Object(s.extend)(this.settings||{},{width:null,height:null,ignoreClass:"",manager:"default",view:"iframe",flow:null,layout:null,spread:null,minSpreadWidth:800,stylesheet:null,resizeOnOrientationChange:!0,script:null,snap:!1,defaultDirection:"ltr"}),Object(s.extend)(this.settings,e),"object"==typeof this.settings.manager&&(this.manager=this.settings.manager),this.book=t,this.hooks={},this.hooks.display=new o.a(this),this.hooks.serialize=new o.a(this),this.hooks.content=new o.a(this),this.hooks.unloaded=new o.a(this),this.hooks.layout=new o.a(this),this.hooks.render=new o.a(this),this.hooks.show=new o.a(this),this.hooks.content.register(this.handleLinks.bind(this)),this.hooks.content.register(this.passEvents.bind(this)),this.hooks.content.register(this.adjustImages.bind(this)),this.book.spine.hooks.content.register(this.injectIdentifier.bind(this)),this.settings.stylesheet&&this.book.spine.hooks.content.register(this.injectStylesheet.bind(this)),this.settings.script&&this.book.spine.hooks.content.register(this.injectScript.bind(this)),this.themes=new f(this),this.annotations=new g(this),this.epubcfi=new a.a,this.q=new h.a(this),this.location=void 0,this.q.enqueue(this.book.opened),this.starting=new s.defer,this.started=this.starting.promise,this.q.enqueue(this.start)}setManager(t){this.manager=t}requireManager(t){return"string"==typeof t&&"default"===t?m.a:"string"==typeof t&&"continuous"===t?y.a:t}requireView(t){return"string"==typeof t&&"iframe"===t?v.a:t}start(){switch(this.settings.layout||"pre-paginated"!==this.book.package.metadata.layout&&"true"!==this.book.displayOptions.fixedLayout||(this.settings.layout="pre-paginated"),this.book.package.metadata.spread){case"none":this.settings.spread="none";break;case"both":this.settings.spread=!0}this.manager||(this.ViewManager=this.requireManager(this.settings.manager),this.View=this.requireView(this.settings.view),this.manager=new this.ViewManager({view:this.View,queue:this.q,request:this.book.load.bind(this.book),settings:this.settings})),this.direction(this.book.package.metadata.direction||this.settings.defaultDirection),this.settings.globalLayoutProperties=this.determineLayoutProperties(this.book.package.metadata),this.flow(this.settings.globalLayoutProperties.flow),this.layout(this.settings.globalLayoutProperties),this.manager.on(l.c.MANAGERS.ADDED,this.afterDisplayed.bind(this)),this.manager.on(l.c.MANAGERS.REMOVED,this.afterRemoved.bind(this)),this.manager.on(l.c.MANAGERS.RESIZED,this.onResized.bind(this)),this.manager.on(l.c.MANAGERS.ORIENTATION_CHANGE,this.onOrientationChange.bind(this)),this.manager.on(l.c.MANAGERS.SCROLLED,this.reportLocation.bind(this)),this.emit(l.c.RENDITION.STARTED),this.starting.resolve()}attachTo(t){return this.q.enqueue(function(){this.manager.render(t,{width:this.settings.width,height:this.settings.height}),this.emit(l.c.RENDITION.ATTACHED)}.bind(this))}display(t){return this.displaying&&this.displaying.resolve(),this.q.enqueue(this._display,t)}_display(t){if(this.book){this.epubcfi.isCfiString(t);var e,i=new s.defer,n=i.promise;return this.displaying=i,this.book.locations.length()&&Object(s.isFloat)(t)&&(t=this.book.locations.cfiFromPercentage(parseFloat(t))),(e=this.book.spine.get(t))?(this.manager.display(e,t).then(()=>{i.resolve(e),this.displaying=void 0,this.emit(l.c.RENDITION.DISPLAYED,e),this.reportLocation()},t=>{this.emit(l.c.RENDITION.DISPLAY_ERROR,t)}),n):(i.reject(new Error("No Section Found")),n)}}afterDisplayed(t){t.on(l.c.VIEWS.MARK_CLICKED,(e,i)=>this.triggerMarkEvent(e,i,t.contents)),this.hooks.render.trigger(t,this).then(()=>{t.contents?this.hooks.content.trigger(t.contents,this).then(()=>{this.emit(l.c.RENDITION.RENDERED,t.section,t)}):this.emit(l.c.RENDITION.RENDERED,t.section,t)})}afterRemoved(t){this.hooks.unloaded.trigger(t,this).then(()=>{this.emit(l.c.RENDITION.REMOVED,t.section,t)})}onResized(t,e){this.emit(l.c.RENDITION.RESIZED,{width:t.width,height:t.height},e),this.location&&this.location.start&&this.display(e||this.location.start.cfi)}onOrientationChange(t){this.emit(l.c.RENDITION.ORIENTATION_CHANGE,t)}moveTo(t){this.manager.moveTo(t)}resize(t,e,i){t&&(this.settings.width=t),e&&(this.settings.height=e),this.manager.resize(t,e,i)}clear(){this.manager.clear()}next(){return this.q.enqueue(this.manager.next.bind(this.manager)).then(this.reportLocation.bind(this))}prev(){return this.q.enqueue(this.manager.prev.bind(this.manager)).then(this.reportLocation.bind(this))}determineLayoutProperties(t){var e=this.settings.layout||t.layout||"reflowable",i=this.settings.spread||t.spread||"auto",n=this.settings.orientation||t.orientation||"auto",r=this.settings.flow||t.flow||"auto",s=t.viewport||"",o=this.settings.minSpreadWidth||t.minSpreadWidth||800,a=this.settings.direction||t.direction||"ltr";return(0===this.settings.width||this.settings.width>0)&&(0===this.settings.height||this.settings.height),{layout:e,spread:i,orientation:n,flow:r,viewport:s,minSpreadWidth:o,direction:a}}flow(t){var e=t;"scrolled"!==t&&"scrolled-doc"!==t&&"scrolled-continuous"!==t||(e="scrolled"),"auto"!==t&&"paginated"!==t||(e="paginated"),this.settings.flow=t,this._layout&&this._layout.flow(e),this.manager&&this._layout&&this.manager.applyLayout(this._layout),this.manager&&this.manager.updateFlow(e),this.manager&&this.manager.isRendered()&&this.location&&(this.manager.clear(),this.display(this.location.start.cfi))}layout(t){return t&&(this._layout=new u(t),this._layout.spread(t.spread,this.settings.minSpreadWidth),this._layout.on(l.c.LAYOUT.UPDATED,(t,e)=>{this.emit(l.c.RENDITION.LAYOUT,t,e)})),this.manager&&this._layout&&this.manager.applyLayout(this._layout),this._layout}spread(t,e){this.settings.spread=t,e&&(this.settings.minSpreadWidth=e),this._layout&&this._layout.spread(t,e),this.manager&&this.manager.isRendered()&&this.manager.updateLayout()}direction(t){this.settings.direction=t||"ltr",this.manager&&this.manager.direction(this.settings.direction),this.manager&&this.manager.isRendered()&&this.location&&(this.manager.clear(),this.display(this.location.start.cfi))}reportLocation(){return this.q.enqueue(function(){requestAnimationFrame(function(){var t=this.manager.currentLocation();if(t&&t.then&&"function"==typeof t.then)t.then(function(t){let e=this.located(t);e&&e.start&&e.end&&(this.location=e,this.emit(l.c.RENDITION.LOCATION_CHANGED,{index:this.location.start.index,href:this.location.start.href,start:this.location.start.cfi,end:this.location.end.cfi,percentage:this.location.start.percentage}),this.emit(l.c.RENDITION.RELOCATED,this.location))}.bind(this));else if(t){let e=this.located(t);if(!e||!e.start||!e.end)return;this.location=e,this.emit(l.c.RENDITION.LOCATION_CHANGED,{index:this.location.start.index,href:this.location.start.href,start:this.location.start.cfi,end:this.location.end.cfi,percentage:this.location.start.percentage}),this.emit(l.c.RENDITION.RELOCATED,this.location)}}.bind(this))}.bind(this))}currentLocation(){var t=this.manager.currentLocation();if(t&&t.then&&"function"==typeof t.then)t.then(function(t){return this.located(t)}.bind(this));else if(t){return this.located(t)}}located(t){if(!t.length)return{};let e=t[0],i=t[t.length-1],n={start:{index:e.index,href:e.href,cfi:e.mapping.start,displayed:{page:e.pages[0]||1,total:e.totalPages}},end:{index:i.index,href:i.href,cfi:i.mapping.end,displayed:{page:i.pages[i.pages.length-1]||1,total:i.totalPages}}},r=this.book.locations.locationFromCfi(e.mapping.start),s=this.book.locations.locationFromCfi(i.mapping.end);null!=r&&(n.start.location=r,n.start.percentage=this.book.locations.percentageFromLocation(r)),null!=s&&(n.end.location=s,n.end.percentage=this.book.locations.percentageFromLocation(s));let o=this.book.pageList.pageFromCfi(e.mapping.start),a=this.book.pageList.pageFromCfi(i.mapping.end);return-1!=o&&(n.start.page=o),-1!=a&&(n.end.page=a),i.index===this.book.spine.last().index&&n.end.displayed.page>=n.end.displayed.total&&(n.atEnd=!0),e.index===this.book.spine.first().index&&1===n.start.displayed.page&&(n.atStart=!0),n}destroy(){this.manager&&this.manager.destroy(),this.book=void 0}passEvents(t){l.a.forEach(e=>{t.on(e,e=>this.triggerViewEvent(e,t))}),t.on(l.c.CONTENTS.SELECTED,e=>this.triggerSelectedEvent(e,t))}triggerViewEvent(t,e){this.emit(t.type,t,e)}triggerSelectedEvent(t,e){this.emit(l.c.RENDITION.SELECTED,t,e)}triggerMarkEvent(t,e,i){this.emit(l.c.RENDITION.MARK_CLICKED,t,e,i)}getRange(t,e){var i=new a.a(t),n=this.manager.visible().filter((function(t){if(i.spinePos===t.index)return!0}));if(n.length)return n[0].contents.range(i,e)}adjustImages(t){if("pre-paginated"===this._layout.name)return new Promise((function(t){t()}));let e=t.window.getComputedStyle(t.content,null),i=.95*(t.content.offsetHeight-(parseFloat(e.paddingTop)+parseFloat(e.paddingBottom))),n=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.addStylesheetRules({img:{"max-width":(this._layout.columnWidth?this._layout.columnWidth-n+"px":"100%")+"!important","max-height":i+"px!important","object-fit":"contain","page-break-inside":"avoid","break-inside":"avoid","box-sizing":"border-box"},svg:{"max-width":(this._layout.columnWidth?this._layout.columnWidth-n+"px":"100%")+"!important","max-height":i+"px!important","page-break-inside":"avoid","break-inside":"avoid"}}),new Promise((function(t,e){setTimeout((function(){t()}),1)}))}getContents(){return this.manager?this.manager.getContents():[]}views(){return(this.manager?this.manager.views:void 0)||[]}handleLinks(t){t&&t.on(l.c.CONTENTS.LINK_CLICKED,t=>{let e=this.book.path.relative(t);this.display(e)})}injectStylesheet(t,e){let i=t.createElement("link");i.setAttribute("type","text/css"),i.setAttribute("rel","stylesheet"),i.setAttribute("href",this.settings.stylesheet),t.getElementsByTagName("head")[0].appendChild(i)}injectScript(t,e){let i=t.createElement("script");i.setAttribute("type","text/javascript"),i.setAttribute("src",this.settings.script),i.textContent=" ",t.getElementsByTagName("head")[0].appendChild(i)}injectIdentifier(t,e){let i=this.book.packaging.metadata.identifier,n=t.createElement("meta");n.setAttribute("name","dc.relation.ispartof"),i&&n.setAttribute("content",i),t.getElementsByTagName("head")[0].appendChild(n)}}r()(b.prototype);e.a=b},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e,i){var n=i(17);t.exports=function(t,e){if(!n(t))return t;var i,r;if(e&&"function"==typeof(i=t.toString)&&!n(r=i.call(t)))return r;if("function"==typeof(i=t.valueOf)&&!n(r=i.call(t)))return r;if(!e&&"function"==typeof(i=t.toString)&&!n(r=i.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e,i){var n=i(7),r=i(15);t.exports=function(t,e){try{r(n,t,e)}catch(i){n[t]=e}return e}},function(t,e,i){var n=i(66),r=i(67),s=n("keys");t.exports=function(t){return s[t]||(s[t]=r(t))}},function(t,e){t.exports={}},function(t,e,i){var n=i(92),r=i(7),s=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?s(n[t])||s(r[t]):n[t]&&n[t][e]||r[t]&&r[t][e]}},function(t,e,i){var n=i(35),r=Math.min;t.exports=function(t){return t>0?r(n(t),9007199254740991):0}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,i){"use strict";var n,r,s=i(97),o=i(98),a=RegExp.prototype.exec,h=String.prototype.replace,l=a,c=(n=/a/,r=/b*/g,a.call(n,"a"),a.call(r,"a"),0!==n.lastIndex||0!==r.lastIndex),u=o.UNSUPPORTED_Y||o.BROKEN_CARET,d=void 0!==/()??/.exec("")[1];(c||d||u)&&(l=function(t){var e,i,n,r,o=this,l=u&&o.sticky,f=s.call(o),p=o.source,g=0,v=t;return l&&(-1===(f=f.replace("y","")).indexOf("g")&&(f+="g"),v=String(t).slice(o.lastIndex),o.lastIndex>0&&(!o.multiline||o.multiline&&"\n"!==t[o.lastIndex-1])&&(p="(?: "+p+")",v=" "+v,g++),i=new RegExp("^(?:"+p+")",f)),d&&(i=new RegExp("^"+p+"$(?!\\s)",f)),c&&(e=o.lastIndex),n=a.call(l?i:o,v),l?n?(n.input=n.input.slice(g),n[0]=n[0].slice(g),n.index=o.lastIndex,o.lastIndex+=n[0].length):o.lastIndex=0:c&&n&&(o.lastIndex=o.global?n.index+n[0].length:e),d&&n&&n.length>1&&h.call(n[0],i,(function(){for(r=1;r<arguments.length-2;r++)void 0===arguments[r]&&(n[r]=void 0)})),n}),t.exports=l},function(t,e,i){var n=i(35),r=i(33),s=function(t){return function(e,i){var s,o,a=String(r(e)),h=n(i),l=a.length;return h<0||h>=l?t?"":void 0:(s=a.charCodeAt(h))<55296||s>56319||h+1===l||(o=a.charCodeAt(h+1))<56320||o>57343?t?a.charAt(h):s:t?a.slice(h,h+2):o-56320+(s-55296<<10)+65536}};t.exports={codeAt:s(!1),charAt:s(!0)}},function(t,e,i){var n,r=i(13),s=i(72),o=i(47),a=i(44),h=i(104),l=i(63),c=i(43),u=c("IE_PROTO"),d=function(){},f=function(t){return"<script>"+t+"<\/script>"},p=function(){try{n=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;p=n?function(t){t.write(f("")),t.close();var e=t.parentWindow.Object;return t=null,e}(n):((e=l("iframe")).style.display="none",h.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(f("document.F=Object")),t.close(),t.F);for(var i=o.length;i--;)delete p.prototype[o[i]];return p()};a[u]=!0,t.exports=Object.create||function(t,e){var i;return null!==t?(d.prototype=r(t),i=new d,d.prototype=null,i[u]=t):i=p(),void 0===e?i:s(i,e)}},function(t,e,i){"use strict";var n=i(115)();t.exports=function(t){return t!==n&&null!==t}},function(t,e,i){var n=i(81),r=i(27),s=i(8)("iterator");t.exports=function(t){if(null!=t)return t[s]||t["@@iterator"]||r[n(t)]}},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,i){"use strict";var n=i(3),r=i.n(n),s=i(0),o=i(2),a=i(28),h=i(1),l=i(29);class c{constructor(t,e){this.settings=Object(s.extend)({ignoreClass:"",axis:void 0,direction:void 0,width:0,height:0,layout:void 0,globalLayoutProperties:{},method:void 0,forceRight:!1},e||{}),this.id="epubjs-view-"+Object(s.uuid)(),this.section=t,this.index=t.index,this.element=this.container(this.settings.axis),this.added=!1,this.displayed=!1,this.rendered=!1,this.fixedWidth=0,this.fixedHeight=0,this.epubcfi=new o.a,this.layout=this.settings.layout,this.pane=void 0,this.highlights={},this.underlines={},this.marks={}}container(t){var e=document.createElement("div");return e.classList.add("epub-view"),e.style.height="0px",e.style.width="0px",e.style.overflow="hidden",e.style.position="relative",e.style.display="block",e.style.flex=t&&"horizontal"==t?"none":"initial",e}create(){return this.iframe||(this.element||(this.element=this.createContainer()),this.iframe=document.createElement("iframe"),this.iframe.id=this.id,this.iframe.scrolling="no",this.iframe.style.overflow="hidden",this.iframe.seamless="seamless",this.iframe.style.border="none",this.iframe.setAttribute("enable-annotation","true"),this.resizing=!0,this.element.style.visibility="hidden",this.iframe.style.visibility="hidden",this.iframe.style.width="0",this.iframe.style.height="0",this._width=0,this._height=0,this.element.setAttribute("ref",this.index),this.added=!0,this.elementBounds=Object(s.bounds)(this.element),"srcdoc"in this.iframe?this.supportsSrcdoc=!0:this.supportsSrcdoc=!1,this.settings.method||(this.settings.method=this.supportsSrcdoc?"srcdoc":"write")),this.iframe}render(t,e){return this.create(),this.size(),this.sectionRender||(this.sectionRender=this.section.render(t)),this.sectionRender.then(function(t){return this.load(t)}.bind(this)).then(function(){let t,e=this.contents.writingMode();return t="scrolled"===this.settings.flow?0===e.indexOf("vertical")?"horizontal":"vertical":0===e.indexOf("vertical")?"vertical":"horizontal",0===e.indexOf("vertical")&&"paginated"===this.settings.flow&&(this.layout.delta=this.layout.height),this.setAxis(t),this.emit(h.c.VIEWS.AXIS,t),this.setWritingMode(e),this.emit(h.c.VIEWS.WRITING_MODE,e),this.layout.format(this.contents,this.section,this.axis),this.addListeners(),new Promise((t,e)=>{this.expand(),this.settings.forceRight&&(this.element.style.marginLeft=this.width()+"px"),t()})}.bind(this),function(t){return this.emit(h.c.VIEWS.LOAD_ERROR,t),new Promise((e,i)=>{i(t)})}.bind(this)).then(function(){this.emit(h.c.VIEWS.RENDERED,this.section)}.bind(this))}reset(){this.iframe&&(this.iframe.style.width="0",this.iframe.style.height="0",this._width=0,this._height=0,this._textWidth=void 0,this._contentWidth=void 0,this._textHeight=void 0,this._contentHeight=void 0),this._needsReframe=!0}size(t,e){var i=t||this.settings.width,n=e||this.settings.height;"pre-paginated"===this.layout.name?this.lock("both",i,n):"horizontal"===this.settings.axis?this.lock("height",i,n):this.lock("width",i,n),this.settings.width=i,this.settings.height=n}lock(t,e,i){var n,r=Object(s.borders)(this.element);n=this.iframe?Object(s.borders)(this.iframe):{width:0,height:0},"width"==t&&Object(s.isNumber)(e)&&(this.lockedWidth=e-r.width-n.width),"height"==t&&Object(s.isNumber)(i)&&(this.lockedHeight=i-r.height-n.height),"both"===t&&Object(s.isNumber)(e)&&Object(s.isNumber)(i)&&(this.lockedWidth=e-r.width-n.width,this.lockedHeight=i-r.height-n.height),this.displayed&&this.iframe&&this.expand()}expand(t){var e,i=this.lockedWidth,n=this.lockedHeight;this.iframe&&!this._expanding&&(this._expanding=!0,"pre-paginated"===this.layout.name?(i=this.layout.columnWidth,n=this.layout.height):"horizontal"===this.settings.axis?((i=this.contents.textWidth())%this.layout.pageWidth>0&&(i=Math.ceil(i/this.layout.pageWidth)*this.layout.pageWidth),this.settings.forceEvenPages&&(e=i/this.layout.pageWidth,this.layout.divisor>1&&"reflowable"===this.layout.name&&e%2>0&&(i+=this.layout.pageWidth))):"vertical"===this.settings.axis&&(n=this.contents.textHeight(),"paginated"===this.settings.flow&&n%this.layout.height>0&&(n=Math.ceil(n/this.layout.height)*this.layout.height)),(this._needsReframe||i!=this._width||n!=this._height)&&this.reframe(i,n),this._expanding=!1)}reframe(t,e){var i;Object(s.isNumber)(t)&&(this.element.style.width=t+"px",this.iframe.style.width=t+"px",this._width=t),Object(s.isNumber)(e)&&(this.element.style.height=e+"px",this.iframe.style.height=e+"px",this._height=e),i={width:t,height:e,widthDelta:this.prevBounds?t-this.prevBounds.width:t,heightDelta:this.prevBounds?e-this.prevBounds.height:e},this.pane&&this.pane.render(),requestAnimationFrame(()=>{let t;for(let e in this.marks)this.marks.hasOwnProperty(e)&&(t=this.marks[e],this.placeMark(t.element,t.range))}),this.onResize(this,i),this.emit(h.c.VIEWS.RESIZED,i),this.prevBounds=i,this.elementBounds=Object(s.bounds)(this.element)}load(t){var e=new s.defer,i=e.promise;if(!this.iframe)return e.reject(new Error("No Iframe Available")),i;if(this.iframe.onload=function(t){this.onLoad(t,e)}.bind(this),"blobUrl"===this.settings.method)this.blobUrl=Object(s.createBlobUrl)(t,"application/xhtml+xml"),this.iframe.src=this.blobUrl,this.element.appendChild(this.iframe);else if("srcdoc"===this.settings.method)this.iframe.srcdoc=t,this.element.appendChild(this.iframe);else{if(this.element.appendChild(this.iframe),this.document=this.iframe.contentDocument,!this.document)return e.reject(new Error("No Document Available")),i;if(this.iframe.contentDocument.open(),window.MSApp&&MSApp.execUnsafeLocalFunction){var n=this;MSApp.execUnsafeLocalFunction((function(){n.iframe.contentDocument.write(t)}))}else this.iframe.contentDocument.write(t);this.iframe.contentDocument.close()}return i}onLoad(t,e){this.window=this.iframe.contentWindow,this.document=this.iframe.contentDocument,this.contents=new a.a(this.document,this.document.body,this.section.cfiBase,this.section.index),this.rendering=!1;var i=this.document.querySelector("link[rel='canonical']");i?i.setAttribute("href",this.section.canonical):((i=this.document.createElement("link")).setAttribute("rel","canonical"),i.setAttribute("href",this.section.canonical),this.document.querySelector("head").appendChild(i)),this.contents.on(h.c.CONTENTS.EXPAND,()=>{this.displayed&&this.iframe&&(this.expand(),this.contents&&this.layout.format(this.contents))}),this.contents.on(h.c.CONTENTS.RESIZE,t=>{this.displayed&&this.iframe&&(this.expand(),this.contents&&this.layout.format(this.contents))}),e.resolve(this.contents)}setLayout(t){this.layout=t,this.contents&&(this.layout.format(this.contents),this.expand())}setAxis(t){this.settings.axis=t,this.element.style.flex="horizontal"==t?"none":"initial",this.size()}setWritingMode(t){this.writingMode=t}addListeners(){}removeListeners(t){}display(t){var e=new s.defer;return this.displayed?e.resolve(this):this.render(t).then(function(){this.emit(h.c.VIEWS.DISPLAYED,this),this.onDisplayed(this),this.displayed=!0,e.resolve(this)}.bind(this),(function(t){e.reject(t,this)})),e.promise}show(){this.element.style.visibility="visible",this.iframe&&(this.iframe.style.visibility="visible",this.iframe.style.transform="translateZ(0)",this.iframe.offsetWidth,this.iframe.style.transform=null),this.emit(h.c.VIEWS.SHOWN,this)}hide(){this.element.style.visibility="hidden",this.iframe.style.visibility="hidden",this.stopExpanding=!0,this.emit(h.c.VIEWS.HIDDEN,this)}offset(){return{top:this.element.offsetTop,left:this.element.offsetLeft}}width(){return this._width}height(){return this._height}position(){return this.element.getBoundingClientRect()}locationOf(t){this.iframe.getBoundingClientRect();var e=this.contents.locationOf(t,this.settings.ignoreClass);return{left:e.left,top:e.top}}onDisplayed(t){}onResize(t,e){}bounds(t){return!t&&this.elementBounds||(this.elementBounds=Object(s.bounds)(this.element)),this.elementBounds}highlight(t,e={},i,n="epubjs-hl",r={}){if(!this.contents)return;const s=Object.assign({fill:"yellow","fill-opacity":"0.3","mix-blend-mode":"multiply"},r);let o=this.contents.range(t),a=()=>{this.emit(h.c.VIEWS.MARK_CLICKED,t,e)};e.epubcfi=t,this.pane||(this.pane=new l.Pane(this.iframe,this.element));let c=new l.Highlight(o,n,e,s),u=this.pane.addMark(c);return this.highlights[t]={mark:u,element:u.element,listeners:[a,i]},u.element.setAttribute("ref",n),u.element.addEventListener("click",a),u.element.addEventListener("touchstart",a),i&&(u.element.addEventListener("click",i),u.element.addEventListener("touchstart",i)),u}underline(t,e={},i,n="epubjs-ul",r={}){if(!this.contents)return;const s=Object.assign({stroke:"black","stroke-opacity":"0.3","mix-blend-mode":"multiply"},r);let o=this.contents.range(t),a=()=>{this.emit(h.c.VIEWS.MARK_CLICKED,t,e)};e.epubcfi=t,this.pane||(this.pane=new l.Pane(this.iframe,this.element));let c=new l.Underline(o,n,e,s),u=this.pane.addMark(c);return this.underlines[t]={mark:u,element:u.element,listeners:[a,i]},u.element.setAttribute("ref",n),u.element.addEventListener("click",a),u.element.addEventListener("touchstart",a),i&&(u.element.addEventListener("click",i),u.element.addEventListener("touchstart",i)),u}mark(t,e={},i){if(!this.contents)return;if(t in this.marks){return this.marks[t]}let n=this.contents.range(t);if(!n)return;let r=n.commonAncestorContainer,s=1===r.nodeType?r:r.parentNode,o=i=>{this.emit(h.c.VIEWS.MARK_CLICKED,t,e)};n.collapsed&&1===r.nodeType?(n=new Range,n.selectNodeContents(r)):n.collapsed&&(n=new Range,n.selectNodeContents(s));let a=this.document.createElement("a");return a.setAttribute("ref","epubjs-mk"),a.style.position="absolute",a.dataset.epubcfi=t,e&&Object.keys(e).forEach(t=>{a.dataset[t]=e[t]}),i&&(a.addEventListener("click",i),a.addEventListener("touchstart",i)),a.addEventListener("click",o),a.addEventListener("touchstart",o),this.placeMark(a,n),this.element.appendChild(a),this.marks[t]={element:a,range:n,listeners:[o,i]},s}placeMark(t,e){let i,n,r;if("pre-paginated"===this.layout.name||"horizontal"!==this.settings.axis){let t=e.getBoundingClientRect();i=t.top,n=t.right}else{let t,o=e.getClientRects();for(var s=0;s!=o.length;s++)t=o[s],(!r||t.left<r)&&(r=t.left,n=Math.ceil(r/this.layout.props.pageWidth)*this.layout.props.pageWidth-this.layout.gap/2,i=t.top)}t.style.top=i+"px",t.style.left=n+"px"}unhighlight(t){let e;t in this.highlights&&(e=this.highlights[t],this.pane.removeMark(e.mark),e.listeners.forEach(t=>{t&&(e.element.removeEventListener("click",t),e.element.removeEventListener("touchstart",t))}),delete this.highlights[t])}ununderline(t){let e;t in this.underlines&&(e=this.underlines[t],this.pane.removeMark(e.mark),e.listeners.forEach(t=>{t&&(e.element.removeEventListener("click",t),e.element.removeEventListener("touchstart",t))}),delete this.underlines[t])}unmark(t){let e;t in this.marks&&(e=this.marks[t],this.element.removeChild(e.element),e.listeners.forEach(t=>{t&&(e.element.removeEventListener("click",t),e.element.removeEventListener("touchstart",t))}),delete this.marks[t])}destroy(){for(let t in this.highlights)this.unhighlight(t);for(let t in this.underlines)this.ununderline(t);for(let t in this.marks)this.unmark(t);this.blobUrl&&Object(s.revokeBlobUrl)(this.blobUrl),this.displayed&&(this.displayed=!1,this.removeListeners(),this.contents.destroy(),this.stopExpanding=!0,this.element.removeChild(this.iframe),this.iframe=void 0,this.contents=void 0,this._textWidth=null,this._textHeight=null,this._width=null,this._height=null)}}r()(c.prototype),e.a=c},function(t,e,i){var n=i(53),r=i(137),s=i(139),o=Math.max,a=Math.min;t.exports=function(t,e,i){var h,l,c,u,d,f,p=0,g=!1,v=!1,m=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var i=h,n=l;return h=l=void 0,p=e,u=t.apply(n,i)}function b(t){return p=t,d=setTimeout(x,e),g?y(t):u}function w(t){var i=t-f;return void 0===f||i>=e||i<0||v&&t-p>=c}function x(){var t=r();if(w(t))return E(t);d=setTimeout(x,function(t){var i=e-(t-f);return v?a(i,c-(t-p)):i}(t))}function E(t){return d=void 0,m&&h?y(t):(h=l=void 0,u)}function S(){var t=r(),i=w(t);if(h=arguments,l=this,f=t,i){if(void 0===d)return b(f);if(v)return clearTimeout(d),d=setTimeout(x,e),y(f)}return void 0===d&&(d=setTimeout(x,e)),u}return e=s(e)||0,n(i)&&(g=!!i.leading,c=(v="maxWait"in i)?o(s(i.maxWait)||0,e):c,m="trailing"in i?!!i.trailing:m),S.cancel=function(){void 0!==d&&clearTimeout(d),p=0,h=f=l=d=void 0},S.flush=function(){return void 0===d?u:E(r())},S}},function(t,e,i){"use strict";i(14);var n=i(0),r=i(22),s=i(1),o=i(3),a=i.n(o);const h=Math.PI/2,l={easeOutSine:function(t){return Math.sin(t*h)},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*Math.pow(t,5):.5*(Math.pow(t-2,5)+2)},easeInCubic:function(t){return Math.pow(t,3)}};class c{constructor(t,e){this.settings=Object(n.extend)({duration:80,minVelocity:.2,minDistance:10,easing:l.easeInCubic},e||{}),this.supportsTouch=this.supportsTouch(),this.supportsTouch&&this.setup(t)}setup(t){this.manager=t,this.layout=this.manager.layout,this.fullsize=this.manager.settings.fullsize,this.fullsize?(this.element=this.manager.stage.element,this.scroller=window,this.disableScroll()):(this.element=this.manager.stage.container,this.scroller=this.element,this.element.style.WebkitOverflowScrolling="touch"),this.manager.settings.offset=this.layout.width,this.manager.settings.afterScrolledTimeout=2*this.settings.duration,this.isVertical="vertical"===this.manager.settings.axis,this.manager.isPaginated&&!this.isVertical&&(this.touchCanceler=!1,this.resizeCanceler=!1,this.snapping=!1,this.scrollLeft,this.scrollTop,this.startTouchX=void 0,this.startTouchY=void 0,this.startTime=void 0,this.endTouchX=void 0,this.endTouchY=void 0,this.endTime=void 0,this.addListeners())}supportsTouch(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}disableScroll(){this.element.style.overflow="hidden"}enableScroll(){this.element.style.overflow=""}addListeners(){this._onResize=this.onResize.bind(this),window.addEventListener("resize",this._onResize),this._onScroll=this.onScroll.bind(this),this.scroller.addEventListener("scroll",this._onScroll),this._onTouchStart=this.onTouchStart.bind(this),this.scroller.addEventListener("touchstart",this._onTouchStart,{passive:!0}),this.on("touchstart",this._onTouchStart),this._onTouchMove=this.onTouchMove.bind(this),this.scroller.addEventListener("touchmove",this._onTouchMove,{passive:!0}),this.on("touchmove",this._onTouchMove),this._onTouchEnd=this.onTouchEnd.bind(this),this.scroller.addEventListener("touchend",this._onTouchEnd,{passive:!0}),this.on("touchend",this._onTouchEnd),this._afterDisplayed=this.afterDisplayed.bind(this),this.manager.on(s.c.MANAGERS.ADDED,this._afterDisplayed)}removeListeners(){window.removeEventListener("resize",this._onResize),this._onResize=void 0,this.scroller.removeEventListener("scroll",this._onScroll),this._onScroll=void 0,this.scroller.removeEventListener("touchstart",this._onTouchStart,{passive:!0}),this.off("touchstart",this._onTouchStart),this._onTouchStart=void 0,this.scroller.removeEventListener("touchmove",this._onTouchMove,{passive:!0}),this.off("touchmove",this._onTouchMove),this._onTouchMove=void 0,this.scroller.removeEventListener("touchend",this._onTouchEnd,{passive:!0}),this.off("touchend",this._onTouchEnd),this._onTouchEnd=void 0,this.manager.off(s.c.MANAGERS.ADDED,this._afterDisplayed),this._afterDisplayed=void 0}afterDisplayed(t){let e=t.contents;["touchstart","touchmove","touchend"].forEach(t=>{e.on(t,t=>this.triggerViewEvent(t,e))})}triggerViewEvent(t,e){this.emit(t.type,t,e)}onScroll(t){this.scrollLeft=this.fullsize?window.scrollX:this.scroller.scrollLeft,this.scrollTop=this.fullsize?window.scrollY:this.scroller.scrollTop}onResize(t){this.resizeCanceler=!0}onTouchStart(t){let{screenX:e,screenY:i}=t.touches[0];this.fullsize&&this.enableScroll(),this.touchCanceler=!0,this.startTouchX||(this.startTouchX=e,this.startTouchY=i,this.startTime=this.now()),this.endTouchX=e,this.endTouchY=i,this.endTime=this.now()}onTouchMove(t){let{screenX:e,screenY:i}=t.touches[0],n=Math.abs(i-this.endTouchY);this.touchCanceler=!0,!this.fullsize&&n<10&&(this.element.scrollLeft-=e-this.endTouchX),this.endTouchX=e,this.endTouchY=i,this.endTime=this.now()}onTouchEnd(t){this.fullsize&&this.disableScroll(),this.touchCanceler=!1;let e=this.wasSwiped();0!==e?this.snap(e):this.snap(),this.startTouchX=void 0,this.startTouchY=void 0,this.startTime=void 0,this.endTouchX=void 0,this.endTouchY=void 0,this.endTime=void 0}wasSwiped(){let t=this.layout.pageWidth*this.layout.divisor,e=this.endTouchX-this.startTouchX,i=Math.abs(e),n=e/(this.endTime-this.startTime),r=this.settings.minVelocity;return i<=this.settings.minDistance||i>=t?0:n>r?-1:n<-r?1:void 0}needsSnap(){return this.scrollLeft%(this.layout.pageWidth*this.layout.divisor)!=0}snap(t=0){let e=this.scrollLeft,i=this.layout.pageWidth*this.layout.divisor,n=Math.round(e/i)*i;return t&&(n+=t*i),this.smoothScrollTo(n)}smoothScrollTo(t){const e=new n.defer,i=this.scrollLeft,r=this.now(),s=this.settings.duration,o=this.settings.easing;return this.snapping=!0,function n(){const a=this.now(),h=Math.min(1,(a-r)/s);if(o(h),this.touchCanceler||this.resizeCanceler)return this.resizeCanceler=!1,this.snapping=!1,void e.resolve();h<1?(window.requestAnimationFrame(n.bind(this)),this.scrollTo(i+(t-i)*h,0)):(this.scrollTo(t,0),this.snapping=!1,e.resolve())}.call(this),e.promise}scrollTo(t=0,e=0){this.fullsize?window.scroll(t,e):(this.scroller.scrollLeft=t,this.scroller.scrollTop=e)}now(){return"now"in window.performance?performance.now():(new Date).getTime()}destroy(){this.scroller&&(this.fullsize&&this.enableScroll(),this.removeListeners(),this.scroller=void 0)}}a()(c.prototype);var u=c,d=i(55),f=i.n(d);class p extends r.a{constructor(t){super(t),this.name="continuous",this.settings=Object(n.extend)(this.settings||{},{infinite:!0,overflow:void 0,axis:void 0,writingMode:void 0,flow:"scrolled",offset:500,offsetDelta:250,width:void 0,height:void 0,snap:!1,afterScrolledTimeout:10}),Object(n.extend)(this.settings,t.settings||{}),"undefined"!=t.settings.gap&&0===t.settings.gap&&(this.settings.gap=t.settings.gap),this.viewSettings={ignoreClass:this.settings.ignoreClass,axis:this.settings.axis,flow:this.settings.flow,layout:this.layout,width:0,height:0,forceEvenPages:!1},this.scrollTop=0,this.scrollLeft=0}display(t,e){return r.a.prototype.display.call(this,t,e).then(function(){return this.fill()}.bind(this))}fill(t){var e=t||new n.defer;return this.q.enqueue(()=>this.check()).then(t=>{t?this.fill(e):e.resolve()}),e.promise}moveTo(t){var e=0,i=0;this.isPaginated?(e=Math.floor(t.left/this.layout.delta)*this.layout.delta,this.settings.offsetDelta):(i=t.top,t.top,this.settings.offsetDelta),(e>0||i>0)&&this.scrollBy(e,i,!0)}afterResized(t){this.emit(s.c.MANAGERS.RESIZE,t.section)}removeShownListeners(t){t.onDisplayed=function(){}}add(t){var e=this.createView(t);return this.views.append(e),e.on(s.c.VIEWS.RESIZED,t=>{e.expanded=!0}),e.on(s.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),e.on(s.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),e.onDisplayed=this.afterDisplayed.bind(this),e.onResize=this.afterResized.bind(this),e.display(this.request)}append(t){var e=this.createView(t);return e.on(s.c.VIEWS.RESIZED,t=>{e.expanded=!0}),e.on(s.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),e.on(s.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),this.views.append(e),e.onDisplayed=this.afterDisplayed.bind(this),e}prepend(t){var e=this.createView(t);return e.on(s.c.VIEWS.RESIZED,t=>{this.counter(t),e.expanded=!0}),e.on(s.c.VIEWS.AXIS,t=>{this.updateAxis(t)}),e.on(s.c.VIEWS.WRITING_MODE,t=>{this.updateWritingMode(t)}),this.views.prepend(e),e.onDisplayed=this.afterDisplayed.bind(this),e}counter(t){"vertical"===this.settings.axis?this.scrollBy(0,t.heightDelta,!0):this.scrollBy(t.widthDelta,0,!0)}update(t){for(var e,i=this.bounds(),r=this.views.all(),s=r.length,o=[],a=void 0!==t?t:this.settings.offset||0,h=new n.defer,l=[],c=0;c<s;c++)if(e=r[c],!0===this.isVisible(e,a,a,i)){if(e.displayed)e.show();else{let t=e.display(this.request).then((function(t){t.show()}),t=>{e.hide()});l.push(t)}o.push(e)}else this.q.enqueue(e.destroy.bind(e)),clearTimeout(this.trimTimeout),this.trimTimeout=setTimeout(function(){this.q.enqueue(this.trim.bind(this))}.bind(this),250);return l.length?Promise.all(l).catch(t=>{h.reject(t)}):(h.resolve(),h.promise)}check(t,e){var i=new n.defer,r=[],s="horizontal"===this.settings.axis,o=this.settings.offset||0;t&&s&&(o=t),e&&!s&&(o=e);var a=this._bounds;let h=s?this.scrollLeft:this.scrollTop,l=s?Math.floor(a.width):a.height,c=s?this.container.scrollWidth:this.container.scrollHeight,u=this.writingMode&&0===this.writingMode.indexOf("vertical")?"vertical":"horizontal",d=this.settings.rtlScrollType,f="rtl"===this.settings.direction;this.settings.fullsize?(s&&f&&"negative"===d||!s&&f&&"default"===d)&&(h*=-1):(f&&"default"===d&&"horizontal"===u&&(h=c-l-h),f&&"negative"===d&&"horizontal"===u&&(h*=-1));let p=()=>{let t=this.views.first(),e=t&&t.section.prev();e&&r.push(this.prepend(e))},g=h-o;h+l+o>=c&&(()=>{let t=this.views.last(),e=t&&t.section.next();e&&r.push(this.append(e))})(),g<0&&p();let v=r.map(t=>t.display(this.request));return r.length?Promise.all(v).then(()=>this.check()).then(()=>this.update(o),t=>t):(this.q.enqueue(function(){this.update()}.bind(this)),i.resolve(!1),i.promise)}trim(){for(var t=new n.defer,e=this.views.displayed(),i=e[0],r=e[e.length-1],s=this.views.indexOf(i),o=this.views.indexOf(r),a=this.views.slice(0,s),h=this.views.slice(o+1),l=0;l<a.length-1;l++)this.erase(a[l],a);for(var c=1;c<h.length;c++)this.erase(h[c]);return t.resolve(),t.promise}erase(t,e){var i,n;this.settings.fullsize?(i=window.scrollY,n=window.scrollX):(i=this.container.scrollTop,n=this.container.scrollLeft);var r=t.bounds();this.views.remove(t),e&&("vertical"===this.settings.axis?this.scrollTo(0,i-r.height,!0):"rtl"===this.settings.direction?this.settings.fullsize?this.scrollTo(n+Math.floor(r.width),0,!0):this.scrollTo(n,0,!0):this.scrollTo(n-Math.floor(r.width),0,!0))}addEventListeners(t){window.addEventListener("unload",function(t){this.ignore=!0,this.destroy()}.bind(this)),this.addScrollListeners(),this.isPaginated&&this.settings.snap&&(this.snapper=new u(this,this.settings.snap&&"object"==typeof this.settings.snap&&this.settings.snap))}addScrollListeners(){var t;this.tick=n.requestAnimationFrame;let e="rtl"===this.settings.direction&&"default"===this.settings.rtlScrollType?-1:1;this.scrollDeltaVert=0,this.scrollDeltaHorz=0,this.settings.fullsize?(t=window,this.scrollTop=window.scrollY*e,this.scrollLeft=window.scrollX*e):(t=this.container,this.scrollTop=this.container.scrollTop,this.scrollLeft=this.container.scrollLeft),this._onScroll=this.onScroll.bind(this),t.addEventListener("scroll",this._onScroll),this._scrolled=f()(this.scrolled.bind(this),30),this.didScroll=!1}removeEventListeners(){(this.settings.fullsize?window:this.container).removeEventListener("scroll",this._onScroll),this._onScroll=void 0}onScroll(){let t,e,i="rtl"===this.settings.direction&&"default"===this.settings.rtlScrollType?-1:1;this.settings.fullsize?(t=window.scrollY*i,e=window.scrollX*i):(t=this.container.scrollTop,e=this.container.scrollLeft),this.scrollTop=t,this.scrollLeft=e,this.ignore?this.ignore=!1:this._scrolled(),this.scrollDeltaVert+=Math.abs(t-this.prevScrollTop),this.scrollDeltaHorz+=Math.abs(e-this.prevScrollLeft),this.prevScrollTop=t,this.prevScrollLeft=e,clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(function(){this.scrollDeltaVert=0,this.scrollDeltaHorz=0}.bind(this),150),clearTimeout(this.afterScrolled),this.didScroll=!1}scrolled(){this.q.enqueue(function(){return this.check()}.bind(this)),this.emit(s.c.MANAGERS.SCROLL,{top:this.scrollTop,left:this.scrollLeft}),clearTimeout(this.afterScrolled),this.afterScrolled=setTimeout(function(){this.snapper&&this.snapper.supportsTouch&&this.snapper.needsSnap()||this.emit(s.c.MANAGERS.SCROLLED,{top:this.scrollTop,left:this.scrollLeft})}.bind(this),this.settings.afterScrolledTimeout)}next(){let t="pre-paginated"===this.layout.props.name&&this.layout.props.spread?2*this.layout.props.delta:this.layout.props.delta;this.views.length&&(this.isPaginated&&"horizontal"===this.settings.axis?this.scrollBy(t,0,!0):this.scrollBy(0,this.layout.height,!0),this.q.enqueue(function(){return this.check()}.bind(this)))}prev(){let t="pre-paginated"===this.layout.props.name&&this.layout.props.spread?2*this.layout.props.delta:this.layout.props.delta;this.views.length&&(this.isPaginated&&"horizontal"===this.settings.axis?this.scrollBy(-t,0,!0):this.scrollBy(0,-this.layout.height,!0),this.q.enqueue(function(){return this.check()}.bind(this)))}updateFlow(t){this.rendered&&this.snapper&&(this.snapper.destroy(),this.snapper=void 0),super.updateFlow(t,"scroll"),this.rendered&&this.isPaginated&&this.settings.snap&&(this.snapper=new u(this,this.settings.snap&&"object"==typeof this.settings.snap&&this.settings.snap))}destroy(){super.destroy(),this.snapper&&this.snapper.destroy()}}e.a=p},function(t,e,i){(function(e){t.exports=function t(e,i,n){function r(o,a){if(!i[o]){if(!e[o]){if(s)return s(o,!0);var h=new Error("Cannot find module '"+o+"'");throw h.code="MODULE_NOT_FOUND",h}var l=i[o]={exports:{}};e[o][0].call(l.exports,(function(t){var i=e[o][1][t];return r(i||t)}),l,l.exports,t,e,i,n)}return i[o].exports}for(var s=!1,o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,i,n){(function(t){"use strict";var e,n,r=t.MutationObserver||t.WebKitMutationObserver;if(r){var s=0,o=new r(c),a=t.document.createTextNode("");o.observe(a,{characterData:!0}),e=function(){a.data=s=++s%2}}else if(t.setImmediate||void 0===t.MessageChannel)e="document"in t&&"onreadystatechange"in t.document.createElement("script")?function(){var e=t.document.createElement("script");e.onreadystatechange=function(){c(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(c,0)};else{var h=new t.MessageChannel;h.port1.onmessage=c,e=function(){h.port2.postMessage(0)}}var l=[];function c(){var t,e;n=!0;for(var i=l.length;i;){for(e=l,l=[],t=-1;++t<i;)e[t]();i=l.length}n=!1}i.exports=function(t){1!==l.push(t)||n||e()}}).call(this,void 0!==e?e:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(t,e,i){"use strict";var n=t(1);function r(){}var s={},o=["REJECTED"],a=["FULFILLED"],h=["PENDING"];function l(t){if("function"!=typeof t)throw new TypeError("resolver must be a function");this.state=h,this.queue=[],this.outcome=void 0,t!==r&&f(this,t)}function c(t,e,i){this.promise=t,"function"==typeof e&&(this.onFulfilled=e,this.callFulfilled=this.otherCallFulfilled),"function"==typeof i&&(this.onRejected=i,this.callRejected=this.otherCallRejected)}function u(t,e,i){n((function(){var n;try{n=e(i)}catch(e){return s.reject(t,e)}n===t?s.reject(t,new TypeError("Cannot resolve promise with itself")):s.resolve(t,n)}))}function d(t){var e=t&&t.then;if(t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof e)return function(){e.apply(t,arguments)}}function f(t,e){var i=!1;function n(e){i||(i=!0,s.reject(t,e))}function r(e){i||(i=!0,s.resolve(t,e))}var o=p((function(){e(r,n)}));"error"===o.status&&n(o.value)}function p(t,e){var i={};try{i.value=t(e),i.status="success"}catch(t){i.status="error",i.value=t}return i}e.exports=l,l.prototype.catch=function(t){return this.then(null,t)},l.prototype.then=function(t,e){if("function"!=typeof t&&this.state===a||"function"!=typeof e&&this.state===o)return this;var i=new this.constructor(r);return this.state!==h?u(i,this.state===a?t:e,this.outcome):this.queue.push(new c(i,t,e)),i},c.prototype.callFulfilled=function(t){s.resolve(this.promise,t)},c.prototype.otherCallFulfilled=function(t){u(this.promise,this.onFulfilled,t)},c.prototype.callRejected=function(t){s.reject(this.promise,t)},c.prototype.otherCallRejected=function(t){u(this.promise,this.onRejected,t)},s.resolve=function(t,e){var i=p(d,e);if("error"===i.status)return s.reject(t,i.value);var n=i.value;if(n)f(t,n);else{t.state=a,t.outcome=e;for(var r=-1,o=t.queue.length;++r<o;)t.queue[r].callFulfilled(e)}return t},s.reject=function(t,e){t.state=o,t.outcome=e;for(var i=-1,n=t.queue.length;++i<n;)t.queue[i].callRejected(e);return t},l.resolve=function(t){return t instanceof this?t:s.resolve(new this(r),t)},l.reject=function(t){var e=new this(r);return s.reject(e,t)},l.all=function(t){var e=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var i=t.length,n=!1;if(!i)return this.resolve([]);for(var o=new Array(i),a=0,h=-1,l=new this(r);++h<i;)c(t[h],h);return l;function c(t,r){e.resolve(t).then((function(t){o[r]=t,++a!==i||n||(n=!0,s.resolve(l,o))}),(function(t){n||(n=!0,s.reject(l,t))}))}},l.race=function(t){var e=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var i=t.length,n=!1;if(!i)return this.resolve([]);for(var o,a=-1,h=new this(r);++a<i;)o=t[a],e.resolve(o).then((function(t){n||(n=!0,s.resolve(h,t))}),(function(t){n||(n=!0,s.reject(h,t))}));return h}},{1:1}],3:[function(t,i,n){(function(e){"use strict";"function"!=typeof e.Promise&&(e.Promise=t(2))}).call(this,void 0!==e?e:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(t,e,i){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(t){return}}();function s(t,e){t=t||[],e=e||{};try{return new Blob(t,e)}catch(r){if("TypeError"!==r.name)throw r;for(var i=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),n=0;n<t.length;n+=1)i.append(t[n]);return i.getBlob(e.type)}}"undefined"==typeof Promise&&t(3);var o=Promise;function a(t,e){e&&t.then((function(t){e(null,t)}),(function(t){e(t)}))}function h(t,e,i){"function"==typeof e&&t.then(e),"function"==typeof i&&t.catch(i)}function l(t){return"string"!=typeof t&&(console.warn(t+" used as a key, but it is not a string."),t=String(t)),t}function c(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var u=void 0,d={},f=Object.prototype.toString;function p(t){return"boolean"==typeof u?o.resolve(u):function(t){return new o((function(e){var i=t.transaction("local-forage-detect-blob-support","readwrite"),n=s([""]);i.objectStore("local-forage-detect-blob-support").put(n,"key"),i.onabort=function(t){t.preventDefault(),t.stopPropagation(),e(!1)},i.oncomplete=function(){var t=navigator.userAgent.match(/Chrome\/(\d+)/),i=navigator.userAgent.match(/Edge\//);e(i||!t||parseInt(t[1],10)>=43)}})).catch((function(){return!1}))}(t).then((function(t){return u=t}))}function g(t){var e=d[t.name],i={};i.promise=new o((function(t,e){i.resolve=t,i.reject=e})),e.deferredOperations.push(i),e.dbReady?e.dbReady=e.dbReady.then((function(){return i.promise})):e.dbReady=i.promise}function v(t){var e=d[t.name].deferredOperations.pop();if(e)return e.resolve(),e.promise}function m(t,e){var i=d[t.name].deferredOperations.pop();if(i)return i.reject(e),i.promise}function y(t,e){return new o((function(i,n){if(d[t.name]=d[t.name]||{forages:[],db:null,dbReady:null,deferredOperations:[]},t.db){if(!e)return i(t.db);g(t),t.db.close()}var s=[t.name];e&&s.push(t.version);var o=r.open.apply(r,s);e&&(o.onupgradeneeded=function(e){var i=o.result;try{i.createObjectStore(t.storeName),e.oldVersion<=1&&i.createObjectStore("local-forage-detect-blob-support")}catch(i){if("ConstraintError"!==i.name)throw i;console.warn('The database "'+t.name+'" has been upgraded from version '+e.oldVersion+" to version "+e.newVersion+', but the storage "'+t.storeName+'" already exists.')}}),o.onerror=function(t){t.preventDefault(),n(o.error)},o.onsuccess=function(){i(o.result),v(t)}}))}function b(t){return y(t,!1)}function w(t){return y(t,!0)}function x(t,e){if(!t.db)return!0;var i=!t.db.objectStoreNames.contains(t.storeName),n=t.version<t.db.version,r=t.version>t.db.version;if(n&&(t.version!==e&&console.warn('The database "'+t.name+"\" can't be downgraded from version "+t.db.version+" to version "+t.version+"."),t.version=t.db.version),r||i){if(i){var s=t.db.version+1;s>t.version&&(t.version=s)}return!0}return!1}function E(t){return s([function(t){for(var e=t.length,i=new ArrayBuffer(e),n=new Uint8Array(i),r=0;r<e;r++)n[r]=t.charCodeAt(r);return i}(atob(t.data))],{type:t.type})}function S(t){return t&&t.__local_forage_encoded_blob}function _(t){var e=this,i=e._initReady().then((function(){var t=d[e._dbInfo.name];if(t&&t.dbReady)return t.dbReady}));return h(i,t,t),i}function O(t,e,i,n){void 0===n&&(n=1);try{var r=t.db.transaction(t.storeName,e);i(null,r)}catch(r){if(n>0&&(!t.db||"InvalidStateError"===r.name||"NotFoundError"===r.name))return o.resolve().then((function(){if(!t.db||"NotFoundError"===r.name&&!t.db.objectStoreNames.contains(t.storeName)&&t.version<=t.db.version)return t.db&&(t.version=t.db.version+1),w(t)})).then((function(){return function(t){g(t);for(var e=d[t.name],i=e.forages,n=0;n<i.length;n++){var r=i[n];r._dbInfo.db&&(r._dbInfo.db.close(),r._dbInfo.db=null)}return t.db=null,b(t).then((function(e){return t.db=e,x(t)?w(t):e})).then((function(n){t.db=e.db=n;for(var r=0;r<i.length;r++)i[r]._dbInfo.db=n})).catch((function(e){throw m(t,e),e}))}(t).then((function(){O(t,e,i,n-1)}))})).catch(i);i(r)}}var C={_driver:"asyncStorage",_initStorage:function(t){var e=this,i={db:null};if(t)for(var n in t)i[n]=t[n];var r=d[i.name];r||(r={forages:[],db:null,dbReady:null,deferredOperations:[]},d[i.name]=r),r.forages.push(e),e._initReady||(e._initReady=e.ready,e.ready=_);var s=[];function a(){return o.resolve()}for(var h=0;h<r.forages.length;h++){var l=r.forages[h];l!==e&&s.push(l._initReady().catch(a))}var c=r.forages.slice(0);return o.all(s).then((function(){return i.db=r.db,b(i)})).then((function(t){return i.db=t,x(i,e._defaultConfig.version)?w(i):t})).then((function(t){i.db=r.db=t,e._dbInfo=i;for(var n=0;n<c.length;n++){var s=c[n];s!==e&&(s._dbInfo.db=i.db,s._dbInfo.version=i.version)}}))},_support:function(){try{if(!r)return!1;var t="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),e="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!t||e)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(t){return!1}}(),iterate:function(t,e){var i=this,n=new o((function(e,n){i.ready().then((function(){O(i._dbInfo,"readonly",(function(r,s){if(r)return n(r);try{var o=s.objectStore(i._dbInfo.storeName).openCursor(),a=1;o.onsuccess=function(){var i=o.result;if(i){var n=i.value;S(n)&&(n=E(n));var r=t(n,i.key,a++);void 0!==r?e(r):i.continue()}else e()},o.onerror=function(){n(o.error)}}catch(t){n(t)}}))})).catch(n)}));return a(n,e),n},getItem:function(t,e){var i=this;t=l(t);var n=new o((function(e,n){i.ready().then((function(){O(i._dbInfo,"readonly",(function(r,s){if(r)return n(r);try{var o=s.objectStore(i._dbInfo.storeName).get(t);o.onsuccess=function(){var t=o.result;void 0===t&&(t=null),S(t)&&(t=E(t)),e(t)},o.onerror=function(){n(o.error)}}catch(t){n(t)}}))})).catch(n)}));return a(n,e),n},setItem:function(t,e,i){var n=this;t=l(t);var r=new o((function(i,r){var s;n.ready().then((function(){return s=n._dbInfo,"[object Blob]"===f.call(e)?p(s.db).then((function(t){return t?e:(i=e,new o((function(t,e){var n=new FileReader;n.onerror=e,n.onloadend=function(e){var n=btoa(e.target.result||"");t({__local_forage_encoded_blob:!0,data:n,type:i.type})},n.readAsBinaryString(i)})));var i})):e})).then((function(e){O(n._dbInfo,"readwrite",(function(s,o){if(s)return r(s);try{var a=o.objectStore(n._dbInfo.storeName);null===e&&(e=void 0);var h=a.put(e,t);o.oncomplete=function(){void 0===e&&(e=null),i(e)},o.onabort=o.onerror=function(){var t=h.error?h.error:h.transaction.error;r(t)}}catch(t){r(t)}}))})).catch(r)}));return a(r,i),r},removeItem:function(t,e){var i=this;t=l(t);var n=new o((function(e,n){i.ready().then((function(){O(i._dbInfo,"readwrite",(function(r,s){if(r)return n(r);try{var o=s.objectStore(i._dbInfo.storeName).delete(t);s.oncomplete=function(){e()},s.onerror=function(){n(o.error)},s.onabort=function(){var t=o.error?o.error:o.transaction.error;n(t)}}catch(t){n(t)}}))})).catch(n)}));return a(n,e),n},clear:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){O(e._dbInfo,"readwrite",(function(n,r){if(n)return i(n);try{var s=r.objectStore(e._dbInfo.storeName).clear();r.oncomplete=function(){t()},r.onabort=r.onerror=function(){var t=s.error?s.error:s.transaction.error;i(t)}}catch(t){i(t)}}))})).catch(i)}));return a(i,t),i},length:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){O(e._dbInfo,"readonly",(function(n,r){if(n)return i(n);try{var s=r.objectStore(e._dbInfo.storeName).count();s.onsuccess=function(){t(s.result)},s.onerror=function(){i(s.error)}}catch(t){i(t)}}))})).catch(i)}));return a(i,t),i},key:function(t,e){var i=this,n=new o((function(e,n){t<0?e(null):i.ready().then((function(){O(i._dbInfo,"readonly",(function(r,s){if(r)return n(r);try{var o=s.objectStore(i._dbInfo.storeName),a=!1,h=o.openCursor();h.onsuccess=function(){var i=h.result;i?0===t||a?e(i.key):(a=!0,i.advance(t)):e(null)},h.onerror=function(){n(h.error)}}catch(t){n(t)}}))})).catch(n)}));return a(n,e),n},keys:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){O(e._dbInfo,"readonly",(function(n,r){if(n)return i(n);try{var s=r.objectStore(e._dbInfo.storeName).openCursor(),o=[];s.onsuccess=function(){var e=s.result;e?(o.push(e.key),e.continue()):t(o)},s.onerror=function(){i(s.error)}}catch(t){i(t)}}))})).catch(i)}));return a(i,t),i},dropInstance:function(t,e){e=c.apply(this,arguments);var i=this.config();(t="function"!=typeof t&&t||{}).name||(t.name=t.name||i.name,t.storeName=t.storeName||i.storeName);var n,s=this;if(t.name){var h=t.name===i.name&&s._dbInfo.db,l=h?o.resolve(s._dbInfo.db):b(t).then((function(e){var i=d[t.name],n=i.forages;i.db=e;for(var r=0;r<n.length;r++)n[r]._dbInfo.db=e;return e}));n=t.storeName?l.then((function(e){if(e.objectStoreNames.contains(t.storeName)){var i=e.version+1;g(t);var n=d[t.name],s=n.forages;e.close();for(var a=0;a<s.length;a++){var h=s[a];h._dbInfo.db=null,h._dbInfo.version=i}return new o((function(e,n){var s=r.open(t.name,i);s.onerror=function(t){s.result.close(),n(t)},s.onupgradeneeded=function(){s.result.deleteObjectStore(t.storeName)},s.onsuccess=function(){var t=s.result;t.close(),e(t)}})).then((function(t){n.db=t;for(var e=0;e<s.length;e++){var i=s[e];i._dbInfo.db=t,v(i._dbInfo)}})).catch((function(e){throw(m(t,e)||o.resolve()).catch((function(){})),e}))}})):l.then((function(e){g(t);var i=d[t.name],n=i.forages;e.close();for(var s=0;s<n.length;s++)n[s]._dbInfo.db=null;return new o((function(e,i){var n=r.deleteDatabase(t.name);n.onerror=n.onblocked=function(t){var e=n.result;e&&e.close(),i(t)},n.onsuccess=function(){var t=n.result;t&&t.close(),e(t)}})).then((function(t){i.db=t;for(var e=0;e<n.length;e++)v(n[e]._dbInfo)})).catch((function(e){throw(m(t,e)||o.resolve()).catch((function(){})),e}))}))}else n=o.reject("Invalid arguments");return a(n,e),n}},T="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",k=/^~~local_forage_type~([^~]+)~/,R="__lfsc__:".length,L=R+"arbf".length,I=Object.prototype.toString;function j(t){var e,i,n,r,s,o=.75*t.length,a=t.length,h=0;"="===t[t.length-1]&&(o--,"="===t[t.length-2]&&o--);var l=new ArrayBuffer(o),c=new Uint8Array(l);for(e=0;e<a;e+=4)i=T.indexOf(t[e]),n=T.indexOf(t[e+1]),r=T.indexOf(t[e+2]),s=T.indexOf(t[e+3]),c[h++]=i<<2|n>>4,c[h++]=(15&n)<<4|r>>2,c[h++]=(3&r)<<6|63&s;return l}function N(t){var e,i=new Uint8Array(t),n="";for(e=0;e<i.length;e+=3)n+=T[i[e]>>2],n+=T[(3&i[e])<<4|i[e+1]>>4],n+=T[(15&i[e+1])<<2|i[e+2]>>6],n+=T[63&i[e+2]];return i.length%3==2?n=n.substring(0,n.length-1)+"=":i.length%3==1&&(n=n.substring(0,n.length-2)+"=="),n}var A={serialize:function(t,e){var i="";if(t&&(i=I.call(t)),t&&("[object ArrayBuffer]"===i||t.buffer&&"[object ArrayBuffer]"===I.call(t.buffer))){var n,r="__lfsc__:";t instanceof ArrayBuffer?(n=t,r+="arbf"):(n=t.buffer,"[object Int8Array]"===i?r+="si08":"[object Uint8Array]"===i?r+="ui08":"[object Uint8ClampedArray]"===i?r+="uic8":"[object Int16Array]"===i?r+="si16":"[object Uint16Array]"===i?r+="ur16":"[object Int32Array]"===i?r+="si32":"[object Uint32Array]"===i?r+="ui32":"[object Float32Array]"===i?r+="fl32":"[object Float64Array]"===i?r+="fl64":e(new Error("Failed to get type for BinaryArray"))),e(r+N(n))}else if("[object Blob]"===i){var s=new FileReader;s.onload=function(){var i="~~local_forage_type~"+t.type+"~"+N(this.result);e("__lfsc__:blob"+i)},s.readAsArrayBuffer(t)}else try{e(JSON.stringify(t))}catch(i){console.error("Couldn't convert value into a JSON string: ",t),e(null,i)}},deserialize:function(t){if("__lfsc__:"!==t.substring(0,R))return JSON.parse(t);var e,i=t.substring(L),n=t.substring(R,L);if("blob"===n&&k.test(i)){var r=i.match(k);e=r[1],i=i.substring(r[0].length)}var o=j(i);switch(n){case"arbf":return o;case"blob":return s([o],{type:e});case"si08":return new Int8Array(o);case"ui08":return new Uint8Array(o);case"uic8":return new Uint8ClampedArray(o);case"si16":return new Int16Array(o);case"ur16":return new Uint16Array(o);case"si32":return new Int32Array(o);case"ui32":return new Uint32Array(o);case"fl32":return new Float32Array(o);case"fl64":return new Float64Array(o);default:throw new Error("Unkown type: "+n)}},stringToBuffer:j,bufferToString:N};function P(t,e,i,n){t.executeSql("CREATE TABLE IF NOT EXISTS "+e.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],i,n)}function D(t,e,i,n,r,s){t.executeSql(i,n,r,(function(t,o){o.code===o.SYNTAX_ERR?t.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[e.storeName],(function(t,a){a.rows.length?s(t,o):P(t,e,(function(){t.executeSql(i,n,r,s)}),s)}),s):s(t,o)}),s)}function z(t,e,i,n){var r=this;t=l(t);var s=new o((function(s,o){r.ready().then((function(){void 0===e&&(e=null);var a=e,h=r._dbInfo;h.serializer.serialize(e,(function(e,l){l?o(l):h.db.transaction((function(i){D(i,h,"INSERT OR REPLACE INTO "+h.storeName+" (key, value) VALUES (?, ?)",[t,e],(function(){s(a)}),(function(t,e){o(e)}))}),(function(e){if(e.code===e.QUOTA_ERR){if(n>0)return void s(z.apply(r,[t,a,i,n-1]));o(e)}}))}))})).catch(o)}));return a(s,i),s}function B(t){return new o((function(e,i){t.transaction((function(n){n.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(i,n){for(var r=[],s=0;s<n.rows.length;s++)r.push(n.rows.item(s).name);e({db:t,storeNames:r})}),(function(t,e){i(e)}))}),(function(t){i(t)}))}))}var q={_driver:"webSQLStorage",_initStorage:function(t){var e=this,i={db:null};if(t)for(var n in t)i[n]="string"!=typeof t[n]?t[n].toString():t[n];var r=new o((function(t,n){try{i.db=openDatabase(i.name,String(i.version),i.description,i.size)}catch(t){return n(t)}i.db.transaction((function(r){P(r,i,(function(){e._dbInfo=i,t()}),(function(t,e){n(e)}))}),n)}));return i.serializer=A,r},_support:"function"==typeof openDatabase,iterate:function(t,e){var i=this,n=new o((function(e,n){i.ready().then((function(){var r=i._dbInfo;r.db.transaction((function(i){D(i,r,"SELECT * FROM "+r.storeName,[],(function(i,n){for(var s=n.rows,o=s.length,a=0;a<o;a++){var h=s.item(a),l=h.value;if(l&&(l=r.serializer.deserialize(l)),void 0!==(l=t(l,h.key,a+1)))return void e(l)}e()}),(function(t,e){n(e)}))}))})).catch(n)}));return a(n,e),n},getItem:function(t,e){var i=this;t=l(t);var n=new o((function(e,n){i.ready().then((function(){var r=i._dbInfo;r.db.transaction((function(i){D(i,r,"SELECT * FROM "+r.storeName+" WHERE key = ? LIMIT 1",[t],(function(t,i){var n=i.rows.length?i.rows.item(0).value:null;n&&(n=r.serializer.deserialize(n)),e(n)}),(function(t,e){n(e)}))}))})).catch(n)}));return a(n,e),n},setItem:function(t,e,i){return z.apply(this,[t,e,i,1])},removeItem:function(t,e){var i=this;t=l(t);var n=new o((function(e,n){i.ready().then((function(){var r=i._dbInfo;r.db.transaction((function(i){D(i,r,"DELETE FROM "+r.storeName+" WHERE key = ?",[t],(function(){e()}),(function(t,e){n(e)}))}))})).catch(n)}));return a(n,e),n},clear:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){var n=e._dbInfo;n.db.transaction((function(e){D(e,n,"DELETE FROM "+n.storeName,[],(function(){t()}),(function(t,e){i(e)}))}))})).catch(i)}));return a(i,t),i},length:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){var n=e._dbInfo;n.db.transaction((function(e){D(e,n,"SELECT COUNT(key) as c FROM "+n.storeName,[],(function(e,i){var n=i.rows.item(0).c;t(n)}),(function(t,e){i(e)}))}))})).catch(i)}));return a(i,t),i},key:function(t,e){var i=this,n=new o((function(e,n){i.ready().then((function(){var r=i._dbInfo;r.db.transaction((function(i){D(i,r,"SELECT key FROM "+r.storeName+" WHERE id = ? LIMIT 1",[t+1],(function(t,i){var n=i.rows.length?i.rows.item(0).key:null;e(n)}),(function(t,e){n(e)}))}))})).catch(n)}));return a(n,e),n},keys:function(t){var e=this,i=new o((function(t,i){e.ready().then((function(){var n=e._dbInfo;n.db.transaction((function(e){D(e,n,"SELECT key FROM "+n.storeName,[],(function(e,i){for(var n=[],r=0;r<i.rows.length;r++)n.push(i.rows.item(r).key);t(n)}),(function(t,e){i(e)}))}))})).catch(i)}));return a(i,t),i},dropInstance:function(t,e){e=c.apply(this,arguments);var i=this.config();(t="function"!=typeof t&&t||{}).name||(t.name=t.name||i.name,t.storeName=t.storeName||i.storeName);var n,r=this;return a(n=t.name?new o((function(e){var n;n=t.name===i.name?r._dbInfo.db:openDatabase(t.name,"","",0),t.storeName?e({db:n,storeNames:[t.storeName]}):e(B(n))})).then((function(t){return new o((function(e,i){t.db.transaction((function(n){function r(t){return new o((function(e,i){n.executeSql("DROP TABLE IF EXISTS "+t,[],(function(){e()}),(function(t,e){i(e)}))}))}for(var s=[],a=0,h=t.storeNames.length;a<h;a++)s.push(r(t.storeNames[a]));o.all(s).then((function(){e()})).catch((function(t){i(t)}))}),(function(t){i(t)}))}))})):o.reject("Invalid arguments"),e),n}};function M(t,e){var i=t.name+"/";return t.storeName!==e.storeName&&(i+=t.storeName+"/"),i}function U(){return!function(){try{return localStorage.setItem("_localforage_support_test",!0),localStorage.removeItem("_localforage_support_test"),!1}catch(t){return!0}}()||localStorage.length>0}var F={_driver:"localStorageWrapper",_initStorage:function(t){var e={};if(t)for(var i in t)e[i]=t[i];return e.keyPrefix=M(t,this._defaultConfig),U()?(this._dbInfo=e,e.serializer=A,o.resolve()):o.reject()},_support:function(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(t){return!1}}(),iterate:function(t,e){var i=this,n=i.ready().then((function(){for(var e=i._dbInfo,n=e.keyPrefix,r=n.length,s=localStorage.length,o=1,a=0;a<s;a++){var h=localStorage.key(a);if(0===h.indexOf(n)){var l=localStorage.getItem(h);if(l&&(l=e.serializer.deserialize(l)),void 0!==(l=t(l,h.substring(r),o++)))return l}}}));return a(n,e),n},getItem:function(t,e){var i=this;t=l(t);var n=i.ready().then((function(){var e=i._dbInfo,n=localStorage.getItem(e.keyPrefix+t);return n&&(n=e.serializer.deserialize(n)),n}));return a(n,e),n},setItem:function(t,e,i){var n=this;t=l(t);var r=n.ready().then((function(){void 0===e&&(e=null);var i=e;return new o((function(r,s){var o=n._dbInfo;o.serializer.serialize(e,(function(e,n){if(n)s(n);else try{localStorage.setItem(o.keyPrefix+t,e),r(i)}catch(t){"QuotaExceededError"!==t.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==t.name||s(t),s(t)}}))}))}));return a(r,i),r},removeItem:function(t,e){var i=this;t=l(t);var n=i.ready().then((function(){var e=i._dbInfo;localStorage.removeItem(e.keyPrefix+t)}));return a(n,e),n},clear:function(t){var e=this,i=e.ready().then((function(){for(var t=e._dbInfo.keyPrefix,i=localStorage.length-1;i>=0;i--){var n=localStorage.key(i);0===n.indexOf(t)&&localStorage.removeItem(n)}}));return a(i,t),i},length:function(t){var e=this.keys().then((function(t){return t.length}));return a(e,t),e},key:function(t,e){var i=this,n=i.ready().then((function(){var e,n=i._dbInfo;try{e=localStorage.key(t)}catch(t){e=null}return e&&(e=e.substring(n.keyPrefix.length)),e}));return a(n,e),n},keys:function(t){var e=this,i=e.ready().then((function(){for(var t=e._dbInfo,i=localStorage.length,n=[],r=0;r<i;r++){var s=localStorage.key(r);0===s.indexOf(t.keyPrefix)&&n.push(s.substring(t.keyPrefix.length))}return n}));return a(i,t),i},dropInstance:function(t,e){if(e=c.apply(this,arguments),!(t="function"!=typeof t&&t||{}).name){var i=this.config();t.name=t.name||i.name,t.storeName=t.storeName||i.storeName}var n,r=this;return a(n=t.name?new o((function(e){t.storeName?e(M(t,r._defaultConfig)):e(t.name+"/")})).then((function(t){for(var e=localStorage.length-1;e>=0;e--){var i=localStorage.key(e);0===i.indexOf(t)&&localStorage.removeItem(i)}})):o.reject("Invalid arguments"),e),n}},W=function(t,e){for(var i,n,r=t.length,s=0;s<r;){if((i=t[s])===(n=e)||"number"==typeof i&&"number"==typeof n&&isNaN(i)&&isNaN(n))return!0;s++}return!1},H=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},V={},X={},G={INDEXEDDB:C,WEBSQL:q,LOCALSTORAGE:F},Y=[G.INDEXEDDB._driver,G.WEBSQL._driver,G.LOCALSTORAGE._driver],$=["dropInstance"],K=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat($),Z={description:"",driver:Y.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function J(t,e){t[e]=function(){var i=arguments;return t.ready().then((function(){return t[e].apply(t,i)}))}}function Q(){for(var t=1;t<arguments.length;t++){var e=arguments[t];if(e)for(var i in e)e.hasOwnProperty(i)&&(H(e[i])?arguments[0][i]=e[i].slice():arguments[0][i]=e[i])}return arguments[0]}var tt=new(function(){function t(e){for(var i in function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),G)if(G.hasOwnProperty(i)){var n=G[i],r=n._driver;this[i]=r,V[r]||this.defineDriver(n)}this._defaultConfig=Q({},Z),this._config=Q({},this._defaultConfig,e),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return t.prototype.config=function(t){if("object"===(void 0===t?"undefined":n(t))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var e in t){if("storeName"===e&&(t[e]=t[e].replace(/\W/g,"_")),"version"===e&&"number"!=typeof t[e])return new Error("Database version must be a number.");this._config[e]=t[e]}return!("driver"in t)||!t.driver||this.setDriver(this._config.driver)}return"string"==typeof t?this._config[t]:this._config},t.prototype.defineDriver=function(t,e,i){var n=new o((function(e,i){try{var n=t._driver,r=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!t._driver)return void i(r);for(var s=K.concat("_initStorage"),h=0,l=s.length;h<l;h++){var c=s[h];if((!W($,c)||t[c])&&"function"!=typeof t[c])return void i(r)}!function(){for(var e=function(t){return function(){var e=new Error("Method "+t+" is not implemented by the current driver"),i=o.reject(e);return a(i,arguments[arguments.length-1]),i}},i=0,n=$.length;i<n;i++){var r=$[i];t[r]||(t[r]=e(r))}}();var u=function(i){V[n]&&console.info("Redefining LocalForage driver: "+n),V[n]=t,X[n]=i,e()};"_support"in t?t._support&&"function"==typeof t._support?t._support().then(u,i):u(!!t._support):u(!0)}catch(t){i(t)}}));return h(n,e,i),n},t.prototype.driver=function(){return this._driver||null},t.prototype.getDriver=function(t,e,i){var n=V[t]?o.resolve(V[t]):o.reject(new Error("Driver not found."));return h(n,e,i),n},t.prototype.getSerializer=function(t){var e=o.resolve(A);return h(e,t),e},t.prototype.ready=function(t){var e=this,i=e._driverSet.then((function(){return null===e._ready&&(e._ready=e._initDriver()),e._ready}));return h(i,t,t),i},t.prototype.setDriver=function(t,e,i){var n=this;H(t)||(t=[t]);var r=this._getSupportedDrivers(t);function s(){n._config.driver=n.driver()}function a(t){return n._extend(t),s(),n._ready=n._initStorage(n._config),n._ready}var l=null!==this._driverSet?this._driverSet.catch((function(){return o.resolve()})):o.resolve();return this._driverSet=l.then((function(){var t=r[0];return n._dbInfo=null,n._ready=null,n.getDriver(t).then((function(t){n._driver=t._driver,s(),n._wrapLibraryMethodsWithReady(),n._initDriver=function(t){return function(){var e=0;return function i(){for(;e<t.length;){var r=t[e];return e++,n._dbInfo=null,n._ready=null,n.getDriver(r).then(a).catch(i)}s();var h=new Error("No available storage method found.");return n._driverSet=o.reject(h),n._driverSet}()}}(r)}))})).catch((function(){s();var t=new Error("No available storage method found.");return n._driverSet=o.reject(t),n._driverSet})),h(this._driverSet,e,i),this._driverSet},t.prototype.supports=function(t){return!!X[t]},t.prototype._extend=function(t){Q(this,t)},t.prototype._getSupportedDrivers=function(t){for(var e=[],i=0,n=t.length;i<n;i++){var r=t[i];this.supports(r)&&e.push(r)}return e},t.prototype._wrapLibraryMethodsWithReady=function(){for(var t=0,e=K.length;t<e;t++)J(this,K[t])},t.prototype.createInstance=function(e){return new t(e)},t}());e.exports=tt},{3:3}]},{},[4])(4)}).call(this,i(30))},function(t,e,i){"use strict";i(24),i(14);var n=i(3),r=i.n(n),s=i(0),o=i(5),a=i(4),h=i(2),l=i(6),c=i(11);i(20);var u=function(t,e,i,n){var r,o="undefined"!=typeof window&&window.URL,h=o?"blob":"arraybuffer",l=new s.defer,c=new XMLHttpRequest,u=XMLHttpRequest.prototype;for(r in"overrideMimeType"in u||Object.defineProperty(u,"overrideMimeType",{value:function(){}}),i&&(c.withCredentials=!0),c.onreadystatechange=function(){if(this.readyState===XMLHttpRequest.DONE){var t=!1;if(""!==this.responseType&&"document"!==this.responseType||(t=this.responseXML),200===this.status||0===this.status||t){var i;if(!this.response&&!t)return l.reject({status:this.status,message:"Empty Response",stack:(new Error).stack}),l.promise;if(403===this.status)return l.reject({status:this.status,response:this.response,message:"Forbidden",stack:(new Error).stack}),l.promise;i=t?this.responseXML:Object(s.isXml)(e)?Object(s.parse)(this.response,"text/xml"):"xhtml"==e?Object(s.parse)(this.response,"application/xhtml+xml"):"html"==e||"htm"==e?Object(s.parse)(this.response,"text/html"):"json"==e?JSON.parse(this.response):"blob"==e?o?this.response:new Blob([this.response]):this.response,l.resolve(i)}else l.reject({status:this.status,message:this.response,stack:(new Error).stack})}},c.onerror=function(t){l.reject(t)},c.open("GET",t,!0),n)c.setRequestHeader(r,n[r]);return"json"==e&&c.setRequestHeader("Accept","application/json"),e||(e=new a.a(t).extension),"blob"==e&&(c.responseType=h),Object(s.isXml)(e)&&c.overrideMimeType("text/xml"),"binary"==e&&(c.responseType="arraybuffer"),c.send(),l.promise},d=i(38);var f=class{constructor(t,e){this.idref=t.idref,this.linear="yes"===t.linear,this.properties=t.properties,this.index=t.index,this.href=t.href,this.url=t.url,this.canonical=t.canonical,this.next=t.next,this.prev=t.prev,this.cfiBase=t.cfiBase,e?this.hooks=e:(this.hooks={},this.hooks.serialize=new l.a(this),this.hooks.content=new l.a(this)),this.document=void 0,this.contents=void 0,this.output=void 0}load(t){var e=t||this.request||u,i=new s.defer,n=i.promise;return this.contents?i.resolve(this.contents):e(this.url).then(function(t){return this.document=t,this.contents=t.documentElement,this.hooks.content.trigger(this.document,this)}.bind(this)).then(function(){i.resolve(this.contents)}.bind(this)).catch((function(t){i.reject(t)})),n}base(){return Object(c.a)(this.document,this)}render(t){var e=new s.defer,i=e.promise;return this.output,this.load(t).then(function(t){var e=("undefined"!=typeof navigator&&navigator.userAgent||"").indexOf("Trident")>=0,i=new("undefined"==typeof XMLSerializer||e?d.XMLDOMParser:XMLSerializer);return this.output=i.serializeToString(t),this.output}.bind(this)).then(function(){return this.hooks.serialize.trigger(this.output,this)}.bind(this)).then(function(){e.resolve(this.output)}.bind(this)).catch((function(t){e.reject(t)})),i}find(t){var e=this,i=[],n=t.toLowerCase();return Object(s.sprint)(e.document,(function(t){!function(t){for(var r,s,o,a=t.textContent.toLowerCase(),h=e.document.createRange(),l=-1;-1!=s;)-1!=(s=a.indexOf(n,l+1))&&((h=e.document.createRange()).setStart(t,s),h.setEnd(t,s+n.length),r=e.cfiFromRange(h),o=t.textContent.length<150?t.textContent:"..."+(o=t.textContent.substring(s-75,s+75))+"...",i.push({cfi:r,excerpt:o})),l=s}(t)})),i}search(t,e=5){if(void 0===document.createTreeWalker)return this.find(t);let i=[];const n=this,r=t.toLowerCase(),s=function(t){const e=t.reduce((t,e)=>t+e.textContent,"").toLowerCase().indexOf(r);if(-1!=e){const s=0,o=e+r.length;let a=0,h=0;if(e<t[s].length){let r;for(;a<t.length-1&&(h+=t[a].length,!(o<=h));)a+=1;let l=t[s],c=t[a],u=n.document.createRange();u.setStart(l,e);let d=t.slice(0,a).reduce((t,e)=>t+e.textContent.length,0);u.setEnd(c,d>o?o:o-d),r=n.cfiFromRange(u);let f=t.slice(0,a+1).reduce((t,e)=>t+e.textContent,"");f.length>150&&(f=f.substring(e-75,e+75),f="..."+f+"..."),i.push({cfi:r,excerpt:f})}}},o=document.createTreeWalker(n.document,NodeFilter.SHOW_TEXT,null,!1);let a,h=[];for(;a=o.nextNode();)h.push(a),h.length==e&&(s(h.slice(0,e)),h=h.slice(1,e));return h.length>0&&s(h),i}reconcileLayoutSettings(t){var e={layout:t.layout,spread:t.spread,orientation:t.orientation};return this.properties.forEach((function(t){var i,n,r=t.replace("rendition:",""),s=r.indexOf("-");-1!=s&&(i=r.slice(0,s),n=r.slice(s+1),e[i]=n)})),e}cfiFromRange(t){return new h.a(t,this.cfiBase).toString()}cfiFromElement(t){return new h.a(t,this.cfiBase).toString()}unload(){this.document=void 0,this.contents=void 0,this.output=void 0}destroy(){this.unload(),this.hooks.serialize.clear(),this.hooks.content.clear(),this.hooks=void 0,this.idref=void 0,this.linear=void 0,this.properties=void 0,this.index=void 0,this.href=void 0,this.url=void 0,this.next=void 0,this.prev=void 0,this.cfiBase=void 0}};var p=class{constructor(){this.spineItems=[],this.spineByHref={},this.spineById={},this.hooks={},this.hooks.serialize=new l.a,this.hooks.content=new l.a,this.hooks.content.register(c.a),this.hooks.content.register(c.b),this.hooks.content.register(c.d),this.epubcfi=new h.a,this.loaded=!1,this.items=void 0,this.manifest=void 0,this.spineNodeIndex=void 0,this.baseUrl=void 0,this.length=void 0}unpack(t,e,i){this.items=t.spine,this.manifest=t.manifest,this.spineNodeIndex=t.spineNodeIndex,this.baseUrl=t.baseUrl||t.basePath||"",this.length=this.items.length,this.items.forEach((t,n)=>{var r,s=this.manifest[t.idref];t.index=n,t.cfiBase=this.epubcfi.generateChapterComponent(this.spineNodeIndex,t.index,t.idref),t.href&&(t.url=e(t.href,!0),t.canonical=i(t.href)),s&&(t.href=s.href,t.url=e(t.href,!0),t.canonical=i(t.href),s.properties.length&&t.properties.push.apply(t.properties,s.properties)),"yes"===t.linear?(t.prev=function(){let e=t.index;for(;e>0;){let t=this.get(e-1);if(t&&t.linear)return t;e-=1}}.bind(this),t.next=function(){let e=t.index;for(;e<this.spineItems.length-1;){let t=this.get(e+1);if(t&&t.linear)return t;e+=1}}.bind(this)):(t.prev=function(){},t.next=function(){}),r=new f(t,this.hooks),this.append(r)}),this.loaded=!0}get(t){var e=0;if(void 0===t)for(;e<this.spineItems.length;){let t=this.spineItems[e];if(t&&t.linear)break;e+=1}else if(this.epubcfi.isCfiString(t)){e=new h.a(t).spinePos}else"number"==typeof t||!1===isNaN(t)?e=t:"string"==typeof t&&0===t.indexOf("#")?e=this.spineById[t.substring(1)]:"string"==typeof t&&(t=t.split("#")[0],e=this.spineByHref[t]||this.spineByHref[encodeURI(t)]);return this.spineItems[e]||null}append(t){var e=this.spineItems.length;return t.index=e,this.spineItems.push(t),this.spineByHref[decodeURI(t.href)]=e,this.spineByHref[encodeURI(t.href)]=e,this.spineByHref[t.href]=e,this.spineById[t.idref]=e,e}prepend(t){return this.spineByHref[t.href]=0,this.spineById[t.idref]=0,this.spineItems.forEach((function(t,e){t.index=e})),0}remove(t){var e=this.spineItems.indexOf(t);if(e>-1)return delete this.spineByHref[t.href],delete this.spineById[t.idref],this.spineItems.splice(e,1)}each(){return this.spineItems.forEach.apply(this.spineItems,arguments)}first(){let t=0;do{let e=this.get(t);if(e&&e.linear)return e;t+=1}while(t<this.spineItems.length)}last(){let t=this.spineItems.length-1;do{let e=this.get(t);if(e&&e.linear)return e;t-=1}while(t>=0)}destroy(){this.each(t=>t.destroy()),this.spineItems=void 0,this.spineByHref=void 0,this.spineById=void 0,this.hooks.serialize.clear(),this.hooks.content.clear(),this.hooks=void 0,this.epubcfi=void 0,this.loaded=!1,this.items=void 0,this.manifest=void 0,this.spineNodeIndex=void 0,this.baseUrl=void 0,this.length=void 0}},g=i(21),v=i(1);class m{constructor(t,e,i){this.spine=t,this.request=e,this.pause=i||100,this.q=new g.a(this),this.epubcfi=new h.a,this._locations=[],this._locationsWords=[],this.total=0,this.break=150,this._current=0,this._wordCounter=0,this.currentLocation="",this._currentCfi="",this.processingTimeout=void 0}generate(t){return t&&(this.break=t),this.q.pause(),this.spine.each(function(t){t.linear&&this.q.enqueue(this.process.bind(this),t)}.bind(this)),this.q.run().then(function(){return this.total=this._locations.length-1,this._currentCfi&&(this.currentLocation=this._currentCfi),this._locations}.bind(this))}createRange(){return{startContainer:void 0,startOffset:void 0,endContainer:void 0,endOffset:void 0}}process(t){return t.load(this.request).then(function(e){var i=new s.defer,n=this.parse(e,t.cfiBase);return this._locations=this._locations.concat(n),t.unload(),this.processingTimeout=setTimeout(()=>i.resolve(n),this.pause),i.promise}.bind(this))}parse(t,e,i){var n,r,o=[],a=t.ownerDocument,l=Object(s.qs)(a,"body"),c=0,u=i||this.break;if(Object(s.sprint)(l,function(t){var i,s=t.length,a=0;if(0===t.textContent.trim().length)return!1;for(0==c&&((n=this.createRange()).startContainer=t,n.startOffset=0),(i=u-c)>s&&(c+=s,a=s);a<s;)if(i=u-c,0===c&&(a+=1,(n=this.createRange()).startContainer=t,n.startOffset=a),a+i>=s)c+=s-a,a=s;else{a+=i,n.endContainer=t,n.endOffset=a;let r=new h.a(n,e).toString();o.push(r),c=0}r=t}.bind(this)),n&&n.startContainer&&r){n.endContainer=r,n.endOffset=r.length;let t=new h.a(n,e).toString();o.push(t),c=0}return o}generateFromWords(t,e,i){var n=t?new h.a(t):void 0;return this.q.pause(),this._locationsWords=[],this._wordCounter=0,this.spine.each(function(t){t.linear&&(n?t.index>=n.spinePos&&this.q.enqueue(this.processWords.bind(this),t,e,n,i):this.q.enqueue(this.processWords.bind(this),t,e,n,i))}.bind(this)),this.q.run().then(function(){return this._currentCfi&&(this.currentLocation=this._currentCfi),this._locationsWords}.bind(this))}processWords(t,e,i,n){return n&&this._locationsWords.length>=n?Promise.resolve():t.load(this.request).then(function(r){var o=new s.defer,a=this.parseWords(r,t,e,i),h=n-this._locationsWords.length;return this._locationsWords=this._locationsWords.concat(a.length>=n?a.slice(0,h):a),t.unload(),this.processingTimeout=setTimeout(()=>o.resolve(a),this.pause),o.promise}.bind(this))}countWords(t){return(t=(t=(t=t.replace(/(^\s*)|(\s*$)/gi,"")).replace(/[ ]{2,}/gi," ")).replace(/\n /,"\n")).split(" ").length}parseWords(t,e,i,n){var r,o=e.cfiBase,a=[],l=t.ownerDocument,c=Object(s.qs)(l,"body"),u=i,d=!n||n.spinePos!==e.index;n&&e.index===n.spinePos&&(r=n.findNode(n.range?n.path.steps.concat(n.start.steps):n.path.steps,t.ownerDocument));return Object(s.sprint)(c,function(t){if(!d){if(t!==r)return!1;d=!0}if(t.textContent.length<10&&0===t.textContent.trim().length)return!1;var e,i=this.countWords(t.textContent),n=0;if(0===i)return!1;for((e=u-this._wordCounter)>i&&(this._wordCounter+=i,n=i);n<i;)if(n+(e=u-this._wordCounter)>=i)this._wordCounter+=i-n,n=i;else{n+=e;let i=new h.a(t,o);a.push({cfi:i.toString(),wordCount:this._wordCounter}),this._wordCounter=0}t}.bind(this)),a}locationFromCfi(t){let e;return h.a.prototype.isCfiString(t)&&(t=new h.a(t)),0===this._locations.length?-1:(e=Object(s.locationOf)(t,this._locations,this.epubcfi.compare),e>this.total?this.total:e)}percentageFromCfi(t){if(0===this._locations.length)return null;var e=this.locationFromCfi(t);return this.percentageFromLocation(e)}percentageFromLocation(t){return t&&this.total?t/this.total:0}cfiFromLocation(t){var e=-1;return"number"!=typeof t&&(t=parseInt(t)),t>=0&&t<this._locations.length&&(e=this._locations[t]),e}cfiFromPercentage(t){let e;if(t>1&&console.warn("Normalize cfiFromPercentage value to between 0 - 1"),t>=1){let t=new h.a(this._locations[this.total]);return t.collapse(),t.toString()}return e=Math.ceil(this.total*t),this.cfiFromLocation(e)}load(t){return this._locations="string"==typeof t?JSON.parse(t):t,this.total=this._locations.length-1,this._locations}save(){return JSON.stringify(this._locations)}getCurrent(){return this._current}setCurrent(t){var e;if("string"==typeof t)this._currentCfi=t;else{if("number"!=typeof t)return;this._current=t}0!==this._locations.length&&("string"==typeof t?(e=this.locationFromCfi(t),this._current=e):e=t,this.emit(v.c.LOCATIONS.CHANGED,{percentage:this.percentageFromLocation(e)}))}get currentLocation(){return this._current}set currentLocation(t){this.setCurrent(t)}length(){return this._locations.length}destroy(){this.spine=void 0,this.request=void 0,this.pause=void 0,this.q.stop(),this.q=void 0,this.epubcfi=void 0,this._locations=void 0,this.total=void 0,this.break=void 0,this._current=void 0,this.currentLocation=void 0,this._currentCfi=void 0,clearTimeout(this.processingTimeout)}}r()(m.prototype);var y=m,b=i(9),w=i.n(b);var x=class{constructor(t){this.packagePath="",this.directory="",this.encoding="",t&&this.parse(t)}parse(t){var e;if(!t)throw new Error("Container File Not Found");if(!(e=Object(s.qs)(t,"rootfile")))throw new Error("No RootFile Found");this.packagePath=e.getAttribute("full-path"),this.directory=w.a.dirname(this.packagePath),this.encoding=t.xmlEncoding}destroy(){this.packagePath=void 0,this.directory=void 0,this.encoding=void 0}};var E=class{constructor(t){this.manifest={},this.navPath="",this.ncxPath="",this.coverPath="",this.spineNodeIndex=0,this.spine=[],this.metadata={},t&&this.parse(t)}parse(t){var e,i,n;if(!t)throw new Error("Package File Not Found");if(!(e=Object(s.qs)(t,"metadata")))throw new Error("No Metadata Found");if(!(i=Object(s.qs)(t,"manifest")))throw new Error("No Manifest Found");if(!(n=Object(s.qs)(t,"spine")))throw new Error("No Spine Found");return this.manifest=this.parseManifest(i),this.navPath=this.findNavPath(i),this.ncxPath=this.findNcxPath(i,n),this.coverPath=this.findCoverPath(t),this.spineNodeIndex=Object(s.indexOfElementNode)(n),this.spine=this.parseSpine(n,this.manifest),this.uniqueIdentifier=this.findUniqueIdentifier(t),this.metadata=this.parseMetadata(e),this.metadata.direction=n.getAttribute("page-progression-direction"),{metadata:this.metadata,spine:this.spine,manifest:this.manifest,navPath:this.navPath,ncxPath:this.ncxPath,coverPath:this.coverPath,spineNodeIndex:this.spineNodeIndex}}parseMetadata(t){var e={};return e.title=this.getElementText(t,"title"),e.creator=this.getElementText(t,"creator"),e.description=this.getElementText(t,"description"),e.pubdate=this.getElementText(t,"date"),e.publisher=this.getElementText(t,"publisher"),e.identifier=this.getElementText(t,"identifier"),e.language=this.getElementText(t,"language"),e.rights=this.getElementText(t,"rights"),e.modified_date=this.getPropertyText(t,"dcterms:modified"),e.layout=this.getPropertyText(t,"rendition:layout"),e.orientation=this.getPropertyText(t,"rendition:orientation"),e.flow=this.getPropertyText(t,"rendition:flow"),e.viewport=this.getPropertyText(t,"rendition:viewport"),e.media_active_class=this.getPropertyText(t,"media:active-class"),e.spread=this.getPropertyText(t,"rendition:spread"),e}parseManifest(t){var e={},i=Object(s.qsa)(t,"item");return Array.prototype.slice.call(i).forEach((function(t){var i=t.getAttribute("id"),n=t.getAttribute("href")||"",r=t.getAttribute("media-type")||"",s=t.getAttribute("media-overlay")||"",o=t.getAttribute("properties")||"";e[i]={href:n,type:r,overlay:s,properties:o.length?o.split(" "):[]}})),e}parseSpine(t,e){var i=[],n=Object(s.qsa)(t,"itemref");return Array.prototype.slice.call(n).forEach((function(t,e){var n=t.getAttribute("idref"),r=t.getAttribute("properties")||"",s=r.length?r.split(" "):[],o={idref:n,linear:t.getAttribute("linear")||"yes",properties:s,index:e};i.push(o)})),i}findUniqueIdentifier(t){var e=t.documentElement.getAttribute("unique-identifier");if(!e)return"";var i=t.getElementById(e);return i&&"identifier"===i.localName&&"http://purl.org/dc/elements/1.1/"===i.namespaceURI&&i.childNodes.length>0?i.childNodes[0].nodeValue.trim():""}findNavPath(t){var e=Object(s.qsp)(t,"item",{properties:"nav"});return!!e&&e.getAttribute("href")}findNcxPath(t,e){var i,n=Object(s.qsp)(t,"item",{"media-type":"application/x-dtbncx+xml"});return n||(i=e.getAttribute("toc"))&&(n=t.querySelector("#"+i)),!!n&&n.getAttribute("href")}findCoverPath(t){Object(s.qs)(t,"package").getAttribute("version");var e=Object(s.qsp)(t,"item",{properties:"cover-image"});if(e)return e.getAttribute("href");var i=Object(s.qsp)(t,"meta",{name:"cover"});if(i){var n=i.getAttribute("content"),r=t.getElementById(n);return r?r.getAttribute("href"):""}return!1}getElementText(t,e){var i,n=t.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/",e);return n&&0!==n.length&&(i=n[0]).childNodes.length?i.childNodes[0].nodeValue:""}getPropertyText(t,e){var i=Object(s.qsp)(t,"meta",{property:e});return i&&i.childNodes.length?i.childNodes[0].nodeValue:""}load(t){this.metadata=t.metadata;let e=t.readingOrder||t.spine;return this.spine=e.map((t,e)=>(t.index=e,t.linear=t.linear||"yes",t)),t.resources.forEach((t,e)=>{this.manifest[e]=t,t.rel&&"cover"===t.rel[0]&&(this.coverPath=t.href)}),this.spineNodeIndex=0,this.toc=t.toc.map((t,e)=>(t.label=t.title,t)),{metadata:this.metadata,spine:this.spine,manifest:this.manifest,navPath:this.navPath,ncxPath:this.ncxPath,coverPath:this.coverPath,spineNodeIndex:this.spineNodeIndex,toc:this.toc}}destroy(){this.manifest=void 0,this.navPath=void 0,this.ncxPath=void 0,this.coverPath=void 0,this.spineNodeIndex=void 0,this.spine=void 0,this.metadata=void 0}};var S=class{constructor(t){this.toc=[],this.tocByHref={},this.tocById={},this.landmarks=[],this.landmarksByType={},this.length=0,t&&this.parse(t)}parse(t){let e,i,n=t.nodeType;n&&(e=Object(s.qs)(t,"html"),i=Object(s.qs)(t,"ncx")),n?e?(this.toc=this.parseNav(t),this.landmarks=this.parseLandmarks(t)):i&&(this.toc=this.parseNcx(t)):this.toc=this.load(t),this.length=0,this.unpack(this.toc)}unpack(t){for(var e,i=0;i<t.length;i++)(e=t[i]).href&&(this.tocByHref[e.href]=i),e.id&&(this.tocById[e.id]=i),this.length++,e.subitems.length&&this.unpack(e.subitems)}get(t){var e;return t?(0===t.indexOf("#")?e=this.tocById[t.substring(1)]:t in this.tocByHref&&(e=this.tocByHref[t]),this.getByIndex(t,e,this.toc)):this.toc}getByIndex(t,e,i){if(0===i.length)return;const n=i[e];if(!n||t!==n.id&&t!==n.href){let n;for(let r=0;r<i.length&&(n=this.getByIndex(t,e,i[r].subitems),!n);++r);return n}return n}landmark(t){var e;return t?(e=this.landmarksByType[t],this.landmarks[e]):this.landmarks}parseNav(t){var e,i,n=Object(s.querySelectorByType)(t,"nav","toc"),r=n?Object(s.qsa)(n,"li"):[],o=r.length,a={},h=[];if(!r||0===o)return h;for(e=0;e<o;++e)(i=this.navItem(r[e]))&&(a[i.id]=i,i.parent?a[i.parent].subitems.push(i):h.push(i));return h}navItem(t){let e=t.getAttribute("id")||void 0,i=Object(s.filterChildren)(t,"a",!0);if(!i)return;let n=i.getAttribute("href")||"";e||(e=n);let r,o=i.textContent||"",a=Object(s.getParentByTagName)(t,"li");if(a&&(r=a.getAttribute("id"),!r)){const t=Object(s.filterChildren)(a,"a",!0);r=t&&t.getAttribute("href")}for(;!r&&a;)if(a=Object(s.getParentByTagName)(a,"li"),a&&(r=a.getAttribute("id"),!r)){const t=Object(s.filterChildren)(a,"a",!0);r=t&&t.getAttribute("href")}return{id:e,href:n,label:o,subitems:[],parent:r}}parseLandmarks(t){var e,i,n=Object(s.querySelectorByType)(t,"nav","landmarks"),r=n?Object(s.qsa)(n,"li"):[],o=r.length,a=[];if(!r||0===o)return a;for(e=0;e<o;++e)(i=this.landmarkItem(r[e]))&&(a.push(i),this.landmarksByType[i.type]=e);return a}landmarkItem(t){let e=Object(s.filterChildren)(t,"a",!0);if(!e)return;let i=e.getAttributeNS("http://www.idpf.org/2007/ops","type")||void 0;return{href:e.getAttribute("href")||"",label:e.textContent||"",type:i}}parseNcx(t){var e,i,n=Object(s.qsa)(t,"navPoint"),r=n.length,o={},a=[];if(!n||0===r)return a;for(e=0;e<r;++e)o[(i=this.ncxItem(n[e])).id]=i,i.parent?o[i.parent].subitems.push(i):a.push(i);return a}ncxItem(t){var e,i=t.getAttribute("id")||!1,n=Object(s.qs)(t,"content").getAttribute("src"),r=Object(s.qs)(t,"navLabel"),o=r.textContent?r.textContent:"",a=t.parentNode;return!a||"navPoint"!==a.nodeName&&"navPoint"!==a.nodeName.split(":").slice(-1)[0]||(e=a.getAttribute("id")),{id:i,href:n,label:o,subitems:[],parent:e}}load(t){return t.map(t=>(t.label=t.title,t.subitems=t.children?this.load(t.children):[],t))}forEach(t){return this.toc.forEach(t)}},_={application:{ecmascript:["es","ecma"],javascript:"js",ogg:"ogx",pdf:"pdf",postscript:["ps","ai","eps","epsi","epsf","eps2","eps3"],"rdf+xml":"rdf",smil:["smi","smil"],"xhtml+xml":["xhtml","xht"],xml:["xml","xsl","xsd","opf","ncx"],zip:"zip","x-httpd-eruby":"rhtml","x-latex":"latex","x-maker":["frm","maker","frame","fm","fb","book","fbdoc"],"x-object":"o","x-shockwave-flash":["swf","swfl"],"x-silverlight":"scr","epub+zip":"epub","font-tdpfr":"pfr","inkml+xml":["ink","inkml"],json:"json","jsonml+json":"jsonml","mathml+xml":"mathml","metalink+xml":"metalink",mp4:"mp4s","omdoc+xml":"omdoc",oxps:"oxps","vnd.amazon.ebook":"azw",widget:"wgt","x-dtbook+xml":"dtb","x-dtbresource+xml":"res","x-font-bdf":"bdf","x-font-ghostscript":"gsf","x-font-linux-psf":"psf","x-font-otf":"otf","x-font-pcf":"pcf","x-font-snf":"snf","x-font-ttf":["ttf","ttc"],"x-font-type1":["pfa","pfb","pfm","afm"],"x-font-woff":"woff","x-mobipocket-ebook":["prc","mobi"],"x-mspublisher":"pub","x-nzb":"nzb","x-tgif":"obj","xaml+xml":"xaml","xml-dtd":"dtd","xproc+xml":"xpl","xslt+xml":"xslt","internet-property-stream":"acx","x-compress":"z","x-compressed":"tgz","x-gzip":"gz"},audio:{flac:"flac",midi:["mid","midi","kar","rmi"],mpeg:["mpga","mpega","mp2","mp3","m4a","mp2a","m2a","m3a"],mpegurl:"m3u",ogg:["oga","ogg","spx"],"x-aiff":["aif","aiff","aifc"],"x-ms-wma":"wma","x-wav":"wav",adpcm:"adp",mp4:"mp4a",webm:"weba","x-aac":"aac","x-caf":"caf","x-matroska":"mka","x-pn-realaudio-plugin":"rmp",xm:"xm",mid:["mid","rmi"]},image:{gif:"gif",ief:"ief",jpeg:["jpeg","jpg","jpe"],pcx:"pcx",png:"png","svg+xml":["svg","svgz"],tiff:["tiff","tif"],"x-icon":"ico",bmp:"bmp",webp:"webp","x-pict":["pic","pct"],"x-tga":"tga","cis-cod":"cod"},text:{"cache-manifest":["manifest","appcache"],css:"css",csv:"csv",html:["html","htm","shtml","stm"],mathml:"mml",plain:["txt","text","brf","conf","def","list","log","in","bas"],richtext:"rtx","tab-separated-values":"tsv","x-bibtex":"bib"},video:{mpeg:["mpeg","mpg","mpe","m1v","m2v","mp2","mpa","mpv2"],mp4:["mp4","mp4v","mpg4"],quicktime:["qt","mov"],ogg:"ogv","vnd.mpegurl":["mxu","m4u"],"x-flv":"flv","x-la-asf":["lsf","lsx"],"x-mng":"mng","x-ms-asf":["asf","asx","asr"],"x-ms-wm":"wm","x-ms-wmv":"wmv","x-ms-wmx":"wmx","x-ms-wvx":"wvx","x-msvideo":"avi","x-sgi-movie":"movie","x-matroska":["mpv","mkv","mk3d","mks"],"3gpp2":"3g2",h261:"h261",h263:"h263",h264:"h264",jpeg:"jpgv",jpm:["jpm","jpgm"],mj2:["mj2","mjp2"],"vnd.ms-playready.media.pyv":"pyv","vnd.uvvu.mp4":["uvu","uvvu"],"vnd.vivo":"viv",webm:"webm","x-f4v":"f4v","x-m4v":"m4v","x-ms-vob":"vob","x-smv":"smv"}},O=function(){var t,e,i,n,r={};for(t in _)if(_.hasOwnProperty(t))for(e in _[t])if(_[t].hasOwnProperty(e))if("string"==typeof(i=_[t][e]))r[i]=t+"/"+e;else for(n=0;n<i.length;n++)r[i[n]]=t+"/"+e;return r}();var C={lookup:function(t){return t&&O[t.split(".").pop().toLowerCase()]||"text/plain"}};var T=class{constructor(t,e){this.settings={replacements:e&&e.replacements||"base64",archive:e&&e.archive,resolver:e&&e.resolver,request:e&&e.request},this.process(t)}process(t){this.manifest=t,this.resources=Object.keys(t).map((function(e){return t[e]})),this.replacementUrls=[],this.html=[],this.assets=[],this.css=[],this.urls=[],this.cssUrls=[],this.split(),this.splitUrls()}split(){this.html=this.resources.filter((function(t){if("application/xhtml+xml"===t.type||"text/html"===t.type)return!0})),this.assets=this.resources.filter((function(t){if("application/xhtml+xml"!==t.type&&"text/html"!==t.type)return!0})),this.css=this.resources.filter((function(t){if("text/css"===t.type)return!0}))}splitUrls(){this.urls=this.assets.map(function(t){return t.href}.bind(this)),this.cssUrls=this.css.map((function(t){return t.href}))}createUrl(t){var e=new o.a(t),i=C.lookup(e.filename);return this.settings.archive?this.settings.archive.createUrl(t,{base64:"base64"===this.settings.replacements}):"base64"===this.settings.replacements?this.settings.request(t,"blob").then(t=>Object(s.blob2base64)(t)).then(t=>Object(s.createBase64Url)(t,i)):this.settings.request(t,"blob").then(t=>Object(s.createBlobUrl)(t,i))}replacements(){if("none"===this.settings.replacements)return new Promise(function(t){t(this.urls)}.bind(this));var t=this.urls.map(t=>{var e=this.settings.resolver(t);return this.createUrl(e).catch(t=>(console.error(t),null))});return Promise.all(t).then(t=>(this.replacementUrls=t.filter(t=>"string"==typeof t),t))}replaceCss(t,e){var i=[];return t=t||this.settings.archive,e=e||this.settings.resolver,this.cssUrls.forEach(function(n){var r=this.createCssFile(n,t,e).then(function(t){var e=this.urls.indexOf(n);e>-1&&(this.replacementUrls[e]=t)}.bind(this));i.push(r)}.bind(this)),Promise.all(i)}createCssFile(t){if(w.a.isAbsolute(t))return new Promise((function(t){t()}));var e,i=this.settings.resolver(t);e=this.settings.archive?this.settings.archive.getText(i):this.settings.request(i,"text");var n=this.urls.map(t=>{var e=this.settings.resolver(t);return new a.a(i).relative(e)});return e?e.then(t=>(t=Object(c.e)(t,n,this.replacementUrls),"base64"===this.settings.replacements?Object(s.createBase64Url)(t,"text/css"):Object(s.createBlobUrl)(t,"text/css")),t=>new Promise((function(t){t()}))):new Promise((function(t){t()}))}relativeTo(t,e){return e=e||this.settings.resolver,this.urls.map(function(i){var n=e(i);return new a.a(t).relative(n)}.bind(this))}get(t){var e=this.urls.indexOf(t);if(-1!==e)return this.replacementUrls.length?new Promise(function(t,i){t(this.replacementUrls[e])}.bind(this)):this.createUrl(t)}substitute(t,e){var i;return i=e?this.relativeTo(e):this.urls,Object(c.e)(t,i,this.replacementUrls)}destroy(){this.settings=void 0,this.manifest=void 0,this.resources=void 0,this.replacementUrls=void 0,this.html=void 0,this.assets=void 0,this.css=void 0,this.urls=void 0,this.cssUrls=void 0}};var k=class{constructor(t){this.pages=[],this.locations=[],this.epubcfi=new h.a,this.firstPage=0,this.lastPage=0,this.totalPages=0,this.toc=void 0,this.ncx=void 0,t&&(this.pageList=this.parse(t)),this.pageList&&this.pageList.length&&this.process(this.pageList)}parse(t){var e=Object(s.qs)(t,"html"),i=Object(s.qs)(t,"ncx");return e?this.parseNav(t):i?this.parseNcx(t):void 0}parseNav(t){var e,i,n=Object(s.querySelectorByType)(t,"nav","page-list"),r=n?Object(s.qsa)(n,"li"):[],o=r.length,a=[];if(!r||0===o)return a;for(e=0;e<o;++e)i=this.item(r[e]),a.push(i);return a}parseNcx(t){var e,i,n,r,o=[],a=0;if(!(i=Object(s.qs)(t,"pageList")))return o;if(r=(n=Object(s.qsa)(i,"pageTarget")).length,!n||0===n.length)return o;for(a=0;a<r;++a)e=this.ncxItem(n[a]),o.push(e);return o}ncxItem(t){var e=Object(s.qs)(t,"navLabel"),i=Object(s.qs)(e,"text").textContent;return{href:Object(s.qs)(t,"content").getAttribute("src"),page:parseInt(i,10)}}item(t){var e,i,n=Object(s.qs)(t,"a"),r=n.getAttribute("href")||"",o=n.textContent||"",a=parseInt(o);return-1!=r.indexOf("epubcfi")?(i=(e=r.split("#"))[0],{cfi:e.length>1&&e[1],href:r,packageUrl:i,page:a}):{href:r,page:a}}process(t){t.forEach((function(t){this.pages.push(t.page),t.cfi&&this.locations.push(t.cfi)}),this),this.firstPage=parseInt(this.pages[0]),this.lastPage=parseInt(this.pages[this.pages.length-1]),this.totalPages=this.lastPage-this.firstPage}pageFromCfi(t){var e=-1;if(0===this.locations.length)return-1;var i=Object(s.indexOfSorted)(t,this.locations,this.epubcfi.compare);return-1!=i?e=this.pages[i]:void 0!==(e=(i=Object(s.locationOf)(t,this.locations,this.epubcfi.compare))-1>=0?this.pages[i-1]:this.pages[0])||(e=-1),e}cfiFromPage(t){var e=-1;"number"!=typeof t&&(t=parseInt(t));var i=this.pages.indexOf(t);return-1!=i&&(e=this.locations[i]),e}pageFromPercentage(t){return Math.round(this.totalPages*t)}percentageFromPage(t){var e=(t-this.firstPage)/this.totalPages;return Math.round(1e3*e)/1e3}percentageFromCfi(t){var e=this.pageFromCfi(t);return this.percentageFromPage(e)}destroy(){this.pages=void 0,this.locations=void 0,this.epubcfi=void 0,this.pageList=void 0,this.toc=void 0,this.ncx=void 0}},R=i(39),L=i(85),I=i.n(L);var j=class{constructor(){this.zip=void 0,this.urlCache={},this.checkRequirements()}checkRequirements(){try{this.zip=new I.a}catch(t){throw new Error("JSZip lib not loaded")}}open(t,e){return this.zip.loadAsync(t,{base64:e})}openUrl(t,e){return u(t,"binary").then(function(t){return this.zip.loadAsync(t,{base64:e})}.bind(this))}request(t,e){var i,n=new s.defer,r=new a.a(t);return e||(e=r.extension),(i="blob"==e?this.getBlob(t):this.getText(t))?i.then(function(t){let i=this.handleResponse(t,e);n.resolve(i)}.bind(this)):n.reject({message:"File not found in the epub: "+t,stack:(new Error).stack}),n.promise}handleResponse(t,e){return"json"==e?JSON.parse(t):Object(s.isXml)(e)?Object(s.parse)(t,"text/xml"):"xhtml"==e?Object(s.parse)(t,"application/xhtml+xml"):"html"==e||"htm"==e?Object(s.parse)(t,"text/html"):t}getBlob(t,e){var i=window.decodeURIComponent(t.substr(1)),n=this.zip.file(i);if(n)return e=e||C.lookup(n.name),n.async("uint8array").then((function(t){return new Blob([t],{type:e})}))}getText(t,e){var i=window.decodeURIComponent(t.substr(1)),n=this.zip.file(i);if(n)return n.async("string").then((function(t){return t}))}getBase64(t,e){var i=window.decodeURIComponent(t.substr(1)),n=this.zip.file(i);if(n)return e=e||C.lookup(n.name),n.async("base64").then((function(t){return"data:"+e+";base64,"+t}))}createUrl(t,e){var i,n,r=new s.defer,o=window.URL||window.webkitURL||window.mozURL,a=e&&e.base64;return t in this.urlCache?(r.resolve(this.urlCache[t]),r.promise):(a?(n=this.getBase64(t))&&n.then(function(e){this.urlCache[t]=e,r.resolve(e)}.bind(this)):(n=this.getBlob(t))&&n.then(function(e){i=o.createObjectURL(e),this.urlCache[t]=i,r.resolve(i)}.bind(this)),n||r.reject({message:"File not found in the epub: "+t,stack:(new Error).stack}),r.promise)}revokeUrl(t){var e=window.URL||window.webkitURL||window.mozURL,i=this.urlCache[t];i&&e.revokeObjectURL(i)}destroy(){var t=window.URL||window.webkitURL||window.mozURL;for(let e in this.urlCache)t.revokeObjectURL(e);this.zip=void 0,this.urlCache={}}},N=i(57),A=i.n(N);class P{constructor(t,e,i){this.urlCache={},this.storage=void 0,this.name=t,this.requester=e||u,this.resolver=i,this.online=!0,this.checkRequirements(),this.addListeners()}checkRequirements(){try{let t;void 0===A.a&&(t=A.a),this.storage=t.createInstance({name:this.name})}catch(t){throw new Error("localForage lib not loaded")}}addListeners(){this._status=this.status.bind(this),window.addEventListener("online",this._status),window.addEventListener("offline",this._status)}removeListeners(){window.removeEventListener("online",this._status),window.removeEventListener("offline",this._status),this._status=void 0}status(t){let e=navigator.onLine;this.online=e,e?this.emit("online",this):this.emit("offline",this)}add(t,e){let i=t.resources.map(t=>{let{href:i}=t,n=this.resolver(i),r=window.encodeURIComponent(n);return this.storage.getItem(r).then(t=>!t||e?this.requester(n,"binary").then(t=>this.storage.setItem(r,t)):t)});return Promise.all(i)}put(t,e,i){let n=window.encodeURIComponent(t);return this.storage.getItem(n).then(r=>r||this.requester(t,"binary",e,i).then(t=>this.storage.setItem(n,t)))}request(t,e,i,n){return this.online?this.requester(t,e,i,n).then(e=>(this.put(t),e)):this.retrieve(t,e)}retrieve(t,e){new s.defer;var i=new a.a(t);return e||(e=i.extension),("blob"==e?this.getBlob(t):this.getText(t)).then(i=>{var n,r=new s.defer;return i?(n=this.handleResponse(i,e),r.resolve(n)):r.reject({message:"File not found in storage: "+t,stack:(new Error).stack}),r.promise})}handleResponse(t,e){return"json"==e?JSON.parse(t):Object(s.isXml)(e)?Object(s.parse)(t,"text/xml"):"xhtml"==e?Object(s.parse)(t,"application/xhtml+xml"):"html"==e||"htm"==e?Object(s.parse)(t,"text/html"):t}getBlob(t,e){let i=window.encodeURIComponent(t);return this.storage.getItem(i).then((function(i){if(i)return e=e||C.lookup(t),new Blob([i],{type:e})}))}getText(t,e){let i=window.encodeURIComponent(t);return e=e||C.lookup(t),this.storage.getItem(i).then((function(t){var i,n=new s.defer,r=new FileReader;if(t)return i=new Blob([t],{type:e}),r.addEventListener("loadend",()=>{n.resolve(r.result)}),r.readAsText(i,e),n.promise}))}getBase64(t,e){let i=window.encodeURIComponent(t);return e=e||C.lookup(t),this.storage.getItem(i).then(t=>{var i,n=new s.defer,r=new FileReader;if(t)return i=new Blob([t],{type:e}),r.addEventListener("loadend",()=>{n.resolve(r.result)}),r.readAsDataURL(i,e),n.promise})}createUrl(t,e){var i,n,r=new s.defer,o=window.URL||window.webkitURL||window.mozURL,a=e&&e.base64;return t in this.urlCache?(r.resolve(this.urlCache[t]),r.promise):(a?(n=this.getBase64(t))&&n.then(function(e){this.urlCache[t]=e,r.resolve(e)}.bind(this)):(n=this.getBlob(t))&&n.then(function(e){i=o.createObjectURL(e),this.urlCache[t]=i,r.resolve(i)}.bind(this)),n||r.reject({message:"File not found in storage: "+t,stack:(new Error).stack}),r.promise)}revokeUrl(t){var e=window.URL||window.webkitURL||window.mozURL,i=this.urlCache[t];i&&e.revokeObjectURL(i)}destroy(){var t=window.URL||window.webkitURL||window.mozURL;for(let e in this.urlCache)t.revokeObjectURL(e);this.urlCache={},this.removeListeners()}}r()(P.prototype);var D=P;var z=class{constructor(t){this.interactive="",this.fixedLayout="",this.openToSpread="",this.orientationLock="",t&&this.parse(t)}parse(t){if(!t)return this;const e=Object(s.qs)(t,"display_options");if(!e)return this;return Object(s.qsa)(e,"option").forEach(t=>{let e="";switch(t.childNodes.length&&(e=t.childNodes[0].nodeValue),t.attributes.name.value){case"interactive":this.interactive=e;break;case"fixed-layout":this.fixedLayout=e;break;case"open-to-spread":this.openToSpread=e;break;case"orientation-lock":this.orientationLock=e}}),this}destroy(){this.interactive=void 0,this.fixedLayout=void 0,this.openToSpread=void 0,this.orientationLock=void 0}};const B="binary",q="base64",M="epub",U="opf",F="json",W="directory";class H{constructor(t,e){void 0===e&&"string"!=typeof t&&t instanceof Blob==!1&&t instanceof ArrayBuffer==!1&&(e=t,t=void 0),this.settings=Object(s.extend)(this.settings||{},{requestMethod:void 0,requestCredentials:void 0,requestHeaders:void 0,encoding:void 0,replacements:void 0,canonical:void 0,openAs:void 0,store:void 0}),Object(s.extend)(this.settings,e),this.opening=new s.defer,this.opened=this.opening.promise,this.isOpen=!1,this.loading={manifest:new s.defer,spine:new s.defer,metadata:new s.defer,cover:new s.defer,navigation:new s.defer,pageList:new s.defer,resources:new s.defer,displayOptions:new s.defer},this.loaded={manifest:this.loading.manifest.promise,spine:this.loading.spine.promise,metadata:this.loading.metadata.promise,cover:this.loading.cover.promise,navigation:this.loading.navigation.promise,pageList:this.loading.pageList.promise,resources:this.loading.resources.promise,displayOptions:this.loading.displayOptions.promise},this.ready=Promise.all([this.loaded.manifest,this.loaded.spine,this.loaded.metadata,this.loaded.cover,this.loaded.navigation,this.loaded.resources,this.loaded.displayOptions]),this.isRendered=!1,this.request=this.settings.requestMethod||u,this.spine=new p,this.locations=new y(this.spine,this.load.bind(this)),this.navigation=void 0,this.pageList=void 0,this.url=void 0,this.path=void 0,this.archived=!1,this.archive=void 0,this.storage=void 0,this.resources=void 0,this.rendition=void 0,this.container=void 0,this.packaging=void 0,this.displayOptions=void 0,this.settings.store&&this.store(this.settings.store),t&&this.open(t,this.settings.openAs).catch(e=>{var i=new Error("Cannot load book at "+t);this.emit(v.c.BOOK.OPEN_FAILED,i)})}open(t,e){var i,n=e||this.determineType(t);return n===B?(this.archived=!0,this.url=new o.a("/",""),i=this.openEpub(t)):n===q?(this.archived=!0,this.url=new o.a("/",""),i=this.openEpub(t,n)):n===M?(this.archived=!0,this.url=new o.a("/",""),i=this.request(t,"binary",this.settings.requestCredentials,this.settings.requestHeaders).then(this.openEpub.bind(this))):n==U?(this.url=new o.a(t),i=this.openPackaging(this.url.Path.toString())):n==F?(this.url=new o.a(t),i=this.openManifest(this.url.Path.toString())):(this.url=new o.a(t),i=this.openContainer("META-INF/container.xml").then(this.openPackaging.bind(this))),i}openEpub(t,e){return this.unarchive(t,e||this.settings.encoding).then(()=>this.openContainer("META-INF/container.xml")).then(t=>this.openPackaging(t))}openContainer(t){return this.load(t).then(t=>(this.container=new x(t),this.resolve(this.container.packagePath)))}openPackaging(t){return this.path=new a.a(t),this.load(t).then(t=>(this.packaging=new E(t),this.unpack(this.packaging)))}openManifest(t){return this.path=new a.a(t),this.load(t).then(t=>(this.packaging=new E,this.packaging.load(t),this.unpack(this.packaging)))}load(t){var e=this.resolve(t);return this.archived?this.archive.request(e):this.request(e,null,this.settings.requestCredentials,this.settings.requestHeaders)}resolve(t,e){if(t){var i=t;return t.indexOf("://")>-1?t:(this.path&&(i=this.path.resolve(t)),0!=e&&this.url&&(i=this.url.resolve(i)),i)}}canonical(t){return t?this.settings.canonical?this.settings.canonical(t):this.resolve(t,!0):""}determineType(t){var e;return"base64"===this.settings.encoding?q:"string"!=typeof t?B:((e=new o.a(t).path().extension)&&(e=e.replace(/\?.*$/,"")),e?"epub"===e?M:"opf"===e?U:"json"===e?F:void 0:W)}unpack(t){this.package=t,""===this.packaging.metadata.layout?this.load(this.url.resolve("META-INF/com.apple.ibooks.display-options.xml")).then(t=>{this.displayOptions=new z(t),this.loading.displayOptions.resolve(this.displayOptions)}).catch(t=>{this.displayOptions=new z,this.loading.displayOptions.resolve(this.displayOptions)}):(this.displayOptions=new z,this.loading.displayOptions.resolve(this.displayOptions)),this.spine.unpack(this.packaging,this.resolve.bind(this),this.canonical.bind(this)),this.resources=new T(this.packaging.manifest,{archive:this.archive,resolver:this.resolve.bind(this),request:this.request.bind(this),replacements:this.settings.replacements||(this.archived?"blobUrl":"base64")}),this.loadNavigation(this.packaging).then(()=>{this.loading.navigation.resolve(this.navigation)}),this.packaging.coverPath&&(this.cover=this.resolve(this.packaging.coverPath)),this.loading.manifest.resolve(this.packaging.manifest),this.loading.metadata.resolve(this.packaging.metadata),this.loading.spine.resolve(this.spine),this.loading.cover.resolve(this.cover),this.loading.resources.resolve(this.resources),this.loading.pageList.resolve(this.pageList),this.isOpen=!0,this.archived||this.settings.replacements&&"none"!=this.settings.replacements?this.replacements().then(()=>{this.loaded.displayOptions.then(()=>{this.opening.resolve(this)})}).catch(t=>{console.error(t)}):this.loaded.displayOptions.then(()=>{this.opening.resolve(this)})}loadNavigation(t){let e=t.navPath||t.ncxPath,i=t.toc;return i?new Promise((e,n)=>{this.navigation=new S(i),t.pageList&&(this.pageList=new k(t.pageList)),e(this.navigation)}):e?this.load(e,"xml").then(t=>(this.navigation=new S(t),this.pageList=new k(t),this.navigation)):new Promise((t,e)=>{this.navigation=new S,this.pageList=new k,t(this.navigation)})}section(t){return this.spine.get(t)}renderTo(t,e){return this.rendition=new R.a(this,e),this.rendition.attachTo(t),this.rendition}setRequestCredentials(t){this.settings.requestCredentials=t}setRequestHeaders(t){this.settings.requestHeaders=t}unarchive(t,e){return this.archive=new j,this.archive.open(t,e)}store(t){let e=this.settings.replacements&&"none"!==this.settings.replacements,i=this.url,n=this.settings.requestMethod||u.bind(this);return this.storage=new D(t,n,this.resolve.bind(this)),this.request=this.storage.request.bind(this.storage),this.opened.then(()=>{this.archived&&(this.storage.requester=this.archive.request.bind(this.archive));let t=(t,e)=>{e.output=this.resources.substitute(t,e.url)};this.resources.settings.replacements=e||"blobUrl",this.resources.replacements().then(()=>this.resources.replaceCss()),this.storage.on("offline",()=>{this.url=new o.a("/",""),this.spine.hooks.serialize.register(t)}),this.storage.on("online",()=>{this.url=i,this.spine.hooks.serialize.deregister(t)})}),this.storage}coverUrl(){return this.loaded.cover.then(()=>this.cover?this.archived?this.archive.createUrl(this.cover):this.cover:null)}replacements(){return this.spine.hooks.serialize.register((t,e)=>{e.output=this.resources.substitute(t,e.url)}),this.resources.replacements().then(()=>this.resources.replaceCss())}getRange(t){var e=new h.a(t),i=this.spine.get(e.spinePos),n=this.load.bind(this);return i?i.load(n).then((function(t){return e.toRange(i.document)})):new Promise((t,e)=>{e("CFI could not be found")})}key(t){var e=t||this.packaging.metadata.identifier||this.url.filename;return`epubjs:${v.b}:${e}`}destroy(){this.opened=void 0,this.loading=void 0,this.loaded=void 0,this.ready=void 0,this.isOpen=!1,this.isRendered=!1,this.spine&&this.spine.destroy(),this.locations&&this.locations.destroy(),this.pageList&&this.pageList.destroy(),this.archive&&this.archive.destroy(),this.resources&&this.resources.destroy(),this.container&&this.container.destroy(),this.packaging&&this.packaging.destroy(),this.rendition&&this.rendition.destroy(),this.displayOptions&&this.displayOptions.destroy(),this.spine=void 0,this.locations=void 0,this.pageList=void 0,this.archive=void 0,this.resources=void 0,this.container=void 0,this.packaging=void 0,this.rendition=void 0,this.navigation=void 0,this.url=void 0,this.path=void 0,this.archived=!1}}r()(H.prototype);e.a=H},function(t,e,i){var n=i(16),r=i(60),s=i(25),o=i(32),a=i(41),h=i(10),l=i(62),c=Object.getOwnPropertyDescriptor;e.f=n?c:function(t,e){if(t=o(t),e=a(e,!0),l)try{return c(t,e)}catch(t){}if(h(t,e))return s(!r.f.call(t,e),t[e])}},function(t,e,i){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,s=r&&!n.call({1:2},1);e.f=s?function(t){var e=r(this,t);return!!e&&e.enumerable}:n},function(t,e,i){var n=i(12),r=i(40),s="".split;t.exports=n((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==r(t)?s.call(t,""):Object(t)}:Object},function(t,e,i){var n=i(16),r=i(12),s=i(63);t.exports=!n&&!r((function(){return 7!=Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a}))},function(t,e,i){var n=i(7),r=i(17),s=n.document,o=r(s)&&r(s.createElement);t.exports=function(t){return o?s.createElement(t):{}}},function(t,e,i){var n=i(65),r=Function.toString;"function"!=typeof n.inspectSource&&(n.inspectSource=function(t){return r.call(t)}),t.exports=n.inspectSource},function(t,e,i){var n=i(7),r=i(42),s=n["__core-js_shared__"]||r("__core-js_shared__",{});t.exports=s},function(t,e,i){var n=i(34),r=i(65);(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:n?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(t,e){var i=0,n=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++i+n).toString(36)}},function(t,e,i){var n=i(10),r=i(32),s=i(94).indexOf,o=i(44);t.exports=function(t,e){var i,a=r(t),h=0,l=[];for(i in a)!n(o,i)&&n(a,i)&&l.push(i);for(;e.length>h;)n(a,i=e[h++])&&(~s(l,i)||l.push(i));return l}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,i){var n=i(12);t.exports=!!Object.getOwnPropertySymbols&&!n((function(){return!String(Symbol())}))},function(t,e,i){"use strict";var n=i(32),r=i(103),s=i(27),o=i(26),a=i(74),h=o.set,l=o.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){h(this,{type:"Array Iterator",target:n(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,i=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),"values"),s.Arguments=s.Array,r("keys"),r("values"),r("entries")},function(t,e,i){var n=i(16),r=i(18),s=i(13),o=i(73);t.exports=n?Object.defineProperties:function(t,e){s(t);for(var i,n=o(e),a=n.length,h=0;a>h;)r.f(t,i=n[h++],e[i]);return t}},function(t,e,i){var n=i(68),r=i(47);t.exports=Object.keys||function(t){return n(t,r)}},function(t,e,i){"use strict";var n=i(31),r=i(75),s=i(77),o=i(106),a=i(37),h=i(15),l=i(19),c=i(8),u=i(34),d=i(27),f=i(76),p=f.IteratorPrototype,g=f.BUGGY_SAFARI_ITERATORS,v=c("iterator"),m=function(){return this};t.exports=function(t,e,i,c,f,y,b){r(i,e,c);var w,x,E,S=function(t){if(t===f&&k)return k;if(!g&&t in C)return C[t];switch(t){case"keys":case"values":case"entries":return function(){return new i(this,t)}}return function(){return new i(this)}},_=e+" Iterator",O=!1,C=t.prototype,T=C[v]||C["@@iterator"]||f&&C[f],k=!g&&T||S(f),R="Array"==e&&C.entries||T;if(R&&(w=s(R.call(new t)),p!==Object.prototype&&w.next&&(u||s(w)===p||(o?o(w,p):"function"!=typeof w[v]&&h(w,v,m)),a(w,_,!0,!0),u&&(d[_]=m))),"values"==f&&T&&"values"!==T.name&&(O=!0,k=function(){return T.call(this)}),u&&!b||C[v]===k||h(C,v,k),d[e]=k,f)if(x={values:S("values"),keys:y?k:S("keys"),entries:S("entries")},b)for(E in x)(g||O||!(E in C))&&l(C,E,x[E]);else n({target:e,proto:!0,forced:g||O},x);return x}},function(t,e,i){"use strict";var n=i(76).IteratorPrototype,r=i(50),s=i(25),o=i(37),a=i(27),h=function(){return this};t.exports=function(t,e,i){var l=e+" Iterator";return t.prototype=r(n,{next:s(1,i)}),o(t,l,!1,!0),a[l]=h,t}},function(t,e,i){"use strict";var n,r,s,o=i(77),a=i(15),h=i(10),l=i(8),c=i(34),u=l("iterator"),d=!1;[].keys&&("next"in(s=[].keys())?(r=o(o(s)))!==Object.prototype&&(n=r):d=!0),null==n&&(n={}),c||h(n,u)||a(n,u,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},function(t,e,i){var n=i(10),r=i(36),s=i(43),o=i(105),a=s("IE_PROTO"),h=Object.prototype;t.exports=o?Object.getPrototypeOf:function(t){return t=r(t),n(t,a)?t[a]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?h:null}},function(t,e,i){var n=i(12),r=i(8),s=i(34),o=r("iterator");t.exports=!n((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,i="";return t.pathname="c%20d",e.forEach((function(t,n){e.delete("b"),i+=n+t})),s&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host}))},function(t,e){t.exports=function(t,e,i){if(!(t instanceof e))throw TypeError("Incorrect "+(i?i+" ":"")+"invocation");return t}},function(t,e,i){var n=i(126);t.exports=function(t,e,i){if(n(t),void 0===e)return t;switch(i){case 0:return function(){return t.call(e)};case 1:return function(i){return t.call(e,i)};case 2:return function(i,n){return t.call(e,i,n)};case 3:return function(i,n,r){return t.call(e,i,n,r)}}return function(){return t.apply(e,arguments)}}},function(t,e,i){var n=i(130),r=i(40),s=i(8)("toStringTag"),o="Arguments"==r(function(){return arguments}());t.exports=n?r:function(t){var e,i,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),s))?i:o?r(e):"Object"==(n=r(e))&&"function"==typeof e.callee?"Arguments":n}},function(t,e,i){var n=i(138),r="object"==typeof self&&self&&self.Object===Object&&self,s=n||r||Function("return this")();t.exports=s},function(t,e,i){var n=i(82).Symbol;t.exports=n},function(t,e,i){var n=i(55),r=i(53);t.exports=function(t,e,i){var s=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return r(i)&&(s="leading"in i?!!i.leading:s,o="trailing"in i?!!i.trailing:o),n(t,e,{leading:s,maxWait:e,trailing:o})}},function(t,i){t.exports=e},function(t,e,i){"use strict";i.r(e),function(t){var n=i(58),r=i(39),s=i(2),o=i(28),a=i(0),h=i(1);i(54),i(22),i(56);function l(t,e){return new n.a(t,e)}l.VERSION=h.b,void 0!==t&&(t.EPUBJS_VERSION=h.b),l.Book=n.a,l.Rendition=r.a,l.Contents=o.a,l.CFI=s.a,l.utils=a,e.default=l}.call(this,i(30))},function(t,e,i){"use strict";i(88);var n=i(19),r=i(12),s=i(8),o=i(48),a=i(15),h=s("species"),l=!r((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),c="$0"==="a".replace(/./,"$0"),u=s("replace"),d=!!/./[u]&&""===/./[u]("a","$0"),f=!r((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var i="ab".split(t);return 2!==i.length||"a"!==i[0]||"b"!==i[1]}));t.exports=function(t,e,i,u){var p=s(t),g=!r((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),v=g&&!r((function(){var e=!1,i=/a/;return"split"===t&&((i={}).constructor={},i.constructor[h]=function(){return i},i.flags="",i[p]=/./[p]),i.exec=function(){return e=!0,null},i[p](""),!e}));if(!g||!v||"replace"===t&&(!l||!c||d)||"split"===t&&!f){var m=/./[p],y=i(p,""[t],(function(t,e,i,n,r){return e.exec===o?g&&!r?{done:!0,value:m.call(e,i,n)}:{done:!0,value:t.call(i,e,n)}:{done:!1}}),{REPLACE_KEEPS_$0:c,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:d}),b=y[0],w=y[1];n(String.prototype,t,b),n(RegExp.prototype,p,2==e?function(t,e){return w.call(t,this,e)}:function(t){return w.call(t,this)})}u&&a(RegExp.prototype[p],"sham",!0)}},function(t,e,i){"use strict";var n=i(31),r=i(48);n({target:"RegExp",proto:!0,forced:/./.exec!==r},{exec:r})},function(t,e,i){var n=i(7),r=i(64),s=n.WeakMap;t.exports="function"==typeof s&&/native code/.test(r(s))},function(t,e,i){var n=i(10),r=i(91),s=i(59),o=i(18);t.exports=function(t,e){for(var i=r(e),a=o.f,h=s.f,l=0;l<i.length;l++){var c=i[l];n(t,c)||a(t,c,h(e,c))}}},function(t,e,i){var n=i(45),r=i(93),s=i(69),o=i(13);t.exports=n("Reflect","ownKeys")||function(t){var e=r.f(o(t)),i=s.f;return i?e.concat(i(t)):e}},function(t,e,i){var n=i(7);t.exports=n},function(t,e,i){var n=i(68),r=i(47).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,r)}},function(t,e,i){var n=i(32),r=i(46),s=i(95),o=function(t){return function(e,i,o){var a,h=n(e),l=r(h.length),c=s(o,l);if(t&&i!=i){for(;l>c;)if((a=h[c++])!=a)return!0}else for(;l>c;c++)if((t||c in h)&&h[c]===i)return t||c||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,i){var n=i(35),r=Math.max,s=Math.min;t.exports=function(t,e){var i=n(t);return i<0?r(i+e,0):s(i,e)}},function(t,e,i){var n=i(12),r=/#|\.prototype\./,s=function(t,e){var i=a[o(t)];return i==l||i!=h&&("function"==typeof e?n(e):!!e)},o=s.normalize=function(t){return String(t).replace(r,".").toLowerCase()},a=s.data={},h=s.NATIVE="N",l=s.POLYFILL="P";t.exports=s},function(t,e,i){"use strict";var n=i(13);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,i){"use strict";var n=i(12);function r(t,e){return RegExp(t,e)}e.UNSUPPORTED_Y=n((function(){var t=r("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),e.BROKEN_CARET=n((function(){var t=r("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,e,i){var n=i(70);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,i){"use strict";var n=i(49).charAt;t.exports=function(t,e,i){return e+(i?n(t,e).length:1)}},function(t,e,i){var n=i(40),r=i(48);t.exports=function(t,e){var i=t.exec;if("function"==typeof i){var s=i.call(t,e);if("object"!=typeof s)throw TypeError("RegExp exec method returned something other than an Object or null");return s}if("RegExp"!==n(t))throw TypeError("RegExp#exec called on incompatible receiver");return r.call(t,e)}},function(t,e){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,e,i){var n=i(8),r=i(50),s=i(18),o=n("unscopables"),a=Array.prototype;null==a[o]&&s.f(a,o,{configurable:!0,value:r(null)}),t.exports=function(t){a[o][t]=!0}},function(t,e,i){var n=i(45);t.exports=n("document","documentElement")},function(t,e,i){var n=i(12);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,i){var n=i(13),r=i(107);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(i,[]),e=i instanceof Array}catch(t){}return function(i,s){return n(i),r(s),e?t.call(i,s):i.__proto__=s,i}}():void 0)},function(t,e,i){var n=i(17);t.exports=function(t){if(!n(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,e,i){"use strict";var n=i(109),r=i(117),s=i(118),o=i(119);(t.exports=function(t,e){var i,s,a,h,l;return arguments.length<2||"string"!=typeof t?(h=e,e=t,t=null):h=arguments[2],null==t?(i=a=!0,s=!1):(i=o.call(t,"c"),s=o.call(t,"e"),a=o.call(t,"w")),l={value:e,configurable:i,enumerable:s,writable:a},h?n(r(h),l):l}).gs=function(t,e,i){var a,h,l,c;return"string"!=typeof t?(l=i,i=e,e=t,t=null):l=arguments[3],null==e?e=void 0:s(e)?null==i?i=void 0:s(i)||(l=i,i=void 0):(l=e,e=i=void 0),null==t?(a=!0,h=!1):(a=o.call(t,"c"),h=o.call(t,"e")),c={get:e,set:i,configurable:a,enumerable:h},l?n(r(l),c):c}},function(t,e,i){"use strict";t.exports=i(110)()?Object.assign:i(111)},function(t,e,i){"use strict";t.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},function(t,e,i){"use strict";var n=i(112),r=i(116),s=Math.max;t.exports=function(t,e){var i,o,a,h=s(arguments.length,2);for(t=Object(r(t)),a=function(n){try{t[n]=e[n]}catch(t){i||(i=t)}},o=1;o<h;++o)n(e=arguments[o]).forEach(a);if(void 0!==i)throw i;return t}},function(t,e,i){"use strict";t.exports=i(113)()?Object.keys:i(114)},function(t,e,i){"use strict";t.exports=function(){try{return Object.keys("primitive"),!0}catch(t){return!1}}},function(t,e,i){"use strict";var n=i(51),r=Object.keys;t.exports=function(t){return r(n(t)?Object(t):t)}},function(t,e,i){"use strict";t.exports=function(){}},function(t,e,i){"use strict";var n=i(51);t.exports=function(t){if(!n(t))throw new TypeError("Cannot use null or undefined");return t}},function(t,e,i){"use strict";var n=i(51),r=Array.prototype.forEach,s=Object.create,o=function(t,e){var i;for(i in t)e[i]=t[i]};t.exports=function(t){var e=s(null);return r.call(arguments,(function(t){n(t)&&o(Object(t),e)})),e}},function(t,e,i){"use strict";t.exports=function(t){return"function"==typeof t}},function(t,e,i){"use strict";t.exports=i(120)()?String.prototype.contains:i(121)},function(t,e,i){"use strict";var n="razdwatrzy";t.exports=function(){return"function"==typeof n.contains&&(!0===n.contains("dwa")&&!1===n.contains("foo"))}},function(t,e,i){"use strict";var n=String.prototype.indexOf;t.exports=function(t){return n.call(this,t,arguments[1])>-1}},function(t,e,i){"use strict";t.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},function(t,e,i){"use strict";var n=i(49).charAt,r=i(26),s=i(74),o=r.set,a=r.getterFor("String Iterator");s(String,"String",(function(t){o(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=a(this),i=e.string,r=e.index;return r>=i.length?{value:void 0,done:!0}:(t=n(i,r),e.index+=t.length,{value:t,done:!1})}))},function(t,e,i){"use strict";var n=i(16),r=i(12),s=i(73),o=i(69),a=i(60),h=i(36),l=i(61),c=Object.assign,u=Object.defineProperty;t.exports=!c||r((function(){if(n&&1!==c({b:1},c(u({},"a",{enumerable:!0,get:function(){u(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol();return t[i]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=c({},t)[i]||"abcdefghijklmnopqrst"!=s(c({},e)).join("")}))?function(t,e){for(var i=h(t),r=arguments.length,c=1,u=o.f,d=a.f;r>c;)for(var f,p=l(arguments[c++]),g=u?s(p).concat(u(p)):s(p),v=g.length,m=0;v>m;)f=g[m++],n&&!d.call(p,f)||(i[f]=p[f]);return i}:c},function(t,e,i){"use strict";var n=i(80),r=i(36),s=i(127),o=i(128),a=i(46),h=i(129),l=i(52);t.exports=function(t){var e,i,c,u,d,f,p=r(t),g="function"==typeof this?this:Array,v=arguments.length,m=v>1?arguments[1]:void 0,y=void 0!==m,b=l(p),w=0;if(y&&(m=n(m,v>2?arguments[2]:void 0,2)),null==b||g==Array&&o(b))for(i=new g(e=a(p.length));e>w;w++)f=y?m(p[w],w):p[w],h(i,w,f);else for(d=(u=b.call(p)).next,i=new g;!(c=d.call(u)).done;w++)f=y?s(u,m,[c.value,w],!0):c.value,h(i,w,f);return i.length=w,i}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,i){var n=i(13);t.exports=function(t,e,i,r){try{return r?e(n(i)[0],i[1]):e(i)}catch(e){var s=t.return;throw void 0!==s&&n(s.call(t)),e}}},function(t,e,i){var n=i(8),r=i(27),s=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[s]===t)}},function(t,e,i){"use strict";var n=i(41),r=i(18),s=i(25);t.exports=function(t,e,i){var o=n(e);o in t?r.f(t,o,s(0,i)):t[o]=i}},function(t,e,i){var n={};n[i(8)("toStringTag")]="z",t.exports="[object z]"===String(n)},function(t,e,i){"use strict";var n=/[^\0-\u007E]/,r=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",o=Math.floor,a=String.fromCharCode,h=function(t){return t+22+75*(t<26)},l=function(t,e,i){var n=0;for(t=i?o(t/700):t>>1,t+=o(t/e);t>455;n+=36)t=o(t/35);return o(n+36*t/(t+38))},c=function(t){var e,i,n=[],r=(t=function(t){for(var e=[],i=0,n=t.length;i<n;){var r=t.charCodeAt(i++);if(r>=55296&&r<=56319&&i<n){var s=t.charCodeAt(i++);56320==(64512&s)?e.push(((1023&r)<<10)+(1023&s)+65536):(e.push(r),i--)}else e.push(r)}return e}(t)).length,c=128,u=0,d=72;for(e=0;e<t.length;e++)(i=t[e])<128&&n.push(a(i));var f=n.length,p=f;for(f&&n.push("-");p<r;){var g=2147483647;for(e=0;e<t.length;e++)(i=t[e])>=c&&i<g&&(g=i);var v=p+1;if(g-c>o((2147483647-u)/v))throw RangeError(s);for(u+=(g-c)*v,c=g,e=0;e<t.length;e++){if((i=t[e])<c&&++u>2147483647)throw RangeError(s);if(i==c){for(var m=u,y=36;;y+=36){var b=y<=d?1:y>=d+26?26:y-d;if(m<b)break;var w=m-b,x=36-b;n.push(a(h(b+w%x))),m=o(w/x)}n.push(a(h(m))),d=l(u,v,p==f),u=0,++p}}++u,++c}return n.join("")};t.exports=function(t){var e,i,s=[],o=t.toLowerCase().replace(r,".").split(".");for(e=0;e<o.length;e++)i=o[e],s.push(n.test(i)?"xn--"+c(i):i);return s.join(".")}},function(t,e,i){"use strict";i(71);var n=i(31),r=i(45),s=i(78),o=i(19),a=i(133),h=i(37),l=i(75),c=i(26),u=i(79),d=i(10),f=i(80),p=i(81),g=i(13),v=i(17),m=i(50),y=i(25),b=i(134),w=i(52),x=i(8),E=r("fetch"),S=r("Headers"),_=x("iterator"),O=c.set,C=c.getterFor("URLSearchParams"),T=c.getterFor("URLSearchParamsIterator"),k=/\+/g,R=Array(4),L=function(t){return R[t-1]||(R[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},I=function(t){try{return decodeURIComponent(t)}catch(e){return t}},j=function(t){var e=t.replace(k," "),i=4;try{return decodeURIComponent(e)}catch(t){for(;i;)e=e.replace(L(i--),I);return e}},N=/[!'()~]|%20/g,A={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},P=function(t){return A[t]},D=function(t){return encodeURIComponent(t).replace(N,P)},z=function(t,e){if(e)for(var i,n,r=e.split("&"),s=0;s<r.length;)(i=r[s++]).length&&(n=i.split("="),t.push({key:j(n.shift()),value:j(n.join("="))}))},B=function(t){this.entries.length=0,z(this.entries,t)},q=function(t,e){if(t<e)throw TypeError("Not enough arguments")},M=l((function(t,e){O(this,{type:"URLSearchParamsIterator",iterator:b(C(t).entries),kind:e})}),"Iterator",(function(){var t=T(this),e=t.kind,i=t.iterator.next(),n=i.value;return i.done||(i.value="keys"===e?n.key:"values"===e?n.value:[n.key,n.value]),i})),U=function(){u(this,U,"URLSearchParams");var t,e,i,n,r,s,o,a,h,l=arguments.length>0?arguments[0]:void 0,c=this,f=[];if(O(c,{type:"URLSearchParams",entries:f,updateURL:function(){},updateSearchParams:B}),void 0!==l)if(v(l))if("function"==typeof(t=w(l)))for(i=(e=t.call(l)).next;!(n=i.call(e)).done;){if((o=(s=(r=b(g(n.value))).next).call(r)).done||(a=s.call(r)).done||!s.call(r).done)throw TypeError("Expected sequence with length 2");f.push({key:o.value+"",value:a.value+""})}else for(h in l)d(l,h)&&f.push({key:h,value:l[h]+""});else z(f,"string"==typeof l?"?"===l.charAt(0)?l.slice(1):l:l+"")},F=U.prototype;a(F,{append:function(t,e){q(arguments.length,2);var i=C(this);i.entries.push({key:t+"",value:e+""}),i.updateURL()},delete:function(t){q(arguments.length,1);for(var e=C(this),i=e.entries,n=t+"",r=0;r<i.length;)i[r].key===n?i.splice(r,1):r++;e.updateURL()},get:function(t){q(arguments.length,1);for(var e=C(this).entries,i=t+"",n=0;n<e.length;n++)if(e[n].key===i)return e[n].value;return null},getAll:function(t){q(arguments.length,1);for(var e=C(this).entries,i=t+"",n=[],r=0;r<e.length;r++)e[r].key===i&&n.push(e[r].value);return n},has:function(t){q(arguments.length,1);for(var e=C(this).entries,i=t+"",n=0;n<e.length;)if(e[n++].key===i)return!0;return!1},set:function(t,e){q(arguments.length,1);for(var i,n=C(this),r=n.entries,s=!1,o=t+"",a=e+"",h=0;h<r.length;h++)(i=r[h]).key===o&&(s?r.splice(h--,1):(s=!0,i.value=a));s||r.push({key:o,value:a}),n.updateURL()},sort:function(){var t,e,i,n=C(this),r=n.entries,s=r.slice();for(r.length=0,i=0;i<s.length;i++){for(t=s[i],e=0;e<i;e++)if(r[e].key>t.key){r.splice(e,0,t);break}e===i&&r.push(t)}n.updateURL()},forEach:function(t){for(var e,i=C(this).entries,n=f(t,arguments.length>1?arguments[1]:void 0,3),r=0;r<i.length;)n((e=i[r++]).value,e.key,this)},keys:function(){return new M(this,"keys")},values:function(){return new M(this,"values")},entries:function(){return new M(this,"entries")}},{enumerable:!0}),o(F,_,F.entries),o(F,"toString",(function(){for(var t,e=C(this).entries,i=[],n=0;n<e.length;)t=e[n++],i.push(D(t.key)+"="+D(t.value));return i.join("&")}),{enumerable:!0}),h(U,"URLSearchParams"),n({global:!0,forced:!s},{URLSearchParams:U}),s||"function"!=typeof E||"function"!=typeof S||n({global:!0,enumerable:!0,forced:!0},{fetch:function(t){var e,i,n,r=[t];return arguments.length>1&&(v(e=arguments[1])&&(i=e.body,"URLSearchParams"===p(i)&&((n=e.headers?new S(e.headers):new S).has("content-type")||n.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),e=m(e,{body:y(0,String(i)),headers:y(0,n)}))),r.push(e)),E.apply(this,r)}}),t.exports={URLSearchParams:U,getState:C}},function(t,e,i){var n=i(19);t.exports=function(t,e,i){for(var r in e)n(t,r,e[r],i);return t}},function(t,e,i){var n=i(13),r=i(52);t.exports=function(t){var e=r(t);if("function"!=typeof e)throw TypeError(String(t)+" is not iterable");return n(e.call(t))}},function(t,e,i){"use strict";function n(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}Object.defineProperty(e,"__esModule",{value:!0}),e.createElement=n,e.default={createElement:n}},function(t,e,i){"use strict";function n(t,e){function i(i){for(var n=e.length-1;n>=0;n--){var o=e[n],a=i.clientX,h=i.clientY;if(i.touches&&i.touches.length&&(a=i.touches[0].clientX,h=i.touches[0].clientY),s(o,t,a,h)){o.dispatchEvent(r(i));break}}}if("iframe"===t.nodeName||"IFRAME"===t.nodeName)try{this.target=t.contentDocument}catch(e){this.target=t}else this.target=t;for(var n=["mouseup","mousedown","click","touchstart"],o=0;o<n.length;o++){var a=n[o];this.target.addEventListener(a,(function(t){return i(t)}),!1)}}function r(t){var e=Object.assign({},t,{bubbles:!1});try{return new MouseEvent(t.type,e)}catch(n){var i=document.createEvent("MouseEvents");return i.initMouseEvent(t.type,!1,e.cancelable,e.view,e.detail,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget),i}}function s(t,e,i,n){var r=e.getBoundingClientRect();function s(t,e,i){var n=t.top-r.top,s=t.left-r.left,o=n+t.height,a=s+t.width;return n<=i&&s<=e&&o>i&&a>e}if(!s(t.getBoundingClientRect(),i,n))return!1;for(var o=t.getClientRects(),a=0,h=o.length;a<h;a++)if(s(o[a],i,n))return!0;return!1}Object.defineProperty(e,"__esModule",{value:!0}),e.proxyMouse=n,e.clone=r,e.default={proxyMouse:n}},function(t,e,i){var n=i(82);t.exports=function(){return n.Date.now()}},function(t,e,i){(function(e){var i="object"==typeof e&&e&&e.Object===Object&&e;t.exports=i}).call(this,i(30))},function(t,e,i){var n=i(53),r=i(140),s=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,h=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(r(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(s,"");var i=a.test(t);return i||h.test(t)?l(t.slice(2),i?2:8):o.test(t)?NaN:+t}},function(t,e,i){var n=i(141),r=i(144);t.exports=function(t){return"symbol"==typeof t||r(t)&&"[object Symbol]"==n(t)}},function(t,e,i){var n=i(83),r=i(142),s=i(143),o=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?r(t):s(t)}},function(t,e,i){var n=i(83),r=Object.prototype,s=r.hasOwnProperty,o=r.toString,a=n?n.toStringTag:void 0;t.exports=function(t){var e=s.call(t,a),i=t[a];try{t[a]=void 0;var n=!0}catch(t){}var r=o.call(t);return n&&(e?t[a]=i:delete t[a]),r}},function(t,e){var i=Object.prototype.toString;t.exports=function(t){return i.call(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}}]).default})); | ||
| 1 | \ No newline at end of file | \ No newline at end of file | |
| @@ -1,13 +0,0 @@ | |||
| 1 | /*! | ||
| 2 | |||
| 3 | JSZip v3.10.1 - A JavaScript class for generating and reading zip files | ||
| 4 | <http://stuartk.com/jszip> | ||
| 5 | |||
| 6 | (c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com> | ||
| 7 | Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. | ||
| 8 | |||
| 9 | JSZip uses the library pako released under the MIT license : | ||
| 10 | https://github.com/nodeca/pako/blob/main/LICENSE | ||
| 11 | */ | ||
| 12 | |||
| 13 | !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){"use strict";var d=e("./utils"),c=e("./support"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c="string"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join("")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u="data:";if(e.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function A(e,t){var r,n="";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo("string",i(n));return R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on("data",function(e){t.processChunk(e)}),e.on("end",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on("error",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(e,t,r){"use strict";var u=e("../compressions"),n=e("./ZipFileWorker");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+" is not a valid compression method !");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo("file",{name:e,dir:i,date:s,comment:t.comment||"",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(e,t,r){"use strict";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var e=new n;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e("./object")).loadAsync=e("./load"),n.support=e("./support"),n.defaults=e("./defaults"),n.version="3.10.1",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e("./external"),t.exports=n},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(e,t,r){"use strict";var u=e("./utils"),i=e("./external"),n=e("./utf8"),s=e("./zipEntries"),a=e("./stream/Crc32Probe"),l=e("./nodejsUtils");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on("error",function(e){t(e)}).on("end",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error("Corrupted zip : CRC32 mismatch")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):u.prepareContent("the loaded zip file",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../stream/GenericWorker");function s(e,t){i.call(this,"Nodejs stream input adapter for "+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on("data",function(e){t.push({data:e,meta:{percent:0}})}).on("error",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on("end",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{"../stream/GenericWorker":28,"../utils":32}],13:[function(e,t,r){"use strict";var i=e("readable-stream").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on("data",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on("error",function(e){n.emit("error",e)}).on("end",function(){n.push(null)})}e("../utils").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{"../utils":32,"readable-stream":16}],14:[function(e,t,r){"use strict";t.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if("number"==typeof e)throw new Error('The "data" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&"function"==typeof e.on&&"function"==typeof e.pause&&"function"==typeof e.resume}}},{}],15:[function(e,t,r){"use strict";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),"string"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a="string"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t="",s.compression="STORE",i="string");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e("./utf8"),u=e("./utils"),l=e("./stream/GenericWorker"),a=e("./stream/StreamHelper"),f=e("./defaults"),c=e("./compressedObject"),d=e("./zipObject"),o=e("./generate"),p=e("./nodejsUtils"),m=e("./nodejs/NodejsStreamInputAdapter"),_=function(e){"/"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf("/");return 0<t?e.substring(0,t):""},g=function(e){return"/"!==e.slice(-1)&&(e+="/"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||("/"!==r.slice(-1)&&(r+="/"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),"binarystring"===r.type&&(r.type="string"),!r.type)throw new Error("No output type specified.");u.checkSupport(r.type),"darwin"!==r.platform&&"freebsd"!==r.platform&&"linux"!==r.platform&&"sunos"!==r.platform||(r.platform="UNIX"),"win32"===r.platform&&(r.platform="DOS");var n=r.comment||this.comment||"";t=o.generateWorker(this,r,n)}catch(e){(t=new l("error")).error(e)}return new a(t,r.type||"string",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type="nodebuffer"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(e,t,r){"use strict";t.exports=e("stream")},{stream:void 0}],17:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],18:[function(e,t,r){"use strict";var n=e("../utils");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+e+"). Corrupted zip ?")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on("data",function(e){t.processChunk(e)}),e.on("end",function(){t.end()}),e.on("error",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e="Worker "+this.name;return this.previous?this.previous+" -> "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case"string":return t.join("");case"array":return Array.prototype.concat.apply([],t);case"uint8array":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case"nodebuffer":return Buffer.concat(t);default:throw new Error("concat : unsupported type '"+e+"'")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return"data"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new o(this,{objectMode:"nodebuffer"!==this._outputType},e)}},t.exports=f},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(e,t,r){"use strict";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,r.nodebuffer="undefined"!=typeof Buffer,r.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:"application/zip"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob("application/zip").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e("readable-stream").Readable}catch(e){r.nodestream=!1}},{"readable-stream":16}],31:[function(e,t,s){"use strict";for(var o=e("./utils"),h=e("./support"),r=e("./nodejsUtils"),n=e("./stream/GenericWorker"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,"utf-8 decode"),this.leftOver=null}function l(){n.call(this,"utf-8 encode")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,"utf-8"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e("setimmediate"),a.newBlob=function(t,r){a.checkSupport("blob");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error("Bug : can't construct the Blob.")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)"array"===t||"nodebuffer"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join("")},stringifyByChar:function(e){for(var t="",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if("uint8array"===r?n=i.applyCanBeUsed.uint8array:"nodebuffer"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||"",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split("/"),r=[],n=0;n<t.length;n++){var i=t[n];"."===i||""===i&&0!==n&&n!==t.length-1||(".."===i?r.pop():r.push(i))}return r.join("/")},a.getTypeOf=function(e){return"string"==typeof e?"string":"[object Array]"===Object.prototype.toString.call(e)?"array":o.nodebuffer&&r.isBuffer(e)?"nodebuffer":o.uint8array&&e instanceof Uint8Array?"uint8array":o.arraybuffer&&e instanceof ArrayBuffer?"arraybuffer":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+" is not supported by this platform")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n="";for(r=0;r<(e||"").length;r++)n+="\\x"+((t=e.charCodeAt(r))<16?"0":"")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(n)))&&"undefined"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?("arraybuffer"===t?e=a.transformTo("uint8array",e):"string"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error("Can't read the data of '"+r+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(e,t,r){"use strict";var n=e("./reader/readerFor"),i=e("./utils"),s=e("./signature"),a=e("./zipEntry"),o=e("./support");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+i.pretty(t)+", expected "+i.pretty(e)+")")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?"uint8array":"array",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip: can't find end of central directory");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error("Corrupted zip: missing "+Math.abs(n)+" bytes.")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(e,t,r){"use strict";var n=e("./reader/readerFor"),s=e("./utils"),i=e("./compressedObject"),a=e("./crc32"),o=e("./utf8"),h=e("./compressions"),u=e("./support");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(e,t,r){"use strict";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e("./stream/StreamHelper"),i=e("./stream/DataWorker"),a=e("./utf8"),o=e("./compressedObject"),h=e("./stream/GenericWorker");n.prototype={internalStream:function(e){var t=null,r="string";try{if(!e)throw new Error("No output type specified.");var n="string"===(r=e.toLowerCase())||"text"===r;"binarystring"!==r&&"text"!==r||(r="string"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h("error")).error(e)}return new s(t,r,"")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||"nodebuffer").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],l=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(e,l,t){(function(t){"use strict";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode("");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r="document"in t&&"onreadystatechange"in t.document.createElement("script")?function(){var e=t.document.createElement("script");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(e,t,r){"use strict";var i=e("immediate");function u(){}var l={},s=["REJECTED"],a=["FULFILLED"],n=["PENDING"];function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError("Cannot resolve promise with itself")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});"error"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status="success"}catch(e){r.status="error",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if("function"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===a||"function"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if("error"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){"use strict";var n={};(0,e("./lib/utils/common").assign)(n,e("./lib/deflate"),e("./lib/inflate"),e("./lib/zlib/constants")),t.exports=n},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(e,t,r){"use strict";var a=e("./zlib/deflate"),o=e("./utils/common"),h=e("./utils/strings"),i=e("./zlib/messages"),s=e("./zlib/zstream"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:""},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n="string"==typeof t.dictionary?h.string2buf(t.dictionary):"[object ArrayBuffer]"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,"string"==typeof e?i.input=h.string2buf(e):"[object ArrayBuffer]"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||("string"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(e,t,r){"use strict";var c=e("./zlib/inflate"),d=e("./utils/common"),p=e("./utils/strings"),m=e("./zlib/constants"),n=e("./zlib/messages"),i=e("./zlib/zstream"),s=e("./zlib/gzheader"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,"string"==typeof e?h.input=p.binstring2buf(e):"[object ArrayBuffer]"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o="string"==typeof l?p.string2buf(l):"[object ArrayBuffer]"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||("string"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){"use strict";var h=e("./common"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r="",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){"use strict";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(e,t,r){"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){"use strict";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg="invalid literal/length code",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg="invalid distance code",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg="invalid distance too far back",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){"use strict";var I=e("../utils/common"),O=e("./adler32"),B=e("./crc32"),R=e("./inffast"),T=e("./inftrees"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=30;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg="header crc mismatch",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg="too many length or distance symbols",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg="incorrect data check",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(e,t,r){"use strict";var D=e("../utils/common"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{"../utils/common":41}],51:[function(e,t,r){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(e,t,r){"use strict";var i=e("../utils/common"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){"use strict";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&"string"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[10])(10)}); | ||
| 13 | \ No newline at end of file | \ No newline at end of file | |
| @@ -1,7 +0,0 @@ | |||
| 1 | /*! | ||
| 2 | localForage -- Offline Storage, Improved | ||
| 3 | Version 1.10.0 | ||
| 4 | https://localforage.github.io/localForage | ||
| 5 | (c) 2013-2017 Mozilla, Apache License 2.0 | ||
| 6 | */ | ||
| 7 | !function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.localforage=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){(function(a){"use strict";function c(){k=!0;for(var a,b,c=l.length;c;){for(b=l,l=[],a=-1;++a<c;)b[a]();c=l.length}k=!1}function d(a){1!==l.push(a)||k||e()}var e,f=a.MutationObserver||a.WebKitMutationObserver;if(f){var g=0,h=new f(c),i=a.document.createTextNode("");h.observe(i,{characterData:!0}),e=function(){i.data=g=++g%2}}else if(a.setImmediate||void 0===a.MessageChannel)e="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var b=a.document.createElement("script");b.onreadystatechange=function(){c(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var j=new a.MessageChannel;j.port1.onmessage=c,e=function(){j.port2.postMessage(0)}}var k,l=[];b.exports=d}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(a,b,c){"use strict";function d(){}function e(a){if("function"!=typeof a)throw new TypeError("resolver must be a function");this.state=s,this.queue=[],this.outcome=void 0,a!==d&&i(this,a)}function f(a,b,c){this.promise=a,"function"==typeof b&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),"function"==typeof c&&(this.onRejected=c,this.callRejected=this.otherCallRejected)}function g(a,b,c){o(function(){var d;try{d=b(c)}catch(b){return p.reject(a,b)}d===a?p.reject(a,new TypeError("Cannot resolve promise with itself")):p.resolve(a,d)})}function h(a){var b=a&&a.then;if(a&&("object"==typeof a||"function"==typeof a)&&"function"==typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f=!0,p.reject(a,b))}function d(b){f||(f=!0,p.resolve(a,b))}function e(){b(d,c)}var f=!1,g=j(e);"error"===g.status&&c(g.value)}function j(a,b){var c={};try{c.value=a(b),c.status="success"}catch(a){c.status="error",c.value=a}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var b=new this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){g[b]=a,++h!==e||f||(f=!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f=!0,p.reject(j,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=new Array(e),h=0,i=-1,j=new this(d);++i<e;)b(a[i],i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f=!0,p.resolve(h,a))},function(a){f||(f=!0,p.reject(h,a))})}var c=this;if("[object Array]"!==Object.prototype.toString.call(a))return this.reject(new TypeError("must be an array"));var e=a.length,f=!1;if(!e)return this.resolve([]);for(var g=-1,h=new this(d);++g<e;)b(a[g]);return h}var o=a(1),p={},q=["REJECTED"],r=["FULFILLED"],s=["PENDING"];b.exports=e,e.prototype.catch=function(a){return this.then(null,a)},e.prototype.then=function(a,b){if("function"!=typeof a&&this.state===r||"function"!=typeof b&&this.state===q)return this;var c=new this.constructor(d);if(this.state!==s){g(c,this.state===r?a:b,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilled=function(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilled=function(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejected=function(a){p.reject(this.promise,a)},f.prototype.otherCallRejected=function(a){g(this.promise,this.onRejected,a)},p.resolve=function(a,b){var c=j(h,b);if("error"===c.status)return p.reject(a,c.value);var d=c.value;if(d)i(a,d);else{a.state=r,a.outcome=b;for(var e=-1,f=a.queue.length;++e<f;)a.queue[e].callFulfilled(b)}return a},p.reject=function(a,b){a.state=q,a.outcome=b;for(var c=-1,d=a.queue.length;++c<d;)a.queue[c].callRejected(b);return a},e.resolve=k,e.reject=l,e.all=m,e.race=n},{1:1}],3:[function(a,b,c){(function(b){"use strict";"function"!=typeof b.Promise&&(b.Promise=a(2))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(a){return}}function f(){try{if(!ua||!ua.open)return!1;var a="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),b="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!a||b)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(a){return!1}}function g(a,b){a=a||[],b=b||{};try{return new Blob(a,b)}catch(f){if("TypeError"!==f.name)throw f;for(var c="undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder,d=new c,e=0;e<a.length;e+=1)d.append(a[e]);return d.getBlob(b.type)}}function h(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}function i(a,b,c){"function"==typeof b&&a.then(b),"function"==typeof c&&a.catch(c)}function j(a){return"string"!=typeof a&&(console.warn(a+" used as a key, but it is not a string."),a=String(a)),a}function k(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}function l(a){for(var b=a.length,c=new ArrayBuffer(b),d=new Uint8Array(c),e=0;e<b;e++)d[e]=a.charCodeAt(e);return c}function m(a){return new va(function(b){var c=a.transaction(wa,Ba),d=g([""]);c.objectStore(wa).put(d,"key"),c.onabort=function(a){a.preventDefault(),a.stopPropagation(),b(!1)},c.oncomplete=function(){var a=navigator.userAgent.match(/Chrome\/(\d+)/),c=navigator.userAgent.match(/Edge\//);b(c||!a||parseInt(a[1],10)>=43)}}).catch(function(){return!1})}function n(a){return"boolean"==typeof xa?va.resolve(xa):m(a).then(function(a){return xa=a})}function o(a){var b=ya[a.name],c={};c.promise=new va(function(a,b){c.resolve=a,c.reject=b}),b.deferredOperations.push(c),b.dbReady?b.dbReady=b.dbReady.then(function(){return c.promise}):b.dbReady=c.promise}function p(a){var b=ya[a.name],c=b.deferredOperations.pop();if(c)return c.resolve(),c.promise}function q(a,b){var c=ya[a.name],d=c.deferredOperations.pop();if(d)return d.reject(b),d.promise}function r(a,b){return new va(function(c,d){if(ya[a.name]=ya[a.name]||B(),a.db){if(!b)return c(a.db);o(a),a.db.close()}var e=[a.name];b&&e.push(a.version);var f=ua.open.apply(ua,e);b&&(f.onupgradeneeded=function(b){var c=f.result;try{c.createObjectStore(a.storeName),b.oldVersion<=1&&c.createObjectStore(wa)}catch(c){if("ConstraintError"!==c.name)throw c;console.warn('The database "'+a.name+'" has been upgraded from version '+b.oldVersion+" to version "+b.newVersion+', but the storage "'+a.storeName+'" already exists.')}}),f.onerror=function(a){a.preventDefault(),d(f.error)},f.onsuccess=function(){var b=f.result;b.onversionchange=function(a){a.target.close()},c(b),p(a)}})}function s(a){return r(a,!1)}function t(a){return r(a,!0)}function u(a,b){if(!a.db)return!0;var c=!a.db.objectStoreNames.contains(a.storeName),d=a.version<a.db.version,e=a.version>a.db.version;if(d&&(a.version!==b&&console.warn('The database "'+a.name+"\" can't be downgraded from version "+a.db.version+" to version "+a.version+"."),a.version=a.db.version),e||c){if(c){var f=a.db.version+1;f>a.version&&(a.version=f)}return!0}return!1}function v(a){return new va(function(b,c){var d=new FileReader;d.onerror=c,d.onloadend=function(c){var d=btoa(c.target.result||"");b({__local_forage_encoded_blob:!0,data:d,type:a.type})},d.readAsBinaryString(a)})}function w(a){return g([l(atob(a.data))],{type:a.type})}function x(a){return a&&a.__local_forage_encoded_blob}function y(a){var b=this,c=b._initReady().then(function(){var a=ya[b._dbInfo.name];if(a&&a.dbReady)return a.dbReady});return i(c,a,a),c}function z(a){o(a);for(var b=ya[a.name],c=b.forages,d=0;d<c.length;d++){var e=c[d];e._dbInfo.db&&(e._dbInfo.db.close(),e._dbInfo.db=null)}return a.db=null,s(a).then(function(b){return a.db=b,u(a)?t(a):b}).then(function(d){a.db=b.db=d;for(var e=0;e<c.length;e++)c[e]._dbInfo.db=d}).catch(function(b){throw q(a,b),b})}function A(a,b,c,d){void 0===d&&(d=1);try{var e=a.db.transaction(a.storeName,b);c(null,e)}catch(e){if(d>0&&(!a.db||"InvalidStateError"===e.name||"NotFoundError"===e.name))return va.resolve().then(function(){if(!a.db||"NotFoundError"===e.name&&!a.db.objectStoreNames.contains(a.storeName)&&a.version<=a.db.version)return a.db&&(a.version=a.db.version+1),t(a)}).then(function(){return z(a).then(function(){A(a,b,c,d-1)})}).catch(c);c(e)}}function B(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function C(a){function b(){return va.resolve()}var c=this,d={db:null};if(a)for(var e in a)d[e]=a[e];var f=ya[d.name];f||(f=B(),ya[d.name]=f),f.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=y);for(var g=[],h=0;h<f.forages.length;h++){var i=f.forages[h];i!==c&&g.push(i._initReady().catch(b))}var j=f.forages.slice(0);return va.all(g).then(function(){return d.db=f.db,s(d)}).then(function(a){return d.db=a,u(d,c._defaultConfig.version)?t(d):a}).then(function(a){d.db=f.db=a,c._dbInfo=d;for(var b=0;b<j.length;b++){var e=j[b];e!==c&&(e._dbInfo.db=d.db,e._dbInfo.version=d.version)}})}function D(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.get(a);h.onsuccess=function(){var a=h.result;void 0===a&&(a=null),x(a)&&(a=w(a)),b(a)},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function E(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.openCursor(),i=1;h.onsuccess=function(){var c=h.result;if(c){var d=c.value;x(d)&&(d=w(d));var e=a(d,c.key,i++);void 0!==e?b(e):c.continue()}else b()},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function F(a,b,c){var d=this;a=j(a);var e=new va(function(c,e){var f;d.ready().then(function(){return f=d._dbInfo,"[object Blob]"===za.call(b)?n(f.db).then(function(a){return a?b:v(b)}):b}).then(function(b){A(d._dbInfo,Ba,function(f,g){if(f)return e(f);try{var h=g.objectStore(d._dbInfo.storeName);null===b&&(b=void 0);var i=h.put(b,a);g.oncomplete=function(){void 0===b&&(b=null),c(b)},g.onabort=g.onerror=function(){var a=i.error?i.error:i.transaction.error;e(a)}}catch(a){e(a)}})}).catch(e)});return h(e,c),e}function G(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){A(c._dbInfo,Ba,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.delete(a);f.oncomplete=function(){b()},f.onerror=function(){d(h.error)},f.onabort=function(){var a=h.error?h.error:h.transaction.error;d(a)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function H(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Ba,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.clear();e.oncomplete=function(){a()},e.onabort=e.onerror=function(){var a=g.error?g.error:g.transaction.error;c(a)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function I(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Aa,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.count();g.onsuccess=function(){a(g.result)},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function J(a,b){var c=this,d=new va(function(b,d){if(a<0)return void b(null);c.ready().then(function(){A(c._dbInfo,Aa,function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=!1,i=g.openKeyCursor();i.onsuccess=function(){var c=i.result;if(!c)return void b(null);0===a?b(c.key):h?b(c.key):(h=!0,c.advance(a))},i.onerror=function(){d(i.error)}}catch(a){d(a)}})}).catch(d)});return h(d,b),d}function K(a){var b=this,c=new va(function(a,c){b.ready().then(function(){A(b._dbInfo,Aa,function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.openKeyCursor(),h=[];g.onsuccess=function(){var b=g.result;if(!b)return void a(h);h.push(b.key),b.continue()},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return h(c,a),c}function L(a,b){b=k.apply(this,arguments);var c=this.config();a="function"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;if(a.name){var f=a.name===c.name&&e._dbInfo.db,g=f?va.resolve(e._dbInfo.db):s(a).then(function(b){var c=ya[a.name],d=c.forages;c.db=b;for(var e=0;e<d.length;e++)d[e]._dbInfo.db=b;return b});d=a.storeName?g.then(function(b){if(b.objectStoreNames.contains(a.storeName)){var c=b.version+1;o(a);var d=ya[a.name],e=d.forages;b.close();for(var f=0;f<e.length;f++){var g=e[f];g._dbInfo.db=null,g._dbInfo.version=c}return new va(function(b,d){var e=ua.open(a.name,c);e.onerror=function(a){e.result.close(),d(a)},e.onupgradeneeded=function(){e.result.deleteObjectStore(a.storeName)},e.onsuccess=function(){var a=e.result;a.close(),b(a)}}).then(function(a){d.db=a;for(var b=0;b<e.length;b++){var c=e[b];c._dbInfo.db=a,p(c._dbInfo)}}).catch(function(b){throw(q(a,b)||va.resolve()).catch(function(){}),b})}}):g.then(function(b){o(a);var c=ya[a.name],d=c.forages;b.close();for(var e=0;e<d.length;e++){d[e]._dbInfo.db=null}return new va(function(b,c){var d=ua.deleteDatabase(a.name);d.onerror=function(){var a=d.result;a&&a.close(),c(d.error)},d.onblocked=function(){console.warn('dropInstance blocked for database "'+a.name+'" until all open connections are closed')},d.onsuccess=function(){var a=d.result;a&&a.close(),b(a)}}).then(function(a){c.db=a;for(var b=0;b<d.length;b++)p(d[b]._dbInfo)}).catch(function(b){throw(q(a,b)||va.resolve()).catch(function(){}),b})})}else d=va.reject("Invalid arguments");return h(d,b),d}function M(){return"function"==typeof openDatabase}function N(a){var b,c,d,e,f,g=.75*a.length,h=a.length,i=0;"="===a[a.length-1]&&(g--,"="===a[a.length-2]&&g--);var j=new ArrayBuffer(g),k=new Uint8Array(j);for(b=0;b<h;b+=4)c=Da.indexOf(a[b]),d=Da.indexOf(a[b+1]),e=Da.indexOf(a[b+2]),f=Da.indexOf(a[b+3]),k[i++]=c<<2|d>>4,k[i++]=(15&d)<<4|e>>2,k[i++]=(3&e)<<6|63&f;return j}function O(a){var b,c=new Uint8Array(a),d="";for(b=0;b<c.length;b+=3)d+=Da[c[b]>>2],d+=Da[(3&c[b])<<4|c[b+1]>>4],d+=Da[(15&c[b+1])<<2|c[b+2]>>6],d+=Da[63&c[b+2]];return c.length%3==2?d=d.substring(0,d.length-1)+"=":c.length%3==1&&(d=d.substring(0,d.length-2)+"=="),d}function P(a,b){var c="";if(a&&(c=Ua.call(a)),a&&("[object ArrayBuffer]"===c||a.buffer&&"[object ArrayBuffer]"===Ua.call(a.buffer))){var d,e=Ga;a instanceof ArrayBuffer?(d=a,e+=Ia):(d=a.buffer,"[object Int8Array]"===c?e+=Ka:"[object Uint8Array]"===c?e+=La:"[object Uint8ClampedArray]"===c?e+=Ma:"[object Int16Array]"===c?e+=Na:"[object Uint16Array]"===c?e+=Pa:"[object Int32Array]"===c?e+=Oa:"[object Uint32Array]"===c?e+=Qa:"[object Float32Array]"===c?e+=Ra:"[object Float64Array]"===c?e+=Sa:b(new Error("Failed to get type for BinaryArray"))),b(e+O(d))}else if("[object Blob]"===c){var f=new FileReader;f.onload=function(){var c=Ea+a.type+"~"+O(this.result);b(Ga+Ja+c)},f.readAsArrayBuffer(a)}else try{b(JSON.stringify(a))}catch(c){console.error("Couldn't convert value into a JSON string: ",a),b(null,c)}}function Q(a){if(a.substring(0,Ha)!==Ga)return JSON.parse(a);var b,c=a.substring(Ta),d=a.substring(Ha,Ta);if(d===Ja&&Fa.test(c)){var e=c.match(Fa);b=e[1],c=c.substring(e[0].length)}var f=N(c);switch(d){case Ia:return f;case Ja:return g([f],{type:b});case Ka:return new Int8Array(f);case La:return new Uint8Array(f);case Ma:return new Uint8ClampedArray(f);case Na:return new Int16Array(f);case Pa:return new Uint16Array(f);case Oa:return new Int32Array(f);case Qa:return new Uint32Array(f);case Ra:return new Float32Array(f);case Sa:return new Float64Array(f);default:throw new Error("Unkown type: "+d)}}function R(a,b,c,d){a.executeSql("CREATE TABLE IF NOT EXISTS "+b.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],c,d)}function S(a){var b=this,c={db:null};if(a)for(var d in a)c[d]="string"!=typeof a[d]?a[d].toString():a[d];var e=new va(function(a,d){try{c.db=openDatabase(c.name,String(c.version),c.description,c.size)}catch(a){return d(a)}c.db.transaction(function(e){R(e,c,function(){b._dbInfo=c,a()},function(a,b){d(b)})},d)});return c.serializer=Va,e}function T(a,b,c,d,e,f){a.executeSql(c,d,e,function(a,g){g.code===g.SYNTAX_ERR?a.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[b.storeName],function(a,h){h.rows.length?f(a,g):R(a,b,function(){a.executeSql(c,d,e,f)},f)},f):f(a,g)},f)}function U(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName+" WHERE key = ? LIMIT 1",[a],function(a,c){var d=c.rows.length?c.rows.item(0).value:null;d&&(d=e.serializer.deserialize(d)),b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function V(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT * FROM "+e.storeName,[],function(c,d){for(var f=d.rows,g=f.length,h=0;h<g;h++){var i=f.item(h),j=i.value;if(j&&(j=e.serializer.deserialize(j)),void 0!==(j=a(j,i.key,h+1)))return void b(j)}b()},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function W(a,b,c,d){var e=this;a=j(a);var f=new va(function(f,g){e.ready().then(function(){void 0===b&&(b=null);var h=b,i=e._dbInfo;i.serializer.serialize(b,function(b,j){j?g(j):i.db.transaction(function(c){T(c,i,"INSERT OR REPLACE INTO "+i.storeName+" (key, value) VALUES (?, ?)",[a,b],function(){f(h)},function(a,b){g(b)})},function(b){if(b.code===b.QUOTA_ERR){if(d>0)return void f(W.apply(e,[a,h,c,d-1]));g(b)}})})}).catch(g)});return h(f,c),f}function X(a,b,c){return W.apply(this,[a,b,c,1])}function Y(a,b){var c=this;a=j(a);var d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"DELETE FROM "+e.storeName+" WHERE key = ?",[a],function(){b()},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function Z(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"DELETE FROM "+d.storeName,[],function(){a()},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function $(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT COUNT(key) as c FROM "+d.storeName,[],function(b,c){var d=c.rows.item(0).c;a(d)},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function _(a,b){var c=this,d=new va(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){T(c,e,"SELECT key FROM "+e.storeName+" WHERE id = ? LIMIT 1",[a+1],function(a,c){var d=c.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})}).catch(d)});return h(d,b),d}function aa(a){var b=this,c=new va(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){T(b,d,"SELECT key FROM "+d.storeName,[],function(b,c){for(var d=[],e=0;e<c.rows.length;e++)d.push(c.rows.item(e).key);a(d)},function(a,b){c(b)})})}).catch(c)});return h(c,a),c}function ba(a){return new va(function(b,c){a.transaction(function(d){d.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(c,d){for(var e=[],f=0;f<d.rows.length;f++)e.push(d.rows.item(f).name);b({db:a,storeNames:e})},function(a,b){c(b)})},function(a){c(a)})})}function ca(a,b){b=k.apply(this,arguments);var c=this.config();a="function"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;return d=a.name?new va(function(b){var d;d=a.name===c.name?e._dbInfo.db:openDatabase(a.name,"","",0),b(a.storeName?{db:d,storeNames:[a.storeName]}:ba(d))}).then(function(a){return new va(function(b,c){a.db.transaction(function(d){function e(a){return new va(function(b,c){d.executeSql("DROP TABLE IF EXISTS "+a,[],function(){b()},function(a,b){c(b)})})}for(var f=[],g=0,h=a.storeNames.length;g<h;g++)f.push(e(a.storeNames[g]));va.all(f).then(function(){b()}).catch(function(a){c(a)})},function(a){c(a)})})}):va.reject("Invalid arguments"),h(d,b),d}function da(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(a){return!1}}function ea(a,b){var c=a.name+"/";return a.storeName!==b.storeName&&(c+=a.storeName+"/"),c}function fa(){var a="_localforage_support_test";try{return localStorage.setItem(a,!0),localStorage.removeItem(a),!1}catch(a){return!0}}function ga(){return!fa()||localStorage.length>0}function ha(a){var b=this,c={};if(a)for(var d in a)c[d]=a[d];return c.keyPrefix=ea(a,b._defaultConfig),ga()?(b._dbInfo=c,c.serializer=Va,va.resolve()):va.reject()}function ia(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo.keyPrefix,c=localStorage.length-1;c>=0;c--){var d=localStorage.key(c);0===d.indexOf(a)&&localStorage.removeItem(d)}});return h(c,a),c}function ja(a,b){var c=this;a=j(a);var d=c.ready().then(function(){var b=c._dbInfo,d=localStorage.getItem(b.keyPrefix+a);return d&&(d=b.serializer.deserialize(d)),d});return h(d,b),d}function ka(a,b){var c=this,d=c.ready().then(function(){for(var b=c._dbInfo,d=b.keyPrefix,e=d.length,f=localStorage.length,g=1,h=0;h<f;h++){var i=localStorage.key(h);if(0===i.indexOf(d)){var j=localStorage.getItem(i);if(j&&(j=b.serializer.deserialize(j)),void 0!==(j=a(j,i.substring(e),g++)))return j}}});return h(d,b),d}function la(a,b){var c=this,d=c.ready().then(function(){var b,d=c._dbInfo;try{b=localStorage.key(a)}catch(a){b=null}return b&&(b=b.substring(d.keyPrefix.length)),b});return h(d,b),d}function ma(a){var b=this,c=b.ready().then(function(){for(var a=b._dbInfo,c=localStorage.length,d=[],e=0;e<c;e++){var f=localStorage.key(e);0===f.indexOf(a.keyPrefix)&&d.push(f.substring(a.keyPrefix.length))}return d});return h(c,a),c}function na(a){var b=this,c=b.keys().then(function(a){return a.length});return h(c,a),c}function oa(a,b){var c=this;a=j(a);var d=c.ready().then(function(){var b=c._dbInfo;localStorage.removeItem(b.keyPrefix+a)});return h(d,b),d}function pa(a,b,c){var d=this;a=j(a);var e=d.ready().then(function(){void 0===b&&(b=null);var c=b;return new va(function(e,f){var g=d._dbInfo;g.serializer.serialize(b,function(b,d){if(d)f(d);else try{localStorage.setItem(g.keyPrefix+a,b),e(c)}catch(a){"QuotaExceededError"!==a.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==a.name||f(a),f(a)}})})});return h(e,c),e}function qa(a,b){if(b=k.apply(this,arguments),a="function"!=typeof a&&a||{},!a.name){var c=this.config();a.name=a.name||c.name,a.storeName=a.storeName||c.storeName}var d,e=this;return d=a.name?new va(function(b){b(a.storeName?ea(a,e._defaultConfig):a.name+"/")}).then(function(a){for(var b=localStorage.length-1;b>=0;b--){var c=localStorage.key(b);0===c.indexOf(a)&&localStorage.removeItem(c)}}):va.reject("Invalid arguments"),h(d,b),d}function ra(a,b){a[b]=function(){var c=arguments;return a.ready().then(function(){return a[b].apply(a,c)})}}function sa(){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var c in b)b.hasOwnProperty(c)&&($a(b[c])?arguments[0][c]=b[c].slice():arguments[0][c]=b[c])}return arguments[0]}var ta="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},ua=e();"undefined"==typeof Promise&&a(3);var va=Promise,wa="local-forage-detect-blob-support",xa=void 0,ya={},za=Object.prototype.toString,Aa="readonly",Ba="readwrite",Ca={_driver:"asyncStorage",_initStorage:C,_support:f(),iterate:E,getItem:D,setItem:F,removeItem:G,clear:H,length:I,key:J,keys:K,dropInstance:L},Da="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Ea="~~local_forage_type~",Fa=/^~~local_forage_type~([^~]+)~/,Ga="__lfsc__:",Ha=Ga.length,Ia="arbf",Ja="blob",Ka="si08",La="ui08",Ma="uic8",Na="si16",Oa="si32",Pa="ur16",Qa="ui32",Ra="fl32",Sa="fl64",Ta=Ha+Ia.length,Ua=Object.prototype.toString,Va={serialize:P,deserialize:Q,stringToBuffer:N,bufferToString:O},Wa={_driver:"webSQLStorage",_initStorage:S,_support:M(),iterate:V,getItem:U,setItem:X,removeItem:Y,clear:Z,length:$,key:_,keys:aa,dropInstance:ca},Xa={_driver:"localStorageWrapper",_initStorage:ha,_support:da(),iterate:ka,getItem:ja,setItem:pa,removeItem:oa,clear:ia,length:na,key:la,keys:ma,dropInstance:qa},Ya=function(a,b){return a===b||"number"==typeof a&&"number"==typeof b&&isNaN(a)&&isNaN(b)},Za=function(a,b){for(var c=a.length,d=0;d<c;){if(Ya(a[d],b))return!0;d++}return!1},$a=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},_a={},ab={},bb={INDEXEDDB:Ca,WEBSQL:Wa,LOCALSTORAGE:Xa},cb=[bb.INDEXEDDB._driver,bb.WEBSQL._driver,bb.LOCALSTORAGE._driver],db=["dropInstance"],eb=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(db),fb={description:"",driver:cb.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1},gb=function(){function a(b){d(this,a);for(var c in bb)if(bb.hasOwnProperty(c)){var e=bb[c],f=e._driver;this[c]=f,_a[f]||this.defineDriver(e)}this._defaultConfig=sa({},fb),this._config=sa({},this._defaultConfig,b),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return a.prototype.config=function(a){if("object"===(void 0===a?"undefined":ta(a))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var b in a){if("storeName"===b&&(a[b]=a[b].replace(/\W/g,"_")),"version"===b&&"number"!=typeof a[b])return new Error("Database version must be a number.");this._config[b]=a[b]}return!("driver"in a&&a.driver)||this.setDriver(this._config.driver)}return"string"==typeof a?this._config[a]:this._config},a.prototype.defineDriver=function(a,b,c){var d=new va(function(b,c){try{var d=a._driver,e=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!a._driver)return void c(e);for(var f=eb.concat("_initStorage"),g=0,i=f.length;g<i;g++){var j=f[g];if((!Za(db,j)||a[j])&&"function"!=typeof a[j])return void c(e)}(function(){for(var b=function(a){return function(){var b=new Error("Method "+a+" is not implemented by the current driver"),c=va.reject(b);return h(c,arguments[arguments.length-1]),c}},c=0,d=db.length;c<d;c++){var e=db[c];a[e]||(a[e]=b(e))}})();var k=function(c){_a[d]&&console.info("Redefining LocalForage driver: "+d),_a[d]=a,ab[d]=c,b()};"_support"in a?a._support&&"function"==typeof a._support?a._support().then(k,c):k(!!a._support):k(!0)}catch(a){c(a)}});return i(d,b,c),d},a.prototype.driver=function(){return this._driver||null},a.prototype.getDriver=function(a,b,c){var d=_a[a]?va.resolve(_a[a]):va.reject(new Error("Driver not found."));return i(d,b,c),d},a.prototype.getSerializer=function(a){var b=va.resolve(Va);return i(b,a),b},a.prototype.ready=function(a){var b=this,c=b._driverSet.then(function(){return null===b._ready&&(b._ready=b._initDriver()),b._ready});return i(c,a,a),c},a.prototype.setDriver=function(a,b,c){function d(){g._config.driver=g.driver()}function e(a){return g._extend(a),d(),g._ready=g._initStorage(g._config),g._ready}function f(a){return function(){function b(){for(;c<a.length;){var f=a[c];return c++,g._dbInfo=null,g._ready=null,g.getDriver(f).then(e).catch(b)}d();var h=new Error("No available storage method found.");return g._driverSet=va.reject(h),g._driverSet}var c=0;return b()}}var g=this;$a(a)||(a=[a]);var h=this._getSupportedDrivers(a),j=null!==this._driverSet?this._driverSet.catch(function(){return va.resolve()}):va.resolve();return this._driverSet=j.then(function(){var a=h[0];return g._dbInfo=null,g._ready=null,g.getDriver(a).then(function(a){g._driver=a._driver,d(),g._wrapLibraryMethodsWithReady(),g._initDriver=f(h)})}).catch(function(){d();var a=new Error("No available storage method found.");return g._driverSet=va.reject(a),g._driverSet}),i(this._driverSet,b,c),this._driverSet},a.prototype.supports=function(a){return!!ab[a]},a.prototype._extend=function(a){sa(this,a)},a.prototype._getSupportedDrivers=function(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c];this.supports(e)&&b.push(e)}return b},a.prototype._wrapLibraryMethodsWithReady=function(){for(var a=0,b=eb.length;a<b;a++)ra(this,eb[a])},a.prototype.createInstance=function(b){return new a(b)},a}(),hb=new gb;b.exports=hb},{3:3}]},{},[4])(4)}); | ||
| 7 | \ No newline at end of file | \ No newline at end of file | |
| @@ -1,17398 +0,0 @@ | |||
| 1 | /** | ||
| 2 | * @licstart The following is the entire license notice for the | ||
| 3 | * JavaScript code in this page | ||
| 4 | * | ||
| 5 | * Copyright 2023 Mozilla Foundation | ||
| 6 | * | ||
| 7 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 8 | * you may not use this file except in compliance with the License. | ||
| 9 | * You may obtain a copy of the License at | ||
| 10 | * | ||
| 11 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 12 | * | ||
| 13 | * Unless required by applicable law or agreed to in writing, software | ||
| 14 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 16 | * See the License for the specific language governing permissions and | ||
| 17 | * limitations under the License. | ||
| 18 | * | ||
| 19 | * @licend The above is the entire license notice for the | ||
| 20 | * JavaScript code in this page | ||
| 21 | */ | ||
| 22 | |||
| 23 | /******/ var __webpack_modules__ = ({ | ||
| 24 | |||
| 25 | /***/ 640: | ||
| 26 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 27 | |||
| 28 | |||
| 29 | // EXPORTS | ||
| 30 | __webpack_require__.d(__webpack_exports__, { | ||
| 31 | AnnotationLayer: () => (/* binding */ AnnotationLayer), | ||
| 32 | FreeTextAnnotationElement: () => (/* binding */ FreeTextAnnotationElement), | ||
| 33 | InkAnnotationElement: () => (/* binding */ InkAnnotationElement), | ||
| 34 | StampAnnotationElement: () => (/* binding */ StampAnnotationElement) | ||
| 35 | }); | ||
| 36 | |||
| 37 | // EXTERNAL MODULE: ./src/shared/util.js | ||
| 38 | var util = __webpack_require__(266); | ||
| 39 | // EXTERNAL MODULE: ./src/display/display_utils.js | ||
| 40 | var display_utils = __webpack_require__(473); | ||
| 41 | // EXTERNAL MODULE: ./src/display/annotation_storage.js | ||
| 42 | var annotation_storage = __webpack_require__(780); | ||
| 43 | ;// CONCATENATED MODULE: ./src/shared/scripting_utils.js | ||
| 44 | function makeColorComp(n) { | ||
| 45 | return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); | ||
| 46 | } | ||
| 47 | function scaleAndClamp(x) { | ||
| 48 | return Math.max(0, Math.min(255, 255 * x)); | ||
| 49 | } | ||
| 50 | class ColorConverters { | ||
| 51 | static CMYK_G([c, y, m, k]) { | ||
| 52 | return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; | ||
| 53 | } | ||
| 54 | static G_CMYK([g]) { | ||
| 55 | return ["CMYK", 0, 0, 0, 1 - g]; | ||
| 56 | } | ||
| 57 | static G_RGB([g]) { | ||
| 58 | return ["RGB", g, g, g]; | ||
| 59 | } | ||
| 60 | static G_rgb([g]) { | ||
| 61 | g = scaleAndClamp(g); | ||
| 62 | return [g, g, g]; | ||
| 63 | } | ||
| 64 | static G_HTML([g]) { | ||
| 65 | const G = makeColorComp(g); | ||
| 66 | return `#${G}${G}${G}`; | ||
| 67 | } | ||
| 68 | static RGB_G([r, g, b]) { | ||
| 69 | return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; | ||
| 70 | } | ||
| 71 | static RGB_rgb(color) { | ||
| 72 | return color.map(scaleAndClamp); | ||
| 73 | } | ||
| 74 | static RGB_HTML(color) { | ||
| 75 | return `#${color.map(makeColorComp).join("")}`; | ||
| 76 | } | ||
| 77 | static T_HTML() { | ||
| 78 | return "#00000000"; | ||
| 79 | } | ||
| 80 | static T_rgb() { | ||
| 81 | return [null]; | ||
| 82 | } | ||
| 83 | static CMYK_RGB([c, y, m, k]) { | ||
| 84 | return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; | ||
| 85 | } | ||
| 86 | static CMYK_rgb([c, y, m, k]) { | ||
| 87 | return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; | ||
| 88 | } | ||
| 89 | static CMYK_HTML(components) { | ||
| 90 | const rgb = this.CMYK_RGB(components).slice(1); | ||
| 91 | return this.RGB_HTML(rgb); | ||
| 92 | } | ||
| 93 | static RGB_CMYK([r, g, b]) { | ||
| 94 | const c = 1 - r; | ||
| 95 | const m = 1 - g; | ||
| 96 | const y = 1 - b; | ||
| 97 | const k = Math.min(c, m, y); | ||
| 98 | return ["CMYK", c, m, y, k]; | ||
| 99 | } | ||
| 100 | } | ||
| 101 | |||
| 102 | // EXTERNAL MODULE: ./src/display/xfa_layer.js | ||
| 103 | var xfa_layer = __webpack_require__(160); | ||
| 104 | ;// CONCATENATED MODULE: ./src/display/annotation_layer.js | ||
| 105 | |||
| 106 | |||
| 107 | |||
| 108 | |||
| 109 | |||
| 110 | const DEFAULT_TAB_INDEX = 1000; | ||
| 111 | const DEFAULT_FONT_SIZE = 9; | ||
| 112 | const GetElementsByNameSet = new WeakSet(); | ||
| 113 | function getRectDims(rect) { | ||
| 114 | return { | ||
| 115 | width: rect[2] - rect[0], | ||
| 116 | height: rect[3] - rect[1] | ||
| 117 | }; | ||
| 118 | } | ||
| 119 | class AnnotationElementFactory { | ||
| 120 | static create(parameters) { | ||
| 121 | const subtype = parameters.data.annotationType; | ||
| 122 | switch (subtype) { | ||
| 123 | case util.AnnotationType.LINK: | ||
| 124 | return new LinkAnnotationElement(parameters); | ||
| 125 | case util.AnnotationType.TEXT: | ||
| 126 | return new TextAnnotationElement(parameters); | ||
| 127 | case util.AnnotationType.WIDGET: | ||
| 128 | const fieldType = parameters.data.fieldType; | ||
| 129 | switch (fieldType) { | ||
| 130 | case "Tx": | ||
| 131 | return new TextWidgetAnnotationElement(parameters); | ||
| 132 | case "Btn": | ||
| 133 | if (parameters.data.radioButton) { | ||
| 134 | return new RadioButtonWidgetAnnotationElement(parameters); | ||
| 135 | } else if (parameters.data.checkBox) { | ||
| 136 | return new CheckboxWidgetAnnotationElement(parameters); | ||
| 137 | } | ||
| 138 | return new PushButtonWidgetAnnotationElement(parameters); | ||
| 139 | case "Ch": | ||
| 140 | return new ChoiceWidgetAnnotationElement(parameters); | ||
| 141 | case "Sig": | ||
| 142 | return new SignatureWidgetAnnotationElement(parameters); | ||
| 143 | } | ||
| 144 | return new WidgetAnnotationElement(parameters); | ||
| 145 | case util.AnnotationType.POPUP: | ||
| 146 | return new PopupAnnotationElement(parameters); | ||
| 147 | case util.AnnotationType.FREETEXT: | ||
| 148 | return new FreeTextAnnotationElement(parameters); | ||
| 149 | case util.AnnotationType.LINE: | ||
| 150 | return new LineAnnotationElement(parameters); | ||
| 151 | case util.AnnotationType.SQUARE: | ||
| 152 | return new SquareAnnotationElement(parameters); | ||
| 153 | case util.AnnotationType.CIRCLE: | ||
| 154 | return new CircleAnnotationElement(parameters); | ||
| 155 | case util.AnnotationType.POLYLINE: | ||
| 156 | return new PolylineAnnotationElement(parameters); | ||
| 157 | case util.AnnotationType.CARET: | ||
| 158 | return new CaretAnnotationElement(parameters); | ||
| 159 | case util.AnnotationType.INK: | ||
| 160 | return new InkAnnotationElement(parameters); | ||
| 161 | case util.AnnotationType.POLYGON: | ||
| 162 | return new PolygonAnnotationElement(parameters); | ||
| 163 | case util.AnnotationType.HIGHLIGHT: | ||
| 164 | return new HighlightAnnotationElement(parameters); | ||
| 165 | case util.AnnotationType.UNDERLINE: | ||
| 166 | return new UnderlineAnnotationElement(parameters); | ||
| 167 | case util.AnnotationType.SQUIGGLY: | ||
| 168 | return new SquigglyAnnotationElement(parameters); | ||
| 169 | case util.AnnotationType.STRIKEOUT: | ||
| 170 | return new StrikeOutAnnotationElement(parameters); | ||
| 171 | case util.AnnotationType.STAMP: | ||
| 172 | return new StampAnnotationElement(parameters); | ||
| 173 | case util.AnnotationType.FILEATTACHMENT: | ||
| 174 | return new FileAttachmentAnnotationElement(parameters); | ||
| 175 | default: | ||
| 176 | return new AnnotationElement(parameters); | ||
| 177 | } | ||
| 178 | } | ||
| 179 | } | ||
| 180 | class AnnotationElement { | ||
| 181 | #hasBorder = false; | ||
| 182 | constructor(parameters, { | ||
| 183 | isRenderable = false, | ||
| 184 | ignoreBorder = false, | ||
| 185 | createQuadrilaterals = false | ||
| 186 | } = {}) { | ||
| 187 | this.isRenderable = isRenderable; | ||
| 188 | this.data = parameters.data; | ||
| 189 | this.layer = parameters.layer; | ||
| 190 | this.linkService = parameters.linkService; | ||
| 191 | this.downloadManager = parameters.downloadManager; | ||
| 192 | this.imageResourcesPath = parameters.imageResourcesPath; | ||
| 193 | this.renderForms = parameters.renderForms; | ||
| 194 | this.svgFactory = parameters.svgFactory; | ||
| 195 | this.annotationStorage = parameters.annotationStorage; | ||
| 196 | this.enableScripting = parameters.enableScripting; | ||
| 197 | this.hasJSActions = parameters.hasJSActions; | ||
| 198 | this._fieldObjects = parameters.fieldObjects; | ||
| 199 | this.parent = parameters.parent; | ||
| 200 | if (isRenderable) { | ||
| 201 | this.container = this._createContainer(ignoreBorder); | ||
| 202 | } | ||
| 203 | if (createQuadrilaterals) { | ||
| 204 | this._createQuadrilaterals(); | ||
| 205 | } | ||
| 206 | } | ||
| 207 | static _hasPopupData({ | ||
| 208 | titleObj, | ||
| 209 | contentsObj, | ||
| 210 | richText | ||
| 211 | }) { | ||
| 212 | return !!(titleObj?.str || contentsObj?.str || richText?.str); | ||
| 213 | } | ||
| 214 | get hasPopupData() { | ||
| 215 | return AnnotationElement._hasPopupData(this.data); | ||
| 216 | } | ||
| 217 | _createContainer(ignoreBorder) { | ||
| 218 | const { | ||
| 219 | data, | ||
| 220 | parent: { | ||
| 221 | page, | ||
| 222 | viewport | ||
| 223 | } | ||
| 224 | } = this; | ||
| 225 | const container = document.createElement("section"); | ||
| 226 | container.setAttribute("data-annotation-id", data.id); | ||
| 227 | if (!(this instanceof WidgetAnnotationElement)) { | ||
| 228 | container.tabIndex = DEFAULT_TAB_INDEX; | ||
| 229 | } | ||
| 230 | container.style.zIndex = this.parent.zIndex++; | ||
| 231 | if (this.data.popupRef) { | ||
| 232 | container.setAttribute("aria-haspopup", "dialog"); | ||
| 233 | } | ||
| 234 | if (data.noRotate) { | ||
| 235 | container.classList.add("norotate"); | ||
| 236 | } | ||
| 237 | const { | ||
| 238 | pageWidth, | ||
| 239 | pageHeight, | ||
| 240 | pageX, | ||
| 241 | pageY | ||
| 242 | } = viewport.rawDims; | ||
| 243 | if (!data.rect || this instanceof PopupAnnotationElement) { | ||
| 244 | const { | ||
| 245 | rotation | ||
| 246 | } = data; | ||
| 247 | if (!data.hasOwnCanvas && rotation !== 0) { | ||
| 248 | this.setRotation(rotation, container); | ||
| 249 | } | ||
| 250 | return container; | ||
| 251 | } | ||
| 252 | const { | ||
| 253 | width, | ||
| 254 | height | ||
| 255 | } = getRectDims(data.rect); | ||
| 256 | const rect = util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); | ||
| 257 | if (!ignoreBorder && data.borderStyle.width > 0) { | ||
| 258 | container.style.borderWidth = `${data.borderStyle.width}px`; | ||
| 259 | const horizontalRadius = data.borderStyle.horizontalCornerRadius; | ||
| 260 | const verticalRadius = data.borderStyle.verticalCornerRadius; | ||
| 261 | if (horizontalRadius > 0 || verticalRadius > 0) { | ||
| 262 | const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; | ||
| 263 | container.style.borderRadius = radius; | ||
| 264 | } else if (this instanceof RadioButtonWidgetAnnotationElement) { | ||
| 265 | const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; | ||
| 266 | container.style.borderRadius = radius; | ||
| 267 | } | ||
| 268 | switch (data.borderStyle.style) { | ||
| 269 | case util.AnnotationBorderStyleType.SOLID: | ||
| 270 | container.style.borderStyle = "solid"; | ||
| 271 | break; | ||
| 272 | case util.AnnotationBorderStyleType.DASHED: | ||
| 273 | container.style.borderStyle = "dashed"; | ||
| 274 | break; | ||
| 275 | case util.AnnotationBorderStyleType.BEVELED: | ||
| 276 | (0,util.warn)("Unimplemented border style: beveled"); | ||
| 277 | break; | ||
| 278 | case util.AnnotationBorderStyleType.INSET: | ||
| 279 | (0,util.warn)("Unimplemented border style: inset"); | ||
| 280 | break; | ||
| 281 | case util.AnnotationBorderStyleType.UNDERLINE: | ||
| 282 | container.style.borderBottomStyle = "solid"; | ||
| 283 | break; | ||
| 284 | default: | ||
| 285 | break; | ||
| 286 | } | ||
| 287 | const borderColor = data.borderColor || null; | ||
| 288 | if (borderColor) { | ||
| 289 | this.#hasBorder = true; | ||
| 290 | container.style.borderColor = util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); | ||
| 291 | } else { | ||
| 292 | container.style.borderWidth = 0; | ||
| 293 | } | ||
| 294 | } | ||
| 295 | container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; | ||
| 296 | container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; | ||
| 297 | const { | ||
| 298 | rotation | ||
| 299 | } = data; | ||
| 300 | if (data.hasOwnCanvas || rotation === 0) { | ||
| 301 | container.style.width = `${100 * width / pageWidth}%`; | ||
| 302 | container.style.height = `${100 * height / pageHeight}%`; | ||
| 303 | } else { | ||
| 304 | this.setRotation(rotation, container); | ||
| 305 | } | ||
| 306 | return container; | ||
| 307 | } | ||
| 308 | setRotation(angle, container = this.container) { | ||
| 309 | if (!this.data.rect) { | ||
| 310 | return; | ||
| 311 | } | ||
| 312 | const { | ||
| 313 | pageWidth, | ||
| 314 | pageHeight | ||
| 315 | } = this.parent.viewport.rawDims; | ||
| 316 | const { | ||
| 317 | width, | ||
| 318 | height | ||
| 319 | } = getRectDims(this.data.rect); | ||
| 320 | let elementWidth, elementHeight; | ||
| 321 | if (angle % 180 === 0) { | ||
| 322 | elementWidth = 100 * width / pageWidth; | ||
| 323 | elementHeight = 100 * height / pageHeight; | ||
| 324 | } else { | ||
| 325 | elementWidth = 100 * height / pageWidth; | ||
| 326 | elementHeight = 100 * width / pageHeight; | ||
| 327 | } | ||
| 328 | container.style.width = `${elementWidth}%`; | ||
| 329 | container.style.height = `${elementHeight}%`; | ||
| 330 | container.setAttribute("data-main-rotation", (360 - angle) % 360); | ||
| 331 | } | ||
| 332 | get _commonActions() { | ||
| 333 | const setColor = (jsName, styleName, event) => { | ||
| 334 | const color = event.detail[jsName]; | ||
| 335 | const colorType = color[0]; | ||
| 336 | const colorArray = color.slice(1); | ||
| 337 | event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); | ||
| 338 | this.annotationStorage.setValue(this.data.id, { | ||
| 339 | [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) | ||
| 340 | }); | ||
| 341 | }; | ||
| 342 | return (0,util.shadow)(this, "_commonActions", { | ||
| 343 | display: event => { | ||
| 344 | const { | ||
| 345 | display | ||
| 346 | } = event.detail; | ||
| 347 | const hidden = display % 2 === 1; | ||
| 348 | this.container.style.visibility = hidden ? "hidden" : "visible"; | ||
| 349 | this.annotationStorage.setValue(this.data.id, { | ||
| 350 | noView: hidden, | ||
| 351 | noPrint: display === 1 || display === 2 | ||
| 352 | }); | ||
| 353 | }, | ||
| 354 | print: event => { | ||
| 355 | this.annotationStorage.setValue(this.data.id, { | ||
| 356 | noPrint: !event.detail.print | ||
| 357 | }); | ||
| 358 | }, | ||
| 359 | hidden: event => { | ||
| 360 | const { | ||
| 361 | hidden | ||
| 362 | } = event.detail; | ||
| 363 | this.container.style.visibility = hidden ? "hidden" : "visible"; | ||
| 364 | this.annotationStorage.setValue(this.data.id, { | ||
| 365 | noPrint: hidden, | ||
| 366 | noView: hidden | ||
| 367 | }); | ||
| 368 | }, | ||
| 369 | focus: event => { | ||
| 370 | setTimeout(() => event.target.focus({ | ||
| 371 | preventScroll: false | ||
| 372 | }), 0); | ||
| 373 | }, | ||
| 374 | userName: event => { | ||
| 375 | event.target.title = event.detail.userName; | ||
| 376 | }, | ||
| 377 | readonly: event => { | ||
| 378 | event.target.disabled = event.detail.readonly; | ||
| 379 | }, | ||
| 380 | required: event => { | ||
| 381 | this._setRequired(event.target, event.detail.required); | ||
| 382 | }, | ||
| 383 | bgColor: event => { | ||
| 384 | setColor("bgColor", "backgroundColor", event); | ||
| 385 | }, | ||
| 386 | fillColor: event => { | ||
| 387 | setColor("fillColor", "backgroundColor", event); | ||
| 388 | }, | ||
| 389 | fgColor: event => { | ||
| 390 | setColor("fgColor", "color", event); | ||
| 391 | }, | ||
| 392 | textColor: event => { | ||
| 393 | setColor("textColor", "color", event); | ||
| 394 | }, | ||
| 395 | borderColor: event => { | ||
| 396 | setColor("borderColor", "borderColor", event); | ||
| 397 | }, | ||
| 398 | strokeColor: event => { | ||
| 399 | setColor("strokeColor", "borderColor", event); | ||
| 400 | }, | ||
| 401 | rotation: event => { | ||
| 402 | const angle = event.detail.rotation; | ||
| 403 | this.setRotation(angle); | ||
| 404 | this.annotationStorage.setValue(this.data.id, { | ||
| 405 | rotation: angle | ||
| 406 | }); | ||
| 407 | } | ||
| 408 | }); | ||
| 409 | } | ||
| 410 | _dispatchEventFromSandbox(actions, jsEvent) { | ||
| 411 | const commonActions = this._commonActions; | ||
| 412 | for (const name of Object.keys(jsEvent.detail)) { | ||
| 413 | const action = actions[name] || commonActions[name]; | ||
| 414 | action?.(jsEvent); | ||
| 415 | } | ||
| 416 | } | ||
| 417 | _setDefaultPropertiesFromJS(element) { | ||
| 418 | if (!this.enableScripting) { | ||
| 419 | return; | ||
| 420 | } | ||
| 421 | const storedData = this.annotationStorage.getRawValue(this.data.id); | ||
| 422 | if (!storedData) { | ||
| 423 | return; | ||
| 424 | } | ||
| 425 | const commonActions = this._commonActions; | ||
| 426 | for (const [actionName, detail] of Object.entries(storedData)) { | ||
| 427 | const action = commonActions[actionName]; | ||
| 428 | if (action) { | ||
| 429 | const eventProxy = { | ||
| 430 | detail: { | ||
| 431 | [actionName]: detail | ||
| 432 | }, | ||
| 433 | target: element | ||
| 434 | }; | ||
| 435 | action(eventProxy); | ||
| 436 | delete storedData[actionName]; | ||
| 437 | } | ||
| 438 | } | ||
| 439 | } | ||
| 440 | _createQuadrilaterals() { | ||
| 441 | if (!this.container) { | ||
| 442 | return; | ||
| 443 | } | ||
| 444 | const { | ||
| 445 | quadPoints | ||
| 446 | } = this.data; | ||
| 447 | if (!quadPoints) { | ||
| 448 | return; | ||
| 449 | } | ||
| 450 | const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect; | ||
| 451 | if (quadPoints.length === 1) { | ||
| 452 | const [, { | ||
| 453 | x: trX, | ||
| 454 | y: trY | ||
| 455 | }, { | ||
| 456 | x: blX, | ||
| 457 | y: blY | ||
| 458 | }] = quadPoints[0]; | ||
| 459 | if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { | ||
| 460 | return; | ||
| 461 | } | ||
| 462 | } | ||
| 463 | const { | ||
| 464 | style | ||
| 465 | } = this.container; | ||
| 466 | let svgBuffer; | ||
| 467 | if (this.#hasBorder) { | ||
| 468 | const { | ||
| 469 | borderColor, | ||
| 470 | borderWidth | ||
| 471 | } = style; | ||
| 472 | style.borderWidth = 0; | ||
| 473 | svgBuffer = ["url('data:image/svg+xml;utf8,", `<svg xmlns="http://www.w3.org/2000/svg"`, ` preserveAspectRatio="none" viewBox="0 0 1 1">`, `<g fill="transparent" stroke="${borderColor}" stroke-width="${borderWidth}">`]; | ||
| 474 | this.container.classList.add("hasBorder"); | ||
| 475 | } | ||
| 476 | const width = rectTrX - rectBlX; | ||
| 477 | const height = rectTrY - rectBlY; | ||
| 478 | const { | ||
| 479 | svgFactory | ||
| 480 | } = this; | ||
| 481 | const svg = svgFactory.createElement("svg"); | ||
| 482 | svg.classList.add("quadrilateralsContainer"); | ||
| 483 | svg.setAttribute("width", 0); | ||
| 484 | svg.setAttribute("height", 0); | ||
| 485 | const defs = svgFactory.createElement("defs"); | ||
| 486 | svg.append(defs); | ||
| 487 | const clipPath = svgFactory.createElement("clipPath"); | ||
| 488 | const id = `clippath_${this.data.id}`; | ||
| 489 | clipPath.setAttribute("id", id); | ||
| 490 | clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); | ||
| 491 | defs.append(clipPath); | ||
| 492 | for (const [, { | ||
| 493 | x: trX, | ||
| 494 | y: trY | ||
| 495 | }, { | ||
| 496 | x: blX, | ||
| 497 | y: blY | ||
| 498 | }] of quadPoints) { | ||
| 499 | const rect = svgFactory.createElement("rect"); | ||
| 500 | const x = (blX - rectBlX) / width; | ||
| 501 | const y = (rectTrY - trY) / height; | ||
| 502 | const rectWidth = (trX - blX) / width; | ||
| 503 | const rectHeight = (trY - blY) / height; | ||
| 504 | rect.setAttribute("x", x); | ||
| 505 | rect.setAttribute("y", y); | ||
| 506 | rect.setAttribute("width", rectWidth); | ||
| 507 | rect.setAttribute("height", rectHeight); | ||
| 508 | clipPath.append(rect); | ||
| 509 | svgBuffer?.push(`<rect vector-effect="non-scaling-stroke" x="${x}" y="${y}" width="${rectWidth}" height="${rectHeight}"/>`); | ||
| 510 | } | ||
| 511 | if (this.#hasBorder) { | ||
| 512 | svgBuffer.push(`</g></svg>')`); | ||
| 513 | style.backgroundImage = svgBuffer.join(""); | ||
| 514 | } | ||
| 515 | this.container.append(svg); | ||
| 516 | this.container.style.clipPath = `url(#${id})`; | ||
| 517 | } | ||
| 518 | _createPopup() { | ||
| 519 | const { | ||
| 520 | container, | ||
| 521 | data | ||
| 522 | } = this; | ||
| 523 | container.setAttribute("aria-haspopup", "dialog"); | ||
| 524 | const popup = new PopupAnnotationElement({ | ||
| 525 | data: { | ||
| 526 | color: data.color, | ||
| 527 | titleObj: data.titleObj, | ||
| 528 | modificationDate: data.modificationDate, | ||
| 529 | contentsObj: data.contentsObj, | ||
| 530 | richText: data.richText, | ||
| 531 | parentRect: data.rect, | ||
| 532 | borderStyle: 0, | ||
| 533 | id: `popup_${data.id}`, | ||
| 534 | rotation: data.rotation | ||
| 535 | }, | ||
| 536 | parent: this.parent, | ||
| 537 | elements: [this] | ||
| 538 | }); | ||
| 539 | this.parent.div.append(popup.render()); | ||
| 540 | } | ||
| 541 | render() { | ||
| 542 | (0,util.unreachable)("Abstract method `AnnotationElement.render` called"); | ||
| 543 | } | ||
| 544 | _getElementsByName(name, skipId = null) { | ||
| 545 | const fields = []; | ||
| 546 | if (this._fieldObjects) { | ||
| 547 | const fieldObj = this._fieldObjects[name]; | ||
| 548 | if (fieldObj) { | ||
| 549 | for (const { | ||
| 550 | page, | ||
| 551 | id, | ||
| 552 | exportValues | ||
| 553 | } of fieldObj) { | ||
| 554 | if (page === -1) { | ||
| 555 | continue; | ||
| 556 | } | ||
| 557 | if (id === skipId) { | ||
| 558 | continue; | ||
| 559 | } | ||
| 560 | const exportValue = typeof exportValues === "string" ? exportValues : null; | ||
| 561 | const domElement = document.querySelector(`[data-element-id="${id}"]`); | ||
| 562 | if (domElement && !GetElementsByNameSet.has(domElement)) { | ||
| 563 | (0,util.warn)(`_getElementsByName - element not allowed: ${id}`); | ||
| 564 | continue; | ||
| 565 | } | ||
| 566 | fields.push({ | ||
| 567 | id, | ||
| 568 | exportValue, | ||
| 569 | domElement | ||
| 570 | }); | ||
| 571 | } | ||
| 572 | } | ||
| 573 | return fields; | ||
| 574 | } | ||
| 575 | for (const domElement of document.getElementsByName(name)) { | ||
| 576 | const { | ||
| 577 | exportValue | ||
| 578 | } = domElement; | ||
| 579 | const id = domElement.getAttribute("data-element-id"); | ||
| 580 | if (id === skipId) { | ||
| 581 | continue; | ||
| 582 | } | ||
| 583 | if (!GetElementsByNameSet.has(domElement)) { | ||
| 584 | continue; | ||
| 585 | } | ||
| 586 | fields.push({ | ||
| 587 | id, | ||
| 588 | exportValue, | ||
| 589 | domElement | ||
| 590 | }); | ||
| 591 | } | ||
| 592 | return fields; | ||
| 593 | } | ||
| 594 | show() { | ||
| 595 | if (this.container) { | ||
| 596 | this.container.hidden = false; | ||
| 597 | } | ||
| 598 | this.popup?.maybeShow(); | ||
| 599 | } | ||
| 600 | hide() { | ||
| 601 | if (this.container) { | ||
| 602 | this.container.hidden = true; | ||
| 603 | } | ||
| 604 | this.popup?.forceHide(); | ||
| 605 | } | ||
| 606 | getElementsToTriggerPopup() { | ||
| 607 | return this.container; | ||
| 608 | } | ||
| 609 | addHighlightArea() { | ||
| 610 | const triggers = this.getElementsToTriggerPopup(); | ||
| 611 | if (Array.isArray(triggers)) { | ||
| 612 | for (const element of triggers) { | ||
| 613 | element.classList.add("highlightArea"); | ||
| 614 | } | ||
| 615 | } else { | ||
| 616 | triggers.classList.add("highlightArea"); | ||
| 617 | } | ||
| 618 | } | ||
| 619 | get _isEditable() { | ||
| 620 | return false; | ||
| 621 | } | ||
| 622 | _editOnDoubleClick() { | ||
| 623 | if (!this._isEditable) { | ||
| 624 | return; | ||
| 625 | } | ||
| 626 | const { | ||
| 627 | annotationEditorType: mode, | ||
| 628 | data: { | ||
| 629 | id: editId | ||
| 630 | } | ||
| 631 | } = this; | ||
| 632 | this.container.addEventListener("dblclick", () => { | ||
| 633 | this.linkService.eventBus?.dispatch("switchannotationeditormode", { | ||
| 634 | source: this, | ||
| 635 | mode, | ||
| 636 | editId | ||
| 637 | }); | ||
| 638 | }); | ||
| 639 | } | ||
| 640 | } | ||
| 641 | class LinkAnnotationElement extends AnnotationElement { | ||
| 642 | constructor(parameters, options = null) { | ||
| 643 | super(parameters, { | ||
| 644 | isRenderable: true, | ||
| 645 | ignoreBorder: !!options?.ignoreBorder, | ||
| 646 | createQuadrilaterals: true | ||
| 647 | }); | ||
| 648 | this.isTooltipOnly = parameters.data.isTooltipOnly; | ||
| 649 | } | ||
| 650 | render() { | ||
| 651 | const { | ||
| 652 | data, | ||
| 653 | linkService | ||
| 654 | } = this; | ||
| 655 | const link = document.createElement("a"); | ||
| 656 | link.setAttribute("data-element-id", data.id); | ||
| 657 | let isBound = false; | ||
| 658 | if (data.url) { | ||
| 659 | linkService.addLinkAttributes(link, data.url, data.newWindow); | ||
| 660 | isBound = true; | ||
| 661 | } else if (data.action) { | ||
| 662 | this._bindNamedAction(link, data.action); | ||
| 663 | isBound = true; | ||
| 664 | } else if (data.attachment) { | ||
| 665 | this.#bindAttachment(link, data.attachment, data.attachmentDest); | ||
| 666 | isBound = true; | ||
| 667 | } else if (data.setOCGState) { | ||
| 668 | this.#bindSetOCGState(link, data.setOCGState); | ||
| 669 | isBound = true; | ||
| 670 | } else if (data.dest) { | ||
| 671 | this._bindLink(link, data.dest); | ||
| 672 | isBound = true; | ||
| 673 | } else { | ||
| 674 | if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { | ||
| 675 | this._bindJSAction(link, data); | ||
| 676 | isBound = true; | ||
| 677 | } | ||
| 678 | if (data.resetForm) { | ||
| 679 | this._bindResetFormAction(link, data.resetForm); | ||
| 680 | isBound = true; | ||
| 681 | } else if (this.isTooltipOnly && !isBound) { | ||
| 682 | this._bindLink(link, ""); | ||
| 683 | isBound = true; | ||
| 684 | } | ||
| 685 | } | ||
| 686 | this.container.classList.add("linkAnnotation"); | ||
| 687 | if (isBound) { | ||
| 688 | this.container.append(link); | ||
| 689 | } | ||
| 690 | return this.container; | ||
| 691 | } | ||
| 692 | #setInternalLink() { | ||
| 693 | this.container.setAttribute("data-internal-link", ""); | ||
| 694 | } | ||
| 695 | _bindLink(link, destination) { | ||
| 696 | link.href = this.linkService.getDestinationHash(destination); | ||
| 697 | link.onclick = () => { | ||
| 698 | if (destination) { | ||
| 699 | this.linkService.goToDestination(destination); | ||
| 700 | } | ||
| 701 | return false; | ||
| 702 | }; | ||
| 703 | if (destination || destination === "") { | ||
| 704 | this.#setInternalLink(); | ||
| 705 | } | ||
| 706 | } | ||
| 707 | _bindNamedAction(link, action) { | ||
| 708 | link.href = this.linkService.getAnchorUrl(""); | ||
| 709 | link.onclick = () => { | ||
| 710 | this.linkService.executeNamedAction(action); | ||
| 711 | return false; | ||
| 712 | }; | ||
| 713 | this.#setInternalLink(); | ||
| 714 | } | ||
| 715 | #bindAttachment(link, attachment, dest = null) { | ||
| 716 | link.href = this.linkService.getAnchorUrl(""); | ||
| 717 | link.onclick = () => { | ||
| 718 | this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest); | ||
| 719 | return false; | ||
| 720 | }; | ||
| 721 | this.#setInternalLink(); | ||
| 722 | } | ||
| 723 | #bindSetOCGState(link, action) { | ||
| 724 | link.href = this.linkService.getAnchorUrl(""); | ||
| 725 | link.onclick = () => { | ||
| 726 | this.linkService.executeSetOCGState(action); | ||
| 727 | return false; | ||
| 728 | }; | ||
| 729 | this.#setInternalLink(); | ||
| 730 | } | ||
| 731 | _bindJSAction(link, data) { | ||
| 732 | link.href = this.linkService.getAnchorUrl(""); | ||
| 733 | const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); | ||
| 734 | for (const name of Object.keys(data.actions)) { | ||
| 735 | const jsName = map.get(name); | ||
| 736 | if (!jsName) { | ||
| 737 | continue; | ||
| 738 | } | ||
| 739 | link[jsName] = () => { | ||
| 740 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 741 | source: this, | ||
| 742 | detail: { | ||
| 743 | id: data.id, | ||
| 744 | name | ||
| 745 | } | ||
| 746 | }); | ||
| 747 | return false; | ||
| 748 | }; | ||
| 749 | } | ||
| 750 | if (!link.onclick) { | ||
| 751 | link.onclick = () => false; | ||
| 752 | } | ||
| 753 | this.#setInternalLink(); | ||
| 754 | } | ||
| 755 | _bindResetFormAction(link, resetForm) { | ||
| 756 | const otherClickAction = link.onclick; | ||
| 757 | if (!otherClickAction) { | ||
| 758 | link.href = this.linkService.getAnchorUrl(""); | ||
| 759 | } | ||
| 760 | this.#setInternalLink(); | ||
| 761 | if (!this._fieldObjects) { | ||
| 762 | (0,util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); | ||
| 763 | if (!otherClickAction) { | ||
| 764 | link.onclick = () => false; | ||
| 765 | } | ||
| 766 | return; | ||
| 767 | } | ||
| 768 | link.onclick = () => { | ||
| 769 | otherClickAction?.(); | ||
| 770 | const { | ||
| 771 | fields: resetFormFields, | ||
| 772 | refs: resetFormRefs, | ||
| 773 | include | ||
| 774 | } = resetForm; | ||
| 775 | const allFields = []; | ||
| 776 | if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { | ||
| 777 | const fieldIds = new Set(resetFormRefs); | ||
| 778 | for (const fieldName of resetFormFields) { | ||
| 779 | const fields = this._fieldObjects[fieldName] || []; | ||
| 780 | for (const { | ||
| 781 | id | ||
| 782 | } of fields) { | ||
| 783 | fieldIds.add(id); | ||
| 784 | } | ||
| 785 | } | ||
| 786 | for (const fields of Object.values(this._fieldObjects)) { | ||
| 787 | for (const field of fields) { | ||
| 788 | if (fieldIds.has(field.id) === include) { | ||
| 789 | allFields.push(field); | ||
| 790 | } | ||
| 791 | } | ||
| 792 | } | ||
| 793 | } else { | ||
| 794 | for (const fields of Object.values(this._fieldObjects)) { | ||
| 795 | allFields.push(...fields); | ||
| 796 | } | ||
| 797 | } | ||
| 798 | const storage = this.annotationStorage; | ||
| 799 | const allIds = []; | ||
| 800 | for (const field of allFields) { | ||
| 801 | const { | ||
| 802 | id | ||
| 803 | } = field; | ||
| 804 | allIds.push(id); | ||
| 805 | switch (field.type) { | ||
| 806 | case "text": | ||
| 807 | { | ||
| 808 | const value = field.defaultValue || ""; | ||
| 809 | storage.setValue(id, { | ||
| 810 | value | ||
| 811 | }); | ||
| 812 | break; | ||
| 813 | } | ||
| 814 | case "checkbox": | ||
| 815 | case "radiobutton": | ||
| 816 | { | ||
| 817 | const value = field.defaultValue === field.exportValues; | ||
| 818 | storage.setValue(id, { | ||
| 819 | value | ||
| 820 | }); | ||
| 821 | break; | ||
| 822 | } | ||
| 823 | case "combobox": | ||
| 824 | case "listbox": | ||
| 825 | { | ||
| 826 | const value = field.defaultValue || ""; | ||
| 827 | storage.setValue(id, { | ||
| 828 | value | ||
| 829 | }); | ||
| 830 | break; | ||
| 831 | } | ||
| 832 | default: | ||
| 833 | continue; | ||
| 834 | } | ||
| 835 | const domElement = document.querySelector(`[data-element-id="${id}"]`); | ||
| 836 | if (!domElement) { | ||
| 837 | continue; | ||
| 838 | } else if (!GetElementsByNameSet.has(domElement)) { | ||
| 839 | (0,util.warn)(`_bindResetFormAction - element not allowed: ${id}`); | ||
| 840 | continue; | ||
| 841 | } | ||
| 842 | domElement.dispatchEvent(new Event("resetform")); | ||
| 843 | } | ||
| 844 | if (this.enableScripting) { | ||
| 845 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 846 | source: this, | ||
| 847 | detail: { | ||
| 848 | id: "app", | ||
| 849 | ids: allIds, | ||
| 850 | name: "ResetForm" | ||
| 851 | } | ||
| 852 | }); | ||
| 853 | } | ||
| 854 | return false; | ||
| 855 | }; | ||
| 856 | } | ||
| 857 | } | ||
| 858 | class TextAnnotationElement extends AnnotationElement { | ||
| 859 | constructor(parameters) { | ||
| 860 | super(parameters, { | ||
| 861 | isRenderable: true | ||
| 862 | }); | ||
| 863 | } | ||
| 864 | render() { | ||
| 865 | this.container.classList.add("textAnnotation"); | ||
| 866 | const image = document.createElement("img"); | ||
| 867 | image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; | ||
| 868 | image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); | ||
| 869 | image.setAttribute("data-l10n-args", JSON.stringify({ | ||
| 870 | type: this.data.name | ||
| 871 | })); | ||
| 872 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 873 | this._createPopup(); | ||
| 874 | } | ||
| 875 | this.container.append(image); | ||
| 876 | return this.container; | ||
| 877 | } | ||
| 878 | } | ||
| 879 | class WidgetAnnotationElement extends AnnotationElement { | ||
| 880 | render() { | ||
| 881 | if (this.data.alternativeText) { | ||
| 882 | this.container.title = this.data.alternativeText; | ||
| 883 | } | ||
| 884 | return this.container; | ||
| 885 | } | ||
| 886 | showElementAndHideCanvas(element) { | ||
| 887 | if (this.data.hasOwnCanvas) { | ||
| 888 | if (element.previousSibling?.nodeName === "CANVAS") { | ||
| 889 | element.previousSibling.hidden = true; | ||
| 890 | } | ||
| 891 | element.hidden = false; | ||
| 892 | } | ||
| 893 | } | ||
| 894 | _getKeyModifier(event) { | ||
| 895 | return util.FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; | ||
| 896 | } | ||
| 897 | _setEventListener(element, elementData, baseName, eventName, valueGetter) { | ||
| 898 | if (baseName.includes("mouse")) { | ||
| 899 | element.addEventListener(baseName, event => { | ||
| 900 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 901 | source: this, | ||
| 902 | detail: { | ||
| 903 | id: this.data.id, | ||
| 904 | name: eventName, | ||
| 905 | value: valueGetter(event), | ||
| 906 | shift: event.shiftKey, | ||
| 907 | modifier: this._getKeyModifier(event) | ||
| 908 | } | ||
| 909 | }); | ||
| 910 | }); | ||
| 911 | } else { | ||
| 912 | element.addEventListener(baseName, event => { | ||
| 913 | if (baseName === "blur") { | ||
| 914 | if (!elementData.focused || !event.relatedTarget) { | ||
| 915 | return; | ||
| 916 | } | ||
| 917 | elementData.focused = false; | ||
| 918 | } else if (baseName === "focus") { | ||
| 919 | if (elementData.focused) { | ||
| 920 | return; | ||
| 921 | } | ||
| 922 | elementData.focused = true; | ||
| 923 | } | ||
| 924 | if (!valueGetter) { | ||
| 925 | return; | ||
| 926 | } | ||
| 927 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 928 | source: this, | ||
| 929 | detail: { | ||
| 930 | id: this.data.id, | ||
| 931 | name: eventName, | ||
| 932 | value: valueGetter(event) | ||
| 933 | } | ||
| 934 | }); | ||
| 935 | }); | ||
| 936 | } | ||
| 937 | } | ||
| 938 | _setEventListeners(element, elementData, names, getter) { | ||
| 939 | for (const [baseName, eventName] of names) { | ||
| 940 | if (eventName === "Action" || this.data.actions?.[eventName]) { | ||
| 941 | if (eventName === "Focus" || eventName === "Blur") { | ||
| 942 | elementData ||= { | ||
| 943 | focused: false | ||
| 944 | }; | ||
| 945 | } | ||
| 946 | this._setEventListener(element, elementData, baseName, eventName, getter); | ||
| 947 | if (eventName === "Focus" && !this.data.actions?.Blur) { | ||
| 948 | this._setEventListener(element, elementData, "blur", "Blur", null); | ||
| 949 | } else if (eventName === "Blur" && !this.data.actions?.Focus) { | ||
| 950 | this._setEventListener(element, elementData, "focus", "Focus", null); | ||
| 951 | } | ||
| 952 | } | ||
| 953 | } | ||
| 954 | } | ||
| 955 | _setBackgroundColor(element) { | ||
| 956 | const color = this.data.backgroundColor || null; | ||
| 957 | element.style.backgroundColor = color === null ? "transparent" : util.Util.makeHexColor(color[0], color[1], color[2]); | ||
| 958 | } | ||
| 959 | _setTextStyle(element) { | ||
| 960 | const TEXT_ALIGNMENT = ["left", "center", "right"]; | ||
| 961 | const { | ||
| 962 | fontColor | ||
| 963 | } = this.data.defaultAppearanceData; | ||
| 964 | const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; | ||
| 965 | const style = element.style; | ||
| 966 | let computedFontSize; | ||
| 967 | const BORDER_SIZE = 2; | ||
| 968 | const roundToOneDecimal = x => Math.round(10 * x) / 10; | ||
| 969 | if (this.data.multiLine) { | ||
| 970 | const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); | ||
| 971 | const numberOfLines = Math.round(height / (util.LINE_FACTOR * fontSize)) || 1; | ||
| 972 | const lineHeight = height / numberOfLines; | ||
| 973 | computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / util.LINE_FACTOR)); | ||
| 974 | } else { | ||
| 975 | const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); | ||
| 976 | computedFontSize = Math.min(fontSize, roundToOneDecimal(height / util.LINE_FACTOR)); | ||
| 977 | } | ||
| 978 | style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; | ||
| 979 | style.color = util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); | ||
| 980 | if (this.data.textAlignment !== null) { | ||
| 981 | style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; | ||
| 982 | } | ||
| 983 | } | ||
| 984 | _setRequired(element, isRequired) { | ||
| 985 | if (isRequired) { | ||
| 986 | element.setAttribute("required", true); | ||
| 987 | } else { | ||
| 988 | element.removeAttribute("required"); | ||
| 989 | } | ||
| 990 | element.setAttribute("aria-required", isRequired); | ||
| 991 | } | ||
| 992 | } | ||
| 993 | class TextWidgetAnnotationElement extends WidgetAnnotationElement { | ||
| 994 | constructor(parameters) { | ||
| 995 | const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; | ||
| 996 | super(parameters, { | ||
| 997 | isRenderable | ||
| 998 | }); | ||
| 999 | } | ||
| 1000 | setPropertyOnSiblings(base, key, value, keyInStorage) { | ||
| 1001 | const storage = this.annotationStorage; | ||
| 1002 | for (const element of this._getElementsByName(base.name, base.id)) { | ||
| 1003 | if (element.domElement) { | ||
| 1004 | element.domElement[key] = value; | ||
| 1005 | } | ||
| 1006 | storage.setValue(element.id, { | ||
| 1007 | [keyInStorage]: value | ||
| 1008 | }); | ||
| 1009 | } | ||
| 1010 | } | ||
| 1011 | render() { | ||
| 1012 | const storage = this.annotationStorage; | ||
| 1013 | const id = this.data.id; | ||
| 1014 | this.container.classList.add("textWidgetAnnotation"); | ||
| 1015 | let element = null; | ||
| 1016 | if (this.renderForms) { | ||
| 1017 | const storedData = storage.getValue(id, { | ||
| 1018 | value: this.data.fieldValue | ||
| 1019 | }); | ||
| 1020 | let textContent = storedData.value || ""; | ||
| 1021 | const maxLen = storage.getValue(id, { | ||
| 1022 | charLimit: this.data.maxLen | ||
| 1023 | }).charLimit; | ||
| 1024 | if (maxLen && textContent.length > maxLen) { | ||
| 1025 | textContent = textContent.slice(0, maxLen); | ||
| 1026 | } | ||
| 1027 | let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; | ||
| 1028 | if (fieldFormattedValues && this.data.comb) { | ||
| 1029 | fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); | ||
| 1030 | } | ||
| 1031 | const elementData = { | ||
| 1032 | userValue: textContent, | ||
| 1033 | formattedValue: fieldFormattedValues, | ||
| 1034 | lastCommittedValue: null, | ||
| 1035 | commitKey: 1, | ||
| 1036 | focused: false | ||
| 1037 | }; | ||
| 1038 | if (this.data.multiLine) { | ||
| 1039 | element = document.createElement("textarea"); | ||
| 1040 | element.textContent = fieldFormattedValues ?? textContent; | ||
| 1041 | if (this.data.doNotScroll) { | ||
| 1042 | element.style.overflowY = "hidden"; | ||
| 1043 | } | ||
| 1044 | } else { | ||
| 1045 | element = document.createElement("input"); | ||
| 1046 | element.type = "text"; | ||
| 1047 | element.setAttribute("value", fieldFormattedValues ?? textContent); | ||
| 1048 | if (this.data.doNotScroll) { | ||
| 1049 | element.style.overflowX = "hidden"; | ||
| 1050 | } | ||
| 1051 | } | ||
| 1052 | if (this.data.hasOwnCanvas) { | ||
| 1053 | element.hidden = true; | ||
| 1054 | } | ||
| 1055 | GetElementsByNameSet.add(element); | ||
| 1056 | element.setAttribute("data-element-id", id); | ||
| 1057 | element.disabled = this.data.readOnly; | ||
| 1058 | element.name = this.data.fieldName; | ||
| 1059 | element.tabIndex = DEFAULT_TAB_INDEX; | ||
| 1060 | this._setRequired(element, this.data.required); | ||
| 1061 | if (maxLen) { | ||
| 1062 | element.maxLength = maxLen; | ||
| 1063 | } | ||
| 1064 | element.addEventListener("input", event => { | ||
| 1065 | storage.setValue(id, { | ||
| 1066 | value: event.target.value | ||
| 1067 | }); | ||
| 1068 | this.setPropertyOnSiblings(element, "value", event.target.value, "value"); | ||
| 1069 | elementData.formattedValue = null; | ||
| 1070 | }); | ||
| 1071 | element.addEventListener("resetform", event => { | ||
| 1072 | const defaultValue = this.data.defaultFieldValue ?? ""; | ||
| 1073 | element.value = elementData.userValue = defaultValue; | ||
| 1074 | elementData.formattedValue = null; | ||
| 1075 | }); | ||
| 1076 | let blurListener = event => { | ||
| 1077 | const { | ||
| 1078 | formattedValue | ||
| 1079 | } = elementData; | ||
| 1080 | if (formattedValue !== null && formattedValue !== undefined) { | ||
| 1081 | event.target.value = formattedValue; | ||
| 1082 | } | ||
| 1083 | event.target.scrollLeft = 0; | ||
| 1084 | }; | ||
| 1085 | if (this.enableScripting && this.hasJSActions) { | ||
| 1086 | element.addEventListener("focus", event => { | ||
| 1087 | if (elementData.focused) { | ||
| 1088 | return; | ||
| 1089 | } | ||
| 1090 | const { | ||
| 1091 | target | ||
| 1092 | } = event; | ||
| 1093 | if (elementData.userValue) { | ||
| 1094 | target.value = elementData.userValue; | ||
| 1095 | } | ||
| 1096 | elementData.lastCommittedValue = target.value; | ||
| 1097 | elementData.commitKey = 1; | ||
| 1098 | if (!this.data.actions?.Focus) { | ||
| 1099 | elementData.focused = true; | ||
| 1100 | } | ||
| 1101 | }); | ||
| 1102 | element.addEventListener("updatefromsandbox", jsEvent => { | ||
| 1103 | this.showElementAndHideCanvas(jsEvent.target); | ||
| 1104 | const actions = { | ||
| 1105 | value(event) { | ||
| 1106 | elementData.userValue = event.detail.value ?? ""; | ||
| 1107 | storage.setValue(id, { | ||
| 1108 | value: elementData.userValue.toString() | ||
| 1109 | }); | ||
| 1110 | event.target.value = elementData.userValue; | ||
| 1111 | }, | ||
| 1112 | formattedValue(event) { | ||
| 1113 | const { | ||
| 1114 | formattedValue | ||
| 1115 | } = event.detail; | ||
| 1116 | elementData.formattedValue = formattedValue; | ||
| 1117 | if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { | ||
| 1118 | event.target.value = formattedValue; | ||
| 1119 | } | ||
| 1120 | storage.setValue(id, { | ||
| 1121 | formattedValue | ||
| 1122 | }); | ||
| 1123 | }, | ||
| 1124 | selRange(event) { | ||
| 1125 | event.target.setSelectionRange(...event.detail.selRange); | ||
| 1126 | }, | ||
| 1127 | charLimit: event => { | ||
| 1128 | const { | ||
| 1129 | charLimit | ||
| 1130 | } = event.detail; | ||
| 1131 | const { | ||
| 1132 | target | ||
| 1133 | } = event; | ||
| 1134 | if (charLimit === 0) { | ||
| 1135 | target.removeAttribute("maxLength"); | ||
| 1136 | return; | ||
| 1137 | } | ||
| 1138 | target.setAttribute("maxLength", charLimit); | ||
| 1139 | let value = elementData.userValue; | ||
| 1140 | if (!value || value.length <= charLimit) { | ||
| 1141 | return; | ||
| 1142 | } | ||
| 1143 | value = value.slice(0, charLimit); | ||
| 1144 | target.value = elementData.userValue = value; | ||
| 1145 | storage.setValue(id, { | ||
| 1146 | value | ||
| 1147 | }); | ||
| 1148 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 1149 | source: this, | ||
| 1150 | detail: { | ||
| 1151 | id, | ||
| 1152 | name: "Keystroke", | ||
| 1153 | value, | ||
| 1154 | willCommit: true, | ||
| 1155 | commitKey: 1, | ||
| 1156 | selStart: target.selectionStart, | ||
| 1157 | selEnd: target.selectionEnd | ||
| 1158 | } | ||
| 1159 | }); | ||
| 1160 | } | ||
| 1161 | }; | ||
| 1162 | this._dispatchEventFromSandbox(actions, jsEvent); | ||
| 1163 | }); | ||
| 1164 | element.addEventListener("keydown", event => { | ||
| 1165 | elementData.commitKey = 1; | ||
| 1166 | let commitKey = -1; | ||
| 1167 | if (event.key === "Escape") { | ||
| 1168 | commitKey = 0; | ||
| 1169 | } else if (event.key === "Enter" && !this.data.multiLine) { | ||
| 1170 | commitKey = 2; | ||
| 1171 | } else if (event.key === "Tab") { | ||
| 1172 | elementData.commitKey = 3; | ||
| 1173 | } | ||
| 1174 | if (commitKey === -1) { | ||
| 1175 | return; | ||
| 1176 | } | ||
| 1177 | const { | ||
| 1178 | value | ||
| 1179 | } = event.target; | ||
| 1180 | if (elementData.lastCommittedValue === value) { | ||
| 1181 | return; | ||
| 1182 | } | ||
| 1183 | elementData.lastCommittedValue = value; | ||
| 1184 | elementData.userValue = value; | ||
| 1185 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 1186 | source: this, | ||
| 1187 | detail: { | ||
| 1188 | id, | ||
| 1189 | name: "Keystroke", | ||
| 1190 | value, | ||
| 1191 | willCommit: true, | ||
| 1192 | commitKey, | ||
| 1193 | selStart: event.target.selectionStart, | ||
| 1194 | selEnd: event.target.selectionEnd | ||
| 1195 | } | ||
| 1196 | }); | ||
| 1197 | }); | ||
| 1198 | const _blurListener = blurListener; | ||
| 1199 | blurListener = null; | ||
| 1200 | element.addEventListener("blur", event => { | ||
| 1201 | if (!elementData.focused || !event.relatedTarget) { | ||
| 1202 | return; | ||
| 1203 | } | ||
| 1204 | if (!this.data.actions?.Blur) { | ||
| 1205 | elementData.focused = false; | ||
| 1206 | } | ||
| 1207 | const { | ||
| 1208 | value | ||
| 1209 | } = event.target; | ||
| 1210 | elementData.userValue = value; | ||
| 1211 | if (elementData.lastCommittedValue !== value) { | ||
| 1212 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 1213 | source: this, | ||
| 1214 | detail: { | ||
| 1215 | id, | ||
| 1216 | name: "Keystroke", | ||
| 1217 | value, | ||
| 1218 | willCommit: true, | ||
| 1219 | commitKey: elementData.commitKey, | ||
| 1220 | selStart: event.target.selectionStart, | ||
| 1221 | selEnd: event.target.selectionEnd | ||
| 1222 | } | ||
| 1223 | }); | ||
| 1224 | } | ||
| 1225 | _blurListener(event); | ||
| 1226 | }); | ||
| 1227 | if (this.data.actions?.Keystroke) { | ||
| 1228 | element.addEventListener("beforeinput", event => { | ||
| 1229 | elementData.lastCommittedValue = null; | ||
| 1230 | const { | ||
| 1231 | data, | ||
| 1232 | target | ||
| 1233 | } = event; | ||
| 1234 | const { | ||
| 1235 | value, | ||
| 1236 | selectionStart, | ||
| 1237 | selectionEnd | ||
| 1238 | } = target; | ||
| 1239 | let selStart = selectionStart, | ||
| 1240 | selEnd = selectionEnd; | ||
| 1241 | switch (event.inputType) { | ||
| 1242 | case "deleteWordBackward": | ||
| 1243 | { | ||
| 1244 | const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); | ||
| 1245 | if (match) { | ||
| 1246 | selStart -= match[0].length; | ||
| 1247 | } | ||
| 1248 | break; | ||
| 1249 | } | ||
| 1250 | case "deleteWordForward": | ||
| 1251 | { | ||
| 1252 | const match = value.substring(selectionStart).match(/^[^\w]*\w*/); | ||
| 1253 | if (match) { | ||
| 1254 | selEnd += match[0].length; | ||
| 1255 | } | ||
| 1256 | break; | ||
| 1257 | } | ||
| 1258 | case "deleteContentBackward": | ||
| 1259 | if (selectionStart === selectionEnd) { | ||
| 1260 | selStart -= 1; | ||
| 1261 | } | ||
| 1262 | break; | ||
| 1263 | case "deleteContentForward": | ||
| 1264 | if (selectionStart === selectionEnd) { | ||
| 1265 | selEnd += 1; | ||
| 1266 | } | ||
| 1267 | break; | ||
| 1268 | } | ||
| 1269 | event.preventDefault(); | ||
| 1270 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 1271 | source: this, | ||
| 1272 | detail: { | ||
| 1273 | id, | ||
| 1274 | name: "Keystroke", | ||
| 1275 | value, | ||
| 1276 | change: data || "", | ||
| 1277 | willCommit: false, | ||
| 1278 | selStart, | ||
| 1279 | selEnd | ||
| 1280 | } | ||
| 1281 | }); | ||
| 1282 | }); | ||
| 1283 | } | ||
| 1284 | this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); | ||
| 1285 | } | ||
| 1286 | if (blurListener) { | ||
| 1287 | element.addEventListener("blur", blurListener); | ||
| 1288 | } | ||
| 1289 | if (this.data.comb) { | ||
| 1290 | const fieldWidth = this.data.rect[2] - this.data.rect[0]; | ||
| 1291 | const combWidth = fieldWidth / maxLen; | ||
| 1292 | element.classList.add("comb"); | ||
| 1293 | element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; | ||
| 1294 | } | ||
| 1295 | } else { | ||
| 1296 | element = document.createElement("div"); | ||
| 1297 | element.textContent = this.data.fieldValue; | ||
| 1298 | element.style.verticalAlign = "middle"; | ||
| 1299 | element.style.display = "table-cell"; | ||
| 1300 | if (this.data.hasOwnCanvas) { | ||
| 1301 | element.hidden = true; | ||
| 1302 | } | ||
| 1303 | } | ||
| 1304 | this._setTextStyle(element); | ||
| 1305 | this._setBackgroundColor(element); | ||
| 1306 | this._setDefaultPropertiesFromJS(element); | ||
| 1307 | this.container.append(element); | ||
| 1308 | return this.container; | ||
| 1309 | } | ||
| 1310 | } | ||
| 1311 | class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { | ||
| 1312 | constructor(parameters) { | ||
| 1313 | super(parameters, { | ||
| 1314 | isRenderable: !!parameters.data.hasOwnCanvas | ||
| 1315 | }); | ||
| 1316 | } | ||
| 1317 | } | ||
| 1318 | class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { | ||
| 1319 | constructor(parameters) { | ||
| 1320 | super(parameters, { | ||
| 1321 | isRenderable: parameters.renderForms | ||
| 1322 | }); | ||
| 1323 | } | ||
| 1324 | render() { | ||
| 1325 | const storage = this.annotationStorage; | ||
| 1326 | const data = this.data; | ||
| 1327 | const id = data.id; | ||
| 1328 | let value = storage.getValue(id, { | ||
| 1329 | value: data.exportValue === data.fieldValue | ||
| 1330 | }).value; | ||
| 1331 | if (typeof value === "string") { | ||
| 1332 | value = value !== "Off"; | ||
| 1333 | storage.setValue(id, { | ||
| 1334 | value | ||
| 1335 | }); | ||
| 1336 | } | ||
| 1337 | this.container.classList.add("buttonWidgetAnnotation", "checkBox"); | ||
| 1338 | const element = document.createElement("input"); | ||
| 1339 | GetElementsByNameSet.add(element); | ||
| 1340 | element.setAttribute("data-element-id", id); | ||
| 1341 | element.disabled = data.readOnly; | ||
| 1342 | this._setRequired(element, this.data.required); | ||
| 1343 | element.type = "checkbox"; | ||
| 1344 | element.name = data.fieldName; | ||
| 1345 | if (value) { | ||
| 1346 | element.setAttribute("checked", true); | ||
| 1347 | } | ||
| 1348 | element.setAttribute("exportValue", data.exportValue); | ||
| 1349 | element.tabIndex = DEFAULT_TAB_INDEX; | ||
| 1350 | element.addEventListener("change", event => { | ||
| 1351 | const { | ||
| 1352 | name, | ||
| 1353 | checked | ||
| 1354 | } = event.target; | ||
| 1355 | for (const checkbox of this._getElementsByName(name, id)) { | ||
| 1356 | const curChecked = checked && checkbox.exportValue === data.exportValue; | ||
| 1357 | if (checkbox.domElement) { | ||
| 1358 | checkbox.domElement.checked = curChecked; | ||
| 1359 | } | ||
| 1360 | storage.setValue(checkbox.id, { | ||
| 1361 | value: curChecked | ||
| 1362 | }); | ||
| 1363 | } | ||
| 1364 | storage.setValue(id, { | ||
| 1365 | value: checked | ||
| 1366 | }); | ||
| 1367 | }); | ||
| 1368 | element.addEventListener("resetform", event => { | ||
| 1369 | const defaultValue = data.defaultFieldValue || "Off"; | ||
| 1370 | event.target.checked = defaultValue === data.exportValue; | ||
| 1371 | }); | ||
| 1372 | if (this.enableScripting && this.hasJSActions) { | ||
| 1373 | element.addEventListener("updatefromsandbox", jsEvent => { | ||
| 1374 | const actions = { | ||
| 1375 | value(event) { | ||
| 1376 | event.target.checked = event.detail.value !== "Off"; | ||
| 1377 | storage.setValue(id, { | ||
| 1378 | value: event.target.checked | ||
| 1379 | }); | ||
| 1380 | } | ||
| 1381 | }; | ||
| 1382 | this._dispatchEventFromSandbox(actions, jsEvent); | ||
| 1383 | }); | ||
| 1384 | this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); | ||
| 1385 | } | ||
| 1386 | this._setBackgroundColor(element); | ||
| 1387 | this._setDefaultPropertiesFromJS(element); | ||
| 1388 | this.container.append(element); | ||
| 1389 | return this.container; | ||
| 1390 | } | ||
| 1391 | } | ||
| 1392 | class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { | ||
| 1393 | constructor(parameters) { | ||
| 1394 | super(parameters, { | ||
| 1395 | isRenderable: parameters.renderForms | ||
| 1396 | }); | ||
| 1397 | } | ||
| 1398 | render() { | ||
| 1399 | this.container.classList.add("buttonWidgetAnnotation", "radioButton"); | ||
| 1400 | const storage = this.annotationStorage; | ||
| 1401 | const data = this.data; | ||
| 1402 | const id = data.id; | ||
| 1403 | let value = storage.getValue(id, { | ||
| 1404 | value: data.fieldValue === data.buttonValue | ||
| 1405 | }).value; | ||
| 1406 | if (typeof value === "string") { | ||
| 1407 | value = value !== data.buttonValue; | ||
| 1408 | storage.setValue(id, { | ||
| 1409 | value | ||
| 1410 | }); | ||
| 1411 | } | ||
| 1412 | if (value) { | ||
| 1413 | for (const radio of this._getElementsByName(data.fieldName, id)) { | ||
| 1414 | storage.setValue(radio.id, { | ||
| 1415 | value: false | ||
| 1416 | }); | ||
| 1417 | } | ||
| 1418 | } | ||
| 1419 | const element = document.createElement("input"); | ||
| 1420 | GetElementsByNameSet.add(element); | ||
| 1421 | element.setAttribute("data-element-id", id); | ||
| 1422 | element.disabled = data.readOnly; | ||
| 1423 | this._setRequired(element, this.data.required); | ||
| 1424 | element.type = "radio"; | ||
| 1425 | element.name = data.fieldName; | ||
| 1426 | if (value) { | ||
| 1427 | element.setAttribute("checked", true); | ||
| 1428 | } | ||
| 1429 | element.tabIndex = DEFAULT_TAB_INDEX; | ||
| 1430 | element.addEventListener("change", event => { | ||
| 1431 | const { | ||
| 1432 | name, | ||
| 1433 | checked | ||
| 1434 | } = event.target; | ||
| 1435 | for (const radio of this._getElementsByName(name, id)) { | ||
| 1436 | storage.setValue(radio.id, { | ||
| 1437 | value: false | ||
| 1438 | }); | ||
| 1439 | } | ||
| 1440 | storage.setValue(id, { | ||
| 1441 | value: checked | ||
| 1442 | }); | ||
| 1443 | }); | ||
| 1444 | element.addEventListener("resetform", event => { | ||
| 1445 | const defaultValue = data.defaultFieldValue; | ||
| 1446 | event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; | ||
| 1447 | }); | ||
| 1448 | if (this.enableScripting && this.hasJSActions) { | ||
| 1449 | const pdfButtonValue = data.buttonValue; | ||
| 1450 | element.addEventListener("updatefromsandbox", jsEvent => { | ||
| 1451 | const actions = { | ||
| 1452 | value: event => { | ||
| 1453 | const checked = pdfButtonValue === event.detail.value; | ||
| 1454 | for (const radio of this._getElementsByName(event.target.name)) { | ||
| 1455 | const curChecked = checked && radio.id === id; | ||
| 1456 | if (radio.domElement) { | ||
| 1457 | radio.domElement.checked = curChecked; | ||
| 1458 | } | ||
| 1459 | storage.setValue(radio.id, { | ||
| 1460 | value: curChecked | ||
| 1461 | }); | ||
| 1462 | } | ||
| 1463 | } | ||
| 1464 | }; | ||
| 1465 | this._dispatchEventFromSandbox(actions, jsEvent); | ||
| 1466 | }); | ||
| 1467 | this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); | ||
| 1468 | } | ||
| 1469 | this._setBackgroundColor(element); | ||
| 1470 | this._setDefaultPropertiesFromJS(element); | ||
| 1471 | this.container.append(element); | ||
| 1472 | return this.container; | ||
| 1473 | } | ||
| 1474 | } | ||
| 1475 | class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { | ||
| 1476 | constructor(parameters) { | ||
| 1477 | super(parameters, { | ||
| 1478 | ignoreBorder: parameters.data.hasAppearance | ||
| 1479 | }); | ||
| 1480 | } | ||
| 1481 | render() { | ||
| 1482 | const container = super.render(); | ||
| 1483 | container.classList.add("buttonWidgetAnnotation", "pushButton"); | ||
| 1484 | if (this.data.alternativeText) { | ||
| 1485 | container.title = this.data.alternativeText; | ||
| 1486 | } | ||
| 1487 | const linkElement = container.lastChild; | ||
| 1488 | if (this.enableScripting && this.hasJSActions && linkElement) { | ||
| 1489 | this._setDefaultPropertiesFromJS(linkElement); | ||
| 1490 | linkElement.addEventListener("updatefromsandbox", jsEvent => { | ||
| 1491 | this._dispatchEventFromSandbox({}, jsEvent); | ||
| 1492 | }); | ||
| 1493 | } | ||
| 1494 | return container; | ||
| 1495 | } | ||
| 1496 | } | ||
| 1497 | class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { | ||
| 1498 | constructor(parameters) { | ||
| 1499 | super(parameters, { | ||
| 1500 | isRenderable: parameters.renderForms | ||
| 1501 | }); | ||
| 1502 | } | ||
| 1503 | render() { | ||
| 1504 | this.container.classList.add("choiceWidgetAnnotation"); | ||
| 1505 | const storage = this.annotationStorage; | ||
| 1506 | const id = this.data.id; | ||
| 1507 | const storedData = storage.getValue(id, { | ||
| 1508 | value: this.data.fieldValue | ||
| 1509 | }); | ||
| 1510 | const selectElement = document.createElement("select"); | ||
| 1511 | GetElementsByNameSet.add(selectElement); | ||
| 1512 | selectElement.setAttribute("data-element-id", id); | ||
| 1513 | selectElement.disabled = this.data.readOnly; | ||
| 1514 | this._setRequired(selectElement, this.data.required); | ||
| 1515 | selectElement.name = this.data.fieldName; | ||
| 1516 | selectElement.tabIndex = DEFAULT_TAB_INDEX; | ||
| 1517 | let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; | ||
| 1518 | if (!this.data.combo) { | ||
| 1519 | selectElement.size = this.data.options.length; | ||
| 1520 | if (this.data.multiSelect) { | ||
| 1521 | selectElement.multiple = true; | ||
| 1522 | } | ||
| 1523 | } | ||
| 1524 | selectElement.addEventListener("resetform", event => { | ||
| 1525 | const defaultValue = this.data.defaultFieldValue; | ||
| 1526 | for (const option of selectElement.options) { | ||
| 1527 | option.selected = option.value === defaultValue; | ||
| 1528 | } | ||
| 1529 | }); | ||
| 1530 | for (const option of this.data.options) { | ||
| 1531 | const optionElement = document.createElement("option"); | ||
| 1532 | optionElement.textContent = option.displayValue; | ||
| 1533 | optionElement.value = option.exportValue; | ||
| 1534 | if (storedData.value.includes(option.exportValue)) { | ||
| 1535 | optionElement.setAttribute("selected", true); | ||
| 1536 | addAnEmptyEntry = false; | ||
| 1537 | } | ||
| 1538 | selectElement.append(optionElement); | ||
| 1539 | } | ||
| 1540 | let removeEmptyEntry = null; | ||
| 1541 | if (addAnEmptyEntry) { | ||
| 1542 | const noneOptionElement = document.createElement("option"); | ||
| 1543 | noneOptionElement.value = " "; | ||
| 1544 | noneOptionElement.setAttribute("hidden", true); | ||
| 1545 | noneOptionElement.setAttribute("selected", true); | ||
| 1546 | selectElement.prepend(noneOptionElement); | ||
| 1547 | removeEmptyEntry = () => { | ||
| 1548 | noneOptionElement.remove(); | ||
| 1549 | selectElement.removeEventListener("input", removeEmptyEntry); | ||
| 1550 | removeEmptyEntry = null; | ||
| 1551 | }; | ||
| 1552 | selectElement.addEventListener("input", removeEmptyEntry); | ||
| 1553 | } | ||
| 1554 | const getValue = isExport => { | ||
| 1555 | const name = isExport ? "value" : "textContent"; | ||
| 1556 | const { | ||
| 1557 | options, | ||
| 1558 | multiple | ||
| 1559 | } = selectElement; | ||
| 1560 | if (!multiple) { | ||
| 1561 | return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; | ||
| 1562 | } | ||
| 1563 | return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); | ||
| 1564 | }; | ||
| 1565 | let selectedValues = getValue(false); | ||
| 1566 | const getItems = event => { | ||
| 1567 | const options = event.target.options; | ||
| 1568 | return Array.prototype.map.call(options, option => { | ||
| 1569 | return { | ||
| 1570 | displayValue: option.textContent, | ||
| 1571 | exportValue: option.value | ||
| 1572 | }; | ||
| 1573 | }); | ||
| 1574 | }; | ||
| 1575 | if (this.enableScripting && this.hasJSActions) { | ||
| 1576 | selectElement.addEventListener("updatefromsandbox", jsEvent => { | ||
| 1577 | const actions = { | ||
| 1578 | value(event) { | ||
| 1579 | removeEmptyEntry?.(); | ||
| 1580 | const value = event.detail.value; | ||
| 1581 | const values = new Set(Array.isArray(value) ? value : [value]); | ||
| 1582 | for (const option of selectElement.options) { | ||
| 1583 | option.selected = values.has(option.value); | ||
| 1584 | } | ||
| 1585 | storage.setValue(id, { | ||
| 1586 | value: getValue(true) | ||
| 1587 | }); | ||
| 1588 | selectedValues = getValue(false); | ||
| 1589 | }, | ||
| 1590 | multipleSelection(event) { | ||
| 1591 | selectElement.multiple = true; | ||
| 1592 | }, | ||
| 1593 | remove(event) { | ||
| 1594 | const options = selectElement.options; | ||
| 1595 | const index = event.detail.remove; | ||
| 1596 | options[index].selected = false; | ||
| 1597 | selectElement.remove(index); | ||
| 1598 | if (options.length > 0) { | ||
| 1599 | const i = Array.prototype.findIndex.call(options, option => option.selected); | ||
| 1600 | if (i === -1) { | ||
| 1601 | options[0].selected = true; | ||
| 1602 | } | ||
| 1603 | } | ||
| 1604 | storage.setValue(id, { | ||
| 1605 | value: getValue(true), | ||
| 1606 | items: getItems(event) | ||
| 1607 | }); | ||
| 1608 | selectedValues = getValue(false); | ||
| 1609 | }, | ||
| 1610 | clear(event) { | ||
| 1611 | while (selectElement.length !== 0) { | ||
| 1612 | selectElement.remove(0); | ||
| 1613 | } | ||
| 1614 | storage.setValue(id, { | ||
| 1615 | value: null, | ||
| 1616 | items: [] | ||
| 1617 | }); | ||
| 1618 | selectedValues = getValue(false); | ||
| 1619 | }, | ||
| 1620 | insert(event) { | ||
| 1621 | const { | ||
| 1622 | index, | ||
| 1623 | displayValue, | ||
| 1624 | exportValue | ||
| 1625 | } = event.detail.insert; | ||
| 1626 | const selectChild = selectElement.children[index]; | ||
| 1627 | const optionElement = document.createElement("option"); | ||
| 1628 | optionElement.textContent = displayValue; | ||
| 1629 | optionElement.value = exportValue; | ||
| 1630 | if (selectChild) { | ||
| 1631 | selectChild.before(optionElement); | ||
| 1632 | } else { | ||
| 1633 | selectElement.append(optionElement); | ||
| 1634 | } | ||
| 1635 | storage.setValue(id, { | ||
| 1636 | value: getValue(true), | ||
| 1637 | items: getItems(event) | ||
| 1638 | }); | ||
| 1639 | selectedValues = getValue(false); | ||
| 1640 | }, | ||
| 1641 | items(event) { | ||
| 1642 | const { | ||
| 1643 | items | ||
| 1644 | } = event.detail; | ||
| 1645 | while (selectElement.length !== 0) { | ||
| 1646 | selectElement.remove(0); | ||
| 1647 | } | ||
| 1648 | for (const item of items) { | ||
| 1649 | const { | ||
| 1650 | displayValue, | ||
| 1651 | exportValue | ||
| 1652 | } = item; | ||
| 1653 | const optionElement = document.createElement("option"); | ||
| 1654 | optionElement.textContent = displayValue; | ||
| 1655 | optionElement.value = exportValue; | ||
| 1656 | selectElement.append(optionElement); | ||
| 1657 | } | ||
| 1658 | if (selectElement.options.length > 0) { | ||
| 1659 | selectElement.options[0].selected = true; | ||
| 1660 | } | ||
| 1661 | storage.setValue(id, { | ||
| 1662 | value: getValue(true), | ||
| 1663 | items: getItems(event) | ||
| 1664 | }); | ||
| 1665 | selectedValues = getValue(false); | ||
| 1666 | }, | ||
| 1667 | indices(event) { | ||
| 1668 | const indices = new Set(event.detail.indices); | ||
| 1669 | for (const option of event.target.options) { | ||
| 1670 | option.selected = indices.has(option.index); | ||
| 1671 | } | ||
| 1672 | storage.setValue(id, { | ||
| 1673 | value: getValue(true) | ||
| 1674 | }); | ||
| 1675 | selectedValues = getValue(false); | ||
| 1676 | }, | ||
| 1677 | editable(event) { | ||
| 1678 | event.target.disabled = !event.detail.editable; | ||
| 1679 | } | ||
| 1680 | }; | ||
| 1681 | this._dispatchEventFromSandbox(actions, jsEvent); | ||
| 1682 | }); | ||
| 1683 | selectElement.addEventListener("input", event => { | ||
| 1684 | const exportValue = getValue(true); | ||
| 1685 | storage.setValue(id, { | ||
| 1686 | value: exportValue | ||
| 1687 | }); | ||
| 1688 | event.preventDefault(); | ||
| 1689 | this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { | ||
| 1690 | source: this, | ||
| 1691 | detail: { | ||
| 1692 | id, | ||
| 1693 | name: "Keystroke", | ||
| 1694 | value: selectedValues, | ||
| 1695 | changeEx: exportValue, | ||
| 1696 | willCommit: false, | ||
| 1697 | commitKey: 1, | ||
| 1698 | keyDown: false | ||
| 1699 | } | ||
| 1700 | }); | ||
| 1701 | }); | ||
| 1702 | this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); | ||
| 1703 | } else { | ||
| 1704 | selectElement.addEventListener("input", function (event) { | ||
| 1705 | storage.setValue(id, { | ||
| 1706 | value: getValue(true) | ||
| 1707 | }); | ||
| 1708 | }); | ||
| 1709 | } | ||
| 1710 | if (this.data.combo) { | ||
| 1711 | this._setTextStyle(selectElement); | ||
| 1712 | } else {} | ||
| 1713 | this._setBackgroundColor(selectElement); | ||
| 1714 | this._setDefaultPropertiesFromJS(selectElement); | ||
| 1715 | this.container.append(selectElement); | ||
| 1716 | return this.container; | ||
| 1717 | } | ||
| 1718 | } | ||
| 1719 | class PopupAnnotationElement extends AnnotationElement { | ||
| 1720 | constructor(parameters) { | ||
| 1721 | const { | ||
| 1722 | data, | ||
| 1723 | elements | ||
| 1724 | } = parameters; | ||
| 1725 | super(parameters, { | ||
| 1726 | isRenderable: AnnotationElement._hasPopupData(data) | ||
| 1727 | }); | ||
| 1728 | this.elements = elements; | ||
| 1729 | } | ||
| 1730 | render() { | ||
| 1731 | this.container.classList.add("popupAnnotation"); | ||
| 1732 | const popup = new PopupElement({ | ||
| 1733 | container: this.container, | ||
| 1734 | color: this.data.color, | ||
| 1735 | titleObj: this.data.titleObj, | ||
| 1736 | modificationDate: this.data.modificationDate, | ||
| 1737 | contentsObj: this.data.contentsObj, | ||
| 1738 | richText: this.data.richText, | ||
| 1739 | rect: this.data.rect, | ||
| 1740 | parentRect: this.data.parentRect || null, | ||
| 1741 | parent: this.parent, | ||
| 1742 | elements: this.elements, | ||
| 1743 | open: this.data.open | ||
| 1744 | }); | ||
| 1745 | const elementIds = []; | ||
| 1746 | for (const element of this.elements) { | ||
| 1747 | element.popup = popup; | ||
| 1748 | elementIds.push(element.data.id); | ||
| 1749 | element.addHighlightArea(); | ||
| 1750 | } | ||
| 1751 | this.container.setAttribute("aria-controls", elementIds.map(id => `${util.AnnotationPrefix}${id}`).join(",")); | ||
| 1752 | return this.container; | ||
| 1753 | } | ||
| 1754 | } | ||
| 1755 | class PopupElement { | ||
| 1756 | #boundKeyDown = this.#keyDown.bind(this); | ||
| 1757 | #boundHide = this.#hide.bind(this); | ||
| 1758 | #boundShow = this.#show.bind(this); | ||
| 1759 | #boundToggle = this.#toggle.bind(this); | ||
| 1760 | #color = null; | ||
| 1761 | #container = null; | ||
| 1762 | #contentsObj = null; | ||
| 1763 | #dateObj = null; | ||
| 1764 | #elements = null; | ||
| 1765 | #parent = null; | ||
| 1766 | #parentRect = null; | ||
| 1767 | #pinned = false; | ||
| 1768 | #popup = null; | ||
| 1769 | #rect = null; | ||
| 1770 | #richText = null; | ||
| 1771 | #titleObj = null; | ||
| 1772 | #wasVisible = false; | ||
| 1773 | constructor({ | ||
| 1774 | container, | ||
| 1775 | color, | ||
| 1776 | elements, | ||
| 1777 | titleObj, | ||
| 1778 | modificationDate, | ||
| 1779 | contentsObj, | ||
| 1780 | richText, | ||
| 1781 | parent, | ||
| 1782 | rect, | ||
| 1783 | parentRect, | ||
| 1784 | open | ||
| 1785 | }) { | ||
| 1786 | this.#container = container; | ||
| 1787 | this.#titleObj = titleObj; | ||
| 1788 | this.#contentsObj = contentsObj; | ||
| 1789 | this.#richText = richText; | ||
| 1790 | this.#parent = parent; | ||
| 1791 | this.#color = color; | ||
| 1792 | this.#rect = rect; | ||
| 1793 | this.#parentRect = parentRect; | ||
| 1794 | this.#elements = elements; | ||
| 1795 | this.#dateObj = display_utils.PDFDateString.toDateObject(modificationDate); | ||
| 1796 | this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); | ||
| 1797 | for (const element of this.trigger) { | ||
| 1798 | element.addEventListener("click", this.#boundToggle); | ||
| 1799 | element.addEventListener("mouseenter", this.#boundShow); | ||
| 1800 | element.addEventListener("mouseleave", this.#boundHide); | ||
| 1801 | element.classList.add("popupTriggerArea"); | ||
| 1802 | } | ||
| 1803 | for (const element of elements) { | ||
| 1804 | element.container?.addEventListener("keydown", this.#boundKeyDown); | ||
| 1805 | } | ||
| 1806 | this.#container.hidden = true; | ||
| 1807 | if (open) { | ||
| 1808 | this.#toggle(); | ||
| 1809 | } | ||
| 1810 | } | ||
| 1811 | render() { | ||
| 1812 | if (this.#popup) { | ||
| 1813 | return; | ||
| 1814 | } | ||
| 1815 | const { | ||
| 1816 | page: { | ||
| 1817 | view | ||
| 1818 | }, | ||
| 1819 | viewport: { | ||
| 1820 | rawDims: { | ||
| 1821 | pageWidth, | ||
| 1822 | pageHeight, | ||
| 1823 | pageX, | ||
| 1824 | pageY | ||
| 1825 | } | ||
| 1826 | } | ||
| 1827 | } = this.#parent; | ||
| 1828 | const popup = this.#popup = document.createElement("div"); | ||
| 1829 | popup.className = "popup"; | ||
| 1830 | if (this.#color) { | ||
| 1831 | const baseColor = popup.style.outlineColor = util.Util.makeHexColor(...this.#color); | ||
| 1832 | if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { | ||
| 1833 | popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; | ||
| 1834 | } else { | ||
| 1835 | const BACKGROUND_ENLIGHT = 0.7; | ||
| 1836 | popup.style.backgroundColor = util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); | ||
| 1837 | } | ||
| 1838 | } | ||
| 1839 | const header = document.createElement("span"); | ||
| 1840 | header.className = "header"; | ||
| 1841 | const title = document.createElement("h1"); | ||
| 1842 | header.append(title); | ||
| 1843 | ({ | ||
| 1844 | dir: title.dir, | ||
| 1845 | str: title.textContent | ||
| 1846 | } = this.#titleObj); | ||
| 1847 | popup.append(header); | ||
| 1848 | if (this.#dateObj) { | ||
| 1849 | const modificationDate = document.createElement("span"); | ||
| 1850 | modificationDate.classList.add("popupDate"); | ||
| 1851 | modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-string"); | ||
| 1852 | modificationDate.setAttribute("data-l10n-args", JSON.stringify({ | ||
| 1853 | date: this.#dateObj.toLocaleDateString(), | ||
| 1854 | time: this.#dateObj.toLocaleTimeString() | ||
| 1855 | })); | ||
| 1856 | header.append(modificationDate); | ||
| 1857 | } | ||
| 1858 | const contentsObj = this.#contentsObj; | ||
| 1859 | const richText = this.#richText; | ||
| 1860 | if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { | ||
| 1861 | xfa_layer.XfaLayer.render({ | ||
| 1862 | xfaHtml: richText.html, | ||
| 1863 | intent: "richText", | ||
| 1864 | div: popup | ||
| 1865 | }); | ||
| 1866 | popup.lastChild.classList.add("richText", "popupContent"); | ||
| 1867 | } else { | ||
| 1868 | const contents = this._formatContents(contentsObj); | ||
| 1869 | popup.append(contents); | ||
| 1870 | } | ||
| 1871 | let useParentRect = !!this.#parentRect; | ||
| 1872 | let rect = useParentRect ? this.#parentRect : this.#rect; | ||
| 1873 | for (const element of this.#elements) { | ||
| 1874 | if (!rect || util.Util.intersect(element.data.rect, rect) !== null) { | ||
| 1875 | rect = element.data.rect; | ||
| 1876 | useParentRect = true; | ||
| 1877 | break; | ||
| 1878 | } | ||
| 1879 | } | ||
| 1880 | const normalizedRect = util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); | ||
| 1881 | const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; | ||
| 1882 | const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; | ||
| 1883 | const popupLeft = normalizedRect[0] + parentWidth; | ||
| 1884 | const popupTop = normalizedRect[1]; | ||
| 1885 | const { | ||
| 1886 | style | ||
| 1887 | } = this.#container; | ||
| 1888 | style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; | ||
| 1889 | style.top = `${100 * (popupTop - pageY) / pageHeight}%`; | ||
| 1890 | this.#container.append(popup); | ||
| 1891 | } | ||
| 1892 | _formatContents({ | ||
| 1893 | str, | ||
| 1894 | dir | ||
| 1895 | }) { | ||
| 1896 | const p = document.createElement("p"); | ||
| 1897 | p.classList.add("popupContent"); | ||
| 1898 | p.dir = dir; | ||
| 1899 | const lines = str.split(/(?:\r\n?|\n)/); | ||
| 1900 | for (let i = 0, ii = lines.length; i < ii; ++i) { | ||
| 1901 | const line = lines[i]; | ||
| 1902 | p.append(document.createTextNode(line)); | ||
| 1903 | if (i < ii - 1) { | ||
| 1904 | p.append(document.createElement("br")); | ||
| 1905 | } | ||
| 1906 | } | ||
| 1907 | return p; | ||
| 1908 | } | ||
| 1909 | #keyDown(event) { | ||
| 1910 | if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { | ||
| 1911 | return; | ||
| 1912 | } | ||
| 1913 | if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { | ||
| 1914 | this.#toggle(); | ||
| 1915 | } | ||
| 1916 | } | ||
| 1917 | #toggle() { | ||
| 1918 | this.#pinned = !this.#pinned; | ||
| 1919 | if (this.#pinned) { | ||
| 1920 | this.#show(); | ||
| 1921 | this.#container.addEventListener("click", this.#boundToggle); | ||
| 1922 | this.#container.addEventListener("keydown", this.#boundKeyDown); | ||
| 1923 | } else { | ||
| 1924 | this.#hide(); | ||
| 1925 | this.#container.removeEventListener("click", this.#boundToggle); | ||
| 1926 | this.#container.removeEventListener("keydown", this.#boundKeyDown); | ||
| 1927 | } | ||
| 1928 | } | ||
| 1929 | #show() { | ||
| 1930 | if (!this.#popup) { | ||
| 1931 | this.render(); | ||
| 1932 | } | ||
| 1933 | if (!this.isVisible) { | ||
| 1934 | this.#container.hidden = false; | ||
| 1935 | this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; | ||
| 1936 | } else if (this.#pinned) { | ||
| 1937 | this.#container.classList.add("focused"); | ||
| 1938 | } | ||
| 1939 | } | ||
| 1940 | #hide() { | ||
| 1941 | this.#container.classList.remove("focused"); | ||
| 1942 | if (this.#pinned || !this.isVisible) { | ||
| 1943 | return; | ||
| 1944 | } | ||
| 1945 | this.#container.hidden = true; | ||
| 1946 | this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; | ||
| 1947 | } | ||
| 1948 | forceHide() { | ||
| 1949 | this.#wasVisible = this.isVisible; | ||
| 1950 | if (!this.#wasVisible) { | ||
| 1951 | return; | ||
| 1952 | } | ||
| 1953 | this.#container.hidden = true; | ||
| 1954 | } | ||
| 1955 | maybeShow() { | ||
| 1956 | if (!this.#wasVisible) { | ||
| 1957 | return; | ||
| 1958 | } | ||
| 1959 | this.#wasVisible = false; | ||
| 1960 | this.#container.hidden = false; | ||
| 1961 | } | ||
| 1962 | get isVisible() { | ||
| 1963 | return this.#container.hidden === false; | ||
| 1964 | } | ||
| 1965 | } | ||
| 1966 | class FreeTextAnnotationElement extends AnnotationElement { | ||
| 1967 | constructor(parameters) { | ||
| 1968 | super(parameters, { | ||
| 1969 | isRenderable: true, | ||
| 1970 | ignoreBorder: true | ||
| 1971 | }); | ||
| 1972 | this.textContent = parameters.data.textContent; | ||
| 1973 | this.textPosition = parameters.data.textPosition; | ||
| 1974 | this.annotationEditorType = util.AnnotationEditorType.FREETEXT; | ||
| 1975 | } | ||
| 1976 | render() { | ||
| 1977 | this.container.classList.add("freeTextAnnotation"); | ||
| 1978 | if (this.textContent) { | ||
| 1979 | const content = document.createElement("div"); | ||
| 1980 | content.classList.add("annotationTextContent"); | ||
| 1981 | content.setAttribute("role", "comment"); | ||
| 1982 | for (const line of this.textContent) { | ||
| 1983 | const lineSpan = document.createElement("span"); | ||
| 1984 | lineSpan.textContent = line; | ||
| 1985 | content.append(lineSpan); | ||
| 1986 | } | ||
| 1987 | this.container.append(content); | ||
| 1988 | } | ||
| 1989 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 1990 | this._createPopup(); | ||
| 1991 | } | ||
| 1992 | this._editOnDoubleClick(); | ||
| 1993 | return this.container; | ||
| 1994 | } | ||
| 1995 | get _isEditable() { | ||
| 1996 | return this.data.hasOwnCanvas; | ||
| 1997 | } | ||
| 1998 | } | ||
| 1999 | class LineAnnotationElement extends AnnotationElement { | ||
| 2000 | #line = null; | ||
| 2001 | constructor(parameters) { | ||
| 2002 | super(parameters, { | ||
| 2003 | isRenderable: true, | ||
| 2004 | ignoreBorder: true | ||
| 2005 | }); | ||
| 2006 | } | ||
| 2007 | render() { | ||
| 2008 | this.container.classList.add("lineAnnotation"); | ||
| 2009 | const data = this.data; | ||
| 2010 | const { | ||
| 2011 | width, | ||
| 2012 | height | ||
| 2013 | } = getRectDims(data.rect); | ||
| 2014 | const svg = this.svgFactory.create(width, height, true); | ||
| 2015 | const line = this.#line = this.svgFactory.createElement("svg:line"); | ||
| 2016 | line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); | ||
| 2017 | line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); | ||
| 2018 | line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); | ||
| 2019 | line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); | ||
| 2020 | line.setAttribute("stroke-width", data.borderStyle.width || 1); | ||
| 2021 | line.setAttribute("stroke", "transparent"); | ||
| 2022 | line.setAttribute("fill", "transparent"); | ||
| 2023 | svg.append(line); | ||
| 2024 | this.container.append(svg); | ||
| 2025 | if (!data.popupRef && this.hasPopupData) { | ||
| 2026 | this._createPopup(); | ||
| 2027 | } | ||
| 2028 | return this.container; | ||
| 2029 | } | ||
| 2030 | getElementsToTriggerPopup() { | ||
| 2031 | return this.#line; | ||
| 2032 | } | ||
| 2033 | addHighlightArea() { | ||
| 2034 | this.container.classList.add("highlightArea"); | ||
| 2035 | } | ||
| 2036 | } | ||
| 2037 | class SquareAnnotationElement extends AnnotationElement { | ||
| 2038 | #square = null; | ||
| 2039 | constructor(parameters) { | ||
| 2040 | super(parameters, { | ||
| 2041 | isRenderable: true, | ||
| 2042 | ignoreBorder: true | ||
| 2043 | }); | ||
| 2044 | } | ||
| 2045 | render() { | ||
| 2046 | this.container.classList.add("squareAnnotation"); | ||
| 2047 | const data = this.data; | ||
| 2048 | const { | ||
| 2049 | width, | ||
| 2050 | height | ||
| 2051 | } = getRectDims(data.rect); | ||
| 2052 | const svg = this.svgFactory.create(width, height, true); | ||
| 2053 | const borderWidth = data.borderStyle.width; | ||
| 2054 | const square = this.#square = this.svgFactory.createElement("svg:rect"); | ||
| 2055 | square.setAttribute("x", borderWidth / 2); | ||
| 2056 | square.setAttribute("y", borderWidth / 2); | ||
| 2057 | square.setAttribute("width", width - borderWidth); | ||
| 2058 | square.setAttribute("height", height - borderWidth); | ||
| 2059 | square.setAttribute("stroke-width", borderWidth || 1); | ||
| 2060 | square.setAttribute("stroke", "transparent"); | ||
| 2061 | square.setAttribute("fill", "transparent"); | ||
| 2062 | svg.append(square); | ||
| 2063 | this.container.append(svg); | ||
| 2064 | if (!data.popupRef && this.hasPopupData) { | ||
| 2065 | this._createPopup(); | ||
| 2066 | } | ||
| 2067 | return this.container; | ||
| 2068 | } | ||
| 2069 | getElementsToTriggerPopup() { | ||
| 2070 | return this.#square; | ||
| 2071 | } | ||
| 2072 | addHighlightArea() { | ||
| 2073 | this.container.classList.add("highlightArea"); | ||
| 2074 | } | ||
| 2075 | } | ||
| 2076 | class CircleAnnotationElement extends AnnotationElement { | ||
| 2077 | #circle = null; | ||
| 2078 | constructor(parameters) { | ||
| 2079 | super(parameters, { | ||
| 2080 | isRenderable: true, | ||
| 2081 | ignoreBorder: true | ||
| 2082 | }); | ||
| 2083 | } | ||
| 2084 | render() { | ||
| 2085 | this.container.classList.add("circleAnnotation"); | ||
| 2086 | const data = this.data; | ||
| 2087 | const { | ||
| 2088 | width, | ||
| 2089 | height | ||
| 2090 | } = getRectDims(data.rect); | ||
| 2091 | const svg = this.svgFactory.create(width, height, true); | ||
| 2092 | const borderWidth = data.borderStyle.width; | ||
| 2093 | const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); | ||
| 2094 | circle.setAttribute("cx", width / 2); | ||
| 2095 | circle.setAttribute("cy", height / 2); | ||
| 2096 | circle.setAttribute("rx", width / 2 - borderWidth / 2); | ||
| 2097 | circle.setAttribute("ry", height / 2 - borderWidth / 2); | ||
| 2098 | circle.setAttribute("stroke-width", borderWidth || 1); | ||
| 2099 | circle.setAttribute("stroke", "transparent"); | ||
| 2100 | circle.setAttribute("fill", "transparent"); | ||
| 2101 | svg.append(circle); | ||
| 2102 | this.container.append(svg); | ||
| 2103 | if (!data.popupRef && this.hasPopupData) { | ||
| 2104 | this._createPopup(); | ||
| 2105 | } | ||
| 2106 | return this.container; | ||
| 2107 | } | ||
| 2108 | getElementsToTriggerPopup() { | ||
| 2109 | return this.#circle; | ||
| 2110 | } | ||
| 2111 | addHighlightArea() { | ||
| 2112 | this.container.classList.add("highlightArea"); | ||
| 2113 | } | ||
| 2114 | } | ||
| 2115 | class PolylineAnnotationElement extends AnnotationElement { | ||
| 2116 | #polyline = null; | ||
| 2117 | constructor(parameters) { | ||
| 2118 | super(parameters, { | ||
| 2119 | isRenderable: true, | ||
| 2120 | ignoreBorder: true | ||
| 2121 | }); | ||
| 2122 | this.containerClassName = "polylineAnnotation"; | ||
| 2123 | this.svgElementName = "svg:polyline"; | ||
| 2124 | } | ||
| 2125 | render() { | ||
| 2126 | this.container.classList.add(this.containerClassName); | ||
| 2127 | const data = this.data; | ||
| 2128 | const { | ||
| 2129 | width, | ||
| 2130 | height | ||
| 2131 | } = getRectDims(data.rect); | ||
| 2132 | const svg = this.svgFactory.create(width, height, true); | ||
| 2133 | let points = []; | ||
| 2134 | for (const coordinate of data.vertices) { | ||
| 2135 | const x = coordinate.x - data.rect[0]; | ||
| 2136 | const y = data.rect[3] - coordinate.y; | ||
| 2137 | points.push(x + "," + y); | ||
| 2138 | } | ||
| 2139 | points = points.join(" "); | ||
| 2140 | const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); | ||
| 2141 | polyline.setAttribute("points", points); | ||
| 2142 | polyline.setAttribute("stroke-width", data.borderStyle.width || 1); | ||
| 2143 | polyline.setAttribute("stroke", "transparent"); | ||
| 2144 | polyline.setAttribute("fill", "transparent"); | ||
| 2145 | svg.append(polyline); | ||
| 2146 | this.container.append(svg); | ||
| 2147 | if (!data.popupRef && this.hasPopupData) { | ||
| 2148 | this._createPopup(); | ||
| 2149 | } | ||
| 2150 | return this.container; | ||
| 2151 | } | ||
| 2152 | getElementsToTriggerPopup() { | ||
| 2153 | return this.#polyline; | ||
| 2154 | } | ||
| 2155 | addHighlightArea() { | ||
| 2156 | this.container.classList.add("highlightArea"); | ||
| 2157 | } | ||
| 2158 | } | ||
| 2159 | class PolygonAnnotationElement extends PolylineAnnotationElement { | ||
| 2160 | constructor(parameters) { | ||
| 2161 | super(parameters); | ||
| 2162 | this.containerClassName = "polygonAnnotation"; | ||
| 2163 | this.svgElementName = "svg:polygon"; | ||
| 2164 | } | ||
| 2165 | } | ||
| 2166 | class CaretAnnotationElement extends AnnotationElement { | ||
| 2167 | constructor(parameters) { | ||
| 2168 | super(parameters, { | ||
| 2169 | isRenderable: true, | ||
| 2170 | ignoreBorder: true | ||
| 2171 | }); | ||
| 2172 | } | ||
| 2173 | render() { | ||
| 2174 | this.container.classList.add("caretAnnotation"); | ||
| 2175 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2176 | this._createPopup(); | ||
| 2177 | } | ||
| 2178 | return this.container; | ||
| 2179 | } | ||
| 2180 | } | ||
| 2181 | class InkAnnotationElement extends AnnotationElement { | ||
| 2182 | #polylines = []; | ||
| 2183 | constructor(parameters) { | ||
| 2184 | super(parameters, { | ||
| 2185 | isRenderable: true, | ||
| 2186 | ignoreBorder: true | ||
| 2187 | }); | ||
| 2188 | this.containerClassName = "inkAnnotation"; | ||
| 2189 | this.svgElementName = "svg:polyline"; | ||
| 2190 | this.annotationEditorType = util.AnnotationEditorType.INK; | ||
| 2191 | } | ||
| 2192 | render() { | ||
| 2193 | this.container.classList.add(this.containerClassName); | ||
| 2194 | const data = this.data; | ||
| 2195 | const { | ||
| 2196 | width, | ||
| 2197 | height | ||
| 2198 | } = getRectDims(data.rect); | ||
| 2199 | const svg = this.svgFactory.create(width, height, true); | ||
| 2200 | for (const inkList of data.inkLists) { | ||
| 2201 | let points = []; | ||
| 2202 | for (const coordinate of inkList) { | ||
| 2203 | const x = coordinate.x - data.rect[0]; | ||
| 2204 | const y = data.rect[3] - coordinate.y; | ||
| 2205 | points.push(`${x},${y}`); | ||
| 2206 | } | ||
| 2207 | points = points.join(" "); | ||
| 2208 | const polyline = this.svgFactory.createElement(this.svgElementName); | ||
| 2209 | this.#polylines.push(polyline); | ||
| 2210 | polyline.setAttribute("points", points); | ||
| 2211 | polyline.setAttribute("stroke-width", data.borderStyle.width || 1); | ||
| 2212 | polyline.setAttribute("stroke", "transparent"); | ||
| 2213 | polyline.setAttribute("fill", "transparent"); | ||
| 2214 | if (!data.popupRef && this.hasPopupData) { | ||
| 2215 | this._createPopup(); | ||
| 2216 | } | ||
| 2217 | svg.append(polyline); | ||
| 2218 | } | ||
| 2219 | this.container.append(svg); | ||
| 2220 | return this.container; | ||
| 2221 | } | ||
| 2222 | getElementsToTriggerPopup() { | ||
| 2223 | return this.#polylines; | ||
| 2224 | } | ||
| 2225 | addHighlightArea() { | ||
| 2226 | this.container.classList.add("highlightArea"); | ||
| 2227 | } | ||
| 2228 | } | ||
| 2229 | class HighlightAnnotationElement extends AnnotationElement { | ||
| 2230 | constructor(parameters) { | ||
| 2231 | super(parameters, { | ||
| 2232 | isRenderable: true, | ||
| 2233 | ignoreBorder: true, | ||
| 2234 | createQuadrilaterals: true | ||
| 2235 | }); | ||
| 2236 | } | ||
| 2237 | render() { | ||
| 2238 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2239 | this._createPopup(); | ||
| 2240 | } | ||
| 2241 | this.container.classList.add("highlightAnnotation"); | ||
| 2242 | return this.container; | ||
| 2243 | } | ||
| 2244 | } | ||
| 2245 | class UnderlineAnnotationElement extends AnnotationElement { | ||
| 2246 | constructor(parameters) { | ||
| 2247 | super(parameters, { | ||
| 2248 | isRenderable: true, | ||
| 2249 | ignoreBorder: true, | ||
| 2250 | createQuadrilaterals: true | ||
| 2251 | }); | ||
| 2252 | } | ||
| 2253 | render() { | ||
| 2254 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2255 | this._createPopup(); | ||
| 2256 | } | ||
| 2257 | this.container.classList.add("underlineAnnotation"); | ||
| 2258 | return this.container; | ||
| 2259 | } | ||
| 2260 | } | ||
| 2261 | class SquigglyAnnotationElement extends AnnotationElement { | ||
| 2262 | constructor(parameters) { | ||
| 2263 | super(parameters, { | ||
| 2264 | isRenderable: true, | ||
| 2265 | ignoreBorder: true, | ||
| 2266 | createQuadrilaterals: true | ||
| 2267 | }); | ||
| 2268 | } | ||
| 2269 | render() { | ||
| 2270 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2271 | this._createPopup(); | ||
| 2272 | } | ||
| 2273 | this.container.classList.add("squigglyAnnotation"); | ||
| 2274 | return this.container; | ||
| 2275 | } | ||
| 2276 | } | ||
| 2277 | class StrikeOutAnnotationElement extends AnnotationElement { | ||
| 2278 | constructor(parameters) { | ||
| 2279 | super(parameters, { | ||
| 2280 | isRenderable: true, | ||
| 2281 | ignoreBorder: true, | ||
| 2282 | createQuadrilaterals: true | ||
| 2283 | }); | ||
| 2284 | } | ||
| 2285 | render() { | ||
| 2286 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2287 | this._createPopup(); | ||
| 2288 | } | ||
| 2289 | this.container.classList.add("strikeoutAnnotation"); | ||
| 2290 | return this.container; | ||
| 2291 | } | ||
| 2292 | } | ||
| 2293 | class StampAnnotationElement extends AnnotationElement { | ||
| 2294 | constructor(parameters) { | ||
| 2295 | super(parameters, { | ||
| 2296 | isRenderable: true, | ||
| 2297 | ignoreBorder: true | ||
| 2298 | }); | ||
| 2299 | } | ||
| 2300 | render() { | ||
| 2301 | this.container.classList.add("stampAnnotation"); | ||
| 2302 | if (!this.data.popupRef && this.hasPopupData) { | ||
| 2303 | this._createPopup(); | ||
| 2304 | } | ||
| 2305 | return this.container; | ||
| 2306 | } | ||
| 2307 | } | ||
| 2308 | class FileAttachmentAnnotationElement extends AnnotationElement { | ||
| 2309 | #trigger = null; | ||
| 2310 | constructor(parameters) { | ||
| 2311 | super(parameters, { | ||
| 2312 | isRenderable: true | ||
| 2313 | }); | ||
| 2314 | const { | ||
| 2315 | filename, | ||
| 2316 | content | ||
| 2317 | } = this.data.file; | ||
| 2318 | this.filename = (0,display_utils.getFilenameFromUrl)(filename, true); | ||
| 2319 | this.content = content; | ||
| 2320 | this.linkService.eventBus?.dispatch("fileattachmentannotation", { | ||
| 2321 | source: this, | ||
| 2322 | filename, | ||
| 2323 | content | ||
| 2324 | }); | ||
| 2325 | } | ||
| 2326 | render() { | ||
| 2327 | this.container.classList.add("fileAttachmentAnnotation"); | ||
| 2328 | const { | ||
| 2329 | container, | ||
| 2330 | data | ||
| 2331 | } = this; | ||
| 2332 | let trigger; | ||
| 2333 | if (data.hasAppearance || data.fillAlpha === 0) { | ||
| 2334 | trigger = document.createElement("div"); | ||
| 2335 | } else { | ||
| 2336 | trigger = document.createElement("img"); | ||
| 2337 | trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; | ||
| 2338 | if (data.fillAlpha && data.fillAlpha < 1) { | ||
| 2339 | trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; | ||
| 2340 | } | ||
| 2341 | } | ||
| 2342 | trigger.addEventListener("dblclick", this.#download.bind(this)); | ||
| 2343 | this.#trigger = trigger; | ||
| 2344 | const { | ||
| 2345 | isMac | ||
| 2346 | } = util.FeatureTest.platform; | ||
| 2347 | container.addEventListener("keydown", evt => { | ||
| 2348 | if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { | ||
| 2349 | this.#download(); | ||
| 2350 | } | ||
| 2351 | }); | ||
| 2352 | if (!data.popupRef && this.hasPopupData) { | ||
| 2353 | this._createPopup(); | ||
| 2354 | } else { | ||
| 2355 | trigger.classList.add("popupTriggerArea"); | ||
| 2356 | } | ||
| 2357 | container.append(trigger); | ||
| 2358 | return container; | ||
| 2359 | } | ||
| 2360 | getElementsToTriggerPopup() { | ||
| 2361 | return this.#trigger; | ||
| 2362 | } | ||
| 2363 | addHighlightArea() { | ||
| 2364 | this.container.classList.add("highlightArea"); | ||
| 2365 | } | ||
| 2366 | #download() { | ||
| 2367 | this.downloadManager?.openOrDownloadData(this.content, this.filename); | ||
| 2368 | } | ||
| 2369 | } | ||
| 2370 | class AnnotationLayer { | ||
| 2371 | #accessibilityManager = null; | ||
| 2372 | #annotationCanvasMap = null; | ||
| 2373 | #editableAnnotations = new Map(); | ||
| 2374 | constructor({ | ||
| 2375 | div, | ||
| 2376 | accessibilityManager, | ||
| 2377 | annotationCanvasMap, | ||
| 2378 | page, | ||
| 2379 | viewport | ||
| 2380 | }) { | ||
| 2381 | this.div = div; | ||
| 2382 | this.#accessibilityManager = accessibilityManager; | ||
| 2383 | this.#annotationCanvasMap = annotationCanvasMap; | ||
| 2384 | this.page = page; | ||
| 2385 | this.viewport = viewport; | ||
| 2386 | this.zIndex = 0; | ||
| 2387 | } | ||
| 2388 | #appendElement(element, id) { | ||
| 2389 | const contentElement = element.firstChild || element; | ||
| 2390 | contentElement.id = `${util.AnnotationPrefix}${id}`; | ||
| 2391 | this.div.append(element); | ||
| 2392 | this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); | ||
| 2393 | } | ||
| 2394 | async render(params) { | ||
| 2395 | const { | ||
| 2396 | annotations | ||
| 2397 | } = params; | ||
| 2398 | const layer = this.div; | ||
| 2399 | (0,display_utils.setLayerDimensions)(layer, this.viewport); | ||
| 2400 | const popupToElements = new Map(); | ||
| 2401 | const elementParams = { | ||
| 2402 | data: null, | ||
| 2403 | layer, | ||
| 2404 | linkService: params.linkService, | ||
| 2405 | downloadManager: params.downloadManager, | ||
| 2406 | imageResourcesPath: params.imageResourcesPath || "", | ||
| 2407 | renderForms: params.renderForms !== false, | ||
| 2408 | svgFactory: new display_utils.DOMSVGFactory(), | ||
| 2409 | annotationStorage: params.annotationStorage || new annotation_storage.AnnotationStorage(), | ||
| 2410 | enableScripting: params.enableScripting === true, | ||
| 2411 | hasJSActions: params.hasJSActions, | ||
| 2412 | fieldObjects: params.fieldObjects, | ||
| 2413 | parent: this, | ||
| 2414 | elements: null | ||
| 2415 | }; | ||
| 2416 | for (const data of annotations) { | ||
| 2417 | if (data.noHTML) { | ||
| 2418 | continue; | ||
| 2419 | } | ||
| 2420 | const isPopupAnnotation = data.annotationType === util.AnnotationType.POPUP; | ||
| 2421 | if (!isPopupAnnotation) { | ||
| 2422 | const { | ||
| 2423 | width, | ||
| 2424 | height | ||
| 2425 | } = getRectDims(data.rect); | ||
| 2426 | if (width <= 0 || height <= 0) { | ||
| 2427 | continue; | ||
| 2428 | } | ||
| 2429 | } else { | ||
| 2430 | const elements = popupToElements.get(data.id); | ||
| 2431 | if (!elements) { | ||
| 2432 | continue; | ||
| 2433 | } | ||
| 2434 | elementParams.elements = elements; | ||
| 2435 | } | ||
| 2436 | elementParams.data = data; | ||
| 2437 | const element = AnnotationElementFactory.create(elementParams); | ||
| 2438 | if (!element.isRenderable) { | ||
| 2439 | continue; | ||
| 2440 | } | ||
| 2441 | if (!isPopupAnnotation && data.popupRef) { | ||
| 2442 | const elements = popupToElements.get(data.popupRef); | ||
| 2443 | if (!elements) { | ||
| 2444 | popupToElements.set(data.popupRef, [element]); | ||
| 2445 | } else { | ||
| 2446 | elements.push(element); | ||
| 2447 | } | ||
| 2448 | } | ||
| 2449 | if (element.annotationEditorType > 0) { | ||
| 2450 | this.#editableAnnotations.set(element.data.id, element); | ||
| 2451 | } | ||
| 2452 | const rendered = element.render(); | ||
| 2453 | if (data.hidden) { | ||
| 2454 | rendered.style.visibility = "hidden"; | ||
| 2455 | } | ||
| 2456 | this.#appendElement(rendered, data.id); | ||
| 2457 | } | ||
| 2458 | this.#setAnnotationCanvasMap(); | ||
| 2459 | } | ||
| 2460 | update({ | ||
| 2461 | viewport | ||
| 2462 | }) { | ||
| 2463 | const layer = this.div; | ||
| 2464 | this.viewport = viewport; | ||
| 2465 | (0,display_utils.setLayerDimensions)(layer, { | ||
| 2466 | rotation: viewport.rotation | ||
| 2467 | }); | ||
| 2468 | this.#setAnnotationCanvasMap(); | ||
| 2469 | layer.hidden = false; | ||
| 2470 | } | ||
| 2471 | #setAnnotationCanvasMap() { | ||
| 2472 | if (!this.#annotationCanvasMap) { | ||
| 2473 | return; | ||
| 2474 | } | ||
| 2475 | const layer = this.div; | ||
| 2476 | for (const [id, canvas] of this.#annotationCanvasMap) { | ||
| 2477 | const element = layer.querySelector(`[data-annotation-id="${id}"]`); | ||
| 2478 | if (!element) { | ||
| 2479 | continue; | ||
| 2480 | } | ||
| 2481 | const { | ||
| 2482 | firstChild | ||
| 2483 | } = element; | ||
| 2484 | if (!firstChild) { | ||
| 2485 | element.append(canvas); | ||
| 2486 | } else if (firstChild.nodeName === "CANVAS") { | ||
| 2487 | firstChild.replaceWith(canvas); | ||
| 2488 | } else { | ||
| 2489 | firstChild.before(canvas); | ||
| 2490 | } | ||
| 2491 | } | ||
| 2492 | this.#annotationCanvasMap.clear(); | ||
| 2493 | } | ||
| 2494 | getEditableAnnotations() { | ||
| 2495 | return Array.from(this.#editableAnnotations.values()); | ||
| 2496 | } | ||
| 2497 | getEditableAnnotation(id) { | ||
| 2498 | return this.#editableAnnotations.get(id); | ||
| 2499 | } | ||
| 2500 | } | ||
| 2501 | |||
| 2502 | |||
| 2503 | /***/ }), | ||
| 2504 | |||
| 2505 | /***/ 780: | ||
| 2506 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 2507 | |||
| 2508 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { | ||
| 2509 | /* harmony export */ AnnotationStorage: () => (/* binding */ AnnotationStorage), | ||
| 2510 | /* harmony export */ PrintAnnotationStorage: () => (/* binding */ PrintAnnotationStorage), | ||
| 2511 | /* harmony export */ SerializableEmpty: () => (/* binding */ SerializableEmpty) | ||
| 2512 | /* harmony export */ }); | ||
| 2513 | /* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); | ||
| 2514 | /* harmony import */ var _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(796); | ||
| 2515 | /* harmony import */ var _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(825); | ||
| 2516 | |||
| 2517 | |||
| 2518 | |||
| 2519 | const SerializableEmpty = Object.freeze({ | ||
| 2520 | map: null, | ||
| 2521 | hash: "", | ||
| 2522 | transfer: undefined | ||
| 2523 | }); | ||
| 2524 | class AnnotationStorage { | ||
| 2525 | #modified = false; | ||
| 2526 | #storage = new Map(); | ||
| 2527 | constructor() { | ||
| 2528 | this.onSetModified = null; | ||
| 2529 | this.onResetModified = null; | ||
| 2530 | this.onAnnotationEditor = null; | ||
| 2531 | } | ||
| 2532 | getValue(key, defaultValue) { | ||
| 2533 | const value = this.#storage.get(key); | ||
| 2534 | if (value === undefined) { | ||
| 2535 | return defaultValue; | ||
| 2536 | } | ||
| 2537 | return Object.assign(defaultValue, value); | ||
| 2538 | } | ||
| 2539 | getRawValue(key) { | ||
| 2540 | return this.#storage.get(key); | ||
| 2541 | } | ||
| 2542 | remove(key) { | ||
| 2543 | this.#storage.delete(key); | ||
| 2544 | if (this.#storage.size === 0) { | ||
| 2545 | this.resetModified(); | ||
| 2546 | } | ||
| 2547 | if (typeof this.onAnnotationEditor === "function") { | ||
| 2548 | for (const value of this.#storage.values()) { | ||
| 2549 | if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor) { | ||
| 2550 | return; | ||
| 2551 | } | ||
| 2552 | } | ||
| 2553 | this.onAnnotationEditor(null); | ||
| 2554 | } | ||
| 2555 | } | ||
| 2556 | setValue(key, value) { | ||
| 2557 | const obj = this.#storage.get(key); | ||
| 2558 | let modified = false; | ||
| 2559 | if (obj !== undefined) { | ||
| 2560 | for (const [entry, val] of Object.entries(value)) { | ||
| 2561 | if (obj[entry] !== val) { | ||
| 2562 | modified = true; | ||
| 2563 | obj[entry] = val; | ||
| 2564 | } | ||
| 2565 | } | ||
| 2566 | } else { | ||
| 2567 | modified = true; | ||
| 2568 | this.#storage.set(key, value); | ||
| 2569 | } | ||
| 2570 | if (modified) { | ||
| 2571 | this.#setModified(); | ||
| 2572 | } | ||
| 2573 | if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor && typeof this.onAnnotationEditor === "function") { | ||
| 2574 | this.onAnnotationEditor(value.constructor._type); | ||
| 2575 | } | ||
| 2576 | } | ||
| 2577 | has(key) { | ||
| 2578 | return this.#storage.has(key); | ||
| 2579 | } | ||
| 2580 | getAll() { | ||
| 2581 | return this.#storage.size > 0 ? (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#storage) : null; | ||
| 2582 | } | ||
| 2583 | setAll(obj) { | ||
| 2584 | for (const [key, val] of Object.entries(obj)) { | ||
| 2585 | this.setValue(key, val); | ||
| 2586 | } | ||
| 2587 | } | ||
| 2588 | get size() { | ||
| 2589 | return this.#storage.size; | ||
| 2590 | } | ||
| 2591 | #setModified() { | ||
| 2592 | if (!this.#modified) { | ||
| 2593 | this.#modified = true; | ||
| 2594 | if (typeof this.onSetModified === "function") { | ||
| 2595 | this.onSetModified(); | ||
| 2596 | } | ||
| 2597 | } | ||
| 2598 | } | ||
| 2599 | resetModified() { | ||
| 2600 | if (this.#modified) { | ||
| 2601 | this.#modified = false; | ||
| 2602 | if (typeof this.onResetModified === "function") { | ||
| 2603 | this.onResetModified(); | ||
| 2604 | } | ||
| 2605 | } | ||
| 2606 | } | ||
| 2607 | get print() { | ||
| 2608 | return new PrintAnnotationStorage(this); | ||
| 2609 | } | ||
| 2610 | get serializable() { | ||
| 2611 | if (this.#storage.size === 0) { | ||
| 2612 | return SerializableEmpty; | ||
| 2613 | } | ||
| 2614 | const map = new Map(), | ||
| 2615 | hash = new _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__.MurmurHash3_64(), | ||
| 2616 | transfer = []; | ||
| 2617 | const context = Object.create(null); | ||
| 2618 | let hasBitmap = false; | ||
| 2619 | for (const [key, val] of this.#storage) { | ||
| 2620 | const serialized = val instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor ? val.serialize(false, context) : val; | ||
| 2621 | if (serialized) { | ||
| 2622 | map.set(key, serialized); | ||
| 2623 | hash.update(`${key}:${JSON.stringify(serialized)}`); | ||
| 2624 | hasBitmap ||= !!serialized.bitmap; | ||
| 2625 | } | ||
| 2626 | } | ||
| 2627 | if (hasBitmap) { | ||
| 2628 | for (const value of map.values()) { | ||
| 2629 | if (value.bitmap) { | ||
| 2630 | transfer.push(value.bitmap); | ||
| 2631 | } | ||
| 2632 | } | ||
| 2633 | } | ||
| 2634 | return map.size > 0 ? { | ||
| 2635 | map, | ||
| 2636 | hash: hash.hexdigest(), | ||
| 2637 | transfer | ||
| 2638 | } : SerializableEmpty; | ||
| 2639 | } | ||
| 2640 | } | ||
| 2641 | class PrintAnnotationStorage extends AnnotationStorage { | ||
| 2642 | #serializable; | ||
| 2643 | constructor(parent) { | ||
| 2644 | super(); | ||
| 2645 | const { | ||
| 2646 | map, | ||
| 2647 | hash, | ||
| 2648 | transfer | ||
| 2649 | } = parent.serializable; | ||
| 2650 | const clone = structuredClone(map, transfer ? { | ||
| 2651 | transfer | ||
| 2652 | } : null); | ||
| 2653 | this.#serializable = { | ||
| 2654 | map: clone, | ||
| 2655 | hash, | ||
| 2656 | transfer | ||
| 2657 | }; | ||
| 2658 | } | ||
| 2659 | get print() { | ||
| 2660 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Should not call PrintAnnotationStorage.print"); | ||
| 2661 | } | ||
| 2662 | get serializable() { | ||
| 2663 | return this.#serializable; | ||
| 2664 | } | ||
| 2665 | } | ||
| 2666 | |||
| 2667 | |||
| 2668 | /***/ }), | ||
| 2669 | |||
| 2670 | /***/ 406: | ||
| 2671 | /***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 2672 | |||
| 2673 | __webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { | ||
| 2674 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { | ||
| 2675 | /* harmony export */ PDFDataRangeTransport: () => (/* binding */ PDFDataRangeTransport), | ||
| 2676 | /* harmony export */ PDFWorker: () => (/* binding */ PDFWorker), | ||
| 2677 | /* harmony export */ build: () => (/* binding */ build), | ||
| 2678 | /* harmony export */ getDocument: () => (/* binding */ getDocument), | ||
| 2679 | /* harmony export */ version: () => (/* binding */ version) | ||
| 2680 | /* harmony export */ }); | ||
| 2681 | /* unused harmony exports DefaultCanvasFactory, DefaultCMapReaderFactory, DefaultFilterFactory, DefaultStandardFontDataFactory, LoopbackPort, PDFDocumentLoadingTask, PDFDocumentProxy, PDFPageProxy, PDFWorkerUtil, RenderTask */ | ||
| 2682 | /* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); | ||
| 2683 | /* harmony import */ var _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(780); | ||
| 2684 | /* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); | ||
| 2685 | /* harmony import */ var _font_loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(742); | ||
| 2686 | /* harmony import */ var display_node_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(738); | ||
| 2687 | /* harmony import */ var _canvas_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(250); | ||
| 2688 | /* harmony import */ var _worker_options_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(368); | ||
| 2689 | /* harmony import */ var _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(694); | ||
| 2690 | /* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(472); | ||
| 2691 | /* harmony import */ var _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(890); | ||
| 2692 | /* harmony import */ var _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(92); | ||
| 2693 | /* harmony import */ var display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(171); | ||
| 2694 | /* harmony import */ var display_network__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(474); | ||
| 2695 | /* harmony import */ var display_node_stream__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(498); | ||
| 2696 | /* harmony import */ var _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(521); | ||
| 2697 | var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__]); | ||
| 2698 | ([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__); | ||
| 2699 | |||
| 2700 | |||
| 2701 | |||
| 2702 | |||
| 2703 | |||
| 2704 | |||
| 2705 | |||
| 2706 | |||
| 2707 | |||
| 2708 | |||
| 2709 | |||
| 2710 | |||
| 2711 | |||
| 2712 | |||
| 2713 | |||
| 2714 | const DEFAULT_RANGE_CHUNK_SIZE = 65536; | ||
| 2715 | const RENDERING_CANCELLED_TIMEOUT = 100; | ||
| 2716 | const DELAYED_CLEANUP_TIMEOUT = 5000; | ||
| 2717 | const DefaultCanvasFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCanvasFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCanvasFactory; | ||
| 2718 | const DefaultCMapReaderFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCMapReaderFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory; | ||
| 2719 | const DefaultFilterFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeFilterFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMFilterFactory; | ||
| 2720 | const DefaultStandardFontDataFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeStandardFontDataFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory; | ||
| 2721 | function getDocument(src) { | ||
| 2722 | if (typeof src === "string" || src instanceof URL) { | ||
| 2723 | src = { | ||
| 2724 | url: src | ||
| 2725 | }; | ||
| 2726 | } else if ((0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(src)) { | ||
| 2727 | src = { | ||
| 2728 | data: src | ||
| 2729 | }; | ||
| 2730 | } | ||
| 2731 | if (typeof src !== "object") { | ||
| 2732 | throw new Error("Invalid parameter in getDocument, need parameter object."); | ||
| 2733 | } | ||
| 2734 | if (!src.url && !src.data && !src.range) { | ||
| 2735 | throw new Error("Invalid parameter object: need either .data, .range or .url"); | ||
| 2736 | } | ||
| 2737 | const task = new PDFDocumentLoadingTask(); | ||
| 2738 | const { | ||
| 2739 | docId | ||
| 2740 | } = task; | ||
| 2741 | const url = src.url ? getUrlProp(src.url) : null; | ||
| 2742 | const data = src.data ? getDataProp(src.data) : null; | ||
| 2743 | const httpHeaders = src.httpHeaders || null; | ||
| 2744 | const withCredentials = src.withCredentials === true; | ||
| 2745 | const password = src.password ?? null; | ||
| 2746 | const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; | ||
| 2747 | const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; | ||
| 2748 | let worker = src.worker instanceof PDFWorker ? src.worker : null; | ||
| 2749 | const verbosity = src.verbosity; | ||
| 2750 | const docBaseUrl = typeof src.docBaseUrl === "string" && !(0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; | ||
| 2751 | const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; | ||
| 2752 | const cMapPacked = src.cMapPacked !== false; | ||
| 2753 | const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; | ||
| 2754 | const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; | ||
| 2755 | const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; | ||
| 2756 | const ignoreErrors = src.stopAtErrors !== true; | ||
| 2757 | const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; | ||
| 2758 | const isEvalSupported = src.isEvalSupported !== false; | ||
| 2759 | const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; | ||
| 2760 | const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; | ||
| 2761 | const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; | ||
| 2762 | const fontExtraProperties = src.fontExtraProperties === true; | ||
| 2763 | const enableXfa = src.enableXfa === true; | ||
| 2764 | const ownerDocument = src.ownerDocument || globalThis.document; | ||
| 2765 | const disableRange = src.disableRange === true; | ||
| 2766 | const disableStream = src.disableStream === true; | ||
| 2767 | const disableAutoFetch = src.disableAutoFetch === true; | ||
| 2768 | const pdfBug = src.pdfBug === true; | ||
| 2769 | const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; | ||
| 2770 | const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && !disableFontFace; | ||
| 2771 | const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(cMapUrl, document.baseURI) && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(standardFontDataUrl, document.baseURI); | ||
| 2772 | const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ | ||
| 2773 | ownerDocument | ||
| 2774 | }); | ||
| 2775 | const filterFactory = src.filterFactory || new DefaultFilterFactory({ | ||
| 2776 | docId, | ||
| 2777 | ownerDocument | ||
| 2778 | }); | ||
| 2779 | const styleElement = null; | ||
| 2780 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.setVerbosityLevel)(verbosity); | ||
| 2781 | const transportFactory = { | ||
| 2782 | canvasFactory, | ||
| 2783 | filterFactory | ||
| 2784 | }; | ||
| 2785 | if (!useWorkerFetch) { | ||
| 2786 | transportFactory.cMapReaderFactory = new CMapReaderFactory({ | ||
| 2787 | baseUrl: cMapUrl, | ||
| 2788 | isCompressed: cMapPacked | ||
| 2789 | }); | ||
| 2790 | transportFactory.standardFontDataFactory = new StandardFontDataFactory({ | ||
| 2791 | baseUrl: standardFontDataUrl | ||
| 2792 | }); | ||
| 2793 | } | ||
| 2794 | if (!worker) { | ||
| 2795 | const workerParams = { | ||
| 2796 | verbosity, | ||
| 2797 | port: _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerPort | ||
| 2798 | }; | ||
| 2799 | worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); | ||
| 2800 | task._worker = worker; | ||
| 2801 | } | ||
| 2802 | const fetchDocParams = { | ||
| 2803 | docId, | ||
| 2804 | apiVersion: '4.0.269', | ||
| 2805 | data, | ||
| 2806 | password, | ||
| 2807 | disableAutoFetch, | ||
| 2808 | rangeChunkSize, | ||
| 2809 | length, | ||
| 2810 | docBaseUrl, | ||
| 2811 | enableXfa, | ||
| 2812 | evaluatorOptions: { | ||
| 2813 | maxImageSize, | ||
| 2814 | disableFontFace, | ||
| 2815 | ignoreErrors, | ||
| 2816 | isEvalSupported, | ||
| 2817 | isOffscreenCanvasSupported, | ||
| 2818 | canvasMaxAreaInBytes, | ||
| 2819 | fontExtraProperties, | ||
| 2820 | useSystemFonts, | ||
| 2821 | cMapUrl: useWorkerFetch ? cMapUrl : null, | ||
| 2822 | standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null | ||
| 2823 | } | ||
| 2824 | }; | ||
| 2825 | const transportParams = { | ||
| 2826 | ignoreErrors, | ||
| 2827 | isEvalSupported, | ||
| 2828 | disableFontFace, | ||
| 2829 | fontExtraProperties, | ||
| 2830 | enableXfa, | ||
| 2831 | ownerDocument, | ||
| 2832 | disableAutoFetch, | ||
| 2833 | pdfBug, | ||
| 2834 | styleElement | ||
| 2835 | }; | ||
| 2836 | worker.promise.then(function () { | ||
| 2837 | if (task.destroyed) { | ||
| 2838 | throw new Error("Loading aborted"); | ||
| 2839 | } | ||
| 2840 | const workerIdPromise = _fetchDocument(worker, fetchDocParams); | ||
| 2841 | const networkStreamPromise = new Promise(function (resolve) { | ||
| 2842 | let networkStream; | ||
| 2843 | if (rangeTransport) { | ||
| 2844 | networkStream = new _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__.PDFDataTransportStream({ | ||
| 2845 | length, | ||
| 2846 | initialData: rangeTransport.initialData, | ||
| 2847 | progressiveDone: rangeTransport.progressiveDone, | ||
| 2848 | contentDispositionFilename: rangeTransport.contentDispositionFilename, | ||
| 2849 | disableRange, | ||
| 2850 | disableStream | ||
| 2851 | }, rangeTransport); | ||
| 2852 | } else if (!data) { | ||
| 2853 | const createPDFNetworkStream = params => { | ||
| 2854 | if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { | ||
| 2855 | return new display_node_stream__WEBPACK_IMPORTED_MODULE_13__.PDFNodeStream(params); | ||
| 2856 | } | ||
| 2857 | return (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(params.url) ? new display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__.PDFFetchStream(params) : new display_network__WEBPACK_IMPORTED_MODULE_12__.PDFNetworkStream(params); | ||
| 2858 | }; | ||
| 2859 | networkStream = createPDFNetworkStream({ | ||
| 2860 | url, | ||
| 2861 | length, | ||
| 2862 | httpHeaders, | ||
| 2863 | withCredentials, | ||
| 2864 | rangeChunkSize, | ||
| 2865 | disableRange, | ||
| 2866 | disableStream | ||
| 2867 | }); | ||
| 2868 | } | ||
| 2869 | resolve(networkStream); | ||
| 2870 | }); | ||
| 2871 | return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { | ||
| 2872 | if (task.destroyed) { | ||
| 2873 | throw new Error("Loading aborted"); | ||
| 2874 | } | ||
| 2875 | const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(docId, workerId, worker.port); | ||
| 2876 | const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); | ||
| 2877 | task._transport = transport; | ||
| 2878 | messageHandler.send("Ready", null); | ||
| 2879 | }); | ||
| 2880 | }).catch(task._capability.reject); | ||
| 2881 | return task; | ||
| 2882 | } | ||
| 2883 | async function _fetchDocument(worker, source) { | ||
| 2884 | if (worker.destroyed) { | ||
| 2885 | throw new Error("Worker was destroyed"); | ||
| 2886 | } | ||
| 2887 | const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); | ||
| 2888 | if (worker.destroyed) { | ||
| 2889 | throw new Error("Worker was destroyed"); | ||
| 2890 | } | ||
| 2891 | return workerId; | ||
| 2892 | } | ||
| 2893 | function getUrlProp(val) { | ||
| 2894 | if (val instanceof URL) { | ||
| 2895 | return val.href; | ||
| 2896 | } | ||
| 2897 | try { | ||
| 2898 | return new URL(val, window.location).href; | ||
| 2899 | } catch { | ||
| 2900 | if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof val === "string") { | ||
| 2901 | return val; | ||
| 2902 | } | ||
| 2903 | } | ||
| 2904 | throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); | ||
| 2905 | } | ||
| 2906 | function getDataProp(val) { | ||
| 2907 | if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { | ||
| 2908 | throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); | ||
| 2909 | } | ||
| 2910 | if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { | ||
| 2911 | return val; | ||
| 2912 | } | ||
| 2913 | if (typeof val === "string") { | ||
| 2914 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.stringToBytes)(val); | ||
| 2915 | } | ||
| 2916 | if (typeof val === "object" && !isNaN(val?.length) || (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(val)) { | ||
| 2917 | return new Uint8Array(val); | ||
| 2918 | } | ||
| 2919 | throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); | ||
| 2920 | } | ||
| 2921 | class PDFDocumentLoadingTask { | ||
| 2922 | static #docId = 0; | ||
| 2923 | constructor() { | ||
| 2924 | this._capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 2925 | this._transport = null; | ||
| 2926 | this._worker = null; | ||
| 2927 | this.docId = `d${PDFDocumentLoadingTask.#docId++}`; | ||
| 2928 | this.destroyed = false; | ||
| 2929 | this.onPassword = null; | ||
| 2930 | this.onProgress = null; | ||
| 2931 | } | ||
| 2932 | get promise() { | ||
| 2933 | return this._capability.promise; | ||
| 2934 | } | ||
| 2935 | async destroy() { | ||
| 2936 | this.destroyed = true; | ||
| 2937 | try { | ||
| 2938 | if (this._worker?.port) { | ||
| 2939 | this._worker._pendingDestroy = true; | ||
| 2940 | } | ||
| 2941 | await this._transport?.destroy(); | ||
| 2942 | } catch (ex) { | ||
| 2943 | if (this._worker?.port) { | ||
| 2944 | delete this._worker._pendingDestroy; | ||
| 2945 | } | ||
| 2946 | throw ex; | ||
| 2947 | } | ||
| 2948 | this._transport = null; | ||
| 2949 | if (this._worker) { | ||
| 2950 | this._worker.destroy(); | ||
| 2951 | this._worker = null; | ||
| 2952 | } | ||
| 2953 | } | ||
| 2954 | } | ||
| 2955 | class PDFDataRangeTransport { | ||
| 2956 | constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { | ||
| 2957 | this.length = length; | ||
| 2958 | this.initialData = initialData; | ||
| 2959 | this.progressiveDone = progressiveDone; | ||
| 2960 | this.contentDispositionFilename = contentDispositionFilename; | ||
| 2961 | this._rangeListeners = []; | ||
| 2962 | this._progressListeners = []; | ||
| 2963 | this._progressiveReadListeners = []; | ||
| 2964 | this._progressiveDoneListeners = []; | ||
| 2965 | this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 2966 | } | ||
| 2967 | addRangeListener(listener) { | ||
| 2968 | this._rangeListeners.push(listener); | ||
| 2969 | } | ||
| 2970 | addProgressListener(listener) { | ||
| 2971 | this._progressListeners.push(listener); | ||
| 2972 | } | ||
| 2973 | addProgressiveReadListener(listener) { | ||
| 2974 | this._progressiveReadListeners.push(listener); | ||
| 2975 | } | ||
| 2976 | addProgressiveDoneListener(listener) { | ||
| 2977 | this._progressiveDoneListeners.push(listener); | ||
| 2978 | } | ||
| 2979 | onDataRange(begin, chunk) { | ||
| 2980 | for (const listener of this._rangeListeners) { | ||
| 2981 | listener(begin, chunk); | ||
| 2982 | } | ||
| 2983 | } | ||
| 2984 | onDataProgress(loaded, total) { | ||
| 2985 | this._readyCapability.promise.then(() => { | ||
| 2986 | for (const listener of this._progressListeners) { | ||
| 2987 | listener(loaded, total); | ||
| 2988 | } | ||
| 2989 | }); | ||
| 2990 | } | ||
| 2991 | onDataProgressiveRead(chunk) { | ||
| 2992 | this._readyCapability.promise.then(() => { | ||
| 2993 | for (const listener of this._progressiveReadListeners) { | ||
| 2994 | listener(chunk); | ||
| 2995 | } | ||
| 2996 | }); | ||
| 2997 | } | ||
| 2998 | onDataProgressiveDone() { | ||
| 2999 | this._readyCapability.promise.then(() => { | ||
| 3000 | for (const listener of this._progressiveDoneListeners) { | ||
| 3001 | listener(); | ||
| 3002 | } | ||
| 3003 | }); | ||
| 3004 | } | ||
| 3005 | transportReady() { | ||
| 3006 | this._readyCapability.resolve(); | ||
| 3007 | } | ||
| 3008 | requestDataRange(begin, end) { | ||
| 3009 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); | ||
| 3010 | } | ||
| 3011 | abort() {} | ||
| 3012 | } | ||
| 3013 | class PDFDocumentProxy { | ||
| 3014 | constructor(pdfInfo, transport) { | ||
| 3015 | this._pdfInfo = pdfInfo; | ||
| 3016 | this._transport = transport; | ||
| 3017 | } | ||
| 3018 | get annotationStorage() { | ||
| 3019 | return this._transport.annotationStorage; | ||
| 3020 | } | ||
| 3021 | get filterFactory() { | ||
| 3022 | return this._transport.filterFactory; | ||
| 3023 | } | ||
| 3024 | get numPages() { | ||
| 3025 | return this._pdfInfo.numPages; | ||
| 3026 | } | ||
| 3027 | get fingerprints() { | ||
| 3028 | return this._pdfInfo.fingerprints; | ||
| 3029 | } | ||
| 3030 | get isPureXfa() { | ||
| 3031 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); | ||
| 3032 | } | ||
| 3033 | get allXfaHtml() { | ||
| 3034 | return this._transport._htmlForXfa; | ||
| 3035 | } | ||
| 3036 | getPage(pageNumber) { | ||
| 3037 | return this._transport.getPage(pageNumber); | ||
| 3038 | } | ||
| 3039 | getPageIndex(ref) { | ||
| 3040 | return this._transport.getPageIndex(ref); | ||
| 3041 | } | ||
| 3042 | getDestinations() { | ||
| 3043 | return this._transport.getDestinations(); | ||
| 3044 | } | ||
| 3045 | getDestination(id) { | ||
| 3046 | return this._transport.getDestination(id); | ||
| 3047 | } | ||
| 3048 | getPageLabels() { | ||
| 3049 | return this._transport.getPageLabels(); | ||
| 3050 | } | ||
| 3051 | getPageLayout() { | ||
| 3052 | return this._transport.getPageLayout(); | ||
| 3053 | } | ||
| 3054 | getPageMode() { | ||
| 3055 | return this._transport.getPageMode(); | ||
| 3056 | } | ||
| 3057 | getViewerPreferences() { | ||
| 3058 | return this._transport.getViewerPreferences(); | ||
| 3059 | } | ||
| 3060 | getOpenAction() { | ||
| 3061 | return this._transport.getOpenAction(); | ||
| 3062 | } | ||
| 3063 | getAttachments() { | ||
| 3064 | return this._transport.getAttachments(); | ||
| 3065 | } | ||
| 3066 | getJSActions() { | ||
| 3067 | return this._transport.getDocJSActions(); | ||
| 3068 | } | ||
| 3069 | getOutline() { | ||
| 3070 | return this._transport.getOutline(); | ||
| 3071 | } | ||
| 3072 | getOptionalContentConfig() { | ||
| 3073 | return this._transport.getOptionalContentConfig(); | ||
| 3074 | } | ||
| 3075 | getPermissions() { | ||
| 3076 | return this._transport.getPermissions(); | ||
| 3077 | } | ||
| 3078 | getMetadata() { | ||
| 3079 | return this._transport.getMetadata(); | ||
| 3080 | } | ||
| 3081 | getMarkInfo() { | ||
| 3082 | return this._transport.getMarkInfo(); | ||
| 3083 | } | ||
| 3084 | getData() { | ||
| 3085 | return this._transport.getData(); | ||
| 3086 | } | ||
| 3087 | saveDocument() { | ||
| 3088 | return this._transport.saveDocument(); | ||
| 3089 | } | ||
| 3090 | getDownloadInfo() { | ||
| 3091 | return this._transport.downloadInfoCapability.promise; | ||
| 3092 | } | ||
| 3093 | cleanup(keepLoadedFonts = false) { | ||
| 3094 | return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); | ||
| 3095 | } | ||
| 3096 | destroy() { | ||
| 3097 | return this.loadingTask.destroy(); | ||
| 3098 | } | ||
| 3099 | get loadingParams() { | ||
| 3100 | return this._transport.loadingParams; | ||
| 3101 | } | ||
| 3102 | get loadingTask() { | ||
| 3103 | return this._transport.loadingTask; | ||
| 3104 | } | ||
| 3105 | getFieldObjects() { | ||
| 3106 | return this._transport.getFieldObjects(); | ||
| 3107 | } | ||
| 3108 | hasJSActions() { | ||
| 3109 | return this._transport.hasJSActions(); | ||
| 3110 | } | ||
| 3111 | getCalculationOrderIds() { | ||
| 3112 | return this._transport.getCalculationOrderIds(); | ||
| 3113 | } | ||
| 3114 | } | ||
| 3115 | class PDFPageProxy { | ||
| 3116 | #delayedCleanupTimeout = null; | ||
| 3117 | #pendingCleanup = false; | ||
| 3118 | constructor(pageIndex, pageInfo, transport, pdfBug = false) { | ||
| 3119 | this._pageIndex = pageIndex; | ||
| 3120 | this._pageInfo = pageInfo; | ||
| 3121 | this._transport = transport; | ||
| 3122 | this._stats = pdfBug ? new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer() : null; | ||
| 3123 | this._pdfBug = pdfBug; | ||
| 3124 | this.commonObjs = transport.commonObjs; | ||
| 3125 | this.objs = new PDFObjects(); | ||
| 3126 | this._maybeCleanupAfterRender = false; | ||
| 3127 | this._intentStates = new Map(); | ||
| 3128 | this.destroyed = false; | ||
| 3129 | } | ||
| 3130 | get pageNumber() { | ||
| 3131 | return this._pageIndex + 1; | ||
| 3132 | } | ||
| 3133 | get rotate() { | ||
| 3134 | return this._pageInfo.rotate; | ||
| 3135 | } | ||
| 3136 | get ref() { | ||
| 3137 | return this._pageInfo.ref; | ||
| 3138 | } | ||
| 3139 | get userUnit() { | ||
| 3140 | return this._pageInfo.userUnit; | ||
| 3141 | } | ||
| 3142 | get view() { | ||
| 3143 | return this._pageInfo.view; | ||
| 3144 | } | ||
| 3145 | getViewport({ | ||
| 3146 | scale, | ||
| 3147 | rotation = this.rotate, | ||
| 3148 | offsetX = 0, | ||
| 3149 | offsetY = 0, | ||
| 3150 | dontFlip = false | ||
| 3151 | } = {}) { | ||
| 3152 | return new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PageViewport({ | ||
| 3153 | viewBox: this.view, | ||
| 3154 | scale, | ||
| 3155 | rotation, | ||
| 3156 | offsetX, | ||
| 3157 | offsetY, | ||
| 3158 | dontFlip | ||
| 3159 | }); | ||
| 3160 | } | ||
| 3161 | getAnnotations({ | ||
| 3162 | intent = "display" | ||
| 3163 | } = {}) { | ||
| 3164 | const intentArgs = this._transport.getRenderingIntent(intent); | ||
| 3165 | return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); | ||
| 3166 | } | ||
| 3167 | getJSActions() { | ||
| 3168 | return this._transport.getPageJSActions(this._pageIndex); | ||
| 3169 | } | ||
| 3170 | get filterFactory() { | ||
| 3171 | return this._transport.filterFactory; | ||
| 3172 | } | ||
| 3173 | get isPureXfa() { | ||
| 3174 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); | ||
| 3175 | } | ||
| 3176 | async getXfa() { | ||
| 3177 | return this._transport._htmlForXfa?.children[this._pageIndex] || null; | ||
| 3178 | } | ||
| 3179 | render({ | ||
| 3180 | canvasContext, | ||
| 3181 | viewport, | ||
| 3182 | intent = "display", | ||
| 3183 | annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, | ||
| 3184 | transform = null, | ||
| 3185 | background = null, | ||
| 3186 | optionalContentConfigPromise = null, | ||
| 3187 | annotationCanvasMap = null, | ||
| 3188 | pageColors = null, | ||
| 3189 | printAnnotationStorage = null | ||
| 3190 | }) { | ||
| 3191 | this._stats?.time("Overall"); | ||
| 3192 | const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); | ||
| 3193 | this.#pendingCleanup = false; | ||
| 3194 | this.#abortDelayedCleanup(); | ||
| 3195 | if (!optionalContentConfigPromise) { | ||
| 3196 | optionalContentConfigPromise = this._transport.getOptionalContentConfig(); | ||
| 3197 | } | ||
| 3198 | let intentState = this._intentStates.get(intentArgs.cacheKey); | ||
| 3199 | if (!intentState) { | ||
| 3200 | intentState = Object.create(null); | ||
| 3201 | this._intentStates.set(intentArgs.cacheKey, intentState); | ||
| 3202 | } | ||
| 3203 | if (intentState.streamReaderCancelTimeout) { | ||
| 3204 | clearTimeout(intentState.streamReaderCancelTimeout); | ||
| 3205 | intentState.streamReaderCancelTimeout = null; | ||
| 3206 | } | ||
| 3207 | const intentPrint = !!(intentArgs.renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT); | ||
| 3208 | if (!intentState.displayReadyCapability) { | ||
| 3209 | intentState.displayReadyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3210 | intentState.operatorList = { | ||
| 3211 | fnArray: [], | ||
| 3212 | argsArray: [], | ||
| 3213 | lastChunk: false, | ||
| 3214 | separateAnnots: null | ||
| 3215 | }; | ||
| 3216 | this._stats?.time("Page Request"); | ||
| 3217 | this._pumpOperatorList(intentArgs); | ||
| 3218 | } | ||
| 3219 | const complete = error => { | ||
| 3220 | intentState.renderTasks.delete(internalRenderTask); | ||
| 3221 | if (this._maybeCleanupAfterRender || intentPrint) { | ||
| 3222 | this.#pendingCleanup = true; | ||
| 3223 | } | ||
| 3224 | this.#tryCleanup(!intentPrint); | ||
| 3225 | if (error) { | ||
| 3226 | internalRenderTask.capability.reject(error); | ||
| 3227 | this._abortOperatorList({ | ||
| 3228 | intentState, | ||
| 3229 | reason: error instanceof Error ? error : new Error(error) | ||
| 3230 | }); | ||
| 3231 | } else { | ||
| 3232 | internalRenderTask.capability.resolve(); | ||
| 3233 | } | ||
| 3234 | this._stats?.timeEnd("Rendering"); | ||
| 3235 | this._stats?.timeEnd("Overall"); | ||
| 3236 | }; | ||
| 3237 | const internalRenderTask = new InternalRenderTask({ | ||
| 3238 | callback: complete, | ||
| 3239 | params: { | ||
| 3240 | canvasContext, | ||
| 3241 | viewport, | ||
| 3242 | transform, | ||
| 3243 | background | ||
| 3244 | }, | ||
| 3245 | objs: this.objs, | ||
| 3246 | commonObjs: this.commonObjs, | ||
| 3247 | annotationCanvasMap, | ||
| 3248 | operatorList: intentState.operatorList, | ||
| 3249 | pageIndex: this._pageIndex, | ||
| 3250 | canvasFactory: this._transport.canvasFactory, | ||
| 3251 | filterFactory: this._transport.filterFactory, | ||
| 3252 | useRequestAnimationFrame: !intentPrint, | ||
| 3253 | pdfBug: this._pdfBug, | ||
| 3254 | pageColors | ||
| 3255 | }); | ||
| 3256 | (intentState.renderTasks ||= new Set()).add(internalRenderTask); | ||
| 3257 | const renderTask = internalRenderTask.task; | ||
| 3258 | Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { | ||
| 3259 | if (this.destroyed) { | ||
| 3260 | complete(); | ||
| 3261 | return; | ||
| 3262 | } | ||
| 3263 | this._stats?.time("Rendering"); | ||
| 3264 | internalRenderTask.initializeGraphics({ | ||
| 3265 | transparency, | ||
| 3266 | optionalContentConfig | ||
| 3267 | }); | ||
| 3268 | internalRenderTask.operatorListChanged(); | ||
| 3269 | }).catch(complete); | ||
| 3270 | return renderTask; | ||
| 3271 | } | ||
| 3272 | getOperatorList({ | ||
| 3273 | intent = "display", | ||
| 3274 | annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, | ||
| 3275 | printAnnotationStorage = null | ||
| 3276 | } = {}) { | ||
| 3277 | function operatorListChanged() { | ||
| 3278 | if (intentState.operatorList.lastChunk) { | ||
| 3279 | intentState.opListReadCapability.resolve(intentState.operatorList); | ||
| 3280 | intentState.renderTasks.delete(opListTask); | ||
| 3281 | } | ||
| 3282 | } | ||
| 3283 | const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); | ||
| 3284 | let intentState = this._intentStates.get(intentArgs.cacheKey); | ||
| 3285 | if (!intentState) { | ||
| 3286 | intentState = Object.create(null); | ||
| 3287 | this._intentStates.set(intentArgs.cacheKey, intentState); | ||
| 3288 | } | ||
| 3289 | let opListTask; | ||
| 3290 | if (!intentState.opListReadCapability) { | ||
| 3291 | opListTask = Object.create(null); | ||
| 3292 | opListTask.operatorListChanged = operatorListChanged; | ||
| 3293 | intentState.opListReadCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3294 | (intentState.renderTasks ||= new Set()).add(opListTask); | ||
| 3295 | intentState.operatorList = { | ||
| 3296 | fnArray: [], | ||
| 3297 | argsArray: [], | ||
| 3298 | lastChunk: false, | ||
| 3299 | separateAnnots: null | ||
| 3300 | }; | ||
| 3301 | this._stats?.time("Page Request"); | ||
| 3302 | this._pumpOperatorList(intentArgs); | ||
| 3303 | } | ||
| 3304 | return intentState.opListReadCapability.promise; | ||
| 3305 | } | ||
| 3306 | streamTextContent({ | ||
| 3307 | includeMarkedContent = false, | ||
| 3308 | disableNormalization = false | ||
| 3309 | } = {}) { | ||
| 3310 | const TEXT_CONTENT_CHUNK_SIZE = 100; | ||
| 3311 | return this._transport.messageHandler.sendWithStream("GetTextContent", { | ||
| 3312 | pageIndex: this._pageIndex, | ||
| 3313 | includeMarkedContent: includeMarkedContent === true, | ||
| 3314 | disableNormalization: disableNormalization === true | ||
| 3315 | }, { | ||
| 3316 | highWaterMark: TEXT_CONTENT_CHUNK_SIZE, | ||
| 3317 | size(textContent) { | ||
| 3318 | return textContent.items.length; | ||
| 3319 | } | ||
| 3320 | }); | ||
| 3321 | } | ||
| 3322 | getTextContent(params = {}) { | ||
| 3323 | if (this._transport._htmlForXfa) { | ||
| 3324 | return this.getXfa().then(xfa => { | ||
| 3325 | return _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__.XfaText.textContent(xfa); | ||
| 3326 | }); | ||
| 3327 | } | ||
| 3328 | const readableStream = this.streamTextContent(params); | ||
| 3329 | return new Promise(function (resolve, reject) { | ||
| 3330 | function pump() { | ||
| 3331 | reader.read().then(function ({ | ||
| 3332 | value, | ||
| 3333 | done | ||
| 3334 | }) { | ||
| 3335 | if (done) { | ||
| 3336 | resolve(textContent); | ||
| 3337 | return; | ||
| 3338 | } | ||
| 3339 | Object.assign(textContent.styles, value.styles); | ||
| 3340 | textContent.items.push(...value.items); | ||
| 3341 | pump(); | ||
| 3342 | }, reject); | ||
| 3343 | } | ||
| 3344 | const reader = readableStream.getReader(); | ||
| 3345 | const textContent = { | ||
| 3346 | items: [], | ||
| 3347 | styles: Object.create(null) | ||
| 3348 | }; | ||
| 3349 | pump(); | ||
| 3350 | }); | ||
| 3351 | } | ||
| 3352 | getStructTree() { | ||
| 3353 | return this._transport.getStructTree(this._pageIndex); | ||
| 3354 | } | ||
| 3355 | _destroy() { | ||
| 3356 | this.destroyed = true; | ||
| 3357 | const waitOn = []; | ||
| 3358 | for (const intentState of this._intentStates.values()) { | ||
| 3359 | this._abortOperatorList({ | ||
| 3360 | intentState, | ||
| 3361 | reason: new Error("Page was destroyed."), | ||
| 3362 | force: true | ||
| 3363 | }); | ||
| 3364 | if (intentState.opListReadCapability) { | ||
| 3365 | continue; | ||
| 3366 | } | ||
| 3367 | for (const internalRenderTask of intentState.renderTasks) { | ||
| 3368 | waitOn.push(internalRenderTask.completed); | ||
| 3369 | internalRenderTask.cancel(); | ||
| 3370 | } | ||
| 3371 | } | ||
| 3372 | this.objs.clear(); | ||
| 3373 | this.#pendingCleanup = false; | ||
| 3374 | this.#abortDelayedCleanup(); | ||
| 3375 | return Promise.all(waitOn); | ||
| 3376 | } | ||
| 3377 | cleanup(resetStats = false) { | ||
| 3378 | this.#pendingCleanup = true; | ||
| 3379 | const success = this.#tryCleanup(false); | ||
| 3380 | if (resetStats && success) { | ||
| 3381 | this._stats &&= new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer(); | ||
| 3382 | } | ||
| 3383 | return success; | ||
| 3384 | } | ||
| 3385 | #tryCleanup(delayed = false) { | ||
| 3386 | this.#abortDelayedCleanup(); | ||
| 3387 | if (!this.#pendingCleanup || this.destroyed) { | ||
| 3388 | return false; | ||
| 3389 | } | ||
| 3390 | if (delayed) { | ||
| 3391 | this.#delayedCleanupTimeout = setTimeout(() => { | ||
| 3392 | this.#delayedCleanupTimeout = null; | ||
| 3393 | this.#tryCleanup(false); | ||
| 3394 | }, DELAYED_CLEANUP_TIMEOUT); | ||
| 3395 | return false; | ||
| 3396 | } | ||
| 3397 | for (const { | ||
| 3398 | renderTasks, | ||
| 3399 | operatorList | ||
| 3400 | } of this._intentStates.values()) { | ||
| 3401 | if (renderTasks.size > 0 || !operatorList.lastChunk) { | ||
| 3402 | return false; | ||
| 3403 | } | ||
| 3404 | } | ||
| 3405 | this._intentStates.clear(); | ||
| 3406 | this.objs.clear(); | ||
| 3407 | this.#pendingCleanup = false; | ||
| 3408 | return true; | ||
| 3409 | } | ||
| 3410 | #abortDelayedCleanup() { | ||
| 3411 | if (this.#delayedCleanupTimeout) { | ||
| 3412 | clearTimeout(this.#delayedCleanupTimeout); | ||
| 3413 | this.#delayedCleanupTimeout = null; | ||
| 3414 | } | ||
| 3415 | } | ||
| 3416 | _startRenderPage(transparency, cacheKey) { | ||
| 3417 | const intentState = this._intentStates.get(cacheKey); | ||
| 3418 | if (!intentState) { | ||
| 3419 | return; | ||
| 3420 | } | ||
| 3421 | this._stats?.timeEnd("Page Request"); | ||
| 3422 | intentState.displayReadyCapability?.resolve(transparency); | ||
| 3423 | } | ||
| 3424 | _renderPageChunk(operatorListChunk, intentState) { | ||
| 3425 | for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { | ||
| 3426 | intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); | ||
| 3427 | intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); | ||
| 3428 | } | ||
| 3429 | intentState.operatorList.lastChunk = operatorListChunk.lastChunk; | ||
| 3430 | intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; | ||
| 3431 | for (const internalRenderTask of intentState.renderTasks) { | ||
| 3432 | internalRenderTask.operatorListChanged(); | ||
| 3433 | } | ||
| 3434 | if (operatorListChunk.lastChunk) { | ||
| 3435 | this.#tryCleanup(true); | ||
| 3436 | } | ||
| 3437 | } | ||
| 3438 | _pumpOperatorList({ | ||
| 3439 | renderingIntent, | ||
| 3440 | cacheKey, | ||
| 3441 | annotationStorageSerializable | ||
| 3442 | }) { | ||
| 3443 | const { | ||
| 3444 | map, | ||
| 3445 | transfer | ||
| 3446 | } = annotationStorageSerializable; | ||
| 3447 | const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { | ||
| 3448 | pageIndex: this._pageIndex, | ||
| 3449 | intent: renderingIntent, | ||
| 3450 | cacheKey, | ||
| 3451 | annotationStorage: map | ||
| 3452 | }, transfer); | ||
| 3453 | const reader = readableStream.getReader(); | ||
| 3454 | const intentState = this._intentStates.get(cacheKey); | ||
| 3455 | intentState.streamReader = reader; | ||
| 3456 | const pump = () => { | ||
| 3457 | reader.read().then(({ | ||
| 3458 | value, | ||
| 3459 | done | ||
| 3460 | }) => { | ||
| 3461 | if (done) { | ||
| 3462 | intentState.streamReader = null; | ||
| 3463 | return; | ||
| 3464 | } | ||
| 3465 | if (this._transport.destroyed) { | ||
| 3466 | return; | ||
| 3467 | } | ||
| 3468 | this._renderPageChunk(value, intentState); | ||
| 3469 | pump(); | ||
| 3470 | }, reason => { | ||
| 3471 | intentState.streamReader = null; | ||
| 3472 | if (this._transport.destroyed) { | ||
| 3473 | return; | ||
| 3474 | } | ||
| 3475 | if (intentState.operatorList) { | ||
| 3476 | intentState.operatorList.lastChunk = true; | ||
| 3477 | for (const internalRenderTask of intentState.renderTasks) { | ||
| 3478 | internalRenderTask.operatorListChanged(); | ||
| 3479 | } | ||
| 3480 | this.#tryCleanup(true); | ||
| 3481 | } | ||
| 3482 | if (intentState.displayReadyCapability) { | ||
| 3483 | intentState.displayReadyCapability.reject(reason); | ||
| 3484 | } else if (intentState.opListReadCapability) { | ||
| 3485 | intentState.opListReadCapability.reject(reason); | ||
| 3486 | } else { | ||
| 3487 | throw reason; | ||
| 3488 | } | ||
| 3489 | }); | ||
| 3490 | }; | ||
| 3491 | pump(); | ||
| 3492 | } | ||
| 3493 | _abortOperatorList({ | ||
| 3494 | intentState, | ||
| 3495 | reason, | ||
| 3496 | force = false | ||
| 3497 | }) { | ||
| 3498 | if (!intentState.streamReader) { | ||
| 3499 | return; | ||
| 3500 | } | ||
| 3501 | if (intentState.streamReaderCancelTimeout) { | ||
| 3502 | clearTimeout(intentState.streamReaderCancelTimeout); | ||
| 3503 | intentState.streamReaderCancelTimeout = null; | ||
| 3504 | } | ||
| 3505 | if (!force) { | ||
| 3506 | if (intentState.renderTasks.size > 0) { | ||
| 3507 | return; | ||
| 3508 | } | ||
| 3509 | if (reason instanceof _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException) { | ||
| 3510 | let delay = RENDERING_CANCELLED_TIMEOUT; | ||
| 3511 | if (reason.extraDelay > 0 && reason.extraDelay < 1000) { | ||
| 3512 | delay += reason.extraDelay; | ||
| 3513 | } | ||
| 3514 | intentState.streamReaderCancelTimeout = setTimeout(() => { | ||
| 3515 | intentState.streamReaderCancelTimeout = null; | ||
| 3516 | this._abortOperatorList({ | ||
| 3517 | intentState, | ||
| 3518 | reason, | ||
| 3519 | force: true | ||
| 3520 | }); | ||
| 3521 | }, delay); | ||
| 3522 | return; | ||
| 3523 | } | ||
| 3524 | } | ||
| 3525 | intentState.streamReader.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException(reason.message)).catch(() => {}); | ||
| 3526 | intentState.streamReader = null; | ||
| 3527 | if (this._transport.destroyed) { | ||
| 3528 | return; | ||
| 3529 | } | ||
| 3530 | for (const [curCacheKey, curIntentState] of this._intentStates) { | ||
| 3531 | if (curIntentState === intentState) { | ||
| 3532 | this._intentStates.delete(curCacheKey); | ||
| 3533 | break; | ||
| 3534 | } | ||
| 3535 | } | ||
| 3536 | this.cleanup(); | ||
| 3537 | } | ||
| 3538 | get stats() { | ||
| 3539 | return this._stats; | ||
| 3540 | } | ||
| 3541 | } | ||
| 3542 | class LoopbackPort { | ||
| 3543 | #listeners = new Set(); | ||
| 3544 | #deferred = Promise.resolve(); | ||
| 3545 | postMessage(obj, transfer) { | ||
| 3546 | const event = { | ||
| 3547 | data: structuredClone(obj, transfer ? { | ||
| 3548 | transfer | ||
| 3549 | } : null) | ||
| 3550 | }; | ||
| 3551 | this.#deferred.then(() => { | ||
| 3552 | for (const listener of this.#listeners) { | ||
| 3553 | listener.call(this, event); | ||
| 3554 | } | ||
| 3555 | }); | ||
| 3556 | } | ||
| 3557 | addEventListener(name, listener) { | ||
| 3558 | this.#listeners.add(listener); | ||
| 3559 | } | ||
| 3560 | removeEventListener(name, listener) { | ||
| 3561 | this.#listeners.delete(listener); | ||
| 3562 | } | ||
| 3563 | terminate() { | ||
| 3564 | this.#listeners.clear(); | ||
| 3565 | } | ||
| 3566 | } | ||
| 3567 | const PDFWorkerUtil = { | ||
| 3568 | isWorkerDisabled: false, | ||
| 3569 | fakeWorkerId: 0 | ||
| 3570 | }; | ||
| 3571 | { | ||
| 3572 | if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { | ||
| 3573 | PDFWorkerUtil.isWorkerDisabled = true; | ||
| 3574 | _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; | ||
| 3575 | } | ||
| 3576 | PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { | ||
| 3577 | let base; | ||
| 3578 | try { | ||
| 3579 | base = new URL(baseUrl); | ||
| 3580 | if (!base.origin || base.origin === "null") { | ||
| 3581 | return false; | ||
| 3582 | } | ||
| 3583 | } catch { | ||
| 3584 | return false; | ||
| 3585 | } | ||
| 3586 | const other = new URL(otherUrl, base); | ||
| 3587 | return base.origin === other.origin; | ||
| 3588 | }; | ||
| 3589 | PDFWorkerUtil.createCDNWrapper = function (url) { | ||
| 3590 | const wrapper = `await import("${url}");`; | ||
| 3591 | return URL.createObjectURL(new Blob([wrapper], { | ||
| 3592 | type: "text/javascript" | ||
| 3593 | })); | ||
| 3594 | }; | ||
| 3595 | } | ||
| 3596 | class PDFWorker { | ||
| 3597 | static #workerPorts; | ||
| 3598 | constructor({ | ||
| 3599 | name = null, | ||
| 3600 | port = null, | ||
| 3601 | verbosity = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.getVerbosityLevel)() | ||
| 3602 | } = {}) { | ||
| 3603 | this.name = name; | ||
| 3604 | this.destroyed = false; | ||
| 3605 | this.verbosity = verbosity; | ||
| 3606 | this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3607 | this._port = null; | ||
| 3608 | this._webWorker = null; | ||
| 3609 | this._messageHandler = null; | ||
| 3610 | if (port) { | ||
| 3611 | if (PDFWorker.#workerPorts?.has(port)) { | ||
| 3612 | throw new Error("Cannot use more than one PDFWorker per port."); | ||
| 3613 | } | ||
| 3614 | (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); | ||
| 3615 | this._initializeFromPort(port); | ||
| 3616 | return; | ||
| 3617 | } | ||
| 3618 | this._initialize(); | ||
| 3619 | } | ||
| 3620 | get promise() { | ||
| 3621 | return this._readyCapability.promise; | ||
| 3622 | } | ||
| 3623 | get port() { | ||
| 3624 | return this._port; | ||
| 3625 | } | ||
| 3626 | get messageHandler() { | ||
| 3627 | return this._messageHandler; | ||
| 3628 | } | ||
| 3629 | _initializeFromPort(port) { | ||
| 3630 | this._port = port; | ||
| 3631 | this._messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", port); | ||
| 3632 | this._messageHandler.on("ready", function () {}); | ||
| 3633 | this._readyCapability.resolve(); | ||
| 3634 | this._messageHandler.send("configure", { | ||
| 3635 | verbosity: this.verbosity | ||
| 3636 | }); | ||
| 3637 | } | ||
| 3638 | _initialize() { | ||
| 3639 | if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler) { | ||
| 3640 | let { | ||
| 3641 | workerSrc | ||
| 3642 | } = PDFWorker; | ||
| 3643 | try { | ||
| 3644 | if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { | ||
| 3645 | workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); | ||
| 3646 | } | ||
| 3647 | const worker = new Worker(workerSrc, { | ||
| 3648 | type: "module" | ||
| 3649 | }); | ||
| 3650 | const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", worker); | ||
| 3651 | const terminateEarly = () => { | ||
| 3652 | worker.removeEventListener("error", onWorkerError); | ||
| 3653 | messageHandler.destroy(); | ||
| 3654 | worker.terminate(); | ||
| 3655 | if (this.destroyed) { | ||
| 3656 | this._readyCapability.reject(new Error("Worker was destroyed")); | ||
| 3657 | } else { | ||
| 3658 | this._setupFakeWorker(); | ||
| 3659 | } | ||
| 3660 | }; | ||
| 3661 | const onWorkerError = () => { | ||
| 3662 | if (!this._webWorker) { | ||
| 3663 | terminateEarly(); | ||
| 3664 | } | ||
| 3665 | }; | ||
| 3666 | worker.addEventListener("error", onWorkerError); | ||
| 3667 | messageHandler.on("test", data => { | ||
| 3668 | worker.removeEventListener("error", onWorkerError); | ||
| 3669 | if (this.destroyed) { | ||
| 3670 | terminateEarly(); | ||
| 3671 | return; | ||
| 3672 | } | ||
| 3673 | if (data) { | ||
| 3674 | this._messageHandler = messageHandler; | ||
| 3675 | this._port = worker; | ||
| 3676 | this._webWorker = worker; | ||
| 3677 | this._readyCapability.resolve(); | ||
| 3678 | messageHandler.send("configure", { | ||
| 3679 | verbosity: this.verbosity | ||
| 3680 | }); | ||
| 3681 | } else { | ||
| 3682 | this._setupFakeWorker(); | ||
| 3683 | messageHandler.destroy(); | ||
| 3684 | worker.terminate(); | ||
| 3685 | } | ||
| 3686 | }); | ||
| 3687 | messageHandler.on("ready", data => { | ||
| 3688 | worker.removeEventListener("error", onWorkerError); | ||
| 3689 | if (this.destroyed) { | ||
| 3690 | terminateEarly(); | ||
| 3691 | return; | ||
| 3692 | } | ||
| 3693 | try { | ||
| 3694 | sendTest(); | ||
| 3695 | } catch { | ||
| 3696 | this._setupFakeWorker(); | ||
| 3697 | } | ||
| 3698 | }); | ||
| 3699 | const sendTest = () => { | ||
| 3700 | const testObj = new Uint8Array(); | ||
| 3701 | messageHandler.send("test", testObj, [testObj.buffer]); | ||
| 3702 | }; | ||
| 3703 | sendTest(); | ||
| 3704 | return; | ||
| 3705 | } catch { | ||
| 3706 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.info)("The worker has been disabled."); | ||
| 3707 | } | ||
| 3708 | } | ||
| 3709 | this._setupFakeWorker(); | ||
| 3710 | } | ||
| 3711 | _setupFakeWorker() { | ||
| 3712 | if (!PDFWorkerUtil.isWorkerDisabled) { | ||
| 3713 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Setting up fake worker."); | ||
| 3714 | PDFWorkerUtil.isWorkerDisabled = true; | ||
| 3715 | } | ||
| 3716 | PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { | ||
| 3717 | if (this.destroyed) { | ||
| 3718 | this._readyCapability.reject(new Error("Worker was destroyed")); | ||
| 3719 | return; | ||
| 3720 | } | ||
| 3721 | const port = new LoopbackPort(); | ||
| 3722 | this._port = port; | ||
| 3723 | const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; | ||
| 3724 | const workerHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id + "_worker", id, port); | ||
| 3725 | WorkerMessageHandler.setup(workerHandler, port); | ||
| 3726 | const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id, id + "_worker", port); | ||
| 3727 | this._messageHandler = messageHandler; | ||
| 3728 | this._readyCapability.resolve(); | ||
| 3729 | messageHandler.send("configure", { | ||
| 3730 | verbosity: this.verbosity | ||
| 3731 | }); | ||
| 3732 | }).catch(reason => { | ||
| 3733 | this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); | ||
| 3734 | }); | ||
| 3735 | } | ||
| 3736 | destroy() { | ||
| 3737 | this.destroyed = true; | ||
| 3738 | if (this._webWorker) { | ||
| 3739 | this._webWorker.terminate(); | ||
| 3740 | this._webWorker = null; | ||
| 3741 | } | ||
| 3742 | PDFWorker.#workerPorts?.delete(this._port); | ||
| 3743 | this._port = null; | ||
| 3744 | if (this._messageHandler) { | ||
| 3745 | this._messageHandler.destroy(); | ||
| 3746 | this._messageHandler = null; | ||
| 3747 | } | ||
| 3748 | } | ||
| 3749 | static fromPort(params) { | ||
| 3750 | if (!params?.port) { | ||
| 3751 | throw new Error("PDFWorker.fromPort - invalid method signature."); | ||
| 3752 | } | ||
| 3753 | const cachedPort = this.#workerPorts?.get(params.port); | ||
| 3754 | if (cachedPort) { | ||
| 3755 | if (cachedPort._pendingDestroy) { | ||
| 3756 | throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); | ||
| 3757 | } | ||
| 3758 | return cachedPort; | ||
| 3759 | } | ||
| 3760 | return new PDFWorker(params); | ||
| 3761 | } | ||
| 3762 | static get workerSrc() { | ||
| 3763 | if (_worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc) { | ||
| 3764 | return _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc; | ||
| 3765 | } | ||
| 3766 | throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); | ||
| 3767 | } | ||
| 3768 | static get #mainThreadWorkerMessageHandler() { | ||
| 3769 | try { | ||
| 3770 | return globalThis.pdfjsWorker?.WorkerMessageHandler || null; | ||
| 3771 | } catch { | ||
| 3772 | return null; | ||
| 3773 | } | ||
| 3774 | } | ||
| 3775 | static get _setupFakeWorkerGlobal() { | ||
| 3776 | const loader = async () => { | ||
| 3777 | if (this.#mainThreadWorkerMessageHandler) { | ||
| 3778 | return this.#mainThreadWorkerMessageHandler; | ||
| 3779 | } | ||
| 3780 | const worker = await import(/* webpackIgnore: true */ this.workerSrc); | ||
| 3781 | return worker.WorkerMessageHandler; | ||
| 3782 | }; | ||
| 3783 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_setupFakeWorkerGlobal", loader()); | ||
| 3784 | } | ||
| 3785 | } | ||
| 3786 | class WorkerTransport { | ||
| 3787 | #methodPromises = new Map(); | ||
| 3788 | #pageCache = new Map(); | ||
| 3789 | #pagePromises = new Map(); | ||
| 3790 | #passwordCapability = null; | ||
| 3791 | constructor(messageHandler, loadingTask, networkStream, params, factory) { | ||
| 3792 | this.messageHandler = messageHandler; | ||
| 3793 | this.loadingTask = loadingTask; | ||
| 3794 | this.commonObjs = new PDFObjects(); | ||
| 3795 | this.fontLoader = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontLoader({ | ||
| 3796 | ownerDocument: params.ownerDocument, | ||
| 3797 | styleElement: params.styleElement | ||
| 3798 | }); | ||
| 3799 | this._params = params; | ||
| 3800 | this.canvasFactory = factory.canvasFactory; | ||
| 3801 | this.filterFactory = factory.filterFactory; | ||
| 3802 | this.cMapReaderFactory = factory.cMapReaderFactory; | ||
| 3803 | this.standardFontDataFactory = factory.standardFontDataFactory; | ||
| 3804 | this.destroyed = false; | ||
| 3805 | this.destroyCapability = null; | ||
| 3806 | this._networkStream = networkStream; | ||
| 3807 | this._fullReader = null; | ||
| 3808 | this._lastProgress = null; | ||
| 3809 | this.downloadInfoCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3810 | this.setupMessageHandler(); | ||
| 3811 | } | ||
| 3812 | #cacheSimpleMethod(name, data = null) { | ||
| 3813 | const cachedPromise = this.#methodPromises.get(name); | ||
| 3814 | if (cachedPromise) { | ||
| 3815 | return cachedPromise; | ||
| 3816 | } | ||
| 3817 | const promise = this.messageHandler.sendWithPromise(name, data); | ||
| 3818 | this.#methodPromises.set(name, promise); | ||
| 3819 | return promise; | ||
| 3820 | } | ||
| 3821 | get annotationStorage() { | ||
| 3822 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "annotationStorage", new _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationStorage()); | ||
| 3823 | } | ||
| 3824 | getRenderingIntent(intent, annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { | ||
| 3825 | let renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.DISPLAY; | ||
| 3826 | let annotationStorageSerializable = _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.SerializableEmpty; | ||
| 3827 | switch (intent) { | ||
| 3828 | case "any": | ||
| 3829 | renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANY; | ||
| 3830 | break; | ||
| 3831 | case "display": | ||
| 3832 | break; | ||
| 3833 | case "print": | ||
| 3834 | renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT; | ||
| 3835 | break; | ||
| 3836 | default: | ||
| 3837 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid intent: ${intent}`); | ||
| 3838 | } | ||
| 3839 | switch (annotationMode) { | ||
| 3840 | case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.DISABLE: | ||
| 3841 | renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_DISABLE; | ||
| 3842 | break; | ||
| 3843 | case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE: | ||
| 3844 | break; | ||
| 3845 | case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_FORMS: | ||
| 3846 | renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_FORMS; | ||
| 3847 | break; | ||
| 3848 | case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_STORAGE: | ||
| 3849 | renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_STORAGE; | ||
| 3850 | const annotationStorage = renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; | ||
| 3851 | annotationStorageSerializable = annotationStorage.serializable; | ||
| 3852 | break; | ||
| 3853 | default: | ||
| 3854 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); | ||
| 3855 | } | ||
| 3856 | if (isOpList) { | ||
| 3857 | renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.OPLIST; | ||
| 3858 | } | ||
| 3859 | return { | ||
| 3860 | renderingIntent, | ||
| 3861 | cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, | ||
| 3862 | annotationStorageSerializable | ||
| 3863 | }; | ||
| 3864 | } | ||
| 3865 | destroy() { | ||
| 3866 | if (this.destroyCapability) { | ||
| 3867 | return this.destroyCapability.promise; | ||
| 3868 | } | ||
| 3869 | this.destroyed = true; | ||
| 3870 | this.destroyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3871 | this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); | ||
| 3872 | const waitOn = []; | ||
| 3873 | for (const page of this.#pageCache.values()) { | ||
| 3874 | waitOn.push(page._destroy()); | ||
| 3875 | } | ||
| 3876 | this.#pageCache.clear(); | ||
| 3877 | this.#pagePromises.clear(); | ||
| 3878 | if (this.hasOwnProperty("annotationStorage")) { | ||
| 3879 | this.annotationStorage.resetModified(); | ||
| 3880 | } | ||
| 3881 | const terminated = this.messageHandler.sendWithPromise("Terminate", null); | ||
| 3882 | waitOn.push(terminated); | ||
| 3883 | Promise.all(waitOn).then(() => { | ||
| 3884 | this.commonObjs.clear(); | ||
| 3885 | this.fontLoader.clear(); | ||
| 3886 | this.#methodPromises.clear(); | ||
| 3887 | this.filterFactory.destroy(); | ||
| 3888 | this._networkStream?.cancelAllRequests(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("Worker was terminated.")); | ||
| 3889 | if (this.messageHandler) { | ||
| 3890 | this.messageHandler.destroy(); | ||
| 3891 | this.messageHandler = null; | ||
| 3892 | } | ||
| 3893 | this.destroyCapability.resolve(); | ||
| 3894 | }, this.destroyCapability.reject); | ||
| 3895 | return this.destroyCapability.promise; | ||
| 3896 | } | ||
| 3897 | setupMessageHandler() { | ||
| 3898 | const { | ||
| 3899 | messageHandler, | ||
| 3900 | loadingTask | ||
| 3901 | } = this; | ||
| 3902 | messageHandler.on("GetReader", (data, sink) => { | ||
| 3903 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); | ||
| 3904 | this._fullReader = this._networkStream.getFullReader(); | ||
| 3905 | this._fullReader.onProgress = evt => { | ||
| 3906 | this._lastProgress = { | ||
| 3907 | loaded: evt.loaded, | ||
| 3908 | total: evt.total | ||
| 3909 | }; | ||
| 3910 | }; | ||
| 3911 | sink.onPull = () => { | ||
| 3912 | this._fullReader.read().then(function ({ | ||
| 3913 | value, | ||
| 3914 | done | ||
| 3915 | }) { | ||
| 3916 | if (done) { | ||
| 3917 | sink.close(); | ||
| 3918 | return; | ||
| 3919 | } | ||
| 3920 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); | ||
| 3921 | sink.enqueue(new Uint8Array(value), 1, [value]); | ||
| 3922 | }).catch(reason => { | ||
| 3923 | sink.error(reason); | ||
| 3924 | }); | ||
| 3925 | }; | ||
| 3926 | sink.onCancel = reason => { | ||
| 3927 | this._fullReader.cancel(reason); | ||
| 3928 | sink.ready.catch(readyReason => { | ||
| 3929 | if (this.destroyed) { | ||
| 3930 | return; | ||
| 3931 | } | ||
| 3932 | throw readyReason; | ||
| 3933 | }); | ||
| 3934 | }; | ||
| 3935 | }); | ||
| 3936 | messageHandler.on("ReaderHeadersReady", data => { | ||
| 3937 | const headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 3938 | const fullReader = this._fullReader; | ||
| 3939 | fullReader.headersReady.then(() => { | ||
| 3940 | if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { | ||
| 3941 | if (this._lastProgress) { | ||
| 3942 | loadingTask.onProgress?.(this._lastProgress); | ||
| 3943 | } | ||
| 3944 | fullReader.onProgress = evt => { | ||
| 3945 | loadingTask.onProgress?.({ | ||
| 3946 | loaded: evt.loaded, | ||
| 3947 | total: evt.total | ||
| 3948 | }); | ||
| 3949 | }; | ||
| 3950 | } | ||
| 3951 | headersCapability.resolve({ | ||
| 3952 | isStreamingSupported: fullReader.isStreamingSupported, | ||
| 3953 | isRangeSupported: fullReader.isRangeSupported, | ||
| 3954 | contentLength: fullReader.contentLength | ||
| 3955 | }); | ||
| 3956 | }, headersCapability.reject); | ||
| 3957 | return headersCapability.promise; | ||
| 3958 | }); | ||
| 3959 | messageHandler.on("GetRangeReader", (data, sink) => { | ||
| 3960 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); | ||
| 3961 | const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); | ||
| 3962 | if (!rangeReader) { | ||
| 3963 | sink.close(); | ||
| 3964 | return; | ||
| 3965 | } | ||
| 3966 | sink.onPull = () => { | ||
| 3967 | rangeReader.read().then(function ({ | ||
| 3968 | value, | ||
| 3969 | done | ||
| 3970 | }) { | ||
| 3971 | if (done) { | ||
| 3972 | sink.close(); | ||
| 3973 | return; | ||
| 3974 | } | ||
| 3975 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); | ||
| 3976 | sink.enqueue(new Uint8Array(value), 1, [value]); | ||
| 3977 | }).catch(reason => { | ||
| 3978 | sink.error(reason); | ||
| 3979 | }); | ||
| 3980 | }; | ||
| 3981 | sink.onCancel = reason => { | ||
| 3982 | rangeReader.cancel(reason); | ||
| 3983 | sink.ready.catch(readyReason => { | ||
| 3984 | if (this.destroyed) { | ||
| 3985 | return; | ||
| 3986 | } | ||
| 3987 | throw readyReason; | ||
| 3988 | }); | ||
| 3989 | }; | ||
| 3990 | }); | ||
| 3991 | messageHandler.on("GetDoc", ({ | ||
| 3992 | pdfInfo | ||
| 3993 | }) => { | ||
| 3994 | this._numPages = pdfInfo.numPages; | ||
| 3995 | this._htmlForXfa = pdfInfo.htmlForXfa; | ||
| 3996 | delete pdfInfo.htmlForXfa; | ||
| 3997 | loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); | ||
| 3998 | }); | ||
| 3999 | messageHandler.on("DocException", function (ex) { | ||
| 4000 | let reason; | ||
| 4001 | switch (ex.name) { | ||
| 4002 | case "PasswordException": | ||
| 4003 | reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(ex.message, ex.code); | ||
| 4004 | break; | ||
| 4005 | case "InvalidPDFException": | ||
| 4006 | reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.InvalidPDFException(ex.message); | ||
| 4007 | break; | ||
| 4008 | case "MissingPDFException": | ||
| 4009 | reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(ex.message); | ||
| 4010 | break; | ||
| 4011 | case "UnexpectedResponseException": | ||
| 4012 | reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException(ex.message, ex.status); | ||
| 4013 | break; | ||
| 4014 | case "UnknownErrorException": | ||
| 4015 | reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(ex.message, ex.details); | ||
| 4016 | break; | ||
| 4017 | default: | ||
| 4018 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("DocException - expected a valid Error."); | ||
| 4019 | } | ||
| 4020 | loadingTask._capability.reject(reason); | ||
| 4021 | }); | ||
| 4022 | messageHandler.on("PasswordRequest", exception => { | ||
| 4023 | this.#passwordCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 4024 | if (loadingTask.onPassword) { | ||
| 4025 | const updatePassword = password => { | ||
| 4026 | if (password instanceof Error) { | ||
| 4027 | this.#passwordCapability.reject(password); | ||
| 4028 | } else { | ||
| 4029 | this.#passwordCapability.resolve({ | ||
| 4030 | password | ||
| 4031 | }); | ||
| 4032 | } | ||
| 4033 | }; | ||
| 4034 | try { | ||
| 4035 | loadingTask.onPassword(updatePassword, exception.code); | ||
| 4036 | } catch (ex) { | ||
| 4037 | this.#passwordCapability.reject(ex); | ||
| 4038 | } | ||
| 4039 | } else { | ||
| 4040 | this.#passwordCapability.reject(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(exception.message, exception.code)); | ||
| 4041 | } | ||
| 4042 | return this.#passwordCapability.promise; | ||
| 4043 | }); | ||
| 4044 | messageHandler.on("DataLoaded", data => { | ||
| 4045 | loadingTask.onProgress?.({ | ||
| 4046 | loaded: data.length, | ||
| 4047 | total: data.length | ||
| 4048 | }); | ||
| 4049 | this.downloadInfoCapability.resolve(data); | ||
| 4050 | }); | ||
| 4051 | messageHandler.on("StartRenderPage", data => { | ||
| 4052 | if (this.destroyed) { | ||
| 4053 | return; | ||
| 4054 | } | ||
| 4055 | const page = this.#pageCache.get(data.pageIndex); | ||
| 4056 | page._startRenderPage(data.transparency, data.cacheKey); | ||
| 4057 | }); | ||
| 4058 | messageHandler.on("commonobj", ([id, type, exportedData]) => { | ||
| 4059 | if (this.destroyed) { | ||
| 4060 | return; | ||
| 4061 | } | ||
| 4062 | if (this.commonObjs.has(id)) { | ||
| 4063 | return; | ||
| 4064 | } | ||
| 4065 | switch (type) { | ||
| 4066 | case "Font": | ||
| 4067 | const params = this._params; | ||
| 4068 | if ("error" in exportedData) { | ||
| 4069 | const exportedError = exportedData.error; | ||
| 4070 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Error during font loading: ${exportedError}`); | ||
| 4071 | this.commonObjs.resolve(id, exportedError); | ||
| 4072 | break; | ||
| 4073 | } | ||
| 4074 | const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; | ||
| 4075 | const font = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontFaceObject(exportedData, { | ||
| 4076 | isEvalSupported: params.isEvalSupported, | ||
| 4077 | disableFontFace: params.disableFontFace, | ||
| 4078 | ignoreErrors: params.ignoreErrors, | ||
| 4079 | inspectFont | ||
| 4080 | }); | ||
| 4081 | this.fontLoader.bind(font).catch(reason => { | ||
| 4082 | return messageHandler.sendWithPromise("FontFallback", { | ||
| 4083 | id | ||
| 4084 | }); | ||
| 4085 | }).finally(() => { | ||
| 4086 | if (!params.fontExtraProperties && font.data) { | ||
| 4087 | font.data = null; | ||
| 4088 | } | ||
| 4089 | this.commonObjs.resolve(id, font); | ||
| 4090 | }); | ||
| 4091 | break; | ||
| 4092 | case "FontPath": | ||
| 4093 | case "Image": | ||
| 4094 | case "Pattern": | ||
| 4095 | this.commonObjs.resolve(id, exportedData); | ||
| 4096 | break; | ||
| 4097 | default: | ||
| 4098 | throw new Error(`Got unknown common object type ${type}`); | ||
| 4099 | } | ||
| 4100 | }); | ||
| 4101 | messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { | ||
| 4102 | if (this.destroyed) { | ||
| 4103 | return; | ||
| 4104 | } | ||
| 4105 | const pageProxy = this.#pageCache.get(pageIndex); | ||
| 4106 | if (pageProxy.objs.has(id)) { | ||
| 4107 | return; | ||
| 4108 | } | ||
| 4109 | if (pageProxy._intentStates.size === 0) { | ||
| 4110 | imageData?.bitmap?.close(); | ||
| 4111 | return; | ||
| 4112 | } | ||
| 4113 | switch (type) { | ||
| 4114 | case "Image": | ||
| 4115 | pageProxy.objs.resolve(id, imageData); | ||
| 4116 | if (imageData) { | ||
| 4117 | let length; | ||
| 4118 | if (imageData.bitmap) { | ||
| 4119 | const { | ||
| 4120 | width, | ||
| 4121 | height | ||
| 4122 | } = imageData; | ||
| 4123 | length = width * height * 4; | ||
| 4124 | } else { | ||
| 4125 | length = imageData.data?.length || 0; | ||
| 4126 | } | ||
| 4127 | if (length > _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MAX_IMAGE_SIZE_TO_CACHE) { | ||
| 4128 | pageProxy._maybeCleanupAfterRender = true; | ||
| 4129 | } | ||
| 4130 | } | ||
| 4131 | break; | ||
| 4132 | case "Pattern": | ||
| 4133 | pageProxy.objs.resolve(id, imageData); | ||
| 4134 | break; | ||
| 4135 | default: | ||
| 4136 | throw new Error(`Got unknown object type ${type}`); | ||
| 4137 | } | ||
| 4138 | }); | ||
| 4139 | messageHandler.on("DocProgress", data => { | ||
| 4140 | if (this.destroyed) { | ||
| 4141 | return; | ||
| 4142 | } | ||
| 4143 | loadingTask.onProgress?.({ | ||
| 4144 | loaded: data.loaded, | ||
| 4145 | total: data.total | ||
| 4146 | }); | ||
| 4147 | }); | ||
| 4148 | messageHandler.on("FetchBuiltInCMap", data => { | ||
| 4149 | if (this.destroyed) { | ||
| 4150 | return Promise.reject(new Error("Worker was destroyed.")); | ||
| 4151 | } | ||
| 4152 | if (!this.cMapReaderFactory) { | ||
| 4153 | return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); | ||
| 4154 | } | ||
| 4155 | return this.cMapReaderFactory.fetch(data); | ||
| 4156 | }); | ||
| 4157 | messageHandler.on("FetchStandardFontData", data => { | ||
| 4158 | if (this.destroyed) { | ||
| 4159 | return Promise.reject(new Error("Worker was destroyed.")); | ||
| 4160 | } | ||
| 4161 | if (!this.standardFontDataFactory) { | ||
| 4162 | return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); | ||
| 4163 | } | ||
| 4164 | return this.standardFontDataFactory.fetch(data); | ||
| 4165 | }); | ||
| 4166 | } | ||
| 4167 | getData() { | ||
| 4168 | return this.messageHandler.sendWithPromise("GetData", null); | ||
| 4169 | } | ||
| 4170 | saveDocument() { | ||
| 4171 | if (this.annotationStorage.size <= 0) { | ||
| 4172 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); | ||
| 4173 | } | ||
| 4174 | const { | ||
| 4175 | map, | ||
| 4176 | transfer | ||
| 4177 | } = this.annotationStorage.serializable; | ||
| 4178 | return this.messageHandler.sendWithPromise("SaveDocument", { | ||
| 4179 | isPureXfa: !!this._htmlForXfa, | ||
| 4180 | numPages: this._numPages, | ||
| 4181 | annotationStorage: map, | ||
| 4182 | filename: this._fullReader?.filename ?? null | ||
| 4183 | }, transfer).finally(() => { | ||
| 4184 | this.annotationStorage.resetModified(); | ||
| 4185 | }); | ||
| 4186 | } | ||
| 4187 | getPage(pageNumber) { | ||
| 4188 | if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { | ||
| 4189 | return Promise.reject(new Error("Invalid page request.")); | ||
| 4190 | } | ||
| 4191 | const pageIndex = pageNumber - 1, | ||
| 4192 | cachedPromise = this.#pagePromises.get(pageIndex); | ||
| 4193 | if (cachedPromise) { | ||
| 4194 | return cachedPromise; | ||
| 4195 | } | ||
| 4196 | const promise = this.messageHandler.sendWithPromise("GetPage", { | ||
| 4197 | pageIndex | ||
| 4198 | }).then(pageInfo => { | ||
| 4199 | if (this.destroyed) { | ||
| 4200 | throw new Error("Transport destroyed"); | ||
| 4201 | } | ||
| 4202 | const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); | ||
| 4203 | this.#pageCache.set(pageIndex, page); | ||
| 4204 | return page; | ||
| 4205 | }); | ||
| 4206 | this.#pagePromises.set(pageIndex, promise); | ||
| 4207 | return promise; | ||
| 4208 | } | ||
| 4209 | getPageIndex(ref) { | ||
| 4210 | if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { | ||
| 4211 | return Promise.reject(new Error("Invalid pageIndex request.")); | ||
| 4212 | } | ||
| 4213 | return this.messageHandler.sendWithPromise("GetPageIndex", { | ||
| 4214 | num: ref.num, | ||
| 4215 | gen: ref.gen | ||
| 4216 | }); | ||
| 4217 | } | ||
| 4218 | getAnnotations(pageIndex, intent) { | ||
| 4219 | return this.messageHandler.sendWithPromise("GetAnnotations", { | ||
| 4220 | pageIndex, | ||
| 4221 | intent | ||
| 4222 | }); | ||
| 4223 | } | ||
| 4224 | getFieldObjects() { | ||
| 4225 | return this.#cacheSimpleMethod("GetFieldObjects"); | ||
| 4226 | } | ||
| 4227 | hasJSActions() { | ||
| 4228 | return this.#cacheSimpleMethod("HasJSActions"); | ||
| 4229 | } | ||
| 4230 | getCalculationOrderIds() { | ||
| 4231 | return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); | ||
| 4232 | } | ||
| 4233 | getDestinations() { | ||
| 4234 | return this.messageHandler.sendWithPromise("GetDestinations", null); | ||
| 4235 | } | ||
| 4236 | getDestination(id) { | ||
| 4237 | if (typeof id !== "string") { | ||
| 4238 | return Promise.reject(new Error("Invalid destination request.")); | ||
| 4239 | } | ||
| 4240 | return this.messageHandler.sendWithPromise("GetDestination", { | ||
| 4241 | id | ||
| 4242 | }); | ||
| 4243 | } | ||
| 4244 | getPageLabels() { | ||
| 4245 | return this.messageHandler.sendWithPromise("GetPageLabels", null); | ||
| 4246 | } | ||
| 4247 | getPageLayout() { | ||
| 4248 | return this.messageHandler.sendWithPromise("GetPageLayout", null); | ||
| 4249 | } | ||
| 4250 | getPageMode() { | ||
| 4251 | return this.messageHandler.sendWithPromise("GetPageMode", null); | ||
| 4252 | } | ||
| 4253 | getViewerPreferences() { | ||
| 4254 | return this.messageHandler.sendWithPromise("GetViewerPreferences", null); | ||
| 4255 | } | ||
| 4256 | getOpenAction() { | ||
| 4257 | return this.messageHandler.sendWithPromise("GetOpenAction", null); | ||
| 4258 | } | ||
| 4259 | getAttachments() { | ||
| 4260 | return this.messageHandler.sendWithPromise("GetAttachments", null); | ||
| 4261 | } | ||
| 4262 | getDocJSActions() { | ||
| 4263 | return this.#cacheSimpleMethod("GetDocJSActions"); | ||
| 4264 | } | ||
| 4265 | getPageJSActions(pageIndex) { | ||
| 4266 | return this.messageHandler.sendWithPromise("GetPageJSActions", { | ||
| 4267 | pageIndex | ||
| 4268 | }); | ||
| 4269 | } | ||
| 4270 | getStructTree(pageIndex) { | ||
| 4271 | return this.messageHandler.sendWithPromise("GetStructTree", { | ||
| 4272 | pageIndex | ||
| 4273 | }); | ||
| 4274 | } | ||
| 4275 | getOutline() { | ||
| 4276 | return this.messageHandler.sendWithPromise("GetOutline", null); | ||
| 4277 | } | ||
| 4278 | getOptionalContentConfig() { | ||
| 4279 | return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { | ||
| 4280 | return new _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__.OptionalContentConfig(results); | ||
| 4281 | }); | ||
| 4282 | } | ||
| 4283 | getPermissions() { | ||
| 4284 | return this.messageHandler.sendWithPromise("GetPermissions", null); | ||
| 4285 | } | ||
| 4286 | getMetadata() { | ||
| 4287 | const name = "GetMetadata", | ||
| 4288 | cachedPromise = this.#methodPromises.get(name); | ||
| 4289 | if (cachedPromise) { | ||
| 4290 | return cachedPromise; | ||
| 4291 | } | ||
| 4292 | const promise = this.messageHandler.sendWithPromise(name, null).then(results => { | ||
| 4293 | return { | ||
| 4294 | info: results[0], | ||
| 4295 | metadata: results[1] ? new _metadata_js__WEBPACK_IMPORTED_MODULE_8__.Metadata(results[1]) : null, | ||
| 4296 | contentDispositionFilename: this._fullReader?.filename ?? null, | ||
| 4297 | contentLength: this._fullReader?.contentLength ?? null | ||
| 4298 | }; | ||
| 4299 | }); | ||
| 4300 | this.#methodPromises.set(name, promise); | ||
| 4301 | return promise; | ||
| 4302 | } | ||
| 4303 | getMarkInfo() { | ||
| 4304 | return this.messageHandler.sendWithPromise("GetMarkInfo", null); | ||
| 4305 | } | ||
| 4306 | async startCleanup(keepLoadedFonts = false) { | ||
| 4307 | if (this.destroyed) { | ||
| 4308 | return; | ||
| 4309 | } | ||
| 4310 | await this.messageHandler.sendWithPromise("Cleanup", null); | ||
| 4311 | for (const page of this.#pageCache.values()) { | ||
| 4312 | const cleanupSuccessful = page.cleanup(); | ||
| 4313 | if (!cleanupSuccessful) { | ||
| 4314 | throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); | ||
| 4315 | } | ||
| 4316 | } | ||
| 4317 | this.commonObjs.clear(); | ||
| 4318 | if (!keepLoadedFonts) { | ||
| 4319 | this.fontLoader.clear(); | ||
| 4320 | } | ||
| 4321 | this.#methodPromises.clear(); | ||
| 4322 | this.filterFactory.destroy(true); | ||
| 4323 | } | ||
| 4324 | get loadingParams() { | ||
| 4325 | const { | ||
| 4326 | disableAutoFetch, | ||
| 4327 | enableXfa | ||
| 4328 | } = this._params; | ||
| 4329 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "loadingParams", { | ||
| 4330 | disableAutoFetch, | ||
| 4331 | enableXfa | ||
| 4332 | }); | ||
| 4333 | } | ||
| 4334 | } | ||
| 4335 | class PDFObjects { | ||
| 4336 | #objs = Object.create(null); | ||
| 4337 | #ensureObj(objId) { | ||
| 4338 | return this.#objs[objId] ||= { | ||
| 4339 | capability: new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(), | ||
| 4340 | data: null | ||
| 4341 | }; | ||
| 4342 | } | ||
| 4343 | get(objId, callback = null) { | ||
| 4344 | if (callback) { | ||
| 4345 | const obj = this.#ensureObj(objId); | ||
| 4346 | obj.capability.promise.then(() => callback(obj.data)); | ||
| 4347 | return null; | ||
| 4348 | } | ||
| 4349 | const obj = this.#objs[objId]; | ||
| 4350 | if (!obj?.capability.settled) { | ||
| 4351 | throw new Error(`Requesting object that isn't resolved yet ${objId}.`); | ||
| 4352 | } | ||
| 4353 | return obj.data; | ||
| 4354 | } | ||
| 4355 | has(objId) { | ||
| 4356 | const obj = this.#objs[objId]; | ||
| 4357 | return obj?.capability.settled || false; | ||
| 4358 | } | ||
| 4359 | resolve(objId, data = null) { | ||
| 4360 | const obj = this.#ensureObj(objId); | ||
| 4361 | obj.data = data; | ||
| 4362 | obj.capability.resolve(); | ||
| 4363 | } | ||
| 4364 | clear() { | ||
| 4365 | for (const objId in this.#objs) { | ||
| 4366 | const { | ||
| 4367 | data | ||
| 4368 | } = this.#objs[objId]; | ||
| 4369 | data?.bitmap?.close(); | ||
| 4370 | } | ||
| 4371 | this.#objs = Object.create(null); | ||
| 4372 | } | ||
| 4373 | } | ||
| 4374 | class RenderTask { | ||
| 4375 | #internalRenderTask = null; | ||
| 4376 | constructor(internalRenderTask) { | ||
| 4377 | this.#internalRenderTask = internalRenderTask; | ||
| 4378 | this.onContinue = null; | ||
| 4379 | } | ||
| 4380 | get promise() { | ||
| 4381 | return this.#internalRenderTask.capability.promise; | ||
| 4382 | } | ||
| 4383 | cancel(extraDelay = 0) { | ||
| 4384 | this.#internalRenderTask.cancel(null, extraDelay); | ||
| 4385 | } | ||
| 4386 | get separateAnnots() { | ||
| 4387 | const { | ||
| 4388 | separateAnnots | ||
| 4389 | } = this.#internalRenderTask.operatorList; | ||
| 4390 | if (!separateAnnots) { | ||
| 4391 | return false; | ||
| 4392 | } | ||
| 4393 | const { | ||
| 4394 | annotationCanvasMap | ||
| 4395 | } = this.#internalRenderTask; | ||
| 4396 | return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; | ||
| 4397 | } | ||
| 4398 | } | ||
| 4399 | class InternalRenderTask { | ||
| 4400 | static #canvasInUse = new WeakSet(); | ||
| 4401 | constructor({ | ||
| 4402 | callback, | ||
| 4403 | params, | ||
| 4404 | objs, | ||
| 4405 | commonObjs, | ||
| 4406 | annotationCanvasMap, | ||
| 4407 | operatorList, | ||
| 4408 | pageIndex, | ||
| 4409 | canvasFactory, | ||
| 4410 | filterFactory, | ||
| 4411 | useRequestAnimationFrame = false, | ||
| 4412 | pdfBug = false, | ||
| 4413 | pageColors = null | ||
| 4414 | }) { | ||
| 4415 | this.callback = callback; | ||
| 4416 | this.params = params; | ||
| 4417 | this.objs = objs; | ||
| 4418 | this.commonObjs = commonObjs; | ||
| 4419 | this.annotationCanvasMap = annotationCanvasMap; | ||
| 4420 | this.operatorListIdx = null; | ||
| 4421 | this.operatorList = operatorList; | ||
| 4422 | this._pageIndex = pageIndex; | ||
| 4423 | this.canvasFactory = canvasFactory; | ||
| 4424 | this.filterFactory = filterFactory; | ||
| 4425 | this._pdfBug = pdfBug; | ||
| 4426 | this.pageColors = pageColors; | ||
| 4427 | this.running = false; | ||
| 4428 | this.graphicsReadyCallback = null; | ||
| 4429 | this.graphicsReady = false; | ||
| 4430 | this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; | ||
| 4431 | this.cancelled = false; | ||
| 4432 | this.capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); | ||
| 4433 | this.task = new RenderTask(this); | ||
| 4434 | this._cancelBound = this.cancel.bind(this); | ||
| 4435 | this._continueBound = this._continue.bind(this); | ||
| 4436 | this._scheduleNextBound = this._scheduleNext.bind(this); | ||
| 4437 | this._nextBound = this._next.bind(this); | ||
| 4438 | this._canvas = params.canvasContext.canvas; | ||
| 4439 | } | ||
| 4440 | get completed() { | ||
| 4441 | return this.capability.promise.catch(function () {}); | ||
| 4442 | } | ||
| 4443 | initializeGraphics({ | ||
| 4444 | transparency = false, | ||
| 4445 | optionalContentConfig | ||
| 4446 | }) { | ||
| 4447 | if (this.cancelled) { | ||
| 4448 | return; | ||
| 4449 | } | ||
| 4450 | if (this._canvas) { | ||
| 4451 | if (InternalRenderTask.#canvasInUse.has(this._canvas)) { | ||
| 4452 | throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); | ||
| 4453 | } | ||
| 4454 | InternalRenderTask.#canvasInUse.add(this._canvas); | ||
| 4455 | } | ||
| 4456 | if (this._pdfBug && globalThis.StepperManager?.enabled) { | ||
| 4457 | this.stepper = globalThis.StepperManager.create(this._pageIndex); | ||
| 4458 | this.stepper.init(this.operatorList); | ||
| 4459 | this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); | ||
| 4460 | } | ||
| 4461 | const { | ||
| 4462 | canvasContext, | ||
| 4463 | viewport, | ||
| 4464 | transform, | ||
| 4465 | background | ||
| 4466 | } = this.params; | ||
| 4467 | this.gfx = new _canvas_js__WEBPACK_IMPORTED_MODULE_5__.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { | ||
| 4468 | optionalContentConfig | ||
| 4469 | }, this.annotationCanvasMap, this.pageColors); | ||
| 4470 | this.gfx.beginDrawing({ | ||
| 4471 | transform, | ||
| 4472 | viewport, | ||
| 4473 | transparency, | ||
| 4474 | background | ||
| 4475 | }); | ||
| 4476 | this.operatorListIdx = 0; | ||
| 4477 | this.graphicsReady = true; | ||
| 4478 | this.graphicsReadyCallback?.(); | ||
| 4479 | } | ||
| 4480 | cancel(error = null, extraDelay = 0) { | ||
| 4481 | this.running = false; | ||
| 4482 | this.cancelled = true; | ||
| 4483 | this.gfx?.endDrawing(); | ||
| 4484 | InternalRenderTask.#canvasInUse.delete(this._canvas); | ||
| 4485 | this.callback(error || new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); | ||
| 4486 | } | ||
| 4487 | operatorListChanged() { | ||
| 4488 | if (!this.graphicsReady) { | ||
| 4489 | this.graphicsReadyCallback ||= this._continueBound; | ||
| 4490 | return; | ||
| 4491 | } | ||
| 4492 | this.stepper?.updateOperatorList(this.operatorList); | ||
| 4493 | if (this.running) { | ||
| 4494 | return; | ||
| 4495 | } | ||
| 4496 | this._continue(); | ||
| 4497 | } | ||
| 4498 | _continue() { | ||
| 4499 | this.running = true; | ||
| 4500 | if (this.cancelled) { | ||
| 4501 | return; | ||
| 4502 | } | ||
| 4503 | if (this.task.onContinue) { | ||
| 4504 | this.task.onContinue(this._scheduleNextBound); | ||
| 4505 | } else { | ||
| 4506 | this._scheduleNext(); | ||
| 4507 | } | ||
| 4508 | } | ||
| 4509 | _scheduleNext() { | ||
| 4510 | if (this._useRequestAnimationFrame) { | ||
| 4511 | window.requestAnimationFrame(() => { | ||
| 4512 | this._nextBound().catch(this._cancelBound); | ||
| 4513 | }); | ||
| 4514 | } else { | ||
| 4515 | Promise.resolve().then(this._nextBound).catch(this._cancelBound); | ||
| 4516 | } | ||
| 4517 | } | ||
| 4518 | async _next() { | ||
| 4519 | if (this.cancelled) { | ||
| 4520 | return; | ||
| 4521 | } | ||
| 4522 | this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); | ||
| 4523 | if (this.operatorListIdx === this.operatorList.argsArray.length) { | ||
| 4524 | this.running = false; | ||
| 4525 | if (this.operatorList.lastChunk) { | ||
| 4526 | this.gfx.endDrawing(); | ||
| 4527 | InternalRenderTask.#canvasInUse.delete(this._canvas); | ||
| 4528 | this.callback(); | ||
| 4529 | } | ||
| 4530 | } | ||
| 4531 | } | ||
| 4532 | } | ||
| 4533 | const version = '4.0.269'; | ||
| 4534 | const build = 'f4b396f6c'; | ||
| 4535 | |||
| 4536 | __webpack_async_result__(); | ||
| 4537 | } catch(e) { __webpack_async_result__(e); } }); | ||
| 4538 | |||
| 4539 | /***/ }), | ||
| 4540 | |||
| 4541 | /***/ 822: | ||
| 4542 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 4543 | |||
| 4544 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { | ||
| 4545 | /* harmony export */ BaseCMapReaderFactory: () => (/* binding */ BaseCMapReaderFactory), | ||
| 4546 | /* harmony export */ BaseCanvasFactory: () => (/* binding */ BaseCanvasFactory), | ||
| 4547 | /* harmony export */ BaseFilterFactory: () => (/* binding */ BaseFilterFactory), | ||
| 4548 | /* harmony export */ BaseSVGFactory: () => (/* binding */ BaseSVGFactory), | ||
| 4549 | /* harmony export */ BaseStandardFontDataFactory: () => (/* binding */ BaseStandardFontDataFactory) | ||
| 4550 | /* harmony export */ }); | ||
| 4551 | /* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); | ||
| 4552 | |||
| 4553 | class BaseFilterFactory { | ||
| 4554 | constructor() { | ||
| 4555 | if (this.constructor === BaseFilterFactory) { | ||
| 4556 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseFilterFactory."); | ||
| 4557 | } | ||
| 4558 | } | ||
| 4559 | addFilter(maps) { | ||
| 4560 | return "none"; | ||
| 4561 | } | ||
| 4562 | addHCMFilter(fgColor, bgColor) { | ||
| 4563 | return "none"; | ||
| 4564 | } | ||
| 4565 | addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { | ||
| 4566 | return "none"; | ||
| 4567 | } | ||
| 4568 | destroy(keepHCM = false) {} | ||
| 4569 | } | ||
| 4570 | class BaseCanvasFactory { | ||
| 4571 | constructor() { | ||
| 4572 | if (this.constructor === BaseCanvasFactory) { | ||
| 4573 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCanvasFactory."); | ||
| 4574 | } | ||
| 4575 | } | ||
| 4576 | create(width, height) { | ||
| 4577 | if (width <= 0 || height <= 0) { | ||
| 4578 | throw new Error("Invalid canvas size"); | ||
| 4579 | } | ||
| 4580 | const canvas = this._createCanvas(width, height); | ||
| 4581 | return { | ||
| 4582 | canvas, | ||
| 4583 | context: canvas.getContext("2d") | ||
| 4584 | }; | ||
| 4585 | } | ||
| 4586 | reset(canvasAndContext, width, height) { | ||
| 4587 | if (!canvasAndContext.canvas) { | ||
| 4588 | throw new Error("Canvas is not specified"); | ||
| 4589 | } | ||
| 4590 | if (width <= 0 || height <= 0) { | ||
| 4591 | throw new Error("Invalid canvas size"); | ||
| 4592 | } | ||
| 4593 | canvasAndContext.canvas.width = width; | ||
| 4594 | canvasAndContext.canvas.height = height; | ||
| 4595 | } | ||
| 4596 | destroy(canvasAndContext) { | ||
| 4597 | if (!canvasAndContext.canvas) { | ||
| 4598 | throw new Error("Canvas is not specified"); | ||
| 4599 | } | ||
| 4600 | canvasAndContext.canvas.width = 0; | ||
| 4601 | canvasAndContext.canvas.height = 0; | ||
| 4602 | canvasAndContext.canvas = null; | ||
| 4603 | canvasAndContext.context = null; | ||
| 4604 | } | ||
| 4605 | _createCanvas(width, height) { | ||
| 4606 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createCanvas` called."); | ||
| 4607 | } | ||
| 4608 | } | ||
| 4609 | class BaseCMapReaderFactory { | ||
| 4610 | constructor({ | ||
| 4611 | baseUrl = null, | ||
| 4612 | isCompressed = true | ||
| 4613 | }) { | ||
| 4614 | if (this.constructor === BaseCMapReaderFactory) { | ||
| 4615 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCMapReaderFactory."); | ||
| 4616 | } | ||
| 4617 | this.baseUrl = baseUrl; | ||
| 4618 | this.isCompressed = isCompressed; | ||
| 4619 | } | ||
| 4620 | async fetch({ | ||
| 4621 | name | ||
| 4622 | }) { | ||
| 4623 | if (!this.baseUrl) { | ||
| 4624 | throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); | ||
| 4625 | } | ||
| 4626 | if (!name) { | ||
| 4627 | throw new Error("CMap name must be specified."); | ||
| 4628 | } | ||
| 4629 | const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); | ||
| 4630 | const compressionType = this.isCompressed ? _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.BINARY : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.NONE; | ||
| 4631 | return this._fetchData(url, compressionType).catch(reason => { | ||
| 4632 | throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); | ||
| 4633 | }); | ||
| 4634 | } | ||
| 4635 | _fetchData(url, compressionType) { | ||
| 4636 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); | ||
| 4637 | } | ||
| 4638 | } | ||
| 4639 | class BaseStandardFontDataFactory { | ||
| 4640 | constructor({ | ||
| 4641 | baseUrl = null | ||
| 4642 | }) { | ||
| 4643 | if (this.constructor === BaseStandardFontDataFactory) { | ||
| 4644 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseStandardFontDataFactory."); | ||
| 4645 | } | ||
| 4646 | this.baseUrl = baseUrl; | ||
| 4647 | } | ||
| 4648 | async fetch({ | ||
| 4649 | filename | ||
| 4650 | }) { | ||
| 4651 | if (!this.baseUrl) { | ||
| 4652 | throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); | ||
| 4653 | } | ||
| 4654 | if (!filename) { | ||
| 4655 | throw new Error("Font filename must be specified."); | ||
| 4656 | } | ||
| 4657 | const url = `${this.baseUrl}${filename}`; | ||
| 4658 | return this._fetchData(url).catch(reason => { | ||
| 4659 | throw new Error(`Unable to load font data at: ${url}`); | ||
| 4660 | }); | ||
| 4661 | } | ||
| 4662 | _fetchData(url) { | ||
| 4663 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); | ||
| 4664 | } | ||
| 4665 | } | ||
| 4666 | class BaseSVGFactory { | ||
| 4667 | constructor() { | ||
| 4668 | if (this.constructor === BaseSVGFactory) { | ||
| 4669 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseSVGFactory."); | ||
| 4670 | } | ||
| 4671 | } | ||
| 4672 | create(width, height, skipDimensions = false) { | ||
| 4673 | if (width <= 0 || height <= 0) { | ||
| 4674 | throw new Error("Invalid SVG dimensions"); | ||
| 4675 | } | ||
| 4676 | const svg = this._createSVG("svg:svg"); | ||
| 4677 | svg.setAttribute("version", "1.1"); | ||
| 4678 | if (!skipDimensions) { | ||
| 4679 | svg.setAttribute("width", `${width}px`); | ||
| 4680 | svg.setAttribute("height", `${height}px`); | ||
| 4681 | } | ||
| 4682 | svg.setAttribute("preserveAspectRatio", "none"); | ||
| 4683 | svg.setAttribute("viewBox", `0 0 ${width} ${height}`); | ||
| 4684 | return svg; | ||
| 4685 | } | ||
| 4686 | createElement(type) { | ||
| 4687 | if (typeof type !== "string") { | ||
| 4688 | throw new Error("Invalid SVG element type"); | ||
| 4689 | } | ||
| 4690 | return this._createSVG(type); | ||
| 4691 | } | ||
| 4692 | _createSVG(type) { | ||
| 4693 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createSVG` called."); | ||
| 4694 | } | ||
| 4695 | } | ||
| 4696 | |||
| 4697 | |||
| 4698 | /***/ }), | ||
| 4699 | |||
| 4700 | /***/ 250: | ||
| 4701 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 4702 | |||
| 4703 | |||
| 4704 | // EXPORTS | ||
| 4705 | __webpack_require__.d(__webpack_exports__, { | ||
| 4706 | CanvasGraphics: () => (/* binding */ CanvasGraphics) | ||
| 4707 | }); | ||
| 4708 | |||
| 4709 | // EXTERNAL MODULE: ./src/shared/util.js | ||
| 4710 | var util = __webpack_require__(266); | ||
| 4711 | // EXTERNAL MODULE: ./src/display/display_utils.js | ||
| 4712 | var display_utils = __webpack_require__(473); | ||
| 4713 | ;// CONCATENATED MODULE: ./src/display/pattern_helper.js | ||
| 4714 | |||
| 4715 | |||
| 4716 | const PathType = { | ||
| 4717 | FILL: "Fill", | ||
| 4718 | STROKE: "Stroke", | ||
| 4719 | SHADING: "Shading" | ||
| 4720 | }; | ||
| 4721 | function applyBoundingBox(ctx, bbox) { | ||
| 4722 | if (!bbox) { | ||
| 4723 | return; | ||
| 4724 | } | ||
| 4725 | const width = bbox[2] - bbox[0]; | ||
| 4726 | const height = bbox[3] - bbox[1]; | ||
| 4727 | const region = new Path2D(); | ||
| 4728 | region.rect(bbox[0], bbox[1], width, height); | ||
| 4729 | ctx.clip(region); | ||
| 4730 | } | ||
| 4731 | class BaseShadingPattern { | ||
| 4732 | constructor() { | ||
| 4733 | if (this.constructor === BaseShadingPattern) { | ||
| 4734 | (0,util.unreachable)("Cannot initialize BaseShadingPattern."); | ||
| 4735 | } | ||
| 4736 | } | ||
| 4737 | getPattern() { | ||
| 4738 | (0,util.unreachable)("Abstract method `getPattern` called."); | ||
| 4739 | } | ||
| 4740 | } | ||
| 4741 | class RadialAxialShadingPattern extends BaseShadingPattern { | ||
| 4742 | constructor(IR) { | ||
| 4743 | super(); | ||
| 4744 | this._type = IR[1]; | ||
| 4745 | this._bbox = IR[2]; | ||
| 4746 | this._colorStops = IR[3]; | ||
| 4747 | this._p0 = IR[4]; | ||
| 4748 | this._p1 = IR[5]; | ||
| 4749 | this._r0 = IR[6]; | ||
| 4750 | this._r1 = IR[7]; | ||
| 4751 | this.matrix = null; | ||
| 4752 | } | ||
| 4753 | _createGradient(ctx) { | ||
| 4754 | let grad; | ||
| 4755 | if (this._type === "axial") { | ||
| 4756 | grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); | ||
| 4757 | } else if (this._type === "radial") { | ||
| 4758 | grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); | ||
| 4759 | } | ||
| 4760 | for (const colorStop of this._colorStops) { | ||
| 4761 | grad.addColorStop(colorStop[0], colorStop[1]); | ||
| 4762 | } | ||
| 4763 | return grad; | ||
| 4764 | } | ||
| 4765 | getPattern(ctx, owner, inverse, pathType) { | ||
| 4766 | let pattern; | ||
| 4767 | if (pathType === PathType.STROKE || pathType === PathType.FILL) { | ||
| 4768 | const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0,display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; | ||
| 4769 | const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; | ||
| 4770 | const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; | ||
| 4771 | const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); | ||
| 4772 | const tmpCtx = tmpCanvas.context; | ||
| 4773 | tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); | ||
| 4774 | tmpCtx.beginPath(); | ||
| 4775 | tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); | ||
| 4776 | tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); | ||
| 4777 | inverse = util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); | ||
| 4778 | tmpCtx.transform(...owner.baseTransform); | ||
| 4779 | if (this.matrix) { | ||
| 4780 | tmpCtx.transform(...this.matrix); | ||
| 4781 | } | ||
| 4782 | applyBoundingBox(tmpCtx, this._bbox); | ||
| 4783 | tmpCtx.fillStyle = this._createGradient(tmpCtx); | ||
| 4784 | tmpCtx.fill(); | ||
| 4785 | pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); | ||
| 4786 | const domMatrix = new DOMMatrix(inverse); | ||
| 4787 | pattern.setTransform(domMatrix); | ||
| 4788 | } else { | ||
| 4789 | applyBoundingBox(ctx, this._bbox); | ||
| 4790 | pattern = this._createGradient(ctx); | ||
| 4791 | } | ||
| 4792 | return pattern; | ||
| 4793 | } | ||
| 4794 | } | ||
| 4795 | function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { | ||
| 4796 | const coords = context.coords, | ||
| 4797 | colors = context.colors; | ||
| 4798 | const bytes = data.data, | ||
| 4799 | rowSize = data.width * 4; | ||
| 4800 | let tmp; | ||
| 4801 | if (coords[p1 + 1] > coords[p2 + 1]) { | ||
| 4802 | tmp = p1; | ||
| 4803 | p1 = p2; | ||
| 4804 | p2 = tmp; | ||
| 4805 | tmp = c1; | ||
| 4806 | c1 = c2; | ||
| 4807 | c2 = tmp; | ||
| 4808 | } | ||
| 4809 | if (coords[p2 + 1] > coords[p3 + 1]) { | ||
| 4810 | tmp = p2; | ||
| 4811 | p2 = p3; | ||
| 4812 | p3 = tmp; | ||
| 4813 | tmp = c2; | ||
| 4814 | c2 = c3; | ||
| 4815 | c3 = tmp; | ||
| 4816 | } | ||
| 4817 | if (coords[p1 + 1] > coords[p2 + 1]) { | ||
| 4818 | tmp = p1; | ||
| 4819 | p1 = p2; | ||
| 4820 | p2 = tmp; | ||
| 4821 | tmp = c1; | ||
| 4822 | c1 = c2; | ||
| 4823 | c2 = tmp; | ||
| 4824 | } | ||
| 4825 | const x1 = (coords[p1] + context.offsetX) * context.scaleX; | ||
| 4826 | const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; | ||
| 4827 | const x2 = (coords[p2] + context.offsetX) * context.scaleX; | ||
| 4828 | const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; | ||
| 4829 | const x3 = (coords[p3] + context.offsetX) * context.scaleX; | ||
| 4830 | const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; | ||
| 4831 | if (y1 >= y3) { | ||
| 4832 | return; | ||
| 4833 | } | ||
| 4834 | const c1r = colors[c1], | ||
| 4835 | c1g = colors[c1 + 1], | ||
| 4836 | c1b = colors[c1 + 2]; | ||
| 4837 | const c2r = colors[c2], | ||
| 4838 | c2g = colors[c2 + 1], | ||
| 4839 | c2b = colors[c2 + 2]; | ||
| 4840 | const c3r = colors[c3], | ||
| 4841 | c3g = colors[c3 + 1], | ||
| 4842 | c3b = colors[c3 + 2]; | ||
| 4843 | const minY = Math.round(y1), | ||
| 4844 | maxY = Math.round(y3); | ||
| 4845 | let xa, car, cag, cab; | ||
| 4846 | let xb, cbr, cbg, cbb; | ||
| 4847 | for (let y = minY; y <= maxY; y++) { | ||
| 4848 | if (y < y2) { | ||
| 4849 | const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); | ||
| 4850 | xa = x1 - (x1 - x2) * k; | ||
| 4851 | car = c1r - (c1r - c2r) * k; | ||
| 4852 | cag = c1g - (c1g - c2g) * k; | ||
| 4853 | cab = c1b - (c1b - c2b) * k; | ||
| 4854 | } else { | ||
| 4855 | let k; | ||
| 4856 | if (y > y3) { | ||
| 4857 | k = 1; | ||
| 4858 | } else if (y2 === y3) { | ||
| 4859 | k = 0; | ||
| 4860 | } else { | ||
| 4861 | k = (y2 - y) / (y2 - y3); | ||
| 4862 | } | ||
| 4863 | xa = x2 - (x2 - x3) * k; | ||
| 4864 | car = c2r - (c2r - c3r) * k; | ||
| 4865 | cag = c2g - (c2g - c3g) * k; | ||
| 4866 | cab = c2b - (c2b - c3b) * k; | ||
| 4867 | } | ||
| 4868 | let k; | ||
| 4869 | if (y < y1) { | ||
| 4870 | k = 0; | ||
| 4871 | } else if (y > y3) { | ||
| 4872 | k = 1; | ||
| 4873 | } else { | ||
| 4874 | k = (y1 - y) / (y1 - y3); | ||
| 4875 | } | ||
| 4876 | xb = x1 - (x1 - x3) * k; | ||
| 4877 | cbr = c1r - (c1r - c3r) * k; | ||
| 4878 | cbg = c1g - (c1g - c3g) * k; | ||
| 4879 | cbb = c1b - (c1b - c3b) * k; | ||
| 4880 | const x1_ = Math.round(Math.min(xa, xb)); | ||
| 4881 | const x2_ = Math.round(Math.max(xa, xb)); | ||
| 4882 | let j = rowSize * y + x1_ * 4; | ||
| 4883 | for (let x = x1_; x <= x2_; x++) { | ||
| 4884 | k = (xa - x) / (xa - xb); | ||
| 4885 | if (k < 0) { | ||
| 4886 | k = 0; | ||
| 4887 | } else if (k > 1) { | ||
| 4888 | k = 1; | ||
| 4889 | } | ||
| 4890 | bytes[j++] = car - (car - cbr) * k | 0; | ||
| 4891 | bytes[j++] = cag - (cag - cbg) * k | 0; | ||
| 4892 | bytes[j++] = cab - (cab - cbb) * k | 0; | ||
| 4893 | bytes[j++] = 255; | ||
| 4894 | } | ||
| 4895 | } | ||
| 4896 | } | ||
| 4897 | function drawFigure(data, figure, context) { | ||
| 4898 | const ps = figure.coords; | ||
| 4899 | const cs = figure.colors; | ||
| 4900 | let i, ii; | ||
| 4901 | switch (figure.type) { | ||
| 4902 | case "lattice": | ||
| 4903 | const verticesPerRow = figure.verticesPerRow; | ||
| 4904 | const rows = Math.floor(ps.length / verticesPerRow) - 1; | ||
| 4905 | const cols = verticesPerRow - 1; | ||
| 4906 | for (i = 0; i < rows; i++) { | ||
| 4907 | let q = i * verticesPerRow; | ||
| 4908 | for (let j = 0; j < cols; j++, q++) { | ||
| 4909 | drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); | ||
| 4910 | drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); | ||
| 4911 | } | ||
| 4912 | } | ||
| 4913 | break; | ||
| 4914 | case "triangles": | ||
| 4915 | for (i = 0, ii = ps.length; i < ii; i += 3) { | ||
| 4916 | drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); | ||
| 4917 | } | ||
| 4918 | break; | ||
| 4919 | default: | ||
| 4920 | throw new Error("illegal figure"); | ||
| 4921 | } | ||
| 4922 | } | ||
| 4923 | class MeshShadingPattern extends BaseShadingPattern { | ||
| 4924 | constructor(IR) { | ||
| 4925 | super(); | ||
| 4926 | this._coords = IR[2]; | ||
| 4927 | this._colors = IR[3]; | ||
| 4928 | this._figures = IR[4]; | ||
| 4929 | this._bounds = IR[5]; | ||
| 4930 | this._bbox = IR[7]; | ||
| 4931 | this._background = IR[8]; | ||
| 4932 | this.matrix = null; | ||
| 4933 | } | ||
| 4934 | _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { | ||
| 4935 | const EXPECTED_SCALE = 1.1; | ||
| 4936 | const MAX_PATTERN_SIZE = 3000; | ||
| 4937 | const BORDER_SIZE = 2; | ||
| 4938 | const offsetX = Math.floor(this._bounds[0]); | ||
| 4939 | const offsetY = Math.floor(this._bounds[1]); | ||
| 4940 | const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; | ||
| 4941 | const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; | ||
| 4942 | const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); | ||
| 4943 | const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); | ||
| 4944 | const scaleX = boundsWidth / width; | ||
| 4945 | const scaleY = boundsHeight / height; | ||
| 4946 | const context = { | ||
| 4947 | coords: this._coords, | ||
| 4948 | colors: this._colors, | ||
| 4949 | offsetX: -offsetX, | ||
| 4950 | offsetY: -offsetY, | ||
| 4951 | scaleX: 1 / scaleX, | ||
| 4952 | scaleY: 1 / scaleY | ||
| 4953 | }; | ||
| 4954 | const paddedWidth = width + BORDER_SIZE * 2; | ||
| 4955 | const paddedHeight = height + BORDER_SIZE * 2; | ||
| 4956 | const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); | ||
| 4957 | const tmpCtx = tmpCanvas.context; | ||
| 4958 | const data = tmpCtx.createImageData(width, height); | ||
| 4959 | if (backgroundColor) { | ||
| 4960 | const bytes = data.data; | ||
| 4961 | for (let i = 0, ii = bytes.length; i < ii; i += 4) { | ||
| 4962 | bytes[i] = backgroundColor[0]; | ||
| 4963 | bytes[i + 1] = backgroundColor[1]; | ||
| 4964 | bytes[i + 2] = backgroundColor[2]; | ||
| 4965 | bytes[i + 3] = 255; | ||
| 4966 | } | ||
| 4967 | } | ||
| 4968 | for (const figure of this._figures) { | ||
| 4969 | drawFigure(data, figure, context); | ||
| 4970 | } | ||
| 4971 | tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); | ||
| 4972 | const canvas = tmpCanvas.canvas; | ||
| 4973 | return { | ||
| 4974 | canvas, | ||
| 4975 | offsetX: offsetX - BORDER_SIZE * scaleX, | ||
| 4976 | offsetY: offsetY - BORDER_SIZE * scaleY, | ||
| 4977 | scaleX, | ||
| 4978 | scaleY | ||
| 4979 | }; | ||
| 4980 | } | ||
| 4981 | getPattern(ctx, owner, inverse, pathType) { | ||
| 4982 | applyBoundingBox(ctx, this._bbox); | ||
| 4983 | let scale; | ||
| 4984 | if (pathType === PathType.SHADING) { | ||
| 4985 | scale = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(ctx)); | ||
| 4986 | } else { | ||
| 4987 | scale = util.Util.singularValueDecompose2dScale(owner.baseTransform); | ||
| 4988 | if (this.matrix) { | ||
| 4989 | const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); | ||
| 4990 | scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; | ||
| 4991 | } | ||
| 4992 | } | ||
| 4993 | const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); | ||
| 4994 | if (pathType !== PathType.SHADING) { | ||
| 4995 | ctx.setTransform(...owner.baseTransform); | ||
| 4996 | if (this.matrix) { | ||
| 4997 | ctx.transform(...this.matrix); | ||
| 4998 | } | ||
| 4999 | } | ||
| 5000 | ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); | ||
| 5001 | ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); | ||
| 5002 | return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); | ||
| 5003 | } | ||
| 5004 | } | ||
| 5005 | class DummyShadingPattern extends BaseShadingPattern { | ||
| 5006 | getPattern() { | ||
| 5007 | return "hotpink"; | ||
| 5008 | } | ||
| 5009 | } | ||
| 5010 | function getShadingPattern(IR) { | ||
| 5011 | switch (IR[0]) { | ||
| 5012 | case "RadialAxial": | ||
| 5013 | return new RadialAxialShadingPattern(IR); | ||
| 5014 | case "Mesh": | ||
| 5015 | return new MeshShadingPattern(IR); | ||
| 5016 | case "Dummy": | ||
| 5017 | return new DummyShadingPattern(); | ||
| 5018 | } | ||
| 5019 | throw new Error(`Unknown IR type: ${IR[0]}`); | ||
| 5020 | } | ||
| 5021 | const PaintType = { | ||
| 5022 | COLORED: 1, | ||
| 5023 | UNCOLORED: 2 | ||
| 5024 | }; | ||
| 5025 | class TilingPattern { | ||
| 5026 | static MAX_PATTERN_SIZE = 3000; | ||
| 5027 | constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { | ||
| 5028 | this.operatorList = IR[2]; | ||
| 5029 | this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; | ||
| 5030 | this.bbox = IR[4]; | ||
| 5031 | this.xstep = IR[5]; | ||
| 5032 | this.ystep = IR[6]; | ||
| 5033 | this.paintType = IR[7]; | ||
| 5034 | this.tilingType = IR[8]; | ||
| 5035 | this.color = color; | ||
| 5036 | this.ctx = ctx; | ||
| 5037 | this.canvasGraphicsFactory = canvasGraphicsFactory; | ||
| 5038 | this.baseTransform = baseTransform; | ||
| 5039 | } | ||
| 5040 | createPatternCanvas(owner) { | ||
| 5041 | const operatorList = this.operatorList; | ||
| 5042 | const bbox = this.bbox; | ||
| 5043 | const xstep = this.xstep; | ||
| 5044 | const ystep = this.ystep; | ||
| 5045 | const paintType = this.paintType; | ||
| 5046 | const tilingType = this.tilingType; | ||
| 5047 | const color = this.color; | ||
| 5048 | const canvasGraphicsFactory = this.canvasGraphicsFactory; | ||
| 5049 | (0,util.info)("TilingType: " + tilingType); | ||
| 5050 | const x0 = bbox[0], | ||
| 5051 | y0 = bbox[1], | ||
| 5052 | x1 = bbox[2], | ||
| 5053 | y1 = bbox[3]; | ||
| 5054 | const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); | ||
| 5055 | const curMatrixScale = util.Util.singularValueDecompose2dScale(this.baseTransform); | ||
| 5056 | const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; | ||
| 5057 | const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); | ||
| 5058 | const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); | ||
| 5059 | const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); | ||
| 5060 | const tmpCtx = tmpCanvas.context; | ||
| 5061 | const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); | ||
| 5062 | graphics.groupLevel = owner.groupLevel; | ||
| 5063 | this.setFillAndStrokeStyleToContext(graphics, paintType, color); | ||
| 5064 | let adjustedX0 = x0; | ||
| 5065 | let adjustedY0 = y0; | ||
| 5066 | let adjustedX1 = x1; | ||
| 5067 | let adjustedY1 = y1; | ||
| 5068 | if (x0 < 0) { | ||
| 5069 | adjustedX0 = 0; | ||
| 5070 | adjustedX1 += Math.abs(x0); | ||
| 5071 | } | ||
| 5072 | if (y0 < 0) { | ||
| 5073 | adjustedY0 = 0; | ||
| 5074 | adjustedY1 += Math.abs(y0); | ||
| 5075 | } | ||
| 5076 | tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); | ||
| 5077 | graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); | ||
| 5078 | tmpCtx.save(); | ||
| 5079 | this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); | ||
| 5080 | graphics.baseTransform = (0,display_utils.getCurrentTransform)(graphics.ctx); | ||
| 5081 | graphics.executeOperatorList(operatorList); | ||
| 5082 | graphics.endDrawing(); | ||
| 5083 | return { | ||
| 5084 | canvas: tmpCanvas.canvas, | ||
| 5085 | scaleX: dimx.scale, | ||
| 5086 | scaleY: dimy.scale, | ||
| 5087 | offsetX: adjustedX0, | ||
| 5088 | offsetY: adjustedY0 | ||
| 5089 | }; | ||
| 5090 | } | ||
| 5091 | getSizeAndScale(step, realOutputSize, scale) { | ||
| 5092 | step = Math.abs(step); | ||
| 5093 | const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); | ||
| 5094 | let size = Math.ceil(step * scale); | ||
| 5095 | if (size >= maxSize) { | ||
| 5096 | size = maxSize; | ||
| 5097 | } else { | ||
| 5098 | scale = size / step; | ||
| 5099 | } | ||
| 5100 | return { | ||
| 5101 | scale, | ||
| 5102 | size | ||
| 5103 | }; | ||
| 5104 | } | ||
| 5105 | clipBbox(graphics, x0, y0, x1, y1) { | ||
| 5106 | const bboxWidth = x1 - x0; | ||
| 5107 | const bboxHeight = y1 - y0; | ||
| 5108 | graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); | ||
| 5109 | graphics.current.updateRectMinMax((0,display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); | ||
| 5110 | graphics.clip(); | ||
| 5111 | graphics.endPath(); | ||
| 5112 | } | ||
| 5113 | setFillAndStrokeStyleToContext(graphics, paintType, color) { | ||
| 5114 | const context = graphics.ctx, | ||
| 5115 | current = graphics.current; | ||
| 5116 | switch (paintType) { | ||
| 5117 | case PaintType.COLORED: | ||
| 5118 | const ctx = this.ctx; | ||
| 5119 | context.fillStyle = ctx.fillStyle; | ||
| 5120 | context.strokeStyle = ctx.strokeStyle; | ||
| 5121 | current.fillColor = ctx.fillStyle; | ||
| 5122 | current.strokeColor = ctx.strokeStyle; | ||
| 5123 | break; | ||
| 5124 | case PaintType.UNCOLORED: | ||
| 5125 | const cssColor = util.Util.makeHexColor(color[0], color[1], color[2]); | ||
| 5126 | context.fillStyle = cssColor; | ||
| 5127 | context.strokeStyle = cssColor; | ||
| 5128 | current.fillColor = cssColor; | ||
| 5129 | current.strokeColor = cssColor; | ||
| 5130 | break; | ||
| 5131 | default: | ||
| 5132 | throw new util.FormatError(`Unsupported paint type: ${paintType}`); | ||
| 5133 | } | ||
| 5134 | } | ||
| 5135 | getPattern(ctx, owner, inverse, pathType) { | ||
| 5136 | let matrix = inverse; | ||
| 5137 | if (pathType !== PathType.SHADING) { | ||
| 5138 | matrix = util.Util.transform(matrix, owner.baseTransform); | ||
| 5139 | if (this.matrix) { | ||
| 5140 | matrix = util.Util.transform(matrix, this.matrix); | ||
| 5141 | } | ||
| 5142 | } | ||
| 5143 | const temporaryPatternCanvas = this.createPatternCanvas(owner); | ||
| 5144 | let domMatrix = new DOMMatrix(matrix); | ||
| 5145 | domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); | ||
| 5146 | domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); | ||
| 5147 | const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); | ||
| 5148 | pattern.setTransform(domMatrix); | ||
| 5149 | return pattern; | ||
| 5150 | } | ||
| 5151 | } | ||
| 5152 | |||
| 5153 | ;// CONCATENATED MODULE: ./src/shared/image_utils.js | ||
| 5154 | |||
| 5155 | function convertToRGBA(params) { | ||
| 5156 | switch (params.kind) { | ||
| 5157 | case ImageKind.GRAYSCALE_1BPP: | ||
| 5158 | return convertBlackAndWhiteToRGBA(params); | ||
| 5159 | case ImageKind.RGB_24BPP: | ||
| 5160 | return convertRGBToRGBA(params); | ||
| 5161 | } | ||
| 5162 | return null; | ||
| 5163 | } | ||
| 5164 | function convertBlackAndWhiteToRGBA({ | ||
| 5165 | src, | ||
| 5166 | srcPos = 0, | ||
| 5167 | dest, | ||
| 5168 | width, | ||
| 5169 | height, | ||
| 5170 | nonBlackColor = 0xffffffff, | ||
| 5171 | inverseDecode = false | ||
| 5172 | }) { | ||
| 5173 | const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; | ||
| 5174 | const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; | ||
| 5175 | const widthInSource = width >> 3; | ||
| 5176 | const widthRemainder = width & 7; | ||
| 5177 | const srcLength = src.length; | ||
| 5178 | dest = new Uint32Array(dest.buffer); | ||
| 5179 | let destPos = 0; | ||
| 5180 | for (let i = 0; i < height; i++) { | ||
| 5181 | for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { | ||
| 5182 | const elem = srcPos < srcLength ? src[srcPos] : 255; | ||
| 5183 | dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; | ||
| 5184 | dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; | ||
| 5185 | dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; | ||
| 5186 | dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; | ||
| 5187 | dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; | ||
| 5188 | dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; | ||
| 5189 | dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; | ||
| 5190 | dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; | ||
| 5191 | } | ||
| 5192 | if (widthRemainder === 0) { | ||
| 5193 | continue; | ||
| 5194 | } | ||
| 5195 | const elem = srcPos < srcLength ? src[srcPos++] : 255; | ||
| 5196 | for (let j = 0; j < widthRemainder; j++) { | ||
| 5197 | dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; | ||
| 5198 | } | ||
| 5199 | } | ||
| 5200 | return { | ||
| 5201 | srcPos, | ||
| 5202 | destPos | ||
| 5203 | }; | ||
| 5204 | } | ||
| 5205 | function convertRGBToRGBA({ | ||
| 5206 | src, | ||
| 5207 | srcPos = 0, | ||
| 5208 | dest, | ||
| 5209 | destPos = 0, | ||
| 5210 | width, | ||
| 5211 | height | ||
| 5212 | }) { | ||
| 5213 | let i = 0; | ||
| 5214 | const len32 = src.length >> 2; | ||
| 5215 | const src32 = new Uint32Array(src.buffer, srcPos, len32); | ||
| 5216 | if (FeatureTest.isLittleEndian) { | ||
| 5217 | for (; i < len32 - 2; i += 3, destPos += 4) { | ||
| 5218 | const s1 = src32[i]; | ||
| 5219 | const s2 = src32[i + 1]; | ||
| 5220 | const s3 = src32[i + 2]; | ||
| 5221 | dest[destPos] = s1 | 0xff000000; | ||
| 5222 | dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; | ||
| 5223 | dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; | ||
| 5224 | dest[destPos + 3] = s3 >>> 8 | 0xff000000; | ||
| 5225 | } | ||
| 5226 | for (let j = i * 4, jj = src.length; j < jj; j += 3) { | ||
| 5227 | dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; | ||
| 5228 | } | ||
| 5229 | } else { | ||
| 5230 | for (; i < len32 - 2; i += 3, destPos += 4) { | ||
| 5231 | const s1 = src32[i]; | ||
| 5232 | const s2 = src32[i + 1]; | ||
| 5233 | const s3 = src32[i + 2]; | ||
| 5234 | dest[destPos] = s1 | 0xff; | ||
| 5235 | dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; | ||
| 5236 | dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; | ||
| 5237 | dest[destPos + 3] = s3 << 8 | 0xff; | ||
| 5238 | } | ||
| 5239 | for (let j = i * 4, jj = src.length; j < jj; j += 3) { | ||
| 5240 | dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; | ||
| 5241 | } | ||
| 5242 | } | ||
| 5243 | return { | ||
| 5244 | srcPos, | ||
| 5245 | destPos | ||
| 5246 | }; | ||
| 5247 | } | ||
| 5248 | function grayToRGBA(src, dest) { | ||
| 5249 | if (FeatureTest.isLittleEndian) { | ||
| 5250 | for (let i = 0, ii = src.length; i < ii; i++) { | ||
| 5251 | dest[i] = src[i] * 0x10101 | 0xff000000; | ||
| 5252 | } | ||
| 5253 | } else { | ||
| 5254 | for (let i = 0, ii = src.length; i < ii; i++) { | ||
| 5255 | dest[i] = src[i] * 0x1010100 | 0x000000ff; | ||
| 5256 | } | ||
| 5257 | } | ||
| 5258 | } | ||
| 5259 | |||
| 5260 | ;// CONCATENATED MODULE: ./src/display/canvas.js | ||
| 5261 | |||
| 5262 | |||
| 5263 | |||
| 5264 | |||
| 5265 | const MIN_FONT_SIZE = 16; | ||
| 5266 | const MAX_FONT_SIZE = 100; | ||
| 5267 | const MAX_GROUP_SIZE = 4096; | ||
| 5268 | const EXECUTION_TIME = 15; | ||
| 5269 | const EXECUTION_STEPS = 10; | ||
| 5270 | const MAX_SIZE_TO_COMPILE = 1000; | ||
| 5271 | const FULL_CHUNK_HEIGHT = 16; | ||
| 5272 | function mirrorContextOperations(ctx, destCtx) { | ||
| 5273 | if (ctx._removeMirroring) { | ||
| 5274 | throw new Error("Context is already forwarding operations."); | ||
| 5275 | } | ||
| 5276 | ctx.__originalSave = ctx.save; | ||
| 5277 | ctx.__originalRestore = ctx.restore; | ||
| 5278 | ctx.__originalRotate = ctx.rotate; | ||
| 5279 | ctx.__originalScale = ctx.scale; | ||
| 5280 | ctx.__originalTranslate = ctx.translate; | ||
| 5281 | ctx.__originalTransform = ctx.transform; | ||
| 5282 | ctx.__originalSetTransform = ctx.setTransform; | ||
| 5283 | ctx.__originalResetTransform = ctx.resetTransform; | ||
| 5284 | ctx.__originalClip = ctx.clip; | ||
| 5285 | ctx.__originalMoveTo = ctx.moveTo; | ||
| 5286 | ctx.__originalLineTo = ctx.lineTo; | ||
| 5287 | ctx.__originalBezierCurveTo = ctx.bezierCurveTo; | ||
| 5288 | ctx.__originalRect = ctx.rect; | ||
| 5289 | ctx.__originalClosePath = ctx.closePath; | ||
| 5290 | ctx.__originalBeginPath = ctx.beginPath; | ||
| 5291 | ctx._removeMirroring = () => { | ||
| 5292 | ctx.save = ctx.__originalSave; | ||
| 5293 | ctx.restore = ctx.__originalRestore; | ||
| 5294 | ctx.rotate = ctx.__originalRotate; | ||
| 5295 | ctx.scale = ctx.__originalScale; | ||
| 5296 | ctx.translate = ctx.__originalTranslate; | ||
| 5297 | ctx.transform = ctx.__originalTransform; | ||
| 5298 | ctx.setTransform = ctx.__originalSetTransform; | ||
| 5299 | ctx.resetTransform = ctx.__originalResetTransform; | ||
| 5300 | ctx.clip = ctx.__originalClip; | ||
| 5301 | ctx.moveTo = ctx.__originalMoveTo; | ||
| 5302 | ctx.lineTo = ctx.__originalLineTo; | ||
| 5303 | ctx.bezierCurveTo = ctx.__originalBezierCurveTo; | ||
| 5304 | ctx.rect = ctx.__originalRect; | ||
| 5305 | ctx.closePath = ctx.__originalClosePath; | ||
| 5306 | ctx.beginPath = ctx.__originalBeginPath; | ||
| 5307 | delete ctx._removeMirroring; | ||
| 5308 | }; | ||
| 5309 | ctx.save = function ctxSave() { | ||
| 5310 | destCtx.save(); | ||
| 5311 | this.__originalSave(); | ||
| 5312 | }; | ||
| 5313 | ctx.restore = function ctxRestore() { | ||
| 5314 | destCtx.restore(); | ||
| 5315 | this.__originalRestore(); | ||
| 5316 | }; | ||
| 5317 | ctx.translate = function ctxTranslate(x, y) { | ||
| 5318 | destCtx.translate(x, y); | ||
| 5319 | this.__originalTranslate(x, y); | ||
| 5320 | }; | ||
| 5321 | ctx.scale = function ctxScale(x, y) { | ||
| 5322 | destCtx.scale(x, y); | ||
| 5323 | this.__originalScale(x, y); | ||
| 5324 | }; | ||
| 5325 | ctx.transform = function ctxTransform(a, b, c, d, e, f) { | ||
| 5326 | destCtx.transform(a, b, c, d, e, f); | ||
| 5327 | this.__originalTransform(a, b, c, d, e, f); | ||
| 5328 | }; | ||
| 5329 | ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { | ||
| 5330 | destCtx.setTransform(a, b, c, d, e, f); | ||
| 5331 | this.__originalSetTransform(a, b, c, d, e, f); | ||
| 5332 | }; | ||
| 5333 | ctx.resetTransform = function ctxResetTransform() { | ||
| 5334 | destCtx.resetTransform(); | ||
| 5335 | this.__originalResetTransform(); | ||
| 5336 | }; | ||
| 5337 | ctx.rotate = function ctxRotate(angle) { | ||
| 5338 | destCtx.rotate(angle); | ||
| 5339 | this.__originalRotate(angle); | ||
| 5340 | }; | ||
| 5341 | ctx.clip = function ctxRotate(rule) { | ||
| 5342 | destCtx.clip(rule); | ||
| 5343 | this.__originalClip(rule); | ||
| 5344 | }; | ||
| 5345 | ctx.moveTo = function (x, y) { | ||
| 5346 | destCtx.moveTo(x, y); | ||
| 5347 | this.__originalMoveTo(x, y); | ||
| 5348 | }; | ||
| 5349 | ctx.lineTo = function (x, y) { | ||
| 5350 | destCtx.lineTo(x, y); | ||
| 5351 | this.__originalLineTo(x, y); | ||
| 5352 | }; | ||
| 5353 | ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { | ||
| 5354 | destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); | ||
| 5355 | this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); | ||
| 5356 | }; | ||
| 5357 | ctx.rect = function (x, y, width, height) { | ||
| 5358 | destCtx.rect(x, y, width, height); | ||
| 5359 | this.__originalRect(x, y, width, height); | ||
| 5360 | }; | ||
| 5361 | ctx.closePath = function () { | ||
| 5362 | destCtx.closePath(); | ||
| 5363 | this.__originalClosePath(); | ||
| 5364 | }; | ||
| 5365 | ctx.beginPath = function () { | ||
| 5366 | destCtx.beginPath(); | ||
| 5367 | this.__originalBeginPath(); | ||
| 5368 | }; | ||
| 5369 | } | ||
| 5370 | class CachedCanvases { | ||
| 5371 | constructor(canvasFactory) { | ||
| 5372 | this.canvasFactory = canvasFactory; | ||
| 5373 | this.cache = Object.create(null); | ||
| 5374 | } | ||
| 5375 | getCanvas(id, width, height) { | ||
| 5376 | let canvasEntry; | ||
| 5377 | if (this.cache[id] !== undefined) { | ||
| 5378 | canvasEntry = this.cache[id]; | ||
| 5379 | this.canvasFactory.reset(canvasEntry, width, height); | ||
| 5380 | } else { | ||
| 5381 | canvasEntry = this.canvasFactory.create(width, height); | ||
| 5382 | this.cache[id] = canvasEntry; | ||
| 5383 | } | ||
| 5384 | return canvasEntry; | ||
| 5385 | } | ||
| 5386 | delete(id) { | ||
| 5387 | delete this.cache[id]; | ||
| 5388 | } | ||
| 5389 | clear() { | ||
| 5390 | for (const id in this.cache) { | ||
| 5391 | const canvasEntry = this.cache[id]; | ||
| 5392 | this.canvasFactory.destroy(canvasEntry); | ||
| 5393 | delete this.cache[id]; | ||
| 5394 | } | ||
| 5395 | } | ||
| 5396 | } | ||
| 5397 | function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { | ||
| 5398 | const [a, b, c, d, tx, ty] = (0,display_utils.getCurrentTransform)(ctx); | ||
| 5399 | if (b === 0 && c === 0) { | ||
| 5400 | const tlX = destX * a + tx; | ||
| 5401 | const rTlX = Math.round(tlX); | ||
| 5402 | const tlY = destY * d + ty; | ||
| 5403 | const rTlY = Math.round(tlY); | ||
| 5404 | const brX = (destX + destW) * a + tx; | ||
| 5405 | const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; | ||
| 5406 | const brY = (destY + destH) * d + ty; | ||
| 5407 | const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; | ||
| 5408 | ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); | ||
| 5409 | ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); | ||
| 5410 | ctx.setTransform(a, b, c, d, tx, ty); | ||
| 5411 | return [rWidth, rHeight]; | ||
| 5412 | } | ||
| 5413 | if (a === 0 && d === 0) { | ||
| 5414 | const tlX = destY * c + tx; | ||
| 5415 | const rTlX = Math.round(tlX); | ||
| 5416 | const tlY = destX * b + ty; | ||
| 5417 | const rTlY = Math.round(tlY); | ||
| 5418 | const brX = (destY + destH) * c + tx; | ||
| 5419 | const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; | ||
| 5420 | const brY = (destX + destW) * b + ty; | ||
| 5421 | const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; | ||
| 5422 | ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); | ||
| 5423 | ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); | ||
| 5424 | ctx.setTransform(a, b, c, d, tx, ty); | ||
| 5425 | return [rHeight, rWidth]; | ||
| 5426 | } | ||
| 5427 | ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); | ||
| 5428 | const scaleX = Math.hypot(a, b); | ||
| 5429 | const scaleY = Math.hypot(c, d); | ||
| 5430 | return [scaleX * destW, scaleY * destH]; | ||
| 5431 | } | ||
| 5432 | function compileType3Glyph(imgData) { | ||
| 5433 | const { | ||
| 5434 | width, | ||
| 5435 | height | ||
| 5436 | } = imgData; | ||
| 5437 | if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { | ||
| 5438 | return null; | ||
| 5439 | } | ||
| 5440 | const POINT_TO_PROCESS_LIMIT = 1000; | ||
| 5441 | const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); | ||
| 5442 | const width1 = width + 1; | ||
| 5443 | let points = new Uint8Array(width1 * (height + 1)); | ||
| 5444 | let i, j, j0; | ||
| 5445 | const lineSize = width + 7 & ~7; | ||
| 5446 | let data = new Uint8Array(lineSize * height), | ||
| 5447 | pos = 0; | ||
| 5448 | for (const elem of imgData.data) { | ||
| 5449 | let mask = 128; | ||
| 5450 | while (mask > 0) { | ||
| 5451 | data[pos++] = elem & mask ? 0 : 255; | ||
| 5452 | mask >>= 1; | ||
| 5453 | } | ||
| 5454 | } | ||
| 5455 | let count = 0; | ||
| 5456 | pos = 0; | ||
| 5457 | if (data[pos] !== 0) { | ||
| 5458 | points[0] = 1; | ||
| 5459 | ++count; | ||
| 5460 | } | ||
| 5461 | for (j = 1; j < width; j++) { | ||
| 5462 | if (data[pos] !== data[pos + 1]) { | ||
| 5463 | points[j] = data[pos] ? 2 : 1; | ||
| 5464 | ++count; | ||
| 5465 | } | ||
| 5466 | pos++; | ||
| 5467 | } | ||
| 5468 | if (data[pos] !== 0) { | ||
| 5469 | points[j] = 2; | ||
| 5470 | ++count; | ||
| 5471 | } | ||
| 5472 | for (i = 1; i < height; i++) { | ||
| 5473 | pos = i * lineSize; | ||
| 5474 | j0 = i * width1; | ||
| 5475 | if (data[pos - lineSize] !== data[pos]) { | ||
| 5476 | points[j0] = data[pos] ? 1 : 8; | ||
| 5477 | ++count; | ||
| 5478 | } | ||
| 5479 | let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); | ||
| 5480 | for (j = 1; j < width; j++) { | ||
| 5481 | sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); | ||
| 5482 | if (POINT_TYPES[sum]) { | ||
| 5483 | points[j0 + j] = POINT_TYPES[sum]; | ||
| 5484 | ++count; | ||
| 5485 | } | ||
| 5486 | pos++; | ||
| 5487 | } | ||
| 5488 | if (data[pos - lineSize] !== data[pos]) { | ||
| 5489 | points[j0 + j] = data[pos] ? 2 : 4; | ||
| 5490 | ++count; | ||
| 5491 | } | ||
| 5492 | if (count > POINT_TO_PROCESS_LIMIT) { | ||
| 5493 | return null; | ||
| 5494 | } | ||
| 5495 | } | ||
| 5496 | pos = lineSize * (height - 1); | ||
| 5497 | j0 = i * width1; | ||
| 5498 | if (data[pos] !== 0) { | ||
| 5499 | points[j0] = 8; | ||
| 5500 | ++count; | ||
| 5501 | } | ||
| 5502 | for (j = 1; j < width; j++) { | ||
| 5503 | if (data[pos] !== data[pos + 1]) { | ||
| 5504 | points[j0 + j] = data[pos] ? 4 : 8; | ||
| 5505 | ++count; | ||
| 5506 | } | ||
| 5507 | pos++; | ||
| 5508 | } | ||
| 5509 | if (data[pos] !== 0) { | ||
| 5510 | points[j0 + j] = 4; | ||
| 5511 | ++count; | ||
| 5512 | } | ||
| 5513 | if (count > POINT_TO_PROCESS_LIMIT) { | ||
| 5514 | return null; | ||
| 5515 | } | ||
| 5516 | const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); | ||
| 5517 | const path = new Path2D(); | ||
| 5518 | for (i = 0; count && i <= height; i++) { | ||
| 5519 | let p = i * width1; | ||
| 5520 | const end = p + width; | ||
| 5521 | while (p < end && !points[p]) { | ||
| 5522 | p++; | ||
| 5523 | } | ||
| 5524 | if (p === end) { | ||
| 5525 | continue; | ||
| 5526 | } | ||
| 5527 | path.moveTo(p % width1, i); | ||
| 5528 | const p0 = p; | ||
| 5529 | let type = points[p]; | ||
| 5530 | do { | ||
| 5531 | const step = steps[type]; | ||
| 5532 | do { | ||
| 5533 | p += step; | ||
| 5534 | } while (!points[p]); | ||
| 5535 | const pp = points[p]; | ||
| 5536 | if (pp !== 5 && pp !== 10) { | ||
| 5537 | type = pp; | ||
| 5538 | points[p] = 0; | ||
| 5539 | } else { | ||
| 5540 | type = pp & 0x33 * type >> 4; | ||
| 5541 | points[p] &= type >> 2 | type << 2; | ||
| 5542 | } | ||
| 5543 | path.lineTo(p % width1, p / width1 | 0); | ||
| 5544 | if (!points[p]) { | ||
| 5545 | --count; | ||
| 5546 | } | ||
| 5547 | } while (p0 !== p); | ||
| 5548 | --i; | ||
| 5549 | } | ||
| 5550 | data = null; | ||
| 5551 | points = null; | ||
| 5552 | const drawOutline = function (c) { | ||
| 5553 | c.save(); | ||
| 5554 | c.scale(1 / width, -1 / height); | ||
| 5555 | c.translate(0, -height); | ||
| 5556 | c.fill(path); | ||
| 5557 | c.beginPath(); | ||
| 5558 | c.restore(); | ||
| 5559 | }; | ||
| 5560 | return drawOutline; | ||
| 5561 | } | ||
| 5562 | class CanvasExtraState { | ||
| 5563 | constructor(width, height) { | ||
| 5564 | this.alphaIsShape = false; | ||
| 5565 | this.fontSize = 0; | ||
| 5566 | this.fontSizeScale = 1; | ||
| 5567 | this.textMatrix = util.IDENTITY_MATRIX; | ||
| 5568 | this.textMatrixScale = 1; | ||
| 5569 | this.fontMatrix = util.FONT_IDENTITY_MATRIX; | ||
| 5570 | this.leading = 0; | ||
| 5571 | this.x = 0; | ||
| 5572 | this.y = 0; | ||
| 5573 | this.lineX = 0; | ||
| 5574 | this.lineY = 0; | ||
| 5575 | this.charSpacing = 0; | ||
| 5576 | this.wordSpacing = 0; | ||
| 5577 | this.textHScale = 1; | ||
| 5578 | this.textRenderingMode = util.TextRenderingMode.FILL; | ||
| 5579 | this.textRise = 0; | ||
| 5580 | this.fillColor = "#000000"; | ||
| 5581 | this.strokeColor = "#000000"; | ||
| 5582 | this.patternFill = false; | ||
| 5583 | this.fillAlpha = 1; | ||
| 5584 | this.strokeAlpha = 1; | ||
| 5585 | this.lineWidth = 1; | ||
| 5586 | this.activeSMask = null; | ||
| 5587 | this.transferMaps = "none"; | ||
| 5588 | this.startNewPathAndClipBox([0, 0, width, height]); | ||
| 5589 | } | ||
| 5590 | clone() { | ||
| 5591 | const clone = Object.create(this); | ||
| 5592 | clone.clipBox = this.clipBox.slice(); | ||
| 5593 | return clone; | ||
| 5594 | } | ||
| 5595 | setCurrentPoint(x, y) { | ||
| 5596 | this.x = x; | ||
| 5597 | this.y = y; | ||
| 5598 | } | ||
| 5599 | updatePathMinMax(transform, x, y) { | ||
| 5600 | [x, y] = util.Util.applyTransform([x, y], transform); | ||
| 5601 | this.minX = Math.min(this.minX, x); | ||
| 5602 | this.minY = Math.min(this.minY, y); | ||
| 5603 | this.maxX = Math.max(this.maxX, x); | ||
| 5604 | this.maxY = Math.max(this.maxY, y); | ||
| 5605 | } | ||
| 5606 | updateRectMinMax(transform, rect) { | ||
| 5607 | const p1 = util.Util.applyTransform(rect, transform); | ||
| 5608 | const p2 = util.Util.applyTransform(rect.slice(2), transform); | ||
| 5609 | const p3 = util.Util.applyTransform([rect[0], rect[3]], transform); | ||
| 5610 | const p4 = util.Util.applyTransform([rect[2], rect[1]], transform); | ||
| 5611 | this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); | ||
| 5612 | this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); | ||
| 5613 | this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); | ||
| 5614 | this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); | ||
| 5615 | } | ||
| 5616 | updateScalingPathMinMax(transform, minMax) { | ||
| 5617 | util.Util.scaleMinMax(transform, minMax); | ||
| 5618 | this.minX = Math.min(this.minX, minMax[0]); | ||
| 5619 | this.maxX = Math.max(this.maxX, minMax[1]); | ||
| 5620 | this.minY = Math.min(this.minY, minMax[2]); | ||
| 5621 | this.maxY = Math.max(this.maxY, minMax[3]); | ||
| 5622 | } | ||
| 5623 | updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { | ||
| 5624 | const box = util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); | ||
| 5625 | if (minMax) { | ||
| 5626 | minMax[0] = Math.min(minMax[0], box[0], box[2]); | ||
| 5627 | minMax[1] = Math.max(minMax[1], box[0], box[2]); | ||
| 5628 | minMax[2] = Math.min(minMax[2], box[1], box[3]); | ||
| 5629 | minMax[3] = Math.max(minMax[3], box[1], box[3]); | ||
| 5630 | return; | ||
| 5631 | } | ||
| 5632 | this.updateRectMinMax(transform, box); | ||
| 5633 | } | ||
| 5634 | getPathBoundingBox(pathType = PathType.FILL, transform = null) { | ||
| 5635 | const box = [this.minX, this.minY, this.maxX, this.maxY]; | ||
| 5636 | if (pathType === PathType.STROKE) { | ||
| 5637 | if (!transform) { | ||
| 5638 | (0,util.unreachable)("Stroke bounding box must include transform."); | ||
| 5639 | } | ||
| 5640 | const scale = util.Util.singularValueDecompose2dScale(transform); | ||
| 5641 | const xStrokePad = scale[0] * this.lineWidth / 2; | ||
| 5642 | const yStrokePad = scale[1] * this.lineWidth / 2; | ||
| 5643 | box[0] -= xStrokePad; | ||
| 5644 | box[1] -= yStrokePad; | ||
| 5645 | box[2] += xStrokePad; | ||
| 5646 | box[3] += yStrokePad; | ||
| 5647 | } | ||
| 5648 | return box; | ||
| 5649 | } | ||
| 5650 | updateClipFromPath() { | ||
| 5651 | const intersect = util.Util.intersect(this.clipBox, this.getPathBoundingBox()); | ||
| 5652 | this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); | ||
| 5653 | } | ||
| 5654 | isEmptyClip() { | ||
| 5655 | return this.minX === Infinity; | ||
| 5656 | } | ||
| 5657 | startNewPathAndClipBox(box) { | ||
| 5658 | this.clipBox = box; | ||
| 5659 | this.minX = Infinity; | ||
| 5660 | this.minY = Infinity; | ||
| 5661 | this.maxX = 0; | ||
| 5662 | this.maxY = 0; | ||
| 5663 | } | ||
| 5664 | getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { | ||
| 5665 | return util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); | ||
| 5666 | } | ||
| 5667 | } | ||
| 5668 | function putBinaryImageData(ctx, imgData) { | ||
| 5669 | if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { | ||
| 5670 | ctx.putImageData(imgData, 0, 0); | ||
| 5671 | return; | ||
| 5672 | } | ||
| 5673 | const height = imgData.height, | ||
| 5674 | width = imgData.width; | ||
| 5675 | const partialChunkHeight = height % FULL_CHUNK_HEIGHT; | ||
| 5676 | const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; | ||
| 5677 | const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; | ||
| 5678 | const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); | ||
| 5679 | let srcPos = 0, | ||
| 5680 | destPos; | ||
| 5681 | const src = imgData.data; | ||
| 5682 | const dest = chunkImgData.data; | ||
| 5683 | let i, j, thisChunkHeight, elemsInThisChunk; | ||
| 5684 | if (imgData.kind === util.ImageKind.GRAYSCALE_1BPP) { | ||
| 5685 | const srcLength = src.byteLength; | ||
| 5686 | const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); | ||
| 5687 | const dest32DataLength = dest32.length; | ||
| 5688 | const fullSrcDiff = width + 7 >> 3; | ||
| 5689 | const white = 0xffffffff; | ||
| 5690 | const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; | ||
| 5691 | for (i = 0; i < totalChunks; i++) { | ||
| 5692 | thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; | ||
| 5693 | destPos = 0; | ||
| 5694 | for (j = 0; j < thisChunkHeight; j++) { | ||
| 5695 | const srcDiff = srcLength - srcPos; | ||
| 5696 | let k = 0; | ||
| 5697 | const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; | ||
| 5698 | const kEndUnrolled = kEnd & ~7; | ||
| 5699 | let mask = 0; | ||
| 5700 | let srcByte = 0; | ||
| 5701 | for (; k < kEndUnrolled; k += 8) { | ||
| 5702 | srcByte = src[srcPos++]; | ||
| 5703 | dest32[destPos++] = srcByte & 128 ? white : black; | ||
| 5704 | dest32[destPos++] = srcByte & 64 ? white : black; | ||
| 5705 | dest32[destPos++] = srcByte & 32 ? white : black; | ||
| 5706 | dest32[destPos++] = srcByte & 16 ? white : black; | ||
| 5707 | dest32[destPos++] = srcByte & 8 ? white : black; | ||
| 5708 | dest32[destPos++] = srcByte & 4 ? white : black; | ||
| 5709 | dest32[destPos++] = srcByte & 2 ? white : black; | ||
| 5710 | dest32[destPos++] = srcByte & 1 ? white : black; | ||
| 5711 | } | ||
| 5712 | for (; k < kEnd; k++) { | ||
| 5713 | if (mask === 0) { | ||
| 5714 | srcByte = src[srcPos++]; | ||
| 5715 | mask = 128; | ||
| 5716 | } | ||
| 5717 | dest32[destPos++] = srcByte & mask ? white : black; | ||
| 5718 | mask >>= 1; | ||
| 5719 | } | ||
| 5720 | } | ||
| 5721 | while (destPos < dest32DataLength) { | ||
| 5722 | dest32[destPos++] = 0; | ||
| 5723 | } | ||
| 5724 | ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); | ||
| 5725 | } | ||
| 5726 | } else if (imgData.kind === util.ImageKind.RGBA_32BPP) { | ||
| 5727 | j = 0; | ||
| 5728 | elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; | ||
| 5729 | for (i = 0; i < fullChunks; i++) { | ||
| 5730 | dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); | ||
| 5731 | srcPos += elemsInThisChunk; | ||
| 5732 | ctx.putImageData(chunkImgData, 0, j); | ||
| 5733 | j += FULL_CHUNK_HEIGHT; | ||
| 5734 | } | ||
| 5735 | if (i < totalChunks) { | ||
| 5736 | elemsInThisChunk = width * partialChunkHeight * 4; | ||
| 5737 | dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); | ||
| 5738 | ctx.putImageData(chunkImgData, 0, j); | ||
| 5739 | } | ||
| 5740 | } else if (imgData.kind === util.ImageKind.RGB_24BPP) { | ||
| 5741 | thisChunkHeight = FULL_CHUNK_HEIGHT; | ||
| 5742 | elemsInThisChunk = width * thisChunkHeight; | ||
| 5743 | for (i = 0; i < totalChunks; i++) { | ||
| 5744 | if (i >= fullChunks) { | ||
| 5745 | thisChunkHeight = partialChunkHeight; | ||
| 5746 | elemsInThisChunk = width * thisChunkHeight; | ||
| 5747 | } | ||
| 5748 | destPos = 0; | ||
| 5749 | for (j = elemsInThisChunk; j--;) { | ||
| 5750 | dest[destPos++] = src[srcPos++]; | ||
| 5751 | dest[destPos++] = src[srcPos++]; | ||
| 5752 | dest[destPos++] = src[srcPos++]; | ||
| 5753 | dest[destPos++] = 255; | ||
| 5754 | } | ||
| 5755 | ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); | ||
| 5756 | } | ||
| 5757 | } else { | ||
| 5758 | throw new Error(`bad image kind: ${imgData.kind}`); | ||
| 5759 | } | ||
| 5760 | } | ||
| 5761 | function putBinaryImageMask(ctx, imgData) { | ||
| 5762 | if (imgData.bitmap) { | ||
| 5763 | ctx.drawImage(imgData.bitmap, 0, 0); | ||
| 5764 | return; | ||
| 5765 | } | ||
| 5766 | const height = imgData.height, | ||
| 5767 | width = imgData.width; | ||
| 5768 | const partialChunkHeight = height % FULL_CHUNK_HEIGHT; | ||
| 5769 | const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; | ||
| 5770 | const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; | ||
| 5771 | const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); | ||
| 5772 | let srcPos = 0; | ||
| 5773 | const src = imgData.data; | ||
| 5774 | const dest = chunkImgData.data; | ||
| 5775 | for (let i = 0; i < totalChunks; i++) { | ||
| 5776 | const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; | ||
| 5777 | ({ | ||
| 5778 | srcPos | ||
| 5779 | } = convertBlackAndWhiteToRGBA({ | ||
| 5780 | src, | ||
| 5781 | srcPos, | ||
| 5782 | dest, | ||
| 5783 | width, | ||
| 5784 | height: thisChunkHeight, | ||
| 5785 | nonBlackColor: 0 | ||
| 5786 | })); | ||
| 5787 | ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); | ||
| 5788 | } | ||
| 5789 | } | ||
| 5790 | function copyCtxState(sourceCtx, destCtx) { | ||
| 5791 | const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; | ||
| 5792 | for (const property of properties) { | ||
| 5793 | if (sourceCtx[property] !== undefined) { | ||
| 5794 | destCtx[property] = sourceCtx[property]; | ||
| 5795 | } | ||
| 5796 | } | ||
| 5797 | if (sourceCtx.setLineDash !== undefined) { | ||
| 5798 | destCtx.setLineDash(sourceCtx.getLineDash()); | ||
| 5799 | destCtx.lineDashOffset = sourceCtx.lineDashOffset; | ||
| 5800 | } | ||
| 5801 | } | ||
| 5802 | function resetCtxToDefault(ctx) { | ||
| 5803 | ctx.strokeStyle = ctx.fillStyle = "#000000"; | ||
| 5804 | ctx.fillRule = "nonzero"; | ||
| 5805 | ctx.globalAlpha = 1; | ||
| 5806 | ctx.lineWidth = 1; | ||
| 5807 | ctx.lineCap = "butt"; | ||
| 5808 | ctx.lineJoin = "miter"; | ||
| 5809 | ctx.miterLimit = 10; | ||
| 5810 | ctx.globalCompositeOperation = "source-over"; | ||
| 5811 | ctx.font = "10px sans-serif"; | ||
| 5812 | if (ctx.setLineDash !== undefined) { | ||
| 5813 | ctx.setLineDash([]); | ||
| 5814 | ctx.lineDashOffset = 0; | ||
| 5815 | } | ||
| 5816 | if (!util.isNodeJS) { | ||
| 5817 | const { | ||
| 5818 | filter | ||
| 5819 | } = ctx; | ||
| 5820 | if (filter !== "none" && filter !== "") { | ||
| 5821 | ctx.filter = "none"; | ||
| 5822 | } | ||
| 5823 | } | ||
| 5824 | } | ||
| 5825 | function composeSMaskBackdrop(bytes, r0, g0, b0) { | ||
| 5826 | const length = bytes.length; | ||
| 5827 | for (let i = 3; i < length; i += 4) { | ||
| 5828 | const alpha = bytes[i]; | ||
| 5829 | if (alpha === 0) { | ||
| 5830 | bytes[i - 3] = r0; | ||
| 5831 | bytes[i - 2] = g0; | ||
| 5832 | bytes[i - 1] = b0; | ||
| 5833 | } else if (alpha < 255) { | ||
| 5834 | const alpha_ = 255 - alpha; | ||
| 5835 | bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; | ||
| 5836 | bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; | ||
| 5837 | bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; | ||
| 5838 | } | ||
| 5839 | } | ||
| 5840 | } | ||
| 5841 | function composeSMaskAlpha(maskData, layerData, transferMap) { | ||
| 5842 | const length = maskData.length; | ||
| 5843 | const scale = 1 / 255; | ||
| 5844 | for (let i = 3; i < length; i += 4) { | ||
| 5845 | const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; | ||
| 5846 | layerData[i] = layerData[i] * alpha * scale | 0; | ||
| 5847 | } | ||
| 5848 | } | ||
| 5849 | function composeSMaskLuminosity(maskData, layerData, transferMap) { | ||
| 5850 | const length = maskData.length; | ||
| 5851 | for (let i = 3; i < length; i += 4) { | ||
| 5852 | const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; | ||
| 5853 | layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; | ||
| 5854 | } | ||
| 5855 | } | ||
| 5856 | function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { | ||
| 5857 | const hasBackdrop = !!backdrop; | ||
| 5858 | const r0 = hasBackdrop ? backdrop[0] : 0; | ||
| 5859 | const g0 = hasBackdrop ? backdrop[1] : 0; | ||
| 5860 | const b0 = hasBackdrop ? backdrop[2] : 0; | ||
| 5861 | const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; | ||
| 5862 | const PIXELS_TO_PROCESS = 1048576; | ||
| 5863 | const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); | ||
| 5864 | for (let row = 0; row < height; row += chunkSize) { | ||
| 5865 | const chunkHeight = Math.min(chunkSize, height - row); | ||
| 5866 | const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); | ||
| 5867 | const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); | ||
| 5868 | if (hasBackdrop) { | ||
| 5869 | composeSMaskBackdrop(maskData.data, r0, g0, b0); | ||
| 5870 | } | ||
| 5871 | composeFn(maskData.data, layerData.data, transferMap); | ||
| 5872 | layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); | ||
| 5873 | } | ||
| 5874 | } | ||
| 5875 | function composeSMask(ctx, smask, layerCtx, layerBox) { | ||
| 5876 | const layerOffsetX = layerBox[0]; | ||
| 5877 | const layerOffsetY = layerBox[1]; | ||
| 5878 | const layerWidth = layerBox[2] - layerOffsetX; | ||
| 5879 | const layerHeight = layerBox[3] - layerOffsetY; | ||
| 5880 | if (layerWidth === 0 || layerHeight === 0) { | ||
| 5881 | return; | ||
| 5882 | } | ||
| 5883 | genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); | ||
| 5884 | ctx.save(); | ||
| 5885 | ctx.globalAlpha = 1; | ||
| 5886 | ctx.globalCompositeOperation = "source-over"; | ||
| 5887 | ctx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 5888 | ctx.drawImage(layerCtx.canvas, 0, 0); | ||
| 5889 | ctx.restore(); | ||
| 5890 | } | ||
| 5891 | function getImageSmoothingEnabled(transform, interpolate) { | ||
| 5892 | const scale = util.Util.singularValueDecompose2dScale(transform); | ||
| 5893 | scale[0] = Math.fround(scale[0]); | ||
| 5894 | scale[1] = Math.fround(scale[1]); | ||
| 5895 | const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); | ||
| 5896 | if (interpolate !== undefined) { | ||
| 5897 | return interpolate; | ||
| 5898 | } else if (scale[0] <= actualScale || scale[1] <= actualScale) { | ||
| 5899 | return true; | ||
| 5900 | } | ||
| 5901 | return false; | ||
| 5902 | } | ||
| 5903 | const LINE_CAP_STYLES = ["butt", "round", "square"]; | ||
| 5904 | const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; | ||
| 5905 | const NORMAL_CLIP = {}; | ||
| 5906 | const EO_CLIP = {}; | ||
| 5907 | class CanvasGraphics { | ||
| 5908 | constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { | ||
| 5909 | optionalContentConfig, | ||
| 5910 | markedContentStack = null | ||
| 5911 | }, annotationCanvasMap, pageColors) { | ||
| 5912 | this.ctx = canvasCtx; | ||
| 5913 | this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); | ||
| 5914 | this.stateStack = []; | ||
| 5915 | this.pendingClip = null; | ||
| 5916 | this.pendingEOFill = false; | ||
| 5917 | this.res = null; | ||
| 5918 | this.xobjs = null; | ||
| 5919 | this.commonObjs = commonObjs; | ||
| 5920 | this.objs = objs; | ||
| 5921 | this.canvasFactory = canvasFactory; | ||
| 5922 | this.filterFactory = filterFactory; | ||
| 5923 | this.groupStack = []; | ||
| 5924 | this.processingType3 = null; | ||
| 5925 | this.baseTransform = null; | ||
| 5926 | this.baseTransformStack = []; | ||
| 5927 | this.groupLevel = 0; | ||
| 5928 | this.smaskStack = []; | ||
| 5929 | this.smaskCounter = 0; | ||
| 5930 | this.tempSMask = null; | ||
| 5931 | this.suspendedCtx = null; | ||
| 5932 | this.contentVisible = true; | ||
| 5933 | this.markedContentStack = markedContentStack || []; | ||
| 5934 | this.optionalContentConfig = optionalContentConfig; | ||
| 5935 | this.cachedCanvases = new CachedCanvases(this.canvasFactory); | ||
| 5936 | this.cachedPatterns = new Map(); | ||
| 5937 | this.annotationCanvasMap = annotationCanvasMap; | ||
| 5938 | this.viewportScale = 1; | ||
| 5939 | this.outputScaleX = 1; | ||
| 5940 | this.outputScaleY = 1; | ||
| 5941 | this.pageColors = pageColors; | ||
| 5942 | this._cachedScaleForStroking = [-1, 0]; | ||
| 5943 | this._cachedGetSinglePixelWidth = null; | ||
| 5944 | this._cachedBitmapsMap = new Map(); | ||
| 5945 | } | ||
| 5946 | getObject(data, fallback = null) { | ||
| 5947 | if (typeof data === "string") { | ||
| 5948 | return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); | ||
| 5949 | } | ||
| 5950 | return fallback; | ||
| 5951 | } | ||
| 5952 | beginDrawing({ | ||
| 5953 | transform, | ||
| 5954 | viewport, | ||
| 5955 | transparency = false, | ||
| 5956 | background = null | ||
| 5957 | }) { | ||
| 5958 | const width = this.ctx.canvas.width; | ||
| 5959 | const height = this.ctx.canvas.height; | ||
| 5960 | const savedFillStyle = this.ctx.fillStyle; | ||
| 5961 | this.ctx.fillStyle = background || "#ffffff"; | ||
| 5962 | this.ctx.fillRect(0, 0, width, height); | ||
| 5963 | this.ctx.fillStyle = savedFillStyle; | ||
| 5964 | if (transparency) { | ||
| 5965 | const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); | ||
| 5966 | this.compositeCtx = this.ctx; | ||
| 5967 | this.transparentCanvas = transparentCanvas.canvas; | ||
| 5968 | this.ctx = transparentCanvas.context; | ||
| 5969 | this.ctx.save(); | ||
| 5970 | this.ctx.transform(...(0,display_utils.getCurrentTransform)(this.compositeCtx)); | ||
| 5971 | } | ||
| 5972 | this.ctx.save(); | ||
| 5973 | resetCtxToDefault(this.ctx); | ||
| 5974 | if (transform) { | ||
| 5975 | this.ctx.transform(...transform); | ||
| 5976 | this.outputScaleX = transform[0]; | ||
| 5977 | this.outputScaleY = transform[0]; | ||
| 5978 | } | ||
| 5979 | this.ctx.transform(...viewport.transform); | ||
| 5980 | this.viewportScale = viewport.scale; | ||
| 5981 | this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); | ||
| 5982 | } | ||
| 5983 | executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { | ||
| 5984 | const argsArray = operatorList.argsArray; | ||
| 5985 | const fnArray = operatorList.fnArray; | ||
| 5986 | let i = executionStartIdx || 0; | ||
| 5987 | const argsArrayLen = argsArray.length; | ||
| 5988 | if (argsArrayLen === i) { | ||
| 5989 | return i; | ||
| 5990 | } | ||
| 5991 | const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; | ||
| 5992 | const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; | ||
| 5993 | let steps = 0; | ||
| 5994 | const commonObjs = this.commonObjs; | ||
| 5995 | const objs = this.objs; | ||
| 5996 | let fnId; | ||
| 5997 | while (true) { | ||
| 5998 | if (stepper !== undefined && i === stepper.nextBreakPoint) { | ||
| 5999 | stepper.breakIt(i, continueCallback); | ||
| 6000 | return i; | ||
| 6001 | } | ||
| 6002 | fnId = fnArray[i]; | ||
| 6003 | if (fnId !== util.OPS.dependency) { | ||
| 6004 | this[fnId].apply(this, argsArray[i]); | ||
| 6005 | } else { | ||
| 6006 | for (const depObjId of argsArray[i]) { | ||
| 6007 | const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; | ||
| 6008 | if (!objsPool.has(depObjId)) { | ||
| 6009 | objsPool.get(depObjId, continueCallback); | ||
| 6010 | return i; | ||
| 6011 | } | ||
| 6012 | } | ||
| 6013 | } | ||
| 6014 | i++; | ||
| 6015 | if (i === argsArrayLen) { | ||
| 6016 | return i; | ||
| 6017 | } | ||
| 6018 | if (chunkOperations && ++steps > EXECUTION_STEPS) { | ||
| 6019 | if (Date.now() > endTime) { | ||
| 6020 | continueCallback(); | ||
| 6021 | return i; | ||
| 6022 | } | ||
| 6023 | steps = 0; | ||
| 6024 | } | ||
| 6025 | } | ||
| 6026 | } | ||
| 6027 | #restoreInitialState() { | ||
| 6028 | while (this.stateStack.length || this.inSMaskMode) { | ||
| 6029 | this.restore(); | ||
| 6030 | } | ||
| 6031 | this.ctx.restore(); | ||
| 6032 | if (this.transparentCanvas) { | ||
| 6033 | this.ctx = this.compositeCtx; | ||
| 6034 | this.ctx.save(); | ||
| 6035 | this.ctx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 6036 | this.ctx.drawImage(this.transparentCanvas, 0, 0); | ||
| 6037 | this.ctx.restore(); | ||
| 6038 | this.transparentCanvas = null; | ||
| 6039 | } | ||
| 6040 | } | ||
| 6041 | endDrawing() { | ||
| 6042 | this.#restoreInitialState(); | ||
| 6043 | this.cachedCanvases.clear(); | ||
| 6044 | this.cachedPatterns.clear(); | ||
| 6045 | for (const cache of this._cachedBitmapsMap.values()) { | ||
| 6046 | for (const canvas of cache.values()) { | ||
| 6047 | if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { | ||
| 6048 | canvas.width = canvas.height = 0; | ||
| 6049 | } | ||
| 6050 | } | ||
| 6051 | cache.clear(); | ||
| 6052 | } | ||
| 6053 | this._cachedBitmapsMap.clear(); | ||
| 6054 | this.#drawFilter(); | ||
| 6055 | } | ||
| 6056 | #drawFilter() { | ||
| 6057 | if (this.pageColors) { | ||
| 6058 | const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); | ||
| 6059 | if (hcmFilterId !== "none") { | ||
| 6060 | const savedFilter = this.ctx.filter; | ||
| 6061 | this.ctx.filter = hcmFilterId; | ||
| 6062 | this.ctx.drawImage(this.ctx.canvas, 0, 0); | ||
| 6063 | this.ctx.filter = savedFilter; | ||
| 6064 | } | ||
| 6065 | } | ||
| 6066 | } | ||
| 6067 | _scaleImage(img, inverseTransform) { | ||
| 6068 | const width = img.width; | ||
| 6069 | const height = img.height; | ||
| 6070 | let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); | ||
| 6071 | let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); | ||
| 6072 | let paintWidth = width, | ||
| 6073 | paintHeight = height; | ||
| 6074 | let tmpCanvasId = "prescale1"; | ||
| 6075 | let tmpCanvas, tmpCtx; | ||
| 6076 | while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { | ||
| 6077 | let newWidth = paintWidth, | ||
| 6078 | newHeight = paintHeight; | ||
| 6079 | if (widthScale > 2 && paintWidth > 1) { | ||
| 6080 | newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); | ||
| 6081 | widthScale /= paintWidth / newWidth; | ||
| 6082 | } | ||
| 6083 | if (heightScale > 2 && paintHeight > 1) { | ||
| 6084 | newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; | ||
| 6085 | heightScale /= paintHeight / newHeight; | ||
| 6086 | } | ||
| 6087 | tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); | ||
| 6088 | tmpCtx = tmpCanvas.context; | ||
| 6089 | tmpCtx.clearRect(0, 0, newWidth, newHeight); | ||
| 6090 | tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); | ||
| 6091 | img = tmpCanvas.canvas; | ||
| 6092 | paintWidth = newWidth; | ||
| 6093 | paintHeight = newHeight; | ||
| 6094 | tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; | ||
| 6095 | } | ||
| 6096 | return { | ||
| 6097 | img, | ||
| 6098 | paintWidth, | ||
| 6099 | paintHeight | ||
| 6100 | }; | ||
| 6101 | } | ||
| 6102 | _createMaskCanvas(img) { | ||
| 6103 | const ctx = this.ctx; | ||
| 6104 | const { | ||
| 6105 | width, | ||
| 6106 | height | ||
| 6107 | } = img; | ||
| 6108 | const fillColor = this.current.fillColor; | ||
| 6109 | const isPatternFill = this.current.patternFill; | ||
| 6110 | const currentTransform = (0,display_utils.getCurrentTransform)(ctx); | ||
| 6111 | let cache, cacheKey, scaled, maskCanvas; | ||
| 6112 | if ((img.bitmap || img.data) && img.count > 1) { | ||
| 6113 | const mainKey = img.bitmap || img.data.buffer; | ||
| 6114 | cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); | ||
| 6115 | cache = this._cachedBitmapsMap.get(mainKey); | ||
| 6116 | if (!cache) { | ||
| 6117 | cache = new Map(); | ||
| 6118 | this._cachedBitmapsMap.set(mainKey, cache); | ||
| 6119 | } | ||
| 6120 | const cachedImage = cache.get(cacheKey); | ||
| 6121 | if (cachedImage && !isPatternFill) { | ||
| 6122 | const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); | ||
| 6123 | const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); | ||
| 6124 | return { | ||
| 6125 | canvas: cachedImage, | ||
| 6126 | offsetX, | ||
| 6127 | offsetY | ||
| 6128 | }; | ||
| 6129 | } | ||
| 6130 | scaled = cachedImage; | ||
| 6131 | } | ||
| 6132 | if (!scaled) { | ||
| 6133 | maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); | ||
| 6134 | putBinaryImageMask(maskCanvas.context, img); | ||
| 6135 | } | ||
| 6136 | let maskToCanvas = util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); | ||
| 6137 | maskToCanvas = util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); | ||
| 6138 | const [minX, minY, maxX, maxY] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); | ||
| 6139 | const drawnWidth = Math.round(maxX - minX) || 1; | ||
| 6140 | const drawnHeight = Math.round(maxY - minY) || 1; | ||
| 6141 | const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); | ||
| 6142 | const fillCtx = fillCanvas.context; | ||
| 6143 | const offsetX = minX; | ||
| 6144 | const offsetY = minY; | ||
| 6145 | fillCtx.translate(-offsetX, -offsetY); | ||
| 6146 | fillCtx.transform(...maskToCanvas); | ||
| 6147 | if (!scaled) { | ||
| 6148 | scaled = this._scaleImage(maskCanvas.canvas, (0,display_utils.getCurrentTransformInverse)(fillCtx)); | ||
| 6149 | scaled = scaled.img; | ||
| 6150 | if (cache && isPatternFill) { | ||
| 6151 | cache.set(cacheKey, scaled); | ||
| 6152 | } | ||
| 6153 | } | ||
| 6154 | fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(fillCtx), img.interpolate); | ||
| 6155 | drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); | ||
| 6156 | fillCtx.globalCompositeOperation = "source-in"; | ||
| 6157 | const inverse = util.Util.transform((0,display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); | ||
| 6158 | fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; | ||
| 6159 | fillCtx.fillRect(0, 0, width, height); | ||
| 6160 | if (cache && !isPatternFill) { | ||
| 6161 | this.cachedCanvases.delete("fillCanvas"); | ||
| 6162 | cache.set(cacheKey, fillCanvas.canvas); | ||
| 6163 | } | ||
| 6164 | return { | ||
| 6165 | canvas: fillCanvas.canvas, | ||
| 6166 | offsetX: Math.round(offsetX), | ||
| 6167 | offsetY: Math.round(offsetY) | ||
| 6168 | }; | ||
| 6169 | } | ||
| 6170 | setLineWidth(width) { | ||
| 6171 | if (width !== this.current.lineWidth) { | ||
| 6172 | this._cachedScaleForStroking[0] = -1; | ||
| 6173 | } | ||
| 6174 | this.current.lineWidth = width; | ||
| 6175 | this.ctx.lineWidth = width; | ||
| 6176 | } | ||
| 6177 | setLineCap(style) { | ||
| 6178 | this.ctx.lineCap = LINE_CAP_STYLES[style]; | ||
| 6179 | } | ||
| 6180 | setLineJoin(style) { | ||
| 6181 | this.ctx.lineJoin = LINE_JOIN_STYLES[style]; | ||
| 6182 | } | ||
| 6183 | setMiterLimit(limit) { | ||
| 6184 | this.ctx.miterLimit = limit; | ||
| 6185 | } | ||
| 6186 | setDash(dashArray, dashPhase) { | ||
| 6187 | const ctx = this.ctx; | ||
| 6188 | if (ctx.setLineDash !== undefined) { | ||
| 6189 | ctx.setLineDash(dashArray); | ||
| 6190 | ctx.lineDashOffset = dashPhase; | ||
| 6191 | } | ||
| 6192 | } | ||
| 6193 | setRenderingIntent(intent) {} | ||
| 6194 | setFlatness(flatness) {} | ||
| 6195 | setGState(states) { | ||
| 6196 | for (const [key, value] of states) { | ||
| 6197 | switch (key) { | ||
| 6198 | case "LW": | ||
| 6199 | this.setLineWidth(value); | ||
| 6200 | break; | ||
| 6201 | case "LC": | ||
| 6202 | this.setLineCap(value); | ||
| 6203 | break; | ||
| 6204 | case "LJ": | ||
| 6205 | this.setLineJoin(value); | ||
| 6206 | break; | ||
| 6207 | case "ML": | ||
| 6208 | this.setMiterLimit(value); | ||
| 6209 | break; | ||
| 6210 | case "D": | ||
| 6211 | this.setDash(value[0], value[1]); | ||
| 6212 | break; | ||
| 6213 | case "RI": | ||
| 6214 | this.setRenderingIntent(value); | ||
| 6215 | break; | ||
| 6216 | case "FL": | ||
| 6217 | this.setFlatness(value); | ||
| 6218 | break; | ||
| 6219 | case "Font": | ||
| 6220 | this.setFont(value[0], value[1]); | ||
| 6221 | break; | ||
| 6222 | case "CA": | ||
| 6223 | this.current.strokeAlpha = value; | ||
| 6224 | break; | ||
| 6225 | case "ca": | ||
| 6226 | this.current.fillAlpha = value; | ||
| 6227 | this.ctx.globalAlpha = value; | ||
| 6228 | break; | ||
| 6229 | case "BM": | ||
| 6230 | this.ctx.globalCompositeOperation = value; | ||
| 6231 | break; | ||
| 6232 | case "SMask": | ||
| 6233 | this.current.activeSMask = value ? this.tempSMask : null; | ||
| 6234 | this.tempSMask = null; | ||
| 6235 | this.checkSMaskState(); | ||
| 6236 | break; | ||
| 6237 | case "TR": | ||
| 6238 | this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); | ||
| 6239 | break; | ||
| 6240 | } | ||
| 6241 | } | ||
| 6242 | } | ||
| 6243 | get inSMaskMode() { | ||
| 6244 | return !!this.suspendedCtx; | ||
| 6245 | } | ||
| 6246 | checkSMaskState() { | ||
| 6247 | const inSMaskMode = this.inSMaskMode; | ||
| 6248 | if (this.current.activeSMask && !inSMaskMode) { | ||
| 6249 | this.beginSMaskMode(); | ||
| 6250 | } else if (!this.current.activeSMask && inSMaskMode) { | ||
| 6251 | this.endSMaskMode(); | ||
| 6252 | } | ||
| 6253 | } | ||
| 6254 | beginSMaskMode() { | ||
| 6255 | if (this.inSMaskMode) { | ||
| 6256 | throw new Error("beginSMaskMode called while already in smask mode"); | ||
| 6257 | } | ||
| 6258 | const drawnWidth = this.ctx.canvas.width; | ||
| 6259 | const drawnHeight = this.ctx.canvas.height; | ||
| 6260 | const cacheId = "smaskGroupAt" + this.groupLevel; | ||
| 6261 | const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); | ||
| 6262 | this.suspendedCtx = this.ctx; | ||
| 6263 | this.ctx = scratchCanvas.context; | ||
| 6264 | const ctx = this.ctx; | ||
| 6265 | ctx.setTransform(...(0,display_utils.getCurrentTransform)(this.suspendedCtx)); | ||
| 6266 | copyCtxState(this.suspendedCtx, ctx); | ||
| 6267 | mirrorContextOperations(ctx, this.suspendedCtx); | ||
| 6268 | this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); | ||
| 6269 | } | ||
| 6270 | endSMaskMode() { | ||
| 6271 | if (!this.inSMaskMode) { | ||
| 6272 | throw new Error("endSMaskMode called while not in smask mode"); | ||
| 6273 | } | ||
| 6274 | this.ctx._removeMirroring(); | ||
| 6275 | copyCtxState(this.ctx, this.suspendedCtx); | ||
| 6276 | this.ctx = this.suspendedCtx; | ||
| 6277 | this.suspendedCtx = null; | ||
| 6278 | } | ||
| 6279 | compose(dirtyBox) { | ||
| 6280 | if (!this.current.activeSMask) { | ||
| 6281 | return; | ||
| 6282 | } | ||
| 6283 | if (!dirtyBox) { | ||
| 6284 | dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; | ||
| 6285 | } else { | ||
| 6286 | dirtyBox[0] = Math.floor(dirtyBox[0]); | ||
| 6287 | dirtyBox[1] = Math.floor(dirtyBox[1]); | ||
| 6288 | dirtyBox[2] = Math.ceil(dirtyBox[2]); | ||
| 6289 | dirtyBox[3] = Math.ceil(dirtyBox[3]); | ||
| 6290 | } | ||
| 6291 | const smask = this.current.activeSMask; | ||
| 6292 | const suspendedCtx = this.suspendedCtx; | ||
| 6293 | composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); | ||
| 6294 | this.ctx.save(); | ||
| 6295 | this.ctx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 6296 | this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); | ||
| 6297 | this.ctx.restore(); | ||
| 6298 | } | ||
| 6299 | save() { | ||
| 6300 | if (this.inSMaskMode) { | ||
| 6301 | copyCtxState(this.ctx, this.suspendedCtx); | ||
| 6302 | this.suspendedCtx.save(); | ||
| 6303 | } else { | ||
| 6304 | this.ctx.save(); | ||
| 6305 | } | ||
| 6306 | const old = this.current; | ||
| 6307 | this.stateStack.push(old); | ||
| 6308 | this.current = old.clone(); | ||
| 6309 | } | ||
| 6310 | restore() { | ||
| 6311 | if (this.stateStack.length === 0 && this.inSMaskMode) { | ||
| 6312 | this.endSMaskMode(); | ||
| 6313 | } | ||
| 6314 | if (this.stateStack.length !== 0) { | ||
| 6315 | this.current = this.stateStack.pop(); | ||
| 6316 | if (this.inSMaskMode) { | ||
| 6317 | this.suspendedCtx.restore(); | ||
| 6318 | copyCtxState(this.suspendedCtx, this.ctx); | ||
| 6319 | } else { | ||
| 6320 | this.ctx.restore(); | ||
| 6321 | } | ||
| 6322 | this.checkSMaskState(); | ||
| 6323 | this.pendingClip = null; | ||
| 6324 | this._cachedScaleForStroking[0] = -1; | ||
| 6325 | this._cachedGetSinglePixelWidth = null; | ||
| 6326 | } | ||
| 6327 | } | ||
| 6328 | transform(a, b, c, d, e, f) { | ||
| 6329 | this.ctx.transform(a, b, c, d, e, f); | ||
| 6330 | this._cachedScaleForStroking[0] = -1; | ||
| 6331 | this._cachedGetSinglePixelWidth = null; | ||
| 6332 | } | ||
| 6333 | constructPath(ops, args, minMax) { | ||
| 6334 | const ctx = this.ctx; | ||
| 6335 | const current = this.current; | ||
| 6336 | let x = current.x, | ||
| 6337 | y = current.y; | ||
| 6338 | let startX, startY; | ||
| 6339 | const currentTransform = (0,display_utils.getCurrentTransform)(ctx); | ||
| 6340 | const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; | ||
| 6341 | const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; | ||
| 6342 | for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { | ||
| 6343 | switch (ops[i] | 0) { | ||
| 6344 | case util.OPS.rectangle: | ||
| 6345 | x = args[j++]; | ||
| 6346 | y = args[j++]; | ||
| 6347 | const width = args[j++]; | ||
| 6348 | const height = args[j++]; | ||
| 6349 | const xw = x + width; | ||
| 6350 | const yh = y + height; | ||
| 6351 | ctx.moveTo(x, y); | ||
| 6352 | if (width === 0 || height === 0) { | ||
| 6353 | ctx.lineTo(xw, yh); | ||
| 6354 | } else { | ||
| 6355 | ctx.lineTo(xw, y); | ||
| 6356 | ctx.lineTo(xw, yh); | ||
| 6357 | ctx.lineTo(x, yh); | ||
| 6358 | } | ||
| 6359 | if (!isScalingMatrix) { | ||
| 6360 | current.updateRectMinMax(currentTransform, [x, y, xw, yh]); | ||
| 6361 | } | ||
| 6362 | ctx.closePath(); | ||
| 6363 | break; | ||
| 6364 | case util.OPS.moveTo: | ||
| 6365 | x = args[j++]; | ||
| 6366 | y = args[j++]; | ||
| 6367 | ctx.moveTo(x, y); | ||
| 6368 | if (!isScalingMatrix) { | ||
| 6369 | current.updatePathMinMax(currentTransform, x, y); | ||
| 6370 | } | ||
| 6371 | break; | ||
| 6372 | case util.OPS.lineTo: | ||
| 6373 | x = args[j++]; | ||
| 6374 | y = args[j++]; | ||
| 6375 | ctx.lineTo(x, y); | ||
| 6376 | if (!isScalingMatrix) { | ||
| 6377 | current.updatePathMinMax(currentTransform, x, y); | ||
| 6378 | } | ||
| 6379 | break; | ||
| 6380 | case util.OPS.curveTo: | ||
| 6381 | startX = x; | ||
| 6382 | startY = y; | ||
| 6383 | x = args[j + 4]; | ||
| 6384 | y = args[j + 5]; | ||
| 6385 | ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); | ||
| 6386 | current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); | ||
| 6387 | j += 6; | ||
| 6388 | break; | ||
| 6389 | case util.OPS.curveTo2: | ||
| 6390 | startX = x; | ||
| 6391 | startY = y; | ||
| 6392 | ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); | ||
| 6393 | current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); | ||
| 6394 | x = args[j + 2]; | ||
| 6395 | y = args[j + 3]; | ||
| 6396 | j += 4; | ||
| 6397 | break; | ||
| 6398 | case util.OPS.curveTo3: | ||
| 6399 | startX = x; | ||
| 6400 | startY = y; | ||
| 6401 | x = args[j + 2]; | ||
| 6402 | y = args[j + 3]; | ||
| 6403 | ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); | ||
| 6404 | current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); | ||
| 6405 | j += 4; | ||
| 6406 | break; | ||
| 6407 | case util.OPS.closePath: | ||
| 6408 | ctx.closePath(); | ||
| 6409 | break; | ||
| 6410 | } | ||
| 6411 | } | ||
| 6412 | if (isScalingMatrix) { | ||
| 6413 | current.updateScalingPathMinMax(currentTransform, minMaxForBezier); | ||
| 6414 | } | ||
| 6415 | current.setCurrentPoint(x, y); | ||
| 6416 | } | ||
| 6417 | closePath() { | ||
| 6418 | this.ctx.closePath(); | ||
| 6419 | } | ||
| 6420 | stroke(consumePath = true) { | ||
| 6421 | const ctx = this.ctx; | ||
| 6422 | const strokeColor = this.current.strokeColor; | ||
| 6423 | ctx.globalAlpha = this.current.strokeAlpha; | ||
| 6424 | if (this.contentVisible) { | ||
| 6425 | if (typeof strokeColor === "object" && strokeColor?.getPattern) { | ||
| 6426 | ctx.save(); | ||
| 6427 | ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.STROKE); | ||
| 6428 | this.rescaleAndStroke(false); | ||
| 6429 | ctx.restore(); | ||
| 6430 | } else { | ||
| 6431 | this.rescaleAndStroke(true); | ||
| 6432 | } | ||
| 6433 | } | ||
| 6434 | if (consumePath) { | ||
| 6435 | this.consumePath(this.current.getClippedPathBoundingBox()); | ||
| 6436 | } | ||
| 6437 | ctx.globalAlpha = this.current.fillAlpha; | ||
| 6438 | } | ||
| 6439 | closeStroke() { | ||
| 6440 | this.closePath(); | ||
| 6441 | this.stroke(); | ||
| 6442 | } | ||
| 6443 | fill(consumePath = true) { | ||
| 6444 | const ctx = this.ctx; | ||
| 6445 | const fillColor = this.current.fillColor; | ||
| 6446 | const isPatternFill = this.current.patternFill; | ||
| 6447 | let needRestore = false; | ||
| 6448 | if (isPatternFill) { | ||
| 6449 | ctx.save(); | ||
| 6450 | ctx.fillStyle = fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); | ||
| 6451 | needRestore = true; | ||
| 6452 | } | ||
| 6453 | const intersect = this.current.getClippedPathBoundingBox(); | ||
| 6454 | if (this.contentVisible && intersect !== null) { | ||
| 6455 | if (this.pendingEOFill) { | ||
| 6456 | ctx.fill("evenodd"); | ||
| 6457 | this.pendingEOFill = false; | ||
| 6458 | } else { | ||
| 6459 | ctx.fill(); | ||
| 6460 | } | ||
| 6461 | } | ||
| 6462 | if (needRestore) { | ||
| 6463 | ctx.restore(); | ||
| 6464 | } | ||
| 6465 | if (consumePath) { | ||
| 6466 | this.consumePath(intersect); | ||
| 6467 | } | ||
| 6468 | } | ||
| 6469 | eoFill() { | ||
| 6470 | this.pendingEOFill = true; | ||
| 6471 | this.fill(); | ||
| 6472 | } | ||
| 6473 | fillStroke() { | ||
| 6474 | this.fill(false); | ||
| 6475 | this.stroke(false); | ||
| 6476 | this.consumePath(); | ||
| 6477 | } | ||
| 6478 | eoFillStroke() { | ||
| 6479 | this.pendingEOFill = true; | ||
| 6480 | this.fillStroke(); | ||
| 6481 | } | ||
| 6482 | closeFillStroke() { | ||
| 6483 | this.closePath(); | ||
| 6484 | this.fillStroke(); | ||
| 6485 | } | ||
| 6486 | closeEOFillStroke() { | ||
| 6487 | this.pendingEOFill = true; | ||
| 6488 | this.closePath(); | ||
| 6489 | this.fillStroke(); | ||
| 6490 | } | ||
| 6491 | endPath() { | ||
| 6492 | this.consumePath(); | ||
| 6493 | } | ||
| 6494 | clip() { | ||
| 6495 | this.pendingClip = NORMAL_CLIP; | ||
| 6496 | } | ||
| 6497 | eoClip() { | ||
| 6498 | this.pendingClip = EO_CLIP; | ||
| 6499 | } | ||
| 6500 | beginText() { | ||
| 6501 | this.current.textMatrix = util.IDENTITY_MATRIX; | ||
| 6502 | this.current.textMatrixScale = 1; | ||
| 6503 | this.current.x = this.current.lineX = 0; | ||
| 6504 | this.current.y = this.current.lineY = 0; | ||
| 6505 | } | ||
| 6506 | endText() { | ||
| 6507 | const paths = this.pendingTextPaths; | ||
| 6508 | const ctx = this.ctx; | ||
| 6509 | if (paths === undefined) { | ||
| 6510 | ctx.beginPath(); | ||
| 6511 | return; | ||
| 6512 | } | ||
| 6513 | ctx.save(); | ||
| 6514 | ctx.beginPath(); | ||
| 6515 | for (const path of paths) { | ||
| 6516 | ctx.setTransform(...path.transform); | ||
| 6517 | ctx.translate(path.x, path.y); | ||
| 6518 | path.addToPath(ctx, path.fontSize); | ||
| 6519 | } | ||
| 6520 | ctx.restore(); | ||
| 6521 | ctx.clip(); | ||
| 6522 | ctx.beginPath(); | ||
| 6523 | delete this.pendingTextPaths; | ||
| 6524 | } | ||
| 6525 | setCharSpacing(spacing) { | ||
| 6526 | this.current.charSpacing = spacing; | ||
| 6527 | } | ||
| 6528 | setWordSpacing(spacing) { | ||
| 6529 | this.current.wordSpacing = spacing; | ||
| 6530 | } | ||
| 6531 | setHScale(scale) { | ||
| 6532 | this.current.textHScale = scale / 100; | ||
| 6533 | } | ||
| 6534 | setLeading(leading) { | ||
| 6535 | this.current.leading = -leading; | ||
| 6536 | } | ||
| 6537 | setFont(fontRefName, size) { | ||
| 6538 | const fontObj = this.commonObjs.get(fontRefName); | ||
| 6539 | const current = this.current; | ||
| 6540 | if (!fontObj) { | ||
| 6541 | throw new Error(`Can't find font for ${fontRefName}`); | ||
| 6542 | } | ||
| 6543 | current.fontMatrix = fontObj.fontMatrix || util.FONT_IDENTITY_MATRIX; | ||
| 6544 | if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { | ||
| 6545 | (0,util.warn)("Invalid font matrix for font " + fontRefName); | ||
| 6546 | } | ||
| 6547 | if (size < 0) { | ||
| 6548 | size = -size; | ||
| 6549 | current.fontDirection = -1; | ||
| 6550 | } else { | ||
| 6551 | current.fontDirection = 1; | ||
| 6552 | } | ||
| 6553 | this.current.font = fontObj; | ||
| 6554 | this.current.fontSize = size; | ||
| 6555 | if (fontObj.isType3Font) { | ||
| 6556 | return; | ||
| 6557 | } | ||
| 6558 | const name = fontObj.loadedName || "sans-serif"; | ||
| 6559 | const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; | ||
| 6560 | let bold = "normal"; | ||
| 6561 | if (fontObj.black) { | ||
| 6562 | bold = "900"; | ||
| 6563 | } else if (fontObj.bold) { | ||
| 6564 | bold = "bold"; | ||
| 6565 | } | ||
| 6566 | const italic = fontObj.italic ? "italic" : "normal"; | ||
| 6567 | let browserFontSize = size; | ||
| 6568 | if (size < MIN_FONT_SIZE) { | ||
| 6569 | browserFontSize = MIN_FONT_SIZE; | ||
| 6570 | } else if (size > MAX_FONT_SIZE) { | ||
| 6571 | browserFontSize = MAX_FONT_SIZE; | ||
| 6572 | } | ||
| 6573 | this.current.fontSizeScale = size / browserFontSize; | ||
| 6574 | this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; | ||
| 6575 | } | ||
| 6576 | setTextRenderingMode(mode) { | ||
| 6577 | this.current.textRenderingMode = mode; | ||
| 6578 | } | ||
| 6579 | setTextRise(rise) { | ||
| 6580 | this.current.textRise = rise; | ||
| 6581 | } | ||
| 6582 | moveText(x, y) { | ||
| 6583 | this.current.x = this.current.lineX += x; | ||
| 6584 | this.current.y = this.current.lineY += y; | ||
| 6585 | } | ||
| 6586 | setLeadingMoveText(x, y) { | ||
| 6587 | this.setLeading(-y); | ||
| 6588 | this.moveText(x, y); | ||
| 6589 | } | ||
| 6590 | setTextMatrix(a, b, c, d, e, f) { | ||
| 6591 | this.current.textMatrix = [a, b, c, d, e, f]; | ||
| 6592 | this.current.textMatrixScale = Math.hypot(a, b); | ||
| 6593 | this.current.x = this.current.lineX = 0; | ||
| 6594 | this.current.y = this.current.lineY = 0; | ||
| 6595 | } | ||
| 6596 | nextLine() { | ||
| 6597 | this.moveText(0, this.current.leading); | ||
| 6598 | } | ||
| 6599 | paintChar(character, x, y, patternTransform) { | ||
| 6600 | const ctx = this.ctx; | ||
| 6601 | const current = this.current; | ||
| 6602 | const font = current.font; | ||
| 6603 | const textRenderingMode = current.textRenderingMode; | ||
| 6604 | const fontSize = current.fontSize / current.fontSizeScale; | ||
| 6605 | const fillStrokeMode = textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; | ||
| 6606 | const isAddToPathSet = !!(textRenderingMode & util.TextRenderingMode.ADD_TO_PATH_FLAG); | ||
| 6607 | const patternFill = current.patternFill && !font.missingFile; | ||
| 6608 | let addToPath; | ||
| 6609 | if (font.disableFontFace || isAddToPathSet || patternFill) { | ||
| 6610 | addToPath = font.getPathGenerator(this.commonObjs, character); | ||
| 6611 | } | ||
| 6612 | if (font.disableFontFace || patternFill) { | ||
| 6613 | ctx.save(); | ||
| 6614 | ctx.translate(x, y); | ||
| 6615 | ctx.beginPath(); | ||
| 6616 | addToPath(ctx, fontSize); | ||
| 6617 | if (patternTransform) { | ||
| 6618 | ctx.setTransform(...patternTransform); | ||
| 6619 | } | ||
| 6620 | if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { | ||
| 6621 | ctx.fill(); | ||
| 6622 | } | ||
| 6623 | if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { | ||
| 6624 | ctx.stroke(); | ||
| 6625 | } | ||
| 6626 | ctx.restore(); | ||
| 6627 | } else { | ||
| 6628 | if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { | ||
| 6629 | ctx.fillText(character, x, y); | ||
| 6630 | } | ||
| 6631 | if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { | ||
| 6632 | ctx.strokeText(character, x, y); | ||
| 6633 | } | ||
| 6634 | } | ||
| 6635 | if (isAddToPathSet) { | ||
| 6636 | const paths = this.pendingTextPaths ||= []; | ||
| 6637 | paths.push({ | ||
| 6638 | transform: (0,display_utils.getCurrentTransform)(ctx), | ||
| 6639 | x, | ||
| 6640 | y, | ||
| 6641 | fontSize, | ||
| 6642 | addToPath | ||
| 6643 | }); | ||
| 6644 | } | ||
| 6645 | } | ||
| 6646 | get isFontSubpixelAAEnabled() { | ||
| 6647 | const { | ||
| 6648 | context: ctx | ||
| 6649 | } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); | ||
| 6650 | ctx.scale(1.5, 1); | ||
| 6651 | ctx.fillText("I", 0, 10); | ||
| 6652 | const data = ctx.getImageData(0, 0, 10, 10).data; | ||
| 6653 | let enabled = false; | ||
| 6654 | for (let i = 3; i < data.length; i += 4) { | ||
| 6655 | if (data[i] > 0 && data[i] < 255) { | ||
| 6656 | enabled = true; | ||
| 6657 | break; | ||
| 6658 | } | ||
| 6659 | } | ||
| 6660 | return (0,util.shadow)(this, "isFontSubpixelAAEnabled", enabled); | ||
| 6661 | } | ||
| 6662 | showText(glyphs) { | ||
| 6663 | const current = this.current; | ||
| 6664 | const font = current.font; | ||
| 6665 | if (font.isType3Font) { | ||
| 6666 | return this.showType3Text(glyphs); | ||
| 6667 | } | ||
| 6668 | const fontSize = current.fontSize; | ||
| 6669 | if (fontSize === 0) { | ||
| 6670 | return undefined; | ||
| 6671 | } | ||
| 6672 | const ctx = this.ctx; | ||
| 6673 | const fontSizeScale = current.fontSizeScale; | ||
| 6674 | const charSpacing = current.charSpacing; | ||
| 6675 | const wordSpacing = current.wordSpacing; | ||
| 6676 | const fontDirection = current.fontDirection; | ||
| 6677 | const textHScale = current.textHScale * fontDirection; | ||
| 6678 | const glyphsLength = glyphs.length; | ||
| 6679 | const vertical = font.vertical; | ||
| 6680 | const spacingDir = vertical ? 1 : -1; | ||
| 6681 | const defaultVMetrics = font.defaultVMetrics; | ||
| 6682 | const widthAdvanceScale = fontSize * current.fontMatrix[0]; | ||
| 6683 | const simpleFillText = current.textRenderingMode === util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; | ||
| 6684 | ctx.save(); | ||
| 6685 | ctx.transform(...current.textMatrix); | ||
| 6686 | ctx.translate(current.x, current.y + current.textRise); | ||
| 6687 | if (fontDirection > 0) { | ||
| 6688 | ctx.scale(textHScale, -1); | ||
| 6689 | } else { | ||
| 6690 | ctx.scale(textHScale, 1); | ||
| 6691 | } | ||
| 6692 | let patternTransform; | ||
| 6693 | if (current.patternFill) { | ||
| 6694 | ctx.save(); | ||
| 6695 | const pattern = current.fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); | ||
| 6696 | patternTransform = (0,display_utils.getCurrentTransform)(ctx); | ||
| 6697 | ctx.restore(); | ||
| 6698 | ctx.fillStyle = pattern; | ||
| 6699 | } | ||
| 6700 | let lineWidth = current.lineWidth; | ||
| 6701 | const scale = current.textMatrixScale; | ||
| 6702 | if (scale === 0 || lineWidth === 0) { | ||
| 6703 | const fillStrokeMode = current.textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; | ||
| 6704 | if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { | ||
| 6705 | lineWidth = this.getSinglePixelWidth(); | ||
| 6706 | } | ||
| 6707 | } else { | ||
| 6708 | lineWidth /= scale; | ||
| 6709 | } | ||
| 6710 | if (fontSizeScale !== 1.0) { | ||
| 6711 | ctx.scale(fontSizeScale, fontSizeScale); | ||
| 6712 | lineWidth /= fontSizeScale; | ||
| 6713 | } | ||
| 6714 | ctx.lineWidth = lineWidth; | ||
| 6715 | if (font.isInvalidPDFjsFont) { | ||
| 6716 | const chars = []; | ||
| 6717 | let width = 0; | ||
| 6718 | for (const glyph of glyphs) { | ||
| 6719 | chars.push(glyph.unicode); | ||
| 6720 | width += glyph.width; | ||
| 6721 | } | ||
| 6722 | ctx.fillText(chars.join(""), 0, 0); | ||
| 6723 | current.x += width * widthAdvanceScale * textHScale; | ||
| 6724 | ctx.restore(); | ||
| 6725 | this.compose(); | ||
| 6726 | return undefined; | ||
| 6727 | } | ||
| 6728 | let x = 0, | ||
| 6729 | i; | ||
| 6730 | for (i = 0; i < glyphsLength; ++i) { | ||
| 6731 | const glyph = glyphs[i]; | ||
| 6732 | if (typeof glyph === "number") { | ||
| 6733 | x += spacingDir * glyph * fontSize / 1000; | ||
| 6734 | continue; | ||
| 6735 | } | ||
| 6736 | let restoreNeeded = false; | ||
| 6737 | const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; | ||
| 6738 | const character = glyph.fontChar; | ||
| 6739 | const accent = glyph.accent; | ||
| 6740 | let scaledX, scaledY; | ||
| 6741 | let width = glyph.width; | ||
| 6742 | if (vertical) { | ||
| 6743 | const vmetric = glyph.vmetric || defaultVMetrics; | ||
| 6744 | const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; | ||
| 6745 | const vy = vmetric[2] * widthAdvanceScale; | ||
| 6746 | width = vmetric ? -vmetric[0] : width; | ||
| 6747 | scaledX = vx / fontSizeScale; | ||
| 6748 | scaledY = (x + vy) / fontSizeScale; | ||
| 6749 | } else { | ||
| 6750 | scaledX = x / fontSizeScale; | ||
| 6751 | scaledY = 0; | ||
| 6752 | } | ||
| 6753 | if (font.remeasure && width > 0) { | ||
| 6754 | const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; | ||
| 6755 | if (width < measuredWidth && this.isFontSubpixelAAEnabled) { | ||
| 6756 | const characterScaleX = width / measuredWidth; | ||
| 6757 | restoreNeeded = true; | ||
| 6758 | ctx.save(); | ||
| 6759 | ctx.scale(characterScaleX, 1); | ||
| 6760 | scaledX /= characterScaleX; | ||
| 6761 | } else if (width !== measuredWidth) { | ||
| 6762 | scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; | ||
| 6763 | } | ||
| 6764 | } | ||
| 6765 | if (this.contentVisible && (glyph.isInFont || font.missingFile)) { | ||
| 6766 | if (simpleFillText && !accent) { | ||
| 6767 | ctx.fillText(character, scaledX, scaledY); | ||
| 6768 | } else { | ||
| 6769 | this.paintChar(character, scaledX, scaledY, patternTransform); | ||
| 6770 | if (accent) { | ||
| 6771 | const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; | ||
| 6772 | const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; | ||
| 6773 | this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); | ||
| 6774 | } | ||
| 6775 | } | ||
| 6776 | } | ||
| 6777 | const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; | ||
| 6778 | x += charWidth; | ||
| 6779 | if (restoreNeeded) { | ||
| 6780 | ctx.restore(); | ||
| 6781 | } | ||
| 6782 | } | ||
| 6783 | if (vertical) { | ||
| 6784 | current.y -= x; | ||
| 6785 | } else { | ||
| 6786 | current.x += x * textHScale; | ||
| 6787 | } | ||
| 6788 | ctx.restore(); | ||
| 6789 | this.compose(); | ||
| 6790 | return undefined; | ||
| 6791 | } | ||
| 6792 | showType3Text(glyphs) { | ||
| 6793 | const ctx = this.ctx; | ||
| 6794 | const current = this.current; | ||
| 6795 | const font = current.font; | ||
| 6796 | const fontSize = current.fontSize; | ||
| 6797 | const fontDirection = current.fontDirection; | ||
| 6798 | const spacingDir = font.vertical ? 1 : -1; | ||
| 6799 | const charSpacing = current.charSpacing; | ||
| 6800 | const wordSpacing = current.wordSpacing; | ||
| 6801 | const textHScale = current.textHScale * fontDirection; | ||
| 6802 | const fontMatrix = current.fontMatrix || util.FONT_IDENTITY_MATRIX; | ||
| 6803 | const glyphsLength = glyphs.length; | ||
| 6804 | const isTextInvisible = current.textRenderingMode === util.TextRenderingMode.INVISIBLE; | ||
| 6805 | let i, glyph, width, spacingLength; | ||
| 6806 | if (isTextInvisible || fontSize === 0) { | ||
| 6807 | return; | ||
| 6808 | } | ||
| 6809 | this._cachedScaleForStroking[0] = -1; | ||
| 6810 | this._cachedGetSinglePixelWidth = null; | ||
| 6811 | ctx.save(); | ||
| 6812 | ctx.transform(...current.textMatrix); | ||
| 6813 | ctx.translate(current.x, current.y); | ||
| 6814 | ctx.scale(textHScale, fontDirection); | ||
| 6815 | for (i = 0; i < glyphsLength; ++i) { | ||
| 6816 | glyph = glyphs[i]; | ||
| 6817 | if (typeof glyph === "number") { | ||
| 6818 | spacingLength = spacingDir * glyph * fontSize / 1000; | ||
| 6819 | this.ctx.translate(spacingLength, 0); | ||
| 6820 | current.x += spacingLength * textHScale; | ||
| 6821 | continue; | ||
| 6822 | } | ||
| 6823 | const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; | ||
| 6824 | const operatorList = font.charProcOperatorList[glyph.operatorListId]; | ||
| 6825 | if (!operatorList) { | ||
| 6826 | (0,util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); | ||
| 6827 | continue; | ||
| 6828 | } | ||
| 6829 | if (this.contentVisible) { | ||
| 6830 | this.processingType3 = glyph; | ||
| 6831 | this.save(); | ||
| 6832 | ctx.scale(fontSize, fontSize); | ||
| 6833 | ctx.transform(...fontMatrix); | ||
| 6834 | this.executeOperatorList(operatorList); | ||
| 6835 | this.restore(); | ||
| 6836 | } | ||
| 6837 | const transformed = util.Util.applyTransform([glyph.width, 0], fontMatrix); | ||
| 6838 | width = transformed[0] * fontSize + spacing; | ||
| 6839 | ctx.translate(width, 0); | ||
| 6840 | current.x += width * textHScale; | ||
| 6841 | } | ||
| 6842 | ctx.restore(); | ||
| 6843 | this.processingType3 = null; | ||
| 6844 | } | ||
| 6845 | setCharWidth(xWidth, yWidth) {} | ||
| 6846 | setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { | ||
| 6847 | this.ctx.rect(llx, lly, urx - llx, ury - lly); | ||
| 6848 | this.ctx.clip(); | ||
| 6849 | this.endPath(); | ||
| 6850 | } | ||
| 6851 | getColorN_Pattern(IR) { | ||
| 6852 | let pattern; | ||
| 6853 | if (IR[0] === "TilingPattern") { | ||
| 6854 | const color = IR[1]; | ||
| 6855 | const baseTransform = this.baseTransform || (0,display_utils.getCurrentTransform)(this.ctx); | ||
| 6856 | const canvasGraphicsFactory = { | ||
| 6857 | createCanvasGraphics: ctx => { | ||
| 6858 | return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { | ||
| 6859 | optionalContentConfig: this.optionalContentConfig, | ||
| 6860 | markedContentStack: this.markedContentStack | ||
| 6861 | }); | ||
| 6862 | } | ||
| 6863 | }; | ||
| 6864 | pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); | ||
| 6865 | } else { | ||
| 6866 | pattern = this._getPattern(IR[1], IR[2]); | ||
| 6867 | } | ||
| 6868 | return pattern; | ||
| 6869 | } | ||
| 6870 | setStrokeColorN() { | ||
| 6871 | this.current.strokeColor = this.getColorN_Pattern(arguments); | ||
| 6872 | } | ||
| 6873 | setFillColorN() { | ||
| 6874 | this.current.fillColor = this.getColorN_Pattern(arguments); | ||
| 6875 | this.current.patternFill = true; | ||
| 6876 | } | ||
| 6877 | setStrokeRGBColor(r, g, b) { | ||
| 6878 | const color = util.Util.makeHexColor(r, g, b); | ||
| 6879 | this.ctx.strokeStyle = color; | ||
| 6880 | this.current.strokeColor = color; | ||
| 6881 | } | ||
| 6882 | setFillRGBColor(r, g, b) { | ||
| 6883 | const color = util.Util.makeHexColor(r, g, b); | ||
| 6884 | this.ctx.fillStyle = color; | ||
| 6885 | this.current.fillColor = color; | ||
| 6886 | this.current.patternFill = false; | ||
| 6887 | } | ||
| 6888 | _getPattern(objId, matrix = null) { | ||
| 6889 | let pattern; | ||
| 6890 | if (this.cachedPatterns.has(objId)) { | ||
| 6891 | pattern = this.cachedPatterns.get(objId); | ||
| 6892 | } else { | ||
| 6893 | pattern = getShadingPattern(this.getObject(objId)); | ||
| 6894 | this.cachedPatterns.set(objId, pattern); | ||
| 6895 | } | ||
| 6896 | if (matrix) { | ||
| 6897 | pattern.matrix = matrix; | ||
| 6898 | } | ||
| 6899 | return pattern; | ||
| 6900 | } | ||
| 6901 | shadingFill(objId) { | ||
| 6902 | if (!this.contentVisible) { | ||
| 6903 | return; | ||
| 6904 | } | ||
| 6905 | const ctx = this.ctx; | ||
| 6906 | this.save(); | ||
| 6907 | const pattern = this._getPattern(objId); | ||
| 6908 | ctx.fillStyle = pattern.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.SHADING); | ||
| 6909 | const inv = (0,display_utils.getCurrentTransformInverse)(ctx); | ||
| 6910 | if (inv) { | ||
| 6911 | const { | ||
| 6912 | width, | ||
| 6913 | height | ||
| 6914 | } = ctx.canvas; | ||
| 6915 | const [x0, y0, x1, y1] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); | ||
| 6916 | this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); | ||
| 6917 | } else { | ||
| 6918 | this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); | ||
| 6919 | } | ||
| 6920 | this.compose(this.current.getClippedPathBoundingBox()); | ||
| 6921 | this.restore(); | ||
| 6922 | } | ||
| 6923 | beginInlineImage() { | ||
| 6924 | (0,util.unreachable)("Should not call beginInlineImage"); | ||
| 6925 | } | ||
| 6926 | beginImageData() { | ||
| 6927 | (0,util.unreachable)("Should not call beginImageData"); | ||
| 6928 | } | ||
| 6929 | paintFormXObjectBegin(matrix, bbox) { | ||
| 6930 | if (!this.contentVisible) { | ||
| 6931 | return; | ||
| 6932 | } | ||
| 6933 | this.save(); | ||
| 6934 | this.baseTransformStack.push(this.baseTransform); | ||
| 6935 | if (Array.isArray(matrix) && matrix.length === 6) { | ||
| 6936 | this.transform(...matrix); | ||
| 6937 | } | ||
| 6938 | this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); | ||
| 6939 | if (bbox) { | ||
| 6940 | const width = bbox[2] - bbox[0]; | ||
| 6941 | const height = bbox[3] - bbox[1]; | ||
| 6942 | this.ctx.rect(bbox[0], bbox[1], width, height); | ||
| 6943 | this.current.updateRectMinMax((0,display_utils.getCurrentTransform)(this.ctx), bbox); | ||
| 6944 | this.clip(); | ||
| 6945 | this.endPath(); | ||
| 6946 | } | ||
| 6947 | } | ||
| 6948 | paintFormXObjectEnd() { | ||
| 6949 | if (!this.contentVisible) { | ||
| 6950 | return; | ||
| 6951 | } | ||
| 6952 | this.restore(); | ||
| 6953 | this.baseTransform = this.baseTransformStack.pop(); | ||
| 6954 | } | ||
| 6955 | beginGroup(group) { | ||
| 6956 | if (!this.contentVisible) { | ||
| 6957 | return; | ||
| 6958 | } | ||
| 6959 | this.save(); | ||
| 6960 | if (this.inSMaskMode) { | ||
| 6961 | this.endSMaskMode(); | ||
| 6962 | this.current.activeSMask = null; | ||
| 6963 | } | ||
| 6964 | const currentCtx = this.ctx; | ||
| 6965 | if (!group.isolated) { | ||
| 6966 | (0,util.info)("TODO: Support non-isolated groups."); | ||
| 6967 | } | ||
| 6968 | if (group.knockout) { | ||
| 6969 | (0,util.warn)("Knockout groups not supported."); | ||
| 6970 | } | ||
| 6971 | const currentTransform = (0,display_utils.getCurrentTransform)(currentCtx); | ||
| 6972 | if (group.matrix) { | ||
| 6973 | currentCtx.transform(...group.matrix); | ||
| 6974 | } | ||
| 6975 | if (!group.bbox) { | ||
| 6976 | throw new Error("Bounding box is required."); | ||
| 6977 | } | ||
| 6978 | let bounds = util.Util.getAxialAlignedBoundingBox(group.bbox, (0,display_utils.getCurrentTransform)(currentCtx)); | ||
| 6979 | const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; | ||
| 6980 | bounds = util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; | ||
| 6981 | const offsetX = Math.floor(bounds[0]); | ||
| 6982 | const offsetY = Math.floor(bounds[1]); | ||
| 6983 | let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); | ||
| 6984 | let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); | ||
| 6985 | let scaleX = 1, | ||
| 6986 | scaleY = 1; | ||
| 6987 | if (drawnWidth > MAX_GROUP_SIZE) { | ||
| 6988 | scaleX = drawnWidth / MAX_GROUP_SIZE; | ||
| 6989 | drawnWidth = MAX_GROUP_SIZE; | ||
| 6990 | } | ||
| 6991 | if (drawnHeight > MAX_GROUP_SIZE) { | ||
| 6992 | scaleY = drawnHeight / MAX_GROUP_SIZE; | ||
| 6993 | drawnHeight = MAX_GROUP_SIZE; | ||
| 6994 | } | ||
| 6995 | this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); | ||
| 6996 | let cacheId = "groupAt" + this.groupLevel; | ||
| 6997 | if (group.smask) { | ||
| 6998 | cacheId += "_smask_" + this.smaskCounter++ % 2; | ||
| 6999 | } | ||
| 7000 | const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); | ||
| 7001 | const groupCtx = scratchCanvas.context; | ||
| 7002 | groupCtx.scale(1 / scaleX, 1 / scaleY); | ||
| 7003 | groupCtx.translate(-offsetX, -offsetY); | ||
| 7004 | groupCtx.transform(...currentTransform); | ||
| 7005 | if (group.smask) { | ||
| 7006 | this.smaskStack.push({ | ||
| 7007 | canvas: scratchCanvas.canvas, | ||
| 7008 | context: groupCtx, | ||
| 7009 | offsetX, | ||
| 7010 | offsetY, | ||
| 7011 | scaleX, | ||
| 7012 | scaleY, | ||
| 7013 | subtype: group.smask.subtype, | ||
| 7014 | backdrop: group.smask.backdrop, | ||
| 7015 | transferMap: group.smask.transferMap || null, | ||
| 7016 | startTransformInverse: null | ||
| 7017 | }); | ||
| 7018 | } else { | ||
| 7019 | currentCtx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 7020 | currentCtx.translate(offsetX, offsetY); | ||
| 7021 | currentCtx.scale(scaleX, scaleY); | ||
| 7022 | currentCtx.save(); | ||
| 7023 | } | ||
| 7024 | copyCtxState(currentCtx, groupCtx); | ||
| 7025 | this.ctx = groupCtx; | ||
| 7026 | this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); | ||
| 7027 | this.groupStack.push(currentCtx); | ||
| 7028 | this.groupLevel++; | ||
| 7029 | } | ||
| 7030 | endGroup(group) { | ||
| 7031 | if (!this.contentVisible) { | ||
| 7032 | return; | ||
| 7033 | } | ||
| 7034 | this.groupLevel--; | ||
| 7035 | const groupCtx = this.ctx; | ||
| 7036 | const ctx = this.groupStack.pop(); | ||
| 7037 | this.ctx = ctx; | ||
| 7038 | this.ctx.imageSmoothingEnabled = false; | ||
| 7039 | if (group.smask) { | ||
| 7040 | this.tempSMask = this.smaskStack.pop(); | ||
| 7041 | this.restore(); | ||
| 7042 | } else { | ||
| 7043 | this.ctx.restore(); | ||
| 7044 | const currentMtx = (0,display_utils.getCurrentTransform)(this.ctx); | ||
| 7045 | this.restore(); | ||
| 7046 | this.ctx.save(); | ||
| 7047 | this.ctx.setTransform(...currentMtx); | ||
| 7048 | const dirtyBox = util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); | ||
| 7049 | this.ctx.drawImage(groupCtx.canvas, 0, 0); | ||
| 7050 | this.ctx.restore(); | ||
| 7051 | this.compose(dirtyBox); | ||
| 7052 | } | ||
| 7053 | } | ||
| 7054 | beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { | ||
| 7055 | this.#restoreInitialState(); | ||
| 7056 | resetCtxToDefault(this.ctx); | ||
| 7057 | this.ctx.save(); | ||
| 7058 | this.save(); | ||
| 7059 | if (this.baseTransform) { | ||
| 7060 | this.ctx.setTransform(...this.baseTransform); | ||
| 7061 | } | ||
| 7062 | if (Array.isArray(rect) && rect.length === 4) { | ||
| 7063 | const width = rect[2] - rect[0]; | ||
| 7064 | const height = rect[3] - rect[1]; | ||
| 7065 | if (hasOwnCanvas && this.annotationCanvasMap) { | ||
| 7066 | transform = transform.slice(); | ||
| 7067 | transform[4] -= rect[0]; | ||
| 7068 | transform[5] -= rect[1]; | ||
| 7069 | rect = rect.slice(); | ||
| 7070 | rect[0] = rect[1] = 0; | ||
| 7071 | rect[2] = width; | ||
| 7072 | rect[3] = height; | ||
| 7073 | const [scaleX, scaleY] = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(this.ctx)); | ||
| 7074 | const { | ||
| 7075 | viewportScale | ||
| 7076 | } = this; | ||
| 7077 | const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); | ||
| 7078 | const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); | ||
| 7079 | this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); | ||
| 7080 | const { | ||
| 7081 | canvas, | ||
| 7082 | context | ||
| 7083 | } = this.annotationCanvas; | ||
| 7084 | this.annotationCanvasMap.set(id, canvas); | ||
| 7085 | this.annotationCanvas.savedCtx = this.ctx; | ||
| 7086 | this.ctx = context; | ||
| 7087 | this.ctx.save(); | ||
| 7088 | this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); | ||
| 7089 | resetCtxToDefault(this.ctx); | ||
| 7090 | } else { | ||
| 7091 | resetCtxToDefault(this.ctx); | ||
| 7092 | this.ctx.rect(rect[0], rect[1], width, height); | ||
| 7093 | this.ctx.clip(); | ||
| 7094 | this.endPath(); | ||
| 7095 | } | ||
| 7096 | } | ||
| 7097 | this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); | ||
| 7098 | this.transform(...transform); | ||
| 7099 | this.transform(...matrix); | ||
| 7100 | } | ||
| 7101 | endAnnotation() { | ||
| 7102 | if (this.annotationCanvas) { | ||
| 7103 | this.ctx.restore(); | ||
| 7104 | this.#drawFilter(); | ||
| 7105 | this.ctx = this.annotationCanvas.savedCtx; | ||
| 7106 | delete this.annotationCanvas.savedCtx; | ||
| 7107 | delete this.annotationCanvas; | ||
| 7108 | } | ||
| 7109 | } | ||
| 7110 | paintImageMaskXObject(img) { | ||
| 7111 | if (!this.contentVisible) { | ||
| 7112 | return; | ||
| 7113 | } | ||
| 7114 | const count = img.count; | ||
| 7115 | img = this.getObject(img.data, img); | ||
| 7116 | img.count = count; | ||
| 7117 | const ctx = this.ctx; | ||
| 7118 | const glyph = this.processingType3; | ||
| 7119 | if (glyph) { | ||
| 7120 | if (glyph.compiled === undefined) { | ||
| 7121 | glyph.compiled = compileType3Glyph(img); | ||
| 7122 | } | ||
| 7123 | if (glyph.compiled) { | ||
| 7124 | glyph.compiled(ctx); | ||
| 7125 | return; | ||
| 7126 | } | ||
| 7127 | } | ||
| 7128 | const mask = this._createMaskCanvas(img); | ||
| 7129 | const maskCanvas = mask.canvas; | ||
| 7130 | ctx.save(); | ||
| 7131 | ctx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 7132 | ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); | ||
| 7133 | ctx.restore(); | ||
| 7134 | this.compose(); | ||
| 7135 | } | ||
| 7136 | paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { | ||
| 7137 | if (!this.contentVisible) { | ||
| 7138 | return; | ||
| 7139 | } | ||
| 7140 | img = this.getObject(img.data, img); | ||
| 7141 | const ctx = this.ctx; | ||
| 7142 | ctx.save(); | ||
| 7143 | const currentTransform = (0,display_utils.getCurrentTransform)(ctx); | ||
| 7144 | ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); | ||
| 7145 | const mask = this._createMaskCanvas(img); | ||
| 7146 | ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); | ||
| 7147 | for (let i = 0, ii = positions.length; i < ii; i += 2) { | ||
| 7148 | const trans = util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); | ||
| 7149 | const [x, y] = util.Util.applyTransform([0, 0], trans); | ||
| 7150 | ctx.drawImage(mask.canvas, x, y); | ||
| 7151 | } | ||
| 7152 | ctx.restore(); | ||
| 7153 | this.compose(); | ||
| 7154 | } | ||
| 7155 | paintImageMaskXObjectGroup(images) { | ||
| 7156 | if (!this.contentVisible) { | ||
| 7157 | return; | ||
| 7158 | } | ||
| 7159 | const ctx = this.ctx; | ||
| 7160 | const fillColor = this.current.fillColor; | ||
| 7161 | const isPatternFill = this.current.patternFill; | ||
| 7162 | for (const image of images) { | ||
| 7163 | const { | ||
| 7164 | data, | ||
| 7165 | width, | ||
| 7166 | height, | ||
| 7167 | transform | ||
| 7168 | } = image; | ||
| 7169 | const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); | ||
| 7170 | const maskCtx = maskCanvas.context; | ||
| 7171 | maskCtx.save(); | ||
| 7172 | const img = this.getObject(data, image); | ||
| 7173 | putBinaryImageMask(maskCtx, img); | ||
| 7174 | maskCtx.globalCompositeOperation = "source-in"; | ||
| 7175 | maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL) : fillColor; | ||
| 7176 | maskCtx.fillRect(0, 0, width, height); | ||
| 7177 | maskCtx.restore(); | ||
| 7178 | ctx.save(); | ||
| 7179 | ctx.transform(...transform); | ||
| 7180 | ctx.scale(1, -1); | ||
| 7181 | drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); | ||
| 7182 | ctx.restore(); | ||
| 7183 | } | ||
| 7184 | this.compose(); | ||
| 7185 | } | ||
| 7186 | paintImageXObject(objId) { | ||
| 7187 | if (!this.contentVisible) { | ||
| 7188 | return; | ||
| 7189 | } | ||
| 7190 | const imgData = this.getObject(objId); | ||
| 7191 | if (!imgData) { | ||
| 7192 | (0,util.warn)("Dependent image isn't ready yet"); | ||
| 7193 | return; | ||
| 7194 | } | ||
| 7195 | this.paintInlineImageXObject(imgData); | ||
| 7196 | } | ||
| 7197 | paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { | ||
| 7198 | if (!this.contentVisible) { | ||
| 7199 | return; | ||
| 7200 | } | ||
| 7201 | const imgData = this.getObject(objId); | ||
| 7202 | if (!imgData) { | ||
| 7203 | (0,util.warn)("Dependent image isn't ready yet"); | ||
| 7204 | return; | ||
| 7205 | } | ||
| 7206 | const width = imgData.width; | ||
| 7207 | const height = imgData.height; | ||
| 7208 | const map = []; | ||
| 7209 | for (let i = 0, ii = positions.length; i < ii; i += 2) { | ||
| 7210 | map.push({ | ||
| 7211 | transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], | ||
| 7212 | x: 0, | ||
| 7213 | y: 0, | ||
| 7214 | w: width, | ||
| 7215 | h: height | ||
| 7216 | }); | ||
| 7217 | } | ||
| 7218 | this.paintInlineImageXObjectGroup(imgData, map); | ||
| 7219 | } | ||
| 7220 | applyTransferMapsToCanvas(ctx) { | ||
| 7221 | if (this.current.transferMaps !== "none") { | ||
| 7222 | ctx.filter = this.current.transferMaps; | ||
| 7223 | ctx.drawImage(ctx.canvas, 0, 0); | ||
| 7224 | ctx.filter = "none"; | ||
| 7225 | } | ||
| 7226 | return ctx.canvas; | ||
| 7227 | } | ||
| 7228 | applyTransferMapsToBitmap(imgData) { | ||
| 7229 | if (this.current.transferMaps === "none") { | ||
| 7230 | return imgData.bitmap; | ||
| 7231 | } | ||
| 7232 | const { | ||
| 7233 | bitmap, | ||
| 7234 | width, | ||
| 7235 | height | ||
| 7236 | } = imgData; | ||
| 7237 | const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); | ||
| 7238 | const tmpCtx = tmpCanvas.context; | ||
| 7239 | tmpCtx.filter = this.current.transferMaps; | ||
| 7240 | tmpCtx.drawImage(bitmap, 0, 0); | ||
| 7241 | tmpCtx.filter = "none"; | ||
| 7242 | return tmpCanvas.canvas; | ||
| 7243 | } | ||
| 7244 | paintInlineImageXObject(imgData) { | ||
| 7245 | if (!this.contentVisible) { | ||
| 7246 | return; | ||
| 7247 | } | ||
| 7248 | const width = imgData.width; | ||
| 7249 | const height = imgData.height; | ||
| 7250 | const ctx = this.ctx; | ||
| 7251 | this.save(); | ||
| 7252 | if (!util.isNodeJS) { | ||
| 7253 | const { | ||
| 7254 | filter | ||
| 7255 | } = ctx; | ||
| 7256 | if (filter !== "none" && filter !== "") { | ||
| 7257 | ctx.filter = "none"; | ||
| 7258 | } | ||
| 7259 | } | ||
| 7260 | ctx.scale(1 / width, -1 / height); | ||
| 7261 | let imgToPaint; | ||
| 7262 | if (imgData.bitmap) { | ||
| 7263 | imgToPaint = this.applyTransferMapsToBitmap(imgData); | ||
| 7264 | } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { | ||
| 7265 | imgToPaint = imgData; | ||
| 7266 | } else { | ||
| 7267 | const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); | ||
| 7268 | const tmpCtx = tmpCanvas.context; | ||
| 7269 | putBinaryImageData(tmpCtx, imgData); | ||
| 7270 | imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); | ||
| 7271 | } | ||
| 7272 | const scaled = this._scaleImage(imgToPaint, (0,display_utils.getCurrentTransformInverse)(ctx)); | ||
| 7273 | ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(ctx), imgData.interpolate); | ||
| 7274 | drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); | ||
| 7275 | this.compose(); | ||
| 7276 | this.restore(); | ||
| 7277 | } | ||
| 7278 | paintInlineImageXObjectGroup(imgData, map) { | ||
| 7279 | if (!this.contentVisible) { | ||
| 7280 | return; | ||
| 7281 | } | ||
| 7282 | const ctx = this.ctx; | ||
| 7283 | let imgToPaint; | ||
| 7284 | if (imgData.bitmap) { | ||
| 7285 | imgToPaint = imgData.bitmap; | ||
| 7286 | } else { | ||
| 7287 | const w = imgData.width; | ||
| 7288 | const h = imgData.height; | ||
| 7289 | const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); | ||
| 7290 | const tmpCtx = tmpCanvas.context; | ||
| 7291 | putBinaryImageData(tmpCtx, imgData); | ||
| 7292 | imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); | ||
| 7293 | } | ||
| 7294 | for (const entry of map) { | ||
| 7295 | ctx.save(); | ||
| 7296 | ctx.transform(...entry.transform); | ||
| 7297 | ctx.scale(1, -1); | ||
| 7298 | drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); | ||
| 7299 | ctx.restore(); | ||
| 7300 | } | ||
| 7301 | this.compose(); | ||
| 7302 | } | ||
| 7303 | paintSolidColorImageMask() { | ||
| 7304 | if (!this.contentVisible) { | ||
| 7305 | return; | ||
| 7306 | } | ||
| 7307 | this.ctx.fillRect(0, 0, 1, 1); | ||
| 7308 | this.compose(); | ||
| 7309 | } | ||
| 7310 | markPoint(tag) {} | ||
| 7311 | markPointProps(tag, properties) {} | ||
| 7312 | beginMarkedContent(tag) { | ||
| 7313 | this.markedContentStack.push({ | ||
| 7314 | visible: true | ||
| 7315 | }); | ||
| 7316 | } | ||
| 7317 | beginMarkedContentProps(tag, properties) { | ||
| 7318 | if (tag === "OC") { | ||
| 7319 | this.markedContentStack.push({ | ||
| 7320 | visible: this.optionalContentConfig.isVisible(properties) | ||
| 7321 | }); | ||
| 7322 | } else { | ||
| 7323 | this.markedContentStack.push({ | ||
| 7324 | visible: true | ||
| 7325 | }); | ||
| 7326 | } | ||
| 7327 | this.contentVisible = this.isContentVisible(); | ||
| 7328 | } | ||
| 7329 | endMarkedContent() { | ||
| 7330 | this.markedContentStack.pop(); | ||
| 7331 | this.contentVisible = this.isContentVisible(); | ||
| 7332 | } | ||
| 7333 | beginCompat() {} | ||
| 7334 | endCompat() {} | ||
| 7335 | consumePath(clipBox) { | ||
| 7336 | const isEmpty = this.current.isEmptyClip(); | ||
| 7337 | if (this.pendingClip) { | ||
| 7338 | this.current.updateClipFromPath(); | ||
| 7339 | } | ||
| 7340 | if (!this.pendingClip) { | ||
| 7341 | this.compose(clipBox); | ||
| 7342 | } | ||
| 7343 | const ctx = this.ctx; | ||
| 7344 | if (this.pendingClip) { | ||
| 7345 | if (!isEmpty) { | ||
| 7346 | if (this.pendingClip === EO_CLIP) { | ||
| 7347 | ctx.clip("evenodd"); | ||
| 7348 | } else { | ||
| 7349 | ctx.clip(); | ||
| 7350 | } | ||
| 7351 | } | ||
| 7352 | this.pendingClip = null; | ||
| 7353 | } | ||
| 7354 | this.current.startNewPathAndClipBox(this.current.clipBox); | ||
| 7355 | ctx.beginPath(); | ||
| 7356 | } | ||
| 7357 | getSinglePixelWidth() { | ||
| 7358 | if (!this._cachedGetSinglePixelWidth) { | ||
| 7359 | const m = (0,display_utils.getCurrentTransform)(this.ctx); | ||
| 7360 | if (m[1] === 0 && m[2] === 0) { | ||
| 7361 | this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); | ||
| 7362 | } else { | ||
| 7363 | const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); | ||
| 7364 | const normX = Math.hypot(m[0], m[2]); | ||
| 7365 | const normY = Math.hypot(m[1], m[3]); | ||
| 7366 | this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; | ||
| 7367 | } | ||
| 7368 | } | ||
| 7369 | return this._cachedGetSinglePixelWidth; | ||
| 7370 | } | ||
| 7371 | getScaleForStroking() { | ||
| 7372 | if (this._cachedScaleForStroking[0] === -1) { | ||
| 7373 | const { | ||
| 7374 | lineWidth | ||
| 7375 | } = this.current; | ||
| 7376 | const { | ||
| 7377 | a, | ||
| 7378 | b, | ||
| 7379 | c, | ||
| 7380 | d | ||
| 7381 | } = this.ctx.getTransform(); | ||
| 7382 | let scaleX, scaleY; | ||
| 7383 | if (b === 0 && c === 0) { | ||
| 7384 | const normX = Math.abs(a); | ||
| 7385 | const normY = Math.abs(d); | ||
| 7386 | if (normX === normY) { | ||
| 7387 | if (lineWidth === 0) { | ||
| 7388 | scaleX = scaleY = 1 / normX; | ||
| 7389 | } else { | ||
| 7390 | const scaledLineWidth = normX * lineWidth; | ||
| 7391 | scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; | ||
| 7392 | } | ||
| 7393 | } else if (lineWidth === 0) { | ||
| 7394 | scaleX = 1 / normX; | ||
| 7395 | scaleY = 1 / normY; | ||
| 7396 | } else { | ||
| 7397 | const scaledXLineWidth = normX * lineWidth; | ||
| 7398 | const scaledYLineWidth = normY * lineWidth; | ||
| 7399 | scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; | ||
| 7400 | scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; | ||
| 7401 | } | ||
| 7402 | } else { | ||
| 7403 | const absDet = Math.abs(a * d - b * c); | ||
| 7404 | const normX = Math.hypot(a, b); | ||
| 7405 | const normY = Math.hypot(c, d); | ||
| 7406 | if (lineWidth === 0) { | ||
| 7407 | scaleX = normY / absDet; | ||
| 7408 | scaleY = normX / absDet; | ||
| 7409 | } else { | ||
| 7410 | const baseArea = lineWidth * absDet; | ||
| 7411 | scaleX = normY > baseArea ? normY / baseArea : 1; | ||
| 7412 | scaleY = normX > baseArea ? normX / baseArea : 1; | ||
| 7413 | } | ||
| 7414 | } | ||
| 7415 | this._cachedScaleForStroking[0] = scaleX; | ||
| 7416 | this._cachedScaleForStroking[1] = scaleY; | ||
| 7417 | } | ||
| 7418 | return this._cachedScaleForStroking; | ||
| 7419 | } | ||
| 7420 | rescaleAndStroke(saveRestore) { | ||
| 7421 | const { | ||
| 7422 | ctx | ||
| 7423 | } = this; | ||
| 7424 | const { | ||
| 7425 | lineWidth | ||
| 7426 | } = this.current; | ||
| 7427 | const [scaleX, scaleY] = this.getScaleForStroking(); | ||
| 7428 | ctx.lineWidth = lineWidth || 1; | ||
| 7429 | if (scaleX === 1 && scaleY === 1) { | ||
| 7430 | ctx.stroke(); | ||
| 7431 | return; | ||
| 7432 | } | ||
| 7433 | const dashes = ctx.getLineDash(); | ||
| 7434 | if (saveRestore) { | ||
| 7435 | ctx.save(); | ||
| 7436 | } | ||
| 7437 | ctx.scale(scaleX, scaleY); | ||
| 7438 | if (dashes.length > 0) { | ||
| 7439 | const scale = Math.max(scaleX, scaleY); | ||
| 7440 | ctx.setLineDash(dashes.map(x => x / scale)); | ||
| 7441 | ctx.lineDashOffset /= scale; | ||
| 7442 | } | ||
| 7443 | ctx.stroke(); | ||
| 7444 | if (saveRestore) { | ||
| 7445 | ctx.restore(); | ||
| 7446 | } | ||
| 7447 | } | ||
| 7448 | isContentVisible() { | ||
| 7449 | for (let i = this.markedContentStack.length - 1; i >= 0; i--) { | ||
| 7450 | if (!this.markedContentStack[i].visible) { | ||
| 7451 | return false; | ||
| 7452 | } | ||
| 7453 | } | ||
| 7454 | return true; | ||
| 7455 | } | ||
| 7456 | } | ||
| 7457 | for (const op in util.OPS) { | ||
| 7458 | if (CanvasGraphics.prototype[op] !== undefined) { | ||
| 7459 | CanvasGraphics.prototype[util.OPS[op]] = CanvasGraphics.prototype[op]; | ||
| 7460 | } | ||
| 7461 | } | ||
| 7462 | |||
| 7463 | |||
| 7464 | /***/ }), | ||
| 7465 | |||
| 7466 | /***/ 473: | ||
| 7467 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 7468 | |||
| 7469 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { | ||
| 7470 | /* harmony export */ DOMCMapReaderFactory: () => (/* binding */ DOMCMapReaderFactory), | ||
| 7471 | /* harmony export */ DOMCanvasFactory: () => (/* binding */ DOMCanvasFactory), | ||
| 7472 | /* harmony export */ DOMFilterFactory: () => (/* binding */ DOMFilterFactory), | ||
| 7473 | /* harmony export */ DOMSVGFactory: () => (/* binding */ DOMSVGFactory), | ||
| 7474 | /* harmony export */ DOMStandardFontDataFactory: () => (/* binding */ DOMStandardFontDataFactory), | ||
| 7475 | /* harmony export */ PDFDateString: () => (/* binding */ PDFDateString), | ||
| 7476 | /* harmony export */ PageViewport: () => (/* binding */ PageViewport), | ||
| 7477 | /* harmony export */ PixelsPerInch: () => (/* binding */ PixelsPerInch), | ||
| 7478 | /* harmony export */ RenderingCancelledException: () => (/* binding */ RenderingCancelledException), | ||
| 7479 | /* harmony export */ StatTimer: () => (/* binding */ StatTimer), | ||
| 7480 | /* harmony export */ fetchData: () => (/* binding */ fetchData), | ||
| 7481 | /* harmony export */ getColorValues: () => (/* binding */ getColorValues), | ||
| 7482 | /* harmony export */ getCurrentTransform: () => (/* binding */ getCurrentTransform), | ||
| 7483 | /* harmony export */ getCurrentTransformInverse: () => (/* binding */ getCurrentTransformInverse), | ||
| 7484 | /* harmony export */ getFilenameFromUrl: () => (/* binding */ getFilenameFromUrl), | ||
| 7485 | /* harmony export */ getPdfFilenameFromUrl: () => (/* binding */ getPdfFilenameFromUrl), | ||
| 7486 | /* harmony export */ getRGB: () => (/* binding */ getRGB), | ||
| 7487 | /* harmony export */ getXfaPageViewport: () => (/* binding */ getXfaPageViewport), | ||
| 7488 | /* harmony export */ isDataScheme: () => (/* binding */ isDataScheme), | ||
| 7489 | /* harmony export */ isPdfFile: () => (/* binding */ isPdfFile), | ||
| 7490 | /* harmony export */ isValidFetchUrl: () => (/* binding */ isValidFetchUrl), | ||
| 7491 | /* harmony export */ noContextMenu: () => (/* binding */ noContextMenu), | ||
| 7492 | /* harmony export */ setLayerDimensions: () => (/* binding */ setLayerDimensions) | ||
| 7493 | /* harmony export */ }); | ||
| 7494 | /* unused harmony export deprecated */ | ||
| 7495 | /* harmony import */ var _base_factory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(822); | ||
| 7496 | /* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); | ||
| 7497 | |||
| 7498 | |||
| 7499 | const SVG_NS = "http://www.w3.org/2000/svg"; | ||
| 7500 | class PixelsPerInch { | ||
| 7501 | static CSS = 96.0; | ||
| 7502 | static PDF = 72.0; | ||
| 7503 | static PDF_TO_CSS_UNITS = this.CSS / this.PDF; | ||
| 7504 | } | ||
| 7505 | class DOMFilterFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseFilterFactory { | ||
| 7506 | #_cache; | ||
| 7507 | #_defs; | ||
| 7508 | #docId; | ||
| 7509 | #document; | ||
| 7510 | #hcmFilter; | ||
| 7511 | #hcmKey; | ||
| 7512 | #hcmUrl; | ||
| 7513 | #hcmHighlightFilter; | ||
| 7514 | #hcmHighlightKey; | ||
| 7515 | #hcmHighlightUrl; | ||
| 7516 | #id = 0; | ||
| 7517 | constructor({ | ||
| 7518 | docId, | ||
| 7519 | ownerDocument = globalThis.document | ||
| 7520 | } = {}) { | ||
| 7521 | super(); | ||
| 7522 | this.#docId = docId; | ||
| 7523 | this.#document = ownerDocument; | ||
| 7524 | } | ||
| 7525 | get #cache() { | ||
| 7526 | return this.#_cache ||= new Map(); | ||
| 7527 | } | ||
| 7528 | get #defs() { | ||
| 7529 | if (!this.#_defs) { | ||
| 7530 | const div = this.#document.createElement("div"); | ||
| 7531 | const { | ||
| 7532 | style | ||
| 7533 | } = div; | ||
| 7534 | style.visibility = "hidden"; | ||
| 7535 | style.contain = "strict"; | ||
| 7536 | style.width = style.height = 0; | ||
| 7537 | style.position = "absolute"; | ||
| 7538 | style.top = style.left = 0; | ||
| 7539 | style.zIndex = -1; | ||
| 7540 | const svg = this.#document.createElementNS(SVG_NS, "svg"); | ||
| 7541 | svg.setAttribute("width", 0); | ||
| 7542 | svg.setAttribute("height", 0); | ||
| 7543 | this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); | ||
| 7544 | div.append(svg); | ||
| 7545 | svg.append(this.#_defs); | ||
| 7546 | this.#document.body.append(div); | ||
| 7547 | } | ||
| 7548 | return this.#_defs; | ||
| 7549 | } | ||
| 7550 | addFilter(maps) { | ||
| 7551 | if (!maps) { | ||
| 7552 | return "none"; | ||
| 7553 | } | ||
| 7554 | let value = this.#cache.get(maps); | ||
| 7555 | if (value) { | ||
| 7556 | return value; | ||
| 7557 | } | ||
| 7558 | let tableR, tableG, tableB, key; | ||
| 7559 | if (maps.length === 1) { | ||
| 7560 | const mapR = maps[0]; | ||
| 7561 | const buffer = new Array(256); | ||
| 7562 | for (let i = 0; i < 256; i++) { | ||
| 7563 | buffer[i] = mapR[i] / 255; | ||
| 7564 | } | ||
| 7565 | key = tableR = tableG = tableB = buffer.join(","); | ||
| 7566 | } else { | ||
| 7567 | const [mapR, mapG, mapB] = maps; | ||
| 7568 | const bufferR = new Array(256); | ||
| 7569 | const bufferG = new Array(256); | ||
| 7570 | const bufferB = new Array(256); | ||
| 7571 | for (let i = 0; i < 256; i++) { | ||
| 7572 | bufferR[i] = mapR[i] / 255; | ||
| 7573 | bufferG[i] = mapG[i] / 255; | ||
| 7574 | bufferB[i] = mapB[i] / 255; | ||
| 7575 | } | ||
| 7576 | tableR = bufferR.join(","); | ||
| 7577 | tableG = bufferG.join(","); | ||
| 7578 | tableB = bufferB.join(","); | ||
| 7579 | key = `${tableR}${tableG}${tableB}`; | ||
| 7580 | } | ||
| 7581 | value = this.#cache.get(key); | ||
| 7582 | if (value) { | ||
| 7583 | this.#cache.set(maps, value); | ||
| 7584 | return value; | ||
| 7585 | } | ||
| 7586 | const id = `g_${this.#docId}_transfer_map_${this.#id++}`; | ||
| 7587 | const url = `url(#${id})`; | ||
| 7588 | this.#cache.set(maps, url); | ||
| 7589 | this.#cache.set(key, url); | ||
| 7590 | const filter = this.#createFilter(id); | ||
| 7591 | this.#addTransferMapConversion(tableR, tableG, tableB, filter); | ||
| 7592 | return url; | ||
| 7593 | } | ||
| 7594 | addHCMFilter(fgColor, bgColor) { | ||
| 7595 | const key = `${fgColor}-${bgColor}`; | ||
| 7596 | if (this.#hcmKey === key) { | ||
| 7597 | return this.#hcmUrl; | ||
| 7598 | } | ||
| 7599 | this.#hcmKey = key; | ||
| 7600 | this.#hcmUrl = "none"; | ||
| 7601 | this.#hcmFilter?.remove(); | ||
| 7602 | if (!fgColor || !bgColor) { | ||
| 7603 | return this.#hcmUrl; | ||
| 7604 | } | ||
| 7605 | const fgRGB = this.#getRGB(fgColor); | ||
| 7606 | fgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...fgRGB); | ||
| 7607 | const bgRGB = this.#getRGB(bgColor); | ||
| 7608 | bgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...bgRGB); | ||
| 7609 | this.#defs.style.color = ""; | ||
| 7610 | if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { | ||
| 7611 | return this.#hcmUrl; | ||
| 7612 | } | ||
| 7613 | const map = new Array(256); | ||
| 7614 | for (let i = 0; i <= 255; i++) { | ||
| 7615 | const x = i / 255; | ||
| 7616 | map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; | ||
| 7617 | } | ||
| 7618 | const table = map.join(","); | ||
| 7619 | const id = `g_${this.#docId}_hcm_filter`; | ||
| 7620 | const filter = this.#hcmHighlightFilter = this.#createFilter(id); | ||
| 7621 | this.#addTransferMapConversion(table, table, table, filter); | ||
| 7622 | this.#addGrayConversion(filter); | ||
| 7623 | const getSteps = (c, n) => { | ||
| 7624 | const start = fgRGB[c] / 255; | ||
| 7625 | const end = bgRGB[c] / 255; | ||
| 7626 | const arr = new Array(n + 1); | ||
| 7627 | for (let i = 0; i <= n; i++) { | ||
| 7628 | arr[i] = start + i / n * (end - start); | ||
| 7629 | } | ||
| 7630 | return arr.join(","); | ||
| 7631 | }; | ||
| 7632 | this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); | ||
| 7633 | this.#hcmUrl = `url(#${id})`; | ||
| 7634 | return this.#hcmUrl; | ||
| 7635 | } | ||
| 7636 | addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { | ||
| 7637 | const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; | ||
| 7638 | if (this.#hcmHighlightKey === key) { | ||
| 7639 | return this.#hcmHighlightUrl; | ||
| 7640 | } | ||
| 7641 | this.#hcmHighlightKey = key; | ||
| 7642 | this.#hcmHighlightUrl = "none"; | ||
| 7643 | this.#hcmHighlightFilter?.remove(); | ||
| 7644 | if (!fgColor || !bgColor) { | ||
| 7645 | return this.#hcmHighlightUrl; | ||
| 7646 | } | ||
| 7647 | const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); | ||
| 7648 | let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); | ||
| 7649 | let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); | ||
| 7650 | let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); | ||
| 7651 | if (bgGray < fgGray) { | ||
| 7652 | [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; | ||
| 7653 | } | ||
| 7654 | this.#defs.style.color = ""; | ||
| 7655 | const getSteps = (fg, bg, n) => { | ||
| 7656 | const arr = new Array(256); | ||
| 7657 | const step = (bgGray - fgGray) / n; | ||
| 7658 | const newStart = fg / 255; | ||
| 7659 | const newStep = (bg - fg) / (255 * n); | ||
| 7660 | let prev = 0; | ||
| 7661 | for (let i = 0; i <= n; i++) { | ||
| 7662 | const k = Math.round(fgGray + i * step); | ||
| 7663 | const value = newStart + i * newStep; | ||
| 7664 | for (let j = prev; j <= k; j++) { | ||
| 7665 | arr[j] = value; | ||
| 7666 | } | ||
| 7667 | prev = k + 1; | ||
| 7668 | } | ||
| 7669 | for (let i = prev; i < 256; i++) { | ||
| 7670 | arr[i] = arr[prev - 1]; | ||
| 7671 | } | ||
| 7672 | return arr.join(","); | ||
| 7673 | }; | ||
| 7674 | const id = `g_${this.#docId}_hcm_highlight_filter`; | ||
| 7675 | const filter = this.#hcmHighlightFilter = this.#createFilter(id); | ||
| 7676 | this.#addGrayConversion(filter); | ||
| 7677 | this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); | ||
| 7678 | this.#hcmHighlightUrl = `url(#${id})`; | ||
| 7679 | return this.#hcmHighlightUrl; | ||
| 7680 | } | ||
| 7681 | destroy(keepHCM = false) { | ||
| 7682 | if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { | ||
| 7683 | return; | ||
| 7684 | } | ||
| 7685 | if (this.#_defs) { | ||
| 7686 | this.#_defs.parentNode.parentNode.remove(); | ||
| 7687 | this.#_defs = null; | ||
| 7688 | } | ||
| 7689 | if (this.#_cache) { | ||
| 7690 | this.#_cache.clear(); | ||
| 7691 | this.#_cache = null; | ||
| 7692 | } | ||
| 7693 | this.#id = 0; | ||
| 7694 | } | ||
| 7695 | #addGrayConversion(filter) { | ||
| 7696 | const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); | ||
| 7697 | feColorMatrix.setAttribute("type", "matrix"); | ||
| 7698 | feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); | ||
| 7699 | filter.append(feColorMatrix); | ||
| 7700 | } | ||
| 7701 | #createFilter(id) { | ||
| 7702 | const filter = this.#document.createElementNS(SVG_NS, "filter"); | ||
| 7703 | filter.setAttribute("color-interpolation-filters", "sRGB"); | ||
| 7704 | filter.setAttribute("id", id); | ||
| 7705 | this.#defs.append(filter); | ||
| 7706 | return filter; | ||
| 7707 | } | ||
| 7708 | #appendFeFunc(feComponentTransfer, func, table) { | ||
| 7709 | const feFunc = this.#document.createElementNS(SVG_NS, func); | ||
| 7710 | feFunc.setAttribute("type", "discrete"); | ||
| 7711 | feFunc.setAttribute("tableValues", table); | ||
| 7712 | feComponentTransfer.append(feFunc); | ||
| 7713 | } | ||
| 7714 | #addTransferMapConversion(rTable, gTable, bTable, filter) { | ||
| 7715 | const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); | ||
| 7716 | filter.append(feComponentTransfer); | ||
| 7717 | this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); | ||
| 7718 | this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); | ||
| 7719 | this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); | ||
| 7720 | } | ||
| 7721 | #getRGB(color) { | ||
| 7722 | this.#defs.style.color = color; | ||
| 7723 | return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); | ||
| 7724 | } | ||
| 7725 | } | ||
| 7726 | class DOMCanvasFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCanvasFactory { | ||
| 7727 | constructor({ | ||
| 7728 | ownerDocument = globalThis.document | ||
| 7729 | } = {}) { | ||
| 7730 | super(); | ||
| 7731 | this._document = ownerDocument; | ||
| 7732 | } | ||
| 7733 | _createCanvas(width, height) { | ||
| 7734 | const canvas = this._document.createElement("canvas"); | ||
| 7735 | canvas.width = width; | ||
| 7736 | canvas.height = height; | ||
| 7737 | return canvas; | ||
| 7738 | } | ||
| 7739 | } | ||
| 7740 | async function fetchData(url, type = "text") { | ||
| 7741 | if (isValidFetchUrl(url, document.baseURI)) { | ||
| 7742 | const response = await fetch(url); | ||
| 7743 | if (!response.ok) { | ||
| 7744 | throw new Error(response.statusText); | ||
| 7745 | } | ||
| 7746 | switch (type) { | ||
| 7747 | case "arraybuffer": | ||
| 7748 | return response.arrayBuffer(); | ||
| 7749 | case "blob": | ||
| 7750 | return response.blob(); | ||
| 7751 | case "json": | ||
| 7752 | return response.json(); | ||
| 7753 | } | ||
| 7754 | return response.text(); | ||
| 7755 | } | ||
| 7756 | return new Promise((resolve, reject) => { | ||
| 7757 | const request = new XMLHttpRequest(); | ||
| 7758 | request.open("GET", url, true); | ||
| 7759 | request.responseType = type; | ||
| 7760 | request.onreadystatechange = () => { | ||
| 7761 | if (request.readyState !== XMLHttpRequest.DONE) { | ||
| 7762 | return; | ||
| 7763 | } | ||
| 7764 | if (request.status === 200 || request.status === 0) { | ||
| 7765 | let data; | ||
| 7766 | switch (type) { | ||
| 7767 | case "arraybuffer": | ||
| 7768 | case "blob": | ||
| 7769 | case "json": | ||
| 7770 | data = request.response; | ||
| 7771 | break; | ||
| 7772 | default: | ||
| 7773 | data = request.responseText; | ||
| 7774 | break; | ||
| 7775 | } | ||
| 7776 | if (data) { | ||
| 7777 | resolve(data); | ||
| 7778 | return; | ||
| 7779 | } | ||
| 7780 | } | ||
| 7781 | reject(new Error(request.statusText)); | ||
| 7782 | }; | ||
| 7783 | request.send(null); | ||
| 7784 | }); | ||
| 7785 | } | ||
| 7786 | class DOMCMapReaderFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCMapReaderFactory { | ||
| 7787 | _fetchData(url, compressionType) { | ||
| 7788 | return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then(data => { | ||
| 7789 | return { | ||
| 7790 | cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.stringToBytes)(data), | ||
| 7791 | compressionType | ||
| 7792 | }; | ||
| 7793 | }); | ||
| 7794 | } | ||
| 7795 | } | ||
| 7796 | class DOMStandardFontDataFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseStandardFontDataFactory { | ||
| 7797 | _fetchData(url) { | ||
| 7798 | return fetchData(url, "arraybuffer").then(data => { | ||
| 7799 | return new Uint8Array(data); | ||
| 7800 | }); | ||
| 7801 | } | ||
| 7802 | } | ||
| 7803 | class DOMSVGFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseSVGFactory { | ||
| 7804 | _createSVG(type) { | ||
| 7805 | return document.createElementNS(SVG_NS, type); | ||
| 7806 | } | ||
| 7807 | } | ||
| 7808 | class PageViewport { | ||
| 7809 | constructor({ | ||
| 7810 | viewBox, | ||
| 7811 | scale, | ||
| 7812 | rotation, | ||
| 7813 | offsetX = 0, | ||
| 7814 | offsetY = 0, | ||
| 7815 | dontFlip = false | ||
| 7816 | }) { | ||
| 7817 | this.viewBox = viewBox; | ||
| 7818 | this.scale = scale; | ||
| 7819 | this.rotation = rotation; | ||
| 7820 | this.offsetX = offsetX; | ||
| 7821 | this.offsetY = offsetY; | ||
| 7822 | const centerX = (viewBox[2] + viewBox[0]) / 2; | ||
| 7823 | const centerY = (viewBox[3] + viewBox[1]) / 2; | ||
| 7824 | let rotateA, rotateB, rotateC, rotateD; | ||
| 7825 | rotation %= 360; | ||
| 7826 | if (rotation < 0) { | ||
| 7827 | rotation += 360; | ||
| 7828 | } | ||
| 7829 | switch (rotation) { | ||
| 7830 | case 180: | ||
| 7831 | rotateA = -1; | ||
| 7832 | rotateB = 0; | ||
| 7833 | rotateC = 0; | ||
| 7834 | rotateD = 1; | ||
| 7835 | break; | ||
| 7836 | case 90: | ||
| 7837 | rotateA = 0; | ||
| 7838 | rotateB = 1; | ||
| 7839 | rotateC = 1; | ||
| 7840 | rotateD = 0; | ||
| 7841 | break; | ||
| 7842 | case 270: | ||
| 7843 | rotateA = 0; | ||
| 7844 | rotateB = -1; | ||
| 7845 | rotateC = -1; | ||
| 7846 | rotateD = 0; | ||
| 7847 | break; | ||
| 7848 | case 0: | ||
| 7849 | rotateA = 1; | ||
| 7850 | rotateB = 0; | ||
| 7851 | rotateC = 0; | ||
| 7852 | rotateD = -1; | ||
| 7853 | break; | ||
| 7854 | default: | ||
| 7855 | throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); | ||
| 7856 | } | ||
| 7857 | if (dontFlip) { | ||
| 7858 | rotateC = -rotateC; | ||
| 7859 | rotateD = -rotateD; | ||
| 7860 | } | ||
| 7861 | let offsetCanvasX, offsetCanvasY; | ||
| 7862 | let width, height; | ||
| 7863 | if (rotateA === 0) { | ||
| 7864 | offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; | ||
| 7865 | offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; | ||
| 7866 | width = (viewBox[3] - viewBox[1]) * scale; | ||
| 7867 | height = (viewBox[2] - viewBox[0]) * scale; | ||
| 7868 | } else { | ||
| 7869 | offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; | ||
| 7870 | offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; | ||
| 7871 | width = (viewBox[2] - viewBox[0]) * scale; | ||
| 7872 | height = (viewBox[3] - viewBox[1]) * scale; | ||
| 7873 | } | ||
| 7874 | this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; | ||
| 7875 | this.width = width; | ||
| 7876 | this.height = height; | ||
| 7877 | } | ||
| 7878 | get rawDims() { | ||
| 7879 | const { | ||
| 7880 | viewBox | ||
| 7881 | } = this; | ||
| 7882 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "rawDims", { | ||
| 7883 | pageWidth: viewBox[2] - viewBox[0], | ||
| 7884 | pageHeight: viewBox[3] - viewBox[1], | ||
| 7885 | pageX: viewBox[0], | ||
| 7886 | pageY: viewBox[1] | ||
| 7887 | }); | ||
| 7888 | } | ||
| 7889 | clone({ | ||
| 7890 | scale = this.scale, | ||
| 7891 | rotation = this.rotation, | ||
| 7892 | offsetX = this.offsetX, | ||
| 7893 | offsetY = this.offsetY, | ||
| 7894 | dontFlip = false | ||
| 7895 | } = {}) { | ||
| 7896 | return new PageViewport({ | ||
| 7897 | viewBox: this.viewBox.slice(), | ||
| 7898 | scale, | ||
| 7899 | rotation, | ||
| 7900 | offsetX, | ||
| 7901 | offsetY, | ||
| 7902 | dontFlip | ||
| 7903 | }); | ||
| 7904 | } | ||
| 7905 | convertToViewportPoint(x, y) { | ||
| 7906 | return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([x, y], this.transform); | ||
| 7907 | } | ||
| 7908 | convertToViewportRectangle(rect) { | ||
| 7909 | const topLeft = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[0], rect[1]], this.transform); | ||
| 7910 | const bottomRight = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[2], rect[3]], this.transform); | ||
| 7911 | return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; | ||
| 7912 | } | ||
| 7913 | convertToPdfPoint(x, y) { | ||
| 7914 | return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyInverseTransform([x, y], this.transform); | ||
| 7915 | } | ||
| 7916 | } | ||
| 7917 | class RenderingCancelledException extends _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.BaseException { | ||
| 7918 | constructor(msg, extraDelay = 0) { | ||
| 7919 | super(msg, "RenderingCancelledException"); | ||
| 7920 | this.extraDelay = extraDelay; | ||
| 7921 | } | ||
| 7922 | } | ||
| 7923 | function isDataScheme(url) { | ||
| 7924 | const ii = url.length; | ||
| 7925 | let i = 0; | ||
| 7926 | while (i < ii && url[i].trim() === "") { | ||
| 7927 | i++; | ||
| 7928 | } | ||
| 7929 | return url.substring(i, i + 5).toLowerCase() === "data:"; | ||
| 7930 | } | ||
| 7931 | function isPdfFile(filename) { | ||
| 7932 | return typeof filename === "string" && /\.pdf$/i.test(filename); | ||
| 7933 | } | ||
| 7934 | function getFilenameFromUrl(url, onlyStripPath = false) { | ||
| 7935 | if (!onlyStripPath) { | ||
| 7936 | [url] = url.split(/[#?]/, 1); | ||
| 7937 | } | ||
| 7938 | return url.substring(url.lastIndexOf("/") + 1); | ||
| 7939 | } | ||
| 7940 | function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { | ||
| 7941 | if (typeof url !== "string") { | ||
| 7942 | return defaultFilename; | ||
| 7943 | } | ||
| 7944 | if (isDataScheme(url)) { | ||
| 7945 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); | ||
| 7946 | return defaultFilename; | ||
| 7947 | } | ||
| 7948 | const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; | ||
| 7949 | const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; | ||
| 7950 | const splitURI = reURI.exec(url); | ||
| 7951 | let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); | ||
| 7952 | if (suggestedFilename) { | ||
| 7953 | suggestedFilename = suggestedFilename[0]; | ||
| 7954 | if (suggestedFilename.includes("%")) { | ||
| 7955 | try { | ||
| 7956 | suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; | ||
| 7957 | } catch {} | ||
| 7958 | } | ||
| 7959 | } | ||
| 7960 | return suggestedFilename || defaultFilename; | ||
| 7961 | } | ||
| 7962 | class StatTimer { | ||
| 7963 | started = Object.create(null); | ||
| 7964 | times = []; | ||
| 7965 | time(name) { | ||
| 7966 | if (name in this.started) { | ||
| 7967 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer is already running for ${name}`); | ||
| 7968 | } | ||
| 7969 | this.started[name] = Date.now(); | ||
| 7970 | } | ||
| 7971 | timeEnd(name) { | ||
| 7972 | if (!(name in this.started)) { | ||
| 7973 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer has not been started for ${name}`); | ||
| 7974 | } | ||
| 7975 | this.times.push({ | ||
| 7976 | name, | ||
| 7977 | start: this.started[name], | ||
| 7978 | end: Date.now() | ||
| 7979 | }); | ||
| 7980 | delete this.started[name]; | ||
| 7981 | } | ||
| 7982 | toString() { | ||
| 7983 | const outBuf = []; | ||
| 7984 | let longest = 0; | ||
| 7985 | for (const { | ||
| 7986 | name | ||
| 7987 | } of this.times) { | ||
| 7988 | longest = Math.max(name.length, longest); | ||
| 7989 | } | ||
| 7990 | for (const { | ||
| 7991 | name, | ||
| 7992 | start, | ||
| 7993 | end | ||
| 7994 | } of this.times) { | ||
| 7995 | outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); | ||
| 7996 | } | ||
| 7997 | return outBuf.join(""); | ||
| 7998 | } | ||
| 7999 | } | ||
| 8000 | function isValidFetchUrl(url, baseUrl) { | ||
| 8001 | try { | ||
| 8002 | const { | ||
| 8003 | protocol | ||
| 8004 | } = baseUrl ? new URL(url, baseUrl) : new URL(url); | ||
| 8005 | return protocol === "http:" || protocol === "https:"; | ||
| 8006 | } catch { | ||
| 8007 | return false; | ||
| 8008 | } | ||
| 8009 | } | ||
| 8010 | function noContextMenu(e) { | ||
| 8011 | e.preventDefault(); | ||
| 8012 | } | ||
| 8013 | function deprecated(details) { | ||
| 8014 | console.log("Deprecated API usage: " + details); | ||
| 8015 | } | ||
| 8016 | let pdfDateStringRegex; | ||
| 8017 | class PDFDateString { | ||
| 8018 | static toDateObject(input) { | ||
| 8019 | if (!input || typeof input !== "string") { | ||
| 8020 | return null; | ||
| 8021 | } | ||
| 8022 | pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); | ||
| 8023 | const matches = pdfDateStringRegex.exec(input); | ||
| 8024 | if (!matches) { | ||
| 8025 | return null; | ||
| 8026 | } | ||
| 8027 | const year = parseInt(matches[1], 10); | ||
| 8028 | let month = parseInt(matches[2], 10); | ||
| 8029 | month = month >= 1 && month <= 12 ? month - 1 : 0; | ||
| 8030 | let day = parseInt(matches[3], 10); | ||
| 8031 | day = day >= 1 && day <= 31 ? day : 1; | ||
| 8032 | let hour = parseInt(matches[4], 10); | ||
| 8033 | hour = hour >= 0 && hour <= 23 ? hour : 0; | ||
| 8034 | let minute = parseInt(matches[5], 10); | ||
| 8035 | minute = minute >= 0 && minute <= 59 ? minute : 0; | ||
| 8036 | let second = parseInt(matches[6], 10); | ||
| 8037 | second = second >= 0 && second <= 59 ? second : 0; | ||
| 8038 | const universalTimeRelation = matches[7] || "Z"; | ||
| 8039 | let offsetHour = parseInt(matches[8], 10); | ||
| 8040 | offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; | ||
| 8041 | let offsetMinute = parseInt(matches[9], 10) || 0; | ||
| 8042 | offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; | ||
| 8043 | if (universalTimeRelation === "-") { | ||
| 8044 | hour += offsetHour; | ||
| 8045 | minute += offsetMinute; | ||
| 8046 | } else if (universalTimeRelation === "+") { | ||
| 8047 | hour -= offsetHour; | ||
| 8048 | minute -= offsetMinute; | ||
| 8049 | } | ||
| 8050 | return new Date(Date.UTC(year, month, day, hour, minute, second)); | ||
| 8051 | } | ||
| 8052 | } | ||
| 8053 | function getXfaPageViewport(xfaPage, { | ||
| 8054 | scale = 1, | ||
| 8055 | rotation = 0 | ||
| 8056 | }) { | ||
| 8057 | const { | ||
| 8058 | width, | ||
| 8059 | height | ||
| 8060 | } = xfaPage.attributes.style; | ||
| 8061 | const viewBox = [0, 0, parseInt(width), parseInt(height)]; | ||
| 8062 | return new PageViewport({ | ||
| 8063 | viewBox, | ||
| 8064 | scale, | ||
| 8065 | rotation | ||
| 8066 | }); | ||
| 8067 | } | ||
| 8068 | function getRGB(color) { | ||
| 8069 | if (color.startsWith("#")) { | ||
| 8070 | const colorRGB = parseInt(color.slice(1), 16); | ||
| 8071 | return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; | ||
| 8072 | } | ||
| 8073 | if (color.startsWith("rgb(")) { | ||
| 8074 | return color.slice(4, -1).split(",").map(x => parseInt(x)); | ||
| 8075 | } | ||
| 8076 | if (color.startsWith("rgba(")) { | ||
| 8077 | return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); | ||
| 8078 | } | ||
| 8079 | (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Not a valid color format: "${color}"`); | ||
| 8080 | return [0, 0, 0]; | ||
| 8081 | } | ||
| 8082 | function getColorValues(colors) { | ||
| 8083 | const span = document.createElement("span"); | ||
| 8084 | span.style.visibility = "hidden"; | ||
| 8085 | document.body.append(span); | ||
| 8086 | for (const name of colors.keys()) { | ||
| 8087 | span.style.color = name; | ||
| 8088 | const computedColor = window.getComputedStyle(span).color; | ||
| 8089 | colors.set(name, getRGB(computedColor)); | ||
| 8090 | } | ||
| 8091 | span.remove(); | ||
| 8092 | } | ||
| 8093 | function getCurrentTransform(ctx) { | ||
| 8094 | const { | ||
| 8095 | a, | ||
| 8096 | b, | ||
| 8097 | c, | ||
| 8098 | d, | ||
| 8099 | e, | ||
| 8100 | f | ||
| 8101 | } = ctx.getTransform(); | ||
| 8102 | return [a, b, c, d, e, f]; | ||
| 8103 | } | ||
| 8104 | function getCurrentTransformInverse(ctx) { | ||
| 8105 | const { | ||
| 8106 | a, | ||
| 8107 | b, | ||
| 8108 | c, | ||
| 8109 | d, | ||
| 8110 | e, | ||
| 8111 | f | ||
| 8112 | } = ctx.getTransform().invertSelf(); | ||
| 8113 | return [a, b, c, d, e, f]; | ||
| 8114 | } | ||
| 8115 | function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { | ||
| 8116 | if (viewport instanceof PageViewport) { | ||
| 8117 | const { | ||
| 8118 | pageWidth, | ||
| 8119 | pageHeight | ||
| 8120 | } = viewport.rawDims; | ||
| 8121 | const { | ||
| 8122 | style | ||
| 8123 | } = div; | ||
| 8124 | const useRound = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.isCSSRoundSupported; | ||
| 8125 | const w = `var(--scale-factor) * ${pageWidth}px`, | ||
| 8126 | h = `var(--scale-factor) * ${pageHeight}px`; | ||
| 8127 | const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, | ||
| 8128 | heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; | ||
| 8129 | if (!mustFlip || viewport.rotation % 180 === 0) { | ||
| 8130 | style.width = widthStr; | ||
| 8131 | style.height = heightStr; | ||
| 8132 | } else { | ||
| 8133 | style.width = heightStr; | ||
| 8134 | style.height = widthStr; | ||
| 8135 | } | ||
| 8136 | } | ||
| 8137 | if (mustRotate) { | ||
| 8138 | div.setAttribute("data-main-rotation", viewport.rotation); | ||
| 8139 | } | ||
| 8140 | } | ||
| 8141 | |||
| 8142 | |||
| 8143 | /***/ }), | ||
| 8144 | |||
| 8145 | /***/ 423: | ||
| 8146 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 8147 | |||
| 8148 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { | ||
| 8149 | /* harmony export */ DrawLayer: () => (/* binding */ DrawLayer) | ||
| 8150 | /* harmony export */ }); | ||
| 8151 | /* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(473); | ||
| 8152 | /* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); | ||
| 8153 | |||
| 8154 | |||
| 8155 | class DrawLayer { | ||
| 8156 | #parent = null; | ||
| 8157 | #id = 0; | ||
| 8158 | #mapping = new Map(); | ||
| 8159 | constructor({ | ||
| 8160 | pageIndex | ||
| 8161 | }) { | ||
| 8162 | this.pageIndex = pageIndex; | ||
| 8163 | } | ||
| 8164 | setParent(parent) { | ||
| 8165 | if (!this.#parent) { | ||
| 8166 | this.#parent = parent; | ||
| 8167 | return; | ||
| 8168 | } | ||
| 8169 | if (this.#parent !== parent) { | ||
| 8170 | if (this.#mapping.size > 0) { | ||
| 8171 | for (const root of this.#mapping.values()) { | ||
| 8172 | root.remove(); | ||
| 8173 | parent.append(root); | ||
| 8174 | } | ||
| 8175 | } | ||
| 8176 | this.#parent = parent; | ||
| 8177 | } | ||
| 8178 | } | ||
| 8179 | static get _svgFactory() { | ||
| 8180 | return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "_svgFactory", new _display_utils_js__WEBPACK_IMPORTED_MODULE_0__.DOMSVGFactory()); | ||
| 8181 | } | ||
| 8182 | static #setBox(element, { | ||
| 8183 | x, | ||
| 8184 | y, | ||
| 8185 | width, | ||
| 8186 | height | ||
| 8187 | }) { | ||
| 8188 | const { | ||
| 8189 | style | ||
| 8190 | } = element; | ||
| 8191 | style.top = `${100 * y}%`; | ||
| 8192 | style.left = `${100 * x}%`; | ||
| 8193 | style.width = `${100 * width}%`; | ||
| 8194 | style.height = `${100 * height}%`; | ||
| 8195 | } | ||
| 8196 | #createSVG(box) { | ||
| 8197 | const svg = DrawLayer._svgFactory.create(1, 1, true); | ||
| 8198 | this.#parent.append(svg); | ||
| 8199 | DrawLayer.#setBox(svg, box); | ||
| 8200 | return svg; | ||
| 8201 | } | ||
| 8202 | highlight({ | ||
| 8203 | outlines, | ||
| 8204 | box | ||
| 8205 | }, color, opacity) { | ||
| 8206 | const id = this.#id++; | ||
| 8207 | const root = this.#createSVG(box); | ||
| 8208 | root.classList.add("highlight"); | ||
| 8209 | const defs = DrawLayer._svgFactory.createElement("defs"); | ||
| 8210 | root.append(defs); | ||
| 8211 | const path = DrawLayer._svgFactory.createElement("path"); | ||
| 8212 | defs.append(path); | ||
| 8213 | const pathId = `path_p${this.pageIndex}_${id}`; | ||
| 8214 | path.setAttribute("id", pathId); | ||
| 8215 | path.setAttribute("d", DrawLayer.#extractPathFromHighlightOutlines(outlines)); | ||
| 8216 | const clipPath = DrawLayer._svgFactory.createElement("clipPath"); | ||
| 8217 | defs.append(clipPath); | ||
| 8218 | const clipPathId = `clip_${pathId}`; | ||
| 8219 | clipPath.setAttribute("id", clipPathId); | ||
| 8220 | clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); | ||
| 8221 | const clipPathUse = DrawLayer._svgFactory.createElement("use"); | ||
| 8222 | clipPath.append(clipPathUse); | ||
| 8223 | clipPathUse.setAttribute("href", `#${pathId}`); | ||
| 8224 | clipPathUse.classList.add("clip"); | ||
| 8225 | const use = DrawLayer._svgFactory.createElement("use"); | ||
| 8226 | root.append(use); | ||
| 8227 | root.setAttribute("fill", color); | ||
| 8228 | root.setAttribute("fill-opacity", opacity); | ||
| 8229 | use.setAttribute("href", `#${pathId}`); | ||
| 8230 | this.#mapping.set(id, root); | ||
| 8231 | return { | ||
| 8232 | id, | ||
| 8233 | clipPathId: `url(#${clipPathId})` | ||
| 8234 | }; | ||
| 8235 | } | ||
| 8236 | highlightOutline({ | ||
| 8237 | outlines, | ||
| 8238 | box | ||
| 8239 | }) { | ||
| 8240 | const id = this.#id++; | ||
| 8241 | const root = this.#createSVG(box); | ||
| 8242 | root.classList.add("highlightOutline"); | ||
| 8243 | const defs = DrawLayer._svgFactory.createElement("defs"); | ||
| 8244 | root.append(defs); | ||
| 8245 | const path = DrawLayer._svgFactory.createElement("path"); | ||
| 8246 | defs.append(path); | ||
| 8247 | const pathId = `path_p${this.pageIndex}_${id}`; | ||
| 8248 | path.setAttribute("id", pathId); | ||
| 8249 | path.setAttribute("d", DrawLayer.#extractPathFromHighlightOutlines(outlines)); | ||
| 8250 | path.setAttribute("vector-effect", "non-scaling-stroke"); | ||
| 8251 | const use1 = DrawLayer._svgFactory.createElement("use"); | ||
| 8252 | root.append(use1); | ||
| 8253 | use1.setAttribute("href", `#${pathId}`); | ||
| 8254 | const use2 = use1.cloneNode(); | ||
| 8255 | root.append(use2); | ||
| 8256 | use1.classList.add("mainOutline"); | ||
| 8257 | use2.classList.add("secondaryOutline"); | ||
| 8258 | this.#mapping.set(id, root); | ||
| 8259 | return id; | ||
| 8260 | } | ||
| 8261 | static #extractPathFromHighlightOutlines(polygons) { | ||
| 8262 | const buffer = []; | ||
| 8263 | for (const polygon of polygons) { | ||
| 8264 | let [prevX, prevY] = polygon; | ||
| 8265 | buffer.push(`M${prevX} ${prevY}`); | ||
| 8266 | for (let i = 2; i < polygon.length; i += 2) { | ||
| 8267 | const x = polygon[i]; | ||
| 8268 | const y = polygon[i + 1]; | ||
| 8269 | if (x === prevX) { | ||
| 8270 | buffer.push(`V${y}`); | ||
| 8271 | prevY = y; | ||
| 8272 | } else if (y === prevY) { | ||
| 8273 | buffer.push(`H${x}`); | ||
| 8274 | prevX = x; | ||
| 8275 | } | ||
| 8276 | } | ||
| 8277 | buffer.push("Z"); | ||
| 8278 | } | ||
| 8279 | return buffer.join(" "); | ||
| 8280 | } | ||
| 8281 | updateBox(id, box) { | ||
| 8282 | DrawLayer.#setBox(this.#mapping.get(id), box); | ||
| 8283 | } | ||
| 8284 | rotate(id, angle) { | ||
| 8285 | this.#mapping.get(id).setAttribute("data-main-rotation", angle); | ||
| 8286 | } | ||
| 8287 | changeColor(id, color) { | ||
| 8288 | this.#mapping.get(id).setAttribute("fill", color); | ||
| 8289 | } | ||
| 8290 | changeOpacity(id, opacity) { | ||
| 8291 | this.#mapping.get(id).setAttribute("fill-opacity", opacity); | ||
| 8292 | } | ||
| 8293 | addClass(id, className) { | ||
| 8294 | this.#mapping.get(id).classList.add(className); | ||
| 8295 | } | ||
| 8296 | removeClass(id, className) { | ||
| 8297 | this.#mapping.get(id).classList.remove(className); | ||
| 8298 | } | ||
| 8299 | remove(id) { | ||
| 8300 | this.#mapping.get(id).remove(); | ||
| 8301 | this.#mapping.delete(id); | ||
| 8302 | } | ||
| 8303 | destroy() { | ||
| 8304 | this.#parent = null; | ||
| 8305 | for (const root of this.#mapping.values()) { | ||
| 8306 | root.remove(); | ||
| 8307 | } | ||
| 8308 | this.#mapping.clear(); | ||
| 8309 | } | ||
| 8310 | } | ||
| 8311 | |||
| 8312 | |||
| 8313 | /***/ }), | ||
| 8314 | |||
| 8315 | /***/ 331: | ||
| 8316 | /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { | ||
| 8317 | |||
| 8318 | |||
| 8319 | // EXPORTS | ||
| 8320 | __webpack_require__.d(__webpack_exports__, { | ||
| 8321 | AnnotationEditorLayer: () => (/* binding */ AnnotationEditorLayer) | ||
| 8322 | }); | ||
| 8323 | |||
| 8324 | // EXTERNAL MODULE: ./src/shared/util.js | ||
| 8325 | var util = __webpack_require__(266); | ||
| 8326 | // EXTERNAL MODULE: ./src/display/editor/editor.js + 1 modules | ||
| 8327 | var editor_editor = __webpack_require__(796); | ||
| 8328 | // EXTERNAL MODULE: ./src/display/editor/tools.js | ||
| 8329 | var tools = __webpack_require__(812); | ||
| 8330 | // EXTERNAL MODULE: ./src/display/annotation_layer.js + 1 modules | ||
| 8331 | var annotation_layer = __webpack_require__(640); | ||
| 8332 | ;// CONCATENATED MODULE: ./src/display/editor/freetext.js | ||
| 8333 | |||
| 8334 | |||
| 8335 | |||
| 8336 | |||
| 8337 | class FreeTextEditor extends editor_editor.AnnotationEditor { | ||
| 8338 | #boundEditorDivBlur = this.editorDivBlur.bind(this); | ||
| 8339 | #boundEditorDivFocus = this.editorDivFocus.bind(this); | ||
| 8340 | #boundEditorDivInput = this.editorDivInput.bind(this); | ||
| 8341 | #boundEditorDivKeydown = this.editorDivKeydown.bind(this); | ||
| 8342 | #color; | ||
| 8343 | #content = ""; | ||
| 8344 | #editorDivId = `${this.id}-editor`; | ||
| 8345 | #fontSize; | ||
| 8346 | #initialData = null; | ||
| 8347 | static _freeTextDefaultContent = ""; | ||
| 8348 | static _internalPadding = 0; | ||
| 8349 | static _defaultColor = null; | ||
| 8350 | static _defaultFontSize = 10; | ||
| 8351 | static get _keyboardManager() { | ||
| 8352 | const proto = FreeTextEditor.prototype; | ||
| 8353 | const arrowChecker = self => self.isEmpty(); | ||
| 8354 | const small = tools.AnnotationEditorUIManager.TRANSLATE_SMALL; | ||
| 8355 | const big = tools.AnnotationEditorUIManager.TRANSLATE_BIG; | ||
| 8356 | return (0,util.shadow)(this, "_keyboardManager", new tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { | ||
| 8357 | bubbles: true | ||
| 8358 | }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { | ||
| 8359 | args: [-small, 0], | ||
| 8360 | checker: arrowChecker | ||
| 8361 | }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { | ||
| 8362 | args: [-big, 0], | ||
| 8363 | checker: arrowChecker | ||
| 8364 | }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { | ||
| 8365 | args: [small, 0], | ||
| 8366 | checker: arrowChecker | ||
| 8367 | }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { | ||
| 8368 | args: [big, 0], | ||
| 8369 | checker: arrowChecker | ||
| 8370 | }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { | ||
| 8371 | args: [0, -small], | ||
| 8372 | checker: arrowChecker | ||
| 8373 | }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { | ||
| 8374 | args: [0, -big], | ||
| 8375 | checker: arrowChecker | ||
| 8376 | }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { | ||
| 8377 | args: [0, small], | ||
| 8378 | checker: arrowChecker | ||
| 8379 | }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { | ||
| 8380 | args: [0, big], | ||
| 8381 | checker: arrowChecker | ||
| 8382 | }]])); | ||
| 8383 | } | ||
| 8384 | static _type = "freetext"; | ||
| 8385 | static _editorType = util.AnnotationEditorType.FREETEXT; | ||
| 8386 | constructor(params) { | ||
| 8387 | super({ | ||
| 8388 | ...params, | ||
| 8389 | name: "freeTextEditor" | ||
| 8390 | }); | ||
| 8391 | this.#color = params.color || FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; | ||
| 8392 | this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; | ||
| 8393 | } | ||
| 8394 | static initialize(l10n) { | ||
| 8395 | editor_editor.AnnotationEditor.initialize(l10n, { | ||
| 8396 | strings: ["pdfjs-free-text-default-content"] | ||
| 8397 | }); | ||
| 8398 | const style = getComputedStyle(document.documentElement); | ||
| 8399 | this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); | ||
| 8400 | } | ||
| 8401 | static updateDefaultParams(type, value) { | ||
| 8402 | switch (type) { | ||
| 8403 | case util.AnnotationEditorParamsType.FREETEXT_SIZE: | ||
| 8404 | FreeTextEditor._defaultFontSize = value; | ||
| 8405 | break; | ||
| 8406 | case util.AnnotationEditorParamsType.FREETEXT_COLOR: | ||
| 8407 | FreeTextEditor._defaultColor = value; | ||
| 8408 | break; | ||
| 8409 | } | ||
| 8410 | } | ||
| 8411 | updateParams(type, value) { | ||
| 8412 | switch (type) { | ||
| 8413 | case util.AnnotationEditorParamsType.FREETEXT_SIZE: | ||
| 8414 | this.#updateFontSize(value); | ||
| 8415 | break; | ||
| 8416 | case util.AnnotationEditorParamsType.FREETEXT_COLOR: | ||
| 8417 | this.#updateColor(value); | ||
| 8418 | break; | ||
| 8419 | } | ||
| 8420 | } | ||
| 8421 | static get defaultPropertiesToUpdate() { | ||
| 8422 | return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor]]; | ||
| 8423 | } | ||
| 8424 | get propertiesToUpdate() { | ||
| 8425 | return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; | ||
| 8426 | } | ||
| 8427 | #updateFontSize(fontSize) { | ||
| 8428 | const setFontsize = size => { | ||
| 8429 | this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; | ||
| 8430 | this.translate(0, -(size - this.#fontSize) * this.parentScale); | ||
| 8431 | this.#fontSize = size; | ||
| 8432 | this.#setEditorDimensions(); | ||
| 8433 | }; | ||
| 8434 | const savedFontsize = this.#fontSize; | ||
| 8435 | this.addCommands({ | ||
| 8436 | cmd: () => { | ||
| 8437 | setFontsize(fontSize); | ||
| 8438 | }, | ||
| 8439 | undo: () => { | ||
| 8440 | setFontsize(savedFontsize); | ||
| 8441 | }, | ||
| 8442 | mustExec: true, | ||
| 8443 | type: util.AnnotationEditorParamsType.FREETEXT_SIZE, | ||
| 8444 | overwriteIfSameType: true, | ||
| 8445 | keepUndo: true | ||
| 8446 | }); | ||
| 8447 | } | ||
| 8448 | #updateColor(color) { | ||
| 8449 | const savedColor = this.#color; | ||
| 8450 | this.addCommands({ | ||
| 8451 | cmd: () => { | ||
| 8452 | this.#color = this.editorDiv.style.color = color; | ||
| 8453 | }, | ||
| 8454 | undo: () => { | ||
| 8455 | this.#color = this.editorDiv.style.color = savedColor; | ||
| 8456 | }, | ||
| 8457 | mustExec: true, | ||
| 8458 | type: util.AnnotationEditorParamsType.FREETEXT_COLOR, | ||
| 8459 | overwriteIfSameType: true, | ||
| 8460 | keepUndo: true | ||
| 8461 | }); | ||
| 8462 | } | ||
| 8463 | _translateEmpty(x, y) { | ||
| 8464 | this._uiManager.translateSelectedEditors(x, y, true); | ||
| 8465 | } | ||
| 8466 | getInitialTranslation() { | ||
| 8467 | const scale = this.parentScale; | ||
| 8468 | return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; | ||
| 8469 | } | ||
| 8470 | rebuild() { | ||
| 8471 | if (!this.parent) { | ||
| 8472 | return; | ||
| 8473 | } | ||
| 8474 | super.rebuild(); | ||
| 8475 | if (this.div === null) { | ||
| 8476 | return; | ||
| 8477 | } | ||
| 8478 | if (!this.isAttachedToDOM) { | ||
| 8479 | this.parent.add(this); | ||
| 8480 | } | ||
| 8481 | } | ||
| 8482 | enableEditMode() { | ||
| 8483 | if (this.isInEditMode()) { | ||
| 8484 | return; | ||
| 8485 | } | ||
| 8486 | this.parent.setEditingState(false); | ||
| 8487 | this.parent.updateToolbar(util.AnnotationEditorType.FREETEXT); | ||
| 8488 | super.enableEditMode(); | ||
| 8489 | this.overlayDiv.classList.remove("enabled"); | ||
| 8490 | this.editorDiv.contentEditable = true; | ||
| 8491 | this._isDraggable = false; | ||
| 8492 | this.div.removeAttribute("aria-activedescendant"); | ||
| 8493 | this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); | ||
| 8494 | this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); | ||
| 8495 | this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); | ||
| 8496 | this.editorDiv.addEventListener("input", this.#boundEditorDivInput); | ||
| 8497 | } | ||
| 8498 | disableEditMode() { | ||
| 8499 | if (!this.isInEditMode()) { | ||
| 8500 | return; | ||
| 8501 | } | ||
| 8502 | this.parent.setEditingState(true); | ||
| 8503 | super.disableEditMode(); | ||
| 8504 | this.overlayDiv.classList.add("enabled"); | ||
| 8505 | this.editorDiv.contentEditable = false; | ||
| 8506 | this.div.setAttribute("aria-activedescendant", this.#editorDivId); | ||
| 8507 | this._isDraggable = true; | ||
| 8508 | this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); | ||
| 8509 | this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); | ||
| 8510 | this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); | ||
| 8511 | this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); | ||
| 8512 | this.div.focus({ | ||
| 8513 | preventScroll: true | ||
| 8514 | }); | ||
| 8515 | this.isEditing = false; | ||
| 8516 | this.parent.div.classList.add("freetextEditing"); | ||
| 8517 | } | ||
| 8518 | focusin(event) { | ||
| 8519 | if (!this._focusEventsAllowed) { | ||
| 8520 | return; | ||
| 8521 | } | ||
| 8522 | super.focusin(event); | ||
| 8523 | if (event.target !== this.editorDiv) { | ||
| 8524 | this.editorDiv.focus(); | ||
| 8525 | } | ||
| 8526 | } | ||
| 8527 | onceAdded() { | ||
| 8528 | if (this.width) { | ||
| 8529 | this.#cheatInitialRect(); | ||
| 8530 | return; | ||
| 8531 | } | ||
| 8532 | this.enableEditMode(); | ||
| 8533 | this.editorDiv.focus(); | ||
| 8534 | if (this._initialOptions?.isCentered) { | ||
| 8535 | this.center(); | ||
| 8536 | } | ||
| 8537 | this._initialOptions = null; | ||
| 8538 | } | ||
| 8539 | isEmpty() { | ||
| 8540 | return !this.editorDiv || this.editorDiv.innerText.trim() === ""; | ||
| 8541 | } | ||
| 8542 | remove() { | ||
| 8543 | this.isEditing = false; | ||
| 8544 | if (this.parent) { | ||
| 8545 | this.parent.setEditingState(true); | ||
| 8546 | this.parent.div.classList.add("freetextEditing"); | ||
| 8547 | } | ||
| 8548 | super.remove(); | ||
| 8549 | } | ||
| 8550 | #extractText() { | ||
| 8551 | const divs = this.editorDiv.getElementsByTagName("div"); | ||
| 8552 | if (divs.length === 0) { | ||
| 8553 | return this.editorDiv.innerText; | ||
| 8554 | } | ||
| 8555 | const buffer = []; | ||
| 8556 | for (const div of divs) { | ||
| 8557 | buffer.push(div.innerText.replace(/\r\n?|\n/, "")); | ||
| 8558 | } | ||
| 8559 | return buffer.join("\n"); | ||
| 8560 | } | ||
| 8561 | #setEditorDimensions() { | ||
| 8562 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 8563 | let rect; | ||
| 8564 | if (this.isAttachedToDOM) { | ||
| 8565 | rect = this.div.getBoundingClientRect(); | ||
| 8566 | } else { | ||
| 8567 | const { | ||
| 8568 | currentLayer, | ||
| 8569 | div | ||
| 8570 | } = this; | ||
| 8571 | const savedDisplay = div.style.display; | ||
| 8572 | div.style.display = "hidden"; | ||
| 8573 | currentLayer.div.append(this.div); | ||
| 8574 | rect = div.getBoundingClientRect(); | ||
| 8575 | div.remove(); | ||
| 8576 | div.style.display = savedDisplay; | ||
| 8577 | } | ||
| 8578 | if (this.rotation % 180 === this.parentRotation % 180) { | ||
| 8579 | this.width = rect.width / parentWidth; | ||
| 8580 | this.height = rect.height / parentHeight; | ||
| 8581 | } else { | ||
| 8582 | this.width = rect.height / parentWidth; | ||
| 8583 | this.height = rect.width / parentHeight; | ||
| 8584 | } | ||
| 8585 | this.fixAndSetPosition(); | ||
| 8586 | } | ||
| 8587 | commit() { | ||
| 8588 | if (!this.isInEditMode()) { | ||
| 8589 | return; | ||
| 8590 | } | ||
| 8591 | super.commit(); | ||
| 8592 | this.disableEditMode(); | ||
| 8593 | const savedText = this.#content; | ||
| 8594 | const newText = this.#content = this.#extractText().trimEnd(); | ||
| 8595 | if (savedText === newText) { | ||
| 8596 | return; | ||
| 8597 | } | ||
| 8598 | const setText = text => { | ||
| 8599 | this.#content = text; | ||
| 8600 | if (!text) { | ||
| 8601 | this.remove(); | ||
| 8602 | return; | ||
| 8603 | } | ||
| 8604 | this.#setContent(); | ||
| 8605 | this._uiManager.rebuild(this); | ||
| 8606 | this.#setEditorDimensions(); | ||
| 8607 | }; | ||
| 8608 | this.addCommands({ | ||
| 8609 | cmd: () => { | ||
| 8610 | setText(newText); | ||
| 8611 | }, | ||
| 8612 | undo: () => { | ||
| 8613 | setText(savedText); | ||
| 8614 | }, | ||
| 8615 | mustExec: false | ||
| 8616 | }); | ||
| 8617 | this.#setEditorDimensions(); | ||
| 8618 | } | ||
| 8619 | shouldGetKeyboardEvents() { | ||
| 8620 | return this.isInEditMode(); | ||
| 8621 | } | ||
| 8622 | enterInEditMode() { | ||
| 8623 | this.enableEditMode(); | ||
| 8624 | this.editorDiv.focus(); | ||
| 8625 | } | ||
| 8626 | dblclick(event) { | ||
| 8627 | this.enterInEditMode(); | ||
| 8628 | } | ||
| 8629 | keydown(event) { | ||
| 8630 | if (event.target === this.div && event.key === "Enter") { | ||
| 8631 | this.enterInEditMode(); | ||
| 8632 | event.preventDefault(); | ||
| 8633 | } | ||
| 8634 | } | ||
| 8635 | editorDivKeydown(event) { | ||
| 8636 | FreeTextEditor._keyboardManager.exec(this, event); | ||
| 8637 | } | ||
| 8638 | editorDivFocus(event) { | ||
| 8639 | this.isEditing = true; | ||
| 8640 | } | ||
| 8641 | editorDivBlur(event) { | ||
| 8642 | this.isEditing = false; | ||
| 8643 | } | ||
| 8644 | editorDivInput(event) { | ||
| 8645 | this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); | ||
| 8646 | } | ||
| 8647 | disableEditing() { | ||
| 8648 | this.editorDiv.setAttribute("role", "comment"); | ||
| 8649 | this.editorDiv.removeAttribute("aria-multiline"); | ||
| 8650 | } | ||
| 8651 | enableEditing() { | ||
| 8652 | this.editorDiv.setAttribute("role", "textbox"); | ||
| 8653 | this.editorDiv.setAttribute("aria-multiline", true); | ||
| 8654 | } | ||
| 8655 | render() { | ||
| 8656 | if (this.div) { | ||
| 8657 | return this.div; | ||
| 8658 | } | ||
| 8659 | let baseX, baseY; | ||
| 8660 | if (this.width) { | ||
| 8661 | baseX = this.x; | ||
| 8662 | baseY = this.y; | ||
| 8663 | } | ||
| 8664 | super.render(); | ||
| 8665 | this.editorDiv = document.createElement("div"); | ||
| 8666 | this.editorDiv.className = "internal"; | ||
| 8667 | this.editorDiv.setAttribute("id", this.#editorDivId); | ||
| 8668 | this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); | ||
| 8669 | this.enableEditing(); | ||
| 8670 | editor_editor.AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); | ||
| 8671 | this.editorDiv.contentEditable = true; | ||
| 8672 | const { | ||
| 8673 | style | ||
| 8674 | } = this.editorDiv; | ||
| 8675 | style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; | ||
| 8676 | style.color = this.#color; | ||
| 8677 | this.div.append(this.editorDiv); | ||
| 8678 | this.overlayDiv = document.createElement("div"); | ||
| 8679 | this.overlayDiv.classList.add("overlay", "enabled"); | ||
| 8680 | this.div.append(this.overlayDiv); | ||
| 8681 | (0,tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); | ||
| 8682 | if (this.width) { | ||
| 8683 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 8684 | if (this.annotationElementId) { | ||
| 8685 | const { | ||
| 8686 | position | ||
| 8687 | } = this.#initialData; | ||
| 8688 | let [tx, ty] = this.getInitialTranslation(); | ||
| 8689 | [tx, ty] = this.pageTranslationToScreen(tx, ty); | ||
| 8690 | const [pageWidth, pageHeight] = this.pageDimensions; | ||
| 8691 | const [pageX, pageY] = this.pageTranslation; | ||
| 8692 | let posX, posY; | ||
| 8693 | switch (this.rotation) { | ||
| 8694 | case 0: | ||
| 8695 | posX = baseX + (position[0] - pageX) / pageWidth; | ||
| 8696 | posY = baseY + this.height - (position[1] - pageY) / pageHeight; | ||
| 8697 | break; | ||
| 8698 | case 90: | ||
| 8699 | posX = baseX + (position[0] - pageX) / pageWidth; | ||
| 8700 | posY = baseY - (position[1] - pageY) / pageHeight; | ||
| 8701 | [tx, ty] = [ty, -tx]; | ||
| 8702 | break; | ||
| 8703 | case 180: | ||
| 8704 | posX = baseX - this.width + (position[0] - pageX) / pageWidth; | ||
| 8705 | posY = baseY - (position[1] - pageY) / pageHeight; | ||
| 8706 | [tx, ty] = [-tx, -ty]; | ||
| 8707 | break; | ||
| 8708 | case 270: | ||
| 8709 | posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; | ||
| 8710 | posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; | ||
| 8711 | [tx, ty] = [-ty, tx]; | ||
| 8712 | break; | ||
| 8713 | } | ||
| 8714 | this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); | ||
| 8715 | } else { | ||
| 8716 | this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); | ||
| 8717 | } | ||
| 8718 | this.#setContent(); | ||
| 8719 | this._isDraggable = true; | ||
| 8720 | this.editorDiv.contentEditable = false; | ||
| 8721 | } else { | ||
| 8722 | this._isDraggable = false; | ||
| 8723 | this.editorDiv.contentEditable = true; | ||
| 8724 | } | ||
| 8725 | return this.div; | ||
| 8726 | } | ||
| 8727 | #setContent() { | ||
| 8728 | this.editorDiv.replaceChildren(); | ||
| 8729 | if (!this.#content) { | ||
| 8730 | return; | ||
| 8731 | } | ||
| 8732 | for (const line of this.#content.split("\n")) { | ||
| 8733 | const div = document.createElement("div"); | ||
| 8734 | div.append(line ? document.createTextNode(line) : document.createElement("br")); | ||
| 8735 | this.editorDiv.append(div); | ||
| 8736 | } | ||
| 8737 | } | ||
| 8738 | get contentDiv() { | ||
| 8739 | return this.editorDiv; | ||
| 8740 | } | ||
| 8741 | static deserialize(data, parent, uiManager) { | ||
| 8742 | let initialData = null; | ||
| 8743 | if (data instanceof annotation_layer.FreeTextAnnotationElement) { | ||
| 8744 | const { | ||
| 8745 | data: { | ||
| 8746 | defaultAppearanceData: { | ||
| 8747 | fontSize, | ||
| 8748 | fontColor | ||
| 8749 | }, | ||
| 8750 | rect, | ||
| 8751 | rotation, | ||
| 8752 | id | ||
| 8753 | }, | ||
| 8754 | textContent, | ||
| 8755 | textPosition, | ||
| 8756 | parent: { | ||
| 8757 | page: { | ||
| 8758 | pageNumber | ||
| 8759 | } | ||
| 8760 | } | ||
| 8761 | } = data; | ||
| 8762 | if (!textContent || textContent.length === 0) { | ||
| 8763 | return null; | ||
| 8764 | } | ||
| 8765 | initialData = data = { | ||
| 8766 | annotationType: util.AnnotationEditorType.FREETEXT, | ||
| 8767 | color: Array.from(fontColor), | ||
| 8768 | fontSize, | ||
| 8769 | value: textContent.join("\n"), | ||
| 8770 | position: textPosition, | ||
| 8771 | pageIndex: pageNumber - 1, | ||
| 8772 | rect, | ||
| 8773 | rotation, | ||
| 8774 | id, | ||
| 8775 | deleted: false | ||
| 8776 | }; | ||
| 8777 | } | ||
| 8778 | const editor = super.deserialize(data, parent, uiManager); | ||
| 8779 | editor.#fontSize = data.fontSize; | ||
| 8780 | editor.#color = util.Util.makeHexColor(...data.color); | ||
| 8781 | editor.#content = data.value; | ||
| 8782 | editor.annotationElementId = data.id || null; | ||
| 8783 | editor.#initialData = initialData; | ||
| 8784 | return editor; | ||
| 8785 | } | ||
| 8786 | serialize(isForCopying = false) { | ||
| 8787 | if (this.isEmpty()) { | ||
| 8788 | return null; | ||
| 8789 | } | ||
| 8790 | if (this.deleted) { | ||
| 8791 | return { | ||
| 8792 | pageIndex: this.pageIndex, | ||
| 8793 | id: this.annotationElementId, | ||
| 8794 | deleted: true | ||
| 8795 | }; | ||
| 8796 | } | ||
| 8797 | const padding = FreeTextEditor._internalPadding * this.parentScale; | ||
| 8798 | const rect = this.getRect(padding, padding); | ||
| 8799 | const color = editor_editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); | ||
| 8800 | const serialized = { | ||
| 8801 | annotationType: util.AnnotationEditorType.FREETEXT, | ||
| 8802 | color, | ||
| 8803 | fontSize: this.#fontSize, | ||
| 8804 | value: this.#content, | ||
| 8805 | pageIndex: this.pageIndex, | ||
| 8806 | rect, | ||
| 8807 | rotation: this.rotation, | ||
| 8808 | structTreeParentId: this._structTreeParentId | ||
| 8809 | }; | ||
| 8810 | if (isForCopying) { | ||
| 8811 | return serialized; | ||
| 8812 | } | ||
| 8813 | if (this.annotationElementId && !this.#hasElementChanged(serialized)) { | ||
| 8814 | return null; | ||
| 8815 | } | ||
| 8816 | serialized.id = this.annotationElementId; | ||
| 8817 | return serialized; | ||
| 8818 | } | ||
| 8819 | #hasElementChanged(serialized) { | ||
| 8820 | const { | ||
| 8821 | value, | ||
| 8822 | fontSize, | ||
| 8823 | color, | ||
| 8824 | rect, | ||
| 8825 | pageIndex | ||
| 8826 | } = this.#initialData; | ||
| 8827 | return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; | ||
| 8828 | } | ||
| 8829 | #cheatInitialRect(delayed = false) { | ||
| 8830 | if (!this.annotationElementId) { | ||
| 8831 | return; | ||
| 8832 | } | ||
| 8833 | this.#setEditorDimensions(); | ||
| 8834 | if (!delayed && (this.width === 0 || this.height === 0)) { | ||
| 8835 | setTimeout(() => this.#cheatInitialRect(true), 0); | ||
| 8836 | return; | ||
| 8837 | } | ||
| 8838 | const padding = FreeTextEditor._internalPadding * this.parentScale; | ||
| 8839 | this.#initialData.rect = this.getRect(padding, padding); | ||
| 8840 | } | ||
| 8841 | } | ||
| 8842 | |||
| 8843 | // EXTERNAL MODULE: ./src/display/display_utils.js | ||
| 8844 | var display_utils = __webpack_require__(473); | ||
| 8845 | ;// CONCATENATED MODULE: ./src/display/editor/ink.js | ||
| 8846 | |||
| 8847 | |||
| 8848 | |||
| 8849 | |||
| 8850 | |||
| 8851 | class InkEditor extends editor_editor.AnnotationEditor { | ||
| 8852 | #baseHeight = 0; | ||
| 8853 | #baseWidth = 0; | ||
| 8854 | #boundCanvasPointermove = this.canvasPointermove.bind(this); | ||
| 8855 | #boundCanvasPointerleave = this.canvasPointerleave.bind(this); | ||
| 8856 | #boundCanvasPointerup = this.canvasPointerup.bind(this); | ||
| 8857 | #boundCanvasPointerdown = this.canvasPointerdown.bind(this); | ||
| 8858 | #canvasContextMenuTimeoutId = null; | ||
| 8859 | #currentPath2D = new Path2D(); | ||
| 8860 | #disableEditing = false; | ||
| 8861 | #hasSomethingToDraw = false; | ||
| 8862 | #isCanvasInitialized = false; | ||
| 8863 | #observer = null; | ||
| 8864 | #realWidth = 0; | ||
| 8865 | #realHeight = 0; | ||
| 8866 | #requestFrameCallback = null; | ||
| 8867 | static _defaultColor = null; | ||
| 8868 | static _defaultOpacity = 1; | ||
| 8869 | static _defaultThickness = 1; | ||
| 8870 | static _type = "ink"; | ||
| 8871 | static _editorType = util.AnnotationEditorType.INK; | ||
| 8872 | constructor(params) { | ||
| 8873 | super({ | ||
| 8874 | ...params, | ||
| 8875 | name: "inkEditor" | ||
| 8876 | }); | ||
| 8877 | this.color = params.color || null; | ||
| 8878 | this.thickness = params.thickness || null; | ||
| 8879 | this.opacity = params.opacity || null; | ||
| 8880 | this.paths = []; | ||
| 8881 | this.bezierPath2D = []; | ||
| 8882 | this.allRawPaths = []; | ||
| 8883 | this.currentPath = []; | ||
| 8884 | this.scaleFactor = 1; | ||
| 8885 | this.translationX = this.translationY = 0; | ||
| 8886 | this.x = 0; | ||
| 8887 | this.y = 0; | ||
| 8888 | this._willKeepAspectRatio = true; | ||
| 8889 | } | ||
| 8890 | static initialize(l10n) { | ||
| 8891 | editor_editor.AnnotationEditor.initialize(l10n); | ||
| 8892 | } | ||
| 8893 | static updateDefaultParams(type, value) { | ||
| 8894 | switch (type) { | ||
| 8895 | case util.AnnotationEditorParamsType.INK_THICKNESS: | ||
| 8896 | InkEditor._defaultThickness = value; | ||
| 8897 | break; | ||
| 8898 | case util.AnnotationEditorParamsType.INK_COLOR: | ||
| 8899 | InkEditor._defaultColor = value; | ||
| 8900 | break; | ||
| 8901 | case util.AnnotationEditorParamsType.INK_OPACITY: | ||
| 8902 | InkEditor._defaultOpacity = value / 100; | ||
| 8903 | break; | ||
| 8904 | } | ||
| 8905 | } | ||
| 8906 | updateParams(type, value) { | ||
| 8907 | switch (type) { | ||
| 8908 | case util.AnnotationEditorParamsType.INK_THICKNESS: | ||
| 8909 | this.#updateThickness(value); | ||
| 8910 | break; | ||
| 8911 | case util.AnnotationEditorParamsType.INK_COLOR: | ||
| 8912 | this.#updateColor(value); | ||
| 8913 | break; | ||
| 8914 | case util.AnnotationEditorParamsType.INK_OPACITY: | ||
| 8915 | this.#updateOpacity(value); | ||
| 8916 | break; | ||
| 8917 | } | ||
| 8918 | } | ||
| 8919 | static get defaultPropertiesToUpdate() { | ||
| 8920 | return [[util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; | ||
| 8921 | } | ||
| 8922 | get propertiesToUpdate() { | ||
| 8923 | return [[util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; | ||
| 8924 | } | ||
| 8925 | #updateThickness(thickness) { | ||
| 8926 | const savedThickness = this.thickness; | ||
| 8927 | this.addCommands({ | ||
| 8928 | cmd: () => { | ||
| 8929 | this.thickness = thickness; | ||
| 8930 | this.#fitToContent(); | ||
| 8931 | }, | ||
| 8932 | undo: () => { | ||
| 8933 | this.thickness = savedThickness; | ||
| 8934 | this.#fitToContent(); | ||
| 8935 | }, | ||
| 8936 | mustExec: true, | ||
| 8937 | type: util.AnnotationEditorParamsType.INK_THICKNESS, | ||
| 8938 | overwriteIfSameType: true, | ||
| 8939 | keepUndo: true | ||
| 8940 | }); | ||
| 8941 | } | ||
| 8942 | #updateColor(color) { | ||
| 8943 | const savedColor = this.color; | ||
| 8944 | this.addCommands({ | ||
| 8945 | cmd: () => { | ||
| 8946 | this.color = color; | ||
| 8947 | this.#redraw(); | ||
| 8948 | }, | ||
| 8949 | undo: () => { | ||
| 8950 | this.color = savedColor; | ||
| 8951 | this.#redraw(); | ||
| 8952 | }, | ||
| 8953 | mustExec: true, | ||
| 8954 | type: util.AnnotationEditorParamsType.INK_COLOR, | ||
| 8955 | overwriteIfSameType: true, | ||
| 8956 | keepUndo: true | ||
| 8957 | }); | ||
| 8958 | } | ||
| 8959 | #updateOpacity(opacity) { | ||
| 8960 | opacity /= 100; | ||
| 8961 | const savedOpacity = this.opacity; | ||
| 8962 | this.addCommands({ | ||
| 8963 | cmd: () => { | ||
| 8964 | this.opacity = opacity; | ||
| 8965 | this.#redraw(); | ||
| 8966 | }, | ||
| 8967 | undo: () => { | ||
| 8968 | this.opacity = savedOpacity; | ||
| 8969 | this.#redraw(); | ||
| 8970 | }, | ||
| 8971 | mustExec: true, | ||
| 8972 | type: util.AnnotationEditorParamsType.INK_OPACITY, | ||
| 8973 | overwriteIfSameType: true, | ||
| 8974 | keepUndo: true | ||
| 8975 | }); | ||
| 8976 | } | ||
| 8977 | rebuild() { | ||
| 8978 | if (!this.parent) { | ||
| 8979 | return; | ||
| 8980 | } | ||
| 8981 | super.rebuild(); | ||
| 8982 | if (this.div === null) { | ||
| 8983 | return; | ||
| 8984 | } | ||
| 8985 | if (!this.canvas) { | ||
| 8986 | this.#createCanvas(); | ||
| 8987 | this.#createObserver(); | ||
| 8988 | } | ||
| 8989 | if (!this.isAttachedToDOM) { | ||
| 8990 | this.parent.add(this); | ||
| 8991 | this.#setCanvasDims(); | ||
| 8992 | } | ||
| 8993 | this.#fitToContent(); | ||
| 8994 | } | ||
| 8995 | remove() { | ||
| 8996 | if (this.canvas === null) { | ||
| 8997 | return; | ||
| 8998 | } | ||
| 8999 | if (!this.isEmpty()) { | ||
| 9000 | this.commit(); | ||
| 9001 | } | ||
| 9002 | this.canvas.width = this.canvas.height = 0; | ||
| 9003 | this.canvas.remove(); | ||
| 9004 | this.canvas = null; | ||
| 9005 | if (this.#canvasContextMenuTimeoutId) { | ||
| 9006 | clearTimeout(this.#canvasContextMenuTimeoutId); | ||
| 9007 | this.#canvasContextMenuTimeoutId = null; | ||
| 9008 | } | ||
| 9009 | this.#observer.disconnect(); | ||
| 9010 | this.#observer = null; | ||
| 9011 | super.remove(); | ||
| 9012 | } | ||
| 9013 | setParent(parent) { | ||
| 9014 | if (!this.parent && parent) { | ||
| 9015 | this._uiManager.removeShouldRescale(this); | ||
| 9016 | } else if (this.parent && parent === null) { | ||
| 9017 | this._uiManager.addShouldRescale(this); | ||
| 9018 | } | ||
| 9019 | super.setParent(parent); | ||
| 9020 | } | ||
| 9021 | onScaleChanging() { | ||
| 9022 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9023 | const width = this.width * parentWidth; | ||
| 9024 | const height = this.height * parentHeight; | ||
| 9025 | this.setDimensions(width, height); | ||
| 9026 | } | ||
| 9027 | enableEditMode() { | ||
| 9028 | if (this.#disableEditing || this.canvas === null) { | ||
| 9029 | return; | ||
| 9030 | } | ||
| 9031 | super.enableEditMode(); | ||
| 9032 | this._isDraggable = false; | ||
| 9033 | this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); | ||
| 9034 | } | ||
| 9035 | disableEditMode() { | ||
| 9036 | if (!this.isInEditMode() || this.canvas === null) { | ||
| 9037 | return; | ||
| 9038 | } | ||
| 9039 | super.disableEditMode(); | ||
| 9040 | this._isDraggable = !this.isEmpty(); | ||
| 9041 | this.div.classList.remove("editing"); | ||
| 9042 | this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); | ||
| 9043 | } | ||
| 9044 | onceAdded() { | ||
| 9045 | this._isDraggable = !this.isEmpty(); | ||
| 9046 | } | ||
| 9047 | isEmpty() { | ||
| 9048 | return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; | ||
| 9049 | } | ||
| 9050 | #getInitialBBox() { | ||
| 9051 | const { | ||
| 9052 | parentRotation, | ||
| 9053 | parentDimensions: [width, height] | ||
| 9054 | } = this; | ||
| 9055 | switch (parentRotation) { | ||
| 9056 | case 90: | ||
| 9057 | return [0, height, height, width]; | ||
| 9058 | case 180: | ||
| 9059 | return [width, height, width, height]; | ||
| 9060 | case 270: | ||
| 9061 | return [width, 0, height, width]; | ||
| 9062 | default: | ||
| 9063 | return [0, 0, width, height]; | ||
| 9064 | } | ||
| 9065 | } | ||
| 9066 | #setStroke() { | ||
| 9067 | const { | ||
| 9068 | ctx, | ||
| 9069 | color, | ||
| 9070 | opacity, | ||
| 9071 | thickness, | ||
| 9072 | parentScale, | ||
| 9073 | scaleFactor | ||
| 9074 | } = this; | ||
| 9075 | ctx.lineWidth = thickness * parentScale / scaleFactor; | ||
| 9076 | ctx.lineCap = "round"; | ||
| 9077 | ctx.lineJoin = "round"; | ||
| 9078 | ctx.miterLimit = 10; | ||
| 9079 | ctx.strokeStyle = `${color}${(0,tools.opacityToHex)(opacity)}`; | ||
| 9080 | } | ||
| 9081 | #startDrawing(x, y) { | ||
| 9082 | this.canvas.addEventListener("contextmenu", display_utils.noContextMenu); | ||
| 9083 | this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); | ||
| 9084 | this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); | ||
| 9085 | this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); | ||
| 9086 | this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); | ||
| 9087 | this.isEditing = true; | ||
| 9088 | if (!this.#isCanvasInitialized) { | ||
| 9089 | this.#isCanvasInitialized = true; | ||
| 9090 | this.#setCanvasDims(); | ||
| 9091 | this.thickness ||= InkEditor._defaultThickness; | ||
| 9092 | this.color ||= InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; | ||
| 9093 | this.opacity ??= InkEditor._defaultOpacity; | ||
| 9094 | } | ||
| 9095 | this.currentPath.push([x, y]); | ||
| 9096 | this.#hasSomethingToDraw = false; | ||
| 9097 | this.#setStroke(); | ||
| 9098 | this.#requestFrameCallback = () => { | ||
| 9099 | this.#drawPoints(); | ||
| 9100 | if (this.#requestFrameCallback) { | ||
| 9101 | window.requestAnimationFrame(this.#requestFrameCallback); | ||
| 9102 | } | ||
| 9103 | }; | ||
| 9104 | window.requestAnimationFrame(this.#requestFrameCallback); | ||
| 9105 | } | ||
| 9106 | #draw(x, y) { | ||
| 9107 | const [lastX, lastY] = this.currentPath.at(-1); | ||
| 9108 | if (this.currentPath.length > 1 && x === lastX && y === lastY) { | ||
| 9109 | return; | ||
| 9110 | } | ||
| 9111 | const currentPath = this.currentPath; | ||
| 9112 | let path2D = this.#currentPath2D; | ||
| 9113 | currentPath.push([x, y]); | ||
| 9114 | this.#hasSomethingToDraw = true; | ||
| 9115 | if (currentPath.length <= 2) { | ||
| 9116 | path2D.moveTo(...currentPath[0]); | ||
| 9117 | path2D.lineTo(x, y); | ||
| 9118 | return; | ||
| 9119 | } | ||
| 9120 | if (currentPath.length === 3) { | ||
| 9121 | this.#currentPath2D = path2D = new Path2D(); | ||
| 9122 | path2D.moveTo(...currentPath[0]); | ||
| 9123 | } | ||
| 9124 | this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); | ||
| 9125 | } | ||
| 9126 | #endPath() { | ||
| 9127 | if (this.currentPath.length === 0) { | ||
| 9128 | return; | ||
| 9129 | } | ||
| 9130 | const lastPoint = this.currentPath.at(-1); | ||
| 9131 | this.#currentPath2D.lineTo(...lastPoint); | ||
| 9132 | } | ||
| 9133 | #stopDrawing(x, y) { | ||
| 9134 | this.#requestFrameCallback = null; | ||
| 9135 | x = Math.min(Math.max(x, 0), this.canvas.width); | ||
| 9136 | y = Math.min(Math.max(y, 0), this.canvas.height); | ||
| 9137 | this.#draw(x, y); | ||
| 9138 | this.#endPath(); | ||
| 9139 | let bezier; | ||
| 9140 | if (this.currentPath.length !== 1) { | ||
| 9141 | bezier = this.#generateBezierPoints(); | ||
| 9142 | } else { | ||
| 9143 | const xy = [x, y]; | ||
| 9144 | bezier = [[xy, xy.slice(), xy.slice(), xy]]; | ||
| 9145 | } | ||
| 9146 | const path2D = this.#currentPath2D; | ||
| 9147 | const currentPath = this.currentPath; | ||
| 9148 | this.currentPath = []; | ||
| 9149 | this.#currentPath2D = new Path2D(); | ||
| 9150 | const cmd = () => { | ||
| 9151 | this.allRawPaths.push(currentPath); | ||
| 9152 | this.paths.push(bezier); | ||
| 9153 | this.bezierPath2D.push(path2D); | ||
| 9154 | this.rebuild(); | ||
| 9155 | }; | ||
| 9156 | const undo = () => { | ||
| 9157 | this.allRawPaths.pop(); | ||
| 9158 | this.paths.pop(); | ||
| 9159 | this.bezierPath2D.pop(); | ||
| 9160 | if (this.paths.length === 0) { | ||
| 9161 | this.remove(); | ||
| 9162 | } else { | ||
| 9163 | if (!this.canvas) { | ||
| 9164 | this.#createCanvas(); | ||
| 9165 | this.#createObserver(); | ||
| 9166 | } | ||
| 9167 | this.#fitToContent(); | ||
| 9168 | } | ||
| 9169 | }; | ||
| 9170 | this.addCommands({ | ||
| 9171 | cmd, | ||
| 9172 | undo, | ||
| 9173 | mustExec: true | ||
| 9174 | }); | ||
| 9175 | } | ||
| 9176 | #drawPoints() { | ||
| 9177 | if (!this.#hasSomethingToDraw) { | ||
| 9178 | return; | ||
| 9179 | } | ||
| 9180 | this.#hasSomethingToDraw = false; | ||
| 9181 | const thickness = Math.ceil(this.thickness * this.parentScale); | ||
| 9182 | const lastPoints = this.currentPath.slice(-3); | ||
| 9183 | const x = lastPoints.map(xy => xy[0]); | ||
| 9184 | const y = lastPoints.map(xy => xy[1]); | ||
| 9185 | const xMin = Math.min(...x) - thickness; | ||
| 9186 | const xMax = Math.max(...x) + thickness; | ||
| 9187 | const yMin = Math.min(...y) - thickness; | ||
| 9188 | const yMax = Math.max(...y) + thickness; | ||
| 9189 | const { | ||
| 9190 | ctx | ||
| 9191 | } = this; | ||
| 9192 | ctx.save(); | ||
| 9193 | ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); | ||
| 9194 | for (const path of this.bezierPath2D) { | ||
| 9195 | ctx.stroke(path); | ||
| 9196 | } | ||
| 9197 | ctx.stroke(this.#currentPath2D); | ||
| 9198 | ctx.restore(); | ||
| 9199 | } | ||
| 9200 | #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) { | ||
| 9201 | const prevX = (x0 + x1) / 2; | ||
| 9202 | const prevY = (y0 + y1) / 2; | ||
| 9203 | const x3 = (x1 + x2) / 2; | ||
| 9204 | const y3 = (y1 + y2) / 2; | ||
| 9205 | path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); | ||
| 9206 | } | ||
| 9207 | #generateBezierPoints() { | ||
| 9208 | const path = this.currentPath; | ||
| 9209 | if (path.length <= 2) { | ||
| 9210 | return [[path[0], path[0], path.at(-1), path.at(-1)]]; | ||
| 9211 | } | ||
| 9212 | const bezierPoints = []; | ||
| 9213 | let i; | ||
| 9214 | let [x0, y0] = path[0]; | ||
| 9215 | for (i = 1; i < path.length - 2; i++) { | ||
| 9216 | const [x1, y1] = path[i]; | ||
| 9217 | const [x2, y2] = path[i + 1]; | ||
| 9218 | const x3 = (x1 + x2) / 2; | ||
| 9219 | const y3 = (y1 + y2) / 2; | ||
| 9220 | const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; | ||
| 9221 | const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3]; | ||
| 9222 | bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]); | ||
| 9223 | [x0, y0] = [x3, y3]; | ||
| 9224 | } | ||
| 9225 | const [x1, y1] = path[i]; | ||
| 9226 | const [x2, y2] = path[i + 1]; | ||
| 9227 | const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; | ||
| 9228 | const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; | ||
| 9229 | bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); | ||
| 9230 | return bezierPoints; | ||
| 9231 | } | ||
| 9232 | #redraw() { | ||
| 9233 | if (this.isEmpty()) { | ||
| 9234 | this.#updateTransform(); | ||
| 9235 | return; | ||
| 9236 | } | ||
| 9237 | this.#setStroke(); | ||
| 9238 | const { | ||
| 9239 | canvas, | ||
| 9240 | ctx | ||
| 9241 | } = this; | ||
| 9242 | ctx.setTransform(1, 0, 0, 1, 0, 0); | ||
| 9243 | ctx.clearRect(0, 0, canvas.width, canvas.height); | ||
| 9244 | this.#updateTransform(); | ||
| 9245 | for (const path of this.bezierPath2D) { | ||
| 9246 | ctx.stroke(path); | ||
| 9247 | } | ||
| 9248 | } | ||
| 9249 | commit() { | ||
| 9250 | if (this.#disableEditing) { | ||
| 9251 | return; | ||
| 9252 | } | ||
| 9253 | super.commit(); | ||
| 9254 | this.isEditing = false; | ||
| 9255 | this.disableEditMode(); | ||
| 9256 | this.setInForeground(); | ||
| 9257 | this.#disableEditing = true; | ||
| 9258 | this.div.classList.add("disabled"); | ||
| 9259 | this.#fitToContent(true); | ||
| 9260 | this.select(); | ||
| 9261 | this.parent.addInkEditorIfNeeded(true); | ||
| 9262 | this.moveInDOM(); | ||
| 9263 | this.div.focus({ | ||
| 9264 | preventScroll: true | ||
| 9265 | }); | ||
| 9266 | } | ||
| 9267 | focusin(event) { | ||
| 9268 | if (!this._focusEventsAllowed) { | ||
| 9269 | return; | ||
| 9270 | } | ||
| 9271 | super.focusin(event); | ||
| 9272 | this.enableEditMode(); | ||
| 9273 | } | ||
| 9274 | canvasPointerdown(event) { | ||
| 9275 | if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { | ||
| 9276 | return; | ||
| 9277 | } | ||
| 9278 | this.setInForeground(); | ||
| 9279 | event.preventDefault(); | ||
| 9280 | if (event.pointerType !== "mouse" && !this.div.contains(document.activeElement)) { | ||
| 9281 | this.div.focus({ | ||
| 9282 | preventScroll: true | ||
| 9283 | }); | ||
| 9284 | } | ||
| 9285 | this.#startDrawing(event.offsetX, event.offsetY); | ||
| 9286 | } | ||
| 9287 | canvasPointermove(event) { | ||
| 9288 | event.preventDefault(); | ||
| 9289 | this.#draw(event.offsetX, event.offsetY); | ||
| 9290 | } | ||
| 9291 | canvasPointerup(event) { | ||
| 9292 | event.preventDefault(); | ||
| 9293 | this.#endDrawing(event); | ||
| 9294 | } | ||
| 9295 | canvasPointerleave(event) { | ||
| 9296 | this.#endDrawing(event); | ||
| 9297 | } | ||
| 9298 | #endDrawing(event) { | ||
| 9299 | this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); | ||
| 9300 | this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); | ||
| 9301 | this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); | ||
| 9302 | this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); | ||
| 9303 | if (this.#canvasContextMenuTimeoutId) { | ||
| 9304 | clearTimeout(this.#canvasContextMenuTimeoutId); | ||
| 9305 | } | ||
| 9306 | this.#canvasContextMenuTimeoutId = setTimeout(() => { | ||
| 9307 | this.#canvasContextMenuTimeoutId = null; | ||
| 9308 | this.canvas.removeEventListener("contextmenu", display_utils.noContextMenu); | ||
| 9309 | }, 10); | ||
| 9310 | this.#stopDrawing(event.offsetX, event.offsetY); | ||
| 9311 | this.addToAnnotationStorage(); | ||
| 9312 | this.setInBackground(); | ||
| 9313 | } | ||
| 9314 | #createCanvas() { | ||
| 9315 | this.canvas = document.createElement("canvas"); | ||
| 9316 | this.canvas.width = this.canvas.height = 0; | ||
| 9317 | this.canvas.className = "inkEditorCanvas"; | ||
| 9318 | this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); | ||
| 9319 | this.div.append(this.canvas); | ||
| 9320 | this.ctx = this.canvas.getContext("2d"); | ||
| 9321 | } | ||
| 9322 | #createObserver() { | ||
| 9323 | this.#observer = new ResizeObserver(entries => { | ||
| 9324 | const rect = entries[0].contentRect; | ||
| 9325 | if (rect.width && rect.height) { | ||
| 9326 | this.setDimensions(rect.width, rect.height); | ||
| 9327 | } | ||
| 9328 | }); | ||
| 9329 | this.#observer.observe(this.div); | ||
| 9330 | } | ||
| 9331 | get isResizable() { | ||
| 9332 | return !this.isEmpty() && this.#disableEditing; | ||
| 9333 | } | ||
| 9334 | render() { | ||
| 9335 | if (this.div) { | ||
| 9336 | return this.div; | ||
| 9337 | } | ||
| 9338 | let baseX, baseY; | ||
| 9339 | if (this.width) { | ||
| 9340 | baseX = this.x; | ||
| 9341 | baseY = this.y; | ||
| 9342 | } | ||
| 9343 | super.render(); | ||
| 9344 | this.div.setAttribute("data-l10n-id", "pdfjs-ink"); | ||
| 9345 | const [x, y, w, h] = this.#getInitialBBox(); | ||
| 9346 | this.setAt(x, y, 0, 0); | ||
| 9347 | this.setDims(w, h); | ||
| 9348 | this.#createCanvas(); | ||
| 9349 | if (this.width) { | ||
| 9350 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9351 | this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); | ||
| 9352 | this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); | ||
| 9353 | this.#isCanvasInitialized = true; | ||
| 9354 | this.#setCanvasDims(); | ||
| 9355 | this.setDims(this.width * parentWidth, this.height * parentHeight); | ||
| 9356 | this.#redraw(); | ||
| 9357 | this.div.classList.add("disabled"); | ||
| 9358 | } else { | ||
| 9359 | this.div.classList.add("editing"); | ||
| 9360 | this.enableEditMode(); | ||
| 9361 | } | ||
| 9362 | this.#createObserver(); | ||
| 9363 | return this.div; | ||
| 9364 | } | ||
| 9365 | #setCanvasDims() { | ||
| 9366 | if (!this.#isCanvasInitialized) { | ||
| 9367 | return; | ||
| 9368 | } | ||
| 9369 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9370 | this.canvas.width = Math.ceil(this.width * parentWidth); | ||
| 9371 | this.canvas.height = Math.ceil(this.height * parentHeight); | ||
| 9372 | this.#updateTransform(); | ||
| 9373 | } | ||
| 9374 | setDimensions(width, height) { | ||
| 9375 | const roundedWidth = Math.round(width); | ||
| 9376 | const roundedHeight = Math.round(height); | ||
| 9377 | if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { | ||
| 9378 | return; | ||
| 9379 | } | ||
| 9380 | this.#realWidth = roundedWidth; | ||
| 9381 | this.#realHeight = roundedHeight; | ||
| 9382 | this.canvas.style.visibility = "hidden"; | ||
| 9383 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9384 | this.width = width / parentWidth; | ||
| 9385 | this.height = height / parentHeight; | ||
| 9386 | this.fixAndSetPosition(); | ||
| 9387 | if (this.#disableEditing) { | ||
| 9388 | this.#setScaleFactor(width, height); | ||
| 9389 | } | ||
| 9390 | this.#setCanvasDims(); | ||
| 9391 | this.#redraw(); | ||
| 9392 | this.canvas.style.visibility = "visible"; | ||
| 9393 | this.fixDims(); | ||
| 9394 | } | ||
| 9395 | #setScaleFactor(width, height) { | ||
| 9396 | const padding = this.#getPadding(); | ||
| 9397 | const scaleFactorW = (width - padding) / this.#baseWidth; | ||
| 9398 | const scaleFactorH = (height - padding) / this.#baseHeight; | ||
| 9399 | this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); | ||
| 9400 | } | ||
| 9401 | #updateTransform() { | ||
| 9402 | const padding = this.#getPadding() / 2; | ||
| 9403 | this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); | ||
| 9404 | } | ||
| 9405 | static #buildPath2D(bezier) { | ||
| 9406 | const path2D = new Path2D(); | ||
| 9407 | for (let i = 0, ii = bezier.length; i < ii; i++) { | ||
| 9408 | const [first, control1, control2, second] = bezier[i]; | ||
| 9409 | if (i === 0) { | ||
| 9410 | path2D.moveTo(...first); | ||
| 9411 | } | ||
| 9412 | path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); | ||
| 9413 | } | ||
| 9414 | return path2D; | ||
| 9415 | } | ||
| 9416 | static #toPDFCoordinates(points, rect, rotation) { | ||
| 9417 | const [blX, blY, trX, trY] = rect; | ||
| 9418 | switch (rotation) { | ||
| 9419 | case 0: | ||
| 9420 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9421 | points[i] += blX; | ||
| 9422 | points[i + 1] = trY - points[i + 1]; | ||
| 9423 | } | ||
| 9424 | break; | ||
| 9425 | case 90: | ||
| 9426 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9427 | const x = points[i]; | ||
| 9428 | points[i] = points[i + 1] + blX; | ||
| 9429 | points[i + 1] = x + blY; | ||
| 9430 | } | ||
| 9431 | break; | ||
| 9432 | case 180: | ||
| 9433 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9434 | points[i] = trX - points[i]; | ||
| 9435 | points[i + 1] += blY; | ||
| 9436 | } | ||
| 9437 | break; | ||
| 9438 | case 270: | ||
| 9439 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9440 | const x = points[i]; | ||
| 9441 | points[i] = trX - points[i + 1]; | ||
| 9442 | points[i + 1] = trY - x; | ||
| 9443 | } | ||
| 9444 | break; | ||
| 9445 | default: | ||
| 9446 | throw new Error("Invalid rotation"); | ||
| 9447 | } | ||
| 9448 | return points; | ||
| 9449 | } | ||
| 9450 | static #fromPDFCoordinates(points, rect, rotation) { | ||
| 9451 | const [blX, blY, trX, trY] = rect; | ||
| 9452 | switch (rotation) { | ||
| 9453 | case 0: | ||
| 9454 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9455 | points[i] -= blX; | ||
| 9456 | points[i + 1] = trY - points[i + 1]; | ||
| 9457 | } | ||
| 9458 | break; | ||
| 9459 | case 90: | ||
| 9460 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9461 | const x = points[i]; | ||
| 9462 | points[i] = points[i + 1] - blY; | ||
| 9463 | points[i + 1] = x - blX; | ||
| 9464 | } | ||
| 9465 | break; | ||
| 9466 | case 180: | ||
| 9467 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9468 | points[i] = trX - points[i]; | ||
| 9469 | points[i + 1] -= blY; | ||
| 9470 | } | ||
| 9471 | break; | ||
| 9472 | case 270: | ||
| 9473 | for (let i = 0, ii = points.length; i < ii; i += 2) { | ||
| 9474 | const x = points[i]; | ||
| 9475 | points[i] = trY - points[i + 1]; | ||
| 9476 | points[i + 1] = trX - x; | ||
| 9477 | } | ||
| 9478 | break; | ||
| 9479 | default: | ||
| 9480 | throw new Error("Invalid rotation"); | ||
| 9481 | } | ||
| 9482 | return points; | ||
| 9483 | } | ||
| 9484 | #serializePaths(s, tx, ty, rect) { | ||
| 9485 | const paths = []; | ||
| 9486 | const padding = this.thickness / 2; | ||
| 9487 | const shiftX = s * tx + padding; | ||
| 9488 | const shiftY = s * ty + padding; | ||
| 9489 | for (const bezier of this.paths) { | ||
| 9490 | const buffer = []; | ||
| 9491 | const points = []; | ||
| 9492 | for (let j = 0, jj = bezier.length; j < jj; j++) { | ||
| 9493 | const [first, control1, control2, second] = bezier[j]; | ||
| 9494 | const p10 = s * first[0] + shiftX; | ||
| 9495 | const p11 = s * first[1] + shiftY; | ||
| 9496 | const p20 = s * control1[0] + shiftX; | ||
| 9497 | const p21 = s * control1[1] + shiftY; | ||
| 9498 | const p30 = s * control2[0] + shiftX; | ||
| 9499 | const p31 = s * control2[1] + shiftY; | ||
| 9500 | const p40 = s * second[0] + shiftX; | ||
| 9501 | const p41 = s * second[1] + shiftY; | ||
| 9502 | if (j === 0) { | ||
| 9503 | buffer.push(p10, p11); | ||
| 9504 | points.push(p10, p11); | ||
| 9505 | } | ||
| 9506 | buffer.push(p20, p21, p30, p31, p40, p41); | ||
| 9507 | points.push(p20, p21); | ||
| 9508 | if (j === jj - 1) { | ||
| 9509 | points.push(p40, p41); | ||
| 9510 | } | ||
| 9511 | } | ||
| 9512 | paths.push({ | ||
| 9513 | bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation), | ||
| 9514 | points: InkEditor.#toPDFCoordinates(points, rect, this.rotation) | ||
| 9515 | }); | ||
| 9516 | } | ||
| 9517 | return paths; | ||
| 9518 | } | ||
| 9519 | #getBbox() { | ||
| 9520 | let xMin = Infinity; | ||
| 9521 | let xMax = -Infinity; | ||
| 9522 | let yMin = Infinity; | ||
| 9523 | let yMax = -Infinity; | ||
| 9524 | for (const path of this.paths) { | ||
| 9525 | for (const [first, control1, control2, second] of path) { | ||
| 9526 | const bbox = util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); | ||
| 9527 | xMin = Math.min(xMin, bbox[0]); | ||
| 9528 | yMin = Math.min(yMin, bbox[1]); | ||
| 9529 | xMax = Math.max(xMax, bbox[2]); | ||
| 9530 | yMax = Math.max(yMax, bbox[3]); | ||
| 9531 | } | ||
| 9532 | } | ||
| 9533 | return [xMin, yMin, xMax, yMax]; | ||
| 9534 | } | ||
| 9535 | #getPadding() { | ||
| 9536 | return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0; | ||
| 9537 | } | ||
| 9538 | #fitToContent(firstTime = false) { | ||
| 9539 | if (this.isEmpty()) { | ||
| 9540 | return; | ||
| 9541 | } | ||
| 9542 | if (!this.#disableEditing) { | ||
| 9543 | this.#redraw(); | ||
| 9544 | return; | ||
| 9545 | } | ||
| 9546 | const bbox = this.#getBbox(); | ||
| 9547 | const padding = this.#getPadding(); | ||
| 9548 | this.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); | ||
| 9549 | this.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); | ||
| 9550 | const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); | ||
| 9551 | const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); | ||
| 9552 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9553 | this.width = width / parentWidth; | ||
| 9554 | this.height = height / parentHeight; | ||
| 9555 | this.setAspectRatio(width, height); | ||
| 9556 | const prevTranslationX = this.translationX; | ||
| 9557 | const prevTranslationY = this.translationY; | ||
| 9558 | this.translationX = -bbox[0]; | ||
| 9559 | this.translationY = -bbox[1]; | ||
| 9560 | this.#setCanvasDims(); | ||
| 9561 | this.#redraw(); | ||
| 9562 | this.#realWidth = width; | ||
| 9563 | this.#realHeight = height; | ||
| 9564 | this.setDims(width, height); | ||
| 9565 | const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; | ||
| 9566 | this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); | ||
| 9567 | } | ||
| 9568 | static deserialize(data, parent, uiManager) { | ||
| 9569 | if (data instanceof annotation_layer.InkAnnotationElement) { | ||
| 9570 | return null; | ||
| 9571 | } | ||
| 9572 | const editor = super.deserialize(data, parent, uiManager); | ||
| 9573 | editor.thickness = data.thickness; | ||
| 9574 | editor.color = util.Util.makeHexColor(...data.color); | ||
| 9575 | editor.opacity = data.opacity; | ||
| 9576 | const [pageWidth, pageHeight] = editor.pageDimensions; | ||
| 9577 | const width = editor.width * pageWidth; | ||
| 9578 | const height = editor.height * pageHeight; | ||
| 9579 | const scaleFactor = editor.parentScale; | ||
| 9580 | const padding = data.thickness / 2; | ||
| 9581 | editor.#disableEditing = true; | ||
| 9582 | editor.#realWidth = Math.round(width); | ||
| 9583 | editor.#realHeight = Math.round(height); | ||
| 9584 | const { | ||
| 9585 | paths, | ||
| 9586 | rect, | ||
| 9587 | rotation | ||
| 9588 | } = data; | ||
| 9589 | for (let { | ||
| 9590 | bezier | ||
| 9591 | } of paths) { | ||
| 9592 | bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation); | ||
| 9593 | const path = []; | ||
| 9594 | editor.paths.push(path); | ||
| 9595 | let p0 = scaleFactor * (bezier[0] - padding); | ||
| 9596 | let p1 = scaleFactor * (bezier[1] - padding); | ||
| 9597 | for (let i = 2, ii = bezier.length; i < ii; i += 6) { | ||
| 9598 | const p10 = scaleFactor * (bezier[i] - padding); | ||
| 9599 | const p11 = scaleFactor * (bezier[i + 1] - padding); | ||
| 9600 | const p20 = scaleFactor * (bezier[i + 2] - padding); | ||
| 9601 | const p21 = scaleFactor * (bezier[i + 3] - padding); | ||
| 9602 | const p30 = scaleFactor * (bezier[i + 4] - padding); | ||
| 9603 | const p31 = scaleFactor * (bezier[i + 5] - padding); | ||
| 9604 | path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); | ||
| 9605 | p0 = p30; | ||
| 9606 | p1 = p31; | ||
| 9607 | } | ||
| 9608 | const path2D = this.#buildPath2D(path); | ||
| 9609 | editor.bezierPath2D.push(path2D); | ||
| 9610 | } | ||
| 9611 | const bbox = editor.#getBbox(); | ||
| 9612 | editor.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); | ||
| 9613 | editor.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); | ||
| 9614 | editor.#setScaleFactor(width, height); | ||
| 9615 | return editor; | ||
| 9616 | } | ||
| 9617 | serialize() { | ||
| 9618 | if (this.isEmpty()) { | ||
| 9619 | return null; | ||
| 9620 | } | ||
| 9621 | const rect = this.getRect(0, 0); | ||
| 9622 | const color = editor_editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); | ||
| 9623 | return { | ||
| 9624 | annotationType: util.AnnotationEditorType.INK, | ||
| 9625 | color, | ||
| 9626 | thickness: this.thickness, | ||
| 9627 | opacity: this.opacity, | ||
| 9628 | paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), | ||
| 9629 | pageIndex: this.pageIndex, | ||
| 9630 | rect, | ||
| 9631 | rotation: this.rotation, | ||
| 9632 | structTreeParentId: this._structTreeParentId | ||
| 9633 | }; | ||
| 9634 | } | ||
| 9635 | } | ||
| 9636 | |||
| 9637 | ;// CONCATENATED MODULE: ./src/display/editor/stamp.js | ||
| 9638 | |||
| 9639 | |||
| 9640 | |||
| 9641 | |||
| 9642 | class StampEditor extends editor_editor.AnnotationEditor { | ||
| 9643 | #bitmap = null; | ||
| 9644 | #bitmapId = null; | ||
| 9645 | #bitmapPromise = null; | ||
| 9646 | #bitmapUrl = null; | ||
| 9647 | #bitmapFile = null; | ||
| 9648 | #bitmapFileName = ""; | ||
| 9649 | #canvas = null; | ||
| 9650 | #observer = null; | ||
| 9651 | #resizeTimeoutId = null; | ||
| 9652 | #isSvg = false; | ||
| 9653 | #hasBeenAddedInUndoStack = false; | ||
| 9654 | static _type = "stamp"; | ||
| 9655 | static _editorType = util.AnnotationEditorType.STAMP; | ||
| 9656 | constructor(params) { | ||
| 9657 | super({ | ||
| 9658 | ...params, | ||
| 9659 | name: "stampEditor" | ||
| 9660 | }); | ||
| 9661 | this.#bitmapUrl = params.bitmapUrl; | ||
| 9662 | this.#bitmapFile = params.bitmapFile; | ||
| 9663 | } | ||
| 9664 | static initialize(l10n) { | ||
| 9665 | editor_editor.AnnotationEditor.initialize(l10n); | ||
| 9666 | } | ||
| 9667 | static get supportedTypes() { | ||
| 9668 | const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; | ||
| 9669 | return (0,util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`)); | ||
| 9670 | } | ||
| 9671 | static get supportedTypesStr() { | ||
| 9672 | return (0,util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(",")); | ||
| 9673 | } | ||
| 9674 | static isHandlingMimeForPasting(mime) { | ||
| 9675 | return this.supportedTypes.includes(mime); | ||
| 9676 | } | ||
| 9677 | static paste(item, parent) { | ||
| 9678 | parent.pasteEditor(util.AnnotationEditorType.STAMP, { | ||
| 9679 | bitmapFile: item.getAsFile() | ||
| 9680 | }); | ||
| 9681 | } | ||
| 9682 | #getBitmapFetched(data, fromId = false) { | ||
| 9683 | if (!data) { | ||
| 9684 | this.remove(); | ||
| 9685 | return; | ||
| 9686 | } | ||
| 9687 | this.#bitmap = data.bitmap; | ||
| 9688 | if (!fromId) { | ||
| 9689 | this.#bitmapId = data.id; | ||
| 9690 | this.#isSvg = data.isSvg; | ||
| 9691 | } | ||
| 9692 | if (data.file) { | ||
| 9693 | this.#bitmapFileName = data.file.name; | ||
| 9694 | } | ||
| 9695 | this.#createCanvas(); | ||
| 9696 | } | ||
| 9697 | #getBitmapDone() { | ||
| 9698 | this.#bitmapPromise = null; | ||
| 9699 | this._uiManager.enableWaiting(false); | ||
| 9700 | if (this.#canvas) { | ||
| 9701 | this.div.focus(); | ||
| 9702 | } | ||
| 9703 | } | ||
| 9704 | #getBitmap() { | ||
| 9705 | if (this.#bitmapId) { | ||
| 9706 | this._uiManager.enableWaiting(true); | ||
| 9707 | this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); | ||
| 9708 | return; | ||
| 9709 | } | ||
| 9710 | if (this.#bitmapUrl) { | ||
| 9711 | const url = this.#bitmapUrl; | ||
| 9712 | this.#bitmapUrl = null; | ||
| 9713 | this._uiManager.enableWaiting(true); | ||
| 9714 | this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); | ||
| 9715 | return; | ||
| 9716 | } | ||
| 9717 | if (this.#bitmapFile) { | ||
| 9718 | const file = this.#bitmapFile; | ||
| 9719 | this.#bitmapFile = null; | ||
| 9720 | this._uiManager.enableWaiting(true); | ||
| 9721 | this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); | ||
| 9722 | return; | ||
| 9723 | } | ||
| 9724 | const input = document.createElement("input"); | ||
| 9725 | input.type = "file"; | ||
| 9726 | input.accept = StampEditor.supportedTypesStr; | ||
| 9727 | this.#bitmapPromise = new Promise(resolve => { | ||
| 9728 | input.addEventListener("change", async () => { | ||
| 9729 | if (!input.files || input.files.length === 0) { | ||
| 9730 | this.remove(); | ||
| 9731 | } else { | ||
| 9732 | this._uiManager.enableWaiting(true); | ||
| 9733 | const data = await this._uiManager.imageManager.getFromFile(input.files[0]); | ||
| 9734 | this.#getBitmapFetched(data); | ||
| 9735 | } | ||
| 9736 | resolve(); | ||
| 9737 | }); | ||
| 9738 | input.addEventListener("cancel", () => { | ||
| 9739 | this.remove(); | ||
| 9740 | resolve(); | ||
| 9741 | }); | ||
| 9742 | }).finally(() => this.#getBitmapDone()); | ||
| 9743 | input.click(); | ||
| 9744 | } | ||
| 9745 | remove() { | ||
| 9746 | if (this.#bitmapId) { | ||
| 9747 | this.#bitmap = null; | ||
| 9748 | this._uiManager.imageManager.deleteId(this.#bitmapId); | ||
| 9749 | this.#canvas?.remove(); | ||
| 9750 | this.#canvas = null; | ||
| 9751 | this.#observer?.disconnect(); | ||
| 9752 | this.#observer = null; | ||
| 9753 | if (this.#resizeTimeoutId) { | ||
| 9754 | clearTimeout(this.#resizeTimeoutId); | ||
| 9755 | this.#resizeTimeoutId = null; | ||
| 9756 | } | ||
| 9757 | } | ||
| 9758 | super.remove(); | ||
| 9759 | } | ||
| 9760 | rebuild() { | ||
| 9761 | if (!this.parent) { | ||
| 9762 | if (this.#bitmapId) { | ||
| 9763 | this.#getBitmap(); | ||
| 9764 | } | ||
| 9765 | return; | ||
| 9766 | } | ||
| 9767 | super.rebuild(); | ||
| 9768 | if (this.div === null) { | ||
| 9769 | return; | ||
| 9770 | } | ||
| 9771 | if (this.#bitmapId) { | ||
| 9772 | this.#getBitmap(); | ||
| 9773 | } | ||
| 9774 | if (!this.isAttachedToDOM) { | ||
| 9775 | this.parent.add(this); | ||
| 9776 | } | ||
| 9777 | } | ||
| 9778 | onceAdded() { | ||
| 9779 | this._isDraggable = true; | ||
| 9780 | this.div.focus(); | ||
| 9781 | } | ||
| 9782 | isEmpty() { | ||
| 9783 | return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile); | ||
| 9784 | } | ||
| 9785 | get isResizable() { | ||
| 9786 | return true; | ||
| 9787 | } | ||
| 9788 | render() { | ||
| 9789 | if (this.div) { | ||
| 9790 | return this.div; | ||
| 9791 | } | ||
| 9792 | let baseX, baseY; | ||
| 9793 | if (this.width) { | ||
| 9794 | baseX = this.x; | ||
| 9795 | baseY = this.y; | ||
| 9796 | } | ||
| 9797 | super.render(); | ||
| 9798 | this.div.hidden = true; | ||
| 9799 | if (this.#bitmap) { | ||
| 9800 | this.#createCanvas(); | ||
| 9801 | } else { | ||
| 9802 | this.#getBitmap(); | ||
| 9803 | } | ||
| 9804 | if (this.width) { | ||
| 9805 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9806 | this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); | ||
| 9807 | } | ||
| 9808 | return this.div; | ||
| 9809 | } | ||
| 9810 | #createCanvas() { | ||
| 9811 | const { | ||
| 9812 | div | ||
| 9813 | } = this; | ||
| 9814 | let { | ||
| 9815 | width, | ||
| 9816 | height | ||
| 9817 | } = this.#bitmap; | ||
| 9818 | const [pageWidth, pageHeight] = this.pageDimensions; | ||
| 9819 | const MAX_RATIO = 0.75; | ||
| 9820 | if (this.width) { | ||
| 9821 | width = this.width * pageWidth; | ||
| 9822 | height = this.height * pageHeight; | ||
| 9823 | } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { | ||
| 9824 | const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); | ||
| 9825 | width *= factor; | ||
| 9826 | height *= factor; | ||
| 9827 | } | ||
| 9828 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9829 | this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); | ||
| 9830 | this._uiManager.enableWaiting(false); | ||
| 9831 | const canvas = this.#canvas = document.createElement("canvas"); | ||
| 9832 | div.append(canvas); | ||
| 9833 | div.hidden = false; | ||
| 9834 | this.#drawBitmap(width, height); | ||
| 9835 | this.#createObserver(); | ||
| 9836 | if (!this.#hasBeenAddedInUndoStack) { | ||
| 9837 | this.parent.addUndoableEditor(this); | ||
| 9838 | this.#hasBeenAddedInUndoStack = true; | ||
| 9839 | } | ||
| 9840 | this._uiManager._eventBus.dispatch("reporttelemetry", { | ||
| 9841 | source: this, | ||
| 9842 | details: { | ||
| 9843 | type: "editing", | ||
| 9844 | subtype: this.editorType, | ||
| 9845 | data: { | ||
| 9846 | action: "inserted_image" | ||
| 9847 | } | ||
| 9848 | } | ||
| 9849 | }); | ||
| 9850 | this.addAltTextButton(); | ||
| 9851 | if (this.#bitmapFileName) { | ||
| 9852 | canvas.setAttribute("aria-label", this.#bitmapFileName); | ||
| 9853 | } | ||
| 9854 | } | ||
| 9855 | #setDimensions(width, height) { | ||
| 9856 | const [parentWidth, parentHeight] = this.parentDimensions; | ||
| 9857 | this.width = width / parentWidth; | ||
| 9858 | this.height = height / parentHeight; | ||
| 9859 | this.setDims(width, height); | ||
| 9860 | if (this._initialOptions?.isCentered) { | ||
| 9861 | this.center(); | ||
| 9862 | } else { | ||
| 9863 | this.fixAndSetPosition(); | ||
| 9864 | } | ||
| 9865 | this._initialOptions = null; | ||
| 9866 | if (this.#resizeTimeoutId !== null) { | ||
| 9867 | clearTimeout(this.#resizeTimeoutId); | ||
| 9868 | } | ||
| 9869 | const TIME_TO_WAIT = 200; | ||
| 9870 | this.#resizeTimeoutId = setTimeout(() => { | ||
| 9871 | this.#resizeTimeoutId = null; | ||
| 9872 | this.#drawBitmap(width, height); | ||
| 9873 | }, TIME_TO_WAIT); | ||
| 9874 | } | ||
| 9875 | #scaleBitmap(width, height) { | ||
| 9876 | const { | ||
| 9877 | width: bitmapWidth, | ||
| 9878 | height: bitmapHeight | ||
| 9879 | } = this.#bitmap; | ||
| 9880 | let newWidth = bitmapWidth; | ||
| 9881 | let newHeight = bitmapHeight; | ||
| 9882 | let bitmap = this.#bitmap; | ||
| 9883 | while (newWidth > 2 * width || newHeight > 2 * height) { | ||
| 9884 | const prevWidth = newWidth; | ||
| 9885 | const prevHeight = newHeight; | ||
| 9886 | if (newWidth > 2 * width) { | ||
| 9887 | newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); | ||
| 9888 | } | ||
| 9889 | if (newHeight > 2 * height) { | ||
| 9890 | newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); | ||
| 9891 | } | ||
| 9892 | const offscreen = new OffscreenCanvas(newWidth, newHeight); | ||
| 9893 | const ctx = offscreen.getContext("2d"); | ||
| 9894 | ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); | ||
| 9895 | bitmap = offscreen.transferToImageBitmap(); | ||
| 9896 | } | ||
| 9897 | return bitmap; | ||
| 9898 | } | ||
| 9899 | #drawBitmap(width, height) { | ||
| 9900 | width = Math.ceil(width); | ||
| 9901 | height = Math.ceil(height); | ||
| 9902 | const canvas = this.#canvas; | ||
| 9903 | if (!canvas || canvas.width === width && canvas.height === height) { | ||
| 9904 | return; | ||
| 9905 | } | ||
| 9906 | canvas.width = width; | ||
| 9907 | canvas.height = height; | ||
| 9908 | const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); | ||
| 9909 | const ctx = canvas.getContext("2d"); | ||
| 9910 | ctx.filter = this._uiManager.hcmFilter; | ||
| 9911 | ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); | ||
| 9912 | } | ||
| 9913 | getImageForAltText() { | ||
| 9914 | return this.#canvas; | ||
| 9915 | } | ||
| 9916 | #serializeBitmap(toUrl) { | ||
| 9917 | if (toUrl) { | ||
| 9918 | if (this.#isSvg) { | ||
| 9919 | const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); | ||
| 9920 | if (url) { | ||
| 9921 | return url; | ||
| 9922 | } | ||
| 9923 | } | ||
| 9924 | const canvas = document.createElement("canvas"); | ||
| 9925 | ({ | ||
| 9926 | width: canvas.width, | ||
| 9927 | height: canvas.height | ||
| 9928 | } = this.#bitmap); | ||
| 9929 | const ctx = canvas.getContext("2d"); | ||
| 9930 | ctx.drawImage(this.#bitmap, 0, 0); | ||
| 9931 | return canvas.toDataURL(); | ||
| 9932 | } | ||
| 9933 | if (this.#isSvg) { | ||
| 9934 | const [pageWidth, pageHeight] = this.pageDimensions; | ||
| 9935 | const width = Math.round(this.width * pageWidth * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); | ||
| 9936 | const height = Math.round(this.height * pageHeight * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); | ||
| 9937 | const offscreen = new OffscreenCanvas(width, height); | ||
| 9938 | const ctx = offscreen.getContext("2d"); | ||
| 9939 | ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); | ||
| 9940 | return offscreen.transferToImageBitmap(); | ||
| 9941 | } | ||
| 9942 | return structuredClone(this.#bitmap); | ||
| 9943 | } | ||
| 9944 | #createObserver() { | ||
| 9945 | this.#observer = new ResizeObserver(entries => { | ||
| 9946 | const rect = entries[0].contentRect; | ||
| 9947 | if (rect.width && rect.height) { | ||
| 9948 | this.#setDimensions(rect.width, rect.height); | ||
| 9949 | } | ||
| 9950 | }); | ||
| 9951 | this.#observer.observe(this.div); | ||
| 9952 | } | ||
| 9953 | static deserialize(data, parent, uiManager) { | ||
| 9954 | if (data instanceof annotation_layer.StampAnnotationElement) { | ||
| 9955 | return null; | ||
| 9956 | } | ||
| 9957 | const editor = super.deserialize(data, parent, uiManager); | ||
| 9958 | const { | ||
| 9959 | rect, | ||
| 9960 | bitmapUrl, | ||
| 9961 | bitmapId, | ||
| 9962 | isSvg, | ||
| 9963 | accessibilityData | ||
| 9964 | } = data; | ||
| 9965 | if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { | ||
| 9966 | editor.#bitmapId = bitmapId; | ||
| 9967 | } else { | ||
| 9968 | editor.#bitmapUrl = bitmapUrl; | ||
| 9969 | } | ||
| 9970 | editor.#isSvg = isSvg; | ||
| 9971 | const [parentWidth, parentHeight] = editor.pageDimensions; | ||
| 9972 | editor.width = (rect[2] - rect[0]) / parentWidth; | ||
| 9973 | editor.height = (rect[3] - rect[1]) / parentHeight; | ||
| 9974 | if (accessibilityData) { | ||
| 9975 | editor.altTextData = accessibilityData; | ||
| 9976 | } | ||
Diff truncated