diff --git a/cms_theme/apps.py b/cms_theme/apps.py
index bf4e3ef..975bc73 100644
--- a/cms_theme/apps.py
+++ b/cms_theme/apps.py
@@ -4,3 +4,11 @@
class CmsThemeConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "cms_theme"
+
+ def ready(self) -> None:
+ from cms.plugin_pool import plugin_pool
+
+ code_plugin = plugin_pool.get_plugin("CodeBlockPlugin")
+ if code_plugin:
+ code_plugin.change_form_template = "code_block/admin/code_block.html"
+
\ No newline at end of file
diff --git a/cms_theme/cms_components.py b/cms_theme/cms_components.py
index 03829d4..c3eb4e8 100644
--- a/cms_theme/cms_components.py
+++ b/cms_theme/cms_components.py
@@ -925,3 +925,41 @@ def clean(self):
),
}
)
+
+
+@components.register
+class CodeBlock(CMSFrontendComponent):
+ """Code card component to render code snippets with syntax highlighting"""
+ class Media:
+ js = (
+ "admin/vendor/ace/ace.js"
+ if "djangocms_static_ace" in settings.INSTALLED_APPS
+ else "https://cdnjs.cloudflare.com/ajax/libs/ace/1.43.3/ace.js",
+ )
+
+ class Meta:
+ name = _("Code Block")
+ render_template = "code_block/code_block.html"
+ change_form_template = "code_block/admin/code_block.html"
+ allow_children = True
+ child_classes = []
+ mixins = ["Background", "Spacing", "Attributes"]
+ frontend_editable_fields = ("heading",)
+
+ heading = forms.CharField(
+ label=_("Heading"),
+ required=False,
+ help_text=_("Heading for the code block."),
+ )
+ dark_mode = forms.BooleanField(
+ label=_("Dark mode"),
+ required=False,
+ initial=False,
+ help_text=_("Enable dark mode for code block."),
+ )
+ code_content = forms.CharField(
+ label=_("Code"),
+ initial="",
+ required=True,
+ widget=forms.widgets.Textarea(attrs={"class": "js-ckeditor-use-selected-text"}),
+ )
diff --git a/cms_theme/templates/cms_theme/base.html b/cms_theme/templates/cms_theme/base.html
index ff6be55..72d1dbd 100644
--- a/cms_theme/templates/cms_theme/base.html
+++ b/cms_theme/templates/cms_theme/base.html
@@ -58,7 +58,7 @@
-
+
{% endblock end_js %}