Voting update

Nu met 100% meer mogelijkheid tot stemmen. Top.
This commit is contained in:
2024-02-07 00:04:01 +01:00
parent d1aabd53dc
commit 0f5090cadc
10 changed files with 82 additions and 14 deletions
+3
View File
@@ -24,6 +24,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django_htmx',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@@ -34,6 +35,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_htmx.middleware.HtmxMiddleware',
] ]
ROOT_URLCONF = 'muzak.urls' ROOT_URLCONF = 'muzak.urls'
@@ -90,6 +92,7 @@ OIDC_OP_TOKEN_ENDPOINT = os.getenv('OIDC_OP_TOKEN_ENDPOINT')
OIDC_OP_USER_ENDPOINT = os.getenv('OIDC_OP_USER_ENDPOINT') OIDC_OP_USER_ENDPOINT = os.getenv('OIDC_OP_USER_ENDPOINT')
LOGIN_REDIRECT_URL = "/" LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/"
LOGIN_URL = "/"
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC' TIME_ZONE = 'UTC'
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
<html>
<head>
{% load static %}
<script src="{% static 'js/htmx.min.js' %}" defer></script>
</head>
<body>
<header>
<nav>
<ul hx-boost="true">
<li><a href="{% url 'vote' %}">Stemmen</a></li>
<li><a href="{% url 'nominate' %}">Nomineren</a></li>
<li><a href="/">Statistieken</a></li>
</ul>
</nav>
<h1>{% block page-name %}Muzak{% endblock %}</h1>
</header>
<main>
{% block main-content %}{% endblock %}
</main>
</body>
</html>
+13 -9
View File
@@ -1,9 +1,13 @@
{% if user.is_authenticated %} {% extends "Base.html" %}
<p>Current user: {{ user.email }}</p>
<form action="{% url 'oidc_logout' %}" method="post"> {% block main-content %}
{% csrf_token %} {% if user.is_authenticated %}
<input type="submit" value="logout"> <p>Current user: {{ user.email }}</p>
</form> <form action="{% url 'oidc_logout' %}" method="post">
{% else %} {% csrf_token %}
<a href="{% url 'oidc_authentication_init' %}">Login</a> <input type="submit" value="logout">
{% endif %} </form>
{% else %}
<a href="{% url 'oidc_authentication_init' %}">Login</a>
{% endif %}
{% endblock %}
+4
View File
@@ -1,6 +1,10 @@
{% extends "Base.html" %}
{% block main-content %}
<h2>Nominate</h2> <h2>Nominate</h2>
<form method="post"> <form method="post">
{% csrf_token %} {% csrf_token %}
<input type="text" name="spotify_link" placeholder="Spotify-link"> <input type="text" name="spotify_link" placeholder="Spotify-link">
<input type="submit" value="OK"> <input type="submit" value="OK">
</form> </form>
{% endblock %}
+6
View File
@@ -0,0 +1,6 @@
<div id="vote-box" hx-boost="true" hx-target="#vote-box">
<iframe src="https://open.spotify.com/embed/track/{{ id }}"
class="play-sample" width="300" height="380" frameborder="0" allowtransparency="true"
allow="encrypted-media"></iframe>
<a href="{% url 'vote-track'%}">Ja</a> | <a href="{% url 'vote-track' %}">Nee</a>
</div>
+12
View File
@@ -0,0 +1,12 @@
{% extends "Base.html" %}
{% block main-content %}
{% for song in songs %}
{{ song }}
{% endfor %}
<div hx-get="{% url 'vote-track' %}" hx-trigger="load">
etst
</div>
{% endblock %}
+4 -3
View File
@@ -2,8 +2,9 @@ from django.urls import path
from . import views from . import views
urlpatterns = [ urlpatterns = [
path('track/<str:spotify_id>', views.TrackDetailView.as_view()), path('track/<str:spotify_id>', views.TrackDetailView.as_view(), name="track-detail"),
path('track', views.NominateView.as_view()), path('track/', views.NominateView.as_view(), name="nominate"),
#path('', views.TrackListView.as_view()), path('vote/', views.VoteView.as_view(), name="vote"),
path('vote/track', views.VoteTrackView.as_view(), name="vote-track"),
path('', views.AuthView.as_view()), path('', views.AuthView.as_view()),
] ]
+17 -2
View File
@@ -2,7 +2,9 @@ from django.shortcuts import render
from django.views import View from django.views import View
from django.http import HttpResponse from django.http import HttpResponse
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.contrib.auth.mixins import LoginRequiredMixin
import re import re
from random import choice
from .models import Track, Artist, Album from .models import Track, Artist, Album
from .models.utils import from_json from .models.utils import from_json
from . import spotify from . import spotify
@@ -19,14 +21,27 @@ class TrackListView(View):
def get(self, request): def get(self, request):
return HttpResponse("..") return HttpResponse("..")
class TrackDetailView(View): class TrackDetailView(LoginRequiredMixin, View):
def get(self, request, spotify_id): def get(self, request, spotify_id):
try: try:
track = Track.objects.get(pk=spotify_id) track = Track.objects.get(pk=spotify_id)
return HttpResponse(str(track)) return HttpResponse(str(track))
except Track.DoesNotExist: except Track.DoesNotExist:
return HttpResponse("No track") return HttpResponse("No track")
class NominateView(View):
class VoteView(LoginRequiredMixin, View):
def get(self, request):
songs = Track.objects.all()
return TemplateResponse(request, "Vote.html", {"songs": songs})
class VoteTrackView(LoginRequiredMixin, View):
def get(self, request):
pks = Track.objects.values_list('pk', flat=True)
track = Track.objects.get(pk=choice(pks))
return TemplateResponse(request, "SpotifyEmbed.html", {"id": track.id})
class NominateView(LoginRequiredMixin, View):
def get(self, request): def get(self, request):
return TemplateResponse(request, "Nominate.html", {}) return TemplateResponse(request, "Nominate.html", {})
def post(self, request): def post(self, request):
+1
View File
@@ -3,3 +3,4 @@ requests
pillow pillow
python-dotenv python-dotenv
mozilla-django-oidc mozilla-django-oidc
django-htmx