vue3-tiptap-katex
Version:
tiptap editor using mathlive package to render katex in vue 3
74 lines (65 loc) • 1.56 kB
JavaScript
import { Node, mergeAttributes } from '@tiptap/core'
import { VueNodeViewRenderer } from '@tiptap/vue-3'
import TiptapInteractiveAudioUpload from './TiptapInteractiveAudioUpload.vue'
export default Node.create({
name: 'TiptapInteractiveAudioUploadInline',
group: 'inline',
atom: true,
inline: true,
draggable: true,
addAttributes() {
return {
url: {
default: '',
parseHTML: (element) => element.getAttribute('src'),
renderHTML: (attributes) => ({
src: attributes.url
})
},
width: {
default: 'auto'
},
height: {
default: 'auto'
},
controls: {
default: 1
},
justify: {
default: 'center',
renderHTML: () => ({})
},
vertical: {
default: 0,
parseHTML: (element) => {
const vertical = parseInt(element.getAttribute('data-vertical'), 10)
if (Number.isNaN(vertical)) {
return 0
}
return vertical
},
renderHTML: (attributes) => ({
'data-vertical': attributes.vertical,
style: `vertical-align: ${-1 * attributes.vertical}px`
})
},
horizontal: {
default: 0,
renderHTML: () => ({})
}
}
},
parseHTML() {
return [
{
tag: 'audio'
}
]
},
renderHTML({ HTMLAttributes }) {
return ['audio', mergeAttributes(HTMLAttributes)]
},
addNodeView() {
return VueNodeViewRenderer(TiptapInteractiveAudioUpload)
}
})