diff --git a/main/menu.py b/main/menu.py index ab74d03ffc03c52f030c220fe671ca1ece6cc1b1..037b7fab4a3815bbbe6285ebef79d8e3ab0d9f79 100644 --- a/main/menu.py +++ b/main/menu.py @@ -77,3 +77,18 @@ class MenuMixin(MenuMixinBase): class Meta: abstract = True + + +class PageInMenuMixin(Page): + def get_menu_title(self) -> str: + for menu_item in self.root_page.menu: + if menu_item.value["page"] is None: + continue + + if menu_item.value["page"].id == self.id: + return menu_item.value["title"] + + return self.title + + class Meta: + abstract = True diff --git a/main/migrations/0063_remove_mainarticlepage_article_type_and_more.py b/main/migrations/0063_remove_mainarticlepage_article_type_and_more.py index 9d3b0ae088551ed4ee9bbaaded56d87b47be9ccb..b66a71ec07e5ff12c25fe3cf0f64380199b5de48 100644 --- a/main/migrations/0063_remove_mainarticlepage_article_type_and_more.py +++ b/main/migrations/0063_remove_mainarticlepage_article_type_and_more.py @@ -1,177 +1,941 @@ # Generated by Django 4.1.10 on 2023-12-21 15:00 -from django.db import migrations, models import django.db.models.deletion -import main.blocks -import shared.models import wagtail.blocks import wagtail.documents.blocks import wagtail.fields import wagtail.images.blocks import wagtailmetadata.models +from django.db import migrations, models +import main.blocks +import shared.models -class Migration(migrations.Migration): +class Migration(migrations.Migration): dependencies = [ - ('wagtailcore', '0083_workflowcontenttype'), - ('wagtailimages', '0025_alter_image_file_alter_rendition_file'), - ('main', '0062_alter_mainpersonpage_calendar_url'), + ("wagtailcore", "0083_workflowcontenttype"), + ("wagtailimages", "0025_alter_image_file_alter_rendition_file"), + ("main", "0062_alter_mainpersonpage_calendar_url"), ] operations = [ migrations.RemoveField( - model_name='mainarticlepage', - name='article_type', + model_name="mainarticlepage", + name="article_type", ), migrations.RemoveField( - model_name='mainarticlepage', - name='is_black', + model_name="mainarticlepage", + name="is_black", ), migrations.RemoveField( - model_name='mainarticlepage', - name='region', + model_name="mainarticlepage", + name="region", ), migrations.RemoveField( - model_name='mainhomepage', - name='contact_newcomers_link', + model_name="mainhomepage", + name="contact_newcomers_link", ), migrations.RemoveField( - model_name='mainhomepage', - name='contact_newcomers_text', + model_name="mainhomepage", + name="contact_newcomers_text", ), migrations.RemoveField( - model_name='mainhomepage', - name='donation_page_link', + model_name="mainhomepage", + name="donation_page_link", ), migrations.RemoveField( - model_name='mainhomepage', - name='donation_page_text', + model_name="mainhomepage", + name="donation_page_text", ), migrations.RemoveField( - model_name='mainpeoplepage', - name='perex', + model_name="mainpeoplepage", + name="perex", ), migrations.RemoveField( - model_name='mainpersonpage', - name='people', + model_name="mainpersonpage", + name="people", ), migrations.RemoveField( - model_name='mainprogrampage', - name='perex', + model_name="mainprogrampage", + name="perex", ), migrations.AddField( - model_name='mainhomepage', - name='important_item_name', - field=models.CharField(blank=True, help_text='Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.', max_length=16, null=True, verbose_name='Jméno'), + model_name="mainhomepage", + name="important_item_name", + field=models.CharField( + blank=True, + help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.", + max_length=16, + null=True, + verbose_name="Jméno", + ), ), migrations.AddField( - model_name='mainhomepage', - name='important_item_page', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.page', verbose_name='Stránka'), + model_name="mainhomepage", + name="important_item_page", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="+", + to="wagtailcore.page", + verbose_name="Stránka", + ), ), migrations.AddField( - model_name='mainhomepage', - name='important_item_url', - field=models.URLField(blank=True, null=True, verbose_name='Adresa'), + model_name="mainhomepage", + name="important_item_url", + field=models.URLField(blank=True, null=True, verbose_name="Adresa"), ), migrations.AddField( - model_name='mainhomepage', - name='menu_button_content', - field=wagtail.fields.StreamField([('navbar_menu_item', wagtail.blocks.StructBlock([('button_link', wagtail.blocks.URLBlock(label='Odkaz tlačítka')), ('button_text', wagtail.blocks.CharBlock(label='Text tlačítka'))]))], blank=True, use_json_field=True, verbose_name='Obsah menu pro zapojení se'), + model_name="mainhomepage", + name="menu_button_content", + field=wagtail.fields.StreamField( + [ + ( + "navbar_menu_item", + wagtail.blocks.StructBlock( + [ + ( + "button_link", + wagtail.blocks.URLBlock(label="Odkaz tlačítka"), + ), + ( + "button_text", + wagtail.blocks.CharBlock(label="Text tlačítka"), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Obsah menu pro zapojení se", + ), ), migrations.AddField( - model_name='mainhomepage', - name='menu_button_name', - field=models.CharField(default='Zapojte se', max_length=16, verbose_name='Text na tlačítku pro zapojení'), + model_name="mainhomepage", + name="menu_button_name", + field=models.CharField( + default="Zapojte se", + max_length=16, + verbose_name="Text na tlačítku pro zapojení", + ), preserve_default=False, ), migrations.AddField( - model_name='mainpeoplepage', - name='perex_col_1', - field=models.TextField(default='', verbose_name='Perex - první sloupec'), + model_name="mainpeoplepage", + name="perex_col_1", + field=models.TextField(default="", verbose_name="Perex - první sloupec"), preserve_default=False, ), migrations.AddField( - model_name='mainpeoplepage', - name='perex_col_2', - field=models.TextField(default='', verbose_name='Perex - druhý sloupec'), + model_name="mainpeoplepage", + name="perex_col_2", + field=models.TextField(default="", verbose_name="Perex - druhý sloupec"), preserve_default=False, ), migrations.AddField( - model_name='mainpersonpage', - name='primary_group', - field=models.CharField(blank=True, help_text="např. 'Europarlament' nebo 'Sněmovna'", max_length=32, null=True, verbose_name='Kategorie'), + model_name="mainpersonpage", + name="primary_group", + field=models.CharField( + blank=True, + help_text="např. 'Europarlament' nebo 'Sněmovna'", + max_length=32, + null=True, + verbose_name="Kategorie", + ), ), migrations.AddField( - model_name='mainpersonpage', - name='related_people', - field=wagtail.fields.StreamField([('person', wagtail.blocks.PageChooserBlock(label='Detail osoby', page_type=['main.MainPersonPage']))], blank=True, use_json_field=True, verbose_name='Další lidé'), + model_name="mainpersonpage", + name="related_people", + field=wagtail.fields.StreamField( + [ + ( + "person", + wagtail.blocks.PageChooserBlock( + label="Detail osoby", page_type=["main.MainPersonPage"] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Další lidé", + ), ), migrations.AlterField( - model_name='mainarticlepage', - name='content', - field=wagtail.fields.StreamField([('text', wagtail.blocks.RichTextBlock(template='main/includes/atoms/text/prose_richtext.html')), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(label='Citace')), ('autor_name', wagtail.blocks.CharBlock(label='Jméno autora'))])), ('download', wagtail.blocks.StructBlock([('file', wagtail.documents.blocks.DocumentChooserBlock(label='Stáhnutelný soubor'))]))], blank=True, use_json_field=True, verbose_name='Článek'), + model_name="mainarticlepage", + name="content", + field=wagtail.fields.StreamField( + [ + ( + "text", + wagtail.blocks.RichTextBlock( + template="main/includes/atoms/text/prose_richtext.html" + ), + ), + ( + "quote", + wagtail.blocks.StructBlock( + [ + ("quote", wagtail.blocks.CharBlock(label="Citace")), + ( + "autor_name", + wagtail.blocks.CharBlock(label="Jméno autora"), + ), + ] + ), + ), + ( + "download", + wagtail.blocks.StructBlock( + [ + ( + "file", + wagtail.documents.blocks.DocumentChooserBlock( + label="Stáhnutelný soubor" + ), + ) + ] + ), + ), + ], + blank=True, + use_json_field=True, + verbose_name="Článek", + ), ), migrations.AlterField( - model_name='maincontactpage', - name='contact_boxes', - field=wagtail.fields.StreamField([('item', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('image', wagtail.images.blocks.ImageChooserBlock(label='Ikona')), ('subtitle', wagtail.blocks.CharBlock(label='Podtitulek'))]))], blank=True, use_json_field=True, verbose_name='Kontaktní boxy'), + model_name="maincontactpage", + name="contact_boxes", + field=wagtail.fields.StreamField( + [ + ( + "item", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Titulek")), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Ikona" + ), + ), + ( + "subtitle", + wagtail.blocks.CharBlock(label="Podtitulek"), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Kontaktní boxy", + ), ), migrations.AlterField( - model_name='maincrossroadpage', - name='headlined_cards_content', - field=wagtail.fields.StreamField([('headlined_cards', wagtail.blocks.StructBlock([('headline', wagtail.blocks.CharBlock(label='Titulek bloku', required=False)), ('card_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainArticlePage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))], template='main/includes/molecules/boxes/card_box_block.html'), label='Karty s odkazy'))]))], blank=True, use_json_field=True, verbose_name='Karty rozcestníku s nadpisem'), + model_name="maincrossroadpage", + name="headlined_cards_content", + field=wagtail.fields.StreamField( + [ + ( + "headlined_cards", + wagtail.blocks.StructBlock( + [ + ( + "headline", + wagtail.blocks.CharBlock( + label="Titulek bloku", required=False + ), + ), + ( + "card_items", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek" + ), + ), + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek", required=True + ), + ), + ( + "text", + wagtail.blocks.RichTextBlock( + label="Krátký text pod nadpisem", + required=False, + ), + ), + ( + "page", + wagtail.blocks.PageChooserBlock( + label="Stránka", + page_type=[ + "main.MainArticlesPage", + "main.MainArticlePage", + "main.MainProgramPage", + "main.MainPeoplePage", + "main.MainPersonPage", + "main.MainSimplePage", + "main.MainContactPage", + "main.MainCrossroadPage", + ], + required=False, + ), + ), + ( + "link", + wagtail.blocks.URLBlock( + label="Odkaz", required=False + ), + ), + ], + template="main/includes/molecules/boxes/card_box_block.html", + ), + label="Karty s odkazy", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Karty rozcestníku s nadpisem", + ), ), migrations.AlterField( - model_name='mainhomepage', - name='content', - field=wagtail.fields.StreamField([('carousel', wagtail.blocks.StructBlock([('line_1', wagtail.blocks.TextBlock(label='První řádek')), ('line_2', wagtail.blocks.TextBlock(label='Druhý řádek'))])), ('news', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Nejnovější články se načtou automaticky', label='Titulek')), ('description', wagtail.blocks.TextBlock(label='Popis'))])), ('europarl_news', wagtail.blocks.StructBlock([])), ('people', wagtail.blocks.StructBlock([('title_line_1', wagtail.blocks.CharBlock(label='První řádek titulku')), ('title_line_2', wagtail.blocks.CharBlock(label='Druhý řádek titulku')), ('description', wagtail.blocks.TextBlock(label='Popis')), ('list', wagtail.blocks.ListBlock(main.blocks.BoxBlock, label='Boxíky'))])), ('regions', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Články pro regiony se načtou automaticky', label='Titulek'))])), ('boxes', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Nadpis')), ('list', wagtail.blocks.ListBlock(main.blocks.BoxBlock, label='Boxíky')), ('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek pozadí', required=False))]))], blank=True, use_json_field=True, verbose_name='Hlavní obsah'), + model_name="mainhomepage", + name="content", + field=wagtail.fields.StreamField( + [ + ( + "carousel", + wagtail.blocks.StructBlock( + [ + ( + "line_1", + wagtail.blocks.TextBlock(label="První řádek"), + ), + ( + "line_2", + wagtail.blocks.TextBlock(label="Druhý řádek"), + ), + ] + ), + ), + ( + "news", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Nejnovější články se načtou automaticky", + label="Titulek", + ), + ), + ( + "description", + wagtail.blocks.TextBlock(label="Popis"), + ), + ] + ), + ), + ("europarl_news", wagtail.blocks.StructBlock([])), + ( + "people", + wagtail.blocks.StructBlock( + [ + ( + "title_line_1", + wagtail.blocks.CharBlock( + label="První řádek titulku" + ), + ), + ( + "title_line_2", + wagtail.blocks.CharBlock( + label="Druhý řádek titulku" + ), + ), + ( + "description", + wagtail.blocks.TextBlock(label="Popis"), + ), + ( + "list", + wagtail.blocks.ListBlock( + main.blocks.BoxBlock, label="Boxíky" + ), + ), + ] + ), + ), + ( + "regions", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Články pro regiony se načtou automaticky", + label="Titulek", + ), + ) + ] + ), + ), + ( + "boxes", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Nadpis")), + ( + "list", + wagtail.blocks.ListBlock( + main.blocks.BoxBlock, label="Boxíky" + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek pozadí", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + verbose_name="Hlavní obsah", + ), ), migrations.AlterField( - model_name='mainhomepage', - name='footer_other_links', - field=wagtail.fields.StreamField([('other_links', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('list', wagtail.blocks.ListBlock(main.blocks.LinkBlock, label='Seznam odkazů s titulkem'))]))], blank=True, use_json_field=True, verbose_name='Odkazy v zápatí webu'), + model_name="mainhomepage", + name="footer_other_links", + field=wagtail.fields.StreamField( + [ + ( + "other_links", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Titulek")), + ( + "list", + wagtail.blocks.ListBlock( + main.blocks.LinkBlock, + label="Seznam odkazů s titulkem", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Odkazy v zápatí webu", + ), ), migrations.AlterField( - model_name='mainhomepage', - name='menu', - field=wagtail.fields.StreamField([('menu_item', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.', label='Titulek', required=True)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]))], blank=True, use_json_field=True, verbose_name='Položky'), + model_name="mainhomepage", + name="menu", + field=wagtail.fields.StreamField( + [ + ( + "menu_item", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.", + label="Titulek", + required=True, + ), + ), + ( + "page", + wagtail.blocks.PageChooserBlock( + label="Stránka", required=False + ), + ), + ( + "link", + wagtail.blocks.URLBlock( + label="Odkaz", required=False + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Položky", + ), ), migrations.AlterField( - model_name='mainhomepage', - name='social_links', - field=wagtail.fields.StreamField([('social_links', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Název')), ('link', wagtail.blocks.URLBlock(label='Odkaz')), ('icon', wagtail.blocks.CharBlock(help_text='Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku', label='Ikona'))]))], blank=True, use_json_field=True, verbose_name='Odkazy na sociální sítě'), + model_name="mainhomepage", + name="social_links", + field=wagtail.fields.StreamField( + [ + ( + "social_links", + wagtail.blocks.StructBlock( + [ + ("text", wagtail.blocks.CharBlock(label="Název")), + ("link", wagtail.blocks.URLBlock(label="Odkaz")), + ( + "icon", + wagtail.blocks.CharBlock( + help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku", + label="Ikona", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Odkazy na sociální sítě", + ), ), migrations.AlterField( - model_name='mainpeoplepage', - name='people', - field=wagtail.fields.StreamField([('people_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug skupiny', required=False)), ('person_list', wagtail.blocks.ListBlock(wagtail.blocks.PageChooserBlock(label='Detail osoby', page_type=['main.MainPersonPage']), label='Skupina osob'))], label='Seznam osob')), ('team_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Název sekce týmů')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug sekce', required=False)), ('team_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('headline', wagtail.blocks.CharBlock(label='Titulek bloku', required=False)), ('card_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainArticlePage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))], template='main/includes/molecules/boxes/card_box_block.html'), label='Karty s odkazy'))], label='Karta týmu'), label='Týmy'))]))], blank=True, use_json_field=True, verbose_name='Lidé a týmy'), + model_name="mainpeoplepage", + name="people", + field=wagtail.fields.StreamField( + [ + ( + "people_group", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Titulek")), + ( + "slug", + wagtail.blocks.CharBlock( + help_text="Není třeba vyplňovat, bude automaticky vyplněno", + label="Slug skupiny", + required=False, + ), + ), + ( + "person_list", + wagtail.blocks.ListBlock( + wagtail.blocks.PageChooserBlock( + label="Detail osoby", + page_type=["main.MainPersonPage"], + ), + label="Skupina osob", + ), + ), + ], + label="Seznam osob", + ), + ), + ( + "team_group", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock(label="Název sekce týmů"), + ), + ( + "slug", + wagtail.blocks.CharBlock( + help_text="Není třeba vyplňovat, bude automaticky vyplněno", + label="Slug sekce", + required=False, + ), + ), + ( + "team_list", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "headline", + wagtail.blocks.CharBlock( + label="Titulek bloku", + required=False, + ), + ), + ( + "card_items", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek" + ), + ), + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek", + required=True, + ), + ), + ( + "text", + wagtail.blocks.RichTextBlock( + label="Krátký text pod nadpisem", + required=False, + ), + ), + ( + "page", + wagtail.blocks.PageChooserBlock( + label="Stránka", + page_type=[ + "main.MainArticlesPage", + "main.MainArticlePage", + "main.MainProgramPage", + "main.MainPeoplePage", + "main.MainPersonPage", + "main.MainSimplePage", + "main.MainContactPage", + "main.MainCrossroadPage", + ], + required=False, + ), + ), + ( + "link", + wagtail.blocks.URLBlock( + label="Odkaz", + required=False, + ), + ), + ], + template="main/includes/molecules/boxes/card_box_block.html", + ), + label="Karty s odkazy", + ), + ), + ], + label="Karta týmu", + ), + label="Týmy", + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + verbose_name="Lidé a týmy", + ), ), migrations.AlterField( - model_name='mainpersonpage', - name='social_links', - field=wagtail.fields.StreamField([('social_links', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Název')), ('link', wagtail.blocks.URLBlock(label='Odkaz')), ('icon', wagtail.blocks.CharBlock(help_text='Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku', label='Ikona'))]))], blank=True, use_json_field=True, verbose_name='Odkazy na sociální sítě'), + model_name="mainpersonpage", + name="social_links", + field=wagtail.fields.StreamField( + [ + ( + "social_links", + wagtail.blocks.StructBlock( + [ + ("text", wagtail.blocks.CharBlock(label="Název")), + ("link", wagtail.blocks.URLBlock(label="Odkaz")), + ( + "icon", + wagtail.blocks.CharBlock( + help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku", + label="Ikona", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Odkazy na sociální sítě", + ), ), migrations.AlterField( - model_name='mainprogrampage', - name='program', - field=wagtail.fields.StreamField([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek části programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock(label='Odkaz pokrývající celou tuto část', required=False)), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé články programu'))])), ('program_group_crossroad', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek části programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainArticlePage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty programu'))])), ('program_group_popout', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek části programu')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název')), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek vyskakovacího bloku')), ('content', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé bloky programu'))]), label='Kategorie programu'))]))], blank=True, use_json_field=True, verbose_name='Program'), + model_name="mainprogrampage", + name="program", + field=wagtail.fields.StreamField( + [ + ( + "program_group", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek části programu" + ), + ), + ( + "point_list", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "url", + wagtail.blocks.URLBlock( + label="Odkaz pokrývající celou tuto část", + required=False, + ), + ), + ( + "icon", + wagtail.images.blocks.ImageChooserBlock( + label="Ikona", required=False + ), + ), + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek článku programu" + ), + ), + ( + "text", + wagtail.blocks.RichTextBlock( + features=[ + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + "embed", + ], + label="Obsah", + ), + ), + ] + ), + label="Jednotlivé články programu", + ), + ), + ] + ), + ), + ( + "program_group_crossroad", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek části programu" + ), + ), + ( + "point_list", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + label="Obrázek" + ), + ), + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek", required=True + ), + ), + ( + "text", + wagtail.blocks.RichTextBlock( + label="Krátký text pod nadpisem", + required=False, + ), + ), + ( + "page", + wagtail.blocks.PageChooserBlock( + label="Stránka", + page_type=[ + "main.MainArticlesPage", + "main.MainArticlePage", + "main.MainProgramPage", + "main.MainPeoplePage", + "main.MainPersonPage", + "main.MainSimplePage", + "main.MainContactPage", + "main.MainCrossroadPage", + ], + required=False, + ), + ), + ( + "link", + wagtail.blocks.URLBlock( + label="Odkaz", required=False + ), + ), + ] + ), + label="Karty programu", + ), + ), + ] + ), + ), + ( + "program_group_popout", + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek části programu" + ), + ), + ( + "categories", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "name", + wagtail.blocks.CharBlock( + label="Název" + ), + ), + ( + "icon", + wagtail.images.blocks.ImageChooserBlock( + label="Ikona", required=False + ), + ), + ( + "point_list", + wagtail.blocks.ListBlock( + wagtail.blocks.StructBlock( + [ + ( + "title", + wagtail.blocks.CharBlock( + label="Titulek vyskakovacího bloku" + ), + ), + ( + "content", + wagtail.blocks.RichTextBlock( + features=[ + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + "embed", + ], + label="Obsah", + ), + ), + ] + ), + label="Jednotlivé bloky programu", + ), + ), + ] + ), + label="Kategorie programu", + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + verbose_name="Program", + ), ), migrations.AlterField( - model_name='mainsimplepage', - name='content', - field=wagtail.fields.StreamField([('text', wagtail.blocks.RichTextBlock(template='main/includes/atoms/text/prose_richtext.html'))], blank=True, use_json_field=True, verbose_name='Hlavní obsah'), + model_name="mainsimplepage", + name="content", + field=wagtail.fields.StreamField( + [ + ( + "text", + wagtail.blocks.RichTextBlock( + template="main/includes/atoms/text/prose_richtext.html" + ), + ) + ], + blank=True, + use_json_field=True, + verbose_name="Hlavní obsah", + ), ), migrations.CreateModel( - name='MainSearchPage', + name="MainSearchPage", 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')), - ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')), + ( + "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", + ), + ), + ( + "search_image", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="wagtailimages.image", + verbose_name="Search image", + ), + ), ], options={ - 'verbose_name': 'Vyhledávací stránka', + "verbose_name": "Vyhledávací stránka", }, - bases=(shared.models.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model), + bases=( + shared.models.SubpageMixin, + wagtailmetadata.models.WagtailImageMetadataMixin, + "wagtailcore.page", + models.Model, + ), ), ] diff --git a/main/models.py b/main/models.py index 3a0f5a031712bccfbbc9fcb576abfab9e845c71a..45df6c3364e07432f09dbbc352797a47ea2c081d 100644 --- a/main/models.py +++ b/main/models.py @@ -44,7 +44,7 @@ from tuning import admin_help from . import blocks from .constants import MONTH_NAMES from .forms import JekyllImportForm -from .menu import MenuMixin +from .menu import MenuMixin, PageInMenuMixin class MainHomePage( @@ -58,8 +58,7 @@ class MainHomePage( # header menu_button_name = models.CharField( - verbose_name="Text na tlačítku pro zapojení", - max_length=16 + verbose_name="Text na tlačítku pro zapojení", max_length=16 ) menu_button_content = StreamField( @@ -188,8 +187,7 @@ class MainHomePage( context["article_data_list"] = self.materialize_shared_articles_query( self.append_all_shared_articles_query(MainArticlePage.objects.live().all()) .live() - .order_by("-union_date") - [:3] + .order_by("-union_date")[:3] ) return context @@ -306,6 +304,7 @@ class MainArticlesPage( SubpageMixin, MetadataPageMixin, ArticlesPageMixin, + PageInMenuMixin, Page, ): last_import_log = models.TextField( @@ -554,7 +553,12 @@ class MainArticleTag(TaggedItemBase): class MainArticlePage( - ArticleMixin, ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page + ArticleMixin, + ExtendedMetadataPageMixin, + SubpageMixin, + MetadataPageMixin, + PageInMenuMixin, + Page, ): ### FIELDS content = StreamField( @@ -626,7 +630,9 @@ class MainArticlePage( # return context -class MainProgramPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): +class MainProgramPage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS program = StreamField( @@ -659,7 +665,9 @@ class MainProgramPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin verbose_name = "Program" -class MainPeoplePage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): +class MainPeoplePage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS perex_col_1 = models.TextField( @@ -714,6 +722,7 @@ class MainPersonPage( SubpageMixin, MetadataPageMixin, CalendarMixin, + PageInMenuMixin, Page, ): ### FIELDS @@ -829,7 +838,9 @@ class MainPersonPage( ) -class MainSimplePage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): +class MainSimplePage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS # content @@ -868,7 +879,9 @@ class MainSimplePage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, verbose_name = "Jednoduchá stárnka" -class MainContactPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): +class MainContactPage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS contact_people = StreamField( @@ -914,7 +927,7 @@ class MainContactPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin class MainCrossroadPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page ): ### FIELDS @@ -958,7 +971,9 @@ class MainCrossroadPage( verbose_name = "Rozcestník s kartami" -class MainHoaxPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): +class MainHoaxPage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page +): ### FIELDS description = RichTextField( @@ -996,7 +1011,7 @@ class MainHoaxPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, P class MainSearchPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, PageInMenuMixin, Page ): parent_page_types = ["main.MainHomePage"] subpage_types = [] diff --git a/main/static/main/pirati-ui.svg b/main/static/main/pirati-ui.svg index ffc20eccf43c3d89476c0124b2475cd314fe2ecd..c6e3a71ad07f5229dda5d69c9289dc5ce339be12 100644 --- a/main/static/main/pirati-ui.svg +++ b/main/static/main/pirati-ui.svg @@ -127,4 +127,4 @@ <glyph unicode="" glyph-name="price-tags" horiz-adv-x="1280" d="M1232 960h-384c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l476.118 476.118c18.666 18.666 33.94 55.54 33.94 81.94v384c0 26.4-21.6 48-48 48zM992 576c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM128 416l544 544h-80c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l30.058 30.058-416 416z" /> <glyph unicode="" glyph-name="twitter" horiz-adv-x="1001" d="M596.009 526.629l372.819 433.371h-88.346l-323.718-376.29-258.553 376.29h-298.21l390.983-569.018-390.983-454.457h88.351l341.855 397.375 273.051-397.375h298.21l-405.458 590.103zM475 385.969l-354.815 507.521h135.702l624.636-893.48h-135.702l-269.821 385.959z" /> <glyph unicode="" glyph-name="stats-dots" d="M128 64h896v-128h-1024v1024h128zM288 128c-53.020 0-96 42.98-96 96s42.98 96 96 96c2.828 0 5.622-0.148 8.388-0.386l103.192 171.986c-9.84 15.070-15.58 33.062-15.58 52.402 0 53.020 42.98 96 96 96s96-42.98 96-96c0-19.342-5.74-37.332-15.58-52.402l103.192-171.986c2.766 0.238 5.56 0.386 8.388 0.386 2.136 0 4.248-0.094 6.35-0.23l170.356 298.122c-10.536 15.408-16.706 34.036-16.706 54.11 0 53.020 42.98 96 96 96s96-42.98 96-96c0-53.020-42.98-96-96-96-2.14 0-4.248 0.094-6.35 0.232l-170.356-298.124c10.536-15.406 16.706-34.036 16.706-54.11 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 19.34 5.74 37.332 15.578 52.402l-103.19 171.984c-2.766-0.238-5.56-0.386-8.388-0.386s-5.622 0.146-8.388 0.386l-103.192-171.986c9.84-15.068 15.58-33.060 15.58-52.4 0-53.020-42.98-96-96-96z" /> -</font></defs></svg> \ No newline at end of file +</font></defs></svg> diff --git a/main/templates/main/main_article_page.html b/main/templates/main/main_article_page.html index b8593def273ec88a2d1e164ecee401b700f0598c..3ab853851cec7d2e1c9b919bda37663010b4f4b1 100644 --- a/main/templates/main/main_article_page.html +++ b/main/templates/main/main_article_page.html @@ -3,7 +3,7 @@ {% block content %} -{% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.root_page.articles_page.title %} +{% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.root_page.articles_page.get_menu_title %} {% include 'main/includes/organisms/header/article_header.html' with title=page.title description=page.perex tags=page.tags.names first_nav_text=page.root_page.articles_page.title first_nav_link=page.root_page.articles_page.url second_nav_text=page.date %} <main role="main" class="mb-10 xl:mb-32"> diff --git a/main/templates/main/main_articles_page.html b/main/templates/main/main_articles_page.html index 1c623c9beaf254732b13f26319ecead99f162c0b..9462970468ef66e9ad26ee04ad2f4ac0f0f178f1 100644 --- a/main/templates/main/main_articles_page.html +++ b/main/templates/main/main_articles_page.html @@ -3,7 +3,7 @@ {% block content %} -{% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.title %} +{% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} {% include 'main/includes/organisms/header/articles_header.html' with title=page.title tags=tags %} <main role="main"> diff --git a/main/templates/main/main_contact_page.html b/main/templates/main/main_contact_page.html index f08da6b71964bac1f86dd78cf39983b0419b4d04..2a508871aeac06c2c4278a477011cf6a32ef7f4f 100644 --- a/main/templates/main/main_contact_page.html +++ b/main/templates/main/main_contact_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} - {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.title %} + {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} {% include 'main/includes/organisms/header/simple_header.html' with title=page.title %} <main role="main"> diff --git a/main/templates/main/main_crossroad_page.html b/main/templates/main/main_crossroad_page.html index 114aed5441ae485b4197a7b7345e4394c5af1e07..be40644e827fdd8263449345650683982c8d8911 100644 --- a/main/templates/main/main_crossroad_page.html +++ b/main/templates/main/main_crossroad_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags %} {% block content %} - {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.title %} + {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} {% include 'main/includes/organisms/header/simple_header.html' with title=page.title %} <main role="main" class="mb-10 xl:mb-32"> diff --git a/main/templates/main/main_people_page.html b/main/templates/main/main_people_page.html index 50fd77dcee520eb64b4e8cd49a1431567da53eed..16c757a40ddc7a4228e2821e7c3fe0793e8b4475 100644 --- a/main/templates/main/main_people_page.html +++ b/main/templates/main/main_people_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} -{% include 'main/includes/organisms/layout/navbar.html' with selected_item='Kdo jsme' %} +{% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} <div class="__js-root"> <ui-view-provider diff --git a/main/templates/main/main_person_page.html b/main/templates/main/main_person_page.html index 67dc7c4a4bcaaee94e1942b2d2a506dc07d518f8..d14e7ab2e0a5dcd12d21c5ea737ad862fe864350 100644 --- a/main/templates/main/main_person_page.html +++ b/main/templates/main/main_person_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags wagtailimages_tags shared_filters perex %} {% block content %} - {% include 'main/includes/organisms/layout/navbar.html' with selected_item='Kdo jsme' is_transparent=True is_on_dark_background=True %} + {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.root_page.people_page.get_menu_title is_transparent=True is_on_dark_background=True %} {% include 'main/includes/organisms/header/photo_header.html' with first_nav_text=page.root_page.people_page.title first_nav_link=page.root_page.people_page.url second_nav_text=page.primary_group degree_before=page.before_name name=page.title degree_after=page.after_name function=page.position main_image=page.main_image %} <main role="main"> diff --git a/main/templates/main/main_program_page.html b/main/templates/main/main_program_page.html index 90e81090cdb5b80cde826642e2add0e1ccce1d65..a88f811c2af4b970babe66dadaf1b4de34967156 100644 --- a/main/templates/main/main_program_page.html +++ b/main/templates/main/main_program_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} - {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.title %} + {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} <div class="__js-root"> <ui-view-provider @@ -10,7 +10,7 @@ :sync-location="true" v-slot="{ isCurrentView, toggleView }" > - {% include 'main/includes/organisms/header/simple_header_with_ui_switch.html' with title='Program' ui_switch_iterable=page.program %} + {% include 'main/includes/organisms/header/simple_header_with_ui_switch.html' with title=page.title ui_switch_iterable=page.program %} <main role="main" class="mb-4 xl:mb-20"> <div class="container--wide flex flex-col"> diff --git a/main/templates/main/main_simple_page.html b/main/templates/main/main_simple_page.html index 102a84cbfa04d77256c7990374ce79aaf3344170..3ef9bd6138005a22e2724a02854cc4a99647976a 100644 --- a/main/templates/main/main_simple_page.html +++ b/main/templates/main/main_simple_page.html @@ -2,7 +2,7 @@ {% load wagtailcore_tags %} {% block content %} - {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.title %} + {% include 'main/includes/organisms/layout/navbar.html' with selected_item=page.get_menu_title %} {% include 'main/includes/organisms/header/simple_header.html' with title=page.title %} <main class="container--wide mb-2 lg:mb-12">