feat: work on date menu

This commit is contained in:
bkfox
2023-11-02 21:54:15 +01:00
parent ab231e9a89
commit 87a2ee5a45
30 changed files with 5302 additions and 4116 deletions

View File

@ -5,7 +5,6 @@ __all__ = ["ArticleDetailView", "ArticleListView"]
class ArticleDetailView(PageDetailView):
has_sidebar = True
model = Article
def get_sidebar_queryset(self):

View File

@ -2,19 +2,12 @@ from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views.generic.base import ContextMixin, TemplateResponseMixin
from ..models import Page
__all__ = ("BaseView", "BaseAPIView")
class BaseView(TemplateResponseMixin, ContextMixin):
header_template_name = "aircox/widgets/header.html"
has_sidebar = True
"""Show side navigation."""
has_filters = False
"""Show filters nav."""
list_count = 5
"""Item count for small lists displayed on page."""
@property
def station(self):
@ -23,33 +16,14 @@ class BaseView(TemplateResponseMixin, ContextMixin):
# def get_queryset(self):
# return super().get_queryset().station(self.station)
def get_sidebar_queryset(self):
"""Return a queryset of items to render on the side nav."""
return (
Page.objects.select_subclasses().published().order_by("-pub_date")
)
def get_sidebar_url(self):
return reverse("page-list")
def get_page(self):
return None
def get_context_data(self, **kwargs):
kwargs.setdefault("station", self.station)
kwargs.setdefault("page", self.get_page())
kwargs.setdefault("has_filters", self.has_filters)
kwargs.setdefault("header_template_name", self.header_template_name)
has_sidebar = kwargs.setdefault("has_sidebar", self.has_sidebar)
if has_sidebar and "sidebar_object_list" not in kwargs:
sidebar_object_list = self.get_sidebar_queryset()
if sidebar_object_list is not None:
kwargs["sidebar_object_list"] = sidebar_object_list[
: self.list_count
]
kwargs["sidebar_list_url"] = self.get_sidebar_url()
if "audio_streams" not in kwargs:
kwargs["audio_streams"] = self.station.streams
@ -61,6 +35,11 @@ class BaseView(TemplateResponseMixin, ContextMixin):
)
kwargs["model"] = model
page = kwargs.get("page")
if page:
kwargs["title"] = page.display_title
kwargs["cover"] = page.cover and page.cover.url
return super().get_context_data(**kwargs)
def dispatch(self, *args, **kwargs):

View File

@ -13,7 +13,6 @@ class DiffusionListView(GetDateMixin, AttachedToMixin, BaseView, ListView):
"""View for timetables."""
model = Diffusion
has_filters = True
redirect_date_url = "diffusion-list"
attach_to_value = StaticPage.ATTACH_TO_DIFFUSIONS

View File

@ -14,7 +14,6 @@ class HomeView(BaseView, ListView):
queryset = Diffusion.objects.on_air().select_related("episode")
logs_count = 5
publications_count = 5
has_filters = False
def get_queryset(self):
return super().get_queryset().date(date.today())

View File

@ -72,7 +72,6 @@ class LogListView(AttachedToMixin, BaseView, LogListMixin, ListView):
`request.GET`, defaults to today)."""
redirect_date_url = "log-list"
has_filters = True
attach_to_value = StaticPage.ATTACH_TO_LOGS
def get_date(self):

View File

@ -71,7 +71,7 @@ class ParentMixin:
def get_context_data(self, **kwargs):
self.parent = kwargs.setdefault("parent", self.parent)
if self.parent is not None:
kwargs.setdefault("cover", self.parent.cover)
kwargs.setdefault("cover", self.parent.cover.url)
return super().get_context_data(**kwargs)

View File

@ -22,8 +22,6 @@ class BasePageListView(AttachedToMixin, ParentMixin, BaseView, ListView):
"""Base view class for BasePage list."""
template_name = "aircox/basepage_list.html"
item_template_name = "aircox/widgets/page_item.html"
has_sidebar = True
paginate_by = 30
has_headline = True
@ -41,20 +39,22 @@ class BasePageListView(AttachedToMixin, ParentMixin, BaseView, ListView):
)
def get_context_data(self, **kwargs):
kwargs.setdefault("item_template_name", self.item_template_name)
kwargs.setdefault("has_headline", self.has_headline)
context = super().get_context_data(**kwargs)
if not context.get("page") and not context.get("title"):
model = self.model._meta.verbose_name_plural
parent = context.get("parent")
if parent:
parent = parent.get_display_title()
title = _("{model} of {parent}")
else:
title = _("{model}")
context["title"] = title.format(model=model, parent=parent)
parent = context.get("parent")
if not context.get("page"):
if not context.get("title"):
model = self.model._meta.verbose_name_plural
if parent:
parent = parent.display_title
title = _("{model} of {parent}")
else:
title = _("{model}")
context["title"] = title.format(model=model, parent=parent)
if not context.get("cover") and parent and parent.cover:
context["cover"] = parent.cover.url
return context
@ -63,7 +63,13 @@ class BasePageDetailView(BaseView, DetailView):
template_name = "aircox/basepage_detail.html"
context_object_name = "page"
has_filters = False
def get_context_data(self, **kwargs):
if self.object.cover:
kwargs.setdefault("cover", self.object.cover.url)
if self.object.title:
kwargs.setdefault("title", self.object.display_title)
return super().get_context_data(**kwargs)
def get_queryset(self):
return super().get_queryset().select_related("cover")
@ -96,7 +102,6 @@ class PageListView(FiltersMixin, BasePageListView):
filterset_class = PageFilters
template_name = None
has_filters = True
categories = None
filters = None
@ -132,7 +137,6 @@ class PageDetailView(BasePageDetailView):
template_name = None
context_object_name = "page"
has_filters = False
def get_template_names(self):
return super().get_template_names() + ["aircox/page_detail.html"]