new applet structure for apps.billboard, incl. My Scrolls, Contacts & Most Recent applets; completely revamped _billboard.scss, tho some styling inconsistencies persist; ensured #id_billboard_applets_container inherited base styles found in _applets.scss; a pair of new migrations in apps.applets to support new applet models & fields; billboard gets its first ITs, new urls & views; pair of new FT classes in FTs.test_billboard
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import render
|
||||
from django.db.models import Max, Q
|
||||
from django.shortcuts import redirect, render
|
||||
|
||||
from apps.applets.models import Applet, UserApplet
|
||||
from apps.applets.utils import applet_context
|
||||
from apps.drama.models import GameEvent
|
||||
from apps.epic.models import GateSlot, Room, RoomInvite
|
||||
|
||||
@@ -13,12 +15,48 @@ def billboard(request):
|
||||
Q(gate_slots__gamer=request.user) |
|
||||
Q(invites__invitee_email=request.user.email, invites__status=RoomInvite.PENDING)
|
||||
).distinct().order_by("-created_at")
|
||||
|
||||
recent_room = (
|
||||
Room.objects.filter(
|
||||
Q(owner=request.user) | Q(gate_slots__gamer=request.user)
|
||||
)
|
||||
.annotate(last_event=Max("events__timestamp"))
|
||||
.filter(last_event__isnull=False)
|
||||
.order_by("-last_event")
|
||||
.distinct()
|
||||
.first()
|
||||
)
|
||||
recent_events = (
|
||||
recent_room.events.select_related("actor").order_by("-timestamp")[:10]
|
||||
if recent_room else []
|
||||
)
|
||||
|
||||
return render(request, "apps/billboard/billboard.html", {
|
||||
"my_rooms": my_rooms,
|
||||
"recent_room": recent_room,
|
||||
"recent_events": recent_events,
|
||||
"viewer": request.user,
|
||||
"applets": applet_context(request.user, "billboard"),
|
||||
"page_class": "page-billboard",
|
||||
})
|
||||
|
||||
|
||||
@login_required(login_url="/")
|
||||
def toggle_billboard_applets(request):
|
||||
checked = request.POST.getlist("applets")
|
||||
for applet in Applet.objects.filter(context="billboard"):
|
||||
UserApplet.objects.update_or_create(
|
||||
user=request.user,
|
||||
applet=applet,
|
||||
defaults={"visible": applet.slug in checked},
|
||||
)
|
||||
if request.headers.get("HX-Request"):
|
||||
return render(request, "apps/billboard/_partials/_applets.html", {
|
||||
"applets": applet_context(request.user, "billboard"),
|
||||
})
|
||||
return redirect("billboard:billboard")
|
||||
|
||||
|
||||
@login_required(login_url="/")
|
||||
def room_scroll(request, room_id):
|
||||
room = Room.objects.get(id=room_id)
|
||||
@@ -27,5 +65,5 @@ def room_scroll(request, room_id):
|
||||
"room": room,
|
||||
"events": events,
|
||||
"viewer": request.user,
|
||||
"page_class": "page-billboard",
|
||||
"page_class": "page-billscroll",
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user