add code extension
This commit is contained in:
105
packages/extension-code/index.ts
Normal file
105
packages/extension-code/index.ts
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
import { Mark, markInputRule, markPasteRule } from '@tiptap/core'
|
||||||
|
import { toggleMark } from 'prosemirror-commands'
|
||||||
|
import { MarkSpec } from 'prosemirror-model'
|
||||||
|
import VerEx from 'verbal-expressions'
|
||||||
|
|
||||||
|
declare module '@tiptap/core/src/Editor' {
|
||||||
|
interface Editor {
|
||||||
|
code(): Editor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Code extends Mark {
|
||||||
|
|
||||||
|
name = 'code'
|
||||||
|
|
||||||
|
created() {
|
||||||
|
this.editor.registerCommand('code', (next, { view }) => {
|
||||||
|
toggleMark(this.schemaType)(view.state, view.dispatch)
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
schema(): MarkSpec {
|
||||||
|
return {
|
||||||
|
excludes: '_',
|
||||||
|
parseDOM: [
|
||||||
|
{ tag: 'code' },
|
||||||
|
],
|
||||||
|
toDOM: () => ['code', 0],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
keys() {
|
||||||
|
return {
|
||||||
|
'Mod-`': () => this.editor.code(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inputRules() {
|
||||||
|
return ['`'].map(character => ([
|
||||||
|
// match start of line
|
||||||
|
markInputRule(
|
||||||
|
VerEx()
|
||||||
|
.startOfLine()
|
||||||
|
.beginCapture()
|
||||||
|
.find(character)
|
||||||
|
.beginCapture()
|
||||||
|
.somethingBut(character)
|
||||||
|
.endCapture()
|
||||||
|
.find(character)
|
||||||
|
.endCapture()
|
||||||
|
.endOfLine(),
|
||||||
|
this.schemaType,
|
||||||
|
),
|
||||||
|
// match before whitespace
|
||||||
|
markInputRule(
|
||||||
|
VerEx()
|
||||||
|
.whitespace()
|
||||||
|
.beginCapture()
|
||||||
|
.find(character)
|
||||||
|
.beginCapture()
|
||||||
|
.somethingBut(character)
|
||||||
|
.endCapture()
|
||||||
|
.find(character)
|
||||||
|
.endCapture()
|
||||||
|
.endOfLine(),
|
||||||
|
this.schemaType,
|
||||||
|
),
|
||||||
|
]))
|
||||||
|
.flat(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
pasteRules() {
|
||||||
|
return ['`'].map(character => ([
|
||||||
|
// match start of line
|
||||||
|
markPasteRule(
|
||||||
|
VerEx()
|
||||||
|
.startOfLine()
|
||||||
|
.beginCapture()
|
||||||
|
.find(character)
|
||||||
|
.beginCapture()
|
||||||
|
.somethingBut(character)
|
||||||
|
.endCapture()
|
||||||
|
.find(character)
|
||||||
|
.endCapture(),
|
||||||
|
this.schemaType,
|
||||||
|
),
|
||||||
|
// match before whitespace
|
||||||
|
markPasteRule(
|
||||||
|
VerEx()
|
||||||
|
.whitespace()
|
||||||
|
.beginCapture()
|
||||||
|
.find(character)
|
||||||
|
.beginCapture()
|
||||||
|
.somethingBut(character)
|
||||||
|
.endCapture()
|
||||||
|
.find(character)
|
||||||
|
.endCapture(),
|
||||||
|
this.schemaType,
|
||||||
|
),
|
||||||
|
]))
|
||||||
|
.flat(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
17
packages/extension-code/package.json
Normal file
17
packages/extension-code/package.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "@tiptap/extension-code",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"source": "index.ts",
|
||||||
|
"main": "dist/tiptap-extension-code.js",
|
||||||
|
"umd:main": "dist/tiptap-extension-code.umd.js",
|
||||||
|
"module": "dist/tiptap-extension-code.mjs",
|
||||||
|
"unpkg": "dist/tiptap-extension-code.js",
|
||||||
|
"jsdelivr": "dist/tiptap-extension-code.js",
|
||||||
|
"files": [
|
||||||
|
"src",
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"peerDependencies": {
|
||||||
|
"@tiptap/core": "2.x"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ import Text from '@tiptap/extension-text'
|
|||||||
import History from '@tiptap/extension-history'
|
import History from '@tiptap/extension-history'
|
||||||
import Bold from '@tiptap/extension-bold'
|
import Bold from '@tiptap/extension-bold'
|
||||||
import Italic from '@tiptap/extension-italic'
|
import Italic from '@tiptap/extension-italic'
|
||||||
|
import Code from '@tiptap/extension-code'
|
||||||
import CodeBlock from '@tiptap/extension-codeblock'
|
import CodeBlock from '@tiptap/extension-codeblock'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -51,6 +52,7 @@ export default {
|
|||||||
new History(),
|
new History(),
|
||||||
new Bold(),
|
new Bold(),
|
||||||
new Italic(),
|
new Italic(),
|
||||||
|
new Code(),
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user