From a8b808402ae2c319f839b28c4725393b48498d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Sun, 6 Aug 2023 11:09:12 +0200 Subject: [PATCH] update structure --- .../0008_remove_homeuniversalpage_perex.py | 7 +- ...omedocumentspage_homeeventpage_and_more.py | 154 ++++++++++++++++++ .../0010_alter_homeeventpage_location.py | 19 +++ ...alter_homedocumentpage_content_and_more.py | 38 +++++ home/models.py | 101 +++++++++++- .../templates/home/blocks/document_block.html | 13 -- home/templates/home/blocks/event_block.html | 21 --- home/templates/home/home_article_page.html | 14 +- home/templates/home/home_articles_page.html | 8 + home/templates/home/home_document_page.html | 32 ++++ home/templates/home/home_documents_page.html | 29 ++++ home/templates/home/home_event_page.html | 37 +++++ home/templates/home/home_events_page.html | 34 ++++ home/templates/home/home_page.html | 95 +++++++++-- home/templates/home/home_universal_page.html | 21 --- institut/templates/base.html | 6 +- 16 files changed, 546 insertions(+), 83 deletions(-) create mode 100644 home/migrations/0009_homedocumentpage_homedocumentspage_homeeventpage_and_more.py create mode 100644 home/migrations/0010_alter_homeeventpage_location.py create mode 100644 home/migrations/0011_alter_homedocumentpage_content_and_more.py delete mode 100644 home/templates/home/blocks/document_block.html delete mode 100644 home/templates/home/blocks/event_block.html create mode 100644 home/templates/home/home_document_page.html create mode 100644 home/templates/home/home_documents_page.html create mode 100644 home/templates/home/home_event_page.html create mode 100644 home/templates/home/home_events_page.html delete mode 100644 home/templates/home/home_universal_page.html diff --git a/home/migrations/0008_remove_homeuniversalpage_perex.py b/home/migrations/0008_remove_homeuniversalpage_perex.py index bc3be82..6095420 100644 --- a/home/migrations/0008_remove_homeuniversalpage_perex.py +++ b/home/migrations/0008_remove_homeuniversalpage_perex.py @@ -4,14 +4,13 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ - ('home', '0007_alter_homearticlepage_options_and_more'), + ("home", "0007_alter_homearticlepage_options_and_more"), ] operations = [ migrations.RemoveField( - model_name='homeuniversalpage', - name='perex', + model_name="homeuniversalpage", + name="perex", ), ] diff --git a/home/migrations/0009_homedocumentpage_homedocumentspage_homeeventpage_and_more.py b/home/migrations/0009_homedocumentpage_homedocumentspage_homeeventpage_and_more.py new file mode 100644 index 0000000..5962d77 --- /dev/null +++ b/home/migrations/0009_homedocumentpage_homedocumentspage_homeeventpage_and_more.py @@ -0,0 +1,154 @@ +# Generated by Django 4.2.2 on 2023-08-06 07:51 + +import django.db.models.deletion +import django.utils.timezone +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("wagtaildocs", "0012_uploadeddocument"), + ("wagtailcore", "0083_workflowcontenttype"), + ("home", "0008_remove_homeuniversalpage_perex"), + ] + + operations = [ + migrations.CreateModel( + name="HomeDocumentPage", + fields=[ + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ( + "author", + models.CharField( + blank=True, max_length=128, null=True, verbose_name="Autor" + ), + ), + ( + "date", + models.DateField( + default=django.utils.timezone.now, + verbose_name="Datum vytvoření", + ), + ), + ("content", wagtail.fields.RichTextField(verbose_name="Obsah")), + ( + "document", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="wagtaildocs.document", + ), + ), + ("tags", models.ManyToManyField(to="home.tag", verbose_name="Štítky")), + ], + options={ + "verbose_name": "Dokument", + "ordering": ["-date"], + }, + bases=("wagtailcore.page",), + ), + migrations.CreateModel( + name="HomeDocumentsPage", + fields=[ + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ( + "content", + wagtail.fields.RichTextField( + blank=True, null=True, verbose_name="Obsah" + ), + ), + ], + options={ + "verbose_name": "Rozcestník dokumentů", + }, + bases=("wagtailcore.page",), + ), + migrations.CreateModel( + name="HomeEventPage", + fields=[ + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ( + "author", + models.CharField( + blank=True, max_length=128, null=True, verbose_name="Autor" + ), + ), + ("content", wagtail.fields.RichTextField(verbose_name="Obsah")), + ( + "date", + models.DateField( + blank=True, null=True, verbose_name="Datum konání" + ), + ), + ( + "location", + models.CharField(max_length=64, verbose_name="Místo konání"), + ), + ("tags", models.ManyToManyField(to="home.tag", verbose_name="Štítky")), + ], + options={ + "verbose_name": "Akce", + "ordering": ["-date"], + }, + bases=("wagtailcore.page",), + ), + migrations.CreateModel( + name="HomeEventsPage", + fields=[ + ( + "page_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="wagtailcore.page", + ), + ), + ( + "content", + wagtail.fields.RichTextField( + blank=True, null=True, verbose_name="Obsah" + ), + ), + ], + options={ + "verbose_name": "Rozcestník akcí", + }, + bases=("wagtailcore.page",), + ), + migrations.DeleteModel( + name="HomeUniversalPage", + ), + ] diff --git a/home/migrations/0010_alter_homeeventpage_location.py b/home/migrations/0010_alter_homeeventpage_location.py new file mode 100644 index 0000000..66ef6a4 --- /dev/null +++ b/home/migrations/0010_alter_homeeventpage_location.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.2 on 2023-08-06 08:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("home", "0009_homedocumentpage_homedocumentspage_homeeventpage_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="homeeventpage", + name="location", + field=models.CharField( + blank=True, max_length=64, null=True, verbose_name="Místo konání" + ), + ), + ] diff --git a/home/migrations/0011_alter_homedocumentpage_content_and_more.py b/home/migrations/0011_alter_homedocumentpage_content_and_more.py new file mode 100644 index 0000000..1ee1fc2 --- /dev/null +++ b/home/migrations/0011_alter_homedocumentpage_content_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 4.2.2 on 2023-08-06 08:38 + +import django.db.models.deletion +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("wagtaildocs", "0012_uploadeddocument"), + ("home", "0010_alter_homeeventpage_location"), + ] + + operations = [ + migrations.AlterField( + model_name="homedocumentpage", + name="content", + field=wagtail.fields.RichTextField( + blank=True, null=True, verbose_name="Obsah" + ), + ), + migrations.AlterField( + model_name="homedocumentpage", + name="document", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="wagtaildocs.document", + verbose_name="Dokument", + ), + ), + migrations.AlterField( + model_name="homeeventpage", + name="content", + field=wagtail.fields.RichTextField( + blank=True, null=True, verbose_name="Obsah" + ), + ), + ] diff --git a/home/models.py b/home/models.py index 22467e3..dfd0089 100644 --- a/home/models.py +++ b/home/models.py @@ -1,6 +1,7 @@ from django.db import models from django.utils import timezone from wagtail.admin.panels import FieldPanel, MultiFieldPanel +from wagtail.documents import get_document_model from wagtail.fields import RichTextField, StreamField from wagtail.models import Page @@ -85,7 +86,8 @@ class HomePage(Page): subpage_types = [ "home.HomeArticlesPage", - "home.HomeUniversalPage", + "home.HomeEventsPage", + "home.HomeDocumentsPage", ] content_panels = Page.content_panels + [ @@ -114,14 +116,36 @@ class HomePage(Page): ), ] + # Articles + @property def articles_page(self) -> "HomeArticlesPage": return HomeArticlesPage.objects.live().first() @property - def latest_articles(self): + def latest_articles(self) -> "QuerySet": return HomeArticlePage.objects.live().all()[:3] + # Events + + @property + def events_page(self) -> "HomeEventsPage": + return HomeEventsPage.objects.live().first() + + @property + def latest_events(self) -> "QuerySet": + return HomeEventPage.objects.live().all()[:8] + + # Documents + + @property + def documents_page(self) -> "HomeDocumentsPage": + return HomeDocumentsPage.objects.live().first() + + @property + def latest_documents(self) -> "QuerySet": + return HomeDocumentPage.objects.live().all()[:4] + class Meta: verbose_name = "Domovká stránka" @@ -144,6 +168,42 @@ class HomeArticlesPage(Page): verbose_name = "Rozcestník článků" +class HomeEventsPage(Page): + content = RichTextField(verbose_name="Obsah", blank=True, null=True) + + parent_page_type = ["home.HomePage"] + subpage_types = ["home.HomeEventPage"] + + content_panels = Page.content_panels + [ + FieldPanel("content", icon="pilcrow"), + ] + + @property + def events(self): + return HomeEventPage.objects.live().all() + + class Meta: + verbose_name = "Rozcestník akcí" + + +class HomeDocumentsPage(Page): + content = RichTextField(verbose_name="Obsah", blank=True, null=True) + + parent_page_type = ["home.HomePage"] + subpage_types = ["home.HomeDocumentPage"] + + content_panels = Page.content_panels + [ + FieldPanel("content", icon="pilcrow"), + ] + + @property + def documents(self): + return HomeDocumentPage.objects.live().all() + + class Meta: + verbose_name = "Rozcestník dokumentů" + + class HomeContentPageMixin(Page): tags = models.ManyToManyField("Tag", verbose_name="Štítky") @@ -190,10 +250,43 @@ class HomeArticlePage(HomeContentPageMixin): verbose_name = "Článek" -class HomeUniversalPage(HomeContentPageMixin): +class HomeEventPage(HomeContentPageMixin): + date = models.DateField(verbose_name="Datum konání", blank=True, null=True) + location = models.CharField( + verbose_name="Místo konání", blank=True, null=True, max_length=64 + ) + + content = RichTextField(verbose_name="Obsah", blank=True, null=True) + + content_panels = Page.content_panels + [ + FieldPanel("date", icon="calendar"), + FieldPanel("location", icon="globe"), + FieldPanel("author", icon="user"), + FieldPanel("content", icon="pilcrow"), + ] + + class Meta: + ordering = ["-date"] + verbose_name = "Akce" + + +class HomeDocumentPage(HomeContentPageMixin): + document = models.ForeignKey( + get_document_model(), on_delete=models.PROTECT, verbose_name="Dokument" + ) + + content = RichTextField(verbose_name="Obsah", blank=True, null=True) + + content_panels = Page.content_panels + [ + FieldPanel("document", icon="doc-full"), + FieldPanel("author", icon="user"), + FieldPanel("date", icon="calendar"), + FieldPanel("content", icon="pilcrow"), + ] + class Meta: ordering = ["-date"] - verbose_name = "Univerzální stránka" + verbose_name = "Dokument" class Tag(models.Model): diff --git a/home/templates/home/blocks/document_block.html b/home/templates/home/blocks/document_block.html deleted file mode 100644 index 07e451d..0000000 --- a/home/templates/home/blocks/document_block.html +++ /dev/null @@ -1,13 +0,0 @@ -<li> - <a - href="{% if self.page %}{{ self.page }}{% else %}{{ self.file.url }}{% endif %}" - target="_blank" - > - <h3 class="font-serif leading-4"> - {{ self.name }} - </h3> - {% if self.date_added %} - <small class="font-serif">Přidáno {{ self.date_added }}</small> - {% endif %} - </a> -</li> diff --git a/home/templates/home/blocks/event_block.html b/home/templates/home/blocks/event_block.html deleted file mode 100644 index d5ecbbe..0000000 --- a/home/templates/home/blocks/event_block.html +++ /dev/null @@ -1,21 +0,0 @@ -<a href="{{ self.page }}" target="_blank"> - <li class="flex flex-col"> - {% if self.date or self.location %} - <small class="text-pii-cyan uppercase"> - {% if self.date %} - {{ self.date.day }}. {{ self.date.month }}. {{ self.date.year }} - {% endif %} - {% if self.location %} - {% if self.date %} - | - {% endif %} - {{ self.location }} - {% endif %} - </small> - {% endif %} - - <span - class="font-bold font-serif text-xl" - >{{ self.name }}</span> - </li> -</a> diff --git a/home/templates/home/home_article_page.html b/home/templates/home/home_article_page.html index 2a4a803..45c7731 100644 --- a/home/templates/home/home_article_page.html +++ b/home/templates/home/home_article_page.html @@ -6,12 +6,18 @@ <div class="container"> <h1 class="font-bebas text-4xl">{{ page.title }}</h1> - <small class="flex gap-2"> - <div>{{ page.date }}</div> + <div class="flex flex-col gap-1 mt-3 text-gray-700"> + <div class="flex gap-2 items-center"> + <i class="ico--calendar"></i> + <div>{{ page.date }}</div> + </div> {% if page.author %} - <div>| {{ page.author }}</div> + <div class="flex gap-2 items-center"> + <i class="ico--user"></i> + <div>{{ page.author }}</div> + </div> {% endif %} - </small> + </div> <div class="mt-5 prose max-w-screen-md font-serif"> <p class="mb-3">{{ page.perex }}</p> diff --git a/home/templates/home/home_articles_page.html b/home/templates/home/home_articles_page.html index d0a8f81..05caf61 100644 --- a/home/templates/home/home_articles_page.html +++ b/home/templates/home/home_articles_page.html @@ -4,6 +4,14 @@ {% block content %} <main class="flex flex-col items-center gap-10 pt-14"> <div class="container"> + <h1 class="font-bebas text-4xl mb-4">{{ page.title }}</h1> + + {% if page.content %} + <div class="prose font-serif mb-3"> + {{ page.content|richtext }} + </div> + {% endif %} + <ul class="flex gap-4 lg:h-96 flex-wrap"> {% for article in page.articles %} <li class="bg-pii-cyan text-white p-7 lg:w-80"> diff --git a/home/templates/home/home_document_page.html b/home/templates/home/home_document_page.html new file mode 100644 index 0000000..a50f53b --- /dev/null +++ b/home/templates/home/home_document_page.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block content %} +<main class="flex flex-col items-center gap-10 pt-14"> + <div class="container"> + <h1 class="font-bebas text-4xl">{{ page.title }}</h1> + + {% if page.author %} + <div class="flex gap-2 mt-3 items-center text-gray-700"> + <i class="ico--user"></i> + <div>{{ page.author }}</div> + </div> + {% endif %} + + <div class="mt-5 prose max-w-screen-md font-serif"> + {{ page.content|richtext }} + </div> + + <div class="mt-4"> + <a + class="text-lg font-bold flex gap-2 items-center" + href="{{ page.document.url }}" + target="_blank" + > + <i class="ico--download"></i> + <div class="underline">Stáhnout</div> + </a> + </div> + </div> +</main> +{% endblock content %} diff --git a/home/templates/home/home_documents_page.html b/home/templates/home/home_documents_page.html new file mode 100644 index 0000000..6d9dfa0 --- /dev/null +++ b/home/templates/home/home_documents_page.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block content %} +<main class="flex flex-col items-center gap-10 pt-14"> + <div class="container"> + <h1 class="font-bebas text-4xl mb-4">{{ page.title }}</h1> + + {% if page.content %} + <div class="prose font-serif mb-3"> + {{ page.content|richtext }} + </div> + {% endif %} + + <ul class="flex flex-col gap-2 list-disc ml-3"> + {% for document in page.documents %} + <li> + <a + class="underline" + href="{{ document.url }}" + > + {{ document.title }} + </a> + </li> + {% endfor %} + </ul> + </div> +</main> +{% endblock content %} diff --git a/home/templates/home/home_event_page.html b/home/templates/home/home_event_page.html new file mode 100644 index 0000000..4e67595 --- /dev/null +++ b/home/templates/home/home_event_page.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block content %} +<main class="flex flex-col items-center gap-10 pt-14"> + <div class="container"> + <h1 class="font-bebas text-4xl">{{ page.title }}</h1> + + <div class="flex flex-col gap-1 mt-3 text-gray-700"> + {% if page.date %} + <div class="flex gap-2 items-center"> + <i class="ico--calendar"></i> + <div>{{ page.date }}</div> + </div> + {% endif %} + + {% if page.location %} + <div class="flex gap-2 items-center"> + <i class="ico--location"></i> + <div>{{ page.location }}</div> + </div> + {% endif %} + + {% if page.author %} + <div class="flex gap-2 items-center"> + <i class="ico--user"></i> + <div>{{ page.author }}</div> + </div> + {% endif %} + </div> + + <div class="mt-5 prose max-w-screen-md font-serif"> + {{ page.content|richtext }} + </div> + </div> +</main> +{% endblock content %} diff --git a/home/templates/home/home_events_page.html b/home/templates/home/home_events_page.html new file mode 100644 index 0000000..109bb99 --- /dev/null +++ b/home/templates/home/home_events_page.html @@ -0,0 +1,34 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block content %} +<main class="flex flex-col items-center gap-10 pt-14"> + <div class="container"> + <h1 class="font-bebas text-4xl mb-4">{{ page.title }}</h1> + + {% if page.content %} + <div class="prose font-serif mb-3"> + {{ page.content|richtext }} + </div> + {% endif %} + + <ul class="flex flex-col gap-2 list-disc ml-3"> + {% for event in page.events %} + <li class="text-gray-500"> + <a + class="flex gap-3" + href="{{ event.url }}" + > + <div> + {{ event.date }}{% if event.location %}, + {{ event.location }} + {% endif %} + </div> + <div class="underline text-black">{{ event.title }}</div> + </a> + </li> + {% endfor %} + </ul> + </div> +</main> +{% endblock content %} diff --git a/home/templates/home/home_page.html b/home/templates/home/home_page.html index c1ec5de..161d09a 100644 --- a/home/templates/home/home_page.html +++ b/home/templates/home/home_page.html @@ -56,7 +56,7 @@ href="{{ page.articles_page.url }}" > <i class="ico--chevron-right"></i> - <div>Načíst další články</div> + <div>Další články</div> </a> </div> </div> @@ -67,31 +67,100 @@ <ul class="flex gap-14"> <div class="flex flex-col gap-3"> - {% for block in page.events|slice:"0:4" %} - {% include_block block %} + {% for event in page.latest_events|slice:"0:4" %} + <a href="{{ event.url }}" target="_blank"> + <li class="flex flex-col"> + {% if event.date or event.location %} + <small class="text-pii-cyan uppercase"> + {% if event.date %} + {{ event.date.day }}. {{ event.date.month }}. {{ event.date.year }} + {% endif %} + {% if event.location %} + {% if event.date %} + | + {% endif %} + {{ event.location }} + {% endif %} + </small> + {% endif %} + + <span + class="font-bold font-serif text-xl" + >{{ event.title }}</span> + </li> + </a> {% endfor %} </div> <div class="hidden lg:block"> - {% if page.events|length > 4 %} + {% if page.latest_events|length > 4 %} <div class="flex flex-col gap-3 border-l-2 pl-14 border-pii-cyan"> - {% for block in page.events|slice:"4:8" %} - {% include_block block %} + {% for event in page.latest_events|slice:"4:8" %} + <a href="{{ event.url }}" target="_blank"> + <li class="flex flex-col"> + {% if event.date or event.location %} + <small class="text-pii-cyan uppercase"> + {% if event.date %} + {{ event.date.day }}. {{ event.date.month }}. {{ event.date.year }} + {% endif %} + {% if event.location %} + {% if event.date %} + | + {% endif %} + {{ event.location }} + {% endif %} + </small> + {% endif %} + + <span + class="font-bold font-serif text-xl" + >{{ event.title }}</span> + </li> + </a> {% endfor %} </div> {% endif %} </div> </ul> + + <a + class="flex gap-2 font-bebas text-2xl uppercase mt-4" + href="{{ page.events_page.url }}" + > + <i class="ico--chevron-right"></i> + <div>Další akce</div> + </a> </section> <section class="flex justify-center bg-grey-50 p-10 w-full lg:flex-nowrap flex-wrap" id="dokumenty"> - <div class="container flex flex-col gap-3"> - <h2 class="font-bebas text-3xl uppercase leading-7">Dokumenty</h2> + <div class="container"> + <div class="flex flex-col gap-3"> + <h2 class="font-bebas text-3xl uppercase leading-7">Dokumenty</h2> - <ul class="flex flex-col lg:grid lg:grid-cols-3 lg:grid-rows-2 gap-y-3 gap-x-6 grid-flow-col"> - {% for block in page.documents %} - {% include_block block %} - {% endfor %} - </ul> + <ul class="flex flex-col lg:grid lg:grid-cols-3 lg:grid-rows-2 gap-y-3 gap-x-6 grid-flow-col"> + {% for document in page.latest_documents %} + <li> + <a + href="{{ document.url }}" + target="_blank" + > + <h3 class="font-serif leading-4"> + {{ document.title }} + </h3> + {% if document.date_added %} + <small class="font-serif">Přidáno {{ document.date_added }}</small> + {% endif %} + </a> + </li> + {% endfor %} + </ul> + </div> + <a + class="flex gap-2 font-bebas text-2xl uppercase mt-4" + href="{{ page.documents_page.url }}" + > + <i class="ico--chevron-right"></i> + <div>Další dokumenty</div> + </a> </div> </section> diff --git a/home/templates/home/home_universal_page.html b/home/templates/home/home_universal_page.html deleted file mode 100644 index d415379..0000000 --- a/home/templates/home/home_universal_page.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base.html" %} -{% load static wagtailcore_tags %} - -{% block content %} -<main class="flex flex-col items-center gap-10 pt-14"> - <div class="container"> - <h1 class="font-bebas text-4xl">{{ page.title }}</h1> - - <small class="flex gap-2"> - <div>{{ page.date }}</div> - {% if page.author %} - <div>| {{ page.author }}</div> - {% endif %} - </small> - - <div class="mt-5 prose max-w-screen-md font-serif"> - {{ page.content|richtext }} - </div> - </div> -</main> -{% endblock content %} diff --git a/institut/templates/base.html b/institut/templates/base.html index 72fc2e7..10cd980 100644 --- a/institut/templates/base.html +++ b/institut/templates/base.html @@ -59,9 +59,9 @@ <div class="gap-4 hidden md:flex"> <a class="nav__item" href="/#uvod">Úvod</a> - <a class="nav__item" href="/#aktualne">Aktuálně</a> - <a class="nav__item" href="/#akce">Akce</a> - <a class="nav__item" href="/#dokumenty">Dokumenty</a> + <a class="nav__item" href="/clanky">Aktuálně</a> + <a class="nav__item" href="/akce">Akce</a> + <a class="nav__item" href="/dokumenty">Dokumenty</a> <a class="nav__item" href="/#dary">Dary</a> <a class="nav__item" href="/#kontakty">Kontakty</a> <a class="nav__item" href="/#lide">Lidé</a> -- GitLab