diff --git a/base/__pycache__/models.cpython-314.pyc b/base/__pycache__/models.cpython-314.pyc index ecfc872..73e0bc3 100644 Binary files a/base/__pycache__/models.cpython-314.pyc and b/base/__pycache__/models.cpython-314.pyc differ diff --git a/base/migrations/0003_remove_navigationsettings_facebook_url_and_more.py b/base/migrations/0003_remove_navigationsettings_facebook_url_and_more.py new file mode 100644 index 0000000..50f8fe1 --- /dev/null +++ b/base/migrations/0003_remove_navigationsettings_facebook_url_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 5.2.9 on 2025-12-19 23:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0002_remove_navigationsettings_github_url_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='navigationsettings', + name='facebook_url', + ), + migrations.RemoveField( + model_name='navigationsettings', + name='gitea_url', + ), + migrations.RemoveField( + model_name='navigationsettings', + name='instagram_url', + ), + migrations.RemoveField( + model_name='navigationsettings', + name='youtube_url', + ), + migrations.AddField( + model_name='navigationsettings', + name='github_url', + field=models.URLField(blank=True, verbose_name='GitHub URL'), + ), + migrations.AddField( + model_name='navigationsettings', + name='linkedin_url', + field=models.URLField(blank=True, verbose_name='LinkedIn URL'), + ), + migrations.AddField( + model_name='navigationsettings', + name='mastodon_url', + field=models.URLField(blank=True, verbose_name='Mastodon URL'), + ), + ] diff --git a/base/migrations/0004_remove_navigationsettings_github_url_and_more.py b/base/migrations/0004_remove_navigationsettings_github_url_and_more.py new file mode 100644 index 0000000..c4324f8 --- /dev/null +++ b/base/migrations/0004_remove_navigationsettings_github_url_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.9 on 2025-12-19 23:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0003_remove_navigationsettings_facebook_url_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='navigationsettings', + name='github_url', + ), + migrations.AddField( + model_name='navigationsettings', + name='gitea_url', + field=models.URLField(blank=True, verbose_name='Gitea URL'), + ), + ] diff --git a/base/migrations/0005_remove_navigationsettings_linkedin_url_and_more.py b/base/migrations/0005_remove_navigationsettings_linkedin_url_and_more.py new file mode 100644 index 0000000..fbd1edc --- /dev/null +++ b/base/migrations/0005_remove_navigationsettings_linkedin_url_and_more.py @@ -0,0 +1,36 @@ +# Generated by Django 5.2.9 on 2025-12-19 23:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0004_remove_navigationsettings_github_url_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='navigationsettings', + name='linkedin_url', + ), + migrations.RemoveField( + model_name='navigationsettings', + name='mastodon_url', + ), + migrations.AddField( + model_name='navigationsettings', + name='facebook_url', + field=models.URLField(blank=True, verbose_name='Facebook URL'), + ), + migrations.AddField( + model_name='navigationsettings', + name='instagram_url', + field=models.URLField(blank=True, verbose_name='Instagram URL'), + ), + migrations.AddField( + model_name='navigationsettings', + name='youtube_url', + field=models.URLField(blank=True, verbose_name='Youtube URL'), + ), + ] diff --git a/base/migrations/0006_footertext.py b/base/migrations/0006_footertext.py new file mode 100644 index 0000000..48f35d2 --- /dev/null +++ b/base/migrations/0006_footertext.py @@ -0,0 +1,42 @@ +# Generated by Django 5.2.9 on 2025-12-20 00:19 + +import django.db.models.deletion +import uuid +import wagtail.fields +import wagtail.models.preview +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0005_remove_navigationsettings_linkedin_url_and_more'), + ('wagtailcore', '0096_referenceindex_referenceindex_source_object_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='FooterText', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('translation_key', models.UUIDField(default=uuid.uuid4, editable=False)), + ('live', models.BooleanField(default=True, editable=False, verbose_name='live')), + ('has_unpublished_changes', models.BooleanField(default=False, editable=False, verbose_name='has unpublished changes')), + ('first_published_at', models.DateTimeField(blank=True, db_index=True, null=True, verbose_name='first published at')), + ('last_published_at', models.DateTimeField(editable=False, null=True, verbose_name='last published at')), + ('go_live_at', models.DateTimeField(blank=True, null=True, verbose_name='go live date/time')), + ('expire_at', models.DateTimeField(blank=True, null=True, verbose_name='expiry date/time')), + ('expired', models.BooleanField(default=False, editable=False, verbose_name='expired')), + ('body', wagtail.fields.RichTextField()), + ('latest_revision', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.revision', verbose_name='latest revision')), + ('live_revision', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.revision', verbose_name='live revision')), + ('locale', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.locale', verbose_name='locale')), + ], + options={ + 'verbose_name_plural': 'Footer Text', + 'abstract': False, + 'unique_together': {('translation_key', 'locale')}, + }, + bases=(wagtail.models.preview.PreviewableMixin, models.Model), + ), + ] diff --git a/base/models.py b/base/models.py index 786ee1f..5ab4c25 100644 --- a/base/models.py +++ b/base/models.py @@ -1,29 +1,71 @@ from django.db import models + from wagtail.admin.panels import ( FieldPanel, MultiFieldPanel, + PublishingPanel, ) + +from wagtail.fields import RichTextField + +from wagtail.models import ( + DraftStateMixin, + PreviewableMixin, + RevisionMixin, + TranslatableMixin, +) + from wagtail.contrib.settings.models import ( BaseGenericSetting, register_setting, ) +from wagtail.snippets.models import register_snippet + + @register_setting class NavigationSettings(BaseGenericSetting): youtube_url = models.URLField(verbose_name="Youtube URL", blank=True) - facebook_url = models.URLField(verbose_name="Facebook URL", blank=True) instagram_url = models.URLField(verbose_name="Instagram URL", blank=True) + facebook_url = models.URLField(verbose_name="Facebook URL", blank=True) gitea_url = models.URLField(verbose_name="Gitea URL", blank=True) - panels = [ MultiFieldPanel( [ FieldPanel("youtube_url"), - FieldPanel("facebook_url"), FieldPanel("instagram_url"), + FieldPanel("facebook_url"), FieldPanel("gitea_url"), ], "Social settings", ) - ] \ No newline at end of file + ] + +@register_snippet +class FooterText( + DraftStateMixin, + RevisionMixin, + PreviewableMixin, + TranslatableMixin, + models.Model, +): + + body = RichTextField() + + 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" \ No newline at end of file diff --git a/base/templates/base/includes/footer_text.html b/base/templates/base/includes/footer_text.html new file mode 100644 index 0000000..2dec019 --- /dev/null +++ b/base/templates/base/includes/footer_text.html @@ -0,0 +1,5 @@ +{% load wagtailcore_tags %} + +