# Editor.js Workspace in classic editors is made of a single contenteditable element, used to create different HTML markups. Editor.js workspace consists of separate Blocks: paragraphs, headings, images, lists, quotes, etc. Each of them is an independent contenteditable element (or more complex structure) provided by Plugin and united by Editor's Core. Editor.js is fully integrated in Murph as form types. ![](/_static/img/editors/editorjs.png) ## Classic form ```php-inline // src/Form/ExampleType.php namespace App\Form\ExampleType; use App\Core\Form\Type\EditorJsTextareaType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class ExampleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add( 'myField', EditorJsTextareaType::class ); // ... } // ... } ``` Modified data should return stringified JSON array if empty: ```php-inline public function getMyField(): string { if (empty($this->myField)) { $this->myField = '[]'; } return $this->myField; } ``` ## Page form ```php-inline // src/Entity/Page/YourPage.php namespace App\Entity\Page; use App\Core\Entity\Site\Page\Block; use App\Core\Form\Site\Page\EditorJsTextareaBlockType; #[@ORM\Entity] class YourPage extends Page { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add( 'myBlock', EditorJsTextareaBlockType::class, [ 'label' => 'My block', 'row_attr' => [ ], 'options' => [ // options given to the sub form ], ] ); // ... } public function setMyBlock(Block $block) { return $this->setBlock($block); } public function getMyBlock(): Block { return $this->getBlock('myBlock'); } // ... } ``` ## Rendering Editor.js will generate a JSON which contains blocks. Supported blocks: * paragraph * header * quote * delimiter * warning * list * nestedList * checkList * table * code * raw * image * link To render HTML, the basic way is: `{{ value|editorjs_to_html }}` If you want to render specific blocks: `{{ value|editorjs_to_html(['paragraph', 'header', ...])) }}` Block have default templates stored in `vendor/murph/murph-core/src/core/Resources/views/editorjs`. They can be simply overridden in `config/packages/app.yaml`: ```yaml core: editor_js: blocks: paragraph: 'path/to/paragraph.html.twig' header: 'path/to/header.html.twig' ```