from django.utils.text import slugify from wagtail.blocks import ( CharBlock, ChoiceBlock, ListBlock, PageChooserBlock, RichTextBlock, StructBlock, TextBlock, URLBlock, ) from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.blocks import ImageChooserBlock from shared.blocks import CardLinkBlockMixin, CardLinkWithHeadlineBlockMixin, CTAMixin PROGRAM_RICH_TEXT_FEATURES = [ "h3", "h4", "h5", "bold", "italic", "ol", "ul", "hr", "link", "document-link", "image", "superscript", "subscript", "strikethrough", "blockquote", "embed", ] class CardLinkBlock(CardLinkBlockMixin): page = PageChooserBlock( label="Stránka", page_type=[ "main.MainArticlesPage", "main.MainArticlePage", "main.MainProgramPage", "main.MainPeoplePage", "main.MainPersonPage", "main.MainSimplePage", "main.MainContactPage", "main.MainCrossroadPage", ], required=False, ) class Meta: template = "main/includes/molecules/boxes/card_box_block.html" icon = "link" label = "Karta s odkazem" class ProgramGroupBlockMixin(StructBlock): title = CharBlock(label="Titulek části programu") # point_list = ListBlock(ProgramBlock(), label="Jednotlivé články programu") class Meta: icon = "date" # label = "Skupina programů" def get_prep_value(self, value): value = super().get_prep_value(value) value["slug"] = slugify(value["title"]) return value class BoxBlock(CTAMixin, StructBlock): title = CharBlock(label="Nadpis") image = ImageChooserBlock(label="Logo/obrázek") class Meta: icon = "form" label = "Box" class BoxesBlock(StructBlock): title = CharBlock(label="Nadpis") list = ListBlock(BoxBlock, label="Boxíky") image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/boxes_block.html" icon = "grip" label = "Skupina boxů" class HomePageCarouseSlideBlock(StructBlock): desktop_line_1 = TextBlock(label="Desktop první řádek") desktop_line_2 = TextBlock(label="Desktop druhý řádek") mobile_line_1 = TextBlock(label="První mobilní řádek") mobile_line_2 = TextBlock(label="Druhý mobilní řádek") mobile_line_3 = TextBlock(label="Třetí mobilní řádek") class Meta: template = "main/includes/molecules/menus/carousel.html" icon = "form" label = "Carousel" class NewsBlock(StructBlock): title = CharBlock( label="Titulek", help_text="Nejnovější články se načtou automaticky", ) description = TextBlock(label="Popis") class Meta: template = "main/includes/organisms/articles/articles_section.html" icon = "doc-full-inverse" label = "Novinky" class EuroparlNewsBlock(StructBlock): class Meta: template = "main/includes/organisms/articles/europarl_articles_section.html" icon = "doc-full-inverse" label = "Novinky z Eurovoleb" class PeopleGroupBlock(StructBlock): title = CharBlock(label="Titulek") slug = CharBlock( label="Slug skupiny", required=False, help_text="Není třeba vyplňovat, bude automaticky vyplněno", ) person_list = ListBlock( PageChooserBlock(page_type="main.MainPersonPage", label="Detail osoby"), label="Skupina osob", ) class Meta: icon = "group" label = "Slug skupiny" def get_prep_value(self, value): value = super().get_prep_value(value) value["slug"] = slugify(value["title"]) return value 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(BoxBlock, label="Boxíky") class Meta: template = "main/includes/organisms/main_section/representatives_section.html" icon = "group" label = "Skupina osob" 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 ProgramBlockPopout(StructBlock): title = CharBlock(label="Titulek vyskakovacího bloku") content = RichTextBlock( label="Obsah", features=PROGRAM_RICH_TEXT_FEATURES, ) class Meta: icon = "date" label = "Blok programu" class ProgramPopoutCategory(StructBlock): name = CharBlock(label="Název") icon = ImageChooserBlock(label="Ikona", required=False) point_list = ListBlock(ProgramBlockPopout(), label="Jednotlivé bloky programu") class Meta: icon = "date" label = "Kategorie programu" class ProgramGroupBlock(ProgramGroupBlockMixin): point_list = ListBlock(ProgramBlock(), label="Jednotlivé články programu") class Meta: icon = "date" label = "Běžný program" class ProgramGroupBlockCrossroad(ProgramGroupBlockMixin): point_list = ListBlock(CardLinkBlock(), label="Karty programu") class Meta: icon = "date" label = "Rozcestníkový program" class ProgramGroupBlockPopout(ProgramGroupBlockMixin): categories = ListBlock(ProgramPopoutCategory(), label="Kategorie programu") class Meta: icon = "date" label = "Vyskakovací program" class RegionsBlock(StructBlock): title = CharBlock( label="Titulek", help_text="Články pro regiony se načtou automaticky", ) class Meta: template = "main/includes/organisms/main_section/region_section.html" icon = "view" label = "Články pro regiony" class PersonContactBoxBlock(StructBlock): title = CharBlock(label="Titulek") image = ImageChooserBlock(label="Ikona") subtitle = CharBlock(label="Podtitulek") class Meta: icon = "mail" label = "Kontakty" # ARTICLE BLOCKS class ArticleQuoteBlock(StructBlock): quote = CharBlock(label="Citace") autor_name = CharBlock(label="Jméno autora") class Meta: icon = "user" label = "Blok citace" template = "main/includes/legacy/article_quote_block.html" class ArticleImageMixin(StructBlock): image = ImageChooserBlock(label="Obrázek") image_source = CharBlock( label="Zdroj obrázku", help_text="Např. 'europoslankyně Markéta Gregorová'", required=False, ) text = RichTextBlock(label="Text") class ArticleLeftImageBlock(ArticleImageMixin): class Meta: icon = "image" label = "Text s obrázkem vlevo" template = "main/includes/molecules/articles/article_richtext_content_with_left_image.html" class ArticleRightImageBlock(ArticleImageMixin): class Meta: icon = "image" label = "Text s obrázkem vpravo" template = "main/includes/molecules/articles/article_richtext_content_with_right_image.html" class ArticleDownloadBlock(StructBlock): file = DocumentChooserBlock(label="Stáhnutelný soubor") class Meta: icon = "user" label = "Blok stáhnutelného dokumentu" template = "main/includes/molecules/blocks/article_download_block.html" 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 CardLinkWithHeadlineBlock(CardLinkWithHeadlineBlockMixin): card_items = ListBlock( CardLinkBlock(template="main/includes/molecules/boxes/card_box_block.html"), label="Karty s odkazy", ) class Meta: template = "main/includes/molecules/boxes/card_box_with_headline_block.html" icon = "link" label = "Karty odkazů s nadpisem" class HoaxBlock(StructBlock): title = CharBlock(label="Titulek") hoax = RichTextBlock(label="Hoax") image = ImageChooserBlock(label="Obrázek") image_explanation = CharBlock(label="Popis obrázku", required=False) reality = RichTextBlock(label="Realita") class Meta: icon = "view" label = "Hoax" template = "main/blocks/hoax_block.html" class TeamBlock(StructBlock): title = CharBlock(label="Název sekce týmů") slug = CharBlock( label="Slug sekce", required=False, help_text="Není třeba vyplňovat, bude automaticky vyplněno", ) team_list = ListBlock( CardLinkWithHeadlineBlock(label="Karta týmu"), label="Týmy", ) class Meta: icon = "group" label = "Týmy" def get_prep_value(self, value): value = super().get_prep_value(value) value["slug"] = slugify(value["title"]) return value # --- TODO: Remove legacy blocks used in migrations only class LinkBlock(StructBlock): pass