diff --git a/lectures/templates/lectures/includes/lecture.html b/lectures/templates/lectures/includes/lecture.html index eb8469b6427f770f0f359c57490f1deca99b37bd..97b6de33de243905b2c384cd306f4e97272d2039 100644 --- a/lectures/templates/lectures/includes/lecture.html +++ b/lectures/templates/lectures/includes/lecture.html @@ -18,11 +18,13 @@ {{ lecture.name }} </h2> - <span class="flex gap-2 mb-4"> - <span> - <i class="ico--clock mr-1"></i> {{ lecture.timestamp }} + {% if lecture.timestamp %} + <span class="flex gap-2 mb-4"> + <span> + <i class="ico--clock mr-1"></i> {{ lecture.timestamp }} + </span> </span> - </span> + {% endif %} {% if lecture.description %} <div class="prose max-w-none"> diff --git a/lectures/templates/lectures/view_lecture.html b/lectures/templates/lectures/view_lecture.html index 28217eb76ea1777b84f14c8f7ffe7ac9d65ab705..06b71893afc41680276d86b2072e4fd84b25b9ef 100644 --- a/lectures/templates/lectures/view_lecture.html +++ b/lectures/templates/lectures/view_lecture.html @@ -55,15 +55,18 @@ {% endif %} <div class="flex flex-col gap-2 my-4 py-4 border-y border-gray-200"> - <div class="flex justify-between gap-2 text-lg text-gray-600"> - <div class="flex gap-2 items-center"> - <i class="ico--clock"></i> - <span>Datum konání</span> - </div> - <div> - {{ lecture.timestamp }} + {% if lecture.timestamp %} + <div class="flex justify-between gap-2 text-lg text-gray-600"> + <div class="flex gap-2 items-center"> + <i class="ico--clock"></i> + <span>Datum konání</span> + </div> + <div> + {{ lecture.timestamp }} + </div> </div> - </div> + {% endif %} + <div class="flex justify-between gap-2 text-lg text-gray-600"> <div class="flex gap-2 items-center"> <i class="ico--users"></i> diff --git a/lectures/views.py b/lectures/views.py index c1961a545114126363a6da69f1cc0cee3c0138da..34cb3c39f99f0c82e1b29b9be52aa4ec07724e49 100644 --- a/lectures/views.py +++ b/lectures/views.py @@ -157,8 +157,11 @@ def view_group_lectures(request, group_id: int): past_lectures = ( Lecture.objects.filter( - lecture_group_types__group=group, - timestamp__lt=timestamp_starting_separator, + models.Q(lecture_group_types__group=group) + & models.Q( + models.Q(timestamp__lt=timestamp_starting_separator) + | models.Q(timestamp__isnull=True) + ) ) .order_by("category") .all() @@ -212,6 +215,9 @@ def view_group_lectures(request, group_id: int): has_next_timeline_years = False for lecture in all_lectures: + if lecture.timestamp is None: + continue + if not has_previous_timeline_years and lecture.timestamp.year < current_year: has_previous_timeline_years = True diff --git a/static_src/view_group_lectures.js b/static_src/view_group_lectures.js index aa05271e51d2514cfb62ba47564d29f35b212d37..1f21a36b850f69a613816c60f62847fcfbf0109d 100644 --- a/static_src/view_group_lectures.js +++ b/static_src/view_group_lectures.js @@ -15,6 +15,37 @@ const showTimelineYear = () => { ); } +const assignOpenerListeners = () => { + $(".__lecture-category").on( + "click", + event => { + if (event.currentTarget.dataset.isOpen === 'true') { + $(event.currentTarget). + find(".__lecture-category-opener"). + addClass("ico--chevron-down"). + removeClass("ico--chevron-up") + + event.currentTarget.dataset.isOpen = 'false' + + $(event.currentTarget). + find(".__lecture-category-content"). + addClass("hidden") + } else { + $(event.currentTarget). + find(".__lecture-category-opener"). + removeClass("ico--chevron-down"). + addClass("ico--chevron-up") + + event.currentTarget.dataset.isOpen = 'true' + + $(event.currentTarget). + find(".__lecture-category-content"). + removeClass("hidden") + } + } + ) +} + $(window).ready( () => { window.nextTimelineYear = () => { @@ -27,32 +58,38 @@ $(window).ready( showTimelineYear(); } - $(".__lecture-category").on( + assignOpenerListeners() + + // Make sure our listeners exist + setInterval( + () => { + const currentUrl = window.location.href; + + if (currentUrl != previousUrl) { + // URL changed + previousUrl = currentUrl; + + const params = new Proxy( + new URLSearchParams(window.location.search), { + get: (searchParams, prop) => searchParams.get(prop), + } + ) + + if ( + params.view !== null + && params.view === "recordings" + ) { + assignOpenerListeners() + } + } + }, + 100 + ) + + $(".switch__item").on( "click", event => { - if (event.currentTarget.dataset.isOpen === 'true') { - $(event.currentTarget). - find(".__lecture-category-opener"). - addClass("ico--chevron-down"). - removeClass("ico--chevron-up") - - event.currentTarget.dataset.isOpen = 'false' - - $(event.currentTarget). - find(".__lecture-category-content"). - addClass("hidden") - } else { - $(event.currentTarget). - find(".__lecture-category-opener"). - removeClass("ico--chevron-down"). - addClass("ico--chevron-up") - - event.currentTarget.dataset.isOpen = 'true' - - $(event.currentTarget). - find(".__lecture-category-content"). - removeClass("hidden") - } + assignOpenerListeners() } ) }