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:
commit
9911895b5b
22 changed files with 4790 additions and 0 deletions
8
templates/editable_truth.tera
Normal file
8
templates/editable_truth.tera
Normal 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
95
templates/index.html.tera
Normal 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
26
templates/truth.html.tera
Normal 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>
|
26
templates/truth_editor.html.tera
Normal file
26
templates/truth_editor.html.tera
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue