Select Git revision
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"