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 16.8 kB
{"version":3,"file":"packaging.mjs","sources":["../../../../../node_modules/epubjs/src/packaging.js"],"sourcesContent":["import {qs, qsa, qsp, indexOfElementNode} from \"./utils/core\";\n\n/**\n * Open Packaging Format Parser\n * @class\n * @param {document} packageDocument OPF XML\n */\nclass Packaging {\n\tconstructor(packageDocument) {\n\t\tthis.manifest = {};\n\t\tthis.navPath = '';\n\t\tthis.ncxPath = '';\n\t\tthis.coverPath = '';\n\t\tthis.spineNodeIndex = 0;\n\t\tthis.spine = [];\n\t\tthis.metadata = {};\n\n\t\tif (packageDocument) {\n\t\t\tthis.parse(packageDocument);\n\t\t}\n\t}\n\n\t/**\n\t * Parse OPF XML\n\t * @param {document} packageDocument OPF XML\n\t * @return {object} parsed package parts\n\t */\n\tparse(packageDocument){\n\t\tvar metadataNode, manifestNode, spineNode;\n\n\t\tif(!packageDocument) {\n\t\t\tthrow new Error(\"Package File Not Found\");\n\t\t}\n\n\t\tmetadataNode = qs(packageDocument, \"metadata\");\n\t\tif(!metadataNode) {\n\t\t\tthrow new Error(\"No Metadata Found\");\n\t\t}\n\n\t\tmanifestNode = qs(packageDocument, \"manifest\");\n\t\tif(!manifestNode) {\n\t\t\tthrow new Error(\"No Manifest Found\");\n\t\t}\n\n\t\tspineNode = qs(packageDocument, \"spine\");\n\t\tif(!spineNode) {\n\t\t\tthrow new Error(\"No Spine Found\");\n\t\t}\n\n\t\tthis.manifest = this.parseManifest(manifestNode);\n\t\tthis.navPath = this.findNavPath(manifestNode);\n\t\tthis.ncxPath = this.findNcxPath(manifestNode, spineNode);\n\t\tthis.coverPath = this.findCoverPath(packageDocument);\n\n\t\tthis.spineNodeIndex = indexOfElementNode(spineNode);\n\n\t\tthis.spine = this.parseSpine(spineNode, this.manifest);\n\n\t\tthis.uniqueIdentifier = this.findUniqueIdentifier(packageDocument);\n\t\tthis.metadata = this.parseMetadata(metadataNode);\n\n\t\tthis.metadata.direction = spineNode.getAttribute(\"page-progression-direction\");\n\n\t\treturn {\n\t\t\t\"metadata\" : this.metadata,\n\t\t\t\"spine\" : this.spine,\n\t\t\t\"manifest\" : this.manifest,\n\t\t\t\"navPath\" : this.navPath,\n\t\t\t\"ncxPath\" : this.ncxPath,\n\t\t\t\"coverPath\": this.coverPath,\n\t\t\t\"spineNodeIndex\" : this.spineNodeIndex\n\t\t};\n\t}\n\n\t/**\n\t * Parse Metadata\n\t * @private\n\t * @param {node} xml\n\t * @return {object} metadata\n\t */\n\tparseMetadata(xml){\n\t\tvar metadata = {};\n\n\t\tmetadata.title = this.getElementText(xml, \"title\");\n\t\tmetadata.creator = this.getElementText(xml, \"creator\");\n\t\tmetadata.description = this.getElementText(xml, \"description\");\n\n\t\tmetadata.pubdate = this.getElementText(xml, \"date\");\n\n\t\tmetadata.publisher = this.getElementText(xml, \"publisher\");\n\n\t\tmetadata.identifier = this.getElementText(xml, \"identifier\");\n\t\tmetadata.language = this.getElementText(xml, \"language\");\n\t\tmetadata.rights = this.getElementText(xml, \"rights\");\n\n\t\tmetadata.modified_date = this.getPropertyText(xml, \"dcterms:modified\");\n\n\t\tmetadata.layout = this.getPropertyText(xml, \"rendition:layout\");\n\t\tmetadata.orientation = this.getPropertyText(xml, \"rendition:orientation\");\n\t\tmetadata.flow = this.getPropertyText(xml, \"rendition:flow\");\n\t\tmetadata.viewport = this.getPropertyText(xml, \"rendition:viewport\");\n\t\tmetadata.media_active_class = this.getPropertyText(xml, \"media:active-class\");\n\t\tmetadata.spread = this.getPropertyText(xml, \"rendition:spread\");\n\t\t// metadata.page_prog_dir = packageXml.querySelector(\"spine\").getAttribute(\"page-progression-direction\");\n\n\t\treturn metadata;\n\t}\n\n\t/**\n\t * Parse Manifest\n\t * @private\n\t * @param {node} manifestXml\n\t * @return {object} manifest\n\t */\n\tparseManifest(manifestXml){\n\t\tvar manifest = {};\n\n\t\t//-- Turn items into an array\n\t\t// var selected = manifestXml.querySelectorAll(\"item\");\n\t\tvar selected = qsa(manifestXml, \"item\");\n\t\tvar items = Array.prototype.slice.call(selected);\n\n\t\t//-- Create an object with the id as key\n\t\titems.forEach(function(item){\n\t\t\tvar id = item.getAttribute(\"id\"),\n\t\t\t\t\thref = item.getAttribute(\"href\") || \"\",\n\t\t\t\t\ttype = item.getAttribute(\"media-type\") || \"\",\n\t\t\t\t\toverlay = item.getAttribute(\"media-overlay\") || \"\",\n\t\t\t\t\tproperties = item.getAttribute(\"properties\") || \"\";\n\n\t\t\tmanifest[id] = {\n\t\t\t\t\"href\" : href,\n\t\t\t\t// \"url\" : href,\n\t\t\t\t\"type\" : type,\n\t\t\t\t\"overlay\" : overlay,\n\t\t\t\t\"properties\" : properties.length ? properties.split(\" \") : []\n\t\t\t};\n\n\t\t});\n\n\t\treturn manifest;\n\n\t}\n\n\t/**\n\t * Parse Spine\n\t * @private\n\t * @param {node} spineXml\n\t * @param {Packaging.manifest} manifest\n\t * @return {object} spine\n\t */\n\tparseSpine(spineXml, manifest){\n\t\tvar spine = [];\n\n\t\tvar selected = qsa(spineXml, \"itemref\");\n\t\tvar items = Array.prototype.slice.call(selected);\n\n\t\t// var epubcfi = new EpubCFI();\n\n\t\t//-- Add to array to maintain ordering and cross reference with manifest\n\t\titems.forEach(function(item, index){\n\t\t\tvar idref = item.getAttribute(\"idref\");\n\t\t\t// var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id);\n\t\t\tvar props = item.getAttribute(\"properties\") || \"\";\n\t\t\tvar propArray = props.length ? props.split(\" \") : [];\n\t\t\t// var manifestProps = manifest[Id].properties;\n\t\t\t// var manifestPropArray = manifestProps.length ? manifestProps.split(\" \") : [];\n\n\t\t\tvar itemref = {\n\t\t\t\t\"id\" : item.getAttribute(\"id\"),\n\t\t\t\t\"idref\" : idref,\n\t\t\t\t\"linear\" : item.getAttribute(\"linear\") || \"yes\",\n\t\t\t\t\"properties\" : propArray,\n\t\t\t\t// \"href\" : manifest[Id].href,\n\t\t\t\t// \"url\" : manifest[Id].url,\n\t\t\t\t\"index\" : index\n\t\t\t\t// \"cfiBase\" : cfiBase\n\t\t\t};\n\t\t\tspine.push(itemref);\n\t\t});\n\n\t\treturn spine;\n\t}\n\n\t/**\n\t * Find Unique Identifier\n\t * @private\n\t * @param {node} packageXml\n\t * @return {string} Unique Identifier text\n\t */\n\tfindUniqueIdentifier(packageXml){\n\t\tvar uniqueIdentifierId = packageXml.documentElement.getAttribute(\"unique-identifier\");\n\t\tif (! uniqueIdentifierId) {\n\t\t\treturn \"\";\n\t\t}\n\t\tvar identifier = packageXml.getElementById(uniqueIdentifierId);\n\t\tif (! identifier) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (identifier.localName === \"identifier\" && identifier.namespaceURI === \"http://purl.org/dc/elements/1.1/\") {\n\t\t\treturn identifier.childNodes.length > 0 ? identifier.childNodes[0].nodeValue.trim() : \"\";\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Find TOC NAV\n\t * @private\n\t * @param {element} manifestNode\n\t * @return {string}\n\t */\n\tfindNavPath(manifestNode){\n\t\t// Find item with property \"nav\"\n\t\t// Should catch nav regardless of order\n\t\t// var node = manifestNode.querySelector(\"item[properties$='nav'], item[properties^='nav '], item[properties*=' nav ']\");\n\t\tvar node = qsp(manifestNode, \"item\", {\"properties\":\"nav\"});\n\t\treturn node ? node.getAttribute(\"href\") : false;\n\t}\n\n\t/**\n\t * Find TOC NCX\n\t * media-type=\"application/x-dtbncx+xml\" href=\"toc.ncx\"\n\t * @private\n\t * @param {element} manifestNode\n\t * @param {element} spineNode\n\t * @return {string}\n\t */\n\tfindNcxPath(manifestNode, spineNode){\n\t\t// var node = manifestNode.querySelector(\"item[media-type='application/x-dtbncx+xml']\");\n\t\tvar node = qsp(manifestNode, \"item\", {\"media-type\":\"application/x-dtbncx+xml\"});\n\t\tvar tocId;\n\n\t\t// If we can't find the toc by media-type then try to look for id of the item in the spine attributes as\n\t\t// according to http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.4.1.2,\n\t\t// \"The item that describes the NCX must be referenced by the spine toc attribute.\"\n\t\tif (!node) {\n\t\t\ttocId = spineNode.getAttribute(\"toc\");\n\t\t\tif(tocId) {\n\t\t\t\t// node = manifestNode.querySelector(\"item[id='\" + tocId + \"']\");\n\t\t\t\tnode = manifestNode.querySelector(`#${tocId}`);\n\t\t\t}\n\t\t}\n\n\t\treturn node ? node.getAttribute(\"href\") : false;\n\t}\n\n\t/**\n\t * Find the Cover Path\n\t * <item properties=\"cover-image\" id=\"ci\" href=\"cover.svg\" media-type=\"image/svg+xml\" />\n\t * Fallback for Epub 2.0\n\t * @private\n\t * @param {node} packageXml\n\t * @return {string} href\n\t */\n\tfindCoverPath(packageXml){\n\t\tvar pkg = qs(packageXml, \"package\");\n\t\tvar epubVersion = pkg.getAttribute(\"version\");\n\t\t\n\t\t// Try parsing cover with epub 3.\n\t\t// var node = packageXml.querySelector(\"item[properties='cover-image']\");\n\t\tvar node = qsp(packageXml, \"item\", {\"properties\":\"cover-image\"});\n\t\tif (node) return node.getAttribute(\"href\");\n\t\t\n\t\t// Fallback to epub 2.\n\t\tvar metaCover = qsp(packageXml, \"meta\", {\"name\":\"cover\"});\n\n\t\tif (metaCover) {\n\t\t\tvar coverId = metaCover.getAttribute(\"content\");\n\t\t\t// var cover = packageXml.querySelector(\"item[id='\" + coverId + \"']\");\n\t\t\tvar cover = packageXml.getElementById(coverId);\n\t\t\treturn cover ? cover.getAttribute(\"href\") : \"\";\n\t\t}\n\t\telse {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Get text of a namespaced element\n\t * @private\n\t * @param {node} xml\n\t * @param {string} tag\n\t * @return {string} text\n\t */\n\tgetElementText(xml, tag){\n\t\tvar found = xml.getElementsByTagNameNS(\"http://purl.org/dc/elements/1.1/\", tag);\n\t\tvar el;\n\n\t\tif(!found || found.length === 0) return \"\";\n\n\t\tel = found[0];\n\n\t\tif(el.childNodes.length){\n\t\t\treturn el.childNodes[0].nodeValue;\n\t\t}\n\n\t\treturn \"\";\n\n\t}\n\n\t/**\n\t * Get text by property\n\t * @private\n\t * @param {node} xml\n\t * @param {string} property\n\t * @return {string} text\n\t */\n\tgetPropertyText(xml, property){\n\t\tvar el = qsp(xml, \"meta\", {\"property\":property});\n\n\t\tif(el && el.childNodes.length){\n\t\t\treturn el.childNodes[0].nodeValue;\n\t\t}\n\n\t\treturn \"\";\n\t}\n\n\t/**\n\t * Load JSON Manifest\n\t * @param {document} packageDocument OPF XML\n\t * @return {object} parsed package parts\n\t */\n\tload(json) {\n\t\tthis.metadata = json.metadata;\n\n\t\tlet spine = json.readingOrder || json.spine;\n\t\tthis.spine = spine.map((item, index) =>{\n\t\t\titem.index = index;\n\t\t\titem.linear = item.linear || \"yes\";\n\t\t\treturn item;\n\t\t});\n\n\t\tjson.resources.forEach((item, index) => {\n\t\t\tthis.manifest[index] = item;\n\n\t\t\tif (item.rel && item.rel[0] === \"cover\") {\n\t\t\t\tthis.coverPath = item.href;\n\t\t\t}\n\t\t});\n\n\t\tthis.spineNodeIndex = 0;\n\n\t\tthis.toc = json.toc.map((item, index) =>{\n\t\t\titem.label = item.title;\n\t\t\treturn item;\n\t\t});\n\n\t\treturn {\n\t\t\t\"metadata\" : this.metadata,\n\t\t\t\"spine\" : this.spine,\n\t\t\t\"manifest\" : this.manifest,\n\t\t\t\"navPath\" : this.navPath,\n\t\t\t\"ncxPath\" : this.ncxPath,\n\t\t\t\"coverPath\": this.coverPath,\n\t\t\t\"spineNodeIndex\" : this.spineNodeIndex,\n\t\t\t\"toc\" : this.toc\n\t\t};\n\t}\n\n\tdestroy() {\n\t\tthis.manifest = undefined;\n\t\tthis.navPath = undefined;\n\t\tthis.ncxPath = undefined;\n\t\tthis.coverPath = undefined;\n\t\tthis.spineNodeIndex = undefined;\n\t\tthis.spine = undefined;\n\t\tthis.metadata = undefined;\n\t}\n}\n\nexport default Packaging;\n"],"names":["Packaging","packageDocument","metadataNode","manifestNode","spineNode","qs","indexOfElementNode","xml","metadata","manifestXml","manifest","selected","qsa","items","item","id","href","type","overlay","properties","spineXml","spine","index","idref","props","propArray","itemref","packageXml","uniqueIdentifierId","identifier","node","qsp","tocId","pkg","metaCover","coverId","cover","tag","found","el","property","json"],"mappings":"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","x_google_ignoreList":[0]}