Files
neuf-www/dnscms/sponsors/models.py

63 lines
1.9 KiB
Python

from grapple.helpers import register_singular_query_field, register_streamfield_block
from grapple.models import GraphQLImage, GraphQLRichText, GraphQLStreamfield, GraphQLString
from wagtail import blocks
from wagtail.admin.panels import (
FieldPanel,
)
from wagtail.fields import RichTextField, StreamField
from wagtail.images.blocks import ImageChooserBlock
from wagtail.models import Page
from wagtail.search import index
from dnscms.blocks import BASE_BLOCKS
@register_streamfield_block
class SponsorBlock(blocks.StructBlock):
name = blocks.CharBlock(max_length=255, label="Navn")
logo = ImageChooserBlock(required=False, label="Logo")
website = blocks.URLBlock(required=False, label="Nettside")
text = blocks.RichTextBlock(
features=["bold", "italic", "link", "ul", "ol"], required=False, label="Beskrivelse"
)
graphql_fields = [
GraphQLString("name", required=False),
GraphQLImage("logo", required=False),
GraphQLString("website", required=False),
GraphQLString("text", required=False),
]
class Meta:
label = "Sponsor"
icon = "tag"
@register_singular_query_field("sponsorsPage")
class SponsorsPage(Page):
max_count = 1
subpage_types = []
lead = RichTextField(features=["italic", "link"], blank=True)
sponsors = StreamField(
[
("sponsor", SponsorBlock()),
],
blank=True,
)
body = StreamField(BASE_BLOCKS)
content_panels = Page.content_panels + [
FieldPanel("lead", heading="Ingress"),
FieldPanel("body", heading="Innhold"),
FieldPanel("sponsors", heading="Sponsorer"),
]
graphql_fields = [
GraphQLRichText("lead"),
GraphQLStreamfield("body"),
GraphQLStreamfield("sponsors"),
]
search_fields = Page.search_fields + [index.SearchField("body"), index.SearchField("sponsors")]