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.

135 lines (134 loc) 3.99 kB
import o from "./epubcfi.mjs"; import { qs as h, querySelectorByType as c, qsa as f, indexOfSorted as u, locationOf as l } from "./utils/core.mjs"; class x { constructor(t) { this.pages = [], this.locations = [], this.epubcfi = new o(), this.firstPage = 0, this.lastPage = 0, this.totalPages = 0, this.toc = void 0, this.ncx = void 0, t && (this.pageList = this.parse(t)), this.pageList && this.pageList.length && this.process(this.pageList); } /** * Parse PageList Xml * @param {document} xml */ parse(t) { var e = h(t, "html"), a = h(t, "ncx"); if (e) return this.parseNav(t); if (a) return this.parseNcx(t); } /** * Parse a Nav PageList * @private * @param {node} navHtml * @return {PageList.item[]} list */ parseNav(t) { var e = c(t, "nav", "page-list"), a = e ? f(e, "li") : [], n = a.length, i, s = [], r; if (!a || n === 0) return s; for (i = 0; i < n; ++i) r = this.item(a[i]), s.push(r); return s; } parseNcx(t) { var e = [], a = 0, n, i, s, r = 0; if (i = h(t, "pageList"), !i || (s = f(i, "pageTarget"), r = s.length, !s || s.length === 0)) return e; for (a = 0; a < r; ++a) n = this.ncxItem(s[a]), e.push(n); return e; } ncxItem(t) { var e = h(t, "navLabel"), a = h(e, "text"), n = a.textContent, i = h(t, "content"), s = i.getAttribute("src"), r = parseInt(n, 10); return { href: s, page: r }; } /** * Page List Item * @private * @param {node} item * @return {object} pageListItem */ item(t) { var e = h(t, "a"), a = e.getAttribute("href") || "", n = e.textContent || "", i = parseInt(n), s = a.indexOf("epubcfi"), r, p, g; return s != -1 ? (r = a.split("#"), p = r[0], g = r.length > 1 ? r[1] : !1, { cfi: g, href: a, packageUrl: p, page: i }) : { href: a, page: i }; } /** * Process pageList items * @private * @param {array} pageList */ process(t) { t.forEach(function(e) { this.pages.push(e.page), e.cfi && this.locations.push(e.cfi); }, this), this.firstPage = parseInt(this.pages[0]), this.lastPage = parseInt(this.pages[this.pages.length - 1]), this.totalPages = this.lastPage - this.firstPage; } /** * Get a PageList result from a EpubCFI * @param {string} cfi EpubCFI String * @return {number} page */ pageFromCfi(t) { var e = -1; if (this.locations.length === 0) return -1; var a = u(t, this.locations, this.epubcfi.compare); return a != -1 ? e = this.pages[a] : (a = l(t, this.locations, this.epubcfi.compare), e = a - 1 >= 0 ? this.pages[a - 1] : this.pages[0], e !== void 0 || (e = -1)), e; } /** * Get an EpubCFI from a Page List Item * @param {string | number} pg * @return {string} cfi */ cfiFromPage(t) { var e = -1; typeof t != "number" && (t = parseInt(t)); var a = this.pages.indexOf(t); return a != -1 && (e = this.locations[a]), e; } /** * Get a Page from Book percentage * @param {number} percent * @return {number} page */ pageFromPercentage(t) { var e = Math.round(this.totalPages * t); return e; } /** * Returns a value between 0 - 1 corresponding to the location of a page * @param {number} pg the page * @return {number} percentage */ percentageFromPage(t) { var e = (t - this.firstPage) / this.totalPages; return Math.round(e * 1e3) / 1e3; } /** * Returns a value between 0 - 1 corresponding to the location of a cfi * @param {string} cfi EpubCFI String * @return {number} percentage */ percentageFromCfi(t) { var e = this.pageFromCfi(t), a = this.percentageFromPage(e); return a; } /** * Destroy */ destroy() { this.pages = void 0, this.locations = void 0, this.epubcfi = void 0, this.pageList = void 0, this.toc = void 0, this.ncx = void 0; } } export { x as default }; //# sourceMappingURL=pagelist.mjs.map