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 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 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__':
|
||||
|
|
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">
|
||||
<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