diff --git a/main/blocks.py b/main/blocks.py index 5c29aeee1a935bf73076522e21a29f1e24d36230..3816978271702c5e911adbfb3a9dd34b80cc8876 100644 --- a/main/blocks.py +++ b/main/blocks.py @@ -140,7 +140,7 @@ class OtherLinksBlock(StructBlock): class SocialLinkBlock(LinkBlock): - icon = CharBlock(label="Ikona") # TODO CSS class name or somthing better? + icon = CharBlock(label="Ikona", help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons") # TODO CSS class name or somthing better? # ARTICLE BLOCKS diff --git a/main/migrations/0016_remove_mainpersonpage_facebook_and_more.py b/main/migrations/0016_remove_mainpersonpage_facebook_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..57ac4e56b40f00d7f13f2d5b1b3c59ebce5c61a0 --- /dev/null +++ b/main/migrations/0016_remove_mainpersonpage_facebook_and_more.py @@ -0,0 +1,155 @@ +# Generated by Django 4.0.7 on 2022-08-24 14:12 + +import django.db.models.deletion +import wagtail.blocks +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("wagtailimages", "0024_index_image_file_hash"), + ("main", "0015_mainarticlespage_last_import_log"), + ] + + operations = [ + migrations.RemoveField( + model_name="mainpersonpage", + name="facebook", + ), + migrations.RemoveField( + model_name="mainpersonpage", + name="instagram", + ), + migrations.RemoveField( + model_name="mainpersonpage", + name="twitter", + ), + migrations.AddField( + model_name="mainpersonpage", + name="main_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="+", + to="wagtailimages.image", + verbose_name="Hlavní obrázek", + ), + ), + migrations.AddField( + model_name="mainpersonpage", + name="people", + field=wagtail.fields.StreamField( + [ + ( + "people_group", + wagtail.blocks.StructBlock( + [ + ("title", wagtail.blocks.CharBlock(label="Titulek")), + ( + "slug", + wagtail.blocks.CharBlock( + help_text="Není třeba vyplňovat, bude automaticky vyplněno", + label="Slug skupiny", + required=False, + ), + ), + ( + "person_list", + wagtail.blocks.ListBlock( + wagtail.blocks.PageChooserBlock( + label="Detail osoby", + page_type=["main.MainPersonPage"], + ), + label="Skupina osob", + ), + ), + ], + label="Seznam osob", + ), + ) + ], + blank=True, + use_json_field=None, + verbose_name="Lidé", + ), + ), + migrations.AddField( + model_name="mainpersonpage", + name="profile_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="+", + to="wagtailimages.image", + verbose_name="Profilový obrázek", + ), + ), + migrations.AddField( + model_name="mainpersonpage", + name="social_links", + field=wagtail.fields.StreamField( + [ + ( + "social_links", + wagtail.blocks.StructBlock( + [ + ( + "text", + wagtail.blocks.CharBlock( + label="Titulkek odkazu (text, který se zobrazí místo dlouhého odkazu)" + ), + ), + ("link", wagtail.blocks.URLBlock(label="Odkaz")), + ( + "icon", + wagtail.blocks.CharBlock( + help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons", + label="Ikona", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=None, + verbose_name="Odkazy na sociální sítě", + ), + ), + migrations.AlterField( + model_name="mainhomepage", + name="social_links", + field=wagtail.fields.StreamField( + [ + ( + "social_links", + wagtail.blocks.StructBlock( + [ + ( + "text", + wagtail.blocks.CharBlock( + label="Titulkek odkazu (text, který se zobrazí místo dlouhého odkazu)" + ), + ), + ("link", wagtail.blocks.URLBlock(label="Odkaz")), + ( + "icon", + wagtail.blocks.CharBlock( + help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons", + label="Ikona", + ), + ), + ] + ), + ) + ], + blank=True, + use_json_field=None, + verbose_name="Odkazy na sociální sítě v zápatí webu", + ), + ), + ] diff --git a/main/models.py b/main/models.py index 232299310e48fedeaa6e56b51ca9b4ebc7a84635..562b29fc88bfc15289123e7843e135706b404ddd 100644 --- a/main/models.py +++ b/main/models.py @@ -426,6 +426,23 @@ class MainPeoplePage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page): ### FIELDS + main_image = models.ForeignKey( + "wagtailimages.Image", + on_delete=models.PROTECT, + blank=True, + null=True, + verbose_name="Hlavní obrázek", + related_name="+" + ) + + profile_image = models.ForeignKey( + "wagtailimages.Image", + on_delete=models.PROTECT, + blank=True, + null=True, + verbose_name="Profilový obrázek", + related_name="+" + ) before_name = models.CharField( "Tituly před jménem", max_length=16, blank=True, null=True ) @@ -445,13 +462,23 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, max_length=32, ) + social_links = StreamField( + [ + ("social_links", blocks.SocialLinkBlock()), + ], + verbose_name="Odkazy na sociální sítě", + blank=True, + ) + + people = StreamField( + [("people_group", blocks.PeopleGroupBlock(label="Seznam osob"))], + verbose_name="Lidé", + blank=True, + ) + email = models.CharField("E-mail", max_length=128, blank=True, null=True) phone = models.CharField("Telefonní kontakt", max_length=16, blank=True, null=True) - facebook = models.URLField("Odkaz na Facebook", blank=True, null=True) - twitter = models.URLField("Odkaz na Twitter", blank=True, null=True) - instagram = models.URLField("Odkaz na Instagram", blank=True, null=True) - settings_panels = [] ### RELATIONS @@ -461,6 +488,8 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, ### PANELS content_panels = Page.content_panels + [ + FieldPanel("main_image"), + FieldPanel("profile_image"), FieldPanel("before_name"), FieldPanel("after_name"), FieldPanel("position"), @@ -469,9 +498,8 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, FieldPanel("text"), FieldPanel("email"), FieldPanel("phone"), - FieldPanel("facebook"), - FieldPanel("twitter"), - FieldPanel("instagram"), + FieldPanel("social_links"), + FieldPanel("people"), ] def get_context(self, request): diff --git a/main/templates/main/includes/layout/photo_page_header.html b/main/templates/main/includes/layout/photo_page_header.html index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e09dd29ed8d61d558aa0a46b10d50f658918e7c8 100644 --- a/main/templates/main/includes/layout/photo_page_header.html +++ b/main/templates/main/includes/layout/photo_page_header.html @@ -0,0 +1,16 @@ +{% load wagtailcore_tags %} + +<header + class="bg-black flex items-center header-clip photo-header py-32 mb-20 w-full bg-no-repeat bg-cover bg-center" + style="background-image: url('{{ image_url | default_if_none:"https://cc.cz/wp-content/uploads/2022/04/bartos-otv.jpg" }}')" +> + <div class="grid-container header-max-width pt-16"> + <div class="pl-4 pr-2 col-start-1 col-end-3 sm:col-start-2 sm:col-end-13 sm:pr-0"> + <h1 class="font-alt text-white"> + <span class="text-2xl">{{ before_title | default_if_none:"" }}</span><br> + <span class="font-alt text-7xl">{{ page.title | default_if_none:"" }}</span><span class="text-2xl">{{ after_title | default_if_none:"" }}</span><br> + <span class="font-alt">{{ subtitle | default_if_none:"" }}</span> + </h1> + </div> + </div> +</header> \ No newline at end of file diff --git a/main/templates/main/main_article_page.html b/main/templates/main/main_article_page.html index 6f45baaa8ebce58cb260325bece8b2903933b0e8..66fcdc439f0c965a40b35bbeef494ca4c4a8953e 100644 --- a/main/templates/main/main_article_page.html +++ b/main/templates/main/main_article_page.html @@ -2,14 +2,16 @@ {% load static wagtailcore_tags wagtailimages_tags wagtailroutablepage_tags %} {% block content %} - {% include 'main/includes/layout/simple_page_header.html' %} - + {% image page.image max-3840x2160 as main_img %} + {% with before_title=page.date after_title=page.after_name subtitle=page.position image_url=main_img.url %} + {% include 'main/includes/layout/photo_page_header.html' %} + {% endwith %} {# {% routablepageurl page.root_page.articles_page "tags" as articles_tag_page_url %}#} <main role="main" class="mb-10 xl:mb-32"> <div class="grid-container mb-2 lg:mb-12"> <div class="grid-left-side h-full bg-grey-150 left-tab"> <div class="p-6"> - <span class="font-bold 3xl:text-xl">AUTOR ČLÁNKU: <br> {{ page.author }}</span><br> + <span class="font-bold 3xl:text-xl">AUTOR ČLÁNKU: <br> {{ page.author_page.title }}</span><br> </div> </div> <div class="grid-content leading-6"> @@ -33,6 +35,7 @@ {% endif %} {% endfor %} </main> + {% include 'main/includes/newsletter_section.html' %} {# {% if related_articles|length %}#} {# <section class="mt-16 md:mt-24">#} diff --git a/main/templates/main/main_person_page.html b/main/templates/main/main_person_page.html index 5775102e789518974781a840ad4f94604ef6fb5f..faa8d65481e794f152f977c127e93ab25d7bca4c 100644 --- a/main/templates/main/main_person_page.html +++ b/main/templates/main/main_person_page.html @@ -2,9 +2,152 @@ {% load static wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} -<main role="main"> + <main role="main"> + {% image page.main_image max-3840x2160 as main_img %} + {% with before_title=page.before_name after_title=page.after_name subtitle=page.position image_url=main_img.url %} + {% include 'main/includes/layout/photo_page_header.html' %} + {% endwith %} + <div class=""> + <section class="grid-container person-grid-container"> + <div class="grid-content leading-6"> + <article class="mb-4 xl:mb-24 xl:mr-2"> + <p class="font-alt mb-5"> + {{ page.perex }} + </p> + <p class="font-alt mb-5"> + {{ page.text|richtext }} + </p> + </article> + </div> + {% if page.email or page.phone %} + <div class="grid-right-side mb-8 xl:mb-0"> + <div class="bg-grey-100 mb-1 px-7 py-9"> + {% if page.email %} + <div class="flex mb-2"> + <i class="ico--envelope mr-2"></i> + <a href="mailto:{{ page.email }}" class="text-turquoise-500 underline"> + {{ page.email }} + </a> + </div> + {% endif %} + {% if page.phone %} + <div class="flex mb-2"> + <i class="ico--phone mr-2"></i> + <a href="tel:+{{ page.phone }}"> + {{ page.phone }} + </a> + </div> + {% endif %} + </div> + {% endif %} + {% if page.social_links %} + <div class="bg-grey-100 px-7 py-9"> + {% for social_block in page.social_links %} + <div class="flex mb-2"> + <i class="{{ social_block.value.icon }} mr-2"></i> + <a href="{{ social_block.value.link }}"> + {{ social_block.value.text }} + </a> + </div> + {% endfor %} + </div> + </div> + {% endif %} + </section> + </div> + {% if tweet_list %} + <section class="grid-container no-max"> + <div class="grid-content-with-right-side"> + <h2 class="head-4xl text-center xl:text-left"> + Aktuálně na Twitteru + </h2> + <div class="mb-8 flex flex-wrap"> + {% for tweet in page.tweet_list %} + <div class="md:w-1/3 lg:w-1/4"> + <div class="p-4 flex flex-col items-center text-center border border-grey-100"> + <img class="rounded-full shadow-sm w-12 mb-2" src="https://randomuser.me/api/portraits/women/56.jpg" + alt="user image"/> + <h5 class="font-alt mb-2">{{ tweet.author_name }}</h5> + <small class="mb-4 text-turquoise-400">@{{ tweet.author_username }}</small> + <p class="text-base leading-6 mb-2">{{ tweet.text }}</p> + <a href="" class="hover:no-underline"> + <i class="ico--twitter text-turquoise-400 text-xl"></i> + </a> + </div> + </div> + {% endfor %} + </div> + </div> + </section> + {% endif %} + {% if article_page_list %} + <section class="grid-container mb-4 justify-start xl:mb-14"> + <div class="grid-content"> + <div class="leading-6"> + <h2 class="head-4xl"> + Články + </h2> + {% for article_preview in article_page_list %} + <div class="flex flex-col justify-between items-start mb-9"> + <div class="flex font-bold mb-4 text-xs text-white uppercase"> + <span class="bg-green-400 mr-1 px-1">{{ article_preview.date }}</span> + {% for tag in article_preview.tags.all %} + <span class="bg-violet-400 mr-1 px-1">{{ tag }}</span> + {% endfor %} + </div> + <h4 class="head-3xl mb-4"> + {{ article_preview.title }} + </h4> + <p class="mb-6"> + {{ article_preview.perex }} + </p> + {% include 'main/includes/button_animated.html' with btn_link=article_preview.url btn_text="Číst dále" %} + </div> + {% endfor %} + </div> + </div> + </section> + {% endif %} + {% for people_group in page.people %} + <section class="grid-container person-grid-container mb-4 justify-start xl:mb-14"> + <div class="grid-content-with-right-side"> + <h2 class="head-4xl text-left"> + {{ people_group.value.title }} + </h2> + {% for person in people_group.value.person_list %} + <div class="flex flex-wrap"> + <div class="flex mb-16 person-box-medium"> + <div class="shrink-0 mr-4"> + {% image person.profile_image fill-250x250 as profile_image %} + <img + class="rounded-full shadow-sm w-20 mb-2 xl:w-44" + src="{{ profile_image.url }}" + alt=" {{ person.title }}" + > + </div> + <div class="flex flex-col justify-between py-4"> + <div class="flex flex-col"> + <h4 class="head-3xl"> + {{ person.title }} + </h4> + <span + class="text-sm xl:text-base leading-6 mb-6">{{ person.position|default_if_none:"" }}</span> + <div> + {% include 'main/includes/button_animated.html' with btn_link=person.url btn_text="Detail" %} + </div> + </div> - {% include 'main/includes/newsletter_section.html' %} -</main> + </div> + </div> + {% endfor %} + </div> + </div> + </section> + {% endfor %} + </div> + + {% include 'main/includes/newsletter_section.html' %} + + </main> {% endblock content %}