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 %} diff --git a/cms_theme/templates/code_block/admin/code_block.html b/cms_theme/templates/code_block/admin/code_block.html new file mode 100644 index 0000000..fb54885 --- /dev/null +++ b/cms_theme/templates/code_block/admin/code_block.html @@ -0,0 +1,46 @@ +{% extends "djangocms_frontend/admin/base.html" %} + +{% block object-tools %} + {{ block.super }}{% spaceless %} + {% endspaceless %} +{% endblock %} diff --git a/cms_theme/templates/code_block/code_block.html b/cms_theme/templates/code_block/code_block.html new file mode 100644 index 0000000..74df383 --- /dev/null +++ b/cms_theme/templates/code_block/code_block.html @@ -0,0 +1,11 @@ +{% load i18n cms_tags frontend %} +
+ {% if instance.heading %} +
+

{% inline_field instance "heading" %}

+
+ {% endif %} +
+ {{ instance.code_content }} +
+