from django.utils.text import slugify from wagtail.core.blocks import ( CharBlock, ListBlock, PageChooserBlock, RichTextBlock, StructBlock, TextBlock, URLBlock, ) from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.blocks import ImageChooserBlock class CTAMixin(StructBlock): button_link = URLBlock(label="Odkaz tlačítka") button_text = CharBlock(label="Text tlačítka") class Meta: icon = "doc-empty" label = "Výzva s odkazem" template = "main/blocks/article_quote_block.html" 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(CTAMixin, StructBlock): image = ImageChooserBlock(label="Hlavní obrázek jednoho slidu carouselu") line_1 = TextBlock(label="První řádek") line_2 = TextBlock(label="Druhý řádek") class Meta: icon = "form" label = "Stránka carouselu" class HomePageCarouselBlock(StructBlock): slides = ListBlock(HomePageCarouseSlideBlock, label="Obrázky s nadpisy - carouselu") class Meta: template = "main/blocks/homepage_carousel_block.html" icon = "folder-open-1" label = "Carousel s obrázky" class NewsBlock(StructBlock): title = CharBlock( label="Titulek", help_text="Nejnovější články se načtou automaticky", ) image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/news_block.html" icon = "doc-full-inverse" label = "Novinky" 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 = CharBlock(label="Hlavní titulek") list = ListBlock(BoxBlock, label="Boxíky") class Meta: template = "main/blocks/people_overview_block.html" icon = "group" label = "Skupina osob" class ProgramBlock(StructBlock): icon = ImageChooserBlock(label="Ikona") title = CharBlock(label="Titulek článku programu") text = TextBlock(label="Obsah") class Meta: icon = "date" label = "Program" class ProgramGroupBlock(StructBlock): title = CharBlock(label="Titulek části programu") slug = CharBlock( label="Slug části programu", required=False, help_text="Není třeba vyplňovat, bude automaticky vyplněno", ) 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 RegionsBlock(StructBlock): title = CharBlock( label="Titulek", help_text="Články pro regiony se načtou automaticky", ) image = ImageChooserBlock(label="Obrázek pozadí", required=False) class Meta: template = "main/blocks/regions_block.html" icon = "view" label = "Články pro regiony" class TweetsBlock(StructBlock): title = CharBlock( label="Titulek", help_text="Tweety budou načteny pro všechny profily uvedené v nastavení webu automaticky", ) class Meta: template = "main/blocks/twitter_block.html" icon = "openquote" label = "Tweety" class PersonContactBlock(StructBlock): position = CharBlock(label="Název pozice", required=False) # email, phone? person = PageChooserBlock( label="Osoba", page_type=["main.MainPersonPage"], ) class Meta: icon = "user" label = "Osoba s volitelnou pozicí" class PersonContactBoxBlock(CTAMixin, StructBlock): title = CharBlock(label="Titulek") image = ImageChooserBlock(label="Ikona") subtitle = CharBlock(label="Podtitulek") class Meta: icon = "mail" label = "Kontakty" # Footer class LinkBlock(StructBlock): text = CharBlock( label="Titulek odkazu (text, který se zobrazí místo dlouhého odkazu)" ) link = URLBlock(label="Odkaz") class Meta: icon = "link" label = "Odkaz" class OtherLinksBlock(StructBlock): title = CharBlock(label="Titulek") list = ListBlock(LinkBlock, label="Seznam odkazů s titulkem") class Meta: icon = "link" label = "Ostatní odkazy" template = "main/blocks/article_quote_block.html" 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" # 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/blocks/article_quote_block.html" class ArticleImageBlock(StructBlock): image = ImageChooserBlock(label="Obrázek") href = URLBlock(label="Odkaz k textu") text = CharBlock(label="Text") class Meta: icon = "image" label = "Obrázek s textem a odkazem" template = "main/blocks/article_image_block.html" class ArticleDownloadBlock(StructBlock): file = DocumentChooserBlock(label="Stáhnutelný soubor") class Meta: icon = "user" label = "Blok stáhnutelného dokumentu" template = "main/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 = "text" label = "Text ve dvou sloupcích" # TwitterCarouselBlock