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 24.7 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../node_modules/epubjs/src/managers/continuous/index.js"],"sourcesContent":["import {extend, defer, requestAnimationFrame} from \"../../utils/core\";\nimport DefaultViewManager from \"../default\";\nimport Snap from \"../helpers/snap\";\nimport { EVENTS } from \"../../utils/constants\";\nimport debounce from \"lodash/debounce\";\n\nclass ContinuousViewManager extends DefaultViewManager {\n\tconstructor(options) {\n\t\tsuper(options);\n\n\t\tthis.name = \"continuous\";\n\n\t\tthis.settings = extend(this.settings || {}, {\n\t\t\tinfinite: true,\n\t\t\toverflow: undefined,\n\t\t\taxis: undefined,\n\t\t\twritingMode: undefined,\n\t\t\tflow: \"scrolled\",\n\t\t\toffset: 500,\n\t\t\toffsetDelta: 250,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsnap: false,\n\t\t\tafterScrolledTimeout: 10,\n\t\t\tallowScriptedContent: false,\n\t\t\tallowPopups: false\n\t\t});\n\n\t\textend(this.settings, options.settings || {});\n\n\t\t// Gap can be 0, but defaults doesn't handle that\n\t\tif (options.settings.gap != \"undefined\" && options.settings.gap === 0) {\n\t\t\tthis.settings.gap = options.settings.gap;\n\t\t}\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\twidth: 0,\n\t\t\theight: 0,\n\t\t\tforceEvenPages: false,\n\t\t\tallowScriptedContent: this.settings.allowScriptedContent,\n\t\t\tallowPopups: this.settings.allowPopups\n\t\t};\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\n\tdisplay(section, target){\n\t\treturn DefaultViewManager.prototype.display.call(this, section, target)\n\t\t\t.then(function () {\n\t\t\t\treturn this.fill();\n\t\t\t}.bind(this));\n\t}\n\n\tfill(_full){\n\t\tvar full = _full || new defer();\n\n\t\tthis.q.enqueue(() => {\n\t\t\treturn this.check();\n\t\t}).then((result) => {\n\t\t\tif (result) {\n\t\t\t\tthis.fill(full);\n\t\t\t} else {\n\t\t\t\tfull.resolve();\n\t\t\t}\n\t\t});\n\n\t\treturn full.promise;\n\t}\n\n\tmoveTo(offset){\n\t\t// var bounds = this.stage.bounds();\n\t\t// var dist = Math.floor(offset.top / bounds.height) * bounds.height;\n\t\tvar distX = 0,\n\t\t\t\tdistY = 0;\n\n\t\tvar offsetX = 0,\n\t\t\t\toffsetY = 0;\n\n\t\tif(!this.isPaginated) {\n\t\t\tdistY = offset.top;\n\t\t\toffsetY = offset.top+this.settings.offsetDelta;\n\t\t} else {\n\t\t\tdistX = Math.floor(offset.left / this.layout.delta) * this.layout.delta;\n\t\t\toffsetX = distX+this.settings.offsetDelta;\n\t\t}\n\n\t\tif (distX > 0 || distY > 0) {\n\t\t\tthis.scrollBy(distX, distY, true);\n\t\t}\n\t}\n\n\tafterResized(view){\n\t\tthis.emit(EVENTS.MANAGERS.RESIZE, view.section);\n\t}\n\n\t// Remove Previous Listeners if present\n\tremoveShownListeners(view){\n\n\t\t// view.off(\"shown\", this.afterDisplayed);\n\t\t// view.off(\"shown\", this.afterDisplayedAbove);\n\t\tview.onDisplayed = function(){};\n\n\t}\n\n\tadd(section){\n\t\tvar view = this.createView(section);\n\n\t\tthis.views.append(view);\n\n\t\tview.on(EVENTS.VIEWS.RESIZED, (bounds) => {\n\t\t\tview.expanded = true;\n\t\t});\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\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\treturn view.display(this.request);\n\t}\n\n\tappend(section){\n\t\tvar view = this.createView(section);\n\n\t\tview.on(EVENTS.VIEWS.RESIZED, (bounds) => {\n\t\t\tview.expanded = true;\n\t\t});\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\tthis.views.append(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\n\t\treturn view;\n\t}\n\n\tprepend(section){\n\t\tvar view = this.createView(section);\n\n\t\tview.on(EVENTS.VIEWS.RESIZED, (bounds) => {\n\t\t\tthis.counter(bounds);\n\t\t\tview.expanded = true;\n\t\t});\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\tthis.views.prepend(view);\n\n\t\tview.onDisplayed = this.afterDisplayed.bind(this);\n\n\t\treturn view;\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\t}\n\n\tupdate(_offset){\n\t\tvar container = this.bounds();\n\t\tvar views = this.views.all();\n\t\tvar viewsLength = views.length;\n\t\tvar visible = [];\n\t\tvar offset = typeof _offset != \"undefined\" ? _offset : (this.settings.offset || 0);\n\t\tvar isVisible;\n\t\tvar view;\n\n\t\tvar updating = new defer();\n\t\tvar promises = [];\n\t\tfor (var i = 0; i < viewsLength; i++) {\n\t\t\tview = views[i];\n\n\t\t\tisVisible = this.isVisible(view, offset, offset, container);\n\n\t\t\tif(isVisible === true) {\n\t\t\t\t// console.log(\"visible \" + view.index, view.displayed);\n\n\t\t\t\tif (!view.displayed) {\n\t\t\t\t\tlet displayed = view.display(this.request)\n\t\t\t\t\t\t.then(function (view) {\n\t\t\t\t\t\t\tview.show();\n\t\t\t\t\t\t}, (err) => {\n\t\t\t\t\t\t\tview.hide();\n\t\t\t\t\t\t});\n\t\t\t\t\tpromises.push(displayed);\n\t\t\t\t} else {\n\t\t\t\t\tview.show();\n\t\t\t\t}\n\t\t\t\tvisible.push(view);\n\t\t\t} else {\n\t\t\t\tthis.q.enqueue(view.destroy.bind(view));\n\t\t\t\t// console.log(\"hidden \" + view.index, view.displayed);\n\n\t\t\t\tclearTimeout(this.trimTimeout);\n\t\t\t\tthis.trimTimeout = setTimeout(function(){\n\t\t\t\t\tthis.q.enqueue(this.trim.bind(this));\n\t\t\t\t}.bind(this), 250);\n\t\t\t}\n\n\t\t}\n\n\t\tif(promises.length){\n\t\t\treturn Promise.all(promises)\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tupdating.reject(err);\n\t\t\t\t});\n\t\t} else {\n\t\t\tupdating.resolve();\n\t\t\treturn updating.promise;\n\t\t}\n\n\t}\n\n\tcheck(_offsetLeft, _offsetTop){\n\t\tvar checking = new defer();\n\t\tvar newViews = [];\n\n\t\tvar horizontal = (this.settings.axis === \"horizontal\");\n\t\tvar delta = this.settings.offset || 0;\n\n\t\tif (_offsetLeft && horizontal) {\n\t\t\tdelta = _offsetLeft;\n\t\t}\n\n\t\tif (_offsetTop && !horizontal) {\n\t\t\tdelta = _offsetTop;\n\t\t}\n\n\t\tvar bounds = this._bounds; // bounds saved this until resize\n\n\t\tlet offset = horizontal ? this.scrollLeft : this.scrollTop;\n\t\tlet visibleLength = horizontal ? Math.floor(bounds.width) : bounds.height;\n\t\tlet contentLength = horizontal ? this.container.scrollWidth : this.container.scrollHeight;\n\t\tlet writingMode = (this.writingMode && this.writingMode.indexOf(\"vertical\") === 0) ? \"vertical\" : \"horizontal\";\n\t\tlet rtlScrollType = this.settings.rtlScrollType;\n\t\tlet rtl = this.settings.direction === \"rtl\";\n\n\t\tif (!this.settings.fullsize) {\n\t\t\t// Scroll offset starts at width of element\n\t\t\tif (rtl && rtlScrollType === \"default\" && writingMode === \"horizontal\") {\n\t\t\t\toffset = contentLength - visibleLength - offset;\n\t\t\t}\n\t\t\t// Scroll offset starts at 0 and goes negative\n\t\t\tif (rtl && rtlScrollType === \"negative\" && writingMode === \"horizontal\") {\n\t\t\t\toffset = offset * -1;\n\t\t\t}\n\t\t} else {\n\t\t\t// Scroll offset starts at 0 and goes negative\n\t\t\tif ((horizontal && rtl && rtlScrollType === \"negative\") ||\n\t\t\t\t(!horizontal && rtl && rtlScrollType === \"default\")) {\n\t\t\t\toffset = offset * -1;\n\t\t\t}\n\t\t}\n\n\t\tlet prepend = () => {\n\t\t\tlet first = this.views.first();\n\t\t\tlet prev = first && first.section.prev();\n\n\t\t\tif(prev) {\n\t\t\t\tnewViews.push(this.prepend(prev));\n\t\t\t}\n\t\t};\n\n\t\tlet append = () => {\n\t\t\tlet last = this.views.last();\n\t\t\tlet next = last && last.section.next();\n\n\t\t\tif(next) {\n\t\t\t\tnewViews.push(this.append(next));\n\t\t\t}\n\n\t\t};\n\n\t\tlet end = offset + visibleLength + delta;\n\t\tlet start = offset - delta;\n\n\t\tif (end >= contentLength) {\n\t\t\tappend();\n\t\t}\n\t\t\n\t\tif (start < 0) {\n\t\t\tprepend();\n\t\t}\n\t\t\n\n\t\tlet promises = newViews.map((view) => {\n\t\t\treturn view.display(this.request);\n\t\t});\n\n\t\tif(newViews.length){\n\t\t\treturn Promise.all(promises)\n\t\t\t\t.then(() => {\n\t\t\t\t\treturn this.check();\n\t\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\t// Check to see if anything new is on screen after rendering\n\t\t\t\t\treturn this.update(delta);\n\t\t\t\t}, (err) => {\n\t\t\t\t\treturn err;\n\t\t\t\t});\n\t\t} else {\n\t\t\tthis.q.enqueue(function(){\n\t\t\t\tthis.update();\n\t\t\t}.bind(this));\n\t\t\tchecking.resolve(false);\n\t\t\treturn checking.promise;\n\t\t}\n\n\n\t}\n\n\ttrim(){\n\t\tvar task = new defer();\n\t\tvar displayed = this.views.displayed();\n\t\tvar first = displayed[0];\n\t\tvar last = displayed[displayed.length-1];\n\t\tvar firstIndex = this.views.indexOf(first);\n\t\tvar lastIndex = this.views.indexOf(last);\n\t\tvar above = this.views.slice(0, firstIndex);\n\t\tvar below = this.views.slice(lastIndex+1);\n\n\t\t// Erase all but last above\n\t\tfor (var i = 0; i < above.length-1; i++) {\n\t\t\tthis.erase(above[i], above);\n\t\t}\n\n\t\t// Erase all except first below\n\t\tfor (var j = 1; j < below.length; j++) {\n\t\t\tthis.erase(below[j]);\n\t\t}\n\n\t\ttask.resolve();\n\t\treturn task.promise;\n\t}\n\n\terase(view, above){ //Trim\n\n\t\tvar prevTop;\n\t\tvar prevLeft;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tprevTop = this.container.scrollTop;\n\t\t\tprevLeft = this.container.scrollLeft;\n\t\t} else {\n\t\t\tprevTop = window.scrollY;\n\t\t\tprevLeft = window.scrollX;\n\t\t}\n\n\t\tvar bounds = view.bounds();\n\n\t\tthis.views.remove(view);\n\t\t\n\t\tif(above) {\n\t\t\tif (this.settings.axis === \"vertical\") {\n\t\t\t\tthis.scrollTo(0, prevTop - bounds.height, true);\n\t\t\t} else {\n\t\t\t\tif(this.settings.direction === 'rtl') {\n\t\t\t\t\tif (!this.settings.fullsize) {\n\t\t\t\t\t\tthis.scrollTo(prevLeft, 0, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.scrollTo(prevLeft + Math.floor(bounds.width), 0, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.scrollTo(prevLeft - Math.floor(bounds.width), 0, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\taddEventListeners(stage){\n\n\t\twindow.addEventListener(\"unload\", function(e){\n\t\t\tthis.ignore = true;\n\t\t\t// this.scrollTo(0,0);\n\t\t\tthis.destroy();\n\t\t}.bind(this));\n\n\t\tthis.addScrollListeners();\n\n\t\tif (this.isPaginated && this.settings.snap) {\n\t\t\tthis.snapper = new Snap(this, this.settings.snap && (typeof this.settings.snap === \"object\") && this.settings.snap);\n\t\t}\n\t}\n\n\taddScrollListeners() {\n\t\tvar scroller;\n\n\t\tthis.tick = requestAnimationFrame;\n\n\t\tlet dir = this.settings.direction === \"rtl\" && this.settings.rtlScrollType === \"default\" ? -1 : 1;\n\n\t\tthis.scrollDeltaVert = 0;\n\t\tthis.scrollDeltaHorz = 0;\n\n\t\tif(!this.settings.fullsize) {\n\t\t\tscroller = this.container;\n\t\t\tthis.scrollTop = this.container.scrollTop;\n\t\t\tthis.scrollLeft = this.container.scrollLeft;\n\t\t} else {\n\t\t\tscroller = window;\n\t\t\tthis.scrollTop = window.scrollY * dir;\n\t\t\tthis.scrollLeft = window.scrollX * dir;\n\t\t}\n\n\t\tthis._onScroll = this.onScroll.bind(this);\n\t\tscroller.addEventListener(\"scroll\", this._onScroll);\n\t\tthis._scrolled = debounce(this.scrolled.bind(this), 30);\n\t\t// this.tick.call(window, this.onScroll.bind(this));\n\n\t\tthis.didScroll = false;\n\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\tonScroll(){\n\t\tlet scrollTop;\n\t\tlet scrollLeft;\n\t\tlet dir = this.settings.direction === \"rtl\" && this.settings.rtlScrollType === \"default\" ? -1 : 1;\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 * dir;\n\t\t\tscrollLeft = window.scrollX * dir;\n\t\t}\n\n\t\tthis.scrollTop = scrollTop;\n\t\tthis.scrollLeft = scrollLeft;\n\n\t\tif(!this.ignore) {\n\n\t\t\tthis._scrolled();\n\n\t\t} else {\n\t\t\tthis.ignore = false;\n\t\t}\n\n\t\tthis.scrollDeltaVert += Math.abs(scrollTop-this.prevScrollTop);\n\t\tthis.scrollDeltaHorz += Math.abs(scrollLeft-this.prevScrollLeft);\n\n\t\tthis.prevScrollTop = scrollTop;\n\t\tthis.prevScrollLeft = scrollLeft;\n\n\t\tclearTimeout(this.scrollTimeout);\n\t\tthis.scrollTimeout = setTimeout(function(){\n\t\t\tthis.scrollDeltaVert = 0;\n\t\t\tthis.scrollDeltaHorz = 0;\n\t\t}.bind(this), 150);\n\n\t\tclearTimeout(this.afterScrolled);\n\n\t\tthis.didScroll = false;\n\n\t}\n\n\tscrolled() {\n\n\t\tthis.q.enqueue(function() {\n\t\t\treturn this.check();\n\t\t}.bind(this));\n\n\t\tthis.emit(EVENTS.MANAGERS.SCROLL, {\n\t\t\ttop: this.scrollTop,\n\t\t\tleft: this.scrollLeft\n\t\t});\n\n\t\tclearTimeout(this.afterScrolled);\n\t\tthis.afterScrolled = setTimeout(function () {\n\n\t\t\t// Don't report scroll if we are about the snap\n\t\t\tif (this.snapper && this.snapper.supportsTouch && this.snapper.needsSnap()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emit(EVENTS.MANAGERS.SCROLLED, {\n\t\t\t\ttop: this.scrollTop,\n\t\t\t\tleft: this.scrollLeft\n\t\t\t});\n\n\t\t}.bind(this), this.settings.afterScrolledTimeout);\n\t}\n\n\tnext(){\n\n\t\tlet delta = this.layout.props.name === \"pre-paginated\" &&\n\t\t\t\t\t\t\t\tthis.layout.props.spread ? this.layout.props.delta * 2 : this.layout.props.delta;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\") {\n\n\t\t\tthis.scrollBy(delta, 0, true);\n\n\t\t} else {\n\n\t\t\tthis.scrollBy(0, this.layout.height, true);\n\n\t\t}\n\n\t\tthis.q.enqueue(function() {\n\t\t\treturn this.check();\n\t\t}.bind(this));\n\t}\n\n\tprev(){\n\n\t\tlet delta = this.layout.props.name === \"pre-paginated\" &&\n\t\t\t\t\t\t\t\tthis.layout.props.spread ? this.layout.props.delta * 2 : this.layout.props.delta;\n\n\t\tif(!this.views.length) return;\n\n\t\tif(this.isPaginated && this.settings.axis === \"horizontal\") {\n\n\t\t\tthis.scrollBy(-delta, 0, true);\n\n\t\t} else {\n\n\t\t\tthis.scrollBy(0, -this.layout.height, true);\n\n\t\t}\n\n\t\tthis.q.enqueue(function() {\n\t\t\treturn this.check();\n\t\t}.bind(this));\n\t}\n\n\tupdateFlow(flow){\n\t\tif (this.rendered && this.snapper) {\n\t\t\tthis.snapper.destroy();\n\t\t\tthis.snapper = undefined;\n\t\t}\n\n\t\tsuper.updateFlow(flow, \"scroll\");\n\n\t\tif (this.rendered && this.isPaginated && this.settings.snap) {\n\t\t\tthis.snapper = new Snap(this, this.settings.snap && (typeof this.settings.snap === \"object\") && this.settings.snap);\n\t\t}\n\t}\n\n\tdestroy(){\n\t\tsuper.destroy();\n\n\t\tif (this.snapper) {\n\t\t\tthis.snapper.destroy();\n\t\t}\n\t}\n\n}\n\nexport default ContinuousViewManager;\n"],"names":["ContinuousViewManager","DefaultViewManager","options","extend","section","target","_full","full","defer","result","offset","distX","distY","view","EVENTS","bounds","axis","mode","_offset","container","views","viewsLength","isVisible","updating","promises","i","displayed","err","_offsetLeft","_offsetTop","checking","newViews","horizontal","delta","visibleLength","contentLength","writingMode","rtlScrollType","rtl","prepend","first","prev","append","last","next","end","start","task","firstIndex","lastIndex","above","below","j","prevTop","prevLeft","stage","Snap","scroller","requestAnimationFrame","dir","debounce","scrollTop","scrollLeft","flow"],"mappings":"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","x_google_ignoreList":[0]}