-
Tomáš Valenta authoredTomáš Valenta authored
blocks.py 9.23 KiB
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