diff --git a/uniweb/constants.py b/uniweb/constants.py index 3c9c0d49ed09350e400a93e473fe1d1bcb0d6cee..236a2e20fda5a9910fb4022ec786402da6c11695 100644 --- a/uniweb/constants.py +++ b/uniweb/constants.py @@ -55,4 +55,5 @@ ALIGN_CSS = { RIGHT: ["text-right"], } -ARTICLES_PER_PAGE = 12 +ARTICLES_PER_LINE = 3 +ARTICLES_PER_PAGE = ARTICLES_PER_LINE * 4 diff --git a/uniweb/migrations/0013_auto_20210217_1130.py b/uniweb/migrations/0013_auto_20210217_1130.py new file mode 100644 index 0000000000000000000000000000000000000000..d316ee1deee61c2b06d2b35a8bbd79e85eb8ca1a --- /dev/null +++ b/uniweb/migrations/0013_auto_20210217_1130.py @@ -0,0 +1,805 @@ +# Generated by Django 3.1.6 on 2021-02-17 10:30 + +import wagtail.contrib.table_block.blocks +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.images.blocks +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("uniweb", "0012_auto_20210217_0215"), + ] + + operations = [ + migrations.AlterField( + model_name="uniwebflexiblepage", + name="content", + field=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", + ), + ), + ( + "articles", + wagtail.core.blocks.StructBlock( + [ + ( + "page", + wagtail.core.blocks.PageChooserBlock( + label="sekce článků", + page_type=["uniweb.UniwebArticlesIndexPage"], + ), + ), + ( + "lines", + wagtail.core.blocks.IntegerBlock( + default=1, + help_text="zobrazí se tři články na řádek", + label="počet řádků", + ), + ), + ] + ), + ), + ], + blank=True, + verbose_name="obsah stránky", + ), + ), + migrations.AlterField( + model_name="uniwebhomepage", + name="content", + field=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", + ), + ), + ( + "articles", + wagtail.core.blocks.StructBlock( + [ + ( + "page", + wagtail.core.blocks.PageChooserBlock( + label="sekce článků", + page_type=["uniweb.UniwebArticlesIndexPage"], + ), + ), + ( + "lines", + wagtail.core.blocks.IntegerBlock( + default=1, + help_text="zobrazí se tři články na řádek", + label="počet řádků", + ), + ), + ] + ), + ), + ], + blank=True, + verbose_name="obsah stránky", + ), + ), + ] diff --git a/uniweb/models.py b/uniweb/models.py index e1388fed3b28db92a27f5e9294ce74d7b8eee907..e0601fc868b99a8d04ed2194d7dc98e0a1242189 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -23,6 +23,7 @@ from tuning import help from .constants import ( ALIGN_CHOICES, ALIGN_CSS, + ARTICLES_PER_LINE, ARTICLES_PER_PAGE, BLACK_ON_WHITE, COLOR_CHOICES, @@ -142,6 +143,35 @@ class PictureListBlock(ColorBlock): template = "uniweb/blocks/picture_list.html" +class ArticlesBlock(blocks.StructBlock): + page = blocks.PageChooserBlock( + label="sekce článků", page_type=["uniweb.UniwebArticlesIndexPage"] + ) + lines = blocks.IntegerBlock( + label="počet řádků", + default=1, + help_text="zobrazí se tři články na řádek", + ) + + class Meta: + label = "články" + icon = "folder-open-1" + group = "ostatní" + template = "uniweb/blocks/articles.html" + + def get_context(self, value, parent_context=None): + context = super().get_context(value, parent_context=parent_context) + count = value["lines"] * ARTICLES_PER_LINE + context["articles"] = ( + value["page"] + .get_children() + .live() + .specific() + .order_by("-uniwebarticlepage__date")[:count] + ) + return context + + class MenuItemBlock(blocks.StructBlock): name = blocks.CharBlock(label="název") page = blocks.PageChooserBlock( @@ -202,6 +232,7 @@ class UniwebContentMixin(models.Model): template="uniweb/blocks/table.html", ), ), + ("articles", ArticlesBlock()), ], verbose_name="obsah stránky", blank=True, diff --git a/uniweb/templates/uniweb/blocks/articles.html b/uniweb/templates/uniweb/blocks/articles.html new file mode 100644 index 0000000000000000000000000000000000000000..897923865b1680d3386cce77424d1e9a3c1445d1 --- /dev/null +++ b/uniweb/templates/uniweb/blocks/articles.html @@ -0,0 +1 @@ +{% include "styleguide/2.3.x/article_card_list.html" %}