diff --git a/pdp/migrations/0002_pdpsubpage.py b/pdp/migrations/0002_pdpsubpage.py new file mode 100644 index 0000000000000000000000000000000000000000..45a9d18e1217d99d622516b0cbc127dfd7588b07 --- /dev/null +++ b/pdp/migrations/0002_pdpsubpage.py @@ -0,0 +1,473 @@ +# Generated by Django 3.1.2 on 2020-11-27 10:04 + +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 + +import uniweb.models + + +class Migration(migrations.Migration): + + dependencies = [ + ("wagtailcore", "0052_pagelogentry"), + ("wagtailimages", "0022_uploadedimage"), + ("pdp", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="PdpSubPage", + 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", + ), + ), + ( + "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 - podstránka", + }, + bases=( + "wagtailcore.page", + uniweb.models.SubpageMixin, + wagtailmetadata.models.MetadataMixin, + models.Model, + ), + ), + ] diff --git a/pdp/models.py b/pdp/models.py index b5d2bd1a884763f53440ab1ec0eb42745213b722..304e27580523ae355219d3fb9bf986b707f5f866 100644 --- a/pdp/models.py +++ b/pdp/models.py @@ -8,18 +8,37 @@ from wagtail.admin.edit_handlers import ( ) from wagtail.core.fields import StreamField from wagtail.core.models import Page +from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.edit_handlers import ImageChooserPanel +from wagtailmetadata.models import MetadataPageMixin from shared.mixins import MatomoMixin from tuning import help from uniweb import models as uniweb +class PdpContentMixin(models.Model): + content = StreamField( + uniweb.UNIWEB_STREAM_CHOICES + + [ + ( + "jupyter", + DocumentChooserBlock(label="Jupyter notebook", group="ostatní"), + ), + ], + verbose_name="obsah stránky", + blank=True, + ) + + class Meta: + abstract = True + + class PdpHomePage( Page, - uniweb.UniwebContentMixin, + PdpContentMixin, uniweb.UniwebTopmenuMixin, - uniweb.MetadataPageMixin, + MetadataPageMixin, MatomoMixin, ): @@ -53,7 +72,7 @@ class PdpHomePage( ] subpage_types = [ - # "uniweb.UniwebFlexiblePage", + "pdp.PdpSubPage", ] ### OTHERS @@ -64,3 +83,35 @@ class PdpHomePage( @property def root_page(self): return self + + +class PdpSubPage(Page, PdpContentMixin, uniweb.SubpageMixin, MetadataPageMixin): + ### FIELDS + + ### PANELS + promote_panels = [ + MultiFieldPanel( + [ + FieldPanel("slug"), + FieldPanel("seo_title"), + FieldPanel("search_description"), + ImageChooserPanel("search_image"), + HelpPanel(help.build(help.NO_SEO_TITLE, help.NO_SEARCH_IMAGE)), + ], + gettext_lazy("Common page configuration"), + ), + ] + + content_panels = Page.content_panels + [ + StreamFieldPanel("content"), + ] + + settings_panels = [] + + ### RELATIONS + parent_page_types = ["pdp.PdpHomePage"] + subpage_types = [] + + ### OTHERS + class Meta: + verbose_name = "Pirátská datová platforma - podstránka" diff --git a/pdp/templates/pdp/pdp_flexible_page.html b/pdp/templates/pdp/pdp_flexible_page.html new file mode 100644 index 0000000000000000000000000000000000000000..2e78ec450c0f7dfd03fde94b2f3fd57eabaa514f --- /dev/null +++ b/pdp/templates/pdp/pdp_flexible_page.html @@ -0,0 +1,9 @@ +{% extends "uniweb/base.html" %} + +{% block content %} +<main> + + {% include "uniweb/snippet_sections.html" %} + +</main> +{% endblock %} diff --git a/pdp/templates/pdp/pdp_home_page.html b/pdp/templates/pdp/pdp_home_page.html new file mode 100644 index 0000000000000000000000000000000000000000..a288e155518c2c3e2db4382f6453ed3a449e1e94 --- /dev/null +++ b/pdp/templates/pdp/pdp_home_page.html @@ -0,0 +1,10 @@ +{% extends "uniweb/base.html" %} +{% load wagtailcore_tags %} + +{% block content %} +<main> + + {% include "uniweb/snippet_sections.html" %} + +</main> +{% endblock %} diff --git a/uniweb/models.py b/uniweb/models.py index 3e0b7dd8033eff0ea5536bd1808fe19c0e28c654..ab2d34330348a0753b0cf08eea2a6bfbf860ff67 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -11,7 +11,6 @@ from wagtail.contrib.table_block.blocks import TableBlock from wagtail.core import blocks from wagtail.core.fields import StreamField from wagtail.core.models import Page -from wagtail.documents.blocks import DocumentChooserBlock from wagtail.images.blocks import ImageChooserBlock from wagtail.images.edit_handlers import ImageChooserPanel from wagtailmetadata.models import MetadataPageMixin @@ -164,56 +163,55 @@ class SubpageMixin: return self.search_image or self.root_page.get_meta_image() +UNIWEB_STREAM_CHOICES = [ + ( + "title", + blocks.CharBlock( + label="nadpis", + icon="title", + group="nadpisy", + template="uniweb/blocks/title.html", + ), + ), + ("advanced_title", AdvancedTitleBlock()), + ("picture_title", PictureTitleBlock()), + ( + "text", + blocks.RichTextBlock( + label="text", + features=RICH_TEXT_FEATURES, + group="texty", + template="uniweb/blocks/text.html", + ), + ), + ("advanced_text", AdvancedTextBlock()), + ("text_columns", ColumnsTextBlock()), + ("advanced_text_columns", AdvancedColumnsTextBlock()), + ( + "gallery", + blocks.ListBlock( + ImageChooserBlock(label="obrázek"), + label="galerie", + icon="image", + group="ostatní", + template="uniweb/blocks/gallery.html", + ), + ), + ("picture_list", PictureListBlock()), + ( + "table", + TableBlock( + label="tabulka", + group="ostatní", + template="uniweb/blocks/table.html", + ), + ), +] + + class UniwebContentMixin(models.Model): content = StreamField( - [ - ( - "title", - blocks.CharBlock( - label="nadpis", - icon="title", - group="nadpisy", - template="uniweb/blocks/title.html", - ), - ), - ("advanced_title", AdvancedTitleBlock()), - ("picture_title", PictureTitleBlock()), - ( - "text", - blocks.RichTextBlock( - label="text", - features=RICH_TEXT_FEATURES, - group="texty", - template="uniweb/blocks/text.html", - ), - ), - ("advanced_text", AdvancedTextBlock()), - ("text_columns", ColumnsTextBlock()), - ("advanced_text_columns", AdvancedColumnsTextBlock()), - ( - "gallery", - blocks.ListBlock( - ImageChooserBlock(label="obrázek"), - label="galerie", - icon="image", - group="ostatní", - template="uniweb/blocks/gallery.html", - ), - ), - ("picture_list", PictureListBlock()), - ( - "table", - TableBlock( - label="tabulka", - group="ostatní", - template="uniweb/blocks/table.html", - ), - ), - ( - "jupyter", - DocumentChooserBlock(label="Jupyter notebook", group="ostatní"), - ), - ], + UNIWEB_STREAM_CHOICES, verbose_name="obsah stránky", blank=True, )