From 2176c5175f3fdb7bfe95079589ba1cdaa81f1962 Mon Sep 17 00:00:00 2001 From: OndraPetrzilka <ondra.petrzilka@gmail.com> Date: Thu, 25 Aug 2022 11:55:27 +0200 Subject: [PATCH] program page switch working --- main/blocks.py | 10 +++ .../0023_alter_mainprogrampage_program.py | 21 ++++++ main/templates/main/main_program_page.html | 65 +++++++++++-------- 3 files changed, 68 insertions(+), 28 deletions(-) create mode 100644 main/migrations/0023_alter_mainprogrampage_program.py diff --git a/main/blocks.py b/main/blocks.py index 2243fcab..e34cecee 100644 --- a/main/blocks.py +++ b/main/blocks.py @@ -87,8 +87,18 @@ class ProgramBlock(StructBlock): class ProgramGroupBlock(StructBlock): title = CharBlock(label="Titulek části programu") + slug = CharBlock( + label="Slug části programu", + required=False, + help_text="Není třeba vyplňovat, bude automaticky vyplněno", + ) point_list = ListBlock(ProgramBlock(), label="Jednotlivé články programu") + def get_prep_value(self, value): + value = super().get_prep_value(value) + value["slug"] = slugify(value["title"]) + return value + class RegionsBlock(StructBlock): title = CharBlock( diff --git a/main/migrations/0023_alter_mainprogrampage_program.py b/main/migrations/0023_alter_mainprogrampage_program.py new file mode 100644 index 00000000..a8aa7b1c --- /dev/null +++ b/main/migrations/0023_alter_mainprogrampage_program.py @@ -0,0 +1,21 @@ +# Generated by Django 4.0.7 on 2022-08-25 09:18 + +from django.db import migrations +import wagtail.blocks +import wagtail.fields +import wagtail.images.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0022_alter_mainarticlepage_region'), + ] + + operations = [ + migrations.AlterField( + model_name='mainprogrampage', + name='program', + field=wagtail.fields.StreamField([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek části programu')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug části programu', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona')), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.TextBlock(label='Obsah'))]), label='Jednotlivé články programu'))], label='Část programu'))], blank=True, use_json_field=None, verbose_name='Program'), + ), + ] diff --git a/main/templates/main/main_program_page.html b/main/templates/main/main_program_page.html index 38340790..f7339466 100644 --- a/main/templates/main/main_program_page.html +++ b/main/templates/main/main_program_page.html @@ -13,37 +13,46 @@ </div> </div> <div class="container--medium"> - - <div class="mb-12"> - <div class="switch"> - {% for program_group in page.program %} - <a class="switch__item {% if forloop.first %}switch__item--active{% endif %}"> - {{ program_group.value.title }} - </a> - {% endfor %} - </div> - </div> - - <div class="mb-12"> - {% for program_group in page.program %} - {% for item in program_group.value.point_list %} - <div class="flex mb-6"> - {% image item.icon fill-150x150 as icon %} - <img src="{{ icon.url }}" alt="{{ item.title }}" class="mr-6 text-6xl"> - <div class="flex flex-col"> - <h3 class="font-alt mb-4 text-4xl"> - {{ item.title }} - </h3> - <p class="leading-6"> - {{ item.text }} - </p> - </div> + <div class="__js-root"> + <ui-view-provider + :initial="{ {% for program_group in page.program %}'{{ program_group.value.slug }}':{% if forloop.counter0 %}false{% else %}true{% endif %},{% endfor %} }" + :sync-location="true" + v-slot="{ isCurrentView, toggleView }" + > + <div class="mb-12"> + <div class="switch"> + {% for program_group in page.program %} + <a @click="toggleView('{{ program_group.value.slug }}')" class="switch__item" + :class="{'switch__item--active': isCurrentView('{{ program_group.value.slug }}')}"> + {{ program_group.value.title }} + </a> + {% endfor %} </div> - {% endfor %} - {% endfor %} + </div> + + <div class="mb-12"> + {% for program_group in page.program %} + <template v-if="isCurrentView('{{ program_group.value.slug }}')"> + {% for item in program_group.value.point_list %} + <div class="flex mb-6"> + {% image item.icon fill-150x150 as icon %} + <img src="{{ icon.url }}" alt="{{ item.title }}" class="mr-6 text-6xl"> + <div class="flex flex-col"> + <h3 class="font-alt mb-4 text-4xl"> + {{ item.title }} + </h3> + <p class="leading-6"> + {{ item.text }} + </p> + </div> + </div> + {% endfor %} + </template> + {% endfor %} + </div> + </ui-view-provider> </div> </div> - {% include 'main/includes/newsletter_section.html' %} </main> {% endblock %} -- GitLab