diff --git a/pdp/migrations/0001_initial.py b/pdp/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..2ea569fa3239a0da16bd400a13ad17f02e4e53dd --- /dev/null +++ b/pdp/migrations/0001_initial.py @@ -0,0 +1,511 @@ +# Generated by Django 3.1.2 on 2020-11-27 09:39 + +import django.db.models.deletion +import wagtail.contrib.table_block.blocks +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.documents.blocks +import wagtail.images.blocks +import wagtailmetadata.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("wagtailcore", "0052_pagelogentry"), + ("wagtailimages", "0022_uploadedimage"), + ] + + operations = [ + migrations.CreateModel( + name="PdpHomePage", + 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", + ), + ), + ( + "content", + wagtail.core.fields.StreamField( + [ + ( + "title", + wagtail.core.blocks.CharBlock( + group="nadpisy", + icon="title", + label="nadpis", + template="uniweb/blocks/title.html", + ), + ), + ( + "advanced_title", + wagtail.core.blocks.StructBlock( + [ + ( + "align", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("left", "vlevo"), + ("center", "uprostřed"), + ("right", "vpravo"), + ], + label="zarovnání", + ), + ), + ( + "color", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("black_on_white", "černá na bílé"), + ("white_on_black", "bílá na černé"), + ("white_on_blue", "bílá na modré"), + ( + "white_on_cyan", + "bílá na tyrkysové", + ), + ( + "white_on_violet", + "bílá na fialové", + ), + ], + label="barva", + ), + ), + ( + "title", + wagtail.core.blocks.CharBlock( + label="nadpis" + ), + ), + ] + ), + ), + ( + "picture_title", + wagtail.core.blocks.StructBlock( + [ + ( + "color", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("black_on_white", "černá na bílé"), + ("white_on_black", "bílá na černé"), + ("white_on_blue", "bílá na modré"), + ( + "white_on_cyan", + "bílá na tyrkysové", + ), + ( + "white_on_violet", + "bílá na fialové", + ), + ], + label="barva", + ), + ), + ( + "title", + wagtail.core.blocks.CharBlock( + label="nadpis" + ), + ), + ( + "picture", + wagtail.images.blocks.ImageChooserBlock( + help_text="rozměr na výšku 75px nebo více (obrázek bude zmenšen na výšku 75px)", + label="obrázek", + ), + ), + ] + ), + ), + ( + "text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + group="texty", + label="text", + template="uniweb/blocks/text.html", + ), + ), + ( + "advanced_text", + wagtail.core.blocks.StructBlock( + [ + ( + "align", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("left", "vlevo"), + ("center", "uprostřed"), + ("right", "vpravo"), + ], + label="zarovnání", + ), + ), + ( + "color", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("black_on_white", "černá na bílé"), + ("white_on_black", "bílá na černé"), + ("white_on_blue", "bílá na modré"), + ( + "white_on_cyan", + "bílá na tyrkysové", + ), + ( + "white_on_violet", + "bílá na fialové", + ), + ], + label="barva", + ), + ), + ( + "text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="text", + ), + ), + ] + ), + ), + ( + "text_columns", + wagtail.core.blocks.StructBlock( + [ + ( + "left_text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="levý sloupec", + ), + ), + ( + "right_text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="pravý sloupec", + ), + ), + ] + ), + ), + ( + "advanced_text_columns", + wagtail.core.blocks.StructBlock( + [ + ( + "align", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("left", "vlevo"), + ("center", "uprostřed"), + ("right", "vpravo"), + ], + label="zarovnání", + ), + ), + ( + "color", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("black_on_white", "černá na bílé"), + ("white_on_black", "bílá na černé"), + ("white_on_blue", "bílá na modré"), + ( + "white_on_cyan", + "bílá na tyrkysové", + ), + ( + "white_on_violet", + "bílá na fialové", + ), + ], + label="barva", + ), + ), + ( + "left_text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="levý sloupec", + ), + ), + ( + "right_text", + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="pravý sloupec", + ), + ), + ] + ), + ), + ( + "gallery", + wagtail.core.blocks.ListBlock( + wagtail.images.blocks.ImageChooserBlock( + label="obrázek" + ), + group="ostatní", + icon="image", + label="galerie", + template="uniweb/blocks/gallery.html", + ), + ), + ( + "picture_list", + wagtail.core.blocks.StructBlock( + [ + ( + "color", + wagtail.core.blocks.ChoiceBlock( + choices=[ + ("black_on_white", "černá na bílé"), + ("white_on_black", "bílá na černé"), + ("white_on_blue", "bílá na modré"), + ( + "white_on_cyan", + "bílá na tyrkysové", + ), + ( + "white_on_violet", + "bílá na fialové", + ), + ], + label="barva", + ), + ), + ( + "items", + wagtail.core.blocks.ListBlock( + wagtail.core.blocks.RichTextBlock( + features=[ + "h2", + "h3", + "h4", + "h5", + "bold", + "italic", + "ol", + "ul", + "hr", + "link", + "document-link", + "image", + "superscript", + "subscript", + "strikethrough", + "blockquote", + ], + label="odstavec", + ), + label="odstavce", + ), + ), + ( + "picture", + wagtail.images.blocks.ImageChooserBlock( + help_text="rozměr 25x25px nebo více (obrázek bude zmenšen na 25x25px)", + label="obrázek", + ), + ), + ] + ), + ), + ( + "table", + wagtail.contrib.table_block.blocks.TableBlock( + group="ostatní", + label="tabulka", + template="uniweb/blocks/table.html", + ), + ), + ( + "jupyter", + wagtail.documents.blocks.DocumentChooserBlock( + group="ostatní", label="Jupyter notebook" + ), + ), + ], + blank=True, + verbose_name="obsah stránky", + ), + ), + ( + "matomo_id", + models.IntegerField( + blank=True, + null=True, + verbose_name="Matomo ID pro sledování návštěvnosti", + ), + ), + ( + "top_menu", + wagtail.core.fields.StreamField( + [ + ( + "item", + wagtail.core.blocks.StructBlock( + [ + ( + "name", + wagtail.core.blocks.CharBlock( + label="název" + ), + ), + ( + "page", + wagtail.core.blocks.PageChooserBlock( + label="stránka", + page_type=[ + "uniweb.UniwebHomePage", + "uniweb.UniwebFlexiblePage", + ], + ), + ), + ] + ), + ) + ], + blank=True, + verbose_name="horní menu", + ), + ), + ( + "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": "Pirátská datová platforma", + }, + bases=( + "wagtailcore.page", + wagtailmetadata.models.MetadataMixin, + models.Model, + ), + ), + ] diff --git a/pdp/models.py b/pdp/models.py index 71a836239075aa6e6e4ecb700e9c42c95c022d91..b5d2bd1a884763f53440ab1ec0eb42745213b722 100644 --- a/pdp/models.py +++ b/pdp/models.py @@ -1,3 +1,66 @@ 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.fields import StreamField +from wagtail.core.models import Page +from wagtail.images.edit_handlers import ImageChooserPanel -# Create your models here. +from shared.mixins import MatomoMixin +from tuning import help +from uniweb import models as uniweb + + +class PdpHomePage( + Page, + uniweb.UniwebContentMixin, + uniweb.UniwebTopmenuMixin, + uniweb.MetadataPageMixin, + MatomoMixin, +): + + ### 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 = [ + MultiFieldPanel( + [ + # definovano v MatomoMixin, TODO obstrahovat rozsireni settings_panels do mixinu + FieldPanel("matomo_id"), + ], + "nastavení webu", + ), + StreamFieldPanel("top_menu"), # z uniwebTopmenuMixin + ] + + subpage_types = [ + # "uniweb.UniwebFlexiblePage", + ] + + ### OTHERS + + class Meta: + verbose_name = "Pirátská datová platforma" + + @property + def root_page(self): + return self diff --git a/shared/mixins.py b/shared/mixins.py new file mode 100644 index 0000000000000000000000000000000000000000..a39f712f12cb84c3fde461875f561294fc583e46 --- /dev/null +++ b/shared/mixins.py @@ -0,0 +1,11 @@ +from django.db import models + + +class MatomoMixin(models.Model): + + matomo_id = models.IntegerField( + "Matomo ID pro sledování návštěvnosti", blank=True, null=True + ) + + class Meta: + abstract = True diff --git a/uniweb/models.py b/uniweb/models.py index 73e9f53cd0296de2ac31e9bc2a5f52d28dc9ba75..3e0b7dd8033eff0ea5536bd1808fe19c0e28c654 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -16,6 +16,7 @@ from wagtail.images.blocks import ImageChooserBlock from wagtail.images.edit_handlers import ImageChooserPanel from wagtailmetadata.models import MetadataPageMixin +from shared.mixins import MatomoMixin from tuning import help from .constants import ( @@ -221,18 +222,24 @@ class UniwebContentMixin(models.Model): abstract = True -class UniwebHomePage(Page, UniwebContentMixin, MetadataPageMixin): - ### FIELDS +class UniwebTopmenuMixin(models.Model): - # 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, ) + + class Meta: + abstract = True + + +class UniwebHomePage( + Page, UniwebContentMixin, UniwebTopmenuMixin, MetadataPageMixin, MatomoMixin +): + ### FIELDS + + # settings narrow_layout = models.BooleanField( "zúžený obsah stránky", default=False, @@ -260,12 +267,12 @@ class UniwebHomePage(Page, UniwebContentMixin, MetadataPageMixin): settings_panels = [ MultiFieldPanel( [ - FieldPanel("matomo_id"), + FieldPanel("matomo_id"), # z MatomoMixin FieldPanel("narrow_layout"), ], "nastavení webu", ), - StreamFieldPanel("top_menu"), + StreamFieldPanel("top_menu"), # z UniwebTopmenuMixin ] ### RELATIONS