diff --git a/home/wagtail_hooks.py b/home/wagtail_hooks.py new file mode 100644 index 0000000..17f5f9e --- /dev/null +++ b/home/wagtail_hooks.py @@ -0,0 +1,41 @@ +import wagtail.admin.rich_text.editors.draftail.features as draftail_features +from wagtail.admin.rich_text.converters.html_to_contentstate import BlockElementHandler +from wagtail import hooks + + +@hooks.register("register_rich_text_features") +def register_code_block_feature(features): + """ + Registering the `code-block` feature, which uses the `CODE-BLOCK` Draft.js block type, + and is stored as HTML with a
 tag.
+    """
+    feature_name = "code-block"
+    type_ = "CODE-BLOCK"
+
+    control = {
+        "type": type_,
+        "label": "",
+        "description": "Code block",
+        "element": "pre",
+    }
+
+    features.register_editor_plugin(
+        "draftail", feature_name, draftail_features.BlockFeature(control)
+    )
+
+    features.register_converter_rule(
+        "contentstate",
+        feature_name,
+        {
+            "from_database_format": {
+                "pre": BlockElementHandler(type_),
+                "pre > code": BlockElementHandler(type_),
+            },
+            "to_database_format": {
+                "block_map": {type_: {"element": "pre", "props": {}}}
+            },
+        },
+    )
+
+    # Optional: add to default features
+    features.default_features.append(feature_name)