Browse Source

aggressive caching

subDesTagesMitExtraKaese 2 years ago
parent
commit
2a474ef946

+ 7 - 7
locale/de/LC_MESSAGES/django.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-12-21 18:02+0000\n"
+"POT-Creation-Date: 2022-12-21 19:07+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -121,15 +121,15 @@ msgstr "Ereignis nicht gefunden"
 msgid "Event"
 msgstr "Ereignis"
 
-#: zitap/templates/zitap/event.html:37
+#: zitap/templates/zitap/event.html:38
 msgid "Update Slots"
 msgstr "Zeitslot aktualisieren"
 
-#: zitap/templates/zitap/event.html:40 zitap/templates/zitap/my-events.html:32
+#: zitap/templates/zitap/event.html:41 zitap/templates/zitap/my-events.html:32
 msgid "Logout"
 msgstr "Abmelden"
 
-#: zitap/templates/zitap/event.html:63 zitap/views.py:79
+#: zitap/templates/zitap/event.html:64 zitap/views.py:87
 msgid "Login to Update Slots"
 msgstr "Anmelden, um Zeitslots zu aktualisieren"
 
@@ -148,16 +148,16 @@ msgstr "Meine Ereignisse"
 msgid "Login"
 msgstr "Anmelden"
 
-#: zitap/views.py:50
+#: zitap/views.py:54
 msgid "Could not create event. Please try again."
 msgstr "Konnte Ereignis nicht erstellen. Bitte versuchen Sie es erneut."
 
-#: zitap/views.py:77
+#: zitap/views.py:85
 #, fuzzy
 #| msgid "Event"
 msgid "Login to My Events"
 msgstr "Anmelden, um meine Ereignisse anzuzeigen"
 
-#: zitap/views.py:96
+#: zitap/views.py:104
 msgid "Username already exists"
 msgstr "Benutzername existiert bereits"

+ 19 - 4
zitap/static/zitap/js/live-updates.js

@@ -7,7 +7,7 @@ window.addEventListener("load", function()
   const gridSlots = occupancyGrid.getElementsByClassName("slot")
   
   const endpoint = `${window.location.href}/slots`
-  setTimeout(updateSlots, 1000)
+  updateSlots()
 
   function updateSlots()
   {
@@ -18,20 +18,37 @@ window.addEventListener("load", function()
   function setCheckboxes(data)
   {
     let maxParticipants = 0
+    const username = document.getElementById("username")
     for(let i=0; i<gridSlots.length; i++)
     {
       const slot = document.getElementById(`grid_slot_${i}`)
       let participants = []
       for(let participant in data)
       {
-        if(data[participant][i] == '1')
+        if(data[participant][i] === '1')
+        {
           participants.push(participant)
+        }
+      }
+      if(username && data[username.value]) 
+      {
+        if(data[username.value][i] === '1')
+        {
+          slot.classList.add("my-slot")
+          document.getElementsByName(`slot_${i}`)[0].checked = true
+        }
+        else
+        {
+          slot.classList.remove("my-slot")
+          document.getElementsByName(`slot_${i}`)[0].checked = false
+        }
       }
       slot.style.setProperty("--color-index", participants.length)
       slot.title = `${slot.title.split('\n')[0]}\n${participants.join(", ")}`
       maxParticipants = Math.max(participants.length, maxParticipants)
     }
     occupancyGrid.style.setProperty("--color-count", maxParticipants)
+    this.document.getElementById("update-button").style.display = "none"
   }
 
   onCheckedChanged = function(checkables) {
@@ -45,6 +62,4 @@ window.addEventListener("load", function()
         body: data,
     }).then(response => response.json()).then(setCheckboxes)
   }
-
-  //this.document.getElementById("update-button").style.display = "none"
 })

+ 1 - 0
zitap/templates/zitap/event.html

@@ -34,6 +34,7 @@
             {% endfor %}
             </div>
             {{ form.non_field_errors }}
+            <input type="hidden" id="username" value="{{ user.username }}">
         <input type="submit" value="{% trans 'Update Slots' %}" id="update-button">
     </form>
     <button class="logout" onclick="location.href='{% url 'logout' url=event.url %}'">

+ 6 - 0
zitap/views.py

@@ -5,6 +5,8 @@ from django.http import HttpResponseNotFound, HttpResponseRedirect, JsonResponse
 from django.shortcuts import render
 from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
 from django.views.decorators.csrf import csrf_exempt
+from django.views.decorators.vary import vary_on_cookie
+from django.views.decorators.cache import cache_page
 from django.utils.translation import gettext as _
 from django.contrib.auth.models import User
 
@@ -12,6 +14,7 @@ from .forms import CreateEventForm, LoginForm, UpdateSlotsForm
 from .models import Event, Participant, Date
 from .helpers import slots2string, string2slots, get_slot_count, slots2grid
 
+@cache_page(60 * 15)
 def index(request):
     return render(request, 'zitap/index.html')
 
@@ -26,6 +29,7 @@ def my_events(request):
 def about(request):
     return render(request, 'zitap/about.html')
 
+@cache_page(60 * 15)
 def create_event(request):
     if request.method == 'POST':
         form = CreateEventForm(request.POST)
@@ -52,6 +56,8 @@ def create_event(request):
         form = CreateEventForm()
     return render(request, 'zitap/create-event.html', {'form': form})
 
+@cache_page(60 * 15)
+@vary_on_cookie
 def event(request, url):
     try:
         event = Event.objects.prefetch_related('date_set', 'participant_set', 'participant_set__user').get(url=url)