radiocampus: center selected date in timetables

This commit is contained in:
Chris Tactic 2024-09-19 14:50:11 +02:00
parent acfd5c49b7
commit 4adacd1f80
3 changed files with 69 additions and 21 deletions

View File

@ -12,23 +12,13 @@
{% block breadcrumbs %} {% block breadcrumbs %}
{% if parent and model.list_url_name %} {% if page and model.list_url_name %}
{% include "./widgets/breadcrumbs.html" with page=parent %}
<a href="{% url model.list_url_name %}">{{ model|verbose_name:True }}</a>
{% elif page and model.list_url_name %}
<a href="{% url model.list_url_name %}">{{ page.title }}</a> <a href="{% url model.list_url_name %}">{{ page.title }}</a>
{% if category %} {% if category %}
<a href="{% url request.resolver_match.url_name category_slug=category.slug %}"> <a href="{% url request.resolver_match.url_name category_slug=category.slug %}">
{{ category.title }} {{ category.title }}
</a> </a>
{% endif %} {% endif %}
{% else %}
<a href="{% url request.resolver_match.url_name %}">{{ model|verbose_name:True }}</a>
{% if category %}
<a href="{% url request.resolver_match.url_name category_slug=category.slug %}">
{{ category.title }}
</a>
{% endif %}
{% endif %} {% endif %}
<a href="{% url "timetable-list" date=date %}">{{ date|date:"l d F Y" }}</a> <a href="{% url "timetable-list" date=date %}">{{ date|date:"l d F Y" }}</a>
{% endblock %} {% endblock %}
@ -38,7 +28,7 @@
{% with list_class="grid" %} {% with list_class="grid" %}
<section class="container clear-both list grid list-grille list-home list-emissions" role="list"> <section class="container clear-both list grid list-grille list-home list-emissions" role="list">
<section class="container" style="display:flex;justify-content:flex-end;min-height:600px"> <section class="container" style="display:flex;justify-content:flex-end;min-height:600px">
<div style="max-width:600px;"> <div>
{% block list %} {% block list %}
{% with object_list=object_list timetable=True %} {% with object_list=object_list timetable=True %}
{% with widget|default:"item" as widget %} {% with widget|default:"item" as widget %}

View File

@ -2,25 +2,39 @@ from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.urls import include, path from django.urls import include, path
from django.utils.translation import gettext_lazy as _
import aircox.urls from aircox.urls import urls
import aircox_streamer.urls import aircox_streamer.urls
from radiocampus.views import TimeTableView from radiocampus.views import HomeTimeTableView, TimeTableView
urlpatterns = [ urlpatterns = [
*aircox.urls.urls,
path("streamer/", include((aircox_streamer.urls.urls, "aircox_streamer"), namespace="streamer")), path("streamer/", include((aircox_streamer.urls.urls, "aircox_streamer"), namespace="streamer")),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("accounts/", include("django.contrib.auth.urls")), path("accounts/", include("django.contrib.auth.urls")),
path("filer/", include("filer.urls")), path("filer/", include("filer.urls")),
] ]
for i, pa in enumerate(urlpatterns): for url in urls:
if "name" in pa.__dict__.keys() and pa.name == "home": if "name" in url.__dict__.keys():
urlpatterns.pop(i) if url.name == "home" or url.name == "timetable-list":
continue
urlpatterns.append(url)
urlpatterns.append(path("", TimeTableView.as_view(), name="home"))
urlpatterns.append(path("", HomeTimeTableView.as_view(), name="home"))
urlpatterns.extend(
[
path(_("timetable/"), TimeTableView.as_view(), name="timetable-list"),
path(
_("timetable/<date:date>/"),
TimeTableView.as_view(),
name="timetable-list",
),
]
)
if settings.DEBUG: if settings.DEBUG:
from debug_toolbar.toolbar import debug_toolbar_urls from debug_toolbar.toolbar import debug_toolbar_urls

View File

@ -1,7 +1,51 @@
import datetime
from django.urls import reverse
from aircox.models import Diffusion, Log, StaticPage
from aircox.views.diffusion import TimeTableView as AircoxTimeTableView from aircox.views.diffusion import TimeTableView as AircoxTimeTableView
from aircox.views.diffusion import BaseDiffusionListView
from aircox.views.mixins import GetDateMixin
from aircox.views.page import attach
__all__ = "TimeTableView" __all__ = ("HomeTimeTableView", "TimeTableView")
class TimeTableView(AircoxTimeTableView): class HomeTimeTableView(AircoxTimeTableView):
template_name = "aircox/home.html" template_name = "aircox/home.html"
@attach
class TimeTableView(GetDateMixin, BaseDiffusionListView):
model = Diffusion
redirect_date_url = "timetable-list"
attach_to_value = StaticPage.Target.TIMETABLE
template_name = "aircox/timetable_list.html"
def get_date(self, param="date"):
date = super().get_date(param)
return date if date is not None else datetime.date.today()
def get_logs(self, date):
return Log.objects.on_air().date(self.date).filter(track__isnull=False)
def get_queryset(self):
return super().get_queryset().date(self.date)
@classmethod
def get_secondary_nav(cls):
date = datetime.date.today()
start = date - datetime.timedelta(days=3)
dates = [start + datetime.timedelta(days=i) for i in range(0, 7)]
return tuple((date.strftime("%A %d"), reverse("timetable-list", kwargs={"date": date})) for date in dates)
def get_context_data(self, object_list=None, **kwargs):
start = self.date - datetime.timedelta(days=3)
dates = [start + datetime.timedelta(days=i) for i in range(0, 7)]
if object_list is None:
logs = self.get_logs(self.date)
object_list = Log.merge_diffusions(logs, self.object_list, group_logs=True)
object_list = list(reversed(object_list))
return super().get_context_data(date=self.date, dates=dates, object_list=object_list, **kwargs)