trotFunky
207ce6c1d2
I made a choice to only log confirmed votes : there is no blank vote in the database. This means that when fetching a user's vote, if they have not voted for everyone there will be votes missing. As this is sent to the templating engine via a Vector, the ordering of the votes will be incorrect : all existing votes will follow each other, and there will be missing votes at the end. Update the select logic in the truth template to account for that by checking the truth_id directly, rather than via the index of the array. (O(N²)...) Remove 'has_vote' as this is not useful anymore.
102 lines
3.7 KiB
Text
102 lines
3.7 KiB
Text
<!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>
|
|
|
|
<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_data.number }}</h2>
|
|
<div class="page_body">
|
|
<div class="truth_list">
|
|
<div class="week_intro">
|
|
{{ week_data.rendered_text | safe }}
|
|
{%- if user.is_admin == true -%}
|
|
<hr/>
|
|
<form action="/{{ week_data.number }}/edit" method="post">
|
|
<textarea class="editor" name="raw_intro">
|
|
{{- week_data.raw_text -}}
|
|
</textarea>
|
|
<button>
|
|
Modifier l'introduction
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
{% if user.logged_in == true and user.is_admin == false %}
|
|
<form id="truths" action="/{{ week_data.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 user.logged_in == true and user.has_week_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_data.number }}/new_truth" method="POST">
|
|
{% include "truth_editor" %}
|
|
</form>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<div class="graph">
|
|
<div>
|
|
<canvas id="vote_chart"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|