mirror of
https://github.com/ueberdosis/tiptap.git
synced 2024-11-28 07:40:13 +08:00
73 lines
1.1 KiB
Vue
73 lines
1.1 KiB
Vue
<template>
|
|
<div v-if="html" v-html="html" />
|
|
<pre v-else><code>{{ code }}</code></pre>
|
|
</template>
|
|
|
|
<script>
|
|
import Worker from './shiki.worker?worker'
|
|
// this import is a bugfix
|
|
// otherwise the `onigasm.wasm` file is missing in the dist folder
|
|
import 'shiki/dist/onigasm.wasm?url'
|
|
|
|
export default {
|
|
props: {
|
|
code: {
|
|
default: '',
|
|
type: String,
|
|
},
|
|
|
|
language: {
|
|
default: 'js',
|
|
type: String,
|
|
},
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
worker: new Worker(),
|
|
html: null,
|
|
highlighter: window?.highlighter,
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
code: {
|
|
immediate: true,
|
|
handler() {
|
|
this.render()
|
|
},
|
|
},
|
|
|
|
highlighter: {
|
|
immediate: true,
|
|
handler() {
|
|
this.render()
|
|
},
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
render() {
|
|
this.worker.postMessage({
|
|
code: this.code,
|
|
language: this.language,
|
|
})
|
|
},
|
|
},
|
|
|
|
created() {
|
|
this.worker.addEventListener('message', event => {
|
|
const { html } = event.data
|
|
|
|
this.html = html
|
|
})
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.shiki {
|
|
background-color: transparent !important;
|
|
}
|
|
</style>
|