mirror of https://git.sr.ht/~sircmpwn/fosspay
parent
e313fa5c24
commit
eae73e2163
@ -0,0 +1,166 @@ |
||||
{% extends "layout.html" %} |
||||
{% block title %} |
||||
<title>Gestion des dons</title> |
||||
{% endblock %} |
||||
{% block body %} |
||||
<div class="well"> |
||||
<div class="container"> |
||||
<p class="pull-right"> |
||||
<a class="btn btn-primary" href="#" data-toggle="modal" data-target="#donation-button-modal"> |
||||
Obtenir un bouton de donation |
||||
</a> |
||||
<a class="btn btn-default" href="logout">Se déconnecter</a> |
||||
</p> |
||||
<h1>Gestion des dons</h1> |
||||
<p>Utilisez cette page en plus du <a href="https://dashboard.stripe.com">panneau de contrôle Stripe</a> pour davantage d'informations.</p> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
{% if first %} |
||||
<div class="well"> |
||||
<p> |
||||
You're set up and ready to go! This is your admin panel. Next steps: |
||||
</p> |
||||
<ol> |
||||
<li> |
||||
<strong>Set up a cron job to handle monthly donations.</strong> |
||||
<a href="https://github.com/SirCmpwn/fosspay/wiki/Recurring-donations-cronjob"> |
||||
Relevant documentation |
||||
</a>. |
||||
</li> |
||||
<li> |
||||
Add some projects. Donors can tell you which project they want to support |
||||
when they donate. |
||||
</li> |
||||
<li> |
||||
Customize the look & feel. Look at the contents of the <code>templates</code> |
||||
directory - you can copy and paste any of these templates into the |
||||
<code>overrides</code> directory and change it to suit your needs. |
||||
</li> |
||||
<li> |
||||
<a href="https://drewdevault.com/donate?project=fosspay">Donate to fosspay upstream</a>? |
||||
</li> |
||||
<li> |
||||
<a href="https://github.com/SirCmpwn/fosspay">Contribute code to fosspay upstream</a>? |
||||
</li> |
||||
</ol> |
||||
</div> |
||||
{% endif %} |
||||
<h2>Projets</h2> |
||||
<div class="row"> |
||||
<div class="col-md-9"> |
||||
<table class="table"> |
||||
<thead> |
||||
<tr> |
||||
<th style="width: 10%"></th> |
||||
<th>Projets</th> |
||||
<th>Uniques</th> |
||||
<th>Récurrents (actifs)</th> |
||||
<th>Récurrents (somme totale)</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for project in projects %} |
||||
<tr> |
||||
<td><button type="button" class="close">×</button></td> |
||||
<td>{{ project.name }}</td> |
||||
<td>{{ "{:.2f}".format(one_times(project) / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(recurring(project) / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(recurring_ever(project) / 100) }}€</td> |
||||
</tr> |
||||
{% endfor %} |
||||
<tr> |
||||
<td></td> |
||||
<td>(non précisé)</td> |
||||
<td>{{ "{:.2f}".format(unspecified_one_times / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(unspecified_recurring / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(unspecified_recurring_ever / 100) }}€</td> |
||||
</tr> |
||||
<tr> |
||||
<td></td> |
||||
<td><strong>Total</strong></td> |
||||
<td>{{ "{:.2f}".format(total_one_time / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(total_recurring / 100) }}€</td> |
||||
<td>{{ "{:.2f}".format(total_recurring_ever / 100) }}€</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<div class="col-md-3 well"> |
||||
<h4>Ajouter un projet</h4> |
||||
<p>Les donateurices ne pourront pas choisir de projet avant que vous en ayez ajouté au moins deux.</p> |
||||
<form method="POST" action="{{root}}/create-project"> |
||||
<div class="form-group"> |
||||
<input class="form-control" type="text" placeholder="Nom du projet" name="name" /> |
||||
</div> |
||||
<input type="submit" value="Valider" class="btn btn-default pull-right" /> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
<h2>Dons récents <small>(50 derniers)</small></h2> |
||||
<table class="table"> |
||||
<thead> |
||||
<tr> |
||||
<th style="min-width: 10rem">Date</th> |
||||
<th>Email</th> |
||||
<th>Projet</th> |
||||
<th>Commentaire</th> |
||||
<th>Montant</th> |
||||
<th>Type</th> |
||||
<th>Payments</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for donation in donations %} |
||||
<tr> |
||||
<td>{{ donation.created.strftime("%d-%m-%Y") }}</td> |
||||
<td><a href="mailto:{{ donation.user.email }}">{{ donation.user.email }}</a></td> |
||||
<td>{{ donation.project.name if donation.project else "" }}</td> |
||||
<td title="{{ donation.comment }}">{{ donation.comment if donation.comment else "" }}</td> |
||||
<td>{{ "{:.2f}".format(donation.amount / 100) }}€</td> |
||||
<td> |
||||
{{ "Unique" if str(donation.type) == "DonationType.one_time" else "Mensuel" }} |
||||
{{ "(cancelled)" if not donation.active else "" }} |
||||
</td> |
||||
<td> |
||||
{{donation.payments}} |
||||
</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
|
||||
<div class="modal fade" id="donation-button-modal" tabindex="-1" role="dialog" aria-labelledby="donation-modal-label"> |
||||
<div class="modal-dialog" role="document"> |
||||
<div class="modal-content"> |
||||
<div class="modal-header"> |
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> |
||||
<span aria-hidden="true">×</span> |
||||
</button> |
||||
<h4 class="modal-title" id="donation-modal-label">Boutons de donation</h4> |
||||
</div> |
||||
<div class="modal-body"> |
||||
<p> |
||||
Vous pouvez ajouter un bouton de donation sur vos pages.<br> |
||||
Voici à quoi il ressemble : |
||||
<a href="{{root}}"> |
||||
<img src="{{root}}/static/donate-with-fosspay.png" /> |
||||
</a> |
||||
</p> |
||||
<p>Si vous ajoutez <code>?project=1</code> à votre URL, cela préselectionnera ce projet |
||||
(où <code>1</code> est le 1er projet dans la liste sur cette page) lorsque les utilisateurices arriveront sur la page de don.</p> |
||||
<p><strong>Markdown</strong></p> |
||||
<pre>[![Donate with fosspay]({{root}}/static/donate-with-fosspay.png)]({{root}})</pre> |
||||
<p><strong>HTML</strong></p> |
||||
<pre><a href="{{root}}"><img src="{{root}}/static/donate-with-fosspay.png" alt="Donate with fosspay" /></a></pre> |
||||
</div> |
||||
<div class="modal-footer"> |
||||
<button type="button" class="btn btn-default" data-dismiss="modal"> |
||||
Fermer |
||||
</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
@ -0,0 +1,97 @@ |
||||
{% if _cfg("public-income") == "yes" %} |
||||
<div class="container" style="padding-top: 5rem"> |
||||
<div class="row"> |
||||
<div class="col-md-8 col-md-offset-2"> |
||||
{% set total_sum = recurring_sum + patreon_sum + lp_sum %} |
||||
{% set total_count = recurring_count + patreon_count + lp_count %} |
||||
{% if _cfg("goal") %} |
||||
{% set goal = int(_cfg("goal")) %} |
||||
|
||||
{% if goal < total_sum %} |
||||
{# Make the graph still make sense if we exceeded the goal #} |
||||
{% set adjusted_goal = total_sum %} |
||||
{% else %} |
||||
{% set adjusted_goal = goal %} |
||||
{% endif %} |
||||
|
||||
{% set recurring_progress = recurring_sum / adjusted_goal %} |
||||
{% set patreon_progress = patreon_sum / adjusted_goal %} |
||||
{% set lp_progress = lp_sum / adjusted_goal %} |
||||
{% set progress = total_sum / goal %} |
||||
<div class="progress" style="height: 3rem"> |
||||
<div |
||||
class="progress-bar progress-bar-primary" |
||||
style="width: {{ recurring_progress * 100 }}%; line-height: 2.5" |
||||
> |
||||
<span>{{ "{:.0f}".format(recurring_sum / 100) }}€</span> |
||||
</div> |
||||
|
||||
<div |
||||
class="progress-bar progress-bar-info" |
||||
style="width: {{ patreon_progress * 100 }}%; line-height: 2.5" |
||||
> |
||||
<span>{{ "{:.0f}".format(patreon_sum / 100) }}€</span> |
||||
</div> |
||||
|
||||
<div |
||||
class="progress-bar progress-bar-warning" |
||||
style="width: {{ lp_progress * 100 }}%; line-height: 2.5" |
||||
> |
||||
<span>{{ "{:.0f}".format(lp_sum / 100) }}€</span> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-6 col-md-offset-3"> |
||||
{% if patreon_count or lp_count %} |
||||
<p> |
||||
{{ "{:.2f}".format(recurring_sum / 100) }}€ par mois |
||||
via <strong class="text-primary">{{ domain }}</strong> |
||||
({{ recurring_count }} donateurice{{ "s" if recurring_count != 1 else "" }}) |
||||
</p> |
||||
{% if patreon_count %} |
||||
<p> |
||||
{{ "{:.2f}".format(patreon_sum / 100) }}€ par mois |
||||
via |
||||
<strong><a |
||||
href="https://patreon.com/{{ _cfg("patreon-campaign") }}" |
||||
style="color: #51acc7"> |
||||
Patreon <i class="glyphicon glyphicon-share"></i> |
||||
</a></strong> ({{ patreon_count }} donateurice{{ "s" if patreon_count != 1 else "" }}) |
||||
</p> |
||||
{% endif %} |
||||
{% if lp_count %} |
||||
<p> |
||||
{{ "{:.2f}".format(lp_sum / 100) }}€ par mois |
||||
via |
||||
<strong><a |
||||
class="text-warning" |
||||
href="https://liberapay.com/{{ _cfg("liberapay-campaign") }}"> |
||||
Liberapay <i class="glyphicon glyphicon-share"></i></a></strong> |
||||
({{ lp_count }} donateurice{{ "s" if lp_count != 1 else "" }}) |
||||
</p> |
||||
{% endif %} |
||||
{% endif %} |
||||
{% if goal %} |
||||
<p class="{{ "text-center" if not patreon_sum else "" }}"> |
||||
{{ "{:.2f}".format(total_sum / 100)}}€ par mois |
||||
sur l'objectif de |
||||
{{ "{:.2f}".format(goal / 100) }}€. |
||||
</p> |
||||
{% else %} |
||||
<p> |
||||
Supported with ${{ "{:.2f}".format(total_sum / 100) }} |
||||
from {{ total_count }} supporters! |
||||
</p> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-6 col-md-offset-3"> |
||||
{% include "goal-summary.html" %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
@ -0,0 +1,147 @@ |
||||
{% extends "layout.html" %} |
||||
{% block scripts %} |
||||
<script> |
||||
window.stripe_key = "{{ _cfg("stripe-publish") }}"; |
||||
window.avatar = "{{ avatar }}"; |
||||
window.your_name = "{{ _cfg("your-name") }}"; |
||||
window.default_amount = {{ _cfg("default-amount") }}; |
||||
window.default_type = "{{ _cfg("default-type") }}"; |
||||
{% if user %} |
||||
window.email = "{{user.email}}"; |
||||
{% endif %} |
||||
</script> |
||||
<script src="//checkout.stripe.com/checkout.js"></script> |
||||
<script src="static/index.js"></script> |
||||
{% endblock %} |
||||
{% block body %} |
||||
<div class="well"> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-md-8 col-md-offset-2"> |
||||
<img |
||||
class="pull-right" |
||||
src="https://xn--transposes-i7a.eu/_media/wiki:logo.png" |
||||
style="border-radius: 5px; margin-left: 1rem" |
||||
width="" height="128" /> |
||||
<h1>Soutenir le {{ _cfg("your-name") }}</h1> |
||||
{% include "summary.html" %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<noscript> |
||||
<div class="container"> |
||||
<div class="alert alert-danger"> |
||||
<p>Cette page requiert Javascript. C'est nécessaire afin d'envoyer vos informations de payement directement à |
||||
<a href="https://stripe.com/">Stripe</a> plutôt que de faire confiance à cette plateforme pour les stocker.</p> |
||||
</div> |
||||
</div> |
||||
</noscript> |
||||
<div class="container text-center hidden" id="thanks"> |
||||
{% include "post-donation-message.html" %} |
||||
<form id="new-donor-password" class="hidden" action="{{root}}/password-reset" method="POST"> |
||||
<p>Si vous voulez gérer vos dons plus tard, vous pouvez créer un compte en renseignent un mot de passe dans le champ ci-contre :</p> |
||||
<input type="password" placeholder="Mot de passe" name="password" /> |
||||
<input type="hidden" name="token" id="reset-token" /> |
||||
<button class="btn btn-primary btn-sm">Valider</button> |
||||
</form> |
||||
</div> |
||||
<div class="container text-center" id="donation-stuff"> |
||||
<h3>Choississez votre montant :</h3> |
||||
<div class="row"> |
||||
<div class="col-md-8 col-md-offset-2"> |
||||
<div class="btn-group btn-group-justified amounts" role="group" aria-label="..."> |
||||
{% for amt in _cfg("default-amounts").split(" ") %} |
||||
<div class="btn-group" role="group"> |
||||
<button data-amount="{{ amt }}" type="button" |
||||
class="btn btn-default {{"active" if _cfg("default-amount") == amt else ""}}" |
||||
>{{ amt }}€</button> |
||||
</div> |
||||
{% endfor %} |
||||
<div class="btn-group" role="group"> |
||||
<button data-amount="custom" type="button" class="btn btn-default">Personnalisé</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="row hidden" id="custom-amount" style="margin-top: 20px;"> |
||||
<div class="col-md-4 col-md-offset-4"> |
||||
<div class="form-group"> |
||||
<div class="input-group"> |
||||
<span class="input-group-addon">€</span> |
||||
<input id="custom-amount-text" type="text" value="13.12" |
||||
class="form-control" placeholder="Montant" /> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<h3>Donner :</h3> |
||||
<div class="row"> |
||||
<div class="col-md-4 col-md-offset-4"> |
||||
<div class="form-group"> |
||||
<div class="btn-group btn-group-justified frequencies" role="group" aria-label="..."> |
||||
<div class="btn-group" role="group"> |
||||
<button data-frequency="once" type="button" |
||||
class="btn btn-default {{"active" if _cfg("default-type")=="once" else ""}}" |
||||
>Une fois</button> |
||||
</div> |
||||
<div class="btn-group" role="group"> |
||||
<button data-frequency="monthly" type="button" |
||||
class="btn btn-default {{"active" if _cfg("default-type")=="monthly" else ""}}" |
||||
>Tous les mois</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% if len(projects) > 1 %} |
||||
<h3>Pour quel projet ?</h3> |
||||
<div class="row"> |
||||
<div class="col-md-4 col-md-offset-4"> |
||||
<div class="form-group"> |
||||
<select id="project" name="project" class="form-control"> |
||||
<option value="null" |
||||
{{ "selected" if selected_project == None else "" }}>Aucun en particulier</option> |
||||
{% for project in projects %} |
||||
<option value="{{ project.id }}" |
||||
{{ "selected" if selected_project == project.id else "" }}>{{ project.name }}</option> |
||||
{% endfor %} |
||||
</select> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
<div class="row"> |
||||
<div class="col-md-4 col-md-offset-4"> |
||||
<div class="form-group"> |
||||
<input type="text" id="comments" class="form-control" placeholder="Ajouter un commentaire ?" maxlength="512" /> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="row"> |
||||
<div class="col-md-4 col-md-offset-4"> |
||||
<div class="alert alert-danger hidden" id="errors"> |
||||
<p></p> |
||||
</div> |
||||
<button class="btn btn-block btn-success" id="donate-button">Valider</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% include "goal.html" %} |
||||
<hr /> |
||||
<div class="container text-center"> |
||||
{% if not user %} |
||||
<p> |
||||
<small class="text-muted"> |
||||
Si vous nous avez déjà fait au moins un don, vous pouvez <a href="login">vous connecter</a> pour voir |
||||
votre historique ou éditer vos dons récurrents. :) |
||||
</small> |
||||
</p> |
||||
{% endif %} |
||||
<p> |
||||
<small class="text-muted"> |
||||
Powered by <a href="https://github.com/SirCmpwn/fosspay">fosspay</a>. |
||||
</small> |
||||
</p> |
||||
</div> |
||||
{% endblock %} |
@ -0,0 +1,24 @@ |
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
||||
<link rel="icon" href="static/icon.png" type="image/png" /> |
||||
{% block title %} |
||||
<title>Donations pour {{_cfg("your-name")}}</title> |
||||
{% endblock %} |
||||
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" /> |
||||
{% block styles %}{% endblock %} |
||||
</head> |
||||
<body> |
||||
{% block body %} |
||||
<div class="container"> |
||||
{% block container %} |
||||
{% endblock %} |
||||
</div> |
||||
{% endblock %} |
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> |
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> |
||||
{% block scripts %}{% endblock %} |
||||
</body> |
||||
</html> |
@ -0,0 +1,32 @@ |
||||
{% extends "layout.html" %} |
||||
{% block body %} |
||||
<div class="well"> |
||||
<div class="container"> |
||||
<h1>Soutenir le {{ _cfg("your-name") }}</h1> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-md-6 col-md-offset-3"> |
||||
<h1>Connexion</h1> |
||||
{% if errors %} |
||||
<div class="alert alert-danger"> |
||||
<p> |
||||
Identifiant ou mot de passe invalide·s. |
||||
</p> |
||||
</div> |
||||
{% endif %} |
||||
<form action="{{root}}/login" method="POST"> |
||||
<div class="form-group"> |
||||
<input class="form-control" type="text" name="email" placeholder="votre@email.com" /> |
||||
</div> |
||||
<div class="form-group"> |
||||
<input class="form-control" type="password" name="password" placeholder="Mot de passe" /> |
||||
</div> |
||||
<input type="submit" value="Se connecter" class="btn btn-primary" /> |
||||
<a style="margin-left: 20px" href="password-reset">Mot de passe perdu</a> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
@ -0,0 +1,62 @@ |
||||
{% extends "layout.html" %} |
||||
{% block body %} |
||||
<div class="well"> |
||||
<div class="container"> |
||||
<p class="pull-right"> |
||||
<a class="btn btn-primary" href="..">Donner à nouveau</a> |
||||
<a class="btn btn-default" href="logout">Se déconnecter</a> |
||||
</p> |
||||
<h1>Vos dons</h1> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
{% if any(recurring(user)) %} |
||||
<h2>Dons mensuels</h2> |
||||
<table class="table"> |
||||
<thead> |
||||
<tr> |
||||
<th style="width: 10%"></th> |
||||
<th>Date</th> |
||||
<th>Montant</th> |
||||
<th>Projet</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for donation in recurring(user) %} |
||||
<tr> |
||||
<td> |
||||
<form method="DELETE" action="{{root}}/cancel/{{ donation.id }}"> |
||||
<button type="submit" class="btn btn-danger btn-sm">Arrêter</button> |
||||
</form> |
||||
</td> |
||||
<td>{{ donation.created.strftime("%d-%m-%Y") }}</td> |
||||
<td>{{ "{:.2f}".format(donation.amount / 100) }}€</td> |
||||
<td>{{ donation.project.name if donation.project else "Non précisé" }}</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
{% endif %} |
||||
{% if any(one_times(user)) %} |
||||
<h2>Dons uniques</h2> |
||||
<table class="table"> |
||||
<thead> |
||||
<tr> |
||||
<th>Date</th> |
||||
<th>Montant</th> |
||||
<th>Projet</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for donation in one_times(user) %} |
||||
<tr> |
||||
<td>{{ donation.created.strftime("%d-%m-%Y") }}</td> |
||||
<td>{{ "{:.2f}".format(donation.amount / 100) }}€</td> |
||||
<td>{{ donation.project.name if donation.project else "Non précisé" }}</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
{% endif %} |
||||
</div> |
||||
{% endblock %} |
@ -0,0 +1,43 @@ |
||||
{% extends "layout.html" %} |
||||
{% block body %} |
||||
<div class="well"> |
||||
<div class="container"> |
||||
<h1>Soutenir le {{ _cfg("your-name") }}</h1> |
||||
</div> |
||||
</div> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-md-6 col-md-offset-3"> |
||||
<h1>Récupération de votre compte</h1> |
||||
{% if errors %} |
||||
<div class="alert alert-danger"> |
||||
<p> |
||||
{{ errors }} |
||||
</p> |
||||
</div> |
||||
{% endif %} |
||||
{% if done %} |
||||
<p> |
||||
Un e-mail devrait arriver. En cas de souci vous pouvez nous contacter : |
||||
<a href="mailto:{{_cfg("your-email")}}">{{_cfg("your-email")}}</a>. |
||||
</p> |
||||
{% elif token %} |
||||
<form action="{{root}}/password-reset" method="POST"> |
||||
<div class="form-group"> |
||||
<input class="form-control" type="password" name="password" placeholder="Nouveau mot de passe" /> |
||||
<input type="hidden" name="token" value="{{ token }}" /> |
||||
</div> |
||||
<input type="submit" value="Valider" class="btn btn-primary" /> |
||||
</form> |
||||
{% else %} |
||||
<form action="{{root}}/password-reset" method="POST"> |
||||
<div class="form-group"> |
||||
<input class="form-control" type="text" name="email" placeholder="votre@email.com" /> |
||||
</div> |
||||
<input type="submit" value="Valider" class="btn btn-primary" /> |
||||
</form> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
Loading…
Reference in new issue