From 214efac1bdc7379d6635729447c094b70be3af4b Mon Sep 17 00:00:00 2001 From: Nekori Date: Fri, 23 Apr 2021 02:35:40 +0200 Subject: [PATCH 01/34] =?UTF-8?q?g=C3=A9n=C3=A9ration=20pas=20web?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/base.html | 68 +++++++++ html/export_yaml_to_html.py | 285 ++++++++++++++++++++++++++++++++++++ 2 files changed, 353 insertions(+) create mode 100644 html/base.html create mode 100644 html/export_yaml_to_html.py diff --git a/html/base.html b/html/base.html new file mode 100644 index 0000000..0bccb28 --- /dev/null +++ b/html/base.html @@ -0,0 +1,68 @@ + + + + + {% block title %}{% endblock %} + + + + + + + + +
+
+ {% block content %} + {% endblock %} +
+
+ + + + \ No newline at end of file diff --git a/html/export_yaml_to_html.py b/html/export_yaml_to_html.py new file mode 100644 index 0000000..49295e2 --- /dev/null +++ b/html/export_yaml_to_html.py @@ -0,0 +1,285 @@ +import os +import sys +import argparse +import glob + +sys.path.insert(0,"../python") +from config import Config +from jinja2 import Template, Environment, FileSystemLoader + +# Description des arguments possibles du programme +parser = argparse.ArgumentParser(description="Conversion des YAML en HTML") +parser.add_argument( + "-r", + "--root", + default="..", + help="repertoire de base (racine) pour chercher les fichiers de données" +) +args = parser.parse_args() +Config.ROOT = args.root + +import ressource +from ressource import * + +# Chemins des différents dossiers +REPERTOIRE_TEMP = Config.ROOT + "/python/export" +REPERTOIRE_RESSOURCES_DEFINITIVES = Config.ROOT + "/yaml/ressources" +REPERTOIRE_SAE_DEFINITIVES = Config.ROOT + "/yaml/saes" +REPERTOIRE_HTML = Config.ROOT + "/html/export" + +# Chargement des ressources : depuis les versions définitives du répertoire yaml d'abord, +# puis dans python/export si manquantes +fichiers_definitifs = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_RESSOURCES_DEFINITIVES+'/*.yml') ] #nom fichier dans yaml/ressources +fichiers_temp = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_TEMP+'/*.yml') ] #nom fichier dans python/export +fichiers_ressources = [REPERTOIRE_RESSOURCES_DEFINITIVES + "/" + f for f in fichiers_definitifs] # chemins de fichier ressources YAML +for f in fichiers_temp: + if f not in fichiers_definitifs and f.startswith("R"): + fichiers_ressources.append(REPERTOIRE_TEMP + "/" + f) +fichiers_ressources = sorted(fichiers_ressources) # tri par ordre alphabétique + +ressources = {"S1": [], "S2": []} +for fichieryaml in fichiers_ressources: + r = Ressource(fichieryaml) # lecture du fichier + sem = "S" + str(r.ressource["semestre"]) + ressources[sem].append(r) +# tri par code croissant +for sem in ressources: + ressources[sem] = sorted(ressources[sem], key=lambda r: r.ressource["code"]) + +# Chargement des saé et des exemples +fichiers_definitifs = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_SAE_DEFINITIVES+'/*.yml') ] +fichiers_temp = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_TEMP+'/*.yml') ] +fichiers_saes = [REPERTOIRE_SAE_DEFINITIVES + "/" + f for f in fichiers_definitifs if "exemple" not in f] +fichiers_exemples = [REPERTOIRE_SAE_DEFINITIVES + "/" + f for f in fichiers_definitifs if "exemple" in f] +for f in fichiers_temp: + if f not in fichiers_definitifs and f.startswith("S"): + if "exemple" not in f: + fichiers_saes.append(REPERTOIRE_TEMP + "/" + f) + elif "exemple" in f: + fichiers_exemples.append(REPERTOIRE_TEMP + "/" + f) +fichiers_saes = sorted(fichiers_saes) # tri par ordre alphabétique +fichiers_exemples = sorted(fichiers_exemples) + +saes = {"S1": [], "S2": []} +for fichieryaml in fichiers_saes: + s = SAE(fichieryaml) + sem = "S" + str(s.sae["semestre"]) + saes[sem].append(s) + +for sem in saes: + saes[sem] = sorted(saes[sem], key=lambda s: s.sae["code"]) + +exemples = {"S1" : {}, "S2" : {} } + +for fichieryaml in fichiers_exemples: + e = ExempleSAE(fichieryaml) + sem = "S" + str(e.exemple["semestre"]) + sae = e.exemple["code"] + if sae not in exemples[sem]: + exemples[sem][sae] = [] + exemples[sem][sae].append(e) + +CHEMIN_TEMPLATE = Config.ROOT + "/html" +# Création de l'environnement pour charger les templates +env = Environment(trim_blocks=True, lstrip_blocks=True, loader=FileSystemLoader(CHEMIN_TEMPLATE)) +# Template de chaque pages ressources, saes, exemples +template = env.from_string(""" + {% extends "base.html" %} + {% block title %}{{data.code}} - {{data.nom}}{{data.titre}}{% endblock %} + {% block content %} + + + + {% for categorie, valeur in data.items() %} + + + + + {% endfor %} + +
{{categorie.capitalize()}} + {#- Gestion des tableaux #} + {% if categorie == "motscles" or categorie == "sae" or categorie == "ressources" -%} +
{% for mot in valeur %}{{mot}}{% endfor %}
+ {#- Gestion des ACS #} + {% elif categorie == "acs" -%} +
{% for rt,acs in valeur.items() %}{% for ac in acs %}{{ac}}{% endfor %}{% endfor %}
+ {#- Gestion des coeffs #} + {% elif categorie == "coeffs" -%} +
{% for rt, coeff in valeur.items() %}{{rt}} : {{coeff}}{% endfor %}
+ {#- Gestion des exemples #} + {% elif categorie == "exemples" -%} + {% for exemple in valeur %}Exemple{{loop.index}}{% if not loop.last %} - {% endif %}{% endfor %} + {#- Gestion des prerequis #} + {% elif categorie == "prerequis" -%} + {% if valeur != "Aucun" %}
{% for rt in valeur %}{{rt}}{% endfor %}
+ {%- else %}{{valeur}}{% endif %} + {#- Gestion des autres catégories #} + {% else -%} + {{valeur}} + {%- endif -%} +
+ + {% endblock %} +""") + +# Template de la liste des ressources par semestre +template_List_Ressource = env.from_string(""" + {% extends "base.html" %} + {% block title %}Liste des Ressources du semestre {{sem}}{% endblock %} + {% block content %} +
+ +
+ {% endblock %} +""") + +# Template de la liste des saes +template_List_SAE = env.from_string(""" + {% extends "base.html" %} + {% block title %}Liste des SAE{% endblock %} + {% block content %} +
+ +
+ {% endblock %} +""") + +def motscles(mc): + """ Retourne un tableau de mots clés en prenant compte des parenthèses """ + motscles = [] + mot = "" + i = 0 + while i < len(mc): + if mc[i] == "(": + while mc[i] != ")": + mot += mc[i] + i += 1 + elif mc[i] == "," and mc[i+1] == " ": + motscles.append(mot) + mot = "" + i += 2 + mot += mc[i] + i += 1 + motscles.append(mot) + return motscles + +#Créer un fichier contenant la liste des saes +data = {"data" : saes} # "data" contient un tableau des saes +template_List_SAE.stream(data).dump(REPERTOIRE_HTML + "/SAE.html") + +# Création des pages individuelles ressources, saes, exemples +for indexSem, sem in enumerate(ressources): + for i, ressource in enumerate(ressources[sem]): + data = {} + for categorie, valeur in ressource.ressource.items(): + data[categorie] = valeur + # Ajout des espaces en html + data["contenu"] = data["contenu"].replace("\n","
") + data["contexte"] = data["contexte"].replace("\n","

") + # Sépare les motclés pour former des tags + data["motscles"] = motscles(data["motscles"]) + # Ajoute les liens pour les boutons "Suivant" et "Précédent" + datas = {"data":data} + if(i > 0): datas["precedent"] = "R" + str(int(ressource.ressource["code"][1:])-1) + ".html" + elif(indexSem > 0): datas["precedent"] = "R" + ressources[list(ressources.keys())[indexSem - 1]][-1].ressource["code"][1:] + ".html" + if(i < len(ressources[sem]) - 1): datas["suivant"] = "R" + str(int(ressource.ressource["code"][1:])+1) + ".html" + elif(indexSem < len(ressources) - 1): datas["suivant"] = "R" + str((int(sem[-1:])+1)*100+1) + ".html" + # Créer un fichier html depuis un TemplateStream créer à partir du template et des données dans "data" qui remplace les variables + template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"] + ".html") + + #Créer un fichier contenant la liste des ressources du semestre + data = {"data" : ressources[sem],"sem" : sem} # "data" contient un tableau des ressources du semestre + template_List_Ressource.stream(data).dump(REPERTOIRE_HTML + "/ressources" + str(sem) + ".html") + + for i, sae in enumerate(saes[sem]): + data = {} + for categorie, valeur in sae.sae.items(): + data[categorie] = valeur + # On regarde si des exemples du sae existent, si True, on les ajoute dans "data" + if(sae.sae["code"] in exemples[sem]) : + data["exemples"] = exemples[sem][sae.sae["code"]] + data["description"] = data["description"].replace("\n","

") + data["livrables"] = data["livrables"].replace("\n","

") + data["motscles"] = motscles(data["motscles"]) + datas = {"data":data} + if(i > 0): datas["precedent"] = "SAE" + str(int(sae.sae["code"][3:])-1) + ".html" + elif(indexSem > 0): datas["precedent"] = "SAE" + saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] + ".html" # saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] -> "code" du dernier sae du semestre précédent + if(i < len(saes[sem]) - 1): datas["suivant"] = "SAE" + str(int(sae.sae["code"][3:])+1) + ".html" + elif(indexSem < len(saes) - 1): datas["suivant"] = "SAE" + str((int(sem[-1:])+1)*10+1) + ".html" + template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"].replace("É","E") + ".html") + + for sae in exemples[sem]: + i = 1 # Nommage des fichiers exemple sae peut être modifier + for j, exemple in enumerate(exemples[sem][sae]): + data = {} + for categorie, valeur in exemple.exemple.items(): + data[categorie] = valeur + if (isinstance(valeur,str)): + data[categorie] = data[categorie].replace("\n","

") + datas = {"data":data} + if(j > 0): datas["precedent"] = "SAE" + data["code"][-2:] + "_exemple" + str(i-1) + ".html" + if(j < len(exemples[sem][sae]) - 1): datas["suivant"] = "SAE" + data["code"][-2:] + "_exemple" + str(i+1) + ".html" + template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"].replace("É","E") + "_exemple" + str(i) + ".html") + i+=1 + From b52638a975072bd822d7ab1e56dda21c4a9d4525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Li?= Date: Fri, 23 Apr 2021 02:37:46 +0200 Subject: [PATCH 02/34] Ajouter 'html/export' --- html/export | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 html/export diff --git a/html/export b/html/export new file mode 100644 index 0000000..e69de29 From baac9d4fda9850cab47df41e821e82c69ee7000d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Li?= Date: Fri, 23 Apr 2021 02:38:01 +0200 Subject: [PATCH 03/34] Supprimer 'html/export' --- html/export | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 html/export diff --git a/html/export b/html/export deleted file mode 100644 index e69de29..0000000 From dd912d2842d6132fd8dad9bf4f52c4e7edcbdc2c Mon Sep 17 00:00:00 2001 From: Nekori Date: Fri, 23 Apr 2021 02:42:37 +0200 Subject: [PATCH 04/34] create html/export if not exist --- html/export_yaml_to_html.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/html/export_yaml_to_html.py b/html/export_yaml_to_html.py index 49295e2..e8e5b10 100644 --- a/html/export_yaml_to_html.py +++ b/html/export_yaml_to_html.py @@ -27,6 +27,10 @@ REPERTOIRE_RESSOURCES_DEFINITIVES = Config.ROOT + "/yaml/ressources" REPERTOIRE_SAE_DEFINITIVES = Config.ROOT + "/yaml/saes" REPERTOIRE_HTML = Config.ROOT + "/html/export" +# Créer le dossier html/export s'il n'existe pas +if not os.path.exists(REPERTOIRE_HTML): + os.makedirs(REPERTOIRE_HTML) + # Chargement des ressources : depuis les versions définitives du répertoire yaml d'abord, # puis dans python/export si manquantes fichiers_definitifs = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_RESSOURCES_DEFINITIVES+'/*.yml') ] #nom fichier dans yaml/ressources From 3dcac3e62e4d248f2307bcde11015c78120097a1 Mon Sep 17 00:00:00 2001 From: Nekori Date: Fri, 23 Apr 2021 02:45:34 +0200 Subject: [PATCH 05/34] readme update --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 9242491..05b8ec9 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,11 @@ par exemple: cd python python export_yaml_to_latex.py -a +### Génération du LaTeX + + cd html + python export_yaml_to_html.py + ### Génération de PDF cd latex From 0315d9f6fe4401013b26239c08ac2e8f06597841 Mon Sep 17 00:00:00 2001 From: Nekori Date: Fri, 23 Apr 2021 02:45:59 +0200 Subject: [PATCH 06/34] readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05b8ec9..b1ffd12 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ par exemple: cd python python export_yaml_to_latex.py -a -### Génération du LaTeX +### Génération du Html cd html python export_yaml_to_html.py From ca55d0f4cd5a76c6fac37c4c676d90c6287593f2 Mon Sep 17 00:00:00 2001 From: Nekori Date: Fri, 23 Apr 2021 12:27:53 +0200 Subject: [PATCH 07/34] =?UTF-8?q?Am=C3=A9lioration=20visuel=20des=20bouton?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/base.html | 3 +++ html/export_yaml_to_html.py | 24 ++++++++---------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/html/base.html b/html/base.html index 0bccb28..cb6d134 100644 --- a/html/base.html +++ b/html/base.html @@ -57,6 +57,9 @@ $(".navbar-burger").toggleClass("is-active"); $(".navbar-menu").toggleClass("is-active"); }); + $(".button").click(function() { + $(this).addClass("is-loading"); + }); // Redirige vers la page tapé dans la barre de recherche | recheche brut, possible d'amélioration avec // auto-complétion, créer une page web "page n'existe pas", recherche par motsclés, page avec une liste des // pages web possibles en fonction de ce que entre l'utilisateur diff --git a/html/export_yaml_to_html.py b/html/export_yaml_to_html.py index e8e5b10..8398c58 100644 --- a/html/export_yaml_to_html.py +++ b/html/export_yaml_to_html.py @@ -91,30 +91,26 @@ template = env.from_string(""" {% extends "base.html" %} {% block title %}{{data.code}} - {{data.nom}}{{data.titre}}{% endblock %} {% block content %} -