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 • 15 kB
Source Map (JSON)
{"version":3,"file":"section.mjs","sources":["../../../../../node_modules/epubjs/src/section.js"],"sourcesContent":["import { defer } from \"./utils/core\";\nimport EpubCFI from \"./epubcfi\";\nimport Hook from \"./utils/hook\";\nimport { sprint } from \"./utils/core\";\nimport { replaceBase } from \"./utils/replacements\";\nimport Request from \"./utils/request\";\nimport { DOMParser as XMLDOMSerializer } from \"@xmldom/xmldom\";\n\n/**\n * Represents a Section of the Book\n *\n * In most books this is equivalent to a Chapter\n * @param {object} item The spine item representing the section\n * @param {object} hooks hooks for serialize and content\n */\nclass Section {\n\tconstructor(item, hooks){\n\t\tthis.idref = item.idref;\n\t\tthis.linear = item.linear === \"yes\";\n\t\tthis.properties = item.properties;\n\t\tthis.index = item.index;\n\t\tthis.href = item.href;\n\t\tthis.url = item.url;\n\t\tthis.canonical = item.canonical;\n\t\tthis.next = item.next;\n\t\tthis.prev = item.prev;\n\n\t\tthis.cfiBase = item.cfiBase;\n\n\t\tif (hooks) {\n\t\t\tthis.hooks = hooks;\n\t\t} else {\n\t\t\tthis.hooks = {};\n\t\t\tthis.hooks.serialize = new Hook(this);\n\t\t\tthis.hooks.content = new Hook(this);\n\t\t}\n\n\t\tthis.document = undefined;\n\t\tthis.contents = undefined;\n\t\tthis.output = undefined;\n\t}\n\n\t/**\n\t * Load the section from its url\n\t * @param {method} [_request] a request method to use for loading\n\t * @return {document} a promise with the xml document\n\t */\n\tload(_request){\n\t\tvar request = _request || this.request || Request;\n\t\tvar loading = new defer();\n\t\tvar loaded = loading.promise;\n\n\t\tif(this.contents) {\n\t\t\tloading.resolve(this.contents);\n\t\t} else {\n\t\t\trequest(this.url)\n\t\t\t\t.then(function(xml){\n\t\t\t\t\t// var directory = new Url(this.url).directory;\n\n\t\t\t\t\tthis.document = xml;\n\t\t\t\t\tthis.contents = xml.documentElement;\n\n\t\t\t\t\treturn this.hooks.content.trigger(this.document, this);\n\t\t\t\t}.bind(this))\n\t\t\t\t.then(function(){\n\t\t\t\t\tloading.resolve(this.contents);\n\t\t\t\t}.bind(this))\n\t\t\t\t.catch(function(error){\n\t\t\t\t\tloading.reject(error);\n\t\t\t\t});\n\t\t}\n\n\t\treturn loaded;\n\t}\n\n\t/**\n\t * Adds a base tag for resolving urls in the section\n\t * @private\n\t */\n\tbase(){\n\t\treturn replaceBase(this.document, this);\n\t}\n\n\t/**\n\t * Render the contents of a section\n\t * @param {method} [_request] a request method to use for loading\n\t * @return {string} output a serialized XML Document\n\t */\n\trender(_request){\n\t\tvar rendering = new defer();\n\t\tvar rendered = rendering.promise;\n\t\tthis.output; // TODO: better way to return this from hooks?\n\n\t\tthis.load(_request).\n\t\t\tthen(function(contents){\n\t\t\t\tvar userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n\t\t\t\tvar isIE = userAgent.indexOf('Trident') >= 0;\n\t\t\t\tvar Serializer;\n\t\t\t\tif (typeof XMLSerializer === \"undefined\" || isIE) {\n\t\t\t\t\tSerializer = XMLDOMSerializer;\n\t\t\t\t} else {\n\t\t\t\t\tSerializer = XMLSerializer;\n\t\t\t\t}\n\t\t\t\tvar serializer = new Serializer();\n\t\t\t\tthis.output = serializer.serializeToString(contents);\n\t\t\t\treturn this.output;\n\t\t\t}.bind(this)).\n\t\t\tthen(function(){\n\t\t\t\treturn this.hooks.serialize.trigger(this.output, this);\n\t\t\t}.bind(this)).\n\t\t\tthen(function(){\n\t\t\t\trendering.resolve(this.output);\n\t\t\t}.bind(this))\n\t\t\t.catch(function(error){\n\t\t\t\trendering.reject(error);\n\t\t\t});\n\n\t\treturn rendered;\n\t}\n\n\t/**\n\t * Find a string in a section\n\t * @param {string} _query The query string to find\n\t * @return {object[]} A list of matches, with form {cfi, excerpt}\n\t */\n\tfind(_query){\n\t\tvar section = this;\n\t\tvar matches = [];\n\t\tvar query = _query.toLowerCase();\n\t\tvar find = function(node){\n\t\t\tvar text = node.textContent.toLowerCase();\n\t\t\tvar range = section.document.createRange();\n\t\t\tvar cfi;\n\t\t\tvar pos;\n\t\t\tvar last = -1;\n\t\t\tvar excerpt;\n\t\t\tvar limit = 150;\n\n\t\t\twhile (pos != -1) {\n\t\t\t\t// Search for the query\n\t\t\t\tpos = text.indexOf(query, last + 1);\n\n\t\t\t\tif (pos != -1) {\n\t\t\t\t\t// We found it! Generate a CFI\n\t\t\t\t\trange = section.document.createRange();\n\t\t\t\t\trange.setStart(node, pos);\n\t\t\t\t\trange.setEnd(node, pos + query.length);\n\n\t\t\t\t\tcfi = section.cfiFromRange(range);\n\n\t\t\t\t\t// Generate the excerpt\n\t\t\t\t\tif (node.textContent.length < limit) {\n\t\t\t\t\t\texcerpt = node.textContent;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\texcerpt = node.textContent.substring(pos - limit/2, pos + limit/2);\n\t\t\t\t\t\texcerpt = \"...\" + excerpt + \"...\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add the CFI to the matches list\n\t\t\t\t\tmatches.push({\n\t\t\t\t\t\tcfi: cfi,\n\t\t\t\t\t\texcerpt: excerpt\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlast = pos;\n\t\t\t}\n\t\t};\n\n\t\tsprint(section.document, function(node) {\n\t\t\tfind(node);\n\t\t});\n\n\t\treturn matches;\n\t};\n\n\n\t/**\n\t * Search a string in multiple sequential Element of the section. If the document.createTreeWalker api is missed(eg: IE8), use `find` as a fallback.\n\t * @param {string} _query The query string to search\n\t * @param {int} maxSeqEle The maximum number of Element that are combined for search, default value is 5.\n\t * @return {object[]} A list of matches, with form {cfi, excerpt}\n\t */\n\tsearch(_query , maxSeqEle = 5){\n\t\tif (typeof(document.createTreeWalker) == \"undefined\") {\n\t\t\treturn this.find(_query);\n\t\t}\n\t\tlet matches = [];\n\t\tconst excerptLimit = 150;\n\t\tconst section = this;\n\t\tconst query = _query.toLowerCase();\n\t\tconst search = function(nodeList){\n\t\t\tconst textWithCase = nodeList.reduce((acc ,current)=>{\n\t\t\t\treturn acc + current.textContent;\n\t\t\t},\"\");\n\t\t\tconst text = textWithCase.toLowerCase();\n\t\t\tconst pos = text.indexOf(query);\n\t\t\tif (pos != -1){\n\t\t\t\tconst startNodeIndex = 0 , endPos = pos + query.length;\n\t\t\t\tlet endNodeIndex = 0 , l = 0;\n\t\t\t\tif (pos < nodeList[startNodeIndex].length){\n\t\t\t\t\tlet cfi;\n\t\t\t\t\twhile( endNodeIndex < nodeList.length - 1 ){\n\t\t\t\t\t\tl += nodeList[endNodeIndex].length;\n\t\t\t\t\t\tif ( endPos <= l){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tendNodeIndex += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet startNode = nodeList[startNodeIndex] , endNode = nodeList[endNodeIndex];\n\t\t\t\t\tlet range = section.document.createRange();\n\t\t\t\t\trange.setStart(startNode,pos);\n\t\t\t\t\tlet beforeEndLengthCount = nodeList.slice(0, endNodeIndex).reduce((acc,current)=>{return acc+current.textContent.length;},0) ;\n\t\t\t\t\trange.setEnd(endNode, beforeEndLengthCount > endPos ? endPos : endPos - beforeEndLengthCount );\n\t\t\t\t\tcfi = section.cfiFromRange(range);\n\n\t\t\t\t\tlet excerpt = nodeList.slice(0, endNodeIndex+1).reduce((acc,current)=>{return acc+current.textContent ;},\"\");\n\t\t\t\t\tif (excerpt.length > excerptLimit){\n\t\t\t\t\t\texcerpt = excerpt.substring(pos - excerptLimit/2, pos + excerptLimit/2);\n\t\t\t\t\t\texcerpt = \"...\" + excerpt + \"...\";\n\t\t\t\t\t}\n\t\t\t\t\tmatches.push({\n\t\t\t\t\t\tcfi: cfi,\n\t\t\t\t\t\texcerpt: excerpt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst treeWalker = document.createTreeWalker(section.document, NodeFilter.SHOW_TEXT, null, false);\n\t\tlet node , nodeList = [];\n\t\twhile (node = treeWalker.nextNode()) {\n\t\t\tnodeList.push(node);\n\t\t\tif (nodeList.length == maxSeqEle){\n\t\t\t\tsearch(nodeList.slice(0 , maxSeqEle));\n\t\t\t\tnodeList = nodeList.slice(1, maxSeqEle);\n\t\t\t}\n\t\t}\n\t\tif (nodeList.length > 0){\n\t\t\tsearch(nodeList);\n\t\t}\n\t\treturn matches;\n\t}\n\n\t/**\n\t* Reconciles the current chapters layout properties with\n\t* the global layout properties.\n\t* @param {object} globalLayout The global layout settings object, chapter properties string\n\t* @return {object} layoutProperties Object with layout properties\n\t*/\n\treconcileLayoutSettings(globalLayout){\n\t\t//-- Get the global defaults\n\t\tvar settings = {\n\t\t\tlayout : globalLayout.layout,\n\t\t\tspread : globalLayout.spread,\n\t\t\torientation : globalLayout.orientation\n\t\t};\n\n\t\t//-- Get the chapter's display type\n\t\tthis.properties.forEach(function(prop){\n\t\t\tvar rendition = prop.replace(\"rendition:\", \"\");\n\t\t\tvar split = rendition.indexOf(\"-\");\n\t\t\tvar property, value;\n\n\t\t\tif(split != -1){\n\t\t\t\tproperty = rendition.slice(0, split);\n\t\t\t\tvalue = rendition.slice(split+1);\n\n\t\t\t\tsettings[property] = value;\n\t\t\t}\n\t\t});\n\t\treturn settings;\n\t}\n\n\t/**\n\t * Get a CFI from a Range in the Section\n\t * @param {range} _range\n\t * @return {string} cfi an EpubCFI string\n\t */\n\tcfiFromRange(_range) {\n\t\treturn new EpubCFI(_range, this.cfiBase).toString();\n\t}\n\n\t/**\n\t * Get a CFI from an Element in the Section\n\t * @param {element} el\n\t * @return {string} cfi an EpubCFI string\n\t */\n\tcfiFromElement(el) {\n\t\treturn new EpubCFI(el, this.cfiBase).toString();\n\t}\n\n\t/**\n\t * Unload the section document\n\t */\n\tunload() {\n\t\tthis.document = undefined;\n\t\tthis.contents = undefined;\n\t\tthis.output = undefined;\n\t}\n\n\tdestroy() {\n\t\tthis.unload();\n\t\tthis.hooks.serialize.clear();\n\t\tthis.hooks.content.clear();\n\n\t\tthis.hooks = undefined;\n\t\tthis.idref = undefined;\n\t\tthis.linear = undefined;\n\t\tthis.properties = undefined;\n\t\tthis.index = undefined;\n\t\tthis.href = undefined;\n\t\tthis.url = undefined;\n\t\tthis.next = undefined;\n\t\tthis.prev = undefined;\n\n\t\tthis.cfiBase = undefined;\n\t}\n}\n\nexport default Section;\n"],"names":["Section","item","hooks","Hook","_request","request","Request","loading","defer","loaded","xml","error","replaceBase","rendering","rendered","contents","userAgent","isIE","Serializer","XMLDOMSerializer","serializer","_query","section","matches","query","find","node","text","range","cfi","pos","last","excerpt","limit","sprint","maxSeqEle","excerptLimit","search","nodeList","acc","current","endPos","endNodeIndex","l","startNode","endNode","beforeEndLengthCount","treeWalker","globalLayout","settings","prop","rendition","split","property","value","_range","EpubCFI","el"],"mappings":"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","x_google_ignoreList":[0]}