tag: Introduce tag system
Create a new table representing tags, composed of a name and color. They can be used to tag truths and filter them later. Tags display under the truths they correspond to and can be clicked to access all truths matching this tag. Introduce a new element in the top bar to allow navigating to the tag list, which can be used to create and edit tags for the admin and used to select a list of tags to filter against for everyone. Update the database records of the truths to include the tag vector. As the database query result is a multi-row result, it cannot be parsed automatically so it needs to be skipped and retrieved manually.
This commit is contained in:
parent
d79375365d
commit
b401aa7f5d
11 changed files with 549 additions and 23 deletions
|
@ -13,19 +13,33 @@
|
|||
<body>
|
||||
{% block top_bar %}
|
||||
<div class="top_bar">
|
||||
<h1>{{ title }}</h1>
|
||||
{% if user.logged_in == true %}
|
||||
<form class="login" id="logout" action="/{{ week_data.number }}/logout" method="POST">
|
||||
Connecté en tant que <b>{{ user.name }}</b>
|
||||
<button form="logout">Déconnecter</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<form class="login" id="login" action="/{{ week_data.number }}/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 class="top_bar_side">
|
||||
<h1><a href="/">{{ title }}</a></h1>
|
||||
<nav>
|
||||
Aller à :
|
||||
<a href="/">Vérités</a>
|
||||
-
|
||||
<a href="/tags">Thèmes</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="top_bar_side">
|
||||
{% block top_bar_side %}
|
||||
<div>
|
||||
{% if user.logged_in == true %}
|
||||
<form class="login" id="logout" action="/{{ week_data.number }}/logout" method="POST">
|
||||
Connecté en tant que <b>{{ user.name }}</b>
|
||||
<button form="logout">Déconnecter</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<form class="login" id="login" action="/{{ week_data.number }}/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>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
28
templates/tags/filtered_truths.html.tera
Normal file
28
templates/tags/filtered_truths.html.tera
Normal file
|
@ -0,0 +1,28 @@
|
|||
{% extends "base_page" %}
|
||||
|
||||
{% block top_bar_side %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if tags | length == 0 %}
|
||||
<h2>Ensemble des vérités à ce jour</h2>
|
||||
{% elif tags | length == 1 %}
|
||||
<h2>Vérités correponsdantes au thème</h2>
|
||||
{% else %}
|
||||
<h2>Vérités correponsdantes aux thèmes</h2>
|
||||
{% endif %}
|
||||
|
||||
<div class="truth_tags">
|
||||
{% for tag in tags %}
|
||||
<a class="tag" href="/tags/filter?tags={{ tag.name }}"
|
||||
style="background-color: {{ tag.color }}">{{ tag.name }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% for truth in truths %}
|
||||
<div class="individual_truth">
|
||||
<a href="/{{ truth.week }}/#{{ truth.number }}"><h3 id="{{ truth.number }}">Semaine {{ truth.week }} - Vérité {{ truth.number }}</h3></a>
|
||||
<p>{{ truth.rendered_text | safe }}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
42
templates/tags/index.html.tera
Normal file
42
templates/tags/index.html.tera
Normal file
|
@ -0,0 +1,42 @@
|
|||
{% extends "base_page" %}
|
||||
|
||||
{% block top_bar_side %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h2>Liste des thèmes de Vérité</h2>
|
||||
|
||||
<form class="tag_list" id="filter_by_tags" action="/tags/filter">
|
||||
{% for tag in tags %}
|
||||
<div class="tag" style="background-color: {{ tag.color }}">
|
||||
<label><input type="checkbox" form="filter_by_tags" name="tags" value="{{ tag.name }}">{{ tag.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</form>
|
||||
<button form="filter_by_tags">Voir les vérités correspondantes</button>
|
||||
|
||||
{% if user.is_admin %}
|
||||
<hr>
|
||||
|
||||
<h2>Éditer les thèmes</h2>
|
||||
|
||||
<div class="tag_list">
|
||||
{% for tag in tags %}
|
||||
<form class="tag" style="background-color: {{ tag.color }}" id="edit_tag[{{ tag.name }}]" method="post" action="/tags/update/{{ tag.name }}">
|
||||
<input type="text" form="edit_tag[{{ tag.name }}]" name="name" value="{{ tag.name }}">
|
||||
<input type="color" form="edit_tag[{{ tag.name }}]" name="color" value="{{ tag.color }}">
|
||||
<button>Mettre à jour</button>
|
||||
<button formaction="/tags/delete/{{ tag.name }}">Supprimer</button>
|
||||
</form>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<form class="new_tag" id="new_tag" action="/tags/create" method="post">
|
||||
<div>
|
||||
<label>Nom de l'étiquette: <input type="text" form="new_tag" name="name"/></label>
|
||||
<label>Couleur: <input type="color" form="new_tag" name="color"></label>
|
||||
</div>
|
||||
<button>Ajouter une étiquette</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -1,8 +1,30 @@
|
|||
<div class="individual_truth">
|
||||
<h3>Vérité {{ truth.number }}</h3>
|
||||
<p>{{ truth.rendered_text | safe }}</p>
|
||||
<div class="truth_tags">
|
||||
{% for tag in truth.tags %}
|
||||
<form action="/{{ week_data.number }}/untag/{{ truth.id }}" method="post">
|
||||
<button name="name" value="{{ tag.name }}">❌</button>
|
||||
</form>
|
||||
<a class="tag" href="/tags/filter?tags={{ tag.name }}" style="background-color: {{ tag.color }}">
|
||||
{{ tag.name }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<hr/>
|
||||
<form action="/{{ week_data.number }}/edit/{{ truth.number }}" method="POST">
|
||||
<form class="truth_edit_form" action="/{{ week_data.number }}/edit/{{ truth.number }}" method="POST">
|
||||
{% include "weeks/truth_editor" %}
|
||||
</form>
|
||||
<form class="truth_edit_form" action="/{{ week_data.number }}/tag/{{ truth.id }}" method="post">
|
||||
<label>Thème supplémentaire:
|
||||
<select name="name">
|
||||
{% for tag in tags %}
|
||||
{% if not truth.tags is containing(tag) %}
|
||||
<option value="{{ tag.name }}" style="background-color: {{ tag.color }}">{{ tag.name }}</option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</select>
|
||||
</label>
|
||||
<button>Ajouter un thème</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
<div class="individual_truth">
|
||||
<a href="/{{ truth.week }}/#{{ truth.number }}"><h3 id="{{ truth.number }}">Vérité {{ truth.number }}</h3></a>
|
||||
<p>{{ truth.rendered_text | safe }}</p>
|
||||
<hr>
|
||||
<div class="truth_tags">
|
||||
{% for tag in truth.tags %}
|
||||
<a class="tag" href="/tags/filter?tags={{ tag.name }}" style="background-color: {{ tag.color }}">{{ tag.name }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if user.logged_in %}
|
||||
<hr/>
|
||||
<label>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue