Forked from
TO / Maják
1796 commits behind the upstream repository.
-
Dan Nepejchal authoredDan Nepejchal authored
models.py 4.86 KiB
from django.db import models
from django.utils.translation import gettext_lazy
from wagtail.admin.edit_handlers import (
FieldPanel,
HelpPanel,
MultiFieldPanel,
StreamFieldPanel,
)
from wagtail.core import blocks
from wagtail.core.fields import StreamField
from wagtail.core.models import Page
from wagtail.images.blocks import ImageChooserBlock
from wagtail.images.edit_handlers import ImageChooserPanel
from wagtailmetadata.models import MetadataPageMixin
from tuning import help
SUPPORT_CHOICES = ((1, "Pro"), (0, "Proti"), (-1, "Nevíme"))
RICH_TEXT_FEATURES = [
"h2",
"h3",
"h4",
"h5",
"bold",
"italic",
"ol",
"ul",
"hr",
"link",
"document-link",
"image",
"superscript",
"subscript",
"strikethrough",
"blockquote",
]
class MenuItemBlock(blocks.StructBlock):
name = blocks.CharBlock(label="název")
page = blocks.PageChooserBlock(
label="stránka",
page_type=["regulace_konopi.RegkonHomePage", "regulace_konopi.RegkonSubPage"],
)
class Meta:
label = "stránka"
class MepBlock(blocks.StructBlock):
name = blocks.CharBlock(label="jméno")
approved = blocks.ChoiceBlock(choices=SUPPORT_CHOICES, label="hlasoval")
class Meta:
label = "Poslanec"
class PartyBlock(blocks.StructBlock):
name = blocks.CharBlock(label="název")
mep = blocks.ListBlock(MepBlock())
class Meta:
label = "Politická strana"
class FaqBlock(blocks.StructBlock):
question = blocks.TextBlock()
answer = blocks.RichTextBlock()
class RegkonHomePage(MetadataPageMixin, Page):
### FIELDS
content = StreamField(
[
("title", blocks.CharBlock(label="nadpis", icon="title")),
("text", blocks.RichTextBlock(label="text", features=RICH_TEXT_FEATURES)),
(
"carousel",
blocks.ListBlock(
ImageChooserBlock(label="obrázek"), label="carousel", icon="image"
),
),
],
verbose_name="obsah stránky",
blank=True,
)
# settings
matomo_id = models.IntegerField(
"Matomo ID pro sledování návštěvnosti", blank=True, null=True
)
top_menu = StreamField(
[("item", MenuItemBlock())],
verbose_name="horní menu",
blank=True,
)
### PANELS
content_panels = Page.content_panels + [
StreamFieldPanel("content"),
]
promote_panels = [
MultiFieldPanel(
[
FieldPanel("seo_title"),
FieldPanel("search_description"),
ImageChooserPanel("search_image"),
HelpPanel(help.build(help.IMPORTANT_TITLE)),
],
gettext_lazy("Common page configuration"),
),
]
settings_panels = [
FieldPanel("matomo_id"),
StreamFieldPanel("top_menu"),
]
### RELATIONS
subpage_types = [
"regulace_konopi.RegkonSubPage",
]
### OTHERS
class Meta:
verbose_name = "Regulace konpí"
@property
def root_page(self):
return self
class RegkonSubPage(Page, MetadataPageMixin):
### FIELDS
content = StreamField(
[
("title", blocks.CharBlock(label="nadpis", icon="title")),
("text", blocks.RichTextBlock(label="text", features=RICH_TEXT_FEATURES)),
(
"carousel",
blocks.ListBlock(
ImageChooserBlock(label="obrázek"), label="carousel", icon="image"
),
),
(
"FAQ",
blocks.ListBlock(
FaqBlock(template="regulace_konopi/blocks/faq.html"), label="faq"
),
),
("meps", PartyBlock(template="regulace_konopi/blocks/party.html")),
],
verbose_name="obsah stránky",
blank=True,
)
### PANELS
promote_panels = [
MultiFieldPanel(
[
FieldPanel("slug"),
FieldPanel("seo_title"),
FieldPanel("search_description"),
ImageChooserPanel("search_image"),
HelpPanel(help.build(help.NO_SEO_TITLE, help.NO_SEARCH_IMAGE)),
],
gettext_lazy("Common page configuration"),
),
]
content_panels = Page.content_panels + [
StreamFieldPanel("content"),
]
settings_panels = []
### RELATIONS
parent_page_types = ["regulace_konopi.RegkonHomePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "Podstránka"
@property
def root_page(self):
if not hasattr(self, "_root_page"):
self._root_page = self.get_ancestors().type(RegkonHomePage).specific().get()
return self._root_page
def get_meta_image(self):
return self.search_image or self.root_page.get_meta_image()