diff --git a/district/blocks.py b/district/blocks.py index 423bf15bc5f18bb660baf03ef8d36641a7acd565..1d10fa3ec4c3719bb904f695df0b78de8ba0650b 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -76,7 +76,6 @@ class CardLinkBlock(StructBlock): "district.DistrictPersonPage", "district.DistrictPostElectionStrategyPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", ], required=False, ) diff --git a/district/migrations/0037_districtcrossroadpage_districtcustompage.py b/district/migrations/0037_districtcrossroadpage_districtcustompage.py index e23d9d25026fcf3473c6c7332906c1c50df2492d..e5487ee0d4bab4a8d21a866685fe49a641e80b36 100644 --- a/district/migrations/0037_districtcrossroadpage_districtcustompage.py +++ b/district/migrations/0037_districtcrossroadpage_districtcustompage.py @@ -102,7 +102,7 @@ class Migration(migrations.Migration): "district.DistrictElectionPage", "district.DistrictPeoplePage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], ), ), diff --git a/district/migrations/0038_auto_20220303_1107.py b/district/migrations/0038_auto_20220303_1107.py index 980e524fbb270f87fb86321f6c6f7d9eb35c48de..9486a7a98d6d1bda06e9da74f014306e4e87ce78 100644 --- a/district/migrations/0038_auto_20220303_1107.py +++ b/district/migrations/0038_auto_20220303_1107.py @@ -68,7 +68,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], ), ), diff --git a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py index 46f267bae8cf4a463867b80efaedced0f04dd62a..f79ec81e664c27207b93d92f2ef8da591dbf030a 100644 --- a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py +++ b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py @@ -62,7 +62,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py index 48ce52621d3d959f967725dc759613b58d4e30ab..fb422a6ab4acfcf6042d89cd9e930a1e64fbe859 100644 --- a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py +++ b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py @@ -69,7 +69,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0068_districtelectioncampaignpage_and_more.py b/district/migrations/0068_districtelectioncampaignpage_and_more.py index bff113fbd5b60d7459a5c693b27ac739d88a2a12..89316b452daae5086bc4f923ef2f4a21a6223324 100644 --- a/district/migrations/0068_districtelectioncampaignpage_and_more.py +++ b/district/migrations/0068_districtelectioncampaignpage_and_more.py @@ -14974,7 +14974,7 @@ class Migration(migrations.Migration): "district.DistrictPersonPage", "district.DistrictPostElectionStrategyPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0087_delete_all_districttagspage_instances.py b/district/migrations/0087_delete_all_districttagspage_instances.py new file mode 100644 index 0000000000000000000000000000000000000000..b403aa624be429a6595c90dda10f5893852c9b3b --- /dev/null +++ b/district/migrations/0087_delete_all_districttagspage_instances.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.4 on 2022-06-09 06:11 + +from django.db import migrations + + +def delete_all_district_tags_pages(apps, schema_editor): + Page = apps.get_model("wagtailcore", "Page") + ContentType = apps.get_model("contenttypes", "ContentType") + + ct = ContentType.objects.get(app_label="district", model="districttagspage") + + Page.objects.filter(content_type=ct).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ("district", "0086_alter_districtcontactpage_contact_people"), + ] + + operations = [ + migrations.RunPython(delete_all_district_tags_pages, migrations.RunPython.noop), + ] diff --git a/district/migrations/0088_delete_districttagspage.py b/district/migrations/0088_delete_districttagspage.py new file mode 100644 index 0000000000000000000000000000000000000000..c6611fdd983b1c06e1aaab6fc0049645bf01be35 --- /dev/null +++ b/district/migrations/0088_delete_districttagspage.py @@ -0,0 +1,16 @@ +# Generated by Django 4.0.4 on 2022-06-09 06:18 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("district", "0087_delete_all_districttagspage_instances"), + ] + + operations = [ + migrations.DeleteModel( + name="DistrictTagsPage", + ), + ] diff --git a/district/models.py b/district/models.py index b5a0ce91e94981045e72d90c7871e731c292e7d5..2f12b286e7d303b8d391d57e21c736c231315ab7 100644 --- a/district/models.py +++ b/district/models.py @@ -253,7 +253,6 @@ class DistrictHomePage( "district.DistrictElectionRootPage", "district.DistrictPeoplePage", "district.DistrictProgramPage", - "district.DistrictTagsPage", "district.DistrictGeoFeatureCollectionPage", ] @@ -310,10 +309,6 @@ class DistrictHomePage( def root_page(self): return self - @property - def tags_page(self): - return self._first_subpage_of_type(DistrictTagsPage) - @property def has_calendar(self): return self.calendar_id is not None @@ -371,7 +366,7 @@ class DistrictArticlePage( class DistrictArticlesPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page + RoutablePageMixin, ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page ): ### FIELDS @@ -443,71 +438,22 @@ class DistrictArticlesPage( ).get_page(request.GET.get("page")) return context + @route(r"^tagy/$", name="tags") + def tags(self, request): + return render( + request, + "district/district_tags_page.html", + context=self.get_tags_page_context(request=request), + ) -class DistrictContactPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page -): - ### FIELDS - - contact_people = StreamField( - [("item", blocks.PersonCustomPositionBlock())], - verbose_name="Kontakty", - blank=True, - ) - text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES) - - ### PANELS - - content_panels = Page.content_panels + [ - StreamFieldPanel("contact_people"), - FieldPanel("text"), - ] - - promote_panels = make_promote_panels() - - settings_panels = [] - - ### RELATIONS - - parent_page_types = ["district.DistrictHomePage"] - subpage_types = [] - - ### OTHERS - - class Meta: - verbose_name = "Kontakty" - - -class DistrictTagsPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page -): - ### PANELS - - promote_panels = make_promote_panels() - - settings_panels = [] - - ### RELATIONS - - parent_page_types = ["district.DistrictHomePage"] - subpage_types = [] - - ### OTHERS - - class Meta: - verbose_name = "Stránka s tagy" - - def get_context(self, request, *args, **kwargs) -> dict: - context = super().get_context(request) - + def get_tags_page_context(self, request) -> dict: # Potřebujeme IDčka článků pro správnou root_page pro filtrování zobrazených # tagů i samotných stránek, protože se filtrují přes specifický field # (tags__slug) + context = super().get_context(request) + site_article_ids = ( - self.root_page.articles_page.get_children() - .live() - .specific() - .values_list("id", flat=True) + self.get_children().live().specific().values_list("id", flat=True) ) # Naplním "tag" a "article_page_list" parametry @@ -535,7 +481,7 @@ class DistrictTagsPage( return { "article_page_list": Paginator( article_page_qs.order_by("-date"), - self.root_page.articles_page.max_items, + self.max_items, ).get_page(request.GET.get("page")), "tag": tag, } @@ -554,6 +500,40 @@ class DistrictTagsPage( ) +class DistrictContactPage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page +): + ### FIELDS + + contact_people = StreamField( + [("item", blocks.PersonCustomPositionBlock())], + verbose_name="Kontakty", + blank=True, + ) + text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES) + + ### PANELS + + content_panels = Page.content_panels + [ + StreamFieldPanel("contact_people"), + FieldPanel("text"), + ] + + promote_panels = make_promote_panels() + + settings_panels = [] + + ### RELATIONS + + parent_page_types = ["district.DistrictHomePage"] + subpage_types = [] + + ### OTHERS + + class Meta: + verbose_name = "Kontakty" + + class DistrictPersonTag(TaggedItemBase): content_object = ParentalKey( "district.DistrictPersonPage", on_delete=models.CASCADE @@ -1251,7 +1231,6 @@ class DistrictCrossroadPage( "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", ] ### OTHERS diff --git a/district/templates/district/district_article_page.html b/district/templates/district/district_article_page.html index cf5e0a8445a5a4c344e35d7fd61de44308917010..787b3ee474ace4a5614050d0aad6df6093e38f3e 100644 --- a/district/templates/district/district_article_page.html +++ b/district/templates/district/district_article_page.html @@ -1,7 +1,8 @@ {% extends "district/base.html" %} -{% load static wagtailcore_tags wagtailimages_tags %} +{% load static wagtailcore_tags wagtailimages_tags wagtailroutablepage_tags %} {% block content %} +{% routablepageurl page.root_page.articles_page "tags" as articles_tag_page_url %} <article> <link itemprop="mainEntityOfPage" href="{{ page.url }}"> <meta itemprop="datePublished" content="{{ page.last_published_at }}"> @@ -24,7 +25,7 @@ </div> <div class="my-4"> {% for tag in page.tags.all %} - <a href="{{ page.root_page.tags_page.url }}?tag={{ tag.slug }}" class="btn btn--grey-125 btn--condensed"> + <a href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn btn--grey-125 btn--condensed"> <div class="btn__body ">{{ tag }}</div> </a> {% endfor %} diff --git a/district/templates/district/district_tags_page.html b/district/templates/district/district_tags_page.html index 5728eda556301a12138d8d1cd90ff6f836143eed..79f9bc8708109afc4633e5b61a5261f946d38d07 100644 --- a/district/templates/district/district_tags_page.html +++ b/district/templates/district/district_tags_page.html @@ -1,6 +1,9 @@ {% extends "district/base.html" %} +{% load wagtailroutablepage_tags %} {% block content %} +{% routablepageurl page "tags" as articles_tag_page_url %} + <h1 class="head-alt-md md:head-alt-lg max-w-5xl mb-4"> {% if tag %}{{ page.title }} "{{ tag.name }}"{% else %}Výběr z článků{% endif %} </h1> @@ -12,15 +15,14 @@ {% endfor %} </div> - {% include 'styleguide/2.3.x/pagination.html' with paginator=article_page_list %} + {% include 'styleguide/2.3.x/pagination.html' with page_url=articles_tag_page_url paginator=article_page_list %} <div> <h2 class="head-heavy-base mb-4">Další štítky</h2> - <nav class="inline-block-nogap"> {% for tag in tag_list %} <a - href="{{ page.url }}?tag={{ tag.slug }}" + href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn btn--condensed font-light text-sm btn--grey-{% if tag.slug == request.GET.tag %}500{% else %}125{% endif %} btn--hoveractive mr-1 mb-1 inline-block" > <div class="btn__body ">{{ tag.name }} ({{ tag.count }})</div> diff --git a/shared/templates/shared/article_preview.html b/shared/templates/shared/article_preview.html index 1fe40b946daf6559c1a3c0f5a391e321bd93c6d8..b6a1b7c3ae0e5a2f4846965cde6ee0bb149e54f2 100644 --- a/shared/templates/shared/article_preview.html +++ b/shared/templates/shared/article_preview.html @@ -1,4 +1,5 @@ -{% load wagtailcore_tags wagtailimages_tags %} +{% load wagtailcore_tags wagtailimages_tags wagtailroutablepage_tags %} +{% routablepageurl page.root_page.articles_page "tags" as articles_tag_page_url %} <article itemtype="http://schema.org/BlogPosting" @@ -69,7 +70,7 @@ <div class="inline-block-nogap mt-4"> {% for tag in article.tags.all %} <a - href="{{ page.root_page.tags_page.url }}?tag={{ tag.slug }}" + href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn article-card__category-button btn--condensed text-sm font-light btn--grey-{% if article.is_black %}700{% else %}125{% endif %} btn--hoveractive" > <div class="btn__body">{{ tag }}</div> diff --git a/shared/templates/styleguide/2.3.x/pagination.html b/shared/templates/styleguide/2.3.x/pagination.html index 005c5ea0f273354d46e9388e00ec606ace1187de..9725d5e45bb43e8ef1cfc3e4c4e1a2337ba2f38b 100644 --- a/shared/templates/styleguide/2.3.x/pagination.html +++ b/shared/templates/styleguide/2.3.x/pagination.html @@ -5,7 +5,7 @@ <nav class="pagination space-x-1"> {% if paginator.has_previous %} - <a href="{% pageurl page %}?page={{ paginator.previous_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed btn--inverted-icon"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ paginator.previous_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed btn--inverted-icon"> <div class="btn__body-wrap"> <div class="btn__body ">Předchozí</div> <div class="btn__icon "> @@ -17,16 +17,16 @@ {% get_pagination_range paginator.number paginator.paginator.page_range as pagination_range %} {% for i in pagination_range %} {% if i == paginator.number %} - <a href="{% pageurl page %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-500 btn--condensed hidden md:inline-block"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-500 btn--condensed hidden md:inline-block"> {% else %} - <a href="{% pageurl page %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"> {% endif %} <div class="btn__body ">{{ i }}</div> </a> {% endfor %} {% if paginator.has_next %} - <a href="{% pageurl page %}?page={{ paginator.next_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ paginator.next_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"> <div class="btn__body-wrap"> <div class="btn__body ">Další</div> <div class="btn__icon ">