Skip to content
Snippets Groups Projects
Select Git revision
  • 74726f4c394f15b4be40bde7773306e8bbdfc5f6
  • test default protected
  • thing
  • master protected
  • feat/custom-css
  • feat/redesign-improvements-10
  • feat/redesign-improvements-8
  • feat/redesign-fixes-3
  • feat/pirstan-changes
  • feat/separate-import-thread
  • feat/dary-improvements
  • features/add-pdf-page
  • features/add-typed-table
  • features/fix-broken-calendar-categories
  • features/add-embed-to-articles
  • features/create-mastodon-feed-block
  • features/add-custom-numbering-for-candidates
  • features/add-timeline
  • features/create-wordcloud-from-article-page
  • features/create-collapsible-extra-legal-info
  • features/extend-hero-banner
21 results

parents.py

Blame
  • parents.py 7.86 KiB
    from django.utils.text import slugify
    from wagtail.blocks import (
        CharBlock,
        IntegerBlock,
        ListBlock,
        PageChooserBlock,
        RichTextBlock,
        StructBlock,
        TextBlock,
        URLBlock,
    )
    from wagtail.documents.blocks import DocumentChooserBlock
    from wagtail.images.blocks import ImageChooserBlock
    from .children import CTAMixin, LinkBlock, NavbarMenuItemBlock, PersonContactBlockMixin, ProgramBlockPopout, ProgramPopoutCategory, FlipCardBlock, PersonBoxBlock
    
    # Mixins (or used as such)
    
    
    PROGRAM_RICH_TEXT_FEATURES = [
        "h3",
        "h4",
        "h5",
        "bold",
        "italic",
        "ol",
        "ul",
        "hr",
        "link",
        "document-link",
        "image",
        "superscript",
        "subscript",
        "strikethrough",
        "blockquote",
        "embed",
    ]
    
    
    # Navbar
    
    
    class SocialLinkBlock(LinkBlock):
        icon = CharBlock(
            label="Ikona",
            help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>"
            "Název ikony zadejte bez tečky na začátku",
        )  # TODO CSS class name or somthing better?
    
        class Meta:
            icon = "link"
            label = "Odkaz"
    
    
    # Articles
    
    
    class NewsBlock(StructBlock):
        title = CharBlock(
            label="Titulek",
            help_text="Nejnovější články se načtou automaticky",
        )
        description = TextBlock(label="Popis", required=False)
    
        class Meta:
            icon = "doc-full-inverse"
            label = "Novinky"
    
    
    class ArticleQuoteBlock(StructBlock):
        quote = CharBlock(label="Citace")
        autor_name = CharBlock(label="Jméno autora")
    
        class Meta:
            icon = "user"
            label = "Blok citace"
            template = "styleguide2/includes/legacy/article_quote_block.html"
    
    
    class ArticleDownloadBlock(StructBlock):
        file = DocumentChooserBlock(label="Stáhnutelný soubor")
    
        class Meta:
            icon = "user"
            label = "Blok stáhnutelného dokumentu"
            template = "styleguide2/includes/molecules/blocks/download_block.html"
    
    
    # People
    
    
    # TODO: Merge
    class TwoTextColumnBlock(StructBlock):
        text_column_1 = RichTextBlock(label="První sloupec textu")
        text_column_2 = RichTextBlock(label="Druhý sloupec textu")
    
        class Meta:
            icon = "doc-full"
            label = "Text ve dvou sloupcích"
    
    
    class PersonContactBoxBlock(StructBlock):
        title = CharBlock(label="Titulek")
        image = ImageChooserBlock(label="Ikona")
        subtitle = CharBlock(label="Podtitulek")
    
        class Meta:
            icon = "mail"
            label = "Kontakty"
    
    
    # Footer
    
    
    class OtherLinksBlock(StructBlock):
        title = CharBlock(label="Titulek")
        list = ListBlock(LinkBlock, label="Seznam odkazů")
    
        class Meta:
            icon = "link"
            label = "Odkazy"
    
    
    # Program
    
    
    class FlipCardsBlock(StructBlock):
        cards = ListBlock(
            FlipCardBlock(label="Karta"),
            label="Karty",
        )
    
        class Meta:
            icon = "group"
            label = "Seznam obracecích karet"
            template = "styleguide2/includes/organisms/cards/flip_card_list.html"
    
    
    class PeopleOverviewBlock(StructBlock):
        title_line_1 = CharBlock(label="První řádek titulku")
        title_line_2 = CharBlock(label="Druhý řádek titulku")
    
        description = TextBlock(label="Popis")
    
        list = ListBlock(PersonBoxBlock, label="Boxíky")
    
        class Meta:
            template = (
                "styleguide2/includes/organisms/main_section/representatives_section.html"
            )
            icon = "group"
            label = "Skupina osob"
    
    
    # Program
    
    
    class ProgramGroupBlockPopout(StructBlock):
        categories = ListBlock(ProgramPopoutCategory(), label="Kategorie programu")
    
        class Meta:
            icon = "date"
            label = "Vyskakovací program"
    
    
    class ProgramGroupBlockMixin(StructBlock):
        title = CharBlock(
            label="Název programu",
            help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...",
        )
        # point_list = ListBlock(ProgramBlock(), label="Jednotlivé články programu")
    
        class Meta:
            icon = "date"
            template = "styleguide2/includes/molecules/program/program_block.html"
            # label = "Skupina programů"
    
        def get_prep_value(self, value):
            value = super().get_prep_value(value)
            value["slug"] = slugify(value["title"])
            return value
    
    
    class ProgramBlock(StructBlock):
        url = URLBlock(
            label="Odkaz pokrývající celou tuto část",
            required=False,
        )
        icon = ImageChooserBlock(
            label="Ikona",
            required=False,
        )
        title = CharBlock(label="Titulek článku programu")
        text = RichTextBlock(
            label="Obsah",
            features=PROGRAM_RICH_TEXT_FEATURES,
        )
    
        class Meta:
            icon = "date"
            label = "Článek programu"
    
    
    class ProgramGroupBlock(ProgramGroupBlockMixin):
        point_list = ListBlock(ProgramBlock(), label="Jednotlivé články programu")
    
        class Meta:
            icon = "date"
            label = "Běžný program"
    
    
    # Candidates
    
    
    class CandidateBlock(StructBlock):
        # NOTE: Page type should be restricted in mixed-in classes
        page = PageChooserBlock(label="Stránka")
    
        image = ImageChooserBlock(
            label="Obrázek",
            help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
            required=False,
        )
    
        description = TextBlock(label="Popis", required=False)
    
        class Meta:
            template = (
                "styleguide2/includes/molecules/candidates/candidate_primary_box.html"
            )
            icon = "form"
            label = "Kandidát"
    
    
    class SecondaryCandidateBlock(StructBlock):
        number = CharBlock(label="Číslo")
    
        # NOTE: Page type should be restricted in mixed-in classes
        page = PageChooserBlock(label="Stránka")
    
        image = ImageChooserBlock(
            label="Obrázek",
            help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
            required=False,
        )
    
        class Meta:
            template = (
                "styleguide2/includes/molecules/candidates/candidate_secondary_box.html"
            )
            icon = "form"
            label = "Kandidát"
    
    
    class CandidateListBlock(StructBlock):
        # NOTE: should be changed in mixed-in blocks.
        candidates = ListBlock(
            CandidateBlock(),
            label="Kandidáti",
        )
    
        class Meta:
            template = (
                "styleguide2/includes/organisms/candidates/candidate_primary_list.html"
            )
            icon = "form"
            label = "Seznam kandidátů"
    
    
    class CandidateSecondaryListBlock(StructBlock):
        heading = CharBlock(label="Nadpis zbytku kandidátky", default="Ostatní kandidátky")
    
        # NOTE: should be changed in mixed-in blocks.
        candidates = ListBlock(
            SecondaryCandidateBlock(),
            label="Zbylí kandidáti na listině",
        )
    
        class Meta:
            template = (
                "styleguide2/includes/organisms/candidates/candidate_secondary_list.html"
            )
            icon = "form"
            label = "Sekundární seznam kandidátů"
    
    
    class CarouselProgramCategoryItemBlock(StructBlock):
        content = TextBlock(label="Obsah")
    
        class Meta:
            icon = "form"
            label = "Bod"
    
    
    class CarouselProgramCategoryBlock(StructBlock):
        number = IntegerBlock(label="Číslo")
    
        name = CharBlock(label="Název")
    
        points = ListBlock(CarouselProgramCategoryItemBlock(), label="Body")
    
        class Meta:
            icon = "form"
            label = "Kategorie"
    
    
    class CarouselProgramBlock(StructBlock):
        label = CharBlock(label="Nadpis", help_text="Např. 'Program'", default="Program")
    
        categories = ListBlock(CarouselProgramCategoryBlock(), label="Kategorie")
    
        long_version_url = URLBlock(
            label="Odkaz na celou verzi programu",
            help_text="Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.",
            required=False,
        )
        long_version_text = CharBlock(
            label="Nadpis odkazu na celou verzi programu", required=False
        )
    
        class Meta:
            icon = "form"
            label = "Priority programu, carousel"
            template = "styleguide2/includes/molecules/program/card_program.html"