diff --git a/elections2021/constants.py b/elections2021/constants.py index f927563a1c3012ff0774f0d2b20196813e52f9c1..c39b48e1d94d19d4a555c6316b680c7707c7d550 100644 --- a/elections2021/constants.py +++ b/elections2021/constants.py @@ -124,7 +124,6 @@ REGION_CHOICES = [(code, name) for code, slug, name, name2 in REGION_DATA] REGION_NAME_VARIANT = {code: name2 for code, slug, name, name2 in REGION_DATA} REGION_SLUGS = {slug: code for code, slug, name, name2 in REGION_DATA} REGION_OPTIONS = [(slug, name) for code, slug, name, name2 in REGION_DATA] -REGION_NAMES = [name for code, slug, name, name2 in REGION_DATA] PIRATES = "pirati" STAN = "stan" diff --git a/main/models.py b/main/models.py index f124bf7f07812e6c70fd1b68cc25e70c44ac9c7c..dee152ac197679b11bef51ea880a9c5ec3ad57d7 100644 --- a/main/models.py +++ b/main/models.py @@ -23,7 +23,7 @@ from wagtail.core.fields import RichTextField, StreamField from wagtail.core.models import Page from wagtailmetadata.models import MetadataPageMixin -from elections2021.constants import REGION_CHOICES, REGION_NAMES # pozor, import ze sousedního modulu +from elections2021.constants import REGION_CHOICES # pozor, import ze sousedního modulu from shared.const import RICH_TEXT_DEFAULT_FEATURES from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, @@ -163,24 +163,50 @@ class MainHomePage(MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, tweets_page = request.GET.get('page', 1) tweet_paginator = Paginator(Tweet.objects.order_by("-twitter_id"), self.max_items) context["tweet_list"] = tweet_paginator.get_page(tweets_page) - context["regions"] = REGION_NAMES + context["regions"] = REGION_CHOICES + last_month = timezone.now().today().replace(day=1) - timedelta(days=1) + first_day_of_last_month = last_month.replace(day=1) + + sorted_article_qs = MainArticlePage.objects.filter( + date__gt=first_day_of_last_month + ).order_by("-date") + context["article_data_list"] = sorted_article_qs[:3] return context def serve(self, request, *args, **kwargs): if not request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest': return super().serve(request, *args, **kwargs) - tweet_paginator = Paginator(Tweet.objects.order_by("-twitter_id"), self.max_items) - tweet_page = tweet_paginator.get_page(request.GET.get('page', 1)) - context = { - "tweet_list": tweet_page.object_list - } - html_content = render(request, 'main/includes/twitter_widget.html', context).content - data = { - 'html': html_content.decode("utf-8"), - 'last_page': tweet_page.paginator.num_pages, - } - return JsonResponse(data=data, safe=False) + if 'region' in request.GET: + last_month = timezone.now().today().replace(day=1) - timedelta(days=1) + first_day_of_last_month = last_month.replace(day=1) + if request.GET.get('region', None) == 'VSK': + sorted_article_qs = MainArticlePage.objects.filter( + date__gt=first_day_of_last_month + ).order_by("-date") + else: + sorted_article_qs = MainArticlePage.objects.filter( + date__gt=first_day_of_last_month, region=request.GET.get('region', None) + ).order_by("-date") + context = { + "article_data_list": sorted_article_qs[:3] + } + data = { + 'html': render(request, 'main/includes/small_article_preview.html', context).content.decode("utf-8") + } + return JsonResponse(data=data, safe=False) + else: + tweet_paginator = Paginator(Tweet.objects.order_by("-twitter_id"), self.max_items) + tweet_page = tweet_paginator.get_page(request.GET.get('page', 1)) + context = { + "tweet_list": tweet_page.object_list + } + html_content = render(request, 'main/includes/twitter_widget.html', context).content + data = { + 'html': html_content.decode("utf-8"), + 'last_page': tweet_page.paginator.num_pages, + } + return JsonResponse(data=data, safe=False) @cached_property def newsletter_subscribe_url(self): diff --git a/main/templates/main/blocks/regions_block.html b/main/templates/main/blocks/regions_block.html index 319fc11753d62b7c7d2e643ca1611afe006f54bb..a602cac55d46455c2568dba4874ea9ef0097491e 100644 --- a/main/templates/main/blocks/regions_block.html +++ b/main/templates/main/blocks/regions_block.html @@ -10,23 +10,36 @@ </div> <div class="w-12/12 lg:w-5/12"> <div class="flex flex-col justify-center"> - <div class="select"> - <select class="select__control form-field__control" value=""> - <option>Všechny kraje</option> + <div class="select search-filters"> + <select class="select__control form-field__control" name="search-type"> + <option value="VSK">Všechny kraje</option> {% for region in regions %} - <option>{{ region }}</option> + <option value="{{ region.0 }}">{{ region.1 }}</option> {% endfor %} </select> </div> - - {% for article_page in region_article_list %} - <div class="mb-3"> - {% include 'main/includes/small_article_preview.html' %} + <div class="mb-3 search-result-wrapper"> + {% include 'main/includes/small_article_preview.html' with article_data_list=article_data_list %} </div> - {% endfor %} </div> </div> </div> <div></div> </div> </div> +<script type="text/javascript"> + let $searchLinksWrapper = $('.search-filters'); + let links = $searchLinksWrapper.find('select'); + $(links).change(function (e) { + e.preventDefault(); + let $resultWrappers = $('.search-result-wrapper'); + $.ajax({ + method: "GET", + processData: false, + contentType: false, + url: "{{ page_url }}?region=" + $(this).val(), + }).then(function (data) { + $resultWrappers.html(data.html); + }); + }) +</script> \ No newline at end of file diff --git a/main/templates/main/includes/small_article_preview.html b/main/templates/main/includes/small_article_preview.html index 7e74731aba65e47f1dbaabfd2099fd9e4fbf52d3..bb9c229e954506c2c00debeba7b19250d8c0f0b4 100644 --- a/main/templates/main/includes/small_article_preview.html +++ b/main/templates/main/includes/small_article_preview.html @@ -1,16 +1,18 @@ -<div class="flex"> - <img - src="https://i.picsum.photos/id/523/132/132.jpg?hmac=XjW7KxLZNbta7gMDNvldHNGwA9XyxpjBFUGkJqrMR4o" - alt="" - class="mr-4 h-32 w-32" - > - <div class="flex flex-col justify-between items-start"> - <span class="text-sm text-green-500 lg:text-base"> - {{ article_page.date | date }} - </span> - <h4 class="text-sm uppercase lg:text-base"> - {{ article_page.title }} - </h4> - {% include 'main/includes/button_animated.html' with btn_link=article_page.url btn_text="Číst dále" %} - </div> -</div> +{% for article_page in article_data_list %} + <div class="flex"> + <img + src="https://i.picsum.photos/id/523/132/132.jpg?hmac=XjW7KxLZNbta7gMDNvldHNGwA9XyxpjBFUGkJqrMR4o" + alt="" + class="mr-4 h-32 w-32" + > + <div class="flex flex-col justify-between items-start"> + <span class="text-sm text-green-500 lg:text-base"> + {{ article_page.date | date }} + </span> + <h4 class="text-sm uppercase lg:text-base"> + {{ article_page.title }} + </h4> + {% include 'main/includes/button_animated.html' with btn_link=article_page.url btn_text="Číst dále" %} + </div> + </div> +{% endfor %}