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') .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', () => { it('should parse the language from a HTML code block', () => {
cy.get('.ProseMirror').then(([{ editor }]) => { cy.get('.ProseMirror').then(([{ editor }]) => {
editor.setContent('<pre><code class="language-css">body { display: none; }</code></pre>') 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 }]) => { cy.get('.ProseMirror').then(([{ editor }]) => {
editor.clearContent() editor.clearContent()
@@ -89,4 +100,15 @@ context('/api/extensions/code-block', () => {
.should('contain', 'Code') .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>() export default new Node<CodeBlockOptions>()
.name('code_block') .name('code_block')
@@ -62,6 +63,7 @@ export default new Node<CodeBlockOptions>()
'Shift-Control-\\': () => editor.codeBlock(), 'Shift-Control-\\': () => editor.codeBlock(),
})) }))
.inputRules(({ type }) => [ .inputRules(({ type }) => [
textblockTypeInputRule(inputRegex, type, ({ groups }: any) => groups), textblockTypeInputRule(backtickInputRegex, type, ({ groups }: any) => groups),
textblockTypeInputRule(tildeInputRegex, type, ({ groups }: any) => groups),
]) ])
.create() .create()