Skip to content
Snippets Groups Projects
Select Git revision
  • d31d9163f0f4c33d699b7cd6c52f28fcbcb90407
  • master default protected
2 results

README.md

Blame
  • blocks.py 8.09 KiB
    from django.forms.utils import ErrorList
    from wagtail.core.blocks import (
        CharBlock,
        IntegerBlock,
        ListBlock,
        PageChooserBlock,
        StructBlock,
        TextBlock,
        URLBlock,
    )
    from wagtail.core.blocks.struct_block import StructBlockValidationError
    from wagtail.images.blocks import ImageChooserBlock
    
    
    class AddressBlock(StructBlock):
        title = CharBlock(label="Titulek", required=True)
        map_image = ImageChooserBlock(label="Obrázek mapy", required=False)
        map_link = URLBlock(label="Odkaz na detail mapy", required=False)
        address = TextBlock(label="Adresa", required=True)
        address_info = TextBlock(label="Info k adrese", required=False)
    
        class Meta:
            template = "region/blocks/address_block.html"
            icon = "home"
            label = "Adresa"
    
    
    class CallToActionButtonBlock(StructBlock):
        button_link = URLBlock(label="Odkaz", max_length=64)
        button_text = CharBlock(label="Text")
    
        class Meta:
            template = "region/blocks/call_to_action_button_block.html"
            icon = "link"
            label = "Call-to-action tlačítko"
    
    
    class CandidateListBlock(StructBlock):
        title = CharBlock(label="Titulek", required=True)
        call_to_action_text = CharBlock(label="Text 'call-to-action' baneru")
        call_to_action_link = URLBlock(
            label="Odkaz 'call-to-action' baneru", required=False
        )
        call_to_action_button_text = CharBlock(
            label="Text tlačítka 'call-to-action' baneru", max_length=24, required=False
        )
        candidate_list_big_count = IntegerBlock(
            label="Počet kanditátů s velkým náhledem", default=7
        )
        candidate_list_shown_count = IntegerBlock(
            label="Počet zobrazených kandidátů při načtení stránky (včetně velkých náhledů)",
            default=16,
        )
    
        candidate_list = ListBlock(
            PageChooserBlock(label="Osoba", page_type=["region.RegionPersonPage"]),
            label="Kandidáti",
        )
    
        class Meta:
            template = "region/blocks/candidate_list_block.html"
            icon = "list-ol"
            label = "List kanditátů"
    
    
    class CardLinkBlock(StructBlock):
        image = ImageChooserBlock(label="Obrázek")
        title = CharBlock(label="Titulek", required=True)
        page = PageChooserBlock(
            label="Stránka",
            page_type=[
                "region.RegionAfterElectionPage",
                "region.RegionArticlePage",
                "region.RegionArticlesPage",
                "region.RegionCenterPage",
                "region.RegionContactPage",
                "region.RegionCrossroadPage",
                "region.RegionCustomPage",
                "region.RegionElectionPage",
                "region.RegionElectionPointPage",
                "region.RegionPeoplePage",
                "region.RegionPersonPage",
                "region.RegionProgramPage",
                "region.RegionTagsPage",
            ],
            required=False,
        )
        link = URLBlock(label="Odkaz", required=False)
    
        class Meta:
            template = "region/blocks/card_link_block.html"
            icon = "link"
            label = "Karta odkazu"
    
        def clean(self, value):
            errors = {}
    
            if value["page"] and value["link"]:
                errors["page"] = ErrorList(
                    ["Stránka nemůže být vybrána současně s odkazem."]
                )
                errors["link"] = ErrorList(
                    ["Odkaz nemůže být vybrán současně se stránkou."]
                )
            elif not value["page"] and not value["link"]:
                errors["page"] = ErrorList(["Zvolte stránku nebo vyplňte odkaz."])
                errors["link"] = ErrorList(["Vyplňte odkaz nebo zvolte stránku."])
            if errors:
                raise StructBlockValidationError(errors)
            return super().clean(value)
    
    
    class CardLinkWithHeadlineBlock(StructBlock):
        headline = CharBlock(label="Titulek bloku", required=False)
        card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
    
        class Meta:
            template = "region/blocks/card_link_with_headline_block.html"
            icon = "link"
            label = "Karta odkazu s nadpisem"
    
    
    class CenterContactBlock(StructBlock):
        title = CharBlock(label="Titulek", required=True)
        contact_list = ListBlock(
            PageChooserBlock(label="Osoba", page_type=["region.RegionPersonPage"]),
            label="List kontaktů",
        )
    
        class Meta:
            template = "region/blocks/contact_block.html"
            icon = "mail"
            label = "Kontakt"
    
    
    class ContactItemBlock(StructBlock):
        name = CharBlock(label="Role")
        person = PageChooserBlock(
            label="Osoba",
            page_type=["region.RegionPersonPage"],
        )
    
        class Meta:
            icon = "mail"
            label = "Kontakt"
    
    
    class ElectionHeaderBlock(StructBlock):
        flag_text = CharBlock(label="Text ve 'vlajce'", max_length=32, required=False)
        motto = CharBlock(label="Motto (podnadpis)", max_length=128, required=False)
        image = ImageChooserBlock(label="Obrázek (kandidátů)", required=False)
        background_image = ImageChooserBlock(label="Obrázek na pozadí", required=True)
        button_list = ListBlock(
            CallToActionButtonBlock(),
            label="Call to action tlačítka",
        )
    
        class Meta:
            template = "region/blocks/election_header_block.html"
            icon = "mail"
            label = "Header pro volební rozcestník"
    
    
    class HomepageHeaderBlock(StructBlock):
        title = CharBlock(label="Titulek", required=False, help_text="Nap")
        image = ImageChooserBlock()
        button_text = CharBlock(label="Text tlačítka", required=False)
        button_link = URLBlock(label="Odkaz tlačítka", required=False)
    
        class Meta:
            template = "region/blocks/homepage_header_block.html"
            icon = "image"
            label = "Nadpis s obrázkem a tlačítky"
    
    
    class HomepageSimpleHeaderBlock(StructBlock):
        title = CharBlock(label="Titulek", required=True)
        subtitle = CharBlock(label="Podtitulek", required=False)
        image = ImageChooserBlock()
    
        class Meta:
            template = "region/blocks/homepage_simple_header_block.html"
            icon = "image"
            label = "Nadpis s obrázkem v pozadí"
    
    
    class PeopleGroupListBlock(StructBlock):
        group_title = CharBlock(label="Titulek", required=True)
        person_list = ListBlock(
            PageChooserBlock(
                label="Osoba",
                page_type=["district.DistrictPersonPage", "region.RegionPersonPage"],
            ),
            label="List osob",
        )
    
        class Meta:
            template = "region/blocks/people_group_block.html"
            icon = "list-ul"
            label = "Skupina členů"
    
    
    class PersonUrlBlock(StructBlock):
        title = CharBlock(label="Název", required=True)
        url = URLBlock(label="URL", required=True)
        custom_icon = CharBlock(
            label="Vlastní ikonka ze styleguide",
            required=False,
            help_text="Pro vlastní ikonku zadejde název ikonky z https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons (bez tečky), např. 'ico--beer'",
        )
    
    
    class ProgramItemBlock(StructBlock):
        title = CharBlock(label="Název", required=True)
        completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
    
    
    class StaticProgramBlock(StructBlock):
        headline = CharBlock(label="Titulek bloku", required=True)
        perex = TextBlock(label="Krátký text pod nadpisem", required=True)
        person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
        completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
        program_items = ListBlock(ProgramItemBlock())
        # program_items = TableBlock(label="Tabulka plnění programu", required=True)
        person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
    
        class Meta:
            template = "region/blocks/static_program_block.html"
            icon = "list-ul"
            label = "Blok programu"
    
    
    class RedmineProgramBlock(StructBlock):
        headline = CharBlock(label="Titulek bloku", required=True)
        perex = TextBlock(label="Krátký text pod nadpisem", required=True)
        person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
        redmine_issue = IntegerBlock(label="Číslo Redmine issue", required=True)
    
        class Meta:
            template = "region/blocks/redmine_program_block.html"
            icon = "site"
            label = "Blok programu stahovaný z Redmine"