Cleanup of html and progress on config page
This commit is contained in:
parent
e3734723a4
commit
95ce4940f2
@ -97,4 +97,10 @@ class LevelScore(ModelWithUpdate):
|
|||||||
dart_glitch_state = "✏" if self.dart_glitch else "🖋" if self.dart_glitch_ever else ""
|
dart_glitch_state = "✏" if self.dart_glitch else "🖋" if self.dart_glitch_ever else ""
|
||||||
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)
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -41,5 +41,5 @@
|
|||||||
player.style.height = "480px";
|
player.style.height = "480px";
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
{% include 'bloonsa_game/modules/levelinfo.html' %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
@ -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"]
|
||||||
19
app/users/migrations/0025_alter_player_avatar.py
Normal file
19
app/users/migrations/0025_alter_player_avatar.py
Normal 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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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,
|
||||||
|
|||||||
3
app/users/static/users/css/bulma-1.0.3.css
Normal file
3
app/users/static/users/css/bulma-1.0.3.css
Normal file
File diff suppressed because one or more lines are too long
10
app/users/static/users/css/config.css
Normal file
10
app/users/static/users/css/config.css
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#config-box {
|
||||||
|
background-color: black;
|
||||||
|
width: 640px;
|
||||||
|
height: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#config-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
12
app/users/static/users/css/users.css
Normal file
12
app/users/static/users/css/users.css
Normal 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;
|
||||||
|
}
|
||||||
@ -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 %}
|
||||||
@ -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 %}
|
||||||
<h1>Login!</h1>
|
<div id="users-container">
|
||||||
{% crispy form %}
|
<div id="users-box">
|
||||||
|
<h1>Login!</h1>
|
||||||
|
{% crispy form %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -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 %}
|
||||||
<h1>Register!</h1>
|
<div id="users-container">
|
||||||
{% crispy form %}
|
<div id="users-box">
|
||||||
|
<h1>Register!</h1>
|
||||||
|
{% crispy form %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -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
|
||||||
|
})
|
||||||
Loading…
Reference in New Issue
Block a user