Select Git revision
stats_urls.py
blocks.py 8.09 KiB
from django.forms.utils import ErrorList
from wagtail.core.blocks import (
CharBlock,
IntegerBlock,
ListBlock,
PageChooserBlock,
StructBlock,
TextBlock,
URLBlock,
)
from wagtail.core.blocks.struct_block import StructBlockValidationError
from wagtail.images.blocks import ImageChooserBlock
class AddressBlock(StructBlock):
title = CharBlock(label="Titulek", required=True)
map_image = ImageChooserBlock(label="Obrázek mapy", required=False)
map_link = URLBlock(label="Odkaz na detail mapy", required=False)
address = TextBlock(label="Adresa", required=True)
address_info = TextBlock(label="Info k adrese", required=False)
class Meta:
template = "region/blocks/address_block.html"
icon = "home"
label = "Adresa"
class CallToActionButtonBlock(StructBlock):
button_link = URLBlock(label="Odkaz", max_length=64)
button_text = CharBlock(label="Text")
class Meta:
template = "region/blocks/call_to_action_button_block.html"
icon = "link"
label = "Call-to-action tlačítko"
class CandidateListBlock(StructBlock):
title = CharBlock(label="Titulek", required=True)
call_to_action_text = CharBlock(label="Text 'call-to-action' baneru")
call_to_action_link = URLBlock(
label="Odkaz 'call-to-action' baneru", required=False
)
call_to_action_button_text = CharBlock(
label="Text tlačítka 'call-to-action' baneru", max_length=24, required=False
)
candidate_list_big_count = IntegerBlock(
label="Počet kanditátů s velkým náhledem", default=7
)
candidate_list_shown_count = IntegerBlock(
label="Počet zobrazených kandidátů při načtení stránky (včetně velkých náhledů)",
default=16,
)
candidate_list = ListBlock(
PageChooserBlock(label="Osoba", page_type=["region.RegionPersonPage"]),
label="Kandidáti",
)
class Meta:
template = "region/blocks/candidate_list_block.html"
icon = "list-ol"
label = "List kanditátů"
class CardLinkBlock(StructBlock):
image = ImageChooserBlock(label="Obrázek")
title = CharBlock(label="Titulek", required=True)
page = PageChooserBlock(
label="Stránka",
page_type=[
"region.RegionAfterElectionPage",
"region.RegionArticlePage",
"region.RegionArticlesPage",
"region.RegionCenterPage",
"region.RegionContactPage",
"region.RegionCrossroadPage",
"region.RegionCustomPage",
"region.RegionElectionPage",
"region.RegionElectionPointPage",
"region.RegionPeoplePage",
"region.RegionPersonPage",
"region.RegionProgramPage",
"region.RegionTagsPage",
],
required=False,
)
link = URLBlock(label="Odkaz", required=False)
class Meta:
template = "region/blocks/card_link_block.html"
icon = "link"
label = "Karta odkazu"
def clean(self, value):
errors = {}
if value["page"] and value["link"]:
errors["page"] = ErrorList(
["Stránka nemůže být vybrána současně s odkazem."]
)
errors["link"] = ErrorList(
["Odkaz nemůže být vybrán současně se stránkou."]
)
elif not value["page"] and not value["link"]:
errors["page"] = ErrorList(["Zvolte stránku nebo vyplňte odkaz."])
errors["link"] = ErrorList(["Vyplňte odkaz nebo zvolte stránku."])
if errors:
raise StructBlockValidationError(errors)
return super().clean(value)
class CardLinkWithHeadlineBlock(StructBlock):
headline = CharBlock(label="Titulek bloku", required=False)
card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
class Meta:
template = "region/blocks/card_link_with_headline_block.html"
icon = "link"
label = "Karta odkazu s nadpisem"
class CenterContactBlock(StructBlock):
title = CharBlock(label="Titulek", required=True)
contact_list = ListBlock(
PageChooserBlock(label="Osoba", page_type=["region.RegionPersonPage"]),
label="List kontaktů",
)
class Meta:
template = "region/blocks/contact_block.html"
icon = "mail"
label = "Kontakt"
class ContactItemBlock(StructBlock):
name = CharBlock(label="Role")
person = PageChooserBlock(
label="Osoba",
page_type=["region.RegionPersonPage"],
)
class Meta:
icon = "mail"
label = "Kontakt"
class ElectionHeaderBlock(StructBlock):
flag_text = CharBlock(label="Text ve 'vlajce'", max_length=32, required=False)
motto = CharBlock(label="Motto (podnadpis)", max_length=128, required=False)
image = ImageChooserBlock(label="Obrázek (kandidátů)", required=False)
background_image = ImageChooserBlock(label="Obrázek na pozadí", required=True)
button_list = ListBlock(
CallToActionButtonBlock(),
label="Call to action tlačítka",
)
class Meta:
template = "region/blocks/election_header_block.html"
icon = "mail"
label = "Header pro volební rozcestník"
class HomepageHeaderBlock(StructBlock):
title = CharBlock(label="Titulek", required=False, help_text="Nap")
image = ImageChooserBlock()
button_text = CharBlock(label="Text tlačítka", required=False)
button_link = URLBlock(label="Odkaz tlačítka", required=False)
class Meta:
template = "region/blocks/homepage_header_block.html"
icon = "image"
label = "Nadpis s obrázkem a tlačítky"
class HomepageSimpleHeaderBlock(StructBlock):
title = CharBlock(label="Titulek", required=True)
subtitle = CharBlock(label="Podtitulek", required=False)
image = ImageChooserBlock()
class Meta:
template = "region/blocks/homepage_simple_header_block.html"
icon = "image"
label = "Nadpis s obrázkem v pozadí"
class PeopleGroupListBlock(StructBlock):
group_title = CharBlock(label="Titulek", required=True)
person_list = ListBlock(
PageChooserBlock(
label="Osoba",
page_type=["district.DistrictPersonPage", "region.RegionPersonPage"],
),
label="List osob",
)
class Meta:
template = "region/blocks/people_group_block.html"
icon = "list-ul"
label = "Skupina členů"
class PersonUrlBlock(StructBlock):
title = CharBlock(label="Název", required=True)
url = URLBlock(label="URL", required=True)
custom_icon = CharBlock(
label="Vlastní ikonka ze styleguide",
required=False,
help_text="Pro vlastní ikonku zadejde název ikonky z https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons (bez tečky), např. 'ico--beer'",
)
class ProgramItemBlock(StructBlock):
title = CharBlock(label="Název", required=True)
completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
class StaticProgramBlock(StructBlock):
headline = CharBlock(label="Titulek bloku", required=True)
perex = TextBlock(label="Krátký text pod nadpisem", required=True)
person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
completion_percentage = IntegerBlock(label="Procento dokončení", required=True)
program_items = ListBlock(ProgramItemBlock())
# program_items = TableBlock(label="Tabulka plnění programu", required=True)
person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
class Meta:
template = "region/blocks/static_program_block.html"
icon = "list-ul"
label = "Blok programu"
class RedmineProgramBlock(StructBlock):
headline = CharBlock(label="Titulek bloku", required=True)
perex = TextBlock(label="Krátký text pod nadpisem", required=True)
person = PageChooserBlock(label="Garant", page_type=["region.RegionPersonPage"])
redmine_issue = IntegerBlock(label="Číslo Redmine issue", required=True)
class Meta:
template = "region/blocks/redmine_program_block.html"
icon = "site"
label = "Blok programu stahovaný z Redmine"