Ajout dynamique des evenements - Il manque le frontend

CI_gitlab
raida 5 years ago
parent adfb69dbf9
commit c35ed68d0a

@ -1,10 +1,86 @@
from datetime import date
from flask import Flask, render_template
from markdown2 import markdown_path
from os import walk
from os.path import join
app = Flask(__name__)
md_path = 'markdown'
@app.route('/')
def accueil():
return render_template('index.html')
def home():
"""
Route principale du site.
Pour le dynamisme du site, le changement de page est fait en javascript du cote client. Il s'agit donc de la seule
route du site. Il faut cependant charger les evenements sur la page car il s'agit du seul element dynamique du site.
On vient donc chercher les fichiers Markdown correspondant aux evenements et on les fournits a 'render_template' qui
va generer la page finale.
:return: La page 'index.html' avec les events
"""
mds = load_mardown_files()
return render_template('index.html', mds=mds)
def del_links(html):
"""
Supprime les balises de liens (<a>) dans le code HTML.
La fonction parcours l'ensemble du code caractère par caractère. Il commence par rechercher le debut de la balise
ouvrante ('<a') puis la fin de celle-ci ('>'). S'il a trouve une balise ouvrante il cherche alors une balise
fermante ('</a>'). Tout le texte du texte HTML reste intact mis à part la balise ouvrante et la balise fermante
qui sont supprimees.
:param html: Code HTML les balises doivent etre supprimees.
:return: Le code HTML initial mais sans balises de liens
"""
new_html = ""
i = 0
opened = False
while i < len(html) - 4: # La recherche de la balise fermante ne doit pas entrainer une erreur
if html[i:i + 3] == "<a ": # Début de la balise ouvrante d'un lien
for j in range(3, len(html) - i - 3):
if html[i + j] == ">": # Fin de la balise ouvrante
i += j + 1
break
opened = True
elif html[i:i + 4] == "</a>" and opened: # Balise fermante
i += 4
opened = False
else:
new_html += html[i]
i += 1
return new_html
def load_mardown_files():
"""
Charge les fichiers markdowns correspondant aux evenements.
La fonction parcour l'ensemble des fichiers dans le dossier 'md_path'. Elle commence par verifier que l'extention
est correcte puis qu'il y a bien le bon nombre d'elements dans le nom du fichier (jour_mois_annee_titre.md). Elle
va alors recuperer la date, le titre, l'article et generer une description a partir de ce dernier.
:return: Liste de tuple contenant les informations necessaires des fichiers markdowns sous la forme :
(date, titre, description, article)
"""
mds = []
for r, d, f in walk(md_path):
for file in f:
if file[-3:] == '.md': # Il s'agit d'un fichier markdown
split = file.split('_')
if len(split) == 4: # Son nom a le bon format : jour_mois_annee_titre.md
day, month, year, title = split
title = title[:-3] # Retrait de l'extension
event_date = date(int(year), int(month), int(day))
article = markdown_path(join(md_path, file))
description = del_links(article)
mds.append((event_date, title, description, article))
return mds
if __name__ == '__main__':

@ -0,0 +1,24 @@
Heading Test 3
==============
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com
A [link][example].
[example]: http://example.com

@ -0,0 +1,33 @@
Heading
=======
## Sub-heading
Paragraphs are separated
by a blank line.
Two spaces at the end of a line
produces a line break.
Text attributes _italic_,
**bold**, `monospace`.
Horizontal rule:
---
Bullet list:
* apples
* oranges
* pears
Numbered list:
1. wash
2. rinse
3. repeat
> Markdown uses email-style > characters for blockquoting.
Inline <abbr title="Hypertext Markup Language">HTML</abbr> is supported.

@ -0,0 +1,37 @@
Heading Test 2
==============
## Sub-heading
Paragraphs are separated
by a blank line.
Two spaces at the end of a line
produces a line break.
Text attributes _italic_,
**bold**, `monospace`.
Horizontal rule:
---
Bullet list:
* apples
* oranges
* pears
Numbered list:
1. wash
2. rinse
3. repeat
A [link][example].
[example]: http://example.com
> Markdown uses email-style > characters for blockquoting.
Inline <abbr title="Hypertext Markup Language">HTML</abbr> is supported.

@ -1,4 +1,23 @@
<article id="events">
<h2 class="major">Evènements et foyers</h2>
<p>Pas d'évènements prévus à ce jour :(</p>
</article>
{% if mds %}
{% for md in mds %}
<a class="event" href="#event-{{ md[0].strftime('%d-%m-%Y') }}-{{ md[1] }}">
<div class="date">{{ md[0].strftime('%a %d %b %Y') }}</div>
<div class="title">{{ md[1] }}</div>
<div class="description">{{ md[2] | safe }}</div>
</a>
{% endfor %}
{% else %}
<p>Pas d'évènements prévus à ce jour :(</p>
{% endif %}
</article>
{% if mds %}
{% for md in mds %}
<article id="event-{{ md[0].strftime('%d-%m-%Y') }}-{{ md[1] }}">
{{ md[3] | safe }}
</article>
{% endfor %}
{% endif %}
Loading…
Cancel
Save