FabulaVotes/templates/weeks/index.html.tera
trotFunky 1b4a934398 auth: Split off vote data from the user
Now that the application is going to have multiple pages, vote data makes no sense
to keep with the user.
The user struct will be used everywhere to check for authentication, which is not
the case for previous votes.

Create a new struct and function in src/vote.rs to retrieve existing votes and
use them in places where user.votes was used previously.
Remove vote-related code from src/auth.rs and the week number dependence that it
required.
2024-07-28 16:55:22 +01:00

120 lines
5.1 KiB
Text

{% extends "base_page" %}
{% block scripts %}
{% if user.logged_in == true and not user.is_admin %}
<script defer="defer" type="text/javascript" src="/static/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="/static/vote_chart.js"></script>
{% endblock %}
{#{% import "week_change_arrows" as week_macro %}#}
{# For some reason the import does not work ? Figure it out at some point... #}
{%- macro display(display_character, to, enabled) -%}
{%- set class = "week_change" -%}
{%- if enabled == true %}
{% set target = ("href=/" ~ to) %}
{%- else -%}
{% set class = class ~ " week_change_hidden" -%}
{% set target = "" %}
{%- endif -%}
<a {{ target }} class="{{ class }}">{%- if enabled == true -%}{{- display_character -}}{%- endif -%}</a>
{%- endmacro display -%}
{# Remove the form if all votes are locked, to reduce confusion. #}
{% set lock_truth_form = vote_data.votes | length + 1 == truths | length and week_data.is_last_week != true %}
{% block body %}
{# Apparently needs to be inside the block ? #}
{% set back_arrow_enabled = week_data.number > 1 %}
{% set next_arrow_enabled = (week_data.is_last_week != true or user.is_admin == true) %}
{% set next_arrow_href = (week_data.number + 1) %}
{% if user.is_admin == true %}
{% set next_arrow_href = next_arrow_href ~ "/create" %}
{% set next_arrow_chara = '⥅' %}
{% else %}
{% set next_arrow_chara = '⟹' %}
{% endif %}
<h2>{{- self::display(display_character='⟸', to=(week_data.number - 1), enabled=back_arrow_enabled) }}
Semaine {{ week_data.number }}
{{- self::display(display_character=next_arrow_chara, to=next_arrow_href, enabled=next_arrow_enabled) -}}</h2>
<div class="truth_page_body">
<div class="truth_list">
{% if user.is_admin == true and week_data.is_last_week != true %}
<form action="/{{ week_data.number }}/set_last" method="post">
<button>
Définir comme dernière semaine active
</button>
</form>
{% endif %}
<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 and not lock_truth_form %}
<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 "weeks/editable_truth" %}
{% else %}
{% include "weeks/truth" %}
{% endif %}
{% endfor %}
{% if user.logged_in == true and user.is_admin == false and not lock_truth_form %}
<br/>
<button form="truths">
{%- if user.logged_in == true and vote_data.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 "weeks/truth_editor" %}
</form>
</div>
{% endif %}
</div>
<div class="graph">
<div>
<canvas id="vote_chart"></canvas>
</div>
</div>
</div>
{% endblock %}