diff --git a/district/blocks.py b/district/blocks.py index a1fb75c8175da9d5a20ead1eb4f9429554d2b1cb..d6c0374ceed2acc6a02943d23ca694decaac3c6b 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -256,6 +256,7 @@ class InteractiveProgramBlock(StructBlock): ("verejne-sluzby", "Veřejné služby"), ("zdravotni-pece", "Zdravotní péče"), ("sport", "Sport"), + ("sport-plavec", "Sport - plavec"), ("socialni-politika", "Sociální politika"), ("aktivni-verejnost", "Aktivní veřejnost"), ("priroda", "Příroda"), diff --git a/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py b/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py new file mode 100644 index 0000000000000000000000000000000000000000..8f3bdf38b1f686ce6b4fa85b651247bb968bdb70 --- /dev/null +++ b/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 4.0.7 on 2022-08-11 16:38 + +from django.db import migrations, models +import wagtail.blocks +import wagtail.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0095_alter_districtpersonpage_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='districtelectioncampaignpage', + name='show_program_points_inline', + field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah celého programu na jedné stránce'), + ), + migrations.AlterField( + model_name='districtinteractiveprogrampage', + name='content', + field=wagtail.fields.StreamField([('interactive_program_block', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název části programu', required=True)), ('heading', wagtail.blocks.CharBlock(label='Nadpis', required=True)), ('description', wagtail.blocks.RichTextBlock(blank=True, label='Krátký popis, BEZ BODŮ', required=False)), ('icon', wagtail.blocks.ChoiceBlock(choices=[('verejne-sluzby', 'Veřejné služby'), ('zdravotni-pece', 'Zdravotní péče'), ('sport', 'Sport'), ('sport-plavec', 'Sport - plavec'), ('socialni-politika', 'Sociální politika'), ('aktivni-verejnost', 'Aktivní veřejnost'), ('priroda', 'Příroda'), ('vzdelavani', 'Vzdělávání'), ('kultura', 'Kultura'), ('otevrena-radnice', 'Otevřená radnice'), ('cestovni-ruch', 'Cestovní ruch'), ('doprava', 'Doprava'), ('bydleni', 'Bydlení')], label='Ikona')), ('program_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('content', wagtail.blocks.RichTextBlock(label='Obsah', required=True))]), label='Seznam bodů', required=True))]))], use_json_field=None, verbose_name='Části programu'), + ), + ] diff --git a/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py b/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py new file mode 100644 index 0000000000000000000000000000000000000000..972978cd045635b7e459948ec1e4c73ff3cfaee3 --- /dev/null +++ b/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.7 on 2022-08-11 16:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0096_districtelectioncampaignpage_show_program_points_inline_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='districtelectioncampaignpage', + name='show_program_points_inline', + field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah programu na jedné stránce'), + ), + ] diff --git a/district/migrations/0098_alter_districtelectionprogrampage_guarantor.py b/district/migrations/0098_alter_districtelectionprogrampage_guarantor.py new file mode 100644 index 0000000000000000000000000000000000000000..f154e65e9da7b707a095afa6d5cb71000a5b9bce --- /dev/null +++ b/district/migrations/0098_alter_districtelectionprogrampage_guarantor.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.7 on 2022-08-11 19:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0097_alter_districtelectioncampaignpage_show_program_points_inline'), + ] + + operations = [ + migrations.AlterField( + model_name='districtelectionprogrampage', + name='guarantor', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='district.districtpersonpage', verbose_name='Garant'), + ), + ] diff --git a/district/migrations/0099_alter_districtelectionprogrampage_guarantor.py b/district/migrations/0099_alter_districtelectionprogrampage_guarantor.py new file mode 100644 index 0000000000000000000000000000000000000000..8e544f7b66370d01bd00bd000815b56681c91b2f --- /dev/null +++ b/district/migrations/0099_alter_districtelectionprogrampage_guarantor.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.7 on 2022-08-11 19:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('district', '0098_alter_districtelectionprogrampage_guarantor'), + ] + + operations = [ + migrations.AlterField( + model_name='districtelectionprogrampage', + name='guarantor', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='district.districtpersonpage', verbose_name='Garant'), + ), + ] diff --git a/district/models.py b/district/models.py index b3530f5903119b760c34d8971b009c40d7a13491..ba7345ed7dbd23a4b11a82b4f70de698a2c165c7 100644 --- a/district/models.py +++ b/district/models.py @@ -856,7 +856,11 @@ class DistrictElectionProgramPage( ### FIELDS guarantor = models.ForeignKey( - "district.DistrictPersonPage", verbose_name="Garant", on_delete=models.PROTECT + "district.DistrictPersonPage", + verbose_name="Garant", + on_delete=models.PROTECT, + blank=True, + null=True, ) image = models.ForeignKey( "wagtailimages.Image", @@ -917,6 +921,11 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage): max_length=128, help_text="Např. Program pro magistrát.", ) + show_program_points_inline = models.BooleanField( + "Zobrazit obsah programu na jedné stránce", + default=False, + help_text="Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku." + ) hero_headline = models.CharField( "Banner headline", max_length=128, @@ -976,6 +985,7 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage): FieldPanel("number"), FieldPanel("candidate_list_title"), FieldPanel("program_point_list_title"), + FieldPanel("show_program_points_inline"), FieldPanel("content"), ], "Personalizace", diff --git a/district/static/district/svg/theme-icons/sport-plavec.svg b/district/static/district/svg/theme-icons/sport-plavec.svg new file mode 100644 index 0000000000000000000000000000000000000000..a729167596af8f2672c3f5806a22880efe4c25bc --- /dev/null +++ b/district/static/district/svg/theme-icons/sport-plavec.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + width="50mm" + height="50mm" + version="1.1" + viewBox="0 0 50 50" + id="svg7"> + <defs + id="defs11" /> + <metadata + id="metadata2"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <path + d="m 33.448763,31.618729 c -5.495869,0 -4.690306,-3.439903 -8.266348,-3.470254 -3.688769,0.03184 -2.758339,3.470254 -8.31664,3.470254 -3.405219,0 -4.831647,-1.596384 -5.394414,-2.153084 L 23.645862,19.39827 c -0.28546,-0.146458 -2.745333,-1.578176 -6.525151,-1.578176 -1.089982,0 -2.183433,0.121139 -3.254338,0.365062 l -3.346254,0.76689 c -0.209151,0.04849 -0.418303,0.07173 -0.6243332,0.07173 -1.3796033,0 -2.7713466,-1.110793 -2.7713466,-2.778283 0,-1.264275 0.8697312,-2.408019 2.1539504,-2.701976 l 3.3462534,-0.766891 c 1.479324,-0.338528 2.988129,-0.506145 4.492599,-0.506145 10.414229,0 15.382881,7.446044 15.443579,7.632476 l 2.041224,2.463498 c 1.820973,2.427964 2.748801,5.246136 2.956912,8.185704 -1.083911,0.66769 -2.540688,1.06657 -4.110194,1.06657 z M 0.18566731,38.295627 c 0,-1.312833 0.93823429,-2.479122 2.27621549,-2.72452 4.2073133,-0.770705 3.9454403,-2.556299 6.0352229,-2.556299 2.1695583,0 2.7045773,2.756607 8.3400533,2.756607 4.213383,0 6.305767,-1.91289 6.362998,-1.961449 0.532504,-0.533892 1.236527,-0.796719 1.944105,-0.796719 2.146147,0 2.739263,2.75834 8.341789,2.75834 4.213381,0 6.303163,-1.910287 6.365597,-1.958846 0.531117,-0.533892 1.239996,-0.801661 1.947574,-0.801661 0.699947,0 1.397812,0.262393 1.940637,0.771832 2.515542,2.276216 6.395082,1.08738 6.395082,4.516012 0,1.394343 -1.107326,2.780884 -2.749669,2.780884 -0.847185,0 -3.43817,-0.636473 -5.572175,-1.89381 -1.696106,0.999974 -4.462251,2.066544 -8.32965,2.066544 -3.867398,0 -6.63354,-1.137674 -8.324444,-2.138344 -1.693504,0.999802 -4.463117,2.132274 -8.324445,2.132274 -3.866532,0 -6.638745,-1.135073 -8.3296481,-2.134875 C 6.3622323,40.375006 3.7582418,41.004542 2.9344685,41.004542 1.2955933,41.079112 0.18566731,39.70905 0.18566731,38.295627 Z M 41.885934,23.294284 c -3.065301,0 -5.54963,-2.484326 -5.54963,-5.54963 0,-3.065303 2.484329,-5.54963 5.54963,-5.54963 3.065304,0 5.549633,2.484327 5.549633,5.54963 0,3.060968 -2.562371,5.54963 -5.549633,5.54963 z" + id="icon" + style="stroke-width:0.0867129" /> +</svg> diff --git a/district/templates/district/district_election_campaign_page.html b/district/templates/district/district_election_campaign_page.html index c0c3d0dca1c7f8231f2b7f6b76ed128b21c18f09..a75fa7a3f1b1a8a7445929e8e5f2223dfe6f3743 100644 --- a/district/templates/district/district_election_campaign_page.html +++ b/district/templates/district/district_election_campaign_page.html @@ -106,28 +106,55 @@ {% if page.program_points %} <template v-if="isCurrentView('program')"> - <h1 class="head-alt-md text-center py-8 lg:pt-24 lg:pb-8">{{ page.program_point_list_title|default:"Volební program" }}</h1> - - <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> + <h1 + class="head-alt-md text-center py-8 lg:pt-24 {% if not page.show_program_points_inline %}lg:pb-8{% else %}pb-0{% endif %}" + >{{ page.program_point_list_title|default:"Volební program" }}</h1> + {% if page.show_program_points_inline %} {% for program_point in page.program_points %} - <div class="card card--hoveractive"> - <a href="{% pageurl program_point %}"> - {% image program_point.image width-357 as list_image %} - <img src="{{ list_image.url }}" alt="{{ program_point.title }}" class="w-full h-48 object-cover"> - </a> - <div class="card__body p-4"> - <h1 class="card-headline mb-2"> - <a href="{% pageurl program_point %}"> - {{ program_point.title }} - </a> - </h1> - <p class="card-body-text"> - {{ program_point.perex }} - </p> - </div> - </div> + <h2 class="head-alt-md mb-2 mt-8"> + {{ program_point.title }} + </h2> + <p + class="font-bold text-lg leading-normal {% if program_point.guarantor is not none %}mb-3{% else %}mb-5{% endif %}" + > + {{ program_point.perex }} + </p> + + {% if program_point.guarantor is not none %} + <p class="mb-5 text-grey-300"> + Garant: + <a + href="{{ program_point.guarantor.url }}" + >{{ program_point.guarantor }}</a> + </p> + {% endif %} + + {% for block in program_point.content %} + {% include_block block %} + {% endfor %} {% endfor %} - </div> + {% else %} + <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> + {% for program_point in page.program_points %} + <div class="card card--hoveractive"> + <a href="{% pageurl program_point %}"> + {% image program_point.image width-357 as list_image %} + <img src="{{ list_image.url }}" alt="{{ program_point.title }}" class="w-full h-48 object-cover"> + </a> + <div class="card__body p-4"> + <h1 class="card-headline mb-2"> + <a href="{% pageurl program_point %}"> + {{ program_point.title }} + </a> + </h1> + <p class="card-body-text"> + {{ program_point.perex }} + </p> + </div> + </div> + {% endfor %} + </div> + {% endif %} </template> {% endif %} </section> diff --git a/district/templates/district/district_election_program_page.html b/district/templates/district/district_election_program_page.html index 92306473114ad882cc2a734f7ba09d1d67857644..6a8b035700bcd3e00b6ad473ddc5861bb9fcd318 100644 --- a/district/templates/district/district_election_program_page.html +++ b/district/templates/district/district_election_program_page.html @@ -3,7 +3,11 @@ {% block content %} <div class="lg:flex lg:space-x-8 xl:space-x-16"> - <section class="lg:w-3/5 xl:w-2/3"> + <section + {% if page.guarantor is not none %} + class="lg:w-3/5 xl:w-2/3" + {% endif %} + > <h1 class="head-alt-md md:head-alt-lg max-w-5xl mb-4"> {{ page.title }} </h1> @@ -16,17 +20,19 @@ {% endfor %} </section> - <section class="pt-8 lg:w-2/5 xl:w-1/3 lg:pt-0"> - <div class="lg:card lg:elevation-10"> - <div class="lg:card__body"> - <h2 class="head-heavy-sm mb-4"><a href="{% pageurl page.root_election_page %}">{{ page.root_election_page.title }}</a></h2> + {% if page.guarantor is not none %} + <section class="pt-8 lg:w-2/5 xl:w-1/3 lg:pt-0"> + <div class="lg:card lg:elevation-10"> + <div class="lg:card__body"> + <h2 class="head-heavy-sm mb-4"><a href="{% pageurl page.root_election_page %}">{{ page.root_election_page.title }}</a></h2> - {% include "shared/person_badge_snippet.html" with person_page=page.guarantor title="Garant bodu" %} - <hr /> + {% include "shared/person_badge_snippet.html" with person_page=page.guarantor title="Garant bodu" %} + <hr /> - {% include "district/includes/election_subpage_sidebar_content.html" %} + {% include "district/includes/election_subpage_sidebar_content.html" %} + </div> </div> - </div> - </section> + </section> + {% endif %} </div> {% endblock content %} diff --git a/shared/templates/shared/article_preview.html b/shared/templates/shared/article_preview.html index b6a1b7c3ae0e5a2f4846965cde6ee0bb149e54f2..f577fed130a45802ab3b4e66515c230a30af7ff2 100644 --- a/shared/templates/shared/article_preview.html +++ b/shared/templates/shared/article_preview.html @@ -43,7 +43,7 @@ </div> </div> - <div class="article-card-meta" class="c-metadata-block-section__item" > + <div class="article-card-meta c-metadata-block-section__item"> <span itemprop="description" class="article-card-meta__item"> {{ article.date|date:"SHORT_DATE_FORMAT" }} <meta itemprop="datePublished" content="{{ article.last_published_at }}" />