diff --git a/app/cms/admin.py b/app/cms/admin.py new file mode 100644 index 0000000..9f8f039 --- /dev/null +++ b/app/cms/admin.py @@ -0,0 +1,158 @@ +from cms.models import Page, Section, Sitemap +from django import forms +from django.contrib import admin +from django.utils.html import format_html + +_CODE_PREVIEW_TEMPLATE = """ + + +
+
+ + + + + +
+ {ta} +
+
+ +
+
+""" + + +class CodeEditorWidget(forms.Textarea): + class Media: + css = { + "all": ( + "https://unpkg.com/codemirror@5.65.5/lib/codemirror.css", + "https://unpkg.com/codemirror@5.65.5/theme/dracula.css", + ) + } + js = ( + "https://unpkg.com/codemirror@5.65.5/lib/codemirror.js", + "https://unpkg.com/codemirror@5.65.5/mode/javascript/javascript.js", + "https://unpkg.com/@babel/standalone/babel.min.js", + "/static/admin/js/editor.js", + ) + + def render(self, name, value, attrs=None, renderer=None): + ta = super().render(name, value, attrs, renderer) + return format_html(_CODE_PREVIEW_TEMPLATE, name=name, ta=ta) + + +class SectionAdminForm(forms.ModelForm): + class Meta: + model = Section + fields = "__all__" + widgets = {"body": CodeEditorWidget()} + + +@admin.register(Section) +class SectionAdmin(admin.ModelAdmin): + form = SectionAdminForm + + +admin.site.register(Page) +admin.site.register(Sitemap)