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 5.79 kB
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/preview/supports/epub-preview/index.vue"],"sourcesContent":["<script lang='ts' setup>\nimport {ref, watch} from 'vue'\nimport ePub from 'epubjs'\nimport type {PreviewProps} from '../../preview.interface'\nimport {getFileRenderByFile, getFileRenderByUrl} from '../../utils/utils'\n\nconst props = withDefaults(\n defineProps<PreviewProps & {\n width?: string\n height?: string\n }>(),\n {\n url: () => null,\n file: () => null,\n width: () => '100%',\n height: () => '100%',\n },\n)\n\nconst emit = defineEmits<{\n rendered: []\n error: [error: Error]\n}>()\n\nconst navigation = ref()\nconst locations = ref()\nconst currentPage = ref(1)\nconst totalPages = ref()\nconst bookAvailable = ref(false)\nconst book = ref()\nconst rendition = ref()\n\nfunction renderEpub(content: ArrayBuffer | string): void {\n book.value = ePub(content as ArrayBuffer)\n rendition.value = book.value.renderTo('epub-viewer', {\n width: '100%',\n height: 'calc(100vh - 80px)',\n flow: 'scrolled',\n allowScriptedContent: true,\n })\n book.value.ready.then(() => {\n navigation.value = book.value.navigation\n locations.value = book.value.locations\n bookAvailable.value = true\n totalPages.value = locations.value.length()\n rendition.value.display()\n emit('rendered')\n }).catch((e: Error) => {\n emit('error', e)\n })\n}\n\nwatch(\n () => props.file,\n (file) => {\n if (file) {\n getFileRenderByFile(file).then((render) => {\n renderEpub(render)\n }).catch((e: Error) => {\n emit('error', e)\n })\n }\n },\n {immediate: true},\n)\n\nwatch(\n () => props.url,\n (url) => {\n if (url && !props.file) {\n getFileRenderByUrl(url).then((render) => {\n renderEpub(render)\n }).catch((e: Error) => {\n emit('error', e)\n })\n }\n },\n {immediate: true},\n)\n\n// epub\nfunction prevPage(): void {\n if (rendition.value) {\n rendition.value.prev()\n // Update when page forward currentPage\n currentPage.value--\n if (currentPage.value < 1) {\n currentPage.value = 1\n }\n }\n}\n\nfunction nextPage(): void {\n if (rendition.value) {\n rendition.value.next()\n // Update when turning back page currentPage\n currentPage.value++\n if (currentPage.value > totalPages.value) {\n currentPage.value = totalPages.value\n }\n }\n}\n\nfunction prevKeyDown(e): void {\n e.preventDefault()\n}\n\nfunction downKeyDown(e): void {\n e.preventDefault()\n}\n\nonKeyStroke('ArrowLeft', () => {\n prevPage()\n})\n\nonKeyStroke('ArrowRight', () => {\n nextPage()\n})\n</script>\n\n<template>\n <div class=\"epub-preview epub-box\" :style=\"{ width, height }\">\n <button class=\"btn\" style=\"display: none\" @keydown=\"prevKeyDown\">\n Prev\n </button>\n <div id=\"epub-viewer\" class=\"epub-viewer\"/>\n <button class=\"btn\" style=\"display: none\" @keydown=\"downKeyDown\">\n Next\n </button>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.epub-box {\n height: 100vh;\n width: 100%;\n}\n\n.epub-viewer {\n padding: 10px;\n min-height: calc(100vh - 80px);\n max-height: calc(100vh - 80px);\n overflow: auto;\n}\n\n.footer {\n height: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n}\n</style>\n"],"names":["props","__props","emit","__emit","navigation","ref","locations","currentPage","totalPages","bookAvailable","book","rendition","renderEpub","content","ePub","e","watch","file","getFileRenderByFile","render","url","getFileRenderByUrl","prevPage","nextPage","prevKeyDown","downKeyDown","onKeyStroke","_createElementBlock","_normalizeStyle","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GAaRC,IAAOC,GAKPC,IAAaC,EAAA,GACbC,IAAYD,EAAA,GACZE,IAAcF,EAAI,CAAC,GACnBG,IAAaH,EAAA,GACbI,IAAgBJ,EAAI,EAAK,GACzBK,IAAOL,EAAA,GACPM,IAAYN,EAAA;AAElB,aAASO,EAAWC,GAAqC;AACvD,MAAAH,EAAK,QAAQI,EAAKD,CAAsB,GACxCF,EAAU,QAAQD,EAAK,MAAM,SAAS,eAAe;AAAA,QACnD,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,sBAAsB;AAAA,MAAA,CACvB,GACDA,EAAK,MAAM,MAAM,KAAK,MAAM;AAC1B,QAAAN,EAAW,QAAQM,EAAK,MAAM,YAC9BJ,EAAU,QAAQI,EAAK,MAAM,WAC7BD,EAAc,QAAQ,IACtBD,EAAW,QAAQF,EAAU,MAAM,OAAA,GACnCK,EAAU,MAAM,QAAA,GAChBT,EAAK,UAAU;AAAA,MACjB,CAAC,EAAE,MAAM,CAACa,MAAa;AACrB,QAAAb,EAAK,SAASa,CAAC;AAAA,MACjB,CAAC;AAAA,IACH;AAEA,IAAAC;AAAA,MACE,MAAMhB,EAAM;AAAA,MACZ,CAACiB,MAAS;AACR,QAAIA,KACFC,EAAoBD,CAAI,EAAE,KAAK,CAACE,MAAW;AACzC,UAAAP,EAAWO,CAAM;AAAA,QACnB,CAAC,EAAE,MAAM,CAACJ,MAAa;AACrB,UAAAb,EAAK,SAASa,CAAC;AAAA,QACjB,CAAC;AAAA,MAEL;AAAA,MACA,EAAC,WAAW,GAAA;AAAA,IAAI,GAGlBC;AAAA,MACE,MAAMhB,EAAM;AAAA,MACZ,CAACoB,MAAQ;AACP,QAAIA,KAAO,CAACpB,EAAM,QAChBqB,EAAmBD,CAAG,EAAE,KAAK,CAACD,MAAW;AACvC,UAAAP,EAAWO,CAAM;AAAA,QACnB,CAAC,EAAE,MAAM,CAACJ,MAAa;AACrB,UAAAb,EAAK,SAASa,CAAC;AAAA,QACjB,CAAC;AAAA,MAEL;AAAA,MACA,EAAC,WAAW,GAAA;AAAA,IAAI;AAIlB,aAASO,IAAiB;AACxB,MAAIX,EAAU,UACZA,EAAU,MAAM,KAAA,GAEhBJ,EAAY,SACRA,EAAY,QAAQ,MACtBA,EAAY,QAAQ;AAAA,IAG1B;AAEA,aAASgB,IAAiB;AACxB,MAAIZ,EAAU,UACZA,EAAU,MAAM,KAAA,GAEhBJ,EAAY,SACRA,EAAY,QAAQC,EAAW,UACjCD,EAAY,QAAQC,EAAW;AAAA,IAGrC;AAEA,aAASgB,EAAY,GAAS;AAC5B,QAAE,eAAA;AAAA,IACJ;AAEA,aAASC,EAAY,GAAS;AAC5B,QAAE,eAAA;AAAA,IACJ;AAEA,WAAAC,EAAY,aAAa,MAAM;AAC7B,MAAAJ,EAAA;AAAA,IACF,CAAC,GAEDI,EAAY,cAAc,MAAM;AAC9B,MAAAH,EAAA;AAAA,IACF,CAAC,mBAICI,EAQM,OAAA;AAAA,MARD,OAAM;AAAA,MAAyB,OAAKC,EAAA,EAAA,OAAI3B,EAAA,OAAK,QAAEA,EAAA,OAAA,CAAM;AAAA,IAAA;MACxD4B,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAM,OAAA,EAAA,SAAA,OAAA;AAAA,QAAuB,WAASL;AAAA,MAAA,GAAa,UAEjE,EAAA;AAAA,sBACAK,EAA2C,OAAA;AAAA,QAAtC,IAAG;AAAA,QAAc,OAAM;AAAA,MAAA;MAC5BA,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAM,OAAA,EAAA,SAAA,OAAA;AAAA,QAAuB,WAASJ;AAAA,MAAA,GAAa,UAEjE,EAAA;AAAA,IAAA;;;"}