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 31.1 kB
{"version":3,"file":"book.mjs","sources":["../../../../../node_modules/epubjs/src/book.js"],"sourcesContent":["import EventEmitter from \"event-emitter\";\nimport {extend, defer} from \"./utils/core\";\nimport Url from \"./utils/url\";\nimport Path from \"./utils/path\";\nimport Spine from \"./spine\";\nimport Locations from \"./locations\";\nimport Container from \"./container\";\nimport Packaging from \"./packaging\";\nimport Navigation from \"./navigation\";\nimport Resources from \"./resources\";\nimport PageList from \"./pagelist\";\nimport Rendition from \"./rendition\";\nimport Archive from \"./archive\";\nimport request from \"./utils/request\";\nimport EpubCFI from \"./epubcfi\";\nimport Store from \"./store\";\nimport DisplayOptions from \"./displayoptions\";\nimport { EPUBJS_VERSION, EVENTS } from \"./utils/constants\";\n\nconst CONTAINER_PATH = \"META-INF/container.xml\";\nconst IBOOKS_DISPLAY_OPTIONS_PATH = \"META-INF/com.apple.ibooks.display-options.xml\";\n\nconst INPUT_TYPE = {\n\tBINARY: \"binary\",\n\tBASE64: \"base64\",\n\tEPUB: \"epub\",\n\tOPF: \"opf\",\n\tMANIFEST: \"json\",\n\tDIRECTORY: \"directory\"\n};\n\n/**\n * An Epub representation with methods for the loading, parsing and manipulation\n * of its contents.\n * @class\n * @param {string} [url]\n * @param {object} [options]\n * @param {method} [options.requestMethod] a request function to use instead of the default\n * @param {boolean} [options.requestCredentials=undefined] send the xhr request withCredentials\n * @param {object} [options.requestHeaders=undefined] send the xhr request headers\n * @param {string} [options.encoding=binary] optional to pass 'binary' or base64' for archived Epubs\n * @param {string} [options.replacements=none] use base64, blobUrl, or none for replacing assets in archived Epubs\n * @param {method} [options.canonical] optional function to determine canonical urls for a path\n * @param {string} [options.openAs] optional string to determine the input type\n * @param {string} [options.store=false] cache the contents in local storage, value should be the name of the reader\n * @returns {Book}\n * @example new Book(\"/path/to/book.epub\", {})\n * @example new Book({ replacements: \"blobUrl\" })\n */\nclass Book {\n\tconstructor(url, options) {\n\t\t// Allow passing just options to the Book\n\t\tif (typeof(options) === \"undefined\" &&\n\t\t\t typeof(url) !== \"string\" &&\n\t\t url instanceof Blob === false &&\n\t\t url instanceof ArrayBuffer === false) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\tthis.settings = extend(this.settings || {}, {\n\t\t\trequestMethod: undefined,\n\t\t\trequestCredentials: undefined,\n\t\t\trequestHeaders: undefined,\n\t\t\tencoding: undefined,\n\t\t\treplacements: undefined,\n\t\t\tcanonical: undefined,\n\t\t\topenAs: undefined,\n\t\t\tstore: undefined\n\t\t});\n\n\t\textend(this.settings, options);\n\n\n\t\t// Promises\n\t\tthis.opening = new defer();\n\t\t/**\n\t\t * @member {promise} opened returns after the book is loaded\n\t\t * @memberof Book\n\t\t */\n\t\tthis.opened = this.opening.promise;\n\t\tthis.isOpen = false;\n\n\t\tthis.loading = {\n\t\t\tmanifest: new defer(),\n\t\t\tspine: new defer(),\n\t\t\tmetadata: new defer(),\n\t\t\tcover: new defer(),\n\t\t\tnavigation: new defer(),\n\t\t\tpageList: new defer(),\n\t\t\tresources: new defer(),\n\t\t\tdisplayOptions: new defer()\n\t\t};\n\n\t\tthis.loaded = {\n\t\t\tmanifest: this.loading.manifest.promise,\n\t\t\tspine: this.loading.spine.promise,\n\t\t\tmetadata: this.loading.metadata.promise,\n\t\t\tcover: this.loading.cover.promise,\n\t\t\tnavigation: this.loading.navigation.promise,\n\t\t\tpageList: this.loading.pageList.promise,\n\t\t\tresources: this.loading.resources.promise,\n\t\t\tdisplayOptions: this.loading.displayOptions.promise\n\t\t};\n\n\t\t/**\n\t\t * @member {promise} ready returns after the book is loaded and parsed\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.ready = Promise.all([\n\t\t\tthis.loaded.manifest,\n\t\t\tthis.loaded.spine,\n\t\t\tthis.loaded.metadata,\n\t\t\tthis.loaded.cover,\n\t\t\tthis.loaded.navigation,\n\t\t\tthis.loaded.resources,\n\t\t\tthis.loaded.displayOptions\n\t\t]);\n\n\n\t\t// Queue for methods used before opening\n\t\tthis.isRendered = false;\n\t\t// this._q = queue(this);\n\n\t\t/**\n\t\t * @member {method} request\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.request = this.settings.requestMethod || request;\n\n\t\t/**\n\t\t * @member {Spine} spine\n\t\t * @memberof Book\n\t\t */\n\t\tthis.spine = new Spine();\n\n\t\t/**\n\t\t * @member {Locations} locations\n\t\t * @memberof Book\n\t\t */\n\t\tthis.locations = new Locations(this.spine, this.load.bind(this));\n\n\t\t/**\n\t\t * @member {Navigation} navigation\n\t\t * @memberof Book\n\t\t */\n\t\tthis.navigation = undefined;\n\n\t\t/**\n\t\t * @member {PageList} pagelist\n\t\t * @memberof Book\n\t\t */\n\t\tthis.pageList = undefined;\n\n\t\t/**\n\t\t * @member {Url} url\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.url = undefined;\n\n\t\t/**\n\t\t * @member {Path} path\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.path = undefined;\n\n\t\t/**\n\t\t * @member {boolean} archived\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.archived = false;\n\n\t\t/**\n\t\t * @member {Archive} archive\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.archive = undefined;\n\n\t\t/**\n\t\t * @member {Store} storage\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.storage = undefined;\n\n\t\t/**\n\t\t * @member {Resources} resources\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.resources = undefined;\n\n\t\t/**\n\t\t * @member {Rendition} rendition\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.rendition = undefined;\n\n\t\t/**\n\t\t * @member {Container} container\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.container = undefined;\n\n\t\t/**\n\t\t * @member {Packaging} packaging\n\t\t * @memberof Book\n\t\t * @private\n\t\t */\n\t\tthis.packaging = undefined;\n\n\t\t/**\n\t\t * @member {DisplayOptions} displayOptions\n\t\t * @memberof DisplayOptions\n\t\t * @private\n\t\t */\n\t\tthis.displayOptions = undefined;\n\n\t\t// this.toc = undefined;\n\t\tif (this.settings.store) {\n\t\t\tthis.store(this.settings.store);\n\t\t}\n\n\t\tif(url) {\n\t\t\tthis.open(url, this.settings.openAs).catch((error) => {\n\t\t\t\tvar err = new Error(\"Cannot load book at \"+ url );\n\t\t\t\tthis.emit(EVENTS.BOOK.OPEN_FAILED, err);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Open a epub or url\n\t * @param {string | ArrayBuffer} input Url, Path or ArrayBuffer\n\t * @param {string} [what=\"binary\", \"base64\", \"epub\", \"opf\", \"json\", \"directory\"] force opening as a certain type\n\t * @returns {Promise} of when the book has been loaded\n\t * @example book.open(\"/path/to/book.epub\")\n\t */\n\topen(input, what) {\n\t\tvar opening;\n\t\tvar type = what || this.determineType(input);\n\n\t\tif (type === INPUT_TYPE.BINARY) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.openEpub(input);\n\t\t} else if (type === INPUT_TYPE.BASE64) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.openEpub(input, type);\n\t\t} else if (type === INPUT_TYPE.EPUB) {\n\t\t\tthis.archived = true;\n\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\topening = this.request(input, \"binary\", this.settings.requestCredentials, this.settings.requestHeaders)\n\t\t\t\t.then(this.openEpub.bind(this));\n\t\t} else if(type == INPUT_TYPE.OPF) {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openPackaging(this.url.Path.toString());\n\t\t} else if(type == INPUT_TYPE.MANIFEST) {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openManifest(this.url.Path.toString());\n\t\t} else {\n\t\t\tthis.url = new Url(input);\n\t\t\topening = this.openContainer(CONTAINER_PATH)\n\t\t\t\t.then(this.openPackaging.bind(this));\n\t\t}\n\n\t\treturn opening;\n\t}\n\n\t/**\n\t * Open an archived epub\n\t * @private\n\t * @param {binary} data\n\t * @param {string} [encoding]\n\t * @return {Promise}\n\t */\n\topenEpub(data, encoding) {\n\t\treturn this.unarchive(data, encoding || this.settings.encoding)\n\t\t\t.then(() => {\n\t\t\t\treturn this.openContainer(CONTAINER_PATH);\n\t\t\t})\n\t\t\t.then((packagePath) => {\n\t\t\t\treturn this.openPackaging(packagePath);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the epub container\n\t * @private\n\t * @param {string} url\n\t * @return {string} packagePath\n\t */\n\topenContainer(url) {\n\t\treturn this.load(url)\n\t\t\t.then((xml) => {\n\t\t\t\tthis.container = new Container(xml);\n\t\t\t\treturn this.resolve(this.container.packagePath);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the Open Packaging Format Xml\n\t * @private\n\t * @param {string} url\n\t * @return {Promise}\n\t */\n\topenPackaging(url) {\n\t\tthis.path = new Path(url);\n\t\treturn this.load(url)\n\t\t\t.then((xml) => {\n\t\t\t\tthis.packaging = new Packaging(xml);\n\t\t\t\treturn this.unpack(this.packaging);\n\t\t\t});\n\t}\n\n\t/**\n\t * Open the manifest JSON\n\t * @private\n\t * @param {string} url\n\t * @return {Promise}\n\t */\n\topenManifest(url) {\n\t\tthis.path = new Path(url);\n\t\treturn this.load(url)\n\t\t\t.then((json) => {\n\t\t\t\tthis.packaging = new Packaging();\n\t\t\t\tthis.packaging.load(json);\n\t\t\t\treturn this.unpack(this.packaging);\n\t\t\t});\n\t}\n\n\t/**\n\t * Load a resource from the Book\n\t * @param {string} path path to the resource to load\n\t * @return {Promise} returns a promise with the requested resource\n\t */\n\tload(path) {\n\t\tvar resolved = this.resolve(path);\n\t\tif(this.archived) {\n\t\t\treturn this.archive.request(resolved);\n\t\t} else {\n\t\t\treturn this.request(resolved, null, this.settings.requestCredentials, this.settings.requestHeaders);\n\t\t}\n\t}\n\n\t/**\n\t * Resolve a path to it's absolute position in the Book\n\t * @param {string} path\n\t * @param {boolean} [absolute] force resolving the full URL\n\t * @return {string} the resolved path string\n\t */\n\tresolve(path, absolute) {\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\tvar resolved = path;\n\t\tvar isAbsolute = (path.indexOf(\"://\") > -1);\n\n\t\tif (isAbsolute) {\n\t\t\treturn path;\n\t\t}\n\n\t\tif (this.path) {\n\t\t\tresolved = this.path.resolve(path);\n\t\t}\n\n\t\tif(absolute != false && this.url) {\n\t\t\tresolved = this.url.resolve(resolved);\n\t\t}\n\n\t\treturn resolved;\n\t}\n\n\t/**\n\t * Get a canonical link to a path\n\t * @param {string} path\n\t * @return {string} the canonical path string\n\t */\n\tcanonical(path) {\n\t\tvar url = path;\n\n\t\tif (!path) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (this.settings.canonical) {\n\t\t\turl = this.settings.canonical(path);\n\t\t} else {\n\t\t\turl = this.resolve(path, true);\n\t\t}\n\n\t\treturn url;\n\t}\n\n\t/**\n\t * Determine the type of they input passed to open\n\t * @private\n\t * @param {string} input\n\t * @return {string} binary | directory | epub | opf\n\t */\n\tdetermineType(input) {\n\t\tvar url;\n\t\tvar path;\n\t\tvar extension;\n\n\t\tif (this.settings.encoding === \"base64\") {\n\t\t\treturn INPUT_TYPE.BASE64;\n\t\t}\n\n\t\tif(typeof(input) != \"string\") {\n\t\t\treturn INPUT_TYPE.BINARY;\n\t\t}\n\n\t\turl = new Url(input);\n\t\tpath = url.path();\n\t\textension = path.extension;\n\n\t\t// If there's a search string, remove it before determining type\n\t\tif (extension) {\n\t\t\textension = extension.replace(/\\?.*$/, \"\");\n\t\t}\n\n\t\tif (!extension) {\n\t\t\treturn INPUT_TYPE.DIRECTORY;\n\t\t}\n\n\t\tif(extension === \"epub\"){\n\t\t\treturn INPUT_TYPE.EPUB;\n\t\t}\n\n\t\tif(extension === \"opf\"){\n\t\t\treturn INPUT_TYPE.OPF;\n\t\t}\n\n\t\tif(extension === \"json\"){\n\t\t\treturn INPUT_TYPE.MANIFEST;\n\t\t}\n\t}\n\n\n\t/**\n\t * unpack the contents of the Books packaging\n\t * @private\n\t * @param {Packaging} packaging object\n\t */\n\tunpack(packaging) {\n\t\tthis.package = packaging; //TODO: deprecated this\n\n\t\tif (this.packaging.metadata.layout === \"\") {\n\t\t\t// rendition:layout not set - check display options if book is pre-paginated\n\t\t\tthis.load(this.url.resolve(IBOOKS_DISPLAY_OPTIONS_PATH)).then((xml) => {\n\t\t\t\tthis.displayOptions = new DisplayOptions(xml);\n\t\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t\t}).catch((err) => {\n\t\t\t\tthis.displayOptions = new DisplayOptions();\n\t\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.displayOptions = new DisplayOptions();\n\t\t\tthis.loading.displayOptions.resolve(this.displayOptions);\n\t\t}\n\n\t\tthis.spine.unpack(this.packaging, this.resolve.bind(this), this.canonical.bind(this));\n\n\t\tthis.resources = new Resources(this.packaging.manifest, {\n\t\t\tarchive: this.archive,\n\t\t\tresolver: this.resolve.bind(this),\n\t\t\trequest: this.request.bind(this),\n\t\t\treplacements: this.settings.replacements || (this.archived ? \"blobUrl\" : \"base64\")\n\t\t});\n\n\t\tthis.loadNavigation(this.packaging).then(() => {\n\t\t\t// this.toc = this.navigation.toc;\n\t\t\tthis.loading.navigation.resolve(this.navigation);\n\t\t});\n\n\t\tif (this.packaging.coverPath) {\n\t\t\tthis.cover = this.resolve(this.packaging.coverPath);\n\t\t}\n\t\t// Resolve promises\n\t\tthis.loading.manifest.resolve(this.packaging.manifest);\n\t\tthis.loading.metadata.resolve(this.packaging.metadata);\n\t\tthis.loading.spine.resolve(this.spine);\n\t\tthis.loading.cover.resolve(this.cover);\n\t\tthis.loading.resources.resolve(this.resources);\n\t\tthis.loading.pageList.resolve(this.pageList);\n\n\t\tthis.isOpen = true;\n\n\t\tif(this.archived || this.settings.replacements && this.settings.replacements != \"none\") {\n\t\t\tthis.replacements().then(() => {\n\t\t\t\tthis.loaded.displayOptions.then(() => {\n\t\t\t\t\tthis.opening.resolve(this);\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(err);\n\t\t\t});\n\t\t} else {\n\t\t\t// Resolve book opened promise\n\t\t\tthis.loaded.displayOptions.then(() => {\n\t\t\t\tthis.opening.resolve(this);\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * Load Navigation and PageList from package\n\t * @private\n\t * @param {Packaging} packaging\n\t */\n\tloadNavigation(packaging) {\n\t\tlet navPath = packaging.navPath || packaging.ncxPath;\n\t\tlet toc = packaging.toc;\n\n\t\t// From json manifest\n\t\tif (toc) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.navigation = new Navigation(toc);\n\n\t\t\t\tif (packaging.pageList) {\n\t\t\t\t\tthis.pageList = new PageList(packaging.pageList); // TODO: handle page lists from Manifest\n\t\t\t\t}\n\n\t\t\t\tresolve(this.navigation);\n\t\t\t});\n\t\t}\n\n\t\tif (!navPath) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.navigation = new Navigation();\n\t\t\t\tthis.pageList = new PageList();\n\n\t\t\t\tresolve(this.navigation);\n\t\t\t});\n\t\t}\n\n\t\treturn this.load(navPath, \"xml\")\n\t\t\t.then((xml) => {\n\t\t\t\tthis.navigation = new Navigation(xml);\n\t\t\t\tthis.pageList = new PageList(xml);\n\t\t\t\treturn this.navigation;\n\t\t\t});\n\t}\n\n\t/**\n\t * Gets a Section of the Book from the Spine\n\t * Alias for `book.spine.get`\n\t * @param {string} target\n\t * @return {Section}\n\t */\n\tsection(target) {\n\t\treturn this.spine.get(target);\n\t}\n\n\t/**\n\t * Sugar to render a book to an element\n\t * @param {element | string} element element or string to add a rendition to\n\t * @param {object} [options]\n\t * @return {Rendition}\n\t */\n\trenderTo(element, options) {\n\t\tthis.rendition = new Rendition(this, options);\n\t\tthis.rendition.attachTo(element);\n\n\t\treturn this.rendition;\n\t}\n\n\t/**\n\t * Set if request should use withCredentials\n\t * @param {boolean} credentials\n\t */\n\tsetRequestCredentials(credentials) {\n\t\tthis.settings.requestCredentials = credentials;\n\t}\n\n\t/**\n\t * Set headers request should use\n\t * @param {object} headers\n\t */\n\tsetRequestHeaders(headers) {\n\t\tthis.settings.requestHeaders = headers;\n\t}\n\n\t/**\n\t * Unarchive a zipped epub\n\t * @private\n\t * @param {binary} input epub data\n\t * @param {string} [encoding]\n\t * @return {Archive}\n\t */\n\tunarchive(input, encoding) {\n\t\tthis.archive = new Archive();\n\t\treturn this.archive.open(input, encoding);\n\t}\n\n\t/**\n\t * Store the epubs contents\n\t * @private\n\t * @param {binary} input epub data\n\t * @param {string} [encoding]\n\t * @return {Store}\n\t */\n\tstore(name) {\n\t\t// Use \"blobUrl\" or \"base64\" for replacements\n\t\tlet replacementsSetting = this.settings.replacements && this.settings.replacements !== \"none\";\n\t\t// Save original url\n\t\tlet originalUrl = this.url;\n\t\t// Save original request method\n\t\tlet requester = this.settings.requestMethod || request.bind(this);\n\t\t// Create new Store\n\t\tthis.storage = new Store(name, requester, this.resolve.bind(this));\n\t\t// Replace request method to go through store\n\t\tthis.request = this.storage.request.bind(this.storage);\n\n\t\tthis.opened.then(() => {\n\t\t\tif (this.archived) {\n\t\t\t\tthis.storage.requester = this.archive.request.bind(this.archive);\n\t\t\t}\n\t\t\t// Substitute hook\n\t\t\tlet substituteResources = (output, section) => {\n\t\t\t\tsection.output = this.resources.substitute(output, section.url);\n\t\t\t};\n\n\t\t\t// Set to use replacements\n\t\t\tthis.resources.settings.replacements = replacementsSetting || \"blobUrl\";\n\t\t\t// Create replacement urls\n\t\t\tthis.resources.replacements().\n\t\t\t\tthen(() => {\n\t\t\t\t\treturn this.resources.replaceCss();\n\t\t\t\t});\n\n\t\t\tthis.storage.on(\"offline\", () => {\n\t\t\t\t// Remove url to use relative resolving for hrefs\n\t\t\t\tthis.url = new Url(\"/\", \"\");\n\t\t\t\t// Add hook to replace resources in contents\n\t\t\t\tthis.spine.hooks.serialize.register(substituteResources);\n\t\t\t});\n\n\t\t\tthis.storage.on(\"online\", () => {\n\t\t\t\t// Restore original url\n\t\t\t\tthis.url = originalUrl;\n\t\t\t\t// Remove hook\n\t\t\t\tthis.spine.hooks.serialize.deregister(substituteResources);\n\t\t\t});\n\n\t\t});\n\n\t\treturn this.storage;\n\t}\n\n\t/**\n\t * Get the cover url\n\t * @return {Promise<?string>} coverUrl\n\t */\n\tcoverUrl() {\n\t\treturn this.loaded.cover.then(() => {\n\t\t\tif (!this.cover) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (this.archived) {\n\t\t\t\treturn this.archive.createUrl(this.cover);\n\t\t\t} else {\n\t\t\t\treturn this.cover;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Load replacement urls\n\t * @private\n\t * @return {Promise} completed loading urls\n\t */\n\treplacements() {\n\t\tthis.spine.hooks.serialize.register((output, section) => {\n\t\t\tsection.output = this.resources.substitute(output, section.url);\n\t\t});\n\n\t\treturn this.resources.replacements().\n\t\t\tthen(() => {\n\t\t\t\treturn this.resources.replaceCss();\n\t\t\t});\n\t}\n\n\t/**\n\t * Find a DOM Range for a given CFI Range\n\t * @param {EpubCFI} cfiRange a epub cfi range\n\t * @return {Promise}\n\t */\n\tgetRange(cfiRange) {\n\t\tvar cfi = new EpubCFI(cfiRange);\n\t\tvar item = this.spine.get(cfi.spinePos);\n\t\tvar _request = this.load.bind(this);\n\t\tif (!item) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\treject(\"CFI could not be found\");\n\t\t\t});\n\t\t}\n\t\treturn item.load(_request).then(function (contents) {\n\t\t\tvar range = cfi.toRange(item.document);\n\t\t\treturn range;\n\t\t});\n\t}\n\n\t/**\n\t * Generates the Book Key using the identifier in the manifest or other string provided\n\t * @param {string} [identifier] to use instead of metadata identifier\n\t * @return {string} key\n\t */\n\tkey(identifier) {\n\t\tvar ident = identifier || this.packaging.metadata.identifier || this.url.filename;\n\t\treturn `epubjs:${EPUBJS_VERSION}:${ident}`;\n\t}\n\n\t/**\n\t * Destroy the Book and all associated objects\n\t */\n\tdestroy() {\n\t\tthis.opened = undefined;\n\t\tthis.loading = undefined;\n\t\tthis.loaded = undefined;\n\t\tthis.ready = undefined;\n\n\t\tthis.isOpen = false;\n\t\tthis.isRendered = false;\n\n\t\tthis.spine && this.spine.destroy();\n\t\tthis.locations && this.locations.destroy();\n\t\tthis.pageList && this.pageList.destroy();\n\t\tthis.archive && this.archive.destroy();\n\t\tthis.resources && this.resources.destroy();\n\t\tthis.container && this.container.destroy();\n\t\tthis.packaging && this.packaging.destroy();\n\t\tthis.rendition && this.rendition.destroy();\n\t\tthis.displayOptions && this.displayOptions.destroy();\n\n\t\tthis.spine = undefined;\n\t\tthis.locations = undefined;\n\t\tthis.pageList = undefined;\n\t\tthis.archive = undefined;\n\t\tthis.resources = undefined;\n\t\tthis.container = undefined;\n\t\tthis.packaging = undefined;\n\t\tthis.rendition = undefined;\n\n\t\tthis.navigation = undefined;\n\t\tthis.url = undefined;\n\t\tthis.path = undefined;\n\t\tthis.archived = false;\n\t}\n\n}\n\n//-- Enable binding events to book\nEventEmitter(Book.prototype);\n\nexport default Book;\n"],"names":["CONTAINER_PATH","IBOOKS_DISPLAY_OPTIONS_PATH","INPUT_TYPE","Book","url","options","extend","defer","request","Spine","Locations","error","err","EVENTS","input","what","opening","type","Url","data","encoding","packagePath","xml","Container","Path","Packaging","json","path","resolved","absolute","isAbsolute","extension","packaging","DisplayOptions","Resources","navPath","toc","resolve","reject","Navigation","PageList","target","element","Rendition","credentials","headers","Archive","name","replacementsSetting","originalUrl","requester","Store","substituteResources","output","section","cfiRange","cfi","EpubCFI","item","_request","contents","range","identifier","ident","EPUBJS_VERSION","EventEmitter"],"mappings":"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","x_google_ignoreList":[0]}