Voting update
Nu met 100% meer mogelijkheid tot stemmen. Top.
This commit is contained in:
@@ -24,6 +24,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django_htmx',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
@@ -34,6 +35,7 @@ MIDDLEWARE = [
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django_htmx.middleware.HtmxMiddleware',
|
||||
]
|
||||
|
||||
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')
|
||||
LOGIN_REDIRECT_URL = "/"
|
||||
LOGOUT_REDIRECT_URL = "/"
|
||||
LOGIN_URL = "/"
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
@@ -1,9 +1,13 @@
|
||||
{% if user.is_authenticated %}
|
||||
{% extends "Base.html" %}
|
||||
|
||||
{% block main-content %}
|
||||
{% if user.is_authenticated %}
|
||||
<p>Current user: {{ user.email }}</p>
|
||||
<form action="{% url 'oidc_logout' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="submit" value="logout">
|
||||
</form>
|
||||
{% else %}
|
||||
{% else %}
|
||||
<a href="{% url 'oidc_authentication_init' %}">Login</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{% extends "Base.html" %}
|
||||
|
||||
{% block main-content %}
|
||||
<h2>Nominate</h2>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<input type="text" name="spotify_link" placeholder="Spotify-link">
|
||||
<input type="submit" value="OK">
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
@@ -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>
|
||||
@@ -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
@@ -2,8 +2,9 @@ from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('track/<str:spotify_id>', views.TrackDetailView.as_view()),
|
||||
path('track', views.NominateView.as_view()),
|
||||
#path('', views.TrackListView.as_view()),
|
||||
path('track/<str:spotify_id>', views.TrackDetailView.as_view(), name="track-detail"),
|
||||
path('track/', views.NominateView.as_view(), name="nominate"),
|
||||
path('vote/', views.VoteView.as_view(), name="vote"),
|
||||
path('vote/track', views.VoteTrackView.as_view(), name="vote-track"),
|
||||
path('', views.AuthView.as_view()),
|
||||
]
|
||||
|
||||
+17
-2
@@ -2,7 +2,9 @@ from django.shortcuts import render
|
||||
from django.views import View
|
||||
from django.http import HttpResponse
|
||||
from django.template.response import TemplateResponse
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
import re
|
||||
from random import choice
|
||||
from .models import Track, Artist, Album
|
||||
from .models.utils import from_json
|
||||
from . import spotify
|
||||
@@ -19,14 +21,27 @@ class TrackListView(View):
|
||||
def get(self, request):
|
||||
return HttpResponse("..")
|
||||
|
||||
class TrackDetailView(View):
|
||||
class TrackDetailView(LoginRequiredMixin, View):
|
||||
def get(self, request, spotify_id):
|
||||
try:
|
||||
track = Track.objects.get(pk=spotify_id)
|
||||
return HttpResponse(str(track))
|
||||
except Track.DoesNotExist:
|
||||
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):
|
||||
return TemplateResponse(request, "Nominate.html", {})
|
||||
def post(self, request):
|
||||
|
||||
@@ -3,3 +3,4 @@ requests
|
||||
pillow
|
||||
python-dotenv
|
||||
mozilla-django-oidc
|
||||
django-htmx
|
||||
|
||||
Reference in New Issue
Block a user