diff --git a/region/blocks.py b/region/blocks.py index 89da28d73c82be7fa127891da41da06d505d00d2..3c10016cd59c0cc32385168ef0d63a6d61fa5b23 100644 --- a/region/blocks.py +++ b/region/blocks.py @@ -5,7 +5,7 @@ from wagtail.images.blocks import ImageChooserBlock class HomepageHeaderBlock(StructBlock): title = CharBlock(label="Titulek", required=False, help_text="Nap") image = ImageChooserBlock() - button_text = CharBlock(label="Titulek", required=False) + button_text = CharBlock(label="Text tlačítka", required=False) button_link = URLBlock(label="Odkaz tlačítka", required=False) class Meta: diff --git a/region/migrations/0003_auto_20211112_1255.py b/region/migrations/0003_auto_20211112_1255.py new file mode 100644 index 0000000000000000000000000000000000000000..b66282d3ad75439554a0f3428e8d09a0ff6cf633 --- /dev/null +++ b/region/migrations/0003_auto_20211112_1255.py @@ -0,0 +1,56 @@ +# Generated by Django 3.2.8 on 2021-11-12 11:55 + +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.images.blocks +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("region", "0002_regionhomepage_subheader"), + ] + + operations = [ + migrations.RemoveField( + model_name="regionhomepage", + name="subheader", + ), + migrations.AlterField( + model_name="regionhomepage", + name="content", + field=wagtail.core.fields.StreamField( + [ + ( + "header", + wagtail.core.blocks.StructBlock( + [ + ( + "title", + wagtail.core.blocks.CharBlock( + help_text="Nap", label="Titulek", required=False + ), + ), + ("image", wagtail.images.blocks.ImageChooserBlock()), + ( + "button_text", + wagtail.core.blocks.CharBlock( + label="Titulek", required=False + ), + ), + ( + "button_link", + wagtail.core.blocks.URLBlock( + label="Odkaz tlačítka", required=False + ), + ), + ] + ), + ) + ], + blank=True, + verbose_name="Blok pod headerem", + ), + ), + ] diff --git a/region/migrations/0004_auto_20211112_1349.py b/region/migrations/0004_auto_20211112_1349.py new file mode 100644 index 0000000000000000000000000000000000000000..cb72cce0447dfc255d64d927b29c784712bef45a --- /dev/null +++ b/region/migrations/0004_auto_20211112_1349.py @@ -0,0 +1,107 @@ +# Generated by Django 3.2.8 on 2021-11-12 12:49 + +import django.db.models.deletion +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.images.blocks +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("calendar_utils", "0002_auto_20200523_0243"), + ("region", "0003_auto_20211112_1255"), + ] + + operations = [ + migrations.AddField( + model_name="regionhomepage", + name="articles_title", + field=models.CharField( + default="Aktuální témata", max_length=256, verbose_name="Nadpis článků" + ), + preserve_default=False, + ), + migrations.AddField( + model_name="regionhomepage", + name="calendar", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + to="calendar_utils.calendar", + ), + ), + migrations.AddField( + model_name="regionhomepage", + name="calendar_button_text", + field=models.CharField( + default="Kalendář", + max_length=256, + verbose_name="Text tlačítka kalendáře", + ), + ), + migrations.AddField( + model_name="regionhomepage", + name="calendar_url", + field=models.URLField( + blank=True, null=True, verbose_name="URL kalendáře ve formátu iCal" + ), + ), + migrations.AddField( + model_name="regionhomepage", + name="region_map_button_text", + field=models.CharField( + default="Piráti v krajích", + max_length=256, + verbose_name="Text tlačítka mapy", + ), + ), + migrations.AddField( + model_name="regionhomepage", + name="twitter", + field=models.URLField(blank=True, null=True, verbose_name="Twitter URL"), + ), + migrations.AddField( + model_name="regionhomepage", + name="youtube", + field=models.URLField(blank=True, null=True, verbose_name="YouTube URL"), + ), + migrations.AlterField( + model_name="regionhomepage", + name="content", + field=wagtail.core.fields.StreamField( + [ + ( + "header", + wagtail.core.blocks.StructBlock( + [ + ( + "title", + wagtail.core.blocks.CharBlock( + help_text="Nap", label="Titulek", required=False + ), + ), + ("image", wagtail.images.blocks.ImageChooserBlock()), + ( + "button_text", + wagtail.core.blocks.CharBlock( + label="Text tlačítka", required=False + ), + ), + ( + "button_link", + wagtail.core.blocks.URLBlock( + label="Odkaz tlačítka", required=False + ), + ), + ] + ), + ) + ], + blank=True, + verbose_name="Blok pod headerem", + ), + ), + ] diff --git a/region/models.py b/region/models.py index 8d873ace4178eb46f54b0c7f70346c917c032f42..c0877f02756014a3ff7f936f8100925053ee0254 100644 --- a/region/models.py +++ b/region/models.py @@ -17,31 +17,34 @@ from wagtail.core.fields import RichTextField, StreamField from wagtail.core.models import Page from wagtailmetadata.models import MetadataPageMixin +from calendar_utils.models import CalendarMixin from shared.models import ArticleMixin, Person, SubpageMixin from uniweb.constants import RICH_TEXT_FEATURES from .blocks import HomepageHeaderBlock -# TODO zatím prakticky shodné s district.models - až bude hotové, tak společné věci přenést do shared +# TODO zatím prakticky shodné s district.models +# až bude hotové, tak společné věci přenést do shared -class RegionHomePage(MetadataPageMixin, Page): - ### FIELDS - subheader = StreamField( +class RegionHomePage(MetadataPageMixin, CalendarMixin, Page): + content = StreamField( [("header", HomepageHeaderBlock())], verbose_name="Blok pod headerem", blank=True, ) - content = StreamField( - [ - ("title", blocks.CharBlock(label="nadpis", icon="title")), - ], - verbose_name="obsah stránky", - blank=True, + articles_title = models.CharField("Nadpis článků", max_length=256) + region_map_button_text = models.CharField( + "Text tlačítka mapy", max_length=256, default="Piráti v krajích" + ) + calendar_button_text = models.CharField( + "Text tlačítka kalendáře", max_length=256, default="Kalendář" ) facebook = models.URLField("Facebook URL", blank=True, null=True) + twitter = models.URLField("Twitter URL", blank=True, null=True) + youtube = models.URLField("YouTube URL", blank=True, null=True) forum = models.URLField("Fórum URL", blank=True, null=True) contact_email = models.EmailField("kontaktni email", max_length=250, blank=True) @@ -87,6 +90,7 @@ class RegionHomePage(MetadataPageMixin, Page): content_panels = Page.content_panels + [ StreamFieldPanel("content"), + FieldPanel("articles_title"), ] promote_panels = [ @@ -94,6 +98,8 @@ class RegionHomePage(MetadataPageMixin, Page): [ FieldPanel("facebook"), FieldPanel("forum"), + FieldPanel("twitter"), + FieldPanel("youtube"), ], gettext_lazy("Common page configuration"), ), @@ -119,6 +125,14 @@ class RegionHomePage(MetadataPageMixin, Page): gettext_lazy("Lidé v zápatí stránky"), ), CommentPanel(), + MultiFieldPanel( + [ + FieldPanel("region_map_button_text"), + FieldPanel("calendar_button_text"), + FieldPanel("calendar_url"), + ], + gettext_lazy("Nastavení lišty s kalendářem a mapou"), + ), ] ### RELATIONS @@ -136,7 +150,10 @@ class RegionHomePage(MetadataPageMixin, Page): verbose_name = "Web regionálního sdružení" def _first_subpage_of_type(self, page_type): - return self.get_descendants().type(page_type).live().specific()[0] + try: + return self.get_descendants().type(page_type).live().specific()[0] + except IndexError: + return None @property def articles(self): @@ -299,7 +316,7 @@ class RegionPersonPage(SubpageMixin, MetadataPageMixin, Page): ### PANELS content_panels = Page.content_panels + [ - # InlinePanel("person"), + FieldPanel("person"), FieldPanel("perex"), ] diff --git a/region/templates/region/base.html b/region/templates/region/base.html index 011fbdb2532a235d09ee7229916af0c7a717b29d..d616216d8cae01e4dbd4c796da62c14afbb37454 100644 --- a/region/templates/region/base.html +++ b/region/templates/region/base.html @@ -19,9 +19,9 @@ <link rel="stylesheet" href="{% static "styleguide18/assets/css/styles.css" %}"> <style type="text/css"> - .inline-block { - display: inline-block; - } + .inline-block { + display: inline-block; + } </style> {% if page.root_page.matomo_id %} @@ -31,9 +31,9 @@ <body> - <nav class="navbar __js-root py-lg-6"> - <ui-app inline-template> - <ui-navbar inline-template> +<nav class="navbar __js-root py-lg-6"> + <ui-app inline-template> + <ui-navbar inline-template> <div> <div class="container container--wide navbar__content" :class="{'navbar__content--initialized': true}"> @@ -78,14 +78,17 @@ </div> <div v-if="show || isLgScreenSize" class="navbar__main navbar__section navbar__section--expandable container-padding--zero lg:container-padding--auto"> - <ul class="navbar-menu text-white"> - <li class="navbar-menu__item"><a href="{% pageurl page.root_page.articles_page %}" class="navbar-menu__link">{{ page.root_page.articles_page }}</a></li> - <li class="navbar-menu__item"><a href="{% pageurl page.root_page.people_page %}" class="navbar-menu__link">{{ page.root_page.people_page }}</a></li> - {% comment %} - <li class="navbar-menu__item"><a href="/komunalni-program/" class="navbar-menu__link">Komunální program</a></li> - {% endcomment %} - <li class="navbar-menu__item"><a href="{% pageurl page.root_page.contact_page %}" class="navbar-menu__link">{{ page.root_page.contact_page }}</a></li> - </ul> + <ul class="navbar-menu text-white"> + {% if page.root_page.articles_page %} + <li class="navbar-menu__item"><a href="{% pageurl page.root_page.articles_page %}" class="navbar-menu__link">{{ page.root_page.articles_page }}</a></li> + {% endif %} + {% if page.root_page.people_page %} + <li class="navbar-menu__item"><a href="{% pageurl page.root_page.people_page %}" class="navbar-menu__link">{{ page.root_page.people_page }}</a></li> + {% endif %} + {% if page.root_page.contact_page %} + <li class="navbar-menu__item"><a href="{% pageurl page.root_page.contact_page %}" class="navbar-menu__link">{{ page.root_page.contact_page }}</a></li> + {% endif %} + </ul> </div> <div v-if="show || isLgScreenSize" class="navbar__actions navbar__section navbar__section--expandable container-padding--zero lg:container-padding--auto self-start flex flex-col sm:flex-row lg:flex-col sm:space-x-4 space-y-2 sm:space-y-0 lg:space-y-2 xl:flex-row xl:space-x-2 xl:space-y-0"> @@ -108,8 +111,8 @@ </div> </div> </div> - </ui-navbar> - </ui-app> + </ui-navbar> + </ui-app> </nav> <div class="__js-root"> @@ -119,22 +122,29 @@ <nav class="subnav py-2"> <div class="container container--wide"> <div class="flex"> - - {% comment %} - <button @click="toggleView('regions')" class="btn btn--condensed btn--grey-500 btn--hoveractive btn--to-white text-sm mr-2 px-0" :class="{'btn--activated': isCurrentView('regions')}"> + <button + class="btn btn--condensed btn--grey-500 btn--hoveractive btn--to-white text-sm mr-2 px-0" + :class="{'btn--activated': isCurrentView('regions')}" + @click="toggleView('regions')" + > <div class="btn__body py-2"> - <span>Piráti v dalších krajích</span> + <span>{{ page.root_page.region_map_button_text }}</span> <i class="ico--chevron-down ml-4"></i> </div> </button> - <button @click="toggleView('calendar')" class="btn btn--inline-icon btn--condensed btn--hoveractive btn--grey-500 btn--to-orange-300 text-sm px-0" :class="{'btn--activated': isCurrentView('calendar')}"> + <button + class="btn btn--inline-icon btn--condensed btn--hoveractive btn--grey-500 btn--to-orange-300 text-sm px-0" + :class="{'btn--activated': isCurrentView('calendar')}" + @click="toggleView('calendar')" + > <div class="btn__body py-2"> <i class="btn__inline-icon ico--calendar mr-0 md:mr-2 text-orange-300"></i> - <span class="hidden md:block">Krajský kalendář</span> + <span class="hidden md:block"> + {{ page.root_page.calendar_button_text|default_if_none:"Kalendář" }} + </span> </div> </button> - {% endcomment %} {% if page.root_page.facebook %} <a href="{{ page.root_page.facebook }}" target="_blank" rel="noopener noreferrer" class="btn btn--inline-icon btn--condensed btn--hoveractive btn--grey-500 btn--to-brands-facebook text-sm ml-2 px-0"> @@ -154,25 +164,21 @@ <ui-region-map class="container container--default" /> </div> <div class="subnav-aside__item" :class="{'subnav-aside__item--visible': isCurrentView('calendar')}"> - <div class="container container--default"> - {% include "shared/calendar_current_events_snippet.html" %} - </div> + {% include "shared/calendar_current_events_snippet.html" %} </div> </aside> </ui-view-provider> - - </ui-app> </div> - {% block subheader %}{% endblock %} - <div class="container container--default lg:py-4"> +{% block subheader %}{% endblock %} +<div class="container container--default lg:py-4"> {% block content %}{% endblock %} - </div> +</div> - <footer class="footer bg-grey-700 text-white __js-root"> +<footer class="footer bg-grey-700 text-white __js-root"> <ui-app inline-template> @@ -188,34 +194,34 @@ </section> <section class="footer__main-links bg-grey-700 text-white lg:grid grid-cols-3 gap-4"> - <div class="pb-4"> - <ui-footer-collapsible label="Připoj se"> - <ul class="mt-6 space-y-2 text-grey-200"> - <li><a href="{{ page.root_page.contact_newcomers|default:"https://nalodeni.pirati.cz" }}">Zájemci o členství</a></li> - <li><a href="{{ page.root_page.contact_page.url }}">Dej nám vědět</a></li> - <li><a href="https://nalodeni.pirati.cz">Nalodění</a></li> - </ul> - </ui-footer-collapsible> - </div> + <div class="pb-4"> + <ui-footer-collapsible label="Připoj se"> + <ul class="mt-6 space-y-2 text-grey-200"> + <li><a href="{{ page.root_page.contact_newcomers|default:"https://nalodeni.pirati.cz" }}">Zájemci o členství</a></li> + <li><a href="{{ page.root_page.contact_page.url }}">Dej nám vědět</a></li> + <li><a href="https://nalodeni.pirati.cz">Nalodění</a></li> + </ul> + </ui-footer-collapsible> + </div> - <div class="pb-4 border-t border-grey-400 lg:border-t-0"> - <ui-footer-collapsible label="Makáme"> - <ul class="mt-6 space-y-2 text-grey-200"> - <li><a href="{{ page.root_page.people_page.url }}">{{ page.root_page.people_page }}</a></li> - <li><a href="{{ page.root_page.articles_page.url }}">{{ page.root_page.articles_page }}</a></li> - </ul> - </ui-footer-collapsible> - </div> + <div class="pb-4 border-t border-grey-400 lg:border-t-0"> + <ui-footer-collapsible label="Makáme"> + <ul class="mt-6 space-y-2 text-grey-200"> + <li><a href="{{ page.root_page.people_page.url }}">{{ page.root_page.people_page }}</a></li> + <li><a href="{{ page.root_page.articles_page.url }}">{{ page.root_page.articles_page }}</a></li> + </ul> + </ui-footer-collapsible> + </div> - <div class="pb-4 border-t border-grey-400 lg:border-t-0"> - <ui-footer-collapsible label="Otevřenost"> - <ul class="mt-6 space-y-2 text-grey-200"> - <li><a href="https://ucet.pirati.cz">Transparentní účet</a></li> - <li><a href="https://smlouvy.pirati.cz">Registr smluv</a></li> - <li><a href="https://wiki.pirati.cz/fo/otevrene_ucetnictvi">Otevřené účetnictví</a></li> - </ul> - </ui-footer-collapsible> - </div> + <div class="pb-4 border-t border-grey-400 lg:border-t-0"> + <ui-footer-collapsible label="Otevřenost"> + <ul class="mt-6 space-y-2 text-grey-200"> + <li><a href="https://ucet.pirati.cz">Transparentní účet</a></li> + <li><a href="https://smlouvy.pirati.cz">Registr smluv</a></li> + <li><a href="https://wiki.pirati.cz/fo/otevrene_ucetnictvi">Otevřené účetnictví</a></li> + </ul> + </ui-footer-collapsible> + </div> </section> <section class="footer__social lg:text-right"> @@ -268,10 +274,10 @@ </footer> - <script src="{% static "styleguide18/assets/js/vue.2.6.11.js" %}"></script> - <script src="{% static "styleguide18/assets/js/main.bundle.js" %}"></script> - <script src="{% static "shared/vendor/jquery/jquery-3.4.1.min.js" %}"></script> - <script src="{% static "shared/vendor/lazysizes/lazysizes.min.js" %}"></script> - <script src="{% static "shared/vendor/fancybox/jquery.fancybox.min.js" %}"></script> +<script src="{% static "styleguide18/assets/js/vue.2.6.11.js" %}"></script> +<script src="{% static "styleguide18/assets/js/main.bundle.js" %}"></script> +<script src="{% static "shared/vendor/jquery/jquery-3.4.1.min.js" %}"></script> +<script src="{% static "shared/vendor/lazysizes/lazysizes.min.js" %}"></script> +<script src="{% static "shared/vendor/fancybox/jquery.fancybox.min.js" %}"></script> </body> </html> diff --git a/region/templates/region/blocks/program_block.html b/region/templates/region/blocks/program_block.html new file mode 100644 index 0000000000000000000000000000000000000000..c4f9ee1e987dcf5b1d89b00535366ba76096091a --- /dev/null +++ b/region/templates/region/blocks/program_block.html @@ -0,0 +1,138 @@ +<article class="mt-8"> + <div class="lg:flex lg:space-x-16"> + <div class="lg:w-3/5 xl:w-2/3"> + <h2 class="head-heavy-sm mb-2 lg:mb-4"> + {{ self.headline }} + </h2> + <div itemprop="description" class="w-full content-block"> + <p> + {{ self.perex }} + </p> + </div> + </div> + <div class="pt-8 lg:w-1/3 md:pt-0"> + <div class="card"> + <div class="card__body"> + <div class="badge badge--condensed"> + <a href="/lide/martin-stanek.html" class="avatar badge__avatar avatar--sm"> + <img src="/assets/bac4c3-0c8ce9ef9b8e4b48c898da14ee6fba5b78836ed019538622f72b4c6584aee7b6.jpg" + alt="Martin Staněk"> + </a> + <div class="badge__body"> + <h2 class="head-heavy-2xs badge__title"> + <a href="/lide/martin-stanek.html" title="Martin Staněk" class="content-block--nostyle"> + Martin Staněk + </a> + </h2> + <p class="badge__occupation"> + Garant + </p> + + <a href="tel:775 058 555" + class="contact-line icon-link content-block--nostyle contact-line--responsive badge__link"> + <i class="ico--phone"></i> + <span>775 058 555</span> + </a> + + <a href="mailto:martin.stanek@pirati.cz" + class="contact-line icon-link content-block--nostyle contact-line--responsive badge__link"> + <i class="ico--envelope"></i> + <span>martin.stanek@pirati.cz</span> + </a> + </div> + </div> + + <div class="content-block"> + <div class="space-y-4 mt-8"> + <div> + <a href="https://redmine.pirati.cz/issues/28177" class="contact-line icon-link content-block--nostyle"> + <i class="ico--info"></i> + <span id="redmineid_28177">Plnění programu: 10%</span> + </a> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="mt-4"> + <table class="table table--striped table--bordered w-full"> + <thead> + <tr> + <td>Název</td> + <td>Stav plnění</td> + </tr> + </thead> + <tbody> + {% for item in self.program_items %} + <tr> + <td> + <a href="{{ item.issue_link }}" target="_blank"> + {{ item.title }} + </a> + </td> + <td>{{ item.completion_percentage }} %</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> +</article> + +<div class="content-block"> + <div class="space-y-4 mt-8"> + <div> + <a href="https://redmine.pirati.cz/issues/28177" class="contact-line icon-link content-block--nostyle"> + <i class="ico--info"></i> + <span id="redmineid_28177">Plnění programu: 10%</span> + </a> + </div> + </div> +</div> + +<script> + fetch('https://redmine.pirati.cz/issues/28177.json') + .then(response => response.json()) + .then(data => console.log(data)); + + fetch('https://redmine.pirati.cz/issues.json?parent_id=28177&sort=id:as') + .then(response => response.json()) + .then(data => console.log(data)); + + {#pirates.priorityStack.push(function (context) {#} + {# var url = 'https://redmine.pirati.cz/issues/28177.json';#} + {# var xhr = pirates.createCORSRequest('GET', url);#} + {# if (!xhr) {#} + {# alert('CORS not supported');#} + {# return;#} + {# }#} + {# xhr.onload = function () {#} + {# var doc = JSON.parse(xhr.responseText);#} + {# var redmine = document.getElementById('redmineid_28177');#} + {# redmine.textContent = "Plnění programu: " + doc.issue.done_ratio + "%";#} + {# }#} + {# xhr.onerror = function () {#} + {# console.log('Woops, there was an error making the request.');#} + {# };#} + {# xhr.send();#} + {#});#} + {#pirates.priorityStack.push(function (context) {#} + {# var url = 'https://redmine.pirati.cz/issues.json?parent_id=28177&sort=id:asc';#} + {# var xhr = pirates.createCORSRequest('GET', url);#} + {# if (!xhr) {#} + {# alert('CORS not supported');#} + {# return;#} + {# }#} + {# xhr.onload = function () {#} + {# var doc = JSON.parse(xhr.responseText);#} + {# var div = document.getElementById('redmine_tasks_28177');#} + {# div.appendChild(pirates.integrations.redmine.tasks(doc));#} + {# }#} + {# xhr.onerror = function () {#} + {# console.log('Woops, there was an error making the request.');#} + {# };#} + {# xhr.send();#} + {#});#} +</script> diff --git a/region/templates/region/region_home_page.html b/region/templates/region/region_home_page.html index 1b9f7036cb361467d6a4382393e3f96d369ab7d4..56bbd6e5685bf1040c3479b4975f1ffd23326199 100644 --- a/region/templates/region/region_home_page.html +++ b/region/templates/region/region_home_page.html @@ -3,6 +3,9 @@ {% block content %} <main> + {% for block in page.content %} + {% include_block block %} + {% endfor %} <h1 class="head-alt-md md:head-alt-lg pb-4 lg:pb-8 pt-5">Aktuální témata</h1>