From aa70e2bb33c14350ae82312daa2e7ff9e29d8606 Mon Sep 17 00:00:00 2001 From: magicfelix <felix@felix-zauberer.de> Date: Wed, 23 Feb 2022 21:01:30 +0100 Subject: [PATCH] Implement StaticContentWidget --- .../0037_add_static_content_widget.py | 27 +++++++++++++++++++ aleksis/core/models.py | 14 ++++++++++ .../static_content_widget.html | 10 +++++++ 3 files changed, 51 insertions(+) create mode 100644 aleksis/core/migrations/0037_add_static_content_widget.py create mode 100644 aleksis/core/templates/core/dashboard_widget/static_content_widget.html diff --git a/aleksis/core/migrations/0037_add_static_content_widget.py b/aleksis/core/migrations/0037_add_static_content_widget.py new file mode 100644 index 000000000..bb4e810a6 --- /dev/null +++ b/aleksis/core/migrations/0037_add_static_content_widget.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.12 on 2022-02-23 18:03 + +import ckeditor.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0036_additionalfields_helptext_required'), + ] + + operations = [ + migrations.CreateModel( + name='StaticContentWidget', + fields=[ + ('dashboardwidget_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.dashboardwidget')), + ('content', ckeditor.fields.RichTextField(verbose_name='Content')), + ], + options={ + 'verbose_name': 'Static content widget', + 'verbose_name_plural': 'Static content widgets', + }, + bases=('core.dashboardwidget',), + ), + ] diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 07fdaca69..03ea0320f 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -29,6 +29,7 @@ import customidenticon import jsonstore from cachalot.api import cachalot_disabled from cache_memoize import cache_memoize +from ckeditor.fields import RichTextField from django_celery_results.models import TaskResult from django_cte import CTEQuerySet, With from dynamic_preferences.models import PerInstancePreferenceModel @@ -988,6 +989,19 @@ class ExternalLinkWidget(DashboardWidget): verbose_name_plural = _("External link widgets") +class StaticContentWidget(DashboardWidget): + template = "core/dashboard_widget/static_content_widget.html" + + content = RichTextField(verbose_name=_("Content")) + + def get_context(self, request): + return {"title": self.title, "content": self.content} + + class Meta: + verbose_name = _("Static content widget") + verbose_name_plural = _("Static content widgets") + + class DashboardWidgetOrder(ExtensibleModel): widget = models.ForeignKey( DashboardWidget, on_delete=models.CASCADE, verbose_name=_("Dashboard widget") diff --git a/aleksis/core/templates/core/dashboard_widget/static_content_widget.html b/aleksis/core/templates/core/dashboard_widget/static_content_widget.html new file mode 100644 index 000000000..96e5549d5 --- /dev/null +++ b/aleksis/core/templates/core/dashboard_widget/static_content_widget.html @@ -0,0 +1,10 @@ +{% load html_helpers %} + +<div class="card" style="padding: 2em"> + <div class="card-title"> + {{ title }} + </div> + <div class="card-text"> + {{ content|add_class_to_el:"ul, browser-default"|safe }} + </div> +</div> -- GitLab