Skip to content
Snippets Groups Projects
Commit bfa54438 authored by Tomáš Hozman's avatar Tomáš Hozman
Browse files

added crossroad

parent 7dde2336
No related branches found
No related tags found
3 merge requests!678Release,!677Added crossroads section, program links, only show base tweets, style changes,!676Added crossroads section, program links
Pipeline #10744 passed
......@@ -15,7 +15,12 @@ from wagtail.core.blocks import (
)
from wagtail.images.blocks import ImageChooserBlock
from shared.blocks import ButtonBlock, ProgramItemBlock
from shared.blocks import (
ButtonBlock,
CardLinkBlockMixin,
CardLinkWithHeadlineBlockMixin,
ProgramItemBlock,
)
class AddressBlock(StructBlock):
......@@ -93,11 +98,7 @@ class CandidateListBlock(StructBlock):
label = "List kanditátů"
class CardLinkBlock(StructBlock):
image = ImageChooserBlock(label="Obrázek")
title = CharBlock(label="Titulek", required=True)
text = RichTextBlock(label="Krátký text pod nadpisem", required=False)
class CardLinkBlock(CardLinkBlockMixin):
page = PageChooserBlock(
label="Stránka",
page_type=[
......@@ -117,39 +118,20 @@ class CardLinkBlock(StructBlock):
],
required=False,
)
link = URLBlock(label="Odkaz", required=False)
class Meta:
template = "district/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)
class CardLinkWithHeadlineBlock(CardLinkWithHeadlineBlockMixin):
card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
class Meta:
template = "district/blocks/card_link_with_headline_block.html"
icon = "link"
label = "Karta odkazu s nadpisem"
label = "Karty odkazů s nadpisem"
class PersonCustomPositionBlock(StructBlock):
......
......@@ -11,6 +11,11 @@ from wagtail.core.blocks import (
from wagtail.documents.blocks import DocumentChooserBlock
from wagtail.images.blocks import ImageChooserBlock
from shared.blocks import (
CardLinkBlockMixin,
CardLinkWithHeadlineBlockMixin,
)
class CTAMixin(StructBlock):
button_link = URLBlock(label="Odkaz tlačítka")
......@@ -257,4 +262,34 @@ class TwoTextColumnBlock(StructBlock):
label = "Text ve dvou sloupcích"
class CardLinkBlock(CardLinkBlockMixin):
page = PageChooserBlock(
label="Stránka",
page_type=[
"main.MainArticlesPage",
"main.MainProgramPage",
"main.MainPeoplePage",
"main.MainPersonPage",
"main.MainSimplePage",
"main.MainContactPage",
"main.MainCrossroadPage",
],
required=False,
)
class Meta:
template = "main/blocks/card_link_block.html"
icon = "link"
label = "Karta odkazu"
class CardLinkWithHeadlineBlock(CardLinkWithHeadlineBlockMixin):
card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
class Meta:
template = "main/blocks/card_link_with_headline_block.html"
icon = "link"
label = "Karty odkazů s nadpisem"
# TwitterCarouselBlock
# Generated by Django 4.0.7 on 2022-12-18 18:48
from django.db import migrations, models
import django.db.models.deletion
import shared.models
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
import wagtailmetadata.models
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0069_log_entry_jsonfield'),
('wagtailimages', '0024_index_image_file_hash'),
('main', '0035_rename_contact_newcomers_mainhomepage_contact_newcomers_link_and_more'),
]
operations = [
migrations.CreateModel(
name='MainCrossroadPage',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
('headlined_cards_content', wagtail.fields.StreamField([('headlined_cards', wagtail.blocks.StructBlock([('headline', wagtail.blocks.CharBlock(label='Titulek bloku', required=False)), ('card_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty odkazu'))]))], blank=True, use_json_field=None, verbose_name='Karty rozcestníku s nadpisem')),
('cards_content', wagtail.fields.StreamField([('cards', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]))], blank=True, use_json_field=None, verbose_name='Karty rozcestníku')),
('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
],
options={
'verbose_name': 'Rozcestník s kartami',
},
bases=(shared.models.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
),
]
......@@ -780,3 +780,49 @@ class MainContactPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin
class Meta:
verbose_name = "Kontakty"
class MainCrossroadPage(
ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page
):
### FIELDS
headlined_cards_content = StreamField(
[(("headlined_cards"), blocks.CardLinkWithHeadlineBlock())],
verbose_name="Karty rozcestníku s nadpisem",
blank=True,
)
cards_content = StreamField(
[("cards", blocks.CardLinkBlock())],
verbose_name="Karty rozcestníku",
blank=True,
)
### PANELS
content_panels = Page.content_panels + [
FieldPanel("headlined_cards_content"),
FieldPanel("cards_content"),
]
promote_panels = make_promote_panels()
settings_panels = []
### RELATIONS
parent_page_types = ["main.MainHomePage"]
subpage_types = [
"main.MainArticlesPage",
"main.MainProgramPage",
"main.MainPeoplePage",
"main.MainPersonPage",
"main.MainSimplePage",
"main.MainContactPage",
"main.MainCrossroadPage",
]
### OTHERS
class Meta:
verbose_name = "Rozcestník s kartami"
This diff is collapsed.
{% load wagtailcore_tags wagtailimages_tags %}
{% image self.image width-356 as img %}
{% firstof self.page.url self.link as target_url %}
<article class="card">
<a href="{{ target_url }}">
<img
src="{{ img.url }}"
alt="{{ self.page.title }}"
class="w-full h-48 object-cover"
>
</a>
<div class="p-4">
<h2 class="mb-2 text-xl font-bold">
<a href="{{ target_url }}">
{{ self.title }}
</a>
</h1>
<div class="font-light text-sm break-words">
{{ self.text | default_if_none:'' | richtext }}
</div>
</div>
</article>
{% load wagtailcore_tags %}
<div class="mb-8">
{% if self.headline %}
<h2 class="head-4xl mt-5 mb-5">{{ self.headline }}</h2>
{% endif %}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{% for card_block in self.card_items %}
{% include_block card_block %}
{% endfor %}
</div>
</div>
{% extends "main/base.html" %}
{% load wagtailcore_tags %}
{% block content %}
{% include 'main/includes/layout/simple_page_header.html' %}
<main role="main" class="mb-10 xl:mb-32">
<div class="grid-container mb-2 lg:mb-12">
<div class="grid-full">
{% for headlined_card_block in page.headlined_cards_content %}
{% include_block headlined_card_block %}
{% endfor %}
{% if page.cards_content|length != 0 %}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{% for card_block in page.cards_content %}
{% include_block card_block %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</main>
{% endblock %}
......@@ -607,6 +607,56 @@ class ImageBannerBlock(blocks.StructBlock):
template = "styleguide/2.3.x/blocks/image_banner_block.html"
class CardLinkBlockMixin(blocks.StructBlock):
"""
Shared mixin for cards, which vary in templates and the types of pages
they're allowed to link to.
"""
image = ImageChooserBlock(label="Obrázek")
title = blocks.CharBlock(label="Titulek", required=True)
text = blocks.RichTextBlock(label="Krátký text pod nadpisem", required=False)
page = blocks.PageChooserBlock(
label="Stránka",
page_type=[],
required=False,
)
link = blocks.URLBlock(label="Odkaz", required=False)
class Meta:
# template = ""
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 CardLinkWithHeadlineBlockMixin(blocks.StructBlock):
headline = blocks.CharBlock(label="Titulek bloku", required=False)
card_items = blocks.ListBlock(CardLinkBlockMixin(), label="Karty odkazu")
class Meta:
# template = ""
icon = "link"
label = "Karty odkazů s nadpisem"
DEFAULT_CONTENT_BLOCKS = [
(
"text",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment