vue-files-preview
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
1 lines • 3.97 kB
Source Map (JSON)
{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/preview/supports/md-preview/index.vue"],"sourcesContent":["<script lang='ts' setup>\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} from '../../utils/utils'\n\nconst props = withDefaults(\n defineProps<PreviewProps>(),\n {\n url: () => null,\n file: () => null,\n },\n)\n\nconst markdownHtml = ref()\n\nwatch(\n () => props.file,\n (val) => {\n if (val) {\n const md = markdownit({\n // Enable HTML tags in source\n html: true,\n\n // Use '/' to close single tags (<br />).\n // This is only for full CommonMark compatibility.\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks. Can be\n // useful for external highlighters.\n langPrefix: 'language-',\n\n // Autoconvert URL-like text to links\n linkify: true,\n\n // Enable some language-neutral replacement + quotes beautification\n // For the full list of replacements, see https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs\n typographer: true,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '“”‘’',\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externally.\n // If result starts with <pre... internal wrapper is skipped.\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\n return `<pre><code class=\"hljs\">${md!.utils!.escapeHtml(str)}</code></pre>`\n },\n }).use(markdownItFootnote).use(markdownItContainer)\n getFileRenderByFile(val).then((render) => {\n markdownHtml.value = md.render(render)\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</style>\n"],"names":["props","__props","markdownHtml","ref","watch","val","md","markdownit","str","lang","hljs","markdownItFootnote","markdownItContainer","getFileRenderByFile","render"],"mappings":";;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GAQRC,IAAeC;AAErB,WAAAC;AAAA,MACI,MAAMJ,EAAM;AAAA,MACZ,CAACK,MAAQ;AACP,YAAIA,GAAK;AACP,gBAAMC,IAAKC,EAAW;AAAA;AAAA,YAEpB,MAAM;AAAA;AAAA;AAAA,YAIN,UAAU;AAAA;AAAA,YAGV,QAAQ;AAAA;AAAA;AAAA,YAIR,YAAY;AAAA;AAAA,YAGZ,SAAS;AAAA;AAAA;AAAA,YAIT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOb,QAAQ;AAAA;AAAA;AAAA;AAAA,YAKR,UAAUC,GAAKC,GAAM;AACnB,kBAAIA,KAAQC,EAAK,YAAYD,CAAI;AAC3B,oBAAA;AACK,yBAAA,2BACHC,EAAK,UAAUF,GAAK,EAAC,UAAUC,GAAM,gBAAgB,GAAA,CAAK,EAAE,KAChE;AAAA,wBACW;AAAA,gBACb;AAGF,qBAAO,2BAA2BH,EAAI,MAAO,WAAWE,CAAG,CAAC;AAAA,YAC9D;AAAA,UACD,CAAA,EAAE,IAAIG,CAAkB,EAAE,IAAIC,CAAmB;AAClD,UAAAC,EAAoBR,CAAG,EAAE,KAAK,CAACS,MAAW;AAC3B,YAAAZ,EAAA,QAAQI,EAAG,OAAOQ,CAAM;AAAA,UAAA,CACtC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAC,WAAW,GAAI;AAAA,IAAA;;;;;"}