Backgrounds

This commit is contained in:
2024-02-21 15:49:44 +01:00
parent ae7268736f
commit 81a60804b1
10 changed files with 113 additions and 13 deletions
+4 -1
View File
@@ -1,5 +1,5 @@
from django.contrib import admin
from .models import Track, Artist, Album
from .models import Track, Artist, Album, Background
class TrackAdmin(admin.ModelAdmin):
pass
@@ -7,7 +7,10 @@ class ArtistAdmin(admin.ModelAdmin):
pass
class AlbumAdmin(admin.ModelAdmin):
pass
class BackgroundAdmin(admin.ModelAdmin):
pass
admin.site.register(Track, TrackAdmin)
admin.site.register(Artist, ArtistAdmin)
admin.site.register(Album, AlbumAdmin)
admin.site.register(Background, BackgroundAdmin)
+1
View File
@@ -2,3 +2,4 @@ from .track import Track
from .artist import Artist
from .album import Album
from .vote import Vote
from .profile import Profile, Background
+26
View File
@@ -0,0 +1,26 @@
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Background(models.Model):
def __str__(self):
return self.name
name = models.CharField(max_length=128)
image = models.ImageField(upload_to="wallpapers/", null=True, blank=True)
repeat = models.BooleanField(default=False)
color = models.CharField(max_length=32, blank=True)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
background = models.ForeignKey(Background, null=True, on_delete=models.SET_NULL)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
Profile.objects.get_or_create(user=instance)
instance.profile.save()
+14 -3
View File
@@ -1,8 +1,5 @@
body {
background-color: #01817F;
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
margin: 0;
}
@@ -26,10 +23,24 @@ body {
}
}
input[type=submit] {
filter: contrast(1);
}
.hide {
display: none;
}
.offscreen {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}
.window.popup {
position: fixed;
z-index: 100;
+9
View File
@@ -4,6 +4,15 @@
{% include "head.html" %}
</head>
<body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
<svg class="offscreen" width="0" height="0" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<defs>
<filter id="crispify">
<feComponentTransfer>
<feFuncA type="discrete" tableValues="0 1"/>
</feComponentTransfer>
</filter>
</defs>
</svg>
<script>setWallpaper()</script>
<div class="window" id="main-window">
<div class="title-bar main-title-bar">
+16 -3
View File
@@ -10,11 +10,25 @@
</div>
</form>
{% endif %}
<form method="post">
{% csrf_token %}
{% if backgrounds %}
<div class="field-row">
<label for="wallpaper">Eigen wallpaper url:</label>
<input id="wallpaper" type="text" onchange="wallpaperChanged()" />
<label for="wallpaper">Wallpaper:</label>
<select id="background" name="background" onchange="this.form.submit()">
{% for background in backgrounds %}
<option
value="{{background.id}}"
{% if background.id == currentBackground %} selected{% endif %}
>
{{background.name}}
</option>
{% endfor %}
</select>
<button id="wallpaper-reset" onclick="wallpaperChanged()">Reset</button>
</div>
{% endif %}
</form>
<script>
function wallpaperChanged() {
const expression = /^https?:\/\/.*\.(jpeg|jpg|png|gif)$/
@@ -26,6 +40,5 @@
setWallpaper()
}
}
</script>
{% endblock %}
+10
View File
@@ -0,0 +1,10 @@
{% load static %}
body {
{% if background.image %}
background-image: url('{{background.image.url}}');
{% if not background.repeat %}background-repeat: no-repeat;{% endif %}
{% else %}
background-color: {{background.color}};
{% endif %}
}
+5
View File
@@ -4,6 +4,11 @@
<script src="https://unpkg.com/interactjs"></script>
<link rel="stylesheet" href="https://unpkg.com/98.css" >
<link href="{% static 'style.css'%}" rel="stylesheet" type="text/css" />
<style>
{% include 'background.css' with background=user.profile.background %}
</style>
<link href="{% static 'style.css'%}" rel="stylesheet" type="text/css" />
<link rel="apple-touch-icon" sizes="180x180" href="{% static 'apple-touch-icon.png' %}">
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'favicon-32x32.png' %}">
<link rel="icon" type="image/png" sizes="16x16" href="{% static 'favicon-16x16.png' %}">
+3 -1
View File
@@ -1,9 +1,11 @@
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('track/', views.NominateView.as_view(), name="nominate"),
path('vote/', views.VoteView.as_view(), name="vote"),
path('settings/', views.SettingsView.as_view(), name="settings"),
path('', views.AuthView.as_view()),
]
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+22 -2
View File
@@ -4,7 +4,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.template.response import TemplateResponse
from django.contrib.auth.mixins import LoginRequiredMixin
import re
from .models import Track, Artist, Album, Vote
from .models import Track, Artist, Album, Vote, Background, Profile
from .utils import from_json, get_unvoted
from . import spotify
from .tasks import get_banter
@@ -105,4 +105,24 @@ class NominateView(LoginRequiredMixin, View):
class SettingsView(LoginRequiredMixin, View):
def get(self, request):
return TemplateResponse(request, "Settings.html")
backgrounds = Background.objects.all()
print(backgrounds)
(profile,created) = Profile.objects.get_or_create(user=request.user)
context = {
"backgrounds": backgrounds,
"currentBackground": (profile.background.id if profile.background else 1)
}
return TemplateResponse(request, "Settings.html", context)
def post(self, request):
print(request.POST)
try:
bg = Background.objects.get(pk=request.POST['background'])
print(f"{request.user} wants their background set to {bg}")
(profile,_) = Profile.objects.get_or_create(user=request.user)
print(profile)
profile.background = bg
profile.save()
except:
pass
finally:
return self.get(request)