vue-files-preview-inno
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
1 lines • 36.1 kB
Source Map (JSON)
{"version":3,"file":"iframe.mjs","sources":["../../../../../../../node_modules/epubjs/src/managers/views/iframe.js"],"sourcesContent":["import EventEmitter from \"event-emitter\";\nimport {extend, borders, uuid, isNumber, bounds, defer, createBlobUrl, revokeBlobUrl} from \"../../utils/core\";\nimport EpubCFI from \"../../epubcfi\";\nimport Contents from \"../../contents\";\nimport { EVENTS } from \"../../utils/constants\";\nimport { Pane, Highlight, Underline } from \"marks-pane\";\n\nclass IframeView {\n\tconstructor(section, options) {\n\t\tthis.settings = extend({\n\t\t\tignoreClass : \"\",\n\t\t\taxis: undefined, //options.layout && options.layout.props.flow === \"scrolled\" ? \"vertical\" : \"horizontal\",\n\t\t\tdirection: undefined,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tlayout: undefined,\n\t\t\tglobalLayoutProperties: {},\n\t\t\tmethod: undefined,\n\t\t\tforceRight: false,\n\t\t\tallowScriptedContent: false,\n\t\t\tallowPopups: false\n\t\t}, options || {});\n\n\t\tthis.id = \"epubjs-view-\" + uuid();\n\t\tthis.section = section;\n\t\tthis.index = section.index;\n\n\t\tthis.element = this.container(this.settings.axis);\n\n\t\tthis.added = false;\n\t\tthis.displayed = false;\n\t\tthis.rendered = false;\n\n\t\t// this.width = this.settings.width;\n\t\t// this.height = this.settings.height;\n\n\t\tthis.fixedWidth = 0;\n\t\tthis.fixedHeight = 0;\n\n\t\t// Blank Cfi for Parsing\n\t\tthis.epubcfi = new EpubCFI();\n\n\t\tthis.layout = this.settings.layout;\n\t\t// Dom events to listen for\n\t\t// this.listenedEvents = [\"keydown\", \"keyup\", \"keypressed\", \"mouseup\", \"mousedown\", \"click\", \"touchend\", \"touchstart\"];\n\n\t\tthis.pane = undefined;\n\t\tthis.highlights = {};\n\t\tthis.underlines = {};\n\t\tthis.marks = {};\n\n\t}\n\n\tcontainer(axis) {\n\t\tvar element = document.createElement(\"div\");\n\n\t\telement.classList.add(\"epub-view\");\n\n\t\t// this.element.style.minHeight = \"100px\";\n\t\telement.style.height = \"0px\";\n\t\telement.style.width = \"0px\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.position = \"relative\";\n\t\telement.style.display = \"block\";\n\n\t\tif(axis && axis == \"horizontal\"){\n\t\t\telement.style.flex = \"none\";\n\t\t} else {\n\t\t\telement.style.flex = \"initial\";\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tcreate() {\n\n\t\tif(this.iframe) {\n\t\t\treturn this.iframe;\n\t\t}\n\n\t\tif(!this.element) {\n\t\t\tthis.element = this.createContainer();\n\t\t}\n\n\t\tthis.iframe = document.createElement(\"iframe\");\n\t\tthis.iframe.id = this.id;\n\t\tthis.iframe.scrolling = \"no\"; // Might need to be removed: breaks ios width calculations\n\t\tthis.iframe.style.overflow = \"hidden\";\n\t\tthis.iframe.seamless = \"seamless\";\n\t\t// Back up if seamless isn't supported\n\t\tthis.iframe.style.border = \"none\";\n\n\t\t// sandbox\n\t\tthis.iframe.sandbox = \"allow-same-origin\";\n\t\tif (this.settings.allowScriptedContent) {\n\t\t\tthis.iframe.sandbox += \" allow-scripts\";\n\t\t}\n\t\tif (this.settings.allowPopups) {\n\t\t\tthis.iframe.sandbox += \" allow-popups\";\n\t\t}\n\t\t\n\t\tthis.iframe.setAttribute(\"enable-annotation\", \"true\");\n\n\t\tthis.resizing = true;\n\n\t\t// this.iframe.style.display = \"none\";\n\t\tthis.element.style.visibility = \"hidden\";\n\t\tthis.iframe.style.visibility = \"hidden\";\n\n\t\tthis.iframe.style.width = \"0\";\n\t\tthis.iframe.style.height = \"0\";\n\t\tthis._width = 0;\n\t\tthis._height = 0;\n\n\t\tthis.element.setAttribute(\"ref\", this.index);\n\n\t\tthis.added = true;\n\n\t\tthis.elementBounds = bounds(this.element);\n\n\t\t// if(width || height){\n\t\t// this.resize(width, height);\n\t\t// } else if(this.width && this.height){\n\t\t// this.resize(this.width, this.height);\n\t\t// } else {\n\t\t// this.iframeBounds = bounds(this.iframe);\n\t\t// }\n\n\n\t\tif((\"srcdoc\" in this.iframe)) {\n\t\t\tthis.supportsSrcdoc = true;\n\t\t} else {\n\t\t\tthis.supportsSrcdoc = false;\n\t\t}\n\n\t\tif (!this.settings.method) {\n\t\t\tthis.settings.method = this.supportsSrcdoc ? \"srcdoc\" : \"write\";\n\t\t}\n\n\t\treturn this.iframe;\n\t}\n\n\trender(request, show) {\n\n\t\t// view.onLayout = this.layout.format.bind(this.layout);\n\t\tthis.create();\n\n\t\t// Fit to size of the container, apply padding\n\t\tthis.size();\n\n\t\tif(!this.sectionRender) {\n\t\t\tthis.sectionRender = this.section.render(request);\n\t\t}\n\n\t\t// Render Chain\n\t\treturn this.sectionRender\n\t\t\t.then(function(contents){\n\t\t\t\treturn this.load(contents);\n\t\t\t}.bind(this))\n\t\t\t.then(function(){\n\n\t\t\t\t// find and report the writingMode axis\n\t\t\t\tlet writingMode = this.contents.writingMode();\n\n\t\t\t\t// Set the axis based on the flow and writing mode\n\t\t\t\tlet axis;\n\t\t\t\tif (this.settings.flow === \"scrolled\") {\n\t\t\t\t\taxis = (writingMode.indexOf(\"vertical\") === 0) ? \"horizontal\" : \"vertical\";\n\t\t\t\t} else {\n\t\t\t\t\taxis = (writingMode.indexOf(\"vertical\") === 0) ? \"vertical\" : \"horizontal\";\n\t\t\t\t}\n\n\t\t\t\tif (writingMode.indexOf(\"vertical\") === 0 && this.settings.flow === \"paginated\") {\n\t\t\t\t\tthis.layout.delta = this.layout.height;\n\t\t\t\t}\n\n\t\t\t\tthis.setAxis(axis);\n\t\t\t\tthis.emit(EVENTS.VIEWS.AXIS, axis);\n\n\t\t\t\tthis.setWritingMode(writingMode);\n\t\t\t\tthis.emit(EVENTS.VIEWS.WRITING_MODE, writingMode);\n\n\n\t\t\t\t// apply the layout function to the contents\n\t\t\t\tthis.layout.format(this.contents, this.section, this.axis);\n\n\t\t\t\t// Listen for events that require an expansion of the iframe\n\t\t\t\tthis.addListeners();\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t// Expand the iframe to the full size of the content\n\t\t\t\t\tthis.expand();\n\n\t\t\t\t\tif (this.settings.forceRight) {\n\t\t\t\t\t\tthis.element.style.marginLeft = this.width() + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\n\t\t\t}.bind(this), function(e){\n\t\t\t\tthis.emit(EVENTS.VIEWS.LOAD_ERROR, e);\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\treject(e);\n\t\t\t\t});\n\t\t\t}.bind(this))\n\t\t\t.then(function() {\n\t\t\t\tthis.emit(EVENTS.VIEWS.RENDERED, this.section);\n\t\t\t}.bind(this));\n\n\t}\n\n\treset () {\n\t\tif (this.iframe) {\n\t\t\tthis.iframe.style.width = \"0\";\n\t\t\tthis.iframe.style.height = \"0\";\n\t\t\tthis._width = 0;\n\t\t\tthis._height = 0;\n\t\t\tthis._textWidth = undefined;\n\t\t\tthis._contentWidth = undefined;\n\t\t\tthis._textHeight = undefined;\n\t\t\tthis._contentHeight = undefined;\n\t\t}\n\t\tthis._needsReframe = true;\n\t}\n\n\t// Determine locks base on settings\n\tsize(_width, _height) {\n\t\tvar width = _width || this.settings.width;\n\t\tvar height = _height || this.settings.height;\n\n\t\tif(this.layout.name === \"pre-paginated\") {\n\t\t\tthis.lock(\"both\", width, height);\n\t\t} else if(this.settings.axis === \"horizontal\") {\n\t\t\tthis.lock(\"height\", width, height);\n\t\t} else {\n\t\t\tthis.lock(\"width\", width, height);\n\t\t}\n\n\t\tthis.settings.width = width;\n\t\tthis.settings.height = height;\n\t}\n\n\t// Lock an axis to element dimensions, taking borders into account\n\tlock(what, width, height) {\n\t\tvar elBorders = borders(this.element);\n\t\tvar iframeBorders;\n\n\t\tif(this.iframe) {\n\t\t\tiframeBorders = borders(this.iframe);\n\t\t} else {\n\t\t\tiframeBorders = {width: 0, height: 0};\n\t\t}\n\n\t\tif(what == \"width\" && isNumber(width)){\n\t\t\tthis.lockedWidth = width - elBorders.width - iframeBorders.width;\n\t\t\t// this.resize(this.lockedWidth, width); // width keeps ratio correct\n\t\t}\n\n\t\tif(what == \"height\" && isNumber(height)){\n\t\t\tthis.lockedHeight = height - elBorders.height - iframeBorders.height;\n\t\t\t// this.resize(width, this.lockedHeight);\n\t\t}\n\n\t\tif(what === \"both\" &&\n\t\t\t isNumber(width) &&\n\t\t\t isNumber(height)){\n\n\t\t\tthis.lockedWidth = width - elBorders.width - iframeBorders.width;\n\t\t\tthis.lockedHeight = height - elBorders.height - iframeBorders.height;\n\t\t\t// this.resize(this.lockedWidth, this.lockedHeight);\n\t\t}\n\n\t\tif(this.displayed && this.iframe) {\n\n\t\t\t// this.contents.layout();\n\t\t\tthis.expand();\n\t\t}\n\n\n\n\t}\n\n\t// Resize a single axis based on content dimensions\n\texpand(force) {\n\t\tvar width = this.lockedWidth;\n\t\tvar height = this.lockedHeight;\n\t\tvar columns;\n\n\t\tvar textWidth, textHeight;\n\n\t\tif(!this.iframe || this._expanding) return;\n\n\t\tthis._expanding = true;\n\n\t\tif(this.layout.name === \"pre-paginated\") {\n\t\t\twidth = this.layout.columnWidth;\n\t\t\theight = this.layout.height;\n\t\t}\n\t\t// Expand Horizontally\n\t\telse if(this.settings.axis === \"horizontal\") {\n\t\t\t// Get the width of the text\n\t\t\twidth = this.contents.textWidth();\n\n\t\t\tif (width % this.layout.pageWidth > 0) {\n\t\t\t\twidth = Math.ceil(width / this.layout.pageWidth) * this.layout.pageWidth;\n\t\t\t}\n\n\t\t\tif (this.settings.forceEvenPages) {\n\t\t\t\tcolumns = (width / this.layout.pageWidth);\n\t\t\t\tif ( this.layout.divisor > 1 &&\n\t\t\t\t\t\t this.layout.name === \"reflowable\" &&\n\t\t\t\t\t\t(columns % 2 > 0)) {\n\t\t\t\t\t// add a blank page\n\t\t\t\t\twidth += this.layout.pageWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} // Expand Vertically\n\t\telse if(this.settings.axis === \"vertical\") {\n\t\t\theight = this.contents.textHeight();\n\t\t\tif (this.settings.flow === \"paginated\" &&\n\t\t\t\theight % this.layout.height > 0) {\n\t\t\t\theight = Math.ceil(height / this.layout.height) * this.layout.height;\n\t\t\t}\n\t\t}\n\n\t\t// Only Resize if dimensions have changed or\n\t\t// if Frame is still hidden, so needs reframing\n\t\tif(this._needsReframe || width != this._width || height != this._height){\n\t\t\tthis.reframe(width, height);\n\t\t}\n\n\t\tthis._expanding = false;\n\t}\n\n\treframe(width, height) {\n\t\tvar size;\n\n\t\tif(isNumber(width)){\n\t\t\tthis.element.style.width = width + \"px\";\n\t\t\tthis.iframe.style.width = width + \"px\";\n\t\t\tthis._width = width;\n\t\t}\n\n\t\tif(isNumber(height)){\n\t\t\tthis.element.style.height = height + \"px\";\n\t\t\tthis.iframe.style.height = height + \"px\";\n\t\t\tthis._height = height;\n\t\t}\n\n\t\tlet widthDelta = this.prevBounds ? width - this.prevBounds.width : width;\n\t\tlet heightDelta = this.prevBounds ? height - this.prevBounds.height : height;\n\n\t\tsize = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthDelta: widthDelta,\n\t\t\theightDelta: heightDelta,\n\t\t};\n\n\t\tthis.pane && this.pane.render();\n\n\t\trequestAnimationFrame(() => {\n\t\t\tlet mark;\n\t\t\tfor (let m in this.marks) {\n\t\t\t\tif (this.marks.hasOwnProperty(m)) {\n\t\t\t\t\tmark = this.marks[m];\n\t\t\t\t\tthis.placeMark(mark.element, mark.range);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.onResize(this, size);\n\n\t\tthis.emit(EVENTS.VIEWS.RESIZED, size);\n\n\t\tthis.prevBounds = size;\n\n\t\tthis.elementBounds = bounds(this.element);\n\n\t}\n\n\n\tload(contents) {\n\t\tvar loading = new defer();\n\t\tvar loaded = loading.promise;\n\n\t\tif(!this.iframe) {\n\t\t\tloading.reject(new Error(\"No Iframe Available\"));\n\t\t\treturn loaded;\n\t\t}\n\n\t\tthis.iframe.onload = function(event) {\n\n\t\t\tthis.onLoad(event, loading);\n\n\t\t}.bind(this);\n\n\t\tif (this.settings.method === \"blobUrl\") {\n\t\t\tthis.blobUrl = createBlobUrl(contents, \"application/xhtml+xml\");\n\t\t\tthis.iframe.src = this.blobUrl;\n\t\t\tthis.element.appendChild(this.iframe);\n\t\t} else if(this.settings.method === \"srcdoc\"){\n\t\t\tthis.iframe.srcdoc = contents;\n\t\t\tthis.element.appendChild(this.iframe);\n\t\t} else {\n\n\t\t\tthis.element.appendChild(this.iframe);\n\n\t\t\tthis.document = this.iframe.contentDocument;\n\n\t\t\tif(!this.document) {\n\t\t\t\tloading.reject(new Error(\"No Document Available\"));\n\t\t\t\treturn loaded;\n\t\t\t}\n\n\t\t\tthis.iframe.contentDocument.open();\n\t\t\t// For Cordova windows platform\n\t\t\tif(window.MSApp && MSApp.execUnsafeLocalFunction) {\n\t\t\t\tvar outerThis = this;\n\t\t\t\tMSApp.execUnsafeLocalFunction(function () {\n\t\t\t\t\touterThis.iframe.contentDocument.write(contents);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.iframe.contentDocument.write(contents);\n\t\t\t}\n\t\t\tthis.iframe.contentDocument.close();\n\n\t\t}\n\n\t\treturn loaded;\n\t}\n\n\tonLoad(event, promise) {\n\n\t\tthis.window = this.iframe.contentWindow;\n\t\tthis.document = this.iframe.contentDocument;\n\n\t\tthis.contents = new Contents(this.document, this.document.body, this.section.cfiBase, this.section.index);\n\n\t\tthis.rendering = false;\n\n\t\tvar link = this.document.querySelector(\"link[rel='canonical']\");\n\t\tif (link) {\n\t\t\tlink.setAttribute(\"href\", this.section.canonical);\n\t\t} else {\n\t\t\tlink = this.document.createElement(\"link\");\n\t\t\tlink.setAttribute(\"rel\", \"canonical\");\n\t\t\tlink.setAttribute(\"href\", this.section.canonical);\n\t\t\tthis.document.querySelector(\"head\").appendChild(link);\n\t\t}\n\n\t\tthis.contents.on(EVENTS.CONTENTS.EXPAND, () => {\n\t\t\tif(this.displayed && this.iframe) {\n\t\t\t\tthis.expand();\n\t\t\t\tif (this.contents) {\n\t\t\t\t\tthis.layout.format(this.contents);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.contents.on(EVENTS.CONTENTS.RESIZE, (e) => {\n\t\t\tif(this.displayed && this.iframe) {\n\t\t\t\tthis.expand();\n\t\t\t\tif (this.contents) {\n\t\t\t\t\tthis.layout.format(this.contents);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tpromise.resolve(this.contents);\n\t}\n\n\tsetLayout(layout) {\n\t\tthis.layout = layout;\n\n\t\tif (this.contents) {\n\t\t\tthis.layout.format(this.contents);\n\t\t\tthis.expand();\n\t\t}\n\t}\n\n\tsetAxis(axis) {\n\n\t\tthis.settings.axis = axis;\n\n\t\tif(axis == \"horizontal\"){\n\t\t\tthis.element.style.flex = \"none\";\n\t\t} else {\n\t\t\tthis.element.style.flex = \"initial\";\n\t\t}\n\n\t\tthis.size();\n\n\t}\n\n\tsetWritingMode(mode) {\n\t\t// this.element.style.writingMode = writingMode;\n\t\tthis.writingMode = mode;\n\t}\n\n\taddListeners() {\n\t\t//TODO: Add content listeners for expanding\n\t}\n\n\tremoveListeners(layoutFunc) {\n\t\t//TODO: remove content listeners for expanding\n\t}\n\n\tdisplay(request) {\n\t\tvar displayed = new defer();\n\n\t\tif (!this.displayed) {\n\n\t\t\tthis.render(request)\n\t\t\t\t.then(function () {\n\n\t\t\t\t\tthis.emit(EVENTS.VIEWS.DISPLAYED, this);\n\t\t\t\t\tthis.onDisplayed(this);\n\n\t\t\t\t\tthis.displayed = true;\n\t\t\t\t\tdisplayed.resolve(this);\n\n\t\t\t\t}.bind(this), function (err) {\n\t\t\t\t\tdisplayed.reject(err, this);\n\t\t\t\t});\n\n\t\t} else {\n\t\t\tdisplayed.resolve(this);\n\t\t}\n\n\n\t\treturn displayed.promise;\n\t}\n\n\tshow() {\n\n\t\tthis.element.style.visibility = \"visible\";\n\n\t\tif(this.iframe){\n\t\t\tthis.iframe.style.visibility = \"visible\";\n\n\t\t\t// Remind Safari to redraw the iframe\n\t\t\tthis.iframe.style.transform = \"translateZ(0)\";\n\t\t\tthis.iframe.offsetWidth;\n\t\t\tthis.iframe.style.transform = null;\n\t\t}\n\n\t\tthis.emit(EVENTS.VIEWS.SHOWN, this);\n\t}\n\n\thide() {\n\t\t// this.iframe.style.display = \"none\";\n\t\tthis.element.style.visibility = \"hidden\";\n\t\tthis.iframe.style.visibility = \"hidden\";\n\n\t\tthis.stopExpanding = true;\n\t\tthis.emit(EVENTS.VIEWS.HIDDEN, this);\n\t}\n\n\toffset() {\n\t\treturn {\n\t\t\ttop: this.element.offsetTop,\n\t\t\tleft: this.element.offsetLeft\n\t\t}\n\t}\n\n\twidth() {\n\t\treturn this._width;\n\t}\n\n\theight() {\n\t\treturn this._height;\n\t}\n\n\tposition() {\n\t\treturn this.element.getBoundingClientRect();\n\t}\n\n\tlocationOf(target) {\n\t\tvar parentPos = this.iframe.getBoundingClientRect();\n\t\tvar targetPos = this.contents.locationOf(target, this.settings.ignoreClass);\n\n\t\treturn {\n\t\t\t\"left\": targetPos.left,\n\t\t\t\"top\": targetPos.top\n\t\t};\n\t}\n\n\tonDisplayed(view) {\n\t\t// Stub, override with a custom functions\n\t}\n\n\tonResize(view, e) {\n\t\t// Stub, override with a custom functions\n\t}\n\n\tbounds(force) {\n\t\tif(force || !this.elementBounds) {\n\t\t\tthis.elementBounds = bounds(this.element);\n\t\t}\n\n\t\treturn this.elementBounds;\n\t}\n\n\thighlight(cfiRange, data={}, cb, className = \"epubjs-hl\", styles = {}) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\t\tconst attributes = Object.assign({\"fill\": \"yellow\", \"fill-opacity\": \"0.3\", \"mix-blend-mode\": \"multiply\"}, styles);\n\t\tlet range = this.contents.range(cfiRange);\n\n\t\tlet emitter = () => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tdata[\"epubcfi\"] = cfiRange;\n\n\t\tif (!this.pane) {\n\t\t\tthis.pane = new Pane(this.iframe, this.element);\n\t\t}\n\n\t\tlet m = new Highlight(range, className, data, attributes);\n\t\tlet h = this.pane.addMark(m);\n\n\t\tthis.highlights[cfiRange] = { \"mark\": h, \"element\": h.element, \"listeners\": [emitter, cb] };\n\n\t\th.element.setAttribute(\"ref\", className);\n\t\th.element.addEventListener(\"click\", emitter);\n\t\th.element.addEventListener(\"touchstart\", emitter);\n\n\t\tif (cb) {\n\t\t\th.element.addEventListener(\"click\", cb);\n\t\t\th.element.addEventListener(\"touchstart\", cb);\n\t\t}\n\t\treturn h;\n\t}\n\n\tunderline(cfiRange, data={}, cb, className = \"epubjs-ul\", styles = {}) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\t\tconst attributes = Object.assign({\"stroke\": \"black\", \"stroke-opacity\": \"0.3\", \"mix-blend-mode\": \"multiply\"}, styles);\n\t\tlet range = this.contents.range(cfiRange);\n\t\tlet emitter = () => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tdata[\"epubcfi\"] = cfiRange;\n\n\t\tif (!this.pane) {\n\t\t\tthis.pane = new Pane(this.iframe, this.element);\n\t\t}\n\n\t\tlet m = new Underline(range, className, data, attributes);\n\t\tlet h = this.pane.addMark(m);\n\n\t\tthis.underlines[cfiRange] = { \"mark\": h, \"element\": h.element, \"listeners\": [emitter, cb] };\n\n\t\th.element.setAttribute(\"ref\", className);\n\t\th.element.addEventListener(\"click\", emitter);\n\t\th.element.addEventListener(\"touchstart\", emitter);\n\n\t\tif (cb) {\n\t\t\th.element.addEventListener(\"click\", cb);\n\t\t\th.element.addEventListener(\"touchstart\", cb);\n\t\t}\n\t\treturn h;\n\t}\n\n\tmark(cfiRange, data={}, cb) {\n\t\tif (!this.contents) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (cfiRange in this.marks) {\n\t\t\tlet item = this.marks[cfiRange];\n\t\t\treturn item;\n\t\t}\n\n\t\tlet range = this.contents.range(cfiRange);\n\t\tif (!range) {\n\t\t\treturn;\n\t\t}\n\t\tlet container = range.commonAncestorContainer;\n\t\tlet parent = (container.nodeType === 1) ? container : container.parentNode;\n\n\t\tlet emitter = (e) => {\n\t\t\tthis.emit(EVENTS.VIEWS.MARK_CLICKED, cfiRange, data);\n\t\t};\n\n\t\tif (range.collapsed && container.nodeType === 1) {\n\t\t\trange = new Range();\n\t\t\trange.selectNodeContents(container);\n\t\t} else if (range.collapsed) { // Webkit doesn't like collapsed ranges\n\t\t\trange = new Range();\n\t\t\trange.selectNodeContents(parent);\n\t\t}\n\n\t\tlet mark = this.document.createElement(\"a\");\n\t\tmark.setAttribute(\"ref\", \"epubjs-mk\");\n\t\tmark.style.position = \"absolute\";\n\n\t\tmark.dataset[\"epubcfi\"] = cfiRange;\n\n\t\tif (data) {\n\t\t\tObject.keys(data).forEach((key) => {\n\t\t\t\tmark.dataset[key] = data[key];\n\t\t\t});\n\t\t}\n\n\t\tif (cb) {\n\t\t\tmark.addEventListener(\"click\", cb);\n\t\t\tmark.addEventListener(\"touchstart\", cb);\n\t\t}\n\n\t\tmark.addEventListener(\"click\", emitter);\n\t\tmark.addEventListener(\"touchstart\", emitter);\n\n\t\tthis.placeMark(mark, range);\n\n\t\tthis.element.appendChild(mark);\n\n\t\tthis.marks[cfiRange] = { \"element\": mark, \"range\": range, \"listeners\": [emitter, cb] };\n\n\t\treturn parent;\n\t}\n\n\tplaceMark(element, range) {\n\t\tlet top, right, left;\n\n\t\tif(this.layout.name === \"pre-paginated\" ||\n\t\t\tthis.settings.axis !== \"horizontal\") {\n\t\t\tlet pos = range.getBoundingClientRect();\n\t\t\ttop = pos.top;\n\t\t\tright = pos.right;\n\t\t} else {\n\t\t\t// Element might break columns, so find the left most element\n\t\t\tlet rects = range.getClientRects();\n\n\t\t\tlet rect;\n\t\t\tfor (var i = 0; i != rects.length; i++) {\n\t\t\t\trect = rects[i];\n\t\t\t\tif (!left || rect.left < left) {\n\t\t\t\t\tleft = rect.left;\n\t\t\t\t\t// right = rect.right;\n\t\t\t\t\tright = Math.ceil(left / this.layout.props.pageWidth) * this.layout.props.pageWidth - (this.layout.gap / 2);\n\t\t\t\t\ttop = rect.top;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\telement.style.top = `${top}px`;\n\t\telement.style.left = `${right}px`;\n\t}\n\n\tunhighlight(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.highlights) {\n\t\t\titem = this.highlights[cfiRange];\n\n\t\t\tthis.pane.removeMark(item.mark);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.highlights[cfiRange];\n\t\t}\n\t}\n\n\tununderline(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.underlines) {\n\t\t\titem = this.underlines[cfiRange];\n\t\t\tthis.pane.removeMark(item.mark);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.underlines[cfiRange];\n\t\t}\n\t}\n\n\tunmark(cfiRange) {\n\t\tlet item;\n\t\tif (cfiRange in this.marks) {\n\t\t\titem = this.marks[cfiRange];\n\t\t\tthis.element.removeChild(item.element);\n\t\t\titem.listeners.forEach((l) => {\n\t\t\t\tif (l) {\n\t\t\t\t\titem.element.removeEventListener(\"click\", l);\n\t\t\t\t\titem.element.removeEventListener(\"touchstart\", l);\n\t\t\t\t};\n\t\t\t});\n\t\t\tdelete this.marks[cfiRange];\n\t\t}\n\t}\n\n\tdestroy() {\n\n\t\tfor (let cfiRange in this.highlights) {\n\t\t\tthis.unhighlight(cfiRange);\n\t\t}\n\n\t\tfor (let cfiRange in this.underlines) {\n\t\t\tthis.ununderline(cfiRange);\n\t\t}\n\n\t\tfor (let cfiRange in this.marks) {\n\t\t\tthis.unmark(cfiRange);\n\t\t}\n\n\t\tif (this.blobUrl) {\n\t\t\trevokeBlobUrl(this.blobUrl);\n\t\t}\n\n\t\tif(this.displayed){\n\t\t\tthis.displayed = false;\n\n\t\t\tthis.removeListeners();\n\t\t\tthis.contents.destroy();\n\n\t\t\tthis.stopExpanding = true;\n\t\t\tthis.element.removeChild(this.iframe);\n\n\t\t\tif (this.pane) {\n\t\t\t\tthis.pane.element.remove();\n\t\t\t\tthis.pane = undefined;\n\t\t\t}\n\n\t\t\tthis.iframe = undefined;\n\t\t\tthis.contents = undefined;\n\n\t\t\tthis._textWidth = null;\n\t\t\tthis._textHeight = null;\n\t\t\tthis._width = null;\n\t\t\tthis._height = null;\n\t\t}\n\n\t\t// this.element.style.height = \"0px\";\n\t\t// this.element.style.width = \"0px\";\n\t}\n}\n\nEventEmitter(IframeView.prototype);\n\nexport default IframeView;\n"],"names":["IframeView","section","options","extend","uuid","EpubCFI","axis","element","bounds","request","show","contents","writingMode","EVENTS","resolve","reject","e","_width","_height","width","height","what","elBorders","borders","iframeBorders","isNumber","force","columns","size","widthDelta","heightDelta","mark","m","loading","defer","loaded","event","createBlobUrl","outerThis","promise","Contents","link","layout","mode","layoutFunc","displayed","err","target","targetPos","view","cfiRange","data","cb","className","styles","attributes","range","emitter","Pane","Highlight","h","Underline","container","parent","key","top","right","left","pos","rects","rect","i","item","l","revokeBlobUrl","EventEmitter"],"mappings":"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","x_google_ignoreList":[0]}