diff --git a/main/models.py b/main/models.py index a02fb785fb493ea6f037e07bf39ae72e74f95ca8..6f9546a3c5e7732053fc4ac7f2ca4ef6295b269c 100644 --- a/main/models.py +++ b/main/models.py @@ -310,7 +310,7 @@ class MainArticlesPage( first_day_of_last_month = last_month.replace(day=1) sorted_article_qs = MainArticlePage.objects.filter( - date__gt=first_day_of_last_month + date__gt=first_day_of_last_month, article_type=ARTICLE_TYPES.WORK_TIMELINE ).order_by("-date") article_data_list = [] @@ -336,7 +336,7 @@ class MainArticlesPage( ctx = super().get_context(request, args, kwargs) article_list = self.get_article_data_list(1) ctx["article_data_list"] = article_list - ctx["show_next_articles"] = MainArticlePage.objects.count() > len(article_list) + ctx["show_next_articles"] = MainArticlePage.objects.filter(article_type=ARTICLE_TYPES.WORK_TIMELINE).count() > len(article_list) return ctx def get_articles_response(self, request): @@ -345,8 +345,8 @@ class MainArticlesPage( "article_data_list": article_list } data = { - 'html': render(request, 'main/blocks/articles_block.html', context).content.decode("utf-8"), - 'last_article': article_list[-1] == MainArticlePage.objects.all().order_by('-date').last() + 'html': render(request, 'main/blocks/articles_timeline_block.html', context).content.decode("utf-8"), + 'last_article': article_list[-1] == MainArticlePage.objects.filter(article_type=ARTICLE_TYPES.WORK_TIMELINE).order_by('-date').last() } return JsonResponse(data=data, safe=False) diff --git a/main/templates/main/blocks/articles_article_list_block.html b/main/templates/main/blocks/articles_article_list_block.html new file mode 100644 index 0000000000000000000000000000000000000000..ea43fa6d4ef8204a6a0bd6b10009ce70213ccbba --- /dev/null +++ b/main/templates/main/blocks/articles_article_list_block.html @@ -0,0 +1,14 @@ +<section class="grid-container mb-4 justify-start xl:mb-14"> + <div class="grid-content-with-right-side"> + <div class="leading-6"> + <h2 class="head-4xl mb-5 xl:hidden"> + Články + </h2> + {{> molecules-person-article-preview }} + {{> molecules-person-article-preview }} + </div> + <div class="flex justify-center"> + {{> atoms-button-animated(btn-text: "Zobrazit další", classes-btn-hidden: "bg-black") }} + </div> + </div> +</section> diff --git a/main/templates/main/blocks/articles_block.html b/main/templates/main/blocks/articles_block.html deleted file mode 100644 index 0946fd767187bffa672df29961311a1cb06cf00b..0000000000000000000000000000000000000000 --- a/main/templates/main/blocks/articles_block.html +++ /dev/null @@ -1,28 +0,0 @@ -{% for month_article_data in article_data_list %} - <div class="mb-4"> - <h3 class="head-7xl mb-4 xl:hidden"> - {{ month_article_data.month_text }} - </h3> - <div class="flex flex-col justify-between xl:flex-row"> - <div class="xl:pt-8"> - {% for article_page in month_article_data.left_column %} - {% include 'main/includes/work_article_preview.html' %} - {% empty %} - <div class="p-7 flex flex-col max-w-xl mb-8" /> - {% endfor %} - </div> - <div class="relative border border-violet-400 mx-8 hidden xl:block"> - <div class="absolute bg-violet-400 p-1 text-white font-bold" style="transform: translateX(-50%); top: -1rem"> - {{ month_article_data.month_text }} - </div> - </div> - <div class="xl:pt-14"> - {% for article_page in month_article_data.right_column %} - {% include 'main/includes/work_article_preview.html' %} - {% empty %} - <div class="p-7 flex flex-col max-w-xl mb-8" /> - {% endfor %} - </div> - </div> - </div> -{% endfor %} \ No newline at end of file diff --git a/main/templates/main/blocks/articles_timeline_block.html b/main/templates/main/blocks/articles_timeline_block.html new file mode 100644 index 0000000000000000000000000000000000000000..f192f8ed8d55db41c6d92f6957b1c3ed17dc924e --- /dev/null +++ b/main/templates/main/blocks/articles_timeline_block.html @@ -0,0 +1,29 @@ +{% for month_article_data in article_data_list %} + <div class="mb-4"> + <h2 class="head-4xl mb-5 xl:hidden"> + {{ month_article_data.month_text }} + </h2> + <div class="article-timeline-grid justify-between"> + <div class="article-timeline-grid__left-article xl:pt-8"> + {% for article_page in month_article_data.left_column %} + {% include 'main/includes/work_article_preview.html' %} + {% empty %} + <div class="p-7 flex flex-col max-w-xl mb-8"/> + {% endfor %} + </div> + <div class="article-timeline-grid__timeline relative border border-violet-400 hidden xl:block"> + <div class="article-timeline--month absolute bg-violet-400 p-1 text-white font-bold"> + {{ month_article_data.month_text }} + + </div> + </div> + <div class="article-timeline-grid__right-article xl:pt-14"> + {% for article_page in month_article_data.right_column %} + {% include 'main/includes/work_article_preview.html' %} + {% empty %} + <div class="p-7 flex flex-col max-w-xl mb-8"/> + {% endfor %} + </div> + </div> + </div> +{% endfor %} \ No newline at end of file diff --git a/main/templates/main/main_articles_page.html b/main/templates/main/main_articles_page.html index 863661a7912957e8d44b8ff500549df7b5d7023f..264e5b223575a768423d1ca57d37b4b363177099 100644 --- a/main/templates/main/main_articles_page.html +++ b/main/templates/main/main_articles_page.html @@ -2,65 +2,80 @@ {% load wagtailcore_tags wagtailimages_tags shared_filters %} {% block content %} - {% include 'main/includes/layout/simple_page_header.html' %} + {% include 'main/includes/layout/simple_page_header.html' %} - <main role="main"> - <div class="grid-container mb-2 xl:mb-12"> - <div class="grid-content leading-6"> - <h2 class="head-xl mb-2"> - {{ page.perex }} - </h2> - <h2 class="head-xl mb-2"> - Projděte si archiv tiskových zpráv a souhrn našich nejvýraznějších aktivit - </h2> - </div> - </div> - - <div class="grid-container article-section"> - <div class="grid-full mb-8"> - <div id="searchResultWrapper"> - {% include 'main/blocks/articles_block.html' with article_data_list=article_data_list %} + <main role="main"> + <div class="grid-container mb-2 xl:mb-12"> + <div class="grid-content leading-6"> + <h2 class="head-xl mb-2"> + {{ page.perex }} + </h2> + <h2 class="head-xl mb-2"> + Projděte si archiv tiskových zpráv a souhrn našich nejvýraznějších aktivit + </h2> + </div> </div> - {% if show_next_articles %} - <div class="text-center"> - <a - onclick="showMoreArticles(event, this)" - href="#" - data-url="{{ page_url }}?months=" - data-months="2" - class="btn btn__slide__wrap" - > - <span class="btn text-sm bg-black text-white w-32 lg:text-base"> - Zobrazit další - </span> - <span class="btn text-sm bg-white text-black w-32 lg:text-base"> - Zobrazit další - </span> - </a> - </div> - </div> - - {% endif %} - </div> - </main> + <div class="__js-root"> + <ui-view-provider :initial="{timeline: true, articles: false}" :sync-location="true" + v-slot="{ isCurrentView, toggleView }"> + <div class="grid-container article-section mb-8"> + <div class="grid-full"> + <div class="switch"> + <a @click="toggleView('timeline')" class="switch__item" + :class="{'switch__item--active': isCurrentView('timeline')}">Poslanecká sněmovna</a> + <a @click="toggleView('articles')" class="switch__item" + :class="{'switch__item--active': isCurrentView('articles')}">Vláda</a> + </div> + </div> + </div> + <template v-if="isCurrentView('timeline')"> + <div class="mt-20"> + <div class="grid-container article-section"> + <div class="grid-full mb-8"> + <div id="searchResultWrapper"> + {% include 'main/blocks/articles_timeline_block.html' with article_data_list=article_data_list %} + </div> + </div> + <div class="flex justify-center"> + <a + onclick="showMoreArticles(event, this)" + href="#" + data-url="{{ page_url }}?months=" + data-months="2" + class="btn btn__slide__wrap" + > + <span class="btn text-sm bg-black text-white w-32 lg:text-base"> + Zobrazit další + </span> + <span class="btn text-sm bg-white text-black w-32 lg:text-base"> + Zobrazit další + </span> + </a> + </div> + </div> + </div> + </template> + <template v-if="isCurrentView('articles')"> - <script type="text/javascript"> - async function showMoreArticles(event, btn) { - event.preventDefault() - - const searchResultWrapper = document.getElementById('searchResultWrapper') - const url = btn.getAttribute('data-url') + btn.getAttribute('data-months') + </template> + </ui-view-provider> + </div> + </main> - const response = await fetch(url, { - method: "GET", - headers: {"X-Requested-With": "XMLHttpRequest"}, - }) - const data = await response.json() + <script type="text/javascript"> + async function showMoreArticles(event, btn) { + event.preventDefault() - if (data.last_article) { btn.hide() } + const searchResultWrapper = document.getElementById('searchResultWrapper') + const url = btn.getAttribute('data-url') + btn.getAttribute('data-months') - searchResultWrapper.innerHTML = data.html - btn.setAttribute('data-months', parseInt(btn.getAttribute('data-months')) + 1) - } - </script> + const response = await fetch(url, { + method: "GET", + headers: {"X-Requested-With": "XMLHttpRequest"}, + }) + const data = await response.json() + searchResultWrapper.innerHTML = data.html + btn.setAttribute('data-months', parseInt(btn.getAttribute('data-months')) + 1) + } + </script> {% endblock content %}