Module bloc1Pack.HTML_global_formV2
Générer un fichier HTML qui contient un formulaire contenant :
- la liste des départements
- un choix binaire « PRIMAIRE » « SECONDAIRE » (voir colonne C) qui affiche en dessous la liste des établissements du département choisi par l’utilisateur et du niveau demandé (sous la forme d’un tableau comme spécifié au point précédent).
- Le tableau doit être trié selon :
- les régions (colonne AB), index 27
- puis les départements (colonne AA), index 25
- puis le code de la commune (colonne I), index 8
- puis le nom de l’établissement (colonne B) index 1
- La ligne des titres doit visuellement se démarquer
- Les autres lignes doivent être alternativement sur fond gris clair et blanc
Notes
Dans cette version, un tableau javascript est généré par le script python, on gère ensuite le DOM et donc l'affichage dynamiquement via javascript.
Expand source code
#!/usr/bin/python3
#-*- coding: utf8 -*-
# @author : Sébastien LOZANO
"""Générer un fichier HTML qui contient un formulaire contenant :
* la liste des départements
* un choix binaire « PRIMAIRE » « SECONDAIRE » (voir colonne C)
qui affiche en dessous la liste des établissements du département choisi par l’utilisateur
et du niveau demandé (sous la forme d’un tableau comme spécifié au point précédent).
* Le tableau doit être trié selon :
* les régions (colonne AB), index 27
* puis les départements (colonne AA), index 25
* puis le code de la commune (colonne I), index 8
* puis le nom de l’établissement (colonne B) index 1
* La ligne des titres doit visuellement se démarquer
* Les autres lignes doivent être alternativement sur fond gris clair et blanc
`Notes`
Dans cette version, un tableau javascript est généré par le script python, on gère ensuite le DOM
et donc l'affichage dynamiquement via javascript.
"""
pass
# On fait les imports nécessaires selon le contexte
if __name__ == "__main__":
import PY_functions as b1f
import HTML_constantes as html_const
else:
import bloc1Pack.PY_functions as b1f
import bloc1Pack.HTML_constantes as html_const
############################################################################################################
# Importation des bibliotheques
############################################################################################################
from operator import itemgetter # Pour la gestion du tri des listes de tuples
import os # Pour générer la documentation
############################################################################################################
# Générer un fichier HTML qui contient un formulaire contenant :
#===> la liste des départements
#===> un choix binaire « PRIMAIRE » « SECONDAIRE » (voir colonne C)
#===> qui affiche en dessous la liste des établissements du département choisi par l’utilisateur
# et du niveau demandé (sous la forme d’un tableau comme spécifié au point précédent).
#===> Le tableau doit être trié selon :
# ===> les régions (colonne AB), index 27
# ===> puis les départements (colonne AA), index 25
# ===> puis le code de la commune (colonne I), index 8
# ===> puis le nom de l’établissement (colonne B) index 1
# Le tri pourra se faire avec la fonction de tri de Python, prenant en argument
# une fonction de comparaison ad hoc.
#===> La ligne des titres doit visuellement se démarquer
#===> Les autres lignes doivent être alternativement sur fond gris clair et blanc
############################################################################################################
# On commence par trier les données comme demandé avec la fonction de tri de python
# On supprime l'entete
list_of_tuples_tab_trie = b1f.global_list_of_tuples_tab[1:]
# Puis on trie
list_of_tuples_tab_trie = sorted(list_of_tuples_tab_trie,key=itemgetter(27,25,8,1))
#Décommenter pour tester avec une partie des données seulement
#list_of_tuples_tab_trie = list_of_tuples_tab_trie[0:7000]
#list_of_tuples_tab_trie = list_of_tuples_tab_trie[0:500]
#list_of_tuples_tab_trie = list_of_tuples_tab_trie[0:50]
# Gestion des catégories selon la colonne 19 nature_uai_libe
# On récupère toutes les dénominations
etab_all_nature_uai_libe=[]
for elt in list_of_tuples_tab_trie:
etab_all_nature_uai_libe.append(elt[19])
# Pour compter les etablissements secondaires et primaires et vérifier qu'il n'y a pas d'oubli
sec=0
pri=0
# Pour les dénominations oubliées au cas où
etab_nature_uai_libe_oubli=[]
# Pour stocker les libellés des établissements du secondaire
etab_sec_nature_uai_libe = []
# Pour stocker les libellés des établissements du primaire
etab_pri_nature_uai_libe = []
for elt in etab_all_nature_uai_libe:
if ("lycee" in elt.lower() or "college" in elt.lower() or "professionnel" in elt.lower()):
sec+=1
etab_sec_nature_uai_libe.append(elt.lower())
elif ("ecole" in elt.lower()):
pri+=1
etab_pri_nature_uai_libe.append(elt.lower())
else:
sec+=1
etab_sec_nature_uai_libe.append(elt.lower())
etab_nature_uai_libe_oubli.append(elt.lower())
# On enlève les doublons éventuels de la liste des oublis
etab_nature_uai_libe_oubli_sans_doublons = []
for elt in etab_nature_uai_libe_oubli:
if (elt not in etab_nature_uai_libe_oubli_sans_doublons):
etab_nature_uai_libe_oubli_sans_doublons.append(elt)
if __name__ == "__main__":
############ Pour savoir le nombre d'établissements traités ############
print("""
=====================================================================================================
Sortie pour connaître le nombre d'établissements traités et leur catégorie primaire ou secondaire
=====================================================================================================
nb de ligne du tuple global : {} ; total etab : {}
nb d'etablissement catégorie secondaire : {} ; nb d'établissements catégorie primaire : {}
nb d'établissements sans catégorie primaire/sceondaire: {}
=====================================================================================================
""".format(
len(list_of_tuples_tab_trie),
len(etab_all_nature_uai_libe),
sec,
pri,
len(etab_all_nature_uai_libe)-pri-sec,
)
)
######### FIN ##############
def dataPrimaireSecondaire(chaine: str):
"""Fonction pour écrire un attribut universel de données correspondant au type d'étblissement.
Primaire/Secondaire afin de permettre le choix binaire.
`Paramètres`
* chaine : Une chaine de caractères avec le contenu de la colonne '19'.
`Sorties`
* sortie : Une chaine de caractère valant 'primaire' ou 'secondaire'.
"""
pass
# On initialise la chaine de sortie
sortie = ''
for elt in etab_sec_nature_uai_libe:
if chaine.lower() in elt:
sortie = "secondaire"
for elt in etab_pri_nature_uai_libe:
if chaine.lower() in elt:
sortie = "primaire"
return sortie
def main():
# On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas
if not os.path.exists("./pagesWeb/"):
os.mkdir("./pagesWeb/")
#On ouvre en écriture le fichier html qui va recevoir le code
fichierHTML3 = open("./pagesWeb/tableauFormV2.html", "w")
# On ajoute le doctype et le head
for elt in html_const.docTypeHeadStyle:
fichierHTML3.writelines(elt)
# On ouvre le body avec un spinner pour faire patienter le temps de chargement
fichierHTML3.writelines([
"<body onload=\"hideSpinner();\">\n"
])
# On ajoute les éléments de la barre de navigation
for elt in html_const.barreDeNavigation:
fichierHTML3.writelines(elt)
# On ajoute une partie spécifique
fichierHTML3.writelines([
"""<h2>TABLEAU AVEC FORMULAIRE - VERSION 2<br>
<span id="spinnerText">
Attendez la fin du chargement de la page avant de sélectionner un département.<br>
Je sais c'est un peu long !
</span>
</h2>\n
<h3>Version avec un tableau javascript et une gestion dynamique du DOM.</h3>
<div id=\"spinner\"></div>
"""
])
# On ajoute un formulaire avec la liste des départements et le choix binaire "PRIMAIRE" "SECONDAIRE"
# pour le debug : print(list_of_tuples_tab_trie[0:2])
# On recupère la liste des départements
departements = b1f.extract_col(list_of_tuples_tab_trie,26)
#On supprime les doublons
departements_sans_doublons = []
for dep in departements :
if (dep not in departements_sans_doublons) and (dep != 'libelle_departement') :
departements_sans_doublons.append(dep)
# On range les département par ordre alphabétique
departements_sans_doublons.sort()
# pour le debug : print(departements_sans_doublons[0:2])
# début du formulaire
fichierHTML3.writelines([
"""
<form name=\"departements\" method=\"get\">
\t<select name=\"liste_dep\" id=\"liste_dep\" onchange=\"filtrerDept(this);\">
\t\t<option value=\"Selectionnez un departement ... \">Sélectionnez un département ... </option>\t
"""
])
# On crée la liste déroulante avec tous les départements
for dep in departements_sans_doublons :
fichierHTML3.writelines([
"\t\t<option value=\""+dep+"\">"+dep+"</option>\n",
])
# On crée le choix binaire "PRIMAIRE" "SECONDAIRE"
fichierHTML3.writelines([
"""
\t</select>
<input type=\"radio\" name=\"pri_sec\" id=\"primaire\" value=\"primaire\" data-prisec=\"primaire\" onchange=\"filtrerPriSec(this);\">
<label for="primaire">primaire</label>
<input type=\"radio\" name=\"pri_sec\" id=\"secondaire\" value=\"secondaire\" data-prisec=\"secondaire\" onchange=\"filtrerPriSec(this);\">
<label for="secondaire">secondaire</label>
<input type=\"button\" value=\"Tous les établissements\" onclick=\"filtrerDept(document.getElementById('liste_dep'));\">
</form>\n
<br>\n
"""
])
# On génére un tableau js avec toutes les lignes des établissements
# On crée un constructeur et on initialise un tableau qui va recevoir les données.
fichierHTML3.writelines(["<script type=\"text/javascript\">\n"])
fichierHTML3.writelines(["function Etablissements("])
for colonnes in b1f.global_list_of_tuples_tab[0]:
fichierHTML3.writelines(["{},".format(colonnes)])
fichierHTML3.writelines(["prisec) {\n"])
for colonnes in b1f.global_list_of_tuples_tab[0]:
fichierHTML3.writelines(["this.{}={};\n".format(colonnes,colonnes)])
fichierHTML3.writelines(["this.prisec=prisec;\n"])
fichierHTML3.writelines(["""
};
// Initialisation du tableau
var tousLesEtabs = [];
"""
])
# On ajoute tous les éléments contenus dans le fichier csv global
# Compteur pour le tableau tousLesEtabs
cpt=0
for lignes in list_of_tuples_tab_trie:
#print(lignes)
#print("-----")
# Un nouvel objet est instancier pour chaque ligne des données initiales
fichierHTML3.writelines(["tousLesEtabs[{}]=new Etablissements(".format(cpt)])
for colonnes in lignes:
# si c'est la dernière colonne on ne met pas de virgule
if colonnes == "date_ouverture":
fichierHTML3.writelines(["\"{}\"".format(colonnes)])
else:
fichierHTML3.writelines(["\"{}\",".format(colonnes)])
fichierHTML3.writelines(["\"{}\");\n".format(dataPrimaireSecondaire(lignes[19]),lignes[26])])
cpt+=1
fichierHTML3.writelines([
"""
</script>
"""
])
# On crée le tableau
fichierHTML3.writelines([
"<table id=\"monTab\">\n",
])
# On affiche les entetes
fichierHTML3.writelines(["<tr>"])
for colonnes in b1f.global_list_of_tuples_tab[0]:
fichierHTML3.writelines(["<th>{}</th>".format(colonnes)])
fichierHTML3.writelines(["</tr>\n"])
# On affiche le reste
# compteur de ligne pour la couleur du background
fichierHTML3.writelines(["""
<script>
// Pour récupérer les éléments à afficher
// Selon primaire ou secondaire
// Selon le département
function toutCeQueJeVeux(prisec,dept) {
// On vide le tableau sauf la premiere ligne
var myNode = document.getElementById("monTab");
while (myNode.rows[1]) {
myNode.removeChild(myNode.rows[1]);
};
// Récupérer l'état du radio de sélection primaire/secondaire
let radioState = false;
let local_prisec = document.forms[0].elements["pri_sec"];
for (var i=0;i<local_prisec.length;i++) {
if (local_prisec[i].checked == true) {
radioState = true;
};
};
// Compteur pour la couleur du background des lignes sauf la première
let cpt = 1;
// Variable pour le contenu d'une ligne
let TR;
// Variable pour le contenu d'une colonne
let TD;
// Variable pour le texte d'une colonne
let TXT;
// On recupère uniquement les établisssements voulus
let ceQueJeVeux= [];
for (let i=0;i<tousLesEtabs.length;i++) {
// si l'une des valeurs du formulaire radio est selectionné
if (radioState) {
// Si le data de l'établissement correspond à ce qu'on veut, primaire ou secondaire
// ainsi qu'au département voulu
// on ajoute l'établissement au tableau
if (tousLesEtabs[i].prisec == prisec && tousLesEtabs[i].libelle_departement == dept) {
ceQueJeVeux.push(tousLesEtabs[i])
};
} else {
// Si le radio primaire/secondaire n'est pas sélectionné
// On ajoute tous les établissements du département
if (tousLesEtabs[i].libelle_departement == dept) {
ceQueJeVeux.push(tousLesEtabs[i])
};
};
};
// On crée tous les éléments à ajouter au DOM un à un
// en fonction de ce que contient le tableau tousLesEtabs
for (let i=0;i<ceQueJeVeux.length;i++) {
// On crée la ligne
TR = document.createElement("tr");
// On ajoute un data pour la gestion du primaire/secondaire
TR.dataset.prisec = ceQueJeVeux[i].prisec;
// On ajoute un data pour la gestion du département
TR.dataset.dept = ceQueJeVeux[i].code_departement;
// Selon la parité du compteur on ajuste le background avec une class
if (cpt%2 == 0) {
TR.classList.add("evenNthChildBackground");
} else {
TR.classList.add("oddNthChildBackground");
};
// On ajoute les colonnes et le contenu à la ligne
for (colonnes in ceQueJeVeux[i]) {
if (colonnes != "prisec") {
TD = document.createElement("td");
TXT = document.createTextNode(ceQueJeVeux[i][colonnes]);
TD.appendChild(TXT);
TR.appendChild(TD);
};
};
// On ajoute la ligne au tableau
document.getElementById('monTab').appendChild(TR);
// On incrémente le compteur pour passer à la ligne suivante
cpt+=1;
};
};
</script>
"""
])
# On ferme le tableau HTML
fichierHTML3.writelines([
"</table>\n",
])
# On ferme le body et on écrit les script javascript
fichierHTML3.writelines([
"""
<script type="text/javascript">\n
// Pour gérer l'affichage du spinner et du texte pour faire patienter
function hideSpinner() {
document.getElementById('spinner').style.display = 'none';
document.getElementById('spinnerText').style.display = 'none';
};
// Pour filtrer les établissements du primaire ou du secondaire
function filtrerPriSec(elem) {
// Récupérer le data du radio primaire/secondaire
var data_prisec = elem.dataset.prisec;
// Récupérer le texte selectionné de la liste déroulante
var data_dept = document.getElementById('liste_dep').options[document.getElementById('liste_dep').selectedIndex].text;
// Récupérer l'état du radio
var radioState = false;
var prisec = document.forms[0].elements["pri_sec"];
for (var i=0;i<prisec.length;i++) {
if (prisec[i].checked == true) {
radioState = true;
};
};
// Mettre à jour le DOM avec la fonction toutCeQueJeVeux()
toutCeQueJeVeux(data_prisec,data_dept);
}
// Pour filtrer les établissements d'un département donné
function filtrerDept(elem) {
// Remettre le radio à zéro
var prisec = document.forms[0].elements["pri_sec"];
for (var i=0;i<prisec.length;i++) {
prisec[i].checked = false;
};
// Récupérer le texte du select
var data_dept = elem.options[elem.selectedIndex].text;
console.log("filtrerDept : "+data_dept)
// Mettre à jour le DOM avec la fonction toutCeQueJeVeux()
// Le premier paramètre est une chaine arbitraire autre que "primaire" ou "secondaire"
// afin que tous les établissements du département soient ajoutés au tableau ceQueJeVeux
// de la fonction toutCeQueJeVeux()
toutCeQueJeVeux("nada",data_dept);
};
</script>
</body>\n
</html>\n
"""
])
#On ferme le fichier
fichierHTML3.close()
if __name__ == "__main__":
main()
Functions
def dataPrimaireSecondaire(chaine: str)
-
Fonction pour écrire un attribut universel de données correspondant au type d'étblissement. Primaire/Secondaire afin de permettre le choix binaire.
Paramètres
* chaine : Une chaine de caractères avec le contenu de la colonne '19'.
Sorties
* sortie : Une chaine de caractère valant 'primaire' ou 'secondaire'.
Expand source code
def dataPrimaireSecondaire(chaine: str): """Fonction pour écrire un attribut universel de données correspondant au type d'étblissement. Primaire/Secondaire afin de permettre le choix binaire. `Paramètres` * chaine : Une chaine de caractères avec le contenu de la colonne '19'. `Sorties` * sortie : Une chaine de caractère valant 'primaire' ou 'secondaire'. """ pass # On initialise la chaine de sortie sortie = '' for elt in etab_sec_nature_uai_libe: if chaine.lower() in elt: sortie = "secondaire" for elt in etab_pri_nature_uai_libe: if chaine.lower() in elt: sortie = "primaire" return sortie
def main()
-
Expand source code
def main(): # On crée le dossier qui va accueillir les fichiers HTML si il n'existe pas if not os.path.exists("./pagesWeb/"): os.mkdir("./pagesWeb/") #On ouvre en écriture le fichier html qui va recevoir le code fichierHTML3 = open("./pagesWeb/tableauFormV2.html", "w") # On ajoute le doctype et le head for elt in html_const.docTypeHeadStyle: fichierHTML3.writelines(elt) # On ouvre le body avec un spinner pour faire patienter le temps de chargement fichierHTML3.writelines([ "<body onload=\"hideSpinner();\">\n" ]) # On ajoute les éléments de la barre de navigation for elt in html_const.barreDeNavigation: fichierHTML3.writelines(elt) # On ajoute une partie spécifique fichierHTML3.writelines([ """<h2>TABLEAU AVEC FORMULAIRE - VERSION 2<br> <span id="spinnerText"> Attendez la fin du chargement de la page avant de sélectionner un département.<br> Je sais c'est un peu long ! </span> </h2>\n <h3>Version avec un tableau javascript et une gestion dynamique du DOM.</h3> <div id=\"spinner\"></div> """ ]) # On ajoute un formulaire avec la liste des départements et le choix binaire "PRIMAIRE" "SECONDAIRE" # pour le debug : print(list_of_tuples_tab_trie[0:2]) # On recupère la liste des départements departements = b1f.extract_col(list_of_tuples_tab_trie,26) #On supprime les doublons departements_sans_doublons = [] for dep in departements : if (dep not in departements_sans_doublons) and (dep != 'libelle_departement') : departements_sans_doublons.append(dep) # On range les département par ordre alphabétique departements_sans_doublons.sort() # pour le debug : print(departements_sans_doublons[0:2]) # début du formulaire fichierHTML3.writelines([ """ <form name=\"departements\" method=\"get\"> \t<select name=\"liste_dep\" id=\"liste_dep\" onchange=\"filtrerDept(this);\"> \t\t<option value=\"Selectionnez un departement ... \">Sélectionnez un département ... </option>\t """ ]) # On crée la liste déroulante avec tous les départements for dep in departements_sans_doublons : fichierHTML3.writelines([ "\t\t<option value=\""+dep+"\">"+dep+"</option>\n", ]) # On crée le choix binaire "PRIMAIRE" "SECONDAIRE" fichierHTML3.writelines([ """ \t</select> <input type=\"radio\" name=\"pri_sec\" id=\"primaire\" value=\"primaire\" data-prisec=\"primaire\" onchange=\"filtrerPriSec(this);\"> <label for="primaire">primaire</label> <input type=\"radio\" name=\"pri_sec\" id=\"secondaire\" value=\"secondaire\" data-prisec=\"secondaire\" onchange=\"filtrerPriSec(this);\"> <label for="secondaire">secondaire</label> <input type=\"button\" value=\"Tous les établissements\" onclick=\"filtrerDept(document.getElementById('liste_dep'));\"> </form>\n <br>\n """ ]) # On génére un tableau js avec toutes les lignes des établissements # On crée un constructeur et on initialise un tableau qui va recevoir les données. fichierHTML3.writelines(["<script type=\"text/javascript\">\n"]) fichierHTML3.writelines(["function Etablissements("]) for colonnes in b1f.global_list_of_tuples_tab[0]: fichierHTML3.writelines(["{},".format(colonnes)]) fichierHTML3.writelines(["prisec) {\n"]) for colonnes in b1f.global_list_of_tuples_tab[0]: fichierHTML3.writelines(["this.{}={};\n".format(colonnes,colonnes)]) fichierHTML3.writelines(["this.prisec=prisec;\n"]) fichierHTML3.writelines([""" }; // Initialisation du tableau var tousLesEtabs = []; """ ]) # On ajoute tous les éléments contenus dans le fichier csv global # Compteur pour le tableau tousLesEtabs cpt=0 for lignes in list_of_tuples_tab_trie: #print(lignes) #print("-----") # Un nouvel objet est instancier pour chaque ligne des données initiales fichierHTML3.writelines(["tousLesEtabs[{}]=new Etablissements(".format(cpt)]) for colonnes in lignes: # si c'est la dernière colonne on ne met pas de virgule if colonnes == "date_ouverture": fichierHTML3.writelines(["\"{}\"".format(colonnes)]) else: fichierHTML3.writelines(["\"{}\",".format(colonnes)]) fichierHTML3.writelines(["\"{}\");\n".format(dataPrimaireSecondaire(lignes[19]),lignes[26])]) cpt+=1 fichierHTML3.writelines([ """ </script> """ ]) # On crée le tableau fichierHTML3.writelines([ "<table id=\"monTab\">\n", ]) # On affiche les entetes fichierHTML3.writelines(["<tr>"]) for colonnes in b1f.global_list_of_tuples_tab[0]: fichierHTML3.writelines(["<th>{}</th>".format(colonnes)]) fichierHTML3.writelines(["</tr>\n"]) # On affiche le reste # compteur de ligne pour la couleur du background fichierHTML3.writelines([""" <script> // Pour récupérer les éléments à afficher // Selon primaire ou secondaire // Selon le département function toutCeQueJeVeux(prisec,dept) { // On vide le tableau sauf la premiere ligne var myNode = document.getElementById("monTab"); while (myNode.rows[1]) { myNode.removeChild(myNode.rows[1]); }; // Récupérer l'état du radio de sélection primaire/secondaire let radioState = false; let local_prisec = document.forms[0].elements["pri_sec"]; for (var i=0;i<local_prisec.length;i++) { if (local_prisec[i].checked == true) { radioState = true; }; }; // Compteur pour la couleur du background des lignes sauf la première let cpt = 1; // Variable pour le contenu d'une ligne let TR; // Variable pour le contenu d'une colonne let TD; // Variable pour le texte d'une colonne let TXT; // On recupère uniquement les établisssements voulus let ceQueJeVeux= []; for (let i=0;i<tousLesEtabs.length;i++) { // si l'une des valeurs du formulaire radio est selectionné if (radioState) { // Si le data de l'établissement correspond à ce qu'on veut, primaire ou secondaire // ainsi qu'au département voulu // on ajoute l'établissement au tableau if (tousLesEtabs[i].prisec == prisec && tousLesEtabs[i].libelle_departement == dept) { ceQueJeVeux.push(tousLesEtabs[i]) }; } else { // Si le radio primaire/secondaire n'est pas sélectionné // On ajoute tous les établissements du département if (tousLesEtabs[i].libelle_departement == dept) { ceQueJeVeux.push(tousLesEtabs[i]) }; }; }; // On crée tous les éléments à ajouter au DOM un à un // en fonction de ce que contient le tableau tousLesEtabs for (let i=0;i<ceQueJeVeux.length;i++) { // On crée la ligne TR = document.createElement("tr"); // On ajoute un data pour la gestion du primaire/secondaire TR.dataset.prisec = ceQueJeVeux[i].prisec; // On ajoute un data pour la gestion du département TR.dataset.dept = ceQueJeVeux[i].code_departement; // Selon la parité du compteur on ajuste le background avec une class if (cpt%2 == 0) { TR.classList.add("evenNthChildBackground"); } else { TR.classList.add("oddNthChildBackground"); }; // On ajoute les colonnes et le contenu à la ligne for (colonnes in ceQueJeVeux[i]) { if (colonnes != "prisec") { TD = document.createElement("td"); TXT = document.createTextNode(ceQueJeVeux[i][colonnes]); TD.appendChild(TXT); TR.appendChild(TD); }; }; // On ajoute la ligne au tableau document.getElementById('monTab').appendChild(TR); // On incrémente le compteur pour passer à la ligne suivante cpt+=1; }; }; </script> """ ]) # On ferme le tableau HTML fichierHTML3.writelines([ "</table>\n", ]) # On ferme le body et on écrit les script javascript fichierHTML3.writelines([ """ <script type="text/javascript">\n // Pour gérer l'affichage du spinner et du texte pour faire patienter function hideSpinner() { document.getElementById('spinner').style.display = 'none'; document.getElementById('spinnerText').style.display = 'none'; }; // Pour filtrer les établissements du primaire ou du secondaire function filtrerPriSec(elem) { // Récupérer le data du radio primaire/secondaire var data_prisec = elem.dataset.prisec; // Récupérer le texte selectionné de la liste déroulante var data_dept = document.getElementById('liste_dep').options[document.getElementById('liste_dep').selectedIndex].text; // Récupérer l'état du radio var radioState = false; var prisec = document.forms[0].elements["pri_sec"]; for (var i=0;i<prisec.length;i++) { if (prisec[i].checked == true) { radioState = true; }; }; // Mettre à jour le DOM avec la fonction toutCeQueJeVeux() toutCeQueJeVeux(data_prisec,data_dept); } // Pour filtrer les établissements d'un département donné function filtrerDept(elem) { // Remettre le radio à zéro var prisec = document.forms[0].elements["pri_sec"]; for (var i=0;i<prisec.length;i++) { prisec[i].checked = false; }; // Récupérer le texte du select var data_dept = elem.options[elem.selectedIndex].text; console.log("filtrerDept : "+data_dept) // Mettre à jour le DOM avec la fonction toutCeQueJeVeux() // Le premier paramètre est une chaine arbitraire autre que "primaire" ou "secondaire" // afin que tous les établissements du département soient ajoutés au tableau ceQueJeVeux // de la fonction toutCeQueJeVeux() toutCeQueJeVeux("nada",data_dept); }; </script> </body>\n </html>\n """ ]) #On ferme le fichier fichierHTML3.close()