| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/node_modules/tiptap-extensions/src/extensions/ |
Upload File : |
import { Extension, Plugin, PluginKey } from 'tiptap'
import { nodeEqualsType } from 'tiptap-utils'
export default class TrailingNode extends Extension {
get name() {
return 'trailing_node'
}
get defaultOptions() {
return {
node: 'paragraph',
notAfter: [
'paragraph',
],
}
}
get plugins() {
const plugin = new PluginKey(this.name)
const disabledNodes = Object.entries(this.editor.schema.nodes)
.map(([, value]) => value)
.filter(node => this.options.notAfter.includes(node.name))
return [
new Plugin({
key: plugin,
view: () => ({
update: view => {
const { state } = view
const insertNodeAtEnd = plugin.getState(state)
if (!insertNodeAtEnd) {
return
}
const { doc, schema, tr } = state
const type = schema.nodes[this.options.node]
const transaction = tr.insert(doc.content.size, type.create())
view.dispatch(transaction)
},
}),
state: {
init: (_, state) => {
const lastNode = state.tr.doc.lastChild
return !nodeEqualsType({ node: lastNode, types: disabledNodes })
},
apply: (tr, value) => {
if (!tr.docChanged) {
return value
}
const lastNode = tr.doc.lastChild
return !nodeEqualsType({ node: lastNode, types: disabledNodes })
},
},
}),
]
}
}