Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for nkdsu.apps.vote.context_processors
from typing import Any
from django.db.models import QuerySet
from django.http import HttpRequest
from django.urls import reverse
from .elfs import is_elf
from .forms import DarkModeForm
from .models import Request , Show , Track
from .utils import indefinitely
[docs]
def get_sections ( request ):
active_section = None
try :
most_recent_track = Track . objects . public () . latest ( 'revealed' )
except Track . DoesNotExist :
most_recent_track = None
if (
hasattr ( request , 'resolver_match' )
and hasattr ( request . resolver_match , 'func' )
and request . resolver_match . func . __closure__
):
for cell in request . resolver_match . func . __closure__ :
thing = cell . cell_contents
if hasattr ( thing , 'section' ):
active_section = thing . section
break
return [
{ 'name' : name , 'url' : url , 'active' : name == active_section }
for name , url in [
( 'home' , reverse ( 'vote:index' )),
( 'browse' , reverse ( 'vote:browse' )),
(
'new tracks' ,
(
most_recent_track . show_revealed () . get_revealed_url ()
if most_recent_track
else None
),
),
( 'roulette' , reverse ( 'vote:roulette' )),
( 'stats' , reverse ( 'vote:stats' )),
( 'discord' , 'https://discord.nekodesu.radio/' ),
( 'donate' , 'https://www.patreon.com/NekoDesu' ),
( 'etc' , 'https://nekodesu.radio/' ),
]
if url
]
[docs]
def get_pending_requests ( request : HttpRequest ) -> QuerySet [ Request ]:
if not is_elf ( request . user ):
return Request . objects . none ()
return Request . objects . filter (
shelvings__isnull = True ,
filled__isnull = True ,
) . exclude (
shelvings__isnull = False ,
shelvings__disabled_at__isnull = True ,
)
[docs]
def get_parent ( request : HttpRequest ) -> str :
return 'base.html'
[docs]
def get_dark_mode ( request : HttpRequest ):
return request . session . get ( 'dark_mode' )
[docs]
def nkdsu_context_processor ( request : HttpRequest ) -> dict [ str , Any ]:
"""
Add common stuff to context.
"""
current_show = Show . current ()
return {
'current_show' : current_show ,
'vote_show' : current_show ,
'pending_requests' : get_pending_requests ( request ),
'sections' : get_sections ( request ),
'indefinitely' : indefinitely ,
'parent' : get_parent ( request ),
'dark_mode' : get_dark_mode ( request ),
'dark_mode_form' : DarkModeForm (),
}