add tilde markdown shortcut support to code blocks

This commit is contained in:
Hans Pagel 2020-10-02 14:54:10 +02:00
parent f96dca37d6
commit 64da5cbcf7
2 changed files with 38 additions and 14 deletions

View File

@ -58,17 +58,6 @@ context('/api/extensions/code-block', () => {
.should('not.exist')
})
it('should make a code block from markdown shortcuts', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
cy.get('.ProseMirror')
.type('``` Code')
.find('pre>code')
.should('contain', 'Code')
})
})
it('should parse the language from a HTML code block', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.setContent('<pre><code class="language-css">body { display: none; }</code></pre>')
@ -79,7 +68,29 @@ context('/api/extensions/code-block', () => {
})
})
it('should make a code block for js', () => {
it('should make a code block from backtick markdown shortcuts', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
cy.get('.ProseMirror')
.type('``` Code')
.find('pre>code')
.should('contain', 'Code')
})
})
it('should make a code block from tilde markdown shortcuts', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
cy.get('.ProseMirror')
.type('~~~ Code')
.find('pre>code')
.should('contain', 'Code')
})
})
it('should make a code block for js with backticks', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
@ -89,4 +100,15 @@ context('/api/extensions/code-block', () => {
.should('contain', 'Code')
})
})
it('should make a code block for js with tildes', () => {
cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent()
cy.get('.ProseMirror')
.type('~~~js Code')
.find('pre>code.language-js')
.should('contain', 'Code')
})
})
})

View File

@ -13,7 +13,8 @@ declare module '@tiptap/core/src/Editor' {
}
}
export const inputRegex = /^```(?<language>[a-z]*)? $/
export const backtickInputRegex = /^```(?<language>[a-z]*)? $/
export const tildeInputRegex = /^~~~(?<language>[a-z]*)? $/
export default new Node<CodeBlockOptions>()
.name('code_block')
@ -62,6 +63,7 @@ export default new Node<CodeBlockOptions>()
'Shift-Control-\\': () => editor.codeBlock(),
}))
.inputRules(({ type }) => [
textblockTypeInputRule(inputRegex, type, ({ groups }: any) => groups),
textblockTypeInputRule(backtickInputRegex, type, ({ groups }: any) => groups),
textblockTypeInputRule(tildeInputRegex, type, ({ groups }: any) => groups),
])
.create()