Skip to content
Snippets Groups Projects
Commit fe7a12bc authored by jan.bednarik's avatar jan.bednarik
Browse files

elections2021: FAQ

parent a4ff4df7
Branches
No related tags found
2 merge requests!226Release,!225elections2021: FAQ
Pipeline #3554 failed
...@@ -147,3 +147,5 @@ media_files/ ...@@ -147,3 +147,5 @@ media_files/
static_files/ static_files/
.python-version .python-version
.idea/ .idea/
update_election_statics.sh
# Generated by Django 3.2.2 on 2021-05-12 23:32
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtailmetadata.models
from django.db import migrations, models
import shared.models
class Migration(migrations.Migration):
dependencies = [
("wagtailimages", "0023_add_choose_permissions"),
("wagtailcore", "0062_comment_models_and_pagesubscription"),
("elections2021", "0007_auto_20210512_2132"),
]
operations = [
migrations.CreateModel(
name="Elections2021QuestionsPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
(
"intro",
wagtail.core.fields.RichTextField(
blank=True, verbose_name="úvodní text"
),
),
(
"myths",
wagtail.core.fields.StreamField(
[
(
"question",
wagtail.core.blocks.StructBlock(
[
(
"question",
wagtail.core.blocks.CharBlock(
label="otázka"
),
),
(
"answer",
wagtail.core.blocks.RichTextBlock(
features=[
"h2",
"h3",
"h4",
"bold",
"italic",
"superscript",
"subscript",
"strikethrough",
"ul-elections2021",
"ol-elections2021",
"blockquote-elections2021",
"link",
"image",
"document-link",
],
label="odpověď",
),
),
]
),
)
],
blank=True,
verbose_name="mýty o koalici",
),
),
(
"elections",
wagtail.core.fields.StreamField(
[
(
"question",
wagtail.core.blocks.StructBlock(
[
(
"question",
wagtail.core.blocks.CharBlock(
label="otázka"
),
),
(
"answer",
wagtail.core.blocks.RichTextBlock(
features=[
"h2",
"h3",
"h4",
"bold",
"italic",
"superscript",
"subscript",
"strikethrough",
"ul-elections2021",
"ol-elections2021",
"blockquote-elections2021",
"link",
"image",
"document-link",
],
label="odpověď",
),
),
]
),
)
],
blank=True,
verbose_name="otázky k volbám",
),
),
(
"photo",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="wagtailimages.image",
verbose_name="hlavní fotka",
),
),
(
"search_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="+",
to="wagtailimages.image",
verbose_name="Search image",
),
),
],
options={
"verbose_name": "FAQ",
},
bases=(
shared.models.SubpageMixin,
wagtailmetadata.models.WagtailImageMetadataMixin,
"wagtailcore.page",
models.Model,
),
),
]
...@@ -105,6 +105,7 @@ class Elections2021HomePage(Page, MetadataPageMixin): ...@@ -105,6 +105,7 @@ class Elections2021HomePage(Page, MetadataPageMixin):
"elections2021.Elections2021CandidatesListPage", "elections2021.Elections2021CandidatesListPage",
"elections2021.Elections2021CandidatesMapPage", "elections2021.Elections2021CandidatesMapPage",
"elections2021.Elections2021ProgramPage", "elections2021.Elections2021ProgramPage",
"elections2021.Elections2021QuestionsPage",
] ]
### OTHERS ### OTHERS
...@@ -128,6 +129,10 @@ class Elections2021HomePage(Page, MetadataPageMixin): ...@@ -128,6 +129,10 @@ class Elections2021HomePage(Page, MetadataPageMixin):
def candidates_map_page_url(self): def candidates_map_page_url(self):
return get_subpage_url(self, Elections2021CandidatesMapPage) return get_subpage_url(self, Elections2021CandidatesMapPage)
@cached_property
def questions_page_url(self):
return get_subpage_url(self, Elections2021QuestionsPage)
class Elections2021ArticleTag(TaggedItemBase): class Elections2021ArticleTag(TaggedItemBase):
content_object = ParentalKey( content_object = ParentalKey(
...@@ -820,3 +825,85 @@ class Elections2021ProgramPointPage(SubpageMixin, MetadataPageMixin, Page): ...@@ -820,3 +825,85 @@ class Elections2021ProgramPointPage(SubpageMixin, MetadataPageMixin, Page):
class Meta: class Meta:
verbose_name = "Programový bod" verbose_name = "Programový bod"
class RichQuestionBlock(blocks.StructBlock):
question = blocks.CharBlock(label="otázka")
answer = blocks.RichTextBlock(label="odpověď", features=ARTICLE_RICH_TEXT_FEATURES)
class Meta:
label = "otázka a odpověď"
icon = "doc-full"
template = "elections2021/_rich_question_block.html"
class Elections2021QuestionsPage(SubpageMixin, MetadataPageMixin, Page):
### FIELDS
intro = RichTextField(
"úvodní text", blank=True, features=ARTICLE_RICH_TEXT_FEATURES
)
photo = models.ForeignKey(
"wagtailimages.Image",
on_delete=models.PROTECT,
blank=True,
null=True,
verbose_name="hlavní fotka",
)
myths = StreamField(
[("question", RichQuestionBlock())],
verbose_name="mýty o koalici",
blank=True,
)
elections = StreamField(
[("question", RichQuestionBlock())],
verbose_name="otázky k volbám",
blank=True,
)
### PANELS
content_panels = Page.content_panels + [
FieldPanel("intro"),
ImageChooserPanel("photo"),
]
promote_panels = [
MultiFieldPanel(
[
FieldPanel("slug"),
FieldPanel("seo_title"),
FieldPanel("search_description"),
ImageChooserPanel("search_image"),
HelpPanel(help.build(help.NO_SEO_TITLE, NO_SEARCH_IMAGE_USE_PHOTO)),
],
gettext_lazy("Common page configuration"),
),
CommentPanel(),
]
myths_panels = [StreamFieldPanel("myths")]
elections_panels = [StreamFieldPanel("elections")]
edit_handler = TabbedInterface(
[
ObjectList(content_panels, heading=gettext_lazy("Content")),
ObjectList(myths_panels, heading="mýty"),
ObjectList(elections_panels, heading="volby"),
ObjectList(promote_panels, heading=gettext_lazy("Promote")),
]
)
### RELATIONS
parent_page_types = ["elections2021.Elections2021HomePage"]
subpage_types = []
### OTHERS
class Meta:
verbose_name = "FAQ"
def get_meta_image(self):
return self.search_image or self.photo
Source diff could not be displayed: it is too large. Options to address this: view the blob.
{% load wagtailimages_tags %}
<article class="relative bg-lemon md:bg-split-color px-4 md:pl-8 md:pr-0 2xl:px-8 hero py-0 w-full ">
<div class="2xl:container w-auto bg-lemon md:pl-20 pr-0 grid lg:grid-rows-1 h-64 lg:grid-cols-7 items-center 2xl:mx-auto">
<div class="lg:row-span-1 lg:col-span-4 order-1 md:pr-20">
<h1 class="head-alt-md sm:head-alt-lg pt-1 max-w-sm">{{ page.title }}</h1>
</div>
<div class="hidden lg:block lg:row-span-2 lg:col-span-3 order-2 h-full 2xl:absolute 2xl:right-0 2xl:w-1/3">
{% image page.photo fill-618x256 as img %}
<img class="object-cover w-full h-full" src="{{ img.url }}">
</div>
</div>
</article>
{% load wagtailcore_tags %}
<div class="accordeon-row">
<div class="accordeon-row-head" onclick="setMaxHeights();if(this.parentElement.classList.contains('accordeon-row--open')) this.parentElement.classList.remove('accordeon-row--open'); else this.parentElement.classList.add('accordeon-row--open');">
<h3 class="accordeon-row-heading head-alt-xs">{{ block.value.question }}</h3>
<i class="ico--chevron-down"></i>
</div>
<div class="accordeon-row-body" style="max-height: 2993px;">
<div class="content-block">
{{ block.value.answer|richtext }}
</div>
</div>
</div>
...@@ -60,18 +60,26 @@ ...@@ -60,18 +60,26 @@
<a href="{{ page.root_page.articles_page_url }}" data-href="{{ page.root_page.articles_page_url }}" class="navbar-menu__link">Aktuality</a> <a href="{{ page.root_page.articles_page_url }}" data-href="{{ page.root_page.articles_page_url }}" class="navbar-menu__link">Aktuality</a>
</li> </li>
<li class="navbar-menu__item"> <li class="navbar-menu__item">
<ui-navbar-subitem label="Kandidáti" href="#"> <ui-navbar-subitem label="Kandidáti" href="{{ page.root_page.candidates_list_page_url }}">
<ul class="navbar-menu__submenu"> <ul class="navbar-menu__submenu">
<li><a href="{{ page.root_page.candidates_list_page_url }}" data-href="{{ page.root_page.candidates_list_page_url }}" class="navbar-menu__link">Výpis kandidátů</a></li> <li><a href="{{ page.root_page.candidates_list_page_url }}" data-href="{{ page.root_page.candidates_list_page_url }}" class="navbar-menu__link">Výpis kandidátů</a></li>
<li><a href="{{ page.root_page.candidates_map_page_url }}" data-href="{{ page.root_page.candidates_map_page_url }}" class="navbar-menu__link">Výpis kandidátů podle mapy</a></li> <li><a href="{{ page.root_page.candidates_map_page_url }}" data-href="{{ page.root_page.candidates_map_page_url }}" class="navbar-menu__link">Výpis kandidátů podle mapy</a></li>
</ul> </ul>
</ui-navbar-subtitem> </ui-navbar-subtitem>
</li> </li>
<li class="navbar-menu__item"> <li class="navbar-menu__item">
<a href="#" data-href="#" class="navbar-menu__link">FAQ</a> <a href="{{ page.root_page.questions_page_url }}" data-href="{{ page.root_page.questions_page_url }}" class="navbar-menu__link">FAQ</a>
</li> </li>
<li class="navbar-menu__item"> <li class="navbar-menu__item">
<a href="#" data-href="#" class="navbar-menu__link">Programové body</a> <ui-navbar-subitem label="Program" href="#">
<ul class="navbar-menu__submenu">
<li><a href="#" data-href="#" class="navbar-menu__link">Celý program</a></li>
<li><a href="#" data-href="#" class="navbar-menu__link">Program v kostce</a></li>
</ul>
</ui-navbar-subtitem>
</li>
<li class="navbar-menu__item">
<a href="#" data-href="#" class="navbar-menu__link">Strategické dokumenty</a>
</li> </li>
</ul> </ul>
</div> </div>
...@@ -120,7 +128,13 @@ ...@@ -120,7 +128,13 @@
<a href="#">Programové body</a> <a href="#">Programové body</a>
</li> </li>
<li> <li>
<a href="#">FAQ</a> <a href="{{ page.root_page.questions_page_url }}">FAQ</a>
</li>
<li>
<a href="#">Strategické dokumenty</a>
</li>
<li>
<a href="#">Individuální články</a>
</li> </li>
</ul> </ul>
</ui-footer-collapsible> </ui-footer-collapsible>
......
{% extends "elections2021/base.html" %} {% extends "elections2021/base.html" %}
{% load wagtailcore_tags wagtailimages_tags %}
{% block content %} {% block content %}
<article class="relative bg-lemon md:bg-split-color px-4 md:pl-8 md:pr-0 2xl:px-8 hero py-0 w-full ">
<div class="2xl:container w-auto bg-lemon md:pl-20 pr-0 grid lg:grid-rows-1 h-64 lg:grid-cols-7 items-center 2xl:mx-auto"> {% include "elections2021/_page_header.html" %}
<div class="lg:row-span-1 lg:col-span-4 order-1 md:pr-20">
<h1 class="head-alt-md sm:head-alt-lg pt-1 max-w-sm">{{ page.title }}</h1>
</div>
<div class="hidden lg:block lg:row-span-2 lg:col-span-3 order-2 h-full 2xl:absolute 2xl:right-0 2xl:w-1/3">
{% image page.photo fill-618x256 as img %}
<img class="object-cover w-full h-full" src="{{ img.url }}">
</div>
</div>
</article>
<div class="container container--default pt-8 lg:py-24"> <div class="container container--default pt-8 lg:py-24">
<div class="article-card-list grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 lg:gap-8"> <div class="article-card-list grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 lg:gap-8">
......
{% extends "elections2021/base.html" %}
{% load wagtailcore_tags %}
{% block content %}
{% include "elections2021/_page_header.html" %}
<div class="container container--default lg:pb-24">
<section class="py-16">
<div class="para">{{ page.intro|richtext }}</div>
<div class="text-center py-16">
<div id="progamswitch" class="switch mb-4">
<a id="switch_myths" class="switch__item switch__item--active">mýty o koalici</a>
<a id="switch_elections" class="switch__item">otázky k volbám</a>
</div>
</div>
{% if page.myths %}
<div id="faq_myths" class="space-y-1 faq-accordeon">
{% for block in page.myths %}
{% include_block block %}
{% endfor %}
</div>
{% endif %}
{% if page.elections %}
<div id="faq_elections" class="space-y-1 faq-accordeon hidden">
{% for block in page.elections %}
{% include_block block %}
{% endfor %}
</div>
{% endif %}
</section>
</div>
<script>
document.addEventListener("DOMContentLoaded", setMaxHeights);
window.addEventListener('resize', setMaxHeights);
function setMaxHeights() {
// set height for css transition
var accordeonRowBodies = document.getElementsByClassName('accordeon-row-body');
if (accordeonRowBodies !== null) {
for (var i = 0; i < accordeonRowBodies.length; i++) {
accordeonRowBodies[i].style.maxHeight = accordeonRowBodies[i].scrollHeight + "px";
};
}
}
function cleanOpenQuestions() {
var accordeonRows = document.getElementsByClassName('accordeon-row');
if (accordeonRows !== null) {
for (var i = 0; i < accordeonRows.length; i++) {
accordeonRows[i].classList.remove("accordeon-row--open");
};
}
}
var mythsSwitch = document.getElementById("switch_myths");
var electionsSwitch = document.getElementById("switch_elections");
var mythsFAQ = document.getElementById("faq_myths");
var electionsFAQ = document.getElementById("faq_elections");
var activeClass = "switch__item--active";
mythsSwitch.addEventListener('click', function(e) {
cleanOpenQuestions();
electionsSwitch.classList.remove(activeClass);
mythsSwitch.classList.add(activeClass);
mythsFAQ.classList.remove("hidden");
electionsFAQ.classList.add("hidden");
});
electionsSwitch.addEventListener('click', function(e) {
cleanOpenQuestions();
mythsSwitch.classList.remove(activeClass);
electionsSwitch.classList.add(activeClass);
electionsFAQ.classList.remove("hidden");
mythsFAQ.classList.add("hidden");
});
function switchQuestions() {
}
</script>
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment