From 34b092f479c34dd27a84d35980922bc51d19f09e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Thu, 25 Jan 2024 15:50:28 +0100
Subject: [PATCH] reassign event listeners, make date ignoreable

---
 .../templates/lectures/includes/lecture.html  | 10 ++-
 lectures/templates/lectures/view_lecture.html | 19 +++--
 lectures/views.py                             | 10 ++-
 static_src/view_group_lectures.js             | 85 +++++++++++++------
 4 files changed, 86 insertions(+), 38 deletions(-)

diff --git a/lectures/templates/lectures/includes/lecture.html b/lectures/templates/lectures/includes/lecture.html
index eb8469b..97b6de3 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 28217eb..06b7189 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 c1961a5..34cb3c3 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 aa05271..1f21a36 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()
             }
         )
     }
-- 
GitLab