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"), # ]