UNPKG

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 44.9 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../node_modules/epubjs/src/managers/default/index.js"],"sourcesContent":["import EventEmitter from \"event-emitter\";\nimport {extend, defer, windowBounds, isNumber} from \"../../utils/core\";\nimport scrollType from \"../../utils/scrolltype\";\nimport Mapping from \"../../mapping\";\nimport Queue from \"../../utils/queue\";\nimport Stage from \"../helpers/stage\";\nimport Views from \"../helpers/views\";\nimport { EVENTS } from \"../../utils/constants\";\n\nclass DefaultViewManager {\n\tconstructor(options) {\n\n\t\tthis.name = \"default\";\n\t\tthis.optsSettings = options.settings;\n\t\tthis.View = options.view;\n\t\tthis.request = options.request;\n\t\tthis.renditionQueue = options.queue;\n\t\tthis.q = new Queue(this);\n\n\t\tthis.settings = extend(this.settings || {}, {\n\t\t\tinfinite: true,\n\t\t\thidden: false,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\taxis: undefined,\n\t\t\twritingMode: undefined,\n\t\t\tflow: \"scrolled\",\n\t\t\tignoreClass: \"\",\n\t\t\tfullsize: undefined,\n\t\t\tallowScriptedContent: false,\n\t\t\tallowPopups: false\n\t\t});\n\n\t\textend(this.settings, options.settings || {});\n\n\t\tthis.viewSettings = {\n\t\t\tignoreClass: this.settings.ignoreClass,\n\t\t\taxis: this.settings.axis,\n\t\t\tflow: this.settings.flow,\n\t\t\tlayout: this.layout,\n\t\t\tmethod: this.settings.method, // srcdoc, blobUrl, write\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tforceEvenPages: true,\n\t\t\tallowScriptedContent: this.settings.allowScriptedContent,\n\t\t\tallowPopups: this.settings.allowPopups\n\t\t};\n\n\t\tthis.rendered = false;\n\n\t}\n\n\trender(element, size){\n\t\tlet tag = element.tagName;\n\n\t\tif (typeof this.settings.fullsize === \"undefined\" &&\n\t\t\t\ttag && (tag.toLowerCase() == \"body\" ||\n\t\t\t\ttag.toLowerCase() == \"html\")) {\n\t\t\t\tthis.settings.fullsize = true;\n\t\t}\n\n\t\tif (this.settings.fullsize) {\n\t\t\tthis.settings.overflow = \"visible\";\n\t\t\tthis.overflow = this.settings.overflow;\n\t\t}\n\n\t\tthis.settings.size = size;\n\n\t\tthis.settings.rtlScrollType = scrollType();\n\n\t\t// Save the stage\n\t\tthis.stage = new Stage({\n\t\t\twidth: size.width,\n\t\t\theight: size.height,\n\t\t\toverflow: this.overflow,\n\t\t\thidden: this.settings.hidden,\n\t\t\taxis: this.settings.axis,\n\t\t\tfullsize: this.settings.fullsize,\n\t\t\tdirection: this.settings.direction\n\t\t});\n\n\t\tthis.stage.attachTo(element);\n\n\t\t// Get this stage container div\n\t\tthis.container = this.stage.getContainer();\n\n\t\t// Views array methods\n\t\tthis.views = new Views(this.container);\n\n\t\t// Calculate Stage Size\n\t\tthis._bounds = this.bounds();\n\t\tthis._stageSize = this.stage.size();\n\n\t\t// Set the dimensions for views\n\t\tthis.viewSettings.width = this._stageSize.width;\n\t\tthis.viewSettings.height = this._stageSize.height;\n\n\t\t// Function to handle a resize event.\n\t\t// Will only attach if width and height are both fixed.\n\t\tthis.stage.onResize(this.onResized.bind(this));\n\n\t\tthis.stage.onOrientationChange(this.onOrientationChange.bind(this));\n\n\t\t// Add Event Listeners\n\t\tthis.addEventListeners();\n\n\t\t// Add Layout method\n\t\t// this.applyLayoutMethod();\n\t\tif (this.layout) {\n\t\t\tthis.updateLayout();\n\t\t}\n\n\t\tthis.rendered = true;\n\n\t}\n\n\taddEventListeners(){\n\t\tvar scroller;\n\n\t\twindow.addEventListener(\"unload\", function(e){\n\t\t\tthis.destroy();\n\t\t}.bind(this));\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscroller = this.container;\n\t\t} else {\n\t\t\tscroller = window;\n\t\t}\n\n\t\tthis._onScroll = this.onScroll.bind(this);\n\t\tscroller.addEventListener(\"scroll\", this._onScroll);\n\t}\n\n\tremoveEventListeners(){\n\t\tvar scroller;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscroller = this.container;\n\t\t} else {\n\t\t\tscroller = window;\n\t\t}\n\n\t\tscroller.removeEventListener(\"scroll\", this._onScroll);\n\t\tthis._onScroll = undefined;\n\t}\n\n\tdestroy(){\n\t\tclearTimeout(this.orientationTimeout);\n\t\tclearTimeout(this.resizeTimeout);\n\t\tclearTimeout(this.afterScrolled);\n\n\t\tthis.clear();\n\n\t\tthis.removeEventListeners();\n\n\t\tthis.stage.destroy();\n\n\t\tthis.rendered = false;\n\n\t\t/*\n\n\t\t\tclearTimeout(this.trimTimeout);\n\t\t\tif(this.settings.hidden) {\n\t\t\t\tthis.element.removeChild(this.wrapper);\n\t\t\t} else {\n\t\t\t\tthis.element.removeChild(this.container);\n\t\t\t}\n\t\t*/\n\t}\n\n\tonOrientationChange(e) {\n\t\tlet {orientation} = window;\n\n\t\tif(this.optsSettings.resizeOnOrientationChange) {\n\t\t\tthis.resize();\n\t\t}\n\n\t\t// Per ampproject:\n\t\t// In IOS 10.3, the measured size of an element is incorrect if the\n\t\t// element size depends on window size directly and the measurement\n\t\t// happens in window.resize event. Adding a timeout for correct\n\t\t// measurement. See https://github.com/ampproject/amphtml/issues/8479\n\t\tclearTimeout(this.orientationTimeout);\n\t\tthis.orientationTimeout = setTimeout(function(){\n\t\t\tthis.orientationTimeout = undefined;\n\n\t\t\tif(this.optsSettings.resizeOnOrientationChange) {\n\t\t\t\tthis.resize();\n\t\t\t}\n\n\t\t\tthis.emit(EVENTS.MANAGERS.ORIENTATION_CHANGE, orientation);\n\t\t}.bind(this), 500);\n\n\t}\n\n\tonResized(e) {\n\t\tthis.resize();\n\t}\n\n\tresize(width, height, epubcfi){\n\t\tlet stageSize = this.stage.size(width, height);\n\n\t\t// For Safari, wait for orientation to catch up\n\t\t// if the window is a square\n\t\tthis.winBounds = windowBounds();\n\t\tif (this.orientationTimeout &&\n\t\t\t\tthis.winBounds.width === this.winBounds.height) {\n\t\t\t// reset the stage size for next resize\n\t\t\tthis._stageSize = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._stageSize &&\n\t\t\t\tthis._stageSize.width === stageSize.width &&\n\t\t\t\tthis._stageSize.height === stageSize.height ) {\n\t\t\t// Size is the same, no need to resize\n\t\t\treturn;\n\t\t}\n\n\t\tthis._stageSize = stageSize;\n\n\t\tthis._bounds = this.bounds();\n\n\t\t// Clear current views\n\t\tthis.clear();\n\n\t\t// Update for new views\n\t\tthis.viewSettings.width = this._stageSize.width;\n\t\tthis.viewSettings.height = this._stageSize.height;\n\n\t\tthis.updateLayout();\n\n\t\tthis.emit(EVENTS.MANAGERS.RESIZED, {\n\t\t\twidth: this._stageSize.width,\n\t\t\theight: this._stageSize.height\n\t\t}, epubcfi);\n\t}\n\n\tcreateView(section, forceRight) {\n\t\treturn new this.View(section, extend(this.viewSettings, { forceRight }) );\n\t}\n\n\thandleNextPrePaginated(forceRight, section, action) {\n\t\tlet next;\n\n\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor > 1) {\n\t\t\tif (forceRight || section.index === 0) {\n\t\t\t\t// First page (cover) should stand alone for pre-paginated books\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnext = section.next();\n\t\t\tif (next && !next.properties.includes(\"page-spread-left\")) {\n\t\t\t\treturn action.call(this, next);\n\t\t\t}\n\t\t}\n\t}\n\n\tdisplay(section, target){\n\n\t\tvar displaying = new defer();\n\t\tvar displayed = displaying.promise;\n\n\t\t// Check if moving to target is needed\n\t\tif (target === section.href || isNumber(target)) {\n\t\t\ttarget = undefined;\n\t\t}\n\n\t\t// Check to make sure the section we want isn't already shown\n\t\tvar visible = this.views.find(section);\n\n\t\t// View is already shown, just move to correct location in view\n\t\tif(visible && section && this.layout.name !== \"pre-paginated\") {\n\t\t\tlet offset = visible.offset();\n\n\t\t\tif (this.settings.direction === \"ltr\") {\n\t\t\t\tthis.scrollTo(offset.left, offset.top, true);\n\t\t\t} else {\n\t\t\t\tlet width = visible.width();\n\t\t\t\tthis.scrollTo(offset.left + width, offset.top, true);\n\t\t\t}\n\n\t\t\tif(target) {\n\t\t\t\tlet offset = visible.locationOf(target);\n\t\t\t\tlet width = visible.width();\n\t\t\t\tthis.moveTo(offset, width);\n\t\t\t}\n\n\t\t\tdisplaying.resolve();\n\t\t\treturn displayed;\n\t\t}\n\n\t\t// Hide all current views\n\t\tthis.clear();\n\n\t\tlet forceRight = false;\n\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && section.properties.includes(\"page-spread-right\")) {\n\t\t\tforceRight = true;\n\t\t}\n\n\t\tthis.add(section, forceRight)\n\t\t\t.then(function(view){\n\n\t\t\t\t// Move to correct place within the section, if needed\n\t\t\t\tif(target) {\n\t\t\t\t\tlet offset = view.locationOf(target);\n\t\t\t\t\tlet width = view.width();\n\t\t\t\t\tthis.moveTo(offset, width);\n\t\t\t\t}\n\n\t\t\t}.bind(this), (err) => {\n\t\t\t\tdisplaying.reject(err);\n\t\t\t})\n\t\t\t.then(function(){\n\t\t\t\treturn this.handleNextPrePaginated(forceRight, section, this.add);\n\t\t\t}.bind(this))\n\t\t\t.then(function(){\n\n\t\t\t\tthis.views.show();\n\n\t\t\t\tdisplaying.resolve();\n\n\t\t\t}.bind(this));\n\t\t// .then(function(){\n\t\t// \treturn this.hooks.display.trigger(view);\n\t\t// }.bind(this))\n\t\t// .then(function(){\n\t\t// \tthis.views.show();\n\t\t// }.bind(this));\n\t\treturn displayed;\n\t}\n\n\tafterDisplayed(view){\n\t\tthis.emit(EVENTS.MANAGERS.ADDED, view);\n\t}\n\n\tafterResized(view){\n\t\tthis.emit(EVENTS.MANAGERS.RESIZE, view.section);\n\t}\n\n\tmoveTo(offset, width){\n\t\tvar distX = 0,\n\t\t\t\tdistY = 0;\n\n\t\tif(!this.isPaginated) {\n\t\t\tdistY = offset.top;\n\t\t} else {\n\t\t\tdistX = Math.floor(offset.left / this.layout.delta) * this.layout.delta;\n\n\t\t\tif (distX + this.layout.delta > this.container.scrollWidth) {\n\t\t\t\tdistX = this.container.scrollWidth - this.layout.delta;\n\t\t\t}\n\n\t\t\tdistY = Math.floor(offset.top / this.layout.delta) * this.layout.delta;\n\n\t\t\tif (distY + this.layout.delta > this.container.scrollHeight) {\n\t\t\t\tdistY = this.container.scrollHeight - this.layout.delta;\n\t\t\t}\n\t\t}\n\t\tif(this.settings.direction === 'rtl'){\n\t\t\t/***\n\t\t\t\tthe `floor` function above (L343) is on positive values, so we should add one `layout.delta`\n\t\t\t\tto distX or use `Math.ceil` function, or multiply offset.left by -1\n\t\t\t\tbefore `Math.floor`\n\t\t\t*/\n\t\t\tdistX = distX + this.layout.delta\n\t\t\tdistX = distX - width\n\t\t}\n\t\tthis.scrollTo(distX, distY, true);\n\t}\n\n\tadd(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\n\t\tthis.views.append(view);\n\n\t\t// view.on(EVENTS.VIEWS.SHOWN, this.afterDisplayed.bind(this));\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tappend(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\t\tthis.views.append(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tprepend(section, forceRight){\n\t\tvar view = this.createView(section, forceRight);\n\n\t\tview.on(EVENTS.VIEWS.RESIZED, (bounds) => {\n\t\t\tthis.counter(bounds);\n\t\t});\n\n\t\tthis.views.prepend(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\t\tview.onResize = this.afterResized.bind(this);\n\n\t\tview.on(EVENTS.VIEWS.AXIS, (axis) => {\n\t\t\tthis.updateAxis(axis);\n\t\t});\n\n\t\tview.on(EVENTS.VIEWS.WRITING_MODE, (mode) => {\n\t\t\tthis.updateWritingMode(mode);\n\t\t});\n\n\t\treturn view.display(this.request);\n\t}\n\n\tcounter(bounds){\n\t\tif(this.settings.axis === \"vertical\") {\n\t\t\tthis.scrollBy(0, bounds.heightDelta, true);\n\t\t} else {\n\t\t\tthis.scrollBy(bounds.widthDelta, 0, true);\n\t\t}\n\n\t}\n\n\t// resizeView(view) {\n\t//\n\t// \tif(this.settings.globalLayoutProperties.layout === \"pre-paginated\") {\n\t// \t\tview.lock(\"both\", this.bounds.width, this.bounds.height);\n\t// \t} else {\n\t// \t\tview.lock(\"width\", this.bounds.width, this.bounds.height);\n\t// \t}\n\t//\n\t// };\n\n\tnext(){\n\t\tvar next;\n\t\tvar left;\n\n\t\tlet dir = this.settings.direction;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\" && (!dir || dir === \"ltr\")) {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tleft = this.container.scrollLeft + this.container.offsetWidth + this.layout.delta;\n\n\t\t\tif(left <= this.container.scrollWidth) {\n\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t} else {\n\t\t\t\tnext = this.views.last().section.next();\n\t\t\t}\n\t\t} else if (this.isPaginated && this.settings.axis === \"horizontal\" && dir === \"rtl\") {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\tleft = this.container.scrollLeft;\n\n\t\t\t\tif (left > 0) {\n\t\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.views.last().section.next();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tleft = this.container.scrollLeft + ( this.layout.delta * -1 );\n\n\t\t\t\tif (left > this.container.scrollWidth * -1){\n\t\t\t\t\tthis.scrollBy(this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.views.last().section.next();\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"vertical\") {\n\n\t\t\tthis.scrollTop = this.container.scrollTop;\n\n\t\t\tlet top = this.container.scrollTop + this.container.offsetHeight;\n\n\t\t\tif(top < this.container.scrollHeight) {\n\t\t\t\tthis.scrollBy(0, this.layout.height, true);\n\t\t\t} else {\n\t\t\t\tnext = this.views.last().section.next();\n\t\t\t}\n\n\t\t} else {\n\t\t\tnext = this.views.last().section.next();\n\t\t}\n\n\t\tif(next) {\n\t\t\tthis.clear();\n\t\t\t// The new section may have a different writing-mode from the old section. Thus, we need to update layout.\n\t\t\tthis.updateLayout();\n\n\t\t\tlet forceRight = false;\n\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && next.properties.includes(\"page-spread-right\")) {\n\t\t\t\tforceRight = true;\n\t\t\t}\n\n\t\t\treturn this.append(next, forceRight)\n\t\t\t\t.then(function(){\n\t\t\t\t\treturn this.handleNextPrePaginated(forceRight, next, this.append);\n\t\t\t\t}.bind(this), (err) => {\n\t\t\t\t\treturn err;\n\t\t\t\t})\n\t\t\t\t.then(function(){\n\n\t\t\t\t\t// Reset position to start for scrolled-doc vertical-rl in default mode\n\t\t\t\t\tif (!this.isPaginated &&\n\t\t\t\t\t\tthis.settings.axis === \"horizontal\" &&\n\t\t\t\t\t\tthis.settings.direction === \"rtl\" &&\n\t\t\t\t\t\tthis.settings.rtlScrollType === \"default\") {\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.scrollTo(this.container.scrollWidth, 0, true);\n\t\t\t\t\t}\n\t\t\t\t\tthis.views.show();\n\t\t\t\t}.bind(this));\n\t\t}\n\n\n\t}\n\n\tprev(){\n\t\tvar prev;\n\t\tvar left;\n\t\tlet dir = this.settings.direction;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\" && (!dir || dir === \"ltr\")) {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tleft = this.container.scrollLeft;\n\n\t\t\tif(left > 0) {\n\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t} else {\n\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"horizontal\" && dir === \"rtl\") {\n\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\n\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\tleft = this.container.scrollLeft + this.container.offsetWidth;\n\n\t\t\t\tif (left < this.container.scrollWidth) {\n\t\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tleft = this.container.scrollLeft;\n\n\t\t\t\tif (left < 0) {\n\t\t\t\t\tthis.scrollBy(-this.layout.delta, 0, true);\n\t\t\t\t} else {\n\t\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if (this.isPaginated && this.settings.axis === \"vertical\") {\n\n\t\t\tthis.scrollTop = this.container.scrollTop;\n\n\t\t\tlet top = this.container.scrollTop;\n\n\t\t\tif(top > 0) {\n\t\t\t\tthis.scrollBy(0, -(this.layout.height), true);\n\t\t\t} else {\n\t\t\t\tprev = this.views.first().section.prev();\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tprev = this.views.first().section.prev();\n\n\t\t}\n\n\t\tif(prev) {\n\t\t\tthis.clear();\n\t\t\t// The new section may have a different writing-mode from the old section. Thus, we need to update layout.\n\t\t\tthis.updateLayout();\n\n\t\t\tlet forceRight = false;\n\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor === 2 && typeof prev.prev() !== \"object\") {\n\t\t\t\tforceRight = true;\n\t\t\t}\n\n\t\t\treturn this.prepend(prev, forceRight)\n\t\t\t\t.then(function(){\n\t\t\t\t\tvar left;\n\t\t\t\t\tif (this.layout.name === \"pre-paginated\" && this.layout.divisor > 1) {\n\t\t\t\t\t\tleft = prev.prev();\n\t\t\t\t\t\tif (left) {\n\t\t\t\t\t\t\treturn this.prepend(left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}.bind(this), (err) => {\n\t\t\t\t\treturn err;\n\t\t\t\t})\n\t\t\t\t.then(function(){\n\t\t\t\t\tif(this.isPaginated && this.settings.axis === \"horizontal\") {\n\t\t\t\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\t\t\t\tif (this.settings.rtlScrollType === \"default\"){\n\t\t\t\t\t\t\t\tthis.scrollTo(0, 0, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t\tthis.scrollTo((this.container.scrollWidth * -1) + this.layout.delta, 0, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.scrollTo(this.container.scrollWidth - this.layout.delta, 0, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.views.show();\n\t\t\t\t}.bind(this));\n\t\t}\n\t}\n\n\tcurrent(){\n\t\tvar visible = this.visible();\n\t\tif(visible.length){\n\t\t\t// Current is the last visible view\n\t\t\treturn visible[visible.length-1];\n\t\t}\n\t\treturn null;\n\t}\n\n\tclear () {\n\n\t\t// this.q.clear();\n\n\t\tif (this.views) {\n\t\t\tthis.views.hide();\n\t\t\tthis.scrollTo(0,0, true);\n\t\t\tthis.views.clear();\n\t\t}\n\t}\n\n\tcurrentLocation(){\n\t\tthis.updateLayout();\n\t\tif (this.isPaginated && this.settings.axis === \"horizontal\") {\n\t\t\tthis.location = this.paginatedLocation();\n\t\t} else {\n\t\t\tthis.location = this.scrolledLocation();\n\t\t}\n\t\treturn this.location;\n\t}\n\n\tscrolledLocation() {\n\t\tlet visible = this.visible();\n\t\tlet container = this.container.getBoundingClientRect();\n\t\tlet pageHeight = (container.height < window.innerHeight) ? container.height : window.innerHeight;\n\t\tlet pageWidth = (container.width < window.innerWidth) ? container.width : window.innerWidth;\n\t\tlet vertical = (this.settings.axis === \"vertical\");\n\t\tlet rtl = (this.settings.direction === \"rtl\");\n\t\t\n\t\tlet offset = 0;\n\t\tlet used = 0;\n\n\t\tif(this.settings.fullsize) {\n\t\t\toffset = vertical ? window.scrollY : window.scrollX;\n\t\t}\n\n\t\tlet sections = visible.map((view) => {\n\t\t\tlet {index, href} = view.section;\n\t\t\tlet position = view.position();\n\t\t\tlet width = view.width();\n\t\t\tlet height = view.height();\n\n\t\t\tlet startPos;\n\t\t\tlet endPos;\n\t\t\tlet stopPos;\n\t\t\tlet totalPages;\n\n\t\t\tif (vertical) {\n\t\t\t\tstartPos = offset + container.top - position.top + used;\n\t\t\t\tendPos = startPos + pageHeight - used;\n\t\t\t\ttotalPages = this.layout.count(height, pageHeight).pages;\n\t\t\t\tstopPos = pageHeight;\n\t\t\t} else {\n\t\t\t\tstartPos = offset + container.left - position.left + used;\n\t\t\t\tendPos = startPos + pageWidth - used;\n\t\t\t\ttotalPages = this.layout.count(width, pageWidth).pages;\n\t\t\t\tstopPos = pageWidth;\n\t\t\t}\n\n\t\t\tlet currPage = Math.ceil(startPos / stopPos);\n\t\t\tlet pages = [];\n\t\t\tlet endPage = Math.ceil(endPos / stopPos);\n\n\t\t\t// Reverse page counts for horizontal rtl\n\t\t\tif (this.settings.direction === \"rtl\" && !vertical) {\n\t\t\t\tlet tempStartPage = currPage;\n\t\t\t\tcurrPage = totalPages - endPage;\n\t\t\t\tendPage = totalPages - tempStartPage;\n\t\t\t}\n\n\t\t\tpages = [];\n\t\t\tfor (var i = currPage; i <= endPage; i++) {\n\t\t\t\tlet pg = i + 1;\n\t\t\t\tpages.push(pg);\n\t\t\t}\n\n\t\t\tlet mapping = this.mapping.page(view.contents, view.section.cfiBase, startPos, endPos);\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\thref,\n\t\t\t\tpages,\n\t\t\t\ttotalPages,\n\t\t\t\tmapping\n\t\t\t};\n\t\t});\n\n\t\treturn sections;\n\t}\n\n\tpaginatedLocation(){\n\t\tlet visible = this.visible();\n\t\tlet container = this.container.getBoundingClientRect();\n\n\t\tlet left = 0;\n\t\tlet used = 0;\n\n\t\tif(this.settings.fullsize) {\n\t\t\tleft = window.scrollX;\n\t\t}\n\n\t\tlet sections = visible.map((view) => {\n\t\t\tlet {index, href} = view.section;\n\t\t\tlet offset;\n\t\t\tlet position = view.position();\n\t\t\tlet width = view.width();\n\n\t\t\t// Find mapping\n\t\t\tlet start;\n\t\t\tlet end;\n\t\t\tlet pageWidth;\n\n\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\toffset = container.right - left;\n\t\t\t\tpageWidth = Math.min(Math.abs(offset - position.left), this.layout.width) - used;\n\t\t\t\tend = position.width - (position.right - offset) - used;\n\t\t\t\tstart = end - pageWidth;\n\t\t\t} else {\n\t\t\t\toffset = container.left + left;\n\t\t\t\tpageWidth = Math.min(position.right - offset, this.layout.width) - used;\n\t\t\t\tstart = offset - position.left + used;\n\t\t\t\tend = start + pageWidth;\n\t\t\t}\n\n\t\t\tused += pageWidth;\n\n\t\t\tlet mapping = this.mapping.page(view.contents, view.section.cfiBase, start, end);\n\n\t\t\tlet totalPages = this.layout.count(width).pages;\n\t\t\tlet startPage = Math.floor(start / this.layout.pageWidth);\n\t\t\tlet pages = [];\n\t\t\tlet endPage = Math.floor(end / this.layout.pageWidth);\n\t\t\t\n\t\t\t// start page should not be negative\n\t\t\tif (startPage < 0) {\n\t\t\t\tstartPage = 0;\n\t\t\t\tendPage = endPage + 1;\n\t\t\t}\n\n\t\t\t// Reverse page counts for rtl\n\t\t\tif (this.settings.direction === \"rtl\") {\n\t\t\t\tlet tempStartPage = startPage;\n\t\t\t\tstartPage = totalPages - endPage;\n\t\t\t\tendPage = totalPages - tempStartPage;\n\t\t\t}\n\n\n\t\t\tfor (var i = startPage + 1; i <= endPage; i++) {\n\t\t\t\tlet pg = i;\n\t\t\t\tpages.push(pg);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\thref,\n\t\t\t\tpages,\n\t\t\t\ttotalPages,\n\t\t\t\tmapping\n\t\t\t};\n\t\t});\n\n\t\treturn sections;\n\t}\n\n\tisVisible(view, offsetPrev, offsetNext, _container){\n\t\tvar position = view.position();\n\t\tvar container = _container || this.bounds();\n\n\t\tif(this.settings.axis === \"horizontal\" &&\n\t\t\tposition.right > container.left - offsetPrev &&\n\t\t\tposition.left < container.right + offsetNext) {\n\n\t\t\treturn true;\n\n\t\t} else if(this.settings.axis === \"vertical\" &&\n\t\t\tposition.bottom > container.top - offsetPrev &&\n\t\t\tposition.top < container.bottom + offsetNext) {\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tvisible(){\n\t\tvar container = this.bounds();\n\t\tvar views = this.views.displayed();\n\t\tvar viewsLength = views.length;\n\t\tvar visible = [];\n\t\tvar isVisible;\n\t\tvar view;\n\n\t\tfor (var i = 0; i < viewsLength; i++) {\n\t\t\tview = views[i];\n\t\t\tisVisible = this.isVisible(view, 0, 0, container);\n\n\t\t\tif(isVisible === true) {\n\t\t\t\tvisible.push(view);\n\t\t\t}\n\n\t\t}\n\t\treturn visible;\n\t}\n\n\tscrollBy(x, y, silent){\n\t\tlet dir = this.settings.direction === \"rtl\" ? -1 : 1;\n\n\t\tif(silent) {\n\t\t\tthis.ignore = true;\n\t\t}\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tif(x) this.container.scrollLeft += x * dir;\n\t\t\tif(y) this.container.scrollTop += y;\n\t\t} else {\n\t\t\twindow.scrollBy(x * dir, y * dir);\n\t\t}\n\t\tthis.scrolled = true;\n\t}\n\n\tscrollTo(x, y, silent){\n\t\tif(silent) {\n\t\t\tthis.ignore = true;\n\t\t}\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tthis.container.scrollLeft = x;\n\t\t\tthis.container.scrollTop = y;\n\t\t} else {\n\t\t\twindow.scrollTo(x,y);\n\t\t}\n\t\tthis.scrolled = true;\n\t}\n\n\tonScroll(){\n\t\tlet scrollTop;\n\t\tlet scrollLeft;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscrollTop = this.container.scrollTop;\n\t\t\tscrollLeft = this.container.scrollLeft;\n\t\t} else {\n\t\t\tscrollTop = window.scrollY;\n\t\t\tscrollLeft = window.scrollX;\n\t\t}\n\n\t\tthis.scrollTop = scrollTop;\n\t\tthis.scrollLeft = scrollLeft;\n\n\t\tif(!this.ignore) {\n\t\t\tthis.emit(EVENTS.MANAGERS.SCROLL, {\n\t\t\t\ttop: scrollTop,\n\t\t\t\tleft: scrollLeft\n\t\t\t});\n\n\t\t\tclearTimeout(this.afterScrolled);\n\t\t\tthis.afterScrolled = setTimeout(function () {\n\t\t\t\tthis.emit(EVENTS.MANAGERS.SCROLLED, {\n\t\t\t\t\ttop: this.scrollTop,\n\t\t\t\t\tleft: this.scrollLeft\n\t\t\t\t});\n\t\t\t}.bind(this), 20);\n\n\n\n\t\t} else {\n\t\t\tthis.ignore = false;\n\t\t}\n\n\t}\n\n\tbounds() {\n\t\tvar bounds;\n\n\t\tbounds = this.stage.bounds();\n\n\t\treturn bounds;\n\t}\n\n\tapplyLayout(layout) {\n\n\t\tthis.layout = layout;\n\t\tthis.updateLayout();\n\t\tif (this.views && this.views.length > 0 && this.layout.name === \"pre-paginated\") {\n\t\t\tthis.display(this.views.first().section);\n\t\t}\n\t\t // this.manager.layout(this.layout.format);\n\t}\n\n\tupdateLayout() {\n\n\t\tif (!this.stage) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._stageSize = this.stage.size();\n\n\t\tif(!this.isPaginated) {\n\t\t\tthis.layout.calculate(this._stageSize.width, this._stageSize.height);\n\t\t} else {\n\t\t\tthis.layout.calculate(\n\t\t\t\tthis._stageSize.width,\n\t\t\t\tthis._stageSize.height,\n\t\t\t\tthis.settings.gap\n\t\t\t);\n\n\t\t\t// Set the look ahead offset for what is visible\n\t\t\tthis.settings.offset = this.layout.delta / this.layout.divisor;\n\n\t\t\t// this.stage.addStyleRules(\"iframe\", [{\"margin-right\" : this.layout.gap + \"px\"}]);\n\n\t\t}\n\n\t\t// Set the dimensions for views\n\t\tthis.viewSettings.width = this.layout.width;\n\t\tthis.viewSettings.height = this.layout.height;\n\n\t\tthis.setLayout(this.layout);\n\t}\n\n\tsetLayout(layout){\n\n\t\tthis.viewSettings.layout = layout;\n\n\t\tthis.mapping = new Mapping(layout.props, this.settings.direction, this.settings.axis);\n\n\t\tif(this.views) {\n\n\t\t\tthis.views.forEach(function(view){\n\t\t\t\tif (view) {\n\t\t\t\t\tview.setLayout(layout);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\tupdateWritingMode(mode) {\n\t\tthis.writingMode = mode;\n\t}\n\n\tupdateAxis(axis, forceUpdate){\n\n\t\tif (!forceUpdate && axis === this.settings.axis) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.settings.axis = axis;\n\n\t\tthis.stage && this.stage.axis(axis);\n\n\t\tthis.viewSettings.axis = axis;\n\n\t\tif (this.mapping) {\n\t\t\tthis.mapping = new Mapping(this.layout.props, this.settings.direction, this.settings.axis);\n\t\t}\n\n\t\tif (this.layout) {\n\t\t\tif (axis === \"vertical\") {\n\t\t\t\tthis.layout.spread(\"none\");\n\t\t\t} else {\n\t\t\t\tthis.layout.spread(this.layout.settings.spread);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateFlow(flow, defaultScrolledOverflow=\"auto\"){\n\t\tlet isPaginated = (flow === \"paginated\" || flow === \"auto\");\n\n\t\tthis.isPaginated = isPaginated;\n\n\t\tif (flow === \"scrolled-doc\" ||\n\t\t\t\tflow === \"scrolled-continuous\" ||\n\t\t\t\tflow === \"scrolled\") {\n\t\t\tthis.updateAxis(\"vertical\");\n\t\t} else {\n\t\t\tthis.updateAxis(\"horizontal\");\n\t\t}\n\n\t\tthis.viewSettings.flow = flow;\n\n\t\tif (!this.settings.overflow) {\n\t\t\tthis.overflow = isPaginated ? \"hidden\" : defaultScrolledOverflow;\n\t\t} else {\n\t\t\tthis.overflow = this.settings.overflow;\n\t\t}\n\n\t\tthis.stage && this.stage.overflow(this.overflow);\n\n\t\tthis.updateLayout();\n\n\t}\n\n\tgetContents(){\n\t\tvar contents = [];\n\t\tif (!this.views) {\n\t\t\treturn contents;\n\t\t}\n\t\tthis.views.forEach(function(view){\n\t\t\tconst viewContents = view && view.contents;\n\t\t\tif (viewContents) {\n\t\t\t\tcontents.push(viewContents);\n\t\t\t}\n\t\t});\n\t\treturn contents;\n\t}\n\n\tdirection(dir=\"ltr\") {\n\t\tthis.settings.direction = dir;\n\n\t\tthis.stage && this.stage.direction(dir);\n\n\t\tthis.viewSettings.direction = dir;\n\n\t\tthis.updateLayout();\n\t}\n\n\tisRendered() {\n\t\treturn this.rendered;\n\t}\n}\n\n//-- Enable binding events to Manager\nEventEmitter(DefaultViewManager.prototype);\n\nexport default DefaultViewManager;\n"],"names":["DefaultViewManager","options","Queue","extend","element","size","tag","scrollType","Stage","Views","scroller","e","orientation","EVENTS","width","height","epubcfi","stageSize","windowBounds","section","forceRight","action","next","target","displaying","defer","displayed","isNumber","visible","offset","view","err","distX","distY","axis","mode","bounds","left","dir","prev","container","pageHeight","pageWidth","vertical","used","index","href","position","startPos","endPos","stopPos","totalPages","currPage","pages","endPage","tempStartPage","i","pg","mapping","start","end","startPage","offsetPrev","offsetNext","_container","views","viewsLength","isVisible","x","y","silent","scrollTop","scrollLeft","layout","Mapping","forceUpdate","flow","defaultScrolledOverflow","isPaginated","contents","viewContents","EventEmitter"],"mappings":"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","x_google_ignoreList":[0]}