EditorJS as a widget for Wagtail, with Page- and Image chooser support
Project description
wagtail_editorjs
Check out Awesome Wagtail for more awesome packages and resources from the Wagtail community.
A Wagtail EditorJS widget with page/image chooser support, document support and more!
Add features:
- Add an EditorJS feature
- Add an EditorJS tune (Already exists in
wagtail_editorjs
, just an example.)
Quick start
-
Add 'wagtail_editorjs' to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [ ..., 'wagtail_editorjs', ]
-
Add the HTML to your template:
<link rel="stylesheet" href="{% static 'wagtail_editorjs/css/frontend.css' %}"> {% load editorjs %} {# CSS files for features #} {% editorjs_static "css" %} {% editorjs self.editor_field %} {# JS files for features #} {% editorjs_static "js" %}
-
Add the field to your model:
... from wagtail_editorjs.fields import EditorJSField from wagtail_editorjs.blocks import EditorJSBlock class HomePage(Page): content_panels = [ FieldPanel("editor_field"), FieldPanel("content"), ] editor_field = EditorJSField( # All supported features features=[ 'attaches', 'background-color-tune', 'button', 'checklist', 'code', 'delimiter', 'document', 'drag-drop', 'header', 'image', 'images', 'inline-code', 'link', 'link-autocomplete', 'marker', 'nested-list', 'paragraph', 'quote', 'raw', 'table', 'text-alignment-tune', 'text-color-tune', 'text-variant-tune', 'tooltip', 'underline', 'undo-redo', 'warning' ], blank=True, null=True, ) # Or as a block content = fields.StreamField([ ('editorjs', EditorJSBlock(features=[ # ... same as before ])), ], blank=True, use_json_field=True)
List features
This readme might not fully reflect which features are available.
To find this out - you can:
-
start the python shell
py ./manage.py shell
-
Print all the available features:
from wagtail_editorjs.registry import EDITOR_JS_FEATURES print(EDITOR_JS_FEATURES.keys()) dict_keys([... all registered features ...])
Register a Wagtail block as a feature
It is also possible to register a Wagtail block as a feature.
It is important to note that the block must be a StructBlock
or a subclass of StructBlock
.
It is not allowed to be or include:
- A
StreamBlock
(mainly due to styling issues) - A
ListBlock
(mainly due to styling issues) - A
RichTextBlock
(cannot initialize)
Help with these issues is highly appreciated!
Example:
from wagtail import hooks
from wagtail_editorjs.features import (
WagtailBlockFeature,
EditorJSFeatureStructBlock,
)
from wagtail_editorjs.registry import (
EditorJSFeatures,
)
from wagtail_editorjs.hooks import REGISTER_HOOK_NAME
from wagtail import blocks
class HeadingBlock(blocks.StructBlock):
title = blocks.CharBlock()
subtitle = blocks.CharBlock()
class TextBlock(EditorJSFeatureStructBlock):
heading = HeadingBlock()
body = blocks.TextBlock()
class Meta:
template = "myapp/text_block.html"
allowed_tags = ["h1", "h2", "p"]
# Html looks like:
# <h1>{{ self.heading.title }}</h1>
# <h2>{{ self.heading.subtitle }}</h2>
# <p>{{ self.body }}</p>
@hooks.register(REGISTER_HOOK_NAME)
def register_editor_js_features(registry: EditorJSFeatures):
registry.register(
"wagtail-text-block",
WagtailBlockFeature(
"wagtail-text-block",
block=TextBlock(),
),
)
The block will then be rendered as any structblock, but it will be wrapped in a div with the class wagtail-text-block
(the feature name).
Example:
<div class="wagtail-text-block">
<h1>My title</h1>
<h2>My subtitle</h2>
<p>My body</p>
</div>
Settings
EDITORJS_CLEAN_HTML
Default: True
Clean the HTML output on rendering.
This happens every time the field is rendered.
It might be smart to set up some sort of caching mechanism.
Optionally; cleaning can be FORCED by passing clean=True
or False
to the render_editorjs_html
function.
EDITORJS_ADD_BLOCK_ID
Default: true
Add a block ID to each editorJS block when rendering.
This is useful for targeting the block with JavaScript,
or possibly creating some link from frontend to admin area.
EDITORJS_BLOCK_ID_ATTR
Default: data-editorjs-block-id
The attribute name to use for the block ID.
This is only used if ADD_BLOCK_ID
is True.
EDITORJS_USE_FULL_URLS
Default: False
Use full urls if the request is available in the EditorJS rendering context.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file wagtail_editorjs-1.6.5.tar.gz
.
File metadata
- Download URL: wagtail_editorjs-1.6.5.tar.gz
- Upload date:
- Size: 240.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e21fee36bcb89a3656d3a1712434ebdffc7f514c6b8bc1200198ba6f187fb71 |
|
MD5 | 665dcb9eae6e7cd9b2477802f3857591 |
|
BLAKE2b-256 | f22dd19c6de2af7c0b61979afe68b25d948c63a5fe7eadfcd4c6c7077e61f2ea |