iamkonstantin/base/models.py

100 lines
2.7 KiB
Python

from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.admin.panels import (
FieldPanel,
MultiFieldPanel,
PublishingPanel,
FieldRowPanel,
InlinePanel
)
from wagtail.fields import RichTextField
from wagtail.models import (
DraftStateMixin,
PreviewableMixin,
RevisionMixin,
TranslatableMixin,
)
from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField
from wagtail.snippets.models import register_snippet
from wagtail.contrib.forms.panels import FormSubmissionsPanel
from wagtail.contrib.settings.models import (
BaseGenericSetting,
register_setting,
)
@register_setting
class NavigationSettings(BaseGenericSetting):
linkedin_url = models.URLField(verbose_name="LinkedIn URL", blank=True)
github_url = models.URLField(verbose_name="GitHub URL", blank=True)
mastodon_url = models.URLField(verbose_name="Mastodon URL", blank=True)
bluesky_url = models.URLField(verbose_name="Bluesky URL", blank=True)
threads_url = models.URLField(verbose_name="Threads URL", blank=True)
panels = [
MultiFieldPanel(
[
FieldPanel("linkedin_url"),
FieldPanel("github_url"),
FieldPanel("mastodon_url"),
FieldPanel("bluesky_url"),
FieldPanel("threads_url"),
],
"Social settings",
)
]
@register_snippet
class FooterText(
DraftStateMixin,
RevisionMixin,
PreviewableMixin,
TranslatableMixin,
models.Model,
):
body = RichTextField(blank=True)
panels = [
FieldPanel("body"),
PublishingPanel(),
]
def __str__(self):
return "Footer text"
def get_preview_template(self, request, mode_name):
return "base.html"
def get_preview_context(self, request, mode_name):
return {"footer_text": self.body}
class Meta(TranslatableMixin.Meta):
verbose_name_plural = "Footer Text"
#
# class FormField(AbstractFormField):
# page = ParentalKey('FormPage', on_delete=models.CASCADE, related_name='form_fields')
#
#
# class FormPage(AbstractEmailForm):
# intro = RichTextField(blank=True)
# thank_you_text = RichTextField(blank=True)
#
# content_panels = AbstractEmailForm.content_panels + [
# FormSubmissionsPanel(),
# FieldPanel('intro'),
# InlinePanel('form_fields', label="Form fields"),
# FieldPanel('thank_you_text'),
# MultiFieldPanel([
# FieldRowPanel([
# FieldPanel('from_address'),
# FieldPanel('to_address'),
# ]),
# FieldPanel('subject'),
# ], "Email"),
# ]