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 %} + +
+ {{ footer_text|richtext }} +
\ No newline at end of file diff --git a/base/templatetags/__init__.py b/base/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/base/templatetags/navigation_tags.py b/base/templatetags/navigation_tags.py new file mode 100644 index 0000000..4d16b78 --- /dev/null +++ b/base/templatetags/navigation_tags.py @@ -0,0 +1,24 @@ +from django import template + +from wagtail.models import Site + +from base.models import FooterText + +register = template.Library() + + +@register.inclusion_tag("base/includes/footer_text.html", takes_context=True) +def get_footer_text(context): + footer_text = context.get("footer_text", "") + + if not footer_text: + instance = FooterText.objects.filter(live=True).first() + footer_text = instance.body if instance else "" + + return { + "footer_text": footer_text, + } + +@register.simple_tag(takes_context=True) +def get_site_root(context): + return Site.find_for_request(context["request"]).root_page \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index b760276..0532f1e 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/jacksbastards/db.sqlite3 b/jacksbastards/db.sqlite3 new file mode 100644 index 0000000..e69de29 diff --git a/jacksbastards/settings/__pycache__/base.cpython-314.pyc b/jacksbastards/settings/__pycache__/base.cpython-314.pyc index 0813cbe..f865ac8 100644 Binary files a/jacksbastards/settings/__pycache__/base.cpython-314.pyc and b/jacksbastards/settings/__pycache__/base.cpython-314.pyc differ diff --git a/jacksbastards/static/css/jacksbastards.css b/jacksbastards/static/css/jacksbastards.css index e69de29..64ed7e0 100644 --- a/jacksbastards/static/css/jacksbastards.css +++ b/jacksbastards/static/css/jacksbastards.css @@ -0,0 +1,58 @@ +*, +::before, +::after { + box-sizing: border-box; +} + +html { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial, sans-serif, Apple Color Emoji, "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +} + +body { + min-height: 100vh; + max-width: 800px; + margin: 0 auto; + padding: 10px; + display: grid; + gap: 3vw; + grid-template-rows: min-content 1fr min-content; + background-image: url('/media/images/f6c80e0e-25d3-4915-a92f-a733939cf9.2e16d0ba.fill-480x320.jpg'); + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; + background-position: center center; + height: 100%; + width: 100%; + +} + +a { + color: currentColor; +} + +h1 { + font-family: verdana; + font-size: 300%; +} + +footer { + border-top: 2px dotted; + text-align: center; +} + +header { + border-bottom: 2px dotted; +} + +.template-homepage main { + text-align: center; +} + +.skip-link { + position: absolute; + top: -30px; +} + +.skip-link:focus-visible { + top: 5px; +} \ No newline at end of file diff --git a/jacksbastards/static/files/logo.jpeg b/jacksbastards/static/files/logo.jpeg new file mode 100644 index 0000000..a43011f Binary files /dev/null and b/jacksbastards/static/files/logo.jpeg differ diff --git a/jacksbastards/templates/base.html b/jacksbastards/templates/base.html index c11a35f..6c473e5 100644 --- a/jacksbastards/templates/base.html +++ b/jacksbastards/templates/base.html @@ -1,5 +1,8 @@ {% load static wagtailcore_tags wagtailuserbar %} +{# Remove wagtailuserbar: #} +{% load static wagtailcore_tags %} + @@ -23,6 +26,13 @@ {% endif %} + {# Add supported color schemes: #} + + + {# Add a favicon with inline SVG: #} + + + {# Global stylesheets #} @@ -32,10 +42,14 @@ - {% wagtailuserbar %} - - {% block content %}{% endblock %} + {% include "includes/header.html" %} + + {# Wrap your block content within a
HTML5 tag: #} +
+ {% block content %}{% endblock %} +
+ {% include "includes/footer.html" %} {# Global javascript #} diff --git a/jacksbastards/templates/includes/footer.html b/jacksbastards/templates/includes/footer.html index be9cb7b..eeffc13 100644 --- a/jacksbastards/templates/includes/footer.html +++ b/jacksbastards/templates/includes/footer.html @@ -1,18 +1,21 @@ +{# Load navigation_tags at the top of the file: #} +{% load navigation_tags %} + \ No newline at end of file diff --git a/jacksbastards/templates/includes/header.html b/jacksbastards/templates/includes/header.html new file mode 100644 index 0000000..c44f2ad --- /dev/null +++ b/jacksbastards/templates/includes/header.html @@ -0,0 +1,17 @@ +{% load wagtailcore_tags navigation_tags wagtailuserbar %} + +
+ + + + {% get_site_root as site_root %} + +
\ No newline at end of file