v1.0: First production version

This first version allows login of pre-existing users, creation and update of truths
by admins, vote on the truths by users, their display as well as a simple graph
for the vote results.
Everything persisting in a SQLite database.
This commit is contained in:
trotFunky 2024-07-23 21:51:42 +01:00
commit 9911895b5b
22 changed files with 4790 additions and 0 deletions

View file

@ -0,0 +1,8 @@
<div class="individual_truth">
<h3>Vérité {{ truth.number }}</h3>
<p>{{ truth.rendered_text | safe }}</p>
<hr/>
<form action="/{{ week_number }}/edit/{{ truth.number }}" method="POST">
{% include "truth_editor" %}
</form>
</div>

95
templates/index.html.tera Normal file
View file

@ -0,0 +1,95 @@
<!DOCTYPE html>
<html lang="en">
{% set title = "Vérités Fabula Ultima" %}
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link href="/style.css" rel="stylesheet"/>
{% if user.logged_in == true and not user.is_admin %}
<script defer="defer" type="text/javascript" src="/vote_handler.js"></script>
{% endif %}
<script defer="defer" type="application/javascript" src="https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.min.js"></script>
<script defer="defer" type="text/javascript" src="/vote_chart.js"></script>
</head>
{# Check if the user has a vote in advance, for readability #}
{% if user.logged_in == true and user.has_week_vote == true%}
{% set has_vote = true %}
{% else %}
{% set has_vote = false %}
{% endif -%}
<body>
<div class="top_bar">
<h1>{{ title }}</h1>
{% if user.logged_in == true %}
<p>Connecté en tant que <b>{{ user.name }}</b></p>
{% else %}
<form class="login" id="login" action="/login" method="POST">
<label>Pseudo <input form="login" type="text" name="name"/></label>
<label>Mot de passe <input form="login" type="password" name="password"/></label>
<button form="login">Se connecter</button>
</form>
{% endif %}
</div>
<h2>Semaine {{ week_number }}</h2>
<div class="page_body">
<div class="truth_list">
{% if user.logged_in == true and user.is_admin == false %}
<form id="truths" action="/{{ week_number }}/vote" method="POST">
{% endif %}
{# Truths start at 1 but the array starts at 0 #}
{% set index_delta = 1 %}
{% for truth in truths %}
{#
The truths are in an ordered array, but one of them might be the user's.
In this case, we need to stop the array index from incrementing if the current
truth is the user's, as they cannot have voted for themselves, leading to one
less votes than there are truths.
#}
{%- if truth.author_id == user.id -%}
{%- set_global index_delta = 2 -%}
{% endif %}
{% set truth_index = truth.number - index_delta %}
{% if user.is_admin == true %}
{% include "editable_truth" %}
{% else %}
{% include "truth" %}
{% endif %}
{% endfor %}
{% if user.logged_in == true and user.is_admin == false %}
<br/>
<button form="truths">
{%- if has_vote == true -%}
Changer de vote
{% else %}
À voter !
{% endif %}
</button>
</form>
{% endif %}
{# If admin, show an additional box for creating a new Truth. #}
{% if user.is_admin == true %}
<div class="individual_truth">
<h3>Nouvelle vérité</h3>
<form action="/{{ week_number }}/new" method="POST">
{% include "truth_editor" %}
</form>
</div>
{% endif %}
</div>
<div class="graph">
<div>
<canvas id="vote_chart"></canvas>
</div>
</div>
</div>
</body>
</html>

26
templates/truth.html.tera Normal file
View file

@ -0,0 +1,26 @@
<div class="individual_truth">
<h3>Vérité {{ truth.number }}</h3>
<p>{{ truth.rendered_text | safe }}</p>
{% if user.logged_in %}
<hr/>
<label>
{%- if truth.author_id == user.id -%}
Tu l'as fait :)
{%- else -%}
Qui l'a fait ?
<select form="truths" name="truth_votes[{{ truth.id }}]">
<option value="0">---</option>
{% for player in other_players %}
{# Check if we should pre-select an existing vote #}
{% if has_vote == true and player.id == user.votes[truth_index].voted_id %}
{% set is_selected = "selected" %}
{% else %}
{% set is_selected = "" %}
{% endif %}
<option value="{{ player.id }}" {{- is_selected -}}>{{ player.name }}</option>
{% endfor %}
</select>
{%- endif -%}
</label>
{% endif %}
</div>

View file

@ -0,0 +1,26 @@
<textarea class="truth_editor" name="truth_raw_text">
{%- if truth.raw_text -%}
{{- truth.raw_text -}}
{%- endif -%}
</textarea>
<label>Qui l'a écrit ?
<select name="truth_author">
<option value="0">---</option>
{% for player in other_players %}
{# Check if we should pre-select if the truth already exists #}
{% if truth.author_id and player.id == truth.author_id %}
{% set is_selected = "selected" %}
{% else %}
{% set is_selected = "" %}
{% endif %}
<option value="{{ player.id }}" {{- is_selected -}}>{{ player.name }}</option>
{% endfor %}
</select>
</label>
<button>
{%- if not truth.author_id -%}
Ajouter une vérité
{%- else -%}
Modifier la vérité
{%- endif -%}
</button>