add a button link component
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,3 +1,4 @@
|
||||
from django.core.exceptions import ValidationError
|
||||
from grapple.helpers import register_streamfield_block
|
||||
from grapple.models import (
|
||||
GraphQLImage,
|
||||
@@ -7,6 +8,7 @@ from grapple.models import (
|
||||
GraphQLString,
|
||||
)
|
||||
from wagtail import blocks
|
||||
from wagtail.blocks import StructBlockValidationError
|
||||
from wagtail.embeds.blocks import EmbedBlock
|
||||
from wagtail.images.blocks import ImageChooserBlock
|
||||
|
||||
@@ -281,6 +283,51 @@ class ScheduleBlock(blocks.StructBlock):
|
||||
label = "Timeplan"
|
||||
|
||||
|
||||
@register_streamfield_block
|
||||
class ButtonLinkBlock(blocks.StructBlock):
|
||||
text = blocks.CharBlock(
|
||||
max_length=64,
|
||||
required=True,
|
||||
label="Tekst",
|
||||
help_text="Teksten som vises på knappen.",
|
||||
)
|
||||
page = blocks.PageChooserBlock(
|
||||
required=False,
|
||||
label="Intern side",
|
||||
help_text="Velg en underside på denne nettsiden.",
|
||||
)
|
||||
anchor = blocks.CharBlock(
|
||||
max_length=64,
|
||||
required=False,
|
||||
label="Anker",
|
||||
help_text="Anker på siden, uten «#» (valgfritt)",
|
||||
)
|
||||
external_url = blocks.URLBlock(
|
||||
required=False,
|
||||
label="Ekstern lenke",
|
||||
)
|
||||
|
||||
graphql_fields = [
|
||||
GraphQLString("text", required=True),
|
||||
GraphQLPage("page"),
|
||||
GraphQLString("anchor"),
|
||||
GraphQLString("external_url"),
|
||||
]
|
||||
|
||||
def clean(self, value):
|
||||
result = super().clean(value)
|
||||
if value.get("page") and value.get("external_url"):
|
||||
error = ValidationError(
|
||||
"Velg enten en intern side eller en ekstern lenke, ikke begge."
|
||||
)
|
||||
raise StructBlockValidationError(block_errors={"page": error, "external_url": error})
|
||||
return result
|
||||
|
||||
class Meta:
|
||||
icon = "link"
|
||||
label = "Knapp med lenke"
|
||||
|
||||
|
||||
BASE_BLOCKS = [
|
||||
("paragraph", blocks.RichTextBlock(label="Rik tekst")),
|
||||
("image", ImageWithTextBlock()),
|
||||
@@ -291,6 +338,7 @@ BASE_BLOCKS = [
|
||||
("accordion", AccordionBlock()),
|
||||
("fact_box", FactBoxBlock()),
|
||||
("schedule", ScheduleBlock()),
|
||||
("button_link", ButtonLinkBlock()),
|
||||
("embed", EmbedBlock()),
|
||||
("raw_html", blocks.RawHTMLBlock()),
|
||||
]
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user