Cleanup of html and progress on config page

This commit is contained in:
Walter 2025-02-18 18:54:43 +01:00
parent e3734723a4
commit 95ce4940f2
13 changed files with 134 additions and 21 deletions

View File

@ -98,3 +98,9 @@ class LevelScore(ModelWithUpdate):
score_view = f"🎈{self.pops} | 🎯{self.darts_left} {dart_glitch_state}" score_view = f"🎈{self.pops} | 🎯{self.darts_left} {dart_glitch_state}"
return (f"{self.player.user.username if self.player else ''}'s " return (f"{self.player.user.username if self.player else ''}'s "
f"{clear_state} @ {self.level}: {score_view}") f"{clear_state} @ {self.level}: {score_view}")
class Config(ModelWithUpdate):
player = models.OneToOneField(Player, on_delete=models.CASCADE, related_name="bloonsa_config")
# Automatically start ruffle/flash when page loads
autoplay = models.BooleanField(default=True)

View File

@ -1,5 +1,7 @@
{% load static %} {% load static %}
<!DOCTYPE html> <!DOCTYPE html>
<!-- avoids flashbang -->
<html lang="en" style="background-color: #20B0FF;"></html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="title" content="{% block title %}{% endblock title %}"/> <meta name="title" content="{% block title %}{% endblock title %}"/>
@ -51,7 +53,6 @@
</div> </div>
<div id="content"> <div id="content">
{% block content %}{% endblock content %} {% block content %}{% endblock content %}
{% include 'bloonsa_game/modules/levelinfo.html' %}
</div> </div>
<div class="skyscraper rhs"> <div class="skyscraper rhs">

View File

@ -41,5 +41,5 @@
player.style.height = "480px"; player.style.height = "480px";
}); });
</script> </script>
{% include 'bloonsa_game/modules/levelinfo.html' %}
{% endblock content %} {% endblock content %}

View File

@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit from crispy_forms.layout import Submit
from users.models import Player
from users.validators import usernameValidator from users.validators import usernameValidator
class UserRegisterForm(UserCreationForm): class UserRegisterForm(UserCreationForm):
@ -70,5 +71,22 @@ class UserLoginForm(AuthenticationForm):
"username", "username",
] ]
class UserConfigForm(): class UserUpdateForm(forms.ModelForm):
... username = forms.CharField(min_length=3,
max_length=16,
label="Username",
required=False,
validators=[usernameValidator, ],
help_text=_("3-16 chars, alphanumeric and _- pls"))
class Meta:
model = User
fields = ["username",]
class PlayerUpdateForm(forms.ModelForm):
bio = forms.CharField(max_length=128, required=False)
class Meta:
model = Player
fields = ["avatar", "bio"]

View File

@ -0,0 +1,19 @@
# Generated by Django 5.1.6 on 2025-02-18 16:57
import django_resized.forms
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0024_player_avatar_player_bio'),
]
operations = [
migrations.AlterField(
model_name='player',
name='avatar',
field=django_resized.forms.ResizedImageField(crop=None, default='defaults/avatars.jpg', force_format='JPEG', keep_meta=False, quality=75, scale=None, size=[256, 256], upload_to='avatars'),
),
]

View File

@ -8,7 +8,7 @@ class Player(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="player") user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="player")
# Profile # Profile
bio = models.TextField(max_length=128, null=True) bio = models.TextField(max_length=128, null=True)
avatar = ResizedImageField(default="default.jpg", avatar = ResizedImageField(default="defaults/avatars.jpg",
size=[256, 256], size=[256, 256],
upload_to="avatars", upload_to="avatars",
keep_meta=False, keep_meta=False,

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
#config-box {
background-color: black;
width: 640px;
height: 480px;
}
#config-box {
display: flex;
flex-direction: row;
}

View File

@ -0,0 +1,12 @@
#users-container {
width: 640px;
height: 480px;
text-align: center;
}
#users-box {
background-color: #20B0FF;
width: 280px;
height: 280px;
margin: auto;
}

View File

@ -1,11 +1,25 @@
{% extends "bloonsa_game/base.html" %} {% extends "bloonsa_game/base.html" %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load static %}
{% block title %} {% block title %}
My Profile My Profile
{% endblock title %} {% endblock title %}
{% block head %}
<link rel="stylesheet" href="{% static 'users/css/bulma-1.0.3.css' %}">
<link rel="stylesheet" href="{% static 'users/css/config.css' %}">
{% endblock head %}
{% block content %} {% block content %}
<h1>Profile settings</h1> <form method="post" id="config-box">
{% crispy form %} <div id="config-profile-box">
<div id="profile-settings-text">Profile settings</div>
{% csrf_token %}
{% crispy form_player %}
{% crispy form_user %}
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
<div id="config-bloonsa-box">a</div>
</form>
{% endblock %} {% endblock %}

View File

@ -1,11 +1,20 @@
{% extends "bloonsa_game/base.html" %} {% extends "bloonsa_game/base.html" %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load static %}
{% block title %} {% block title %}
Login Login
{% endblock title %} {% endblock title %}
{% block head %}
<link rel="stylesheet" href="{% static 'users/css/users.css' %}">
{% endblock head %}
{% block content %} {% block content %}
<div id="users-container">
<div id="users-box">
<h1>Login!</h1> <h1>Login!</h1>
{% crispy form %} {% crispy form %}
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,11 +1,20 @@
{% extends "bloonsa_game/base.html" %} {% extends "bloonsa_game/base.html" %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load static %}
{% block title %} {% block title %}
Register Register
{% endblock title %} {% endblock title %}
{% block head %}
<link rel="stylesheet" href="{% static 'users/css/users.css' %}">
{% endblock head %}
{% block content %} {% block content %}
<div id="users-container">
<div id="users-box">
<h1>Register!</h1> <h1>Register!</h1>
{% crispy form %} {% crispy form %}
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -3,7 +3,7 @@ from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.views.generic import TemplateView from django.views.generic import TemplateView
from users.forms import UserRegisterForm, UserLoginForm, UserConfigForm from users.forms import UserRegisterForm, UserLoginForm, PlayerUpdateForm, UserUpdateForm
from users.models import Player from users.models import Player
from users.util import bloonsa_util, actions from users.util import bloonsa_util, actions
@ -56,21 +56,33 @@ class LogoutView(TemplateView):
class ConfigView(TemplateView): class ConfigView(TemplateView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
form = UserConfigForm() form_player = PlayerUpdateForm()
form_user = UserUpdateForm()
return render(request=request, return render(request=request,
template_name="users/config.html", template_name="users/config.html",
context={"form": form}) context={"form_player": form_player,
"form_user": form_user})
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
form = UserConfigForm(request.POST) form_player = PlayerUpdateForm(request.POST)
if not form.is_valid(): form_user = UserUpdateForm(request.POST)
if any((
not form_player.is_valid(),
not form_user.is_valid()
)):
return render(request=request, return render(request=request,
template_name="users/config.html", template_name="users/config.html",
context={"form": form}) context={
user = form.save() "form_player": form_player,
login(request=request, user=user) "form_user": form_user
})
user = form_user.save()
player = form_player.save()
#bloonsa_util.log(player=player, #bloonsa_util.log(player=player,
# action=actions.login) # action=actions.login)
return render(request=request, return render(request=request,
template_name="users/config.html", template_name="users/config.html",
context={"form": form}) context={
"form_player": form_player,
"form_user": form_user
})