Generate beautiful code blocks with syntax highlights for editor.js.
Ideally the bellsybable-block should be used with this backend server that does SSR of the raw code:
https://github.com/Ragueel/bellsybable
It has integration with https://github.com/alecthomas/chroma which does the heavy the lifting of converting the strings into a stream of tokens, and then applies styling to them.
npm i bellsybable-block
import BellsybableBlock from "bellsybable-block"; const editor = new EditorJS({ autofocus: true, tools: { bellsybable: { class: BellsybableBlock, config: { languages: ["bash", "python"], }, }, }, });
name | description |
---|---|
generatorFunction | Function used to send your request. See payload structure:Payload |
generateUrl | If you are using default generator just change it to a desired endpoint |
styles | Themes that can be used during rendering. See: styles |
languages | Languages that bellsybable supports. See: languages |
autoGenerate | true or false whether to send automatically render request after user finishes typing |
defaultStyle | which style should new blocks use |
defaultLanguage | which language is selected by default |
{ "id": "J4JNR4QdKX", "type": "bellsybable", "data": { "fileName": "sample.py", "style": "dracula", "language": "python", "rawCode": "import json\n\nexample_dict = {'hello': 'world'}\n\nprint(example_dict)", "formattedCode": "<pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#282a36;\"><code><span style=\"display:flex;\"><span><span style=\"color:#ff79c6\">import</span> json\n</span></span><span style=\"display:flex;\"><span>\n</span></span><span style=\"display:flex;\"><span>example_dict <span style=\"color:#ff79c6\">=</span> {<span style=\"color:#f1fa8c\"></span><span style=\"color:#f1fa8c\">'</span><span style=\"color:#f1fa8c\">hello</span><span style=\"color:#f1fa8c\">'</span>: <span style=\"color:#f1fa8c\"></span><span style=\"color:#f1fa8c\">'</span><span style=\"color:#f1fa8c\">world</span><span style=\"color:#f1fa8c\">'</span>}\n</span></span><span style=\"display:flex;\"><span>\n</span></span><span style=\"display:flex;\"><span><span style=\"color:#8be9fd;font-style:italic\">print</span>(example_dict)</span></span></code></pre>" } }
You can use some other custom backend that returns structure in a correct response format.
Request will be a POST method with the following structure:
{ "code": "WRITTEN_CODE", "language": "SELECTED_LANGUAGE", "style": "SELECTED_STYLE" }
Expected Response:
{ "code": "YOUR_RENDERED_CODE" }