Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • to/majak
  • b1242/majak
2 results
Select Git revision
Show changes
Showing
with 2538 additions and 0 deletions
import wagtail.admin.rich_text.editors.draftail.features as draftail_features
from django.utils.html import escape
from wagtail import hooks
from wagtail.admin.rich_text.converters.html_to_contentstate import (
InlineStyleElementHandler,
)
from wagtail.rich_text import LinkHandler
from donate.constants import font_colors
class ExternalLinkHandler(LinkHandler):
identifier = "external"
@classmethod
def expand_db_attributes(cls, attrs):
href = attrs["href"]
return '<a href="%s" target="_blank" rel="noopener nofollower">' % escape(href)
@hooks.register("register_rich_text_features")
def register_external_link(features):
features.register_link_type(ExternalLinkHandler)
@hooks.register("register_rich_text_features")
def register_font_color_feature(features):
for color_name, color_value in font_colors:
feature_name = "font_color_" + color_value
type_ = "FONT_COLOR_" + color_value
tag = f"span{color_name.lower()}" # This must be a "custom" HTML element in order for wagtail to correctly save it :-)
control = {
"type": type_,
"label": color_name,
"description": color_name + " text color",
"style": {"color": color_value},
}
features.register_editor_plugin(
"draftail", feature_name, draftail_features.InlineStyleFeature(control)
)
db_conversion = {
"from_database_format": {tag: InlineStyleElementHandler(type_)},
"to_database_format": {
"style_map": {
type_: {"element": tag, "props": {"style": "color: " + color_value}}
}
},
}
features.register_converter_rule("contentstate", feature_name, db_conversion)
from django.apps import AppConfig
class ElectionsConfig(AppConfig):
name = "elections"
from wagtail.blocks import (
CharBlock,
ListBlock,
PageChooserBlock,
StructBlock,
TextBlock,
URLBlock,
)
from wagtail.images.blocks import ImageChooserBlock
from shared.blocks import CandidateBlock as SharedCandidateBlockMixin
from shared.blocks import CandidateListBlock as SharedCandidateListBlockMixin
from shared.blocks import (
CandidateSecondaryListBlock as SharedCandidateSecondaryListBlockMixin,
)
from shared.blocks import SecondaryCandidateBlock as SharedSecondaryCandidateBlockMixin
class ElectionsCarouselBlock(StructBlock):
desktop_image = ImageChooserBlock(
label="Obrázek na pozadí (desktop)",
help_text="Pokud není vybráno video, ukáže se na desktopu.",
)
mobile_image = ImageChooserBlock(
label="Obrázek (mobil)",
help_text="Pokud je vybrán, ukáže se místo videa na mobilu.",
required=False,
)
video_url = URLBlock(
label="URL videa",
help_text="Pokud je vybráno, ukáže se na desktopech s povoleným autoplayem místo obrázku.",
required=False,
)
mobile_line_1 = TextBlock(label="První mobilní řádek")
mobile_line_2 = TextBlock(label="Druhý mobilní řádek")
class Meta:
template = "styleguide2/includes/molecules/menus/elections/carousel.html"
icon = "form"
label = "Carousel"
class CandidateBlock(SharedCandidateBlockMixin):
page = PageChooserBlock(
label="Stránka", page_type=["elections.ElectionsCandidatePage"]
)
class SecondaryCandidateBlock(SharedSecondaryCandidateBlockMixin):
page = PageChooserBlock(
label="Stránka", page_type=["elections.ElectionsCandidatePage"]
)
class CandidateListBlock(SharedCandidateListBlockMixin):
candidates = ListBlock(
CandidateBlock(),
required=False,
label=" ", # Hacky way to show no label
)
class CandidateSecondaryListBlock(SharedCandidateSecondaryListBlockMixin):
candidates = ListBlock(
SecondaryCandidateBlock(),
min_num=0,
default=[],
label="Kandidáti",
)
class Meta:
template = "styleguide2/includes/organisms/candidates/elections/candidate_secondary_list.html"
class CalendarBlock(StructBlock):
heading = CharBlock(label="Nadpis")
class Meta:
template = "styleguide2/includes/organisms/main_section/elections/calendar.html"
icon = "calendar"
label = "Kalendář"
class PersonFaqAnswerBlock(StructBlock):
question = CharBlock(label="Otázka")
answer = TextBlock(label="Odpověď")
class Meta:
icon = "form"
label = "Odpověď kandidáta na otázku"
class PersonFaqAnswersBlock(StructBlock):
section_name = CharBlock(
label="Název sekce", help_text="Např. 'Otevřenost a transparentnost'"
)
topic = CharBlock(label="Téma", help_text="Např. 'téma Markéty Gregorové'")
person_page = PageChooserBlock(
label="Stránka kandidáta", page_type=["elections.ElectionsCandidatePage"]
)
image = ImageChooserBlock(
label="Obrázek",
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
required=False,
)
questions = ListBlock(PersonFaqAnswerBlock(label="Odpověď"), label="Otázky")
class Meta:
icon = "form"
label = "Odpovědi kandidáta na otázky"
template = "styleguide2/includes/organisms/faq/faq_answer.html"
import os
import tempfile
from shared.forms import ArticlesPageForm as SharedArticlesPageForm
from shared.forms import JekyllImportForm as SharedJekyllImportForm
from .tasks import import_jekyll_articles
class JekyllImportForm(SharedJekyllImportForm):
def handle_import(self):
lock_file_name = os.path.join(
tempfile.gettempdir(), f".{self.instance.id}.articles-import-lock"
)
if os.path.isfile(lock_file_name):
return
open(lock_file_name, "w").close()
import_jekyll_articles.delay(
article_parent_page_id=self.instance.id,
collection_id=self.cleaned_data["collection"].id,
url=self.cleaned_data["jekyll_repo_url"],
dry_run=self.cleaned_data["dry_run"],
use_git=True,
)
class ElectionsArticlesPageForm(SharedArticlesPageForm, JekyllImportForm):
def __init__(self, *args, **kwargs):
from shared.models import SharedTag
from .models import ElectionsArticleTag
super().__init__(*args, **kwargs)
self.fields["shared_tags"].queryset = SharedTag.objects.order_by("name")
if self.instance.pk:
valid_tag_ids = (
ElectionsArticleTag.objects.filter(
content_object__in=self.instance.get_children().specific()
)
.values_list("tag_id", flat=True)
.distinct()
)
valid_shared_tag_ids = (
self.instance.shared_tags.values_list("id", flat=True).distinct().all()
)
self.fields["displayed_tags"].queryset = (
ElectionsArticleTag.objects.filter(id__in=valid_tag_ids)
.order_by("tag__name")
.distinct("tag__name")
)
self.fields["displayed_shared_tags"].queryset = (
SharedTag.objects.filter(id__in=valid_shared_tag_ids)
.order_by("name")
.distinct("name")
)
else:
self.fields["displayed_tags"].queryset = ElectionsArticleTag.objects.filter(
id=-1
)
self.fields["displayed_shared_tags"].queryset = SharedTag.objects.filter(
id=-1
)
# Generated by Django 4.1.10 on 2024-01-06 16:43
import django.db.models.deletion
import django.utils.timezone
import modelcluster.fields
import wagtail.blocks
import wagtail.contrib.routable_page.models
import wagtail.documents.blocks
import wagtail.fields
import wagtail.images.blocks
import wagtailmetadata.models
from django.db import migrations, models
import shared.blocks
import shared.models.legacy
class Migration(migrations.Migration):
initial = True
dependencies = [
("main", "0065_alter_mainarticlepage_content_and_more"),
("wagtailimages", "0025_alter_image_file_alter_rendition_file"),
("shared", "0003_initial"),
("calendar_utils", "0004_auto_20220505_1228"),
("taggit", "0005_auto_20220424_2025"),
("wagtailcore", "0083_workflowcontenttype"),
]
operations = [
migrations.CreateModel(
name="ElectionsArticlePage",
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",
),
),
(
"date",
models.DateField(
default=django.utils.timezone.now, verbose_name="datum"
),
),
("perex", models.TextField(verbose_name="perex")),
(
"author",
models.CharField(
blank=True, max_length=250, null=True, verbose_name="autor"
),
),
("shared_type", models.TextField(blank=True, null=True)),
(
"content",
wagtail.fields.StreamField(
[
(
"text",
wagtail.blocks.RichTextBlock(
template="styleguide2/includes/atoms/text/prose_richtext.html"
),
),
(
"quote",
wagtail.blocks.StructBlock(
[
(
"quote",
wagtail.blocks.CharBlock(label="Citace"),
),
(
"autor_name",
wagtail.blocks.CharBlock(
label="Jméno autora"
),
),
]
),
),
(
"download",
wagtail.blocks.StructBlock(
[
(
"file",
wagtail.documents.blocks.DocumentChooserBlock(
label="Stáhnutelný soubor"
),
)
]
),
),
],
blank=True,
use_json_field=True,
verbose_name="Článek",
),
),
],
options={
"verbose_name": "Aktualita",
"abstract": False,
},
bases=(
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="ElectionsSearchPage",
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",
),
),
(
"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": "Vyhledávací stránka",
"abstract": False,
},
bases=(
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="ElectionsHomePage",
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",
),
),
(
"title_suffix",
models.CharField(
blank=True,
help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice | Piráti', výsledný titulek bude 'Kontakt | MS Pardubice | Piráti'. Pokud příponu nevyplníte, použije se název webu.",
max_length=100,
null=True,
verbose_name="Přípona titulku stránky",
),
),
(
"important_item_name",
models.CharField(
blank=True,
help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.",
max_length=16,
null=True,
verbose_name="Jméno",
),
),
(
"important_item_url",
models.URLField(blank=True, null=True, verbose_name="Adresa"),
),
(
"menu",
wagtail.fields.StreamField(
[
(
"menu_item",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.",
label="Titulek",
required=True,
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka", required=False
),
),
(
"link",
wagtail.blocks.URLBlock(
label="Odkaz", required=False
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Položky",
),
),
(
"menu_button_name",
models.CharField(
max_length=16, verbose_name="Text na tlačítku pro zapojení"
),
),
(
"menu_button_content",
wagtail.fields.StreamField(
[
(
"navbar_menu_item",
wagtail.blocks.StructBlock(
[
(
"button_link",
wagtail.blocks.URLBlock(
label="Odkaz tlačítka"
),
),
(
"button_text",
wagtail.blocks.CharBlock(
label="Text tlačítka"
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Obsah menu pro zapojení se",
),
),
(
"footer_other_links",
wagtail.fields.StreamField(
[
(
"other_links",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(label="Titulek"),
),
(
"list",
wagtail.blocks.ListBlock(
shared.blocks.LinkBlock,
label="Seznam odkazů s titulkem",
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Odkazy v zápatí webu",
),
),
(
"footer_person_list",
wagtail.fields.StreamField(
[
(
"person",
wagtail.blocks.StructBlock(
[
(
"position",
wagtail.blocks.CharBlock(
label="Název pozice", required=False
),
),
(
"person",
wagtail.blocks.PageChooserBlock(
label="Osoba",
page_type=["main.MainPersonPage"],
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Osoby v zápatí webu",
),
),
(
"matomo_id",
models.IntegerField(
blank=True,
null=True,
verbose_name="Matomo ID pro sledování návštěvnosti",
),
),
(
"social_links",
wagtail.fields.StreamField(
[
(
"social_links",
wagtail.blocks.StructBlock(
[
(
"text",
wagtail.blocks.CharBlock(label="Název"),
),
(
"link",
wagtail.blocks.URLBlock(label="Odkaz"),
),
(
"icon",
wagtail.blocks.CharBlock(
help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku",
label="Ikona",
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Odkazy na sociální sítě",
),
),
(
"content",
wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek na pozadí"
),
)
]
),
),
(
"candidate",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
),
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
label="Odkaz na celou verzi programu"
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu"
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
(
"gdpr_and_cookies_page",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="main.mainsimplepage",
verbose_name="Stránka pro GDPR",
),
),
(
"important_item_page",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="+",
to="wagtailcore.page",
verbose_name="Stránka",
),
),
(
"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": "Volební web",
},
bases=(
wagtail.contrib.routable_page.models.RoutablePageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
shared.models.legacy.ArticlesMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="ElectionsCandidatesPage",
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",
),
),
(
"calendar_url",
models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
(
"calendar",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="calendar_utils.calendar",
),
),
(
"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": "Kandidáti",
},
bases=(
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="ElectionsCandidatePage",
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",
),
),
(
"calendar_url",
models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
(
"position",
models.CharField(
blank=True,
max_length=64,
null=True,
verbose_name="Pozice/povolání",
),
),
("perex", wagtail.fields.RichTextField()),
(
"email",
models.CharField(
blank=True, max_length=128, null=True, verbose_name="E-mail"
),
),
(
"phone",
models.CharField(
blank=True,
max_length=16,
null=True,
verbose_name="Telefonní kontakt",
),
),
(
"social_links",
wagtail.fields.StreamField(
[
(
"social_links",
wagtail.blocks.StructBlock(
[
(
"text",
wagtail.blocks.CharBlock(label="Název"),
),
(
"link",
wagtail.blocks.URLBlock(label="Odkaz"),
),
(
"icon",
wagtail.blocks.CharBlock(
help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku",
label="Ikona",
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Odkazy na sociální sítě",
),
),
(
"articles_heading",
models.CharField(
help_text='Např. "Aktuality Mikuláše Peksy".',
max_length=32,
verbose_name="Nadpis sekce s články",
),
),
(
"related_candidates",
wagtail.fields.StreamField(
[
(
"candidate",
wagtail.blocks.PageChooserBlock(
label="Detail kandidáta",
page_type=["elections.ElectionsCandidatePage"],
),
)
],
blank=True,
use_json_field=True,
verbose_name="Další kandidáti",
),
),
(
"calendar",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="calendar_utils.calendar",
),
),
(
"image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="+",
to="wagtailimages.image",
verbose_name="Obrázek",
),
),
(
"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": "Kandidát",
},
bases=(
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.CreateModel(
name="ElectionsArticleTag",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"content_object",
modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="elections_tagged_items",
to="elections.electionsarticlepage",
),
),
(
"tag",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="%(app_label)s_%(class)s_items",
to="taggit.tag",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="ElectionsArticlesPage",
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",
),
),
(
"last_import_log",
models.TextField(
blank=True,
null=True,
verbose_name="Výstup z posledního importu",
),
),
("perex", models.TextField()),
(
"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",
),
),
(
"shared_tags",
modelcluster.fields.ParentalManyToManyField(
blank=True,
help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.",
to="shared.sharedtag",
verbose_name="Výběr tagů pro články sdílené mezi sítěmi",
),
),
],
options={
"verbose_name": "Rozcestník článků",
"abstract": False,
},
bases=(
wagtail.contrib.routable_page.models.RoutablePageMixin,
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
shared.models.legacy.ArticlesMixin,
"wagtailcore.page",
models.Model,
),
),
migrations.AddField(
model_name="electionsarticlepage",
name="author_page",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="elections.electionscandidatepage",
verbose_name="Stránka autora (kandidáta)",
),
),
migrations.AddField(
model_name="electionsarticlepage",
name="image",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="wagtailimages.image",
verbose_name="obrázek",
),
),
migrations.AddField(
model_name="electionsarticlepage",
name="search_image",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
migrations.AddField(
model_name="electionsarticlepage",
name="shared_from",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="+",
to="wagtailcore.page",
),
),
]
# Generated by Django 4.1.10 on 2024-01-06 16:43
import modelcluster.contrib.taggit
from django.db import migrations
class Migration(migrations.Migration):
initial = True
dependencies = [
("taggit", "0005_auto_20220424_2025"),
("elections", "0001_initial"),
("shared", "0004_sharedtaggedelectionsarticle"),
]
operations = [
migrations.AddField(
model_name="electionsarticlepage",
name="shared_tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="shared.SharedTaggedElectionsArticle",
to="shared.SharedTag",
verbose_name="Tagy pro sdílení mezi weby",
),
),
migrations.AddField(
model_name="electionsarticlepage",
name="tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="elections.ElectionsArticleTag",
to="taggit.Tag",
verbose_name="Tags",
),
),
]
# Generated by Django 4.1.10 on 2024-01-08 12:25
import django.db.models.deletion
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
import wagtailmetadata.models
from django.db import migrations, models
import shared.models.legacy
class Migration(migrations.Migration):
dependencies = [
("calendar_utils", "0004_auto_20220505_1228"),
("wagtailcore", "0083_workflowcontenttype"),
("wagtailimages", "0025_alter_image_file_alter_rendition_file"),
("elections", "0002_initial"),
]
operations = [
migrations.CreateModel(
name="ElectionsFaqPage",
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",
),
),
(
"calendar_url",
models.URLField(
blank=True,
help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
null=True,
verbose_name="URL kalendáře ve formátu iCal",
),
),
(
"content",
wagtail.fields.StreamField(
[
(
"person_answers",
wagtail.blocks.StructBlock(
[
(
"topic",
wagtail.blocks.CharBlock(
help_text="Např. 'téma Markéty Gregorové'",
label="Téma",
),
),
(
"person",
wagtail.blocks.PageChooserBlock(
label="Stránka kandidáta",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"questions",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"question",
wagtail.blocks.CharBlock(
label="Otázka"
),
),
(
"answer",
wagtail.blocks.TextBlock(
label="Odpověď"
),
),
],
label="Odpověď",
),
label="Otázky",
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Obsah",
),
),
(
"calendar",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="calendar_utils.calendar",
),
),
(
"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={
"abstract": False,
},
bases=(
shared.models.main.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
]
# Generated by Django 4.1.10 on 2024-01-08 12:29
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0003_electionsfaqpage"),
]
operations = [
migrations.AlterModelOptions(
name="electionsfaqpage",
options={"verbose_name": "Otázky a odpovědi"},
),
]
# Generated by Django 4.1.10 on 2024-01-09 08:21
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("elections", "0004_alter_electionsfaqpage_options"),
]
operations = [
migrations.AddField(
model_name="electionsfaqpage",
name="all_topics_name",
field=models.CharField(
default="všechna témata",
help_text="např. 'všechna témata'",
max_length=32,
verbose_name="Nadpis štítku pro všechna témata",
),
preserve_default=False,
),
migrations.AlterField(
model_name="electionsfaqpage",
name="content",
field=wagtail.fields.StreamField(
[
(
"person_answers",
wagtail.blocks.StructBlock(
[
(
"section_name",
wagtail.blocks.CharBlock(
help_text="Např. 'Otevřenost a transparentnost'",
label="Název sekce",
),
),
(
"topic",
wagtail.blocks.CharBlock(
help_text="Např. 'téma Markéty Gregorové'",
label="Téma",
),
),
(
"person_page",
wagtail.blocks.PageChooserBlock(
label="Stránka kandidáta",
page_type=["elections.ElectionsCandidatePage"],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"questions",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"question",
wagtail.blocks.CharBlock(
label="Otázka"
),
),
(
"answer",
wagtail.blocks.TextBlock(
label="Odpověď"
),
),
],
label="Odpověď",
),
label="Otázky",
),
),
]
),
)
],
blank=True,
use_json_field=True,
verbose_name="Obsah",
),
),
]
# Generated by Django 4.1.10 on 2024-01-09 09:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0005_electionsfaqpage_all_topics_name_and_more"),
]
operations = [
migrations.RemoveField(
model_name="electionscandidatepage",
name="calendar",
),
migrations.RemoveField(
model_name="electionscandidatepage",
name="calendar_url",
),
migrations.RemoveField(
model_name="electionscandidatespage",
name="calendar",
),
migrations.RemoveField(
model_name="electionscandidatespage",
name="calendar_url",
),
migrations.RemoveField(
model_name="electionsfaqpage",
name="calendar",
),
migrations.RemoveField(
model_name="electionsfaqpage",
name="calendar_url",
),
]
# Generated by Django 4.1.10 on 2024-01-17 11:38
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0006_remove_electionscandidatepage_calendar_and_more"),
]
operations = [
migrations.AlterField(
model_name="electionshomepage",
name="content",
field=wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek na pozadí"
),
)
]
),
),
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"secondary_candidates",
wagtail.blocks.StructBlock(
[
("heading", wagtail.blocks.CharBlock(label="Nadpis")),
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.CharBlock(
label="Číslo"
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
]
),
label="Kandidáti",
),
),
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
),
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
label="Odkaz na celou verzi programu"
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu"
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 08:36
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0007_alter_electionshomepage_content"),
]
operations = [
migrations.AlterField(
model_name="electionshomepage",
name="content",
field=wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek na pozadí"
),
)
]
),
),
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"secondary_candidates",
wagtail.blocks.StructBlock(
[
("heading", wagtail.blocks.CharBlock(label="Nadpis")),
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.CharBlock(
label="Číslo"
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
]
),
label="Kandidáti",
),
),
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
),
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
label="Odkaz na celou verzi programu",
required=False,
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu",
required=False,
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 09:15
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0008_alter_electionshomepage_content"),
]
operations = [
migrations.RemoveField(
model_name="electionscandidatepage",
name="related_candidates",
),
migrations.AlterField(
model_name="electionshomepage",
name="content",
field=wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek na pozadí"
),
)
]
),
),
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"secondary_candidates",
wagtail.blocks.StructBlock(
[
("heading", wagtail.blocks.CharBlock(label="Nadpis")),
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.CharBlock(
label="Číslo"
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
]
),
label="Kandidáti",
),
),
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
),
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
help_text="Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.",
label="Odkaz na celou verzi programu",
required=False,
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu",
required=False,
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 10:09
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0009_remove_electionscandidatepage_related_candidates_and_more"),
]
operations = [
migrations.AlterField(
model_name="electionshomepage",
name="content",
field=wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
label="Obrázek na pozadí"
),
)
]
),
),
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"secondary_candidates",
wagtail.blocks.StructBlock(
[
("heading", wagtail.blocks.CharBlock(label="Nadpis")),
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.CharBlock(
label="Číslo"
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
]
),
label="Kandidáti",
),
),
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
)
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
help_text="Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.",
label="Odkaz na celou verzi programu",
required=False,
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu",
required=False,
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 11:26
import wagtail.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0010_alter_electionshomepage_content"),
]
operations = [
migrations.AddField(
model_name="electionscandidatepage",
name="description",
field=wagtail.fields.RichTextField(
blank=True, null=True, verbose_name="Popis"
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 18:54
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("elections", "0011_electionscandidatepage_description"),
]
operations = [
migrations.AlterField(
model_name="electionsarticlepage",
name="date",
field=models.DateTimeField(
default=django.utils.timezone.now, verbose_name="Datum a čas"
),
),
]
# Generated by Django 4.1.10 on 2024-01-18 19:00
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0012_alter_electionsarticlepage_date"),
]
operations = [
migrations.RenameField(
model_name="electionsarticlepage",
old_name="date",
new_name="timestamp",
),
]
# Generated by Django 4.1.10 on 2024-01-19 10:40
import wagtail.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("elections", "0013_rename_date_electionsarticlepage_timestamp"),
]
operations = [
migrations.AlterField(
model_name="electionshomepage",
name="content",
field=wagtail.fields.StreamField(
[
(
"carousel",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybráno video, ukáže se na mobilu i desktopu.",
label="Obrázek na pozadí",
),
),
(
"video_url",
wagtail.blocks.URLBlock(
help_text="Pokud je vybráno, ukáže se na desktopech s povoleným autoplayem místo obrázku.",
label="URL videa",
required=False,
),
),
]
),
),
(
"candidates",
wagtail.blocks.StructBlock(
[
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
(
"description",
wagtail.blocks.TextBlock(
label="Popis"
),
),
]
),
label="Kandidáti",
),
)
]
),
),
(
"secondary_candidates",
wagtail.blocks.StructBlock(
[
("heading", wagtail.blocks.CharBlock(label="Nadpis")),
(
"candidates",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.CharBlock(
label="Číslo"
),
),
(
"page",
wagtail.blocks.PageChooserBlock(
label="Stránka",
page_type=[
"elections.ElectionsCandidatePage"
],
),
),
(
"image",
wagtail.images.blocks.ImageChooserBlock(
help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
label="Obrázek",
required=False,
),
),
]
),
label="Kandidáti",
),
),
]
),
),
(
"program",
wagtail.blocks.StructBlock(
[
(
"categories",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"number",
wagtail.blocks.IntegerBlock(
label="Číslo"
),
),
(
"name",
wagtail.blocks.CharBlock(
label="Název"
),
),
(
"points",
wagtail.blocks.ListBlock(
wagtail.blocks.StructBlock(
[
(
"content",
wagtail.blocks.TextBlock(
label="Obsah"
),
)
]
),
label="Body",
),
),
]
),
label="Kategorie",
),
),
(
"long_version_url",
wagtail.blocks.URLBlock(
help_text="Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.",
label="Odkaz na celou verzi programu",
required=False,
),
),
(
"long_version_text",
wagtail.blocks.CharBlock(
label="Nadpis odkazu na celou verzi programu",
required=False,
),
),
]
),
),
(
"news",
wagtail.blocks.StructBlock(
[
(
"title",
wagtail.blocks.CharBlock(
help_text="Nejnovější články se načtou automaticky",
label="Titulek",
),
),
(
"description",
wagtail.blocks.TextBlock(label="Popis"),
),
],
template="styleguide2/includes/organisms/articles/elections/articles_section.html",
),
),
],
blank=True,
use_json_field=True,
verbose_name="Hlavní obsah",
),
),
]