Merge pull request #17 from ueberdosis/feature/add-tilde-shortcut-to-code-blocks

add tilde markdown shortcut support to code blocks
This commit is contained in:
Philipp Kühn
2020-10-02 21:45:37 +02:00
committed by GitHub
3 changed files with 39 additions and 15 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

@@ -1,7 +1,7 @@
# CodeBlock # CodeBlock
With the CodeBlock extension you can add fenced code blocks to your documents. Itll wrap the code in `<pre>` and `<code>` HTML tags. With the CodeBlock extension you can add fenced code blocks to your documents. Itll wrap the code in `<pre>` and `<code>` HTML tags.
Type three backticks and a space <code>&grave;&grave;&grave;</code> and a code block is instantly added for you. Type <code>&grave;&grave;&grave;&nbsp;</code> (three backticks and a space) or <code>&Tilde;&Tilde;&Tilde;&nbsp;</code> (three tildes and a space) and a code block is instantly added for you. You can even specify the language, try writing <code>&grave;&grave;&grave;css&nbsp;</code>. That should add a `language-css` class to the `<code>`-tag.
::: warning Restrictions ::: warning Restrictions
The CodeBlock extension doesnt come with styling and has no syntax highlighting built-in. Its on our roadmap though. The CodeBlock extension doesnt come with styling and has no syntax highlighting built-in. Its on our roadmap though.

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()