Ajout dynamique des evenements - Il manque le frontend
This commit is contained in:
parent
adfb69dbf9
commit
c35ed68d0a
5 changed files with 193 additions and 4 deletions
80
aurore.py
80
aurore.py
|
@ -1,10 +1,86 @@
|
||||||
|
from datetime import date
|
||||||
from flask import Flask, render_template
|
from flask import Flask, render_template
|
||||||
|
from markdown2 import markdown_path
|
||||||
|
from os import walk
|
||||||
|
from os.path import join
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
md_path = 'markdown'
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def accueil():
|
def home():
|
||||||
return render_template('index.html')
|
"""
|
||||||
|
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 où 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__':
|
if __name__ == '__main__':
|
||||||
|
|
24
markdown/07_05_2019_Test3.md
Normal file
24
markdown/07_05_2019_Test3.md
Normal file
|
@ -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
|
33
markdown/10_05_2019_Test.md
Normal file
33
markdown/10_05_2019_Test.md
Normal file
|
@ -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.
|
37
markdown/12_05_2019_Tést2.md
Normal file
37
markdown/12_05_2019_Tést2.md
Normal file
|
@ -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">
|
<article id="events">
|
||||||
<h2 class="major">Evènements et foyers</h2>
|
<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…
Reference in a new issue