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 • 4.19 kB
Source Map (JSON)
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/preview/supports/md-preview/index.vue"],"sourcesContent":["<script lang='ts' setup>\nimport {ref, watch} from 'vue'\nimport markdownit from 'markdown-it'\nimport markdownItFootnote from 'markdown-it-footnote'\nimport markdownItContainer from 'markdown-it-container'\nimport hljs from 'highlight.js'\nimport type {PreviewProps} from '../../preview.interface'\nimport {getFileRenderByFile, getFileRenderByUrl} from '../../utils/utils'\n\nconst props = withDefaults(\n defineProps<PreviewProps>(),\n {\n url: () => null,\n file: () => null,\n },\n)\n\nconst emit = defineEmits<{\n rendered: []\n error: [error: Error]\n}>()\n\nconst markdownHtml = ref()\n\nfunction createMarkdownRenderer() {\n const md = markdownit({\n html: true,\n xhtmlOut: false,\n breaks: false,\n langPrefix: 'language-',\n linkify: true,\n typographer: true,\n quotes: '\\u201C\\u201D\\u2018\\u2019',\n highlight(str, lang) {\n if (lang && hljs.getLanguage(lang)) {\n try {\n return `<pre><code class=\"hljs\">${\n hljs.highlight(str, {language: lang, ignoreIllegals: true}).value\n }</code></pre>`\n } catch (__) {\n }\n }\n // Use md.utils.escapeHtml instead of this.utils.escapeHtml.\n return `<pre><code class=\"hljs\">${md.utils.escapeHtml(str)}</code></pre>`\n },\n })\n return md.use(markdownItFootnote).use(markdownItContainer)\n}\n\nfunction renderMarkdown(content: string | ArrayBuffer): void {\n const md = createMarkdownRenderer()\n markdownHtml.value = md.render(content as string)\n emit('rendered')\n}\n\nwatch(\n () => props.file,\n (file) => {\n if (file) {\n getFileRenderByFile(file).then((render) => {\n renderMarkdown(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 renderMarkdown(render)\n }).catch((e: Error) => {\n emit('error', e)\n })\n }\n },\n {immediate: true},\n)\n</script>\n\n<template>\n <div class=\"md-preview hljs\">\n <div v-html=\"markdownHtml\"/>\n </div>\n</template>\n\n<style scoped lang='scss'>\n@import 'highlight.js/styles/github-dark-dimmed.css';\n@import './index.css';\n\n.md-preview {\n min-height: 100vh;\n padding: 24px 48px;\n background-color: #22272e;\n color: #adbac7;\n overflow: auto;\n}\n</style>"],"names":["props","__props","emit","__emit","markdownHtml","ref","createMarkdownRenderer","md","markdownit","str","lang","hljs","markdownItFootnote","markdownItContainer","renderMarkdown","content","watch","file","getFileRenderByFile","render","url","getFileRenderByUrl","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2"],"mappings":";;;;;;;;;;;;;;;AASA,UAAMA,IAAQC,GAQRC,IAAOC,GAKPC,IAAeC,EAAA;AAErB,aAASC,IAAyB;AAChC,YAAMC,IAAKC,EAAW;AAAA,QACpB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,UAAUC,GAAKC,GAAM;AACnB,cAAIA,KAAQC,EAAK,YAAYD,CAAI;AAC/B,gBAAI;AACF,qBAAO,2BACLC,EAAK,UAAUF,GAAK,EAAC,UAAUC,GAAM,gBAAgB,GAAA,CAAK,EAAE,KAC9D;AAAA,YACF,QAAa;AAAA,YACb;AAGF,iBAAO,2BAA2BH,EAAG,MAAM,WAAWE,CAAG,CAAC;AAAA,QAC5D;AAAA,MAAA,CACD;AACD,aAAOF,EAAG,IAAIK,CAAkB,EAAE,IAAIC,CAAmB;AAAA,IAC3D;AAEA,aAASC,EAAeC,GAAqC;AAC3D,YAAMR,IAAKD,EAAA;AACX,MAAAF,EAAa,QAAQG,EAAG,OAAOQ,CAAiB,GAChDb,EAAK,UAAU;AAAA,IACjB;AAEA,WAAAc;AAAA,MACE,MAAMhB,EAAM;AAAA,MACZ,CAACiB,MAAS;AACR,QAAIA,KACFC,EAAoBD,CAAI,EAAE,KAAK,CAACE,MAAW;AACzC,UAAAL,EAAeK,CAAM;AAAA,QACvB,CAAC,EAAE,MAAM,CAAC,MAAa;AACrB,UAAAjB,EAAK,SAAS,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,UAAAL,EAAeK,CAAM;AAAA,QACvB,CAAC,EAAE,MAAM,CAAC,MAAa;AACrB,UAAAjB,EAAK,SAAS,CAAC;AAAA,QACjB,CAAC;AAAA,MAEL;AAAA,MACA,EAAC,WAAW,GAAA;AAAA,IAAI,cAKhBoB,EAAA,GAAAC,EAEM,OAFNC,GAEM;AAAA,MADJC,EAA4B,OAAA,EAAvB,WAAQrB,EAAA,SAAY,MAAA,GAAAsB,CAAA;AAAA,IAAA;;;"}