from django.template.loader import render_to_string from wagtail.blocks import ( CharBlock, ChoiceBlock, ListBlock, PageChooserBlock, StructBlock, URLBlock, ) from wagtail.contrib.table_block.blocks import TableBlock as ContribTableBlock class AlignedTableBlock(StructBlock): alignment = ChoiceBlock( choices=[ ("left", "Vlevo"), ("center", "Vprostřed"), ("right", "Vpravo"), ("full", "Celá šířka obrazovky"), ], default="left", label="Zarovnání", ) table = ContribTableBlock(label="Tabulka") def render(self, value, context=None): template = getattr(self.meta, "template", None) if template and value: value = dict(value) table_header = ( value["table"]["data"][0] if value["table"].get("data", None) and len(value["table"]["data"]) > 0 and value["table"].get("first_row_is_table_header", False) else None ) new_context = dict(context) new_context.update( { "table_header": table_header, "table": value["table"], "alignment": value["alignment"], } ) if value["table"].get("first_row_is_table_header", False): new_context["table"]["data"] = new_context["table"]["data"][1:] return render_to_string(template, new_context) else: return self.render_basic(value or "", context=context) class Meta: icon = "table" label = "Tabulka s upravitelným zarovnáním" 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 PersonContactBlock(StructBlock): position = CharBlock(label="Název pozice", required=False) person = PageChooserBlock( label="Osoba", page_type=["uniweb.UniwebPersonPage"], ) class Meta: icon = "user" label = "Osoba s volitelnou pozicí" class PeopleGroupListBlock(StructBlock): group_title = CharBlock(label="Titulek", required=True) person_list = ListBlock( PersonContactBlock(), label="List osob", ) class Meta: template = "uniweb/blocks/people_group_block.html" icon = "list-ul" label = "Skupina členů"