summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenise sur Lya <sekhmet@lya>2021-07-22 14:02:16 +0200
committerDenise sur Lya <sekhmet@lya>2021-07-22 14:02:16 +0200
commite4ec2d3d510d6138430c48d5dc699c10ff8dc463 (patch)
tree8ee7d1763405b8568add33e924014da37cc7b0f2
parentf1e65b5e6bc5e0803f359f93c8e795a61f61b4a6 (diff)
downloadoms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.tar.gz
oms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.tar.zst
oms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.zip
petites améliorations graphiques, icône, etc
-rw-r--r--app.py35
-rw-r--r--configuration.py4
-rw-r--r--data/changelog_data.txt37
-rw-r--r--gestion_donnees.py44
-rw-r--r--static/favicon.icobin0 -> 1246 bytes
-rw-r--r--static/outilspage.js16
-rw-r--r--static/requetes.js2
-rw-r--r--static/style.css11
-rw-r--r--templates/base.html3
-rw-r--r--templates/changelog.html25
-rw-r--r--templates/index.html15
-rw-r--r--trace_courbe.py6
12 files changed, 126 insertions, 72 deletions
diff --git a/app.py b/app.py
index 5875435..c11eb8b 100644
--- a/app.py
+++ b/app.py
@@ -8,9 +8,8 @@ import base64
8from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 8from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
9 9
10from configuration import config_init,CONFIG 10from configuration import config_init,CONFIG
11from gestion_erreurs import initialise_erreurs, debug, niveau_debug, warning 11from gestion_erreurs import initialise_erreurs, debug, niveau_debug
12import gestion_donnees as donnees 12import gestion_donnees as donnees
13import gestion_couleurs as couleurs
14from trace_courbe import cree_figure 13from trace_courbe import cree_figure
15import faq as f 14import faq as f
16 15
@@ -32,12 +31,14 @@ def index():
32 beta=initialise_mode_beta() 31 beta=initialise_mode_beta()
33 liste_err = initialise_erreurs() 32 liste_err = initialise_erreurs()
34 val_form = config_init() 33 val_form = config_init()
34 ## Si on a chargé un fichier de données
35 if flask.request.method=="POST": 35 if flask.request.method=="POST":
36 if 'fichier_donnees' in flask.request.files: 36 if 'fichier_donnees' in flask.request.files:
37 ## charger les données dans le formulaire 37 ## charger les données dans le formulaire
38 fichier = flask.request.files['fichier_donnees'] 38 fichier = flask.request.files['fichier_donnees']
39 chaine = fichier.read() 39 chaine = fichier.read()
40 val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err) 40 val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err)
41 # Si jamais le formulaire est vide, c'est qu'il y a eu une erreur !
41 if val_form2 == {}: 42 if val_form2 == {}:
42 return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form, CONFIG=CONFIG, beta=beta) 43 return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form, CONFIG=CONFIG, beta=beta)
43 val_form.update(val_form2) 44 val_form.update(val_form2)
@@ -55,35 +56,17 @@ def apropos():
55def courbe_image(ext): 56def courbe_image(ext):
56 liste_err = initialise_erreurs() 57 liste_err = initialise_erreurs()
57 data = flask.request.form 58 data = flask.request.form
58 enfants_add = [] # Enfants additionnels
59 i=2
60 while "couleur_donnees_"+str(i) in data: # Tant qu'il y a des données de ce type
61 if 'fichier_donnees_'+str(i) in flask.request.files: # Un enfant à ajouter
62 fichier = flask.request.files["fichier_donnees_"+str(i)]
63 chaine = fichier.read() # On récupère la chaîne
64 if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable
65 debug("Un fichier de données additionnel trouvé", liste_err)
66 formulaire_2 = donnees.fichier_json_vers_configdonnees(chaine, liste_err)
67 if formulaire_2 =={}:
68 warning("Le fichier de données additionnel est vide ou mal formaté", liste_err)
69 else:
70 debug("Form 2 : "+str(formulaire_2), liste_err)
71 # Récupérer sous forme python
72 conf2, ljours2, listes_donnees2 = donnees.web_vers_python(formulaire_2,liste_err, court=True)
73 debug("Form 2 données travaillées "+str(ljours2)+str(listes_donnees2), liste_err)
74 # Le symbole et la couleur
75 symb2 = donnees.gere_symbole(data.get("symbole_donnees_"+str(i)))
76 coul2 = couleurs.rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err)
77 enfant2 = donnees.eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2)
78 enfants_add.append(enfant2)
79 i+=1
80 59
81 # récupérer les données du formulaire proprement 60 # récupérer les données du formulaire proprement
82 config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err) 61 config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err)
83 debug(" * On a récupéré et traité les données du formulaire web",liste_err) 62 debug(" * On a récupéré et traité les données du formulaire web",liste_err)
84 63
64 # Gérer les enfants additionnels
65 enfants_add = donnees.gere_enfants_additionnels(data, flask.request.files, liste_err)
66 debug("Enfants additionnels récupérés : "+str(enfants_add), liste_err)
67
68 # Récupérer le texte à exporter
85 texte = donnees.donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config) 69 texte = donnees.donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config)
86
87 debug("texte prêt à être exporté : "+texte,liste_err) 70 debug("texte prêt à être exporté : "+texte,liste_err)
88 71
89 # noter le nom de l'enfant pour l'export 72 # noter le nom de l'enfant pour l'export
@@ -156,7 +139,7 @@ def changelog():
156 139
157 table_version = f.lire_fichier_csv_simple(f.fichier_changelog) 140 table_version = f.lire_fichier_csv_simple(f.fichier_changelog)
158 141
159 return flask.render_template("changelog.html",table = table_version,err=[], beta=beta) 142 return flask.render_template("changelog.html",table = table_version, nblignes=CONFIG["nb_lignes_changelog"], err=[], beta=beta)
160 143
161if __name__ == "__main__": 144if __name__ == "__main__":
162 print("Mode debug maison : "+str(niveau_debug)) 145 print("Mode debug maison : "+str(niveau_debug))
diff --git a/configuration.py b/configuration.py
index 0fc8f20..b22c6e3 100644
--- a/configuration.py
+++ b/configuration.py
@@ -5,7 +5,9 @@
5CONFIG = {} 5CONFIG = {}
6 6
7### La version de l'app 7### La version de l'app
8CONFIG["version"] = 2.4 8CONFIG["version"] = 2.5
9# Nombre de versions anciennes dans le changelog
10CONFIG["nb_lignes_changelog"] = 4
9 11
10# les unités acceptées 12# les unités acceptées
11CONFIG["liste_unites"] = ["jours", "semaines", "mois", "années"] 13CONFIG["liste_unites"] = ["jours", "semaines", "mois", "années"]
diff --git a/data/changelog_data.txt b/data/changelog_data.txt
index cbe87ef..ba601e3 100644
--- a/data/changelog_data.txt
+++ b/data/changelog_data.txt
@@ -1,6 +1,8 @@
1"Version 2.45","29/06/2021","<p>Plus de courbes ! Et d'autres choses... 1"Version 2.5","29/06/2021","<p>Plus de courbes ! Et d'autres choses...</p>
2<ul> 2<ul>
3<li>Un petit coup de peinture général.</li> 3<li>Un petit coup de peinture général à divers endroits.</li>
4<li>Une icône, enfin (il était temps...)</li>
5<li>La page du suivi des versions (celle-ci) a été raccourcie (sauf si on veut tout voir).</li>
4<li>On peut désormais personnaliser la couleur et le symbole de la courbe (principale).</li> 6<li>On peut désormais personnaliser la couleur et le symbole de la courbe (principale).</li>
5<li>Les dates sont maintenant exportées et importées. C'est plus sympa pour la lecture (pour le calcul, la donnée en âge l'emporte).</li> 7<li>Les dates sont maintenant exportées et importées. C'est plus sympa pour la lecture (pour le calcul, la donnée en âge l'emporte).</li>
6<li>Une version de l'appli est incluse dans le fichier de sauvegarde. On affiche un petit message si la version du fichier importé est inférieure à celle du site, mais normalement tout reste compatible. Si vous voulez la toute dernière version, il suffit de ré-enregistrer vos données, tout simplement.</li> 8<li>Une version de l'appli est incluse dans le fichier de sauvegarde. On affiche un petit message si la version du fichier importé est inférieure à celle du site, mais normalement tout reste compatible. Si vous voulez la toute dernière version, il suffit de ré-enregistrer vos données, tout simplement.</li>
@@ -9,20 +11,18 @@
9<li>Courbes de plusieurs enfants : 11<li>Courbes de plusieurs enfants :
10<ul> 12<ul>
11<li>Les données et la configuration sont celles de l'enfant qu'on a saisi en ""principal""</li> 13<li>Les données et la configuration sont celles de l'enfant qu'on a saisi en ""principal""</li>
12<li>Pour les enfants en plus, il faut déjà avoir le fichier de données déjà généré.</li> 14<li>Pour les enfants en plus, il faut déjà avoir le fichier de données (généré par l'outil).</li>
13<li>On choisit alors une couleur et un symbole pour ces courbes additionnels</li> 15<li>On choisit alors une couleur et un symbole pour ces courbes additionnelles.</li>
14</ul></li> 16</ul></li>
15 17
16</ul> 18</ul>"
17</p>"
18 19
19"Version 2.31","28/04/2021","<p>Les calculs de données sont améliorés : 20"Version 2.31","28/04/2021","<p>Les calculs de données sont améliorés&nbsp;:</p>
20<ul> 21<ul>
21<li>Si l'âge demandé (ou la donnée) est entre les données saisies, c'est une simple interpolation linéaire entre les données existantes,</li> 22<li>Si l'âge demandé (ou la donnée) est entre les données saisies, c'est une simple interpolation linéaire entre les données existantes,</li>
22<li>Si c'est en dehors, alors on fait un calcul d'extrapolation comme avant</li> 23<li>Si c'est en dehors, alors on fait un calcul d'extrapolation comme avant</li>
23</ul> 24</ul>
24En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on cherche. 25<p>En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on cherche.</p>"
25</p>"
26 26
27"Version 2.3001","13/03/2021","<p>Petit changement : on peut maintenant mettre le poids en grammes. Si le poids saisi est supérieur à 500 il sera automatiquement converti.</p>" 27"Version 2.3001","13/03/2021","<p>Petit changement : on peut maintenant mettre le poids en grammes. Si le poids saisi est supérieur à 500 il sera automatiquement converti.</p>"
28 28
@@ -36,36 +36,33 @@ En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on ch
36 36
37"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>" 37"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>"
38 38
39"Version 2.2","12/11/2020","<p>Ajout de la possibilité d'avoir la courbe ajustée pour les prématurés. Attention c'est encore en bêta ! Le principe c'est simplement les courbes OMS décalées de la durée de prématurité, ce qui convient plus ou moins bien aux enfants nés prématurés une fois qu'ils ont atteint l'âge du terme en âge corrigé. 39"Version 2.2","12/11/2020","<p>Ajout de la possibilité d'avoir la courbe ajustée pour les prématurés. Attention c'est encore en bêta ! Le principe c'est simplement les courbes OMS décalées de la durée de prématurité, ce qui convient plus ou moins bien aux enfants nés prématurés une fois qu'ils ont atteint l'âge du terme en âge corrigé.</p>
40<ul> 40<ul>
41<li>Si vous n'êtes pas concerné(e), laisser ""0j"" (0 jours) en prématurité (logique non ?)</li> 41<li>Si vous n'êtes pas concerné(e), laisser ""0j"" (0 jours) en prématurité (logique non ?)</li>
42<li>Si vous préférez l'âge corrigé, cocher la case. L'âge de l'enfant sera alors potentiellement négatif.</li> 42<li>Si vous préférez l'âge corrigé, cocher la case. L'âge de l'enfant sera alors potentiellement négatif.</li>
43<li>Si vous préférez l'âge réel, c'est la courbe OMS qui sera alors décalée</li> 43<li>Si vous préférez l'âge réel, c'est la courbe OMS qui sera alors décalée</li>
44</ul> 44</ul>
45Tout retour sur cette fonctionnalité est le bienvenu ! 45Tout retour sur cette fonctionnalité est le bienvenu !"
46</p>"
47 46
48"Version 2.1","28/07/2020","<p>Petites améliorations : 47"Version 2.1","28/07/2020","<p>Petites améliorations :</p>
49<ul> 48<ul>
50<li>Bug corrigé : quand on ajoute des lignes, maintenant ça ajoute aussi des saisies de taille ! ^^</li> 49<li>Bug corrigé : quand on ajoute des lignes, maintenant ça ajoute aussi des saisies de taille ! ^^</li>
51<li>Par défaut, les saisies de taille sont masquées (car la plupart du temps on regarde le poids). On peut cliquer pour afficher les tailles.</li> 50<li>Par défaut, les saisies de taille sont masquées (car la plupart du temps on regarde le poids). On peut cliquer pour afficher les tailles.</li>
52</ul></p>" 51</ul>"
53 52
54"Version 2.0","28/07/2020","<p>Nouveauté : courbes de taille disponible ! 53"Version 2.0","28/07/2020","<p>Nouveauté : courbes de taille disponible !</p>
55<ul> 54<ul>
56<li>Il n'est pas nécessaire de saisir des tailles, l'appli trace ce qu'elle a en fonction de ce qu'on lui donne</li> 55<li>Il n'est pas nécessaire de saisir des tailles, l'appli trace ce qu'elle a en fonction de ce qu'on lui donne</li>
57<li>Par défaut, les courbes vides (sans donnée) ne sont pas tracées. Si vous les voulez quand même (une courbe vide de référence), il suffit de cocher une case dans les préférences du graphique</li> 56<li>Par défaut, les courbes vides (sans donnée) ne sont pas tracées. Si vous les voulez quand même (une courbe vide de référence), il suffit de cocher une case dans les préférences du graphique</li>
58<li>Le format d'export de données est normalement compatible avec les fichiers exportés avant. Signalez moi tout bug à ce sujet !</li> 57<li>Le format d'export de données est normalement compatible avec les fichiers exportés avant. Signalez moi tout bug à ce sujet !</li>
59<li>On peut cocher ""même échelle sur tous les graphiques"" quand les graphiques différents n'ont pas les mêmes données (de temps) et qu'on veut quand même qu'ils soient ""alignés"", mais qu'on laisse l'appli choisir l'échelle.</li> 58<li>On peut cocher ""même échelle sur tous les graphiques"" quand les graphiques différents n'ont pas les mêmes données (de temps) et qu'on veut quand même qu'ils soient ""alignés"", mais qu'on laisse l'appli choisir l'échelle.</li>
60</ul> 59</ul>"
61</p>"
62 60
63"Version 1.1","26/06/2020","<p>Petites améliorations : 61"Version 1.1","26/06/2020","<p>Petites améliorations :</p>
64<ul> 62<ul>
65<li>Possibilité de saisir la date brute en texte. Pour certains navigateurs (sur smartphone ?) où il n'y avait pas cette possibilité et où il fallait parfois cliquer 15 fois pour saisir une date 15 mois plus tôt, ça va peut être être mieux. N'hésitez pas à faire plein de tests à ce sujet !</li> 63<li>Possibilité de saisir la date brute en texte. Pour certains navigateurs (sur smartphone ?) où il n'y avait pas cette possibilité et où il fallait parfois cliquer 15 fois pour saisir une date 15 mois plus tôt, ça va peut être être mieux. N'hésitez pas à faire plein de tests à ce sujet !</li>
66<li>L'export des données est maintenant avec l'extension «&nbsp;.txt&nbsp;». C'est exactement la même chose qu'avant (du json), et tout est compatible, car fondamentalement, l'extension c'est pour faire joli, hein, entre nous. Mais ça vous permettra de l'ouvrir sans avoir trop peur d'une part, et surtout c'est un format qui est «&nbsp;accepté&nbsp;» sur le forum LLL ;). Vous allez donc pouvoir plus facilement y poster votre fichier de données !</li> 64<li>L'export des données est maintenant avec l'extension «&nbsp;.txt&nbsp;». C'est exactement la même chose qu'avant (du json), et tout est compatible, car fondamentalement, l'extension c'est pour faire joli, hein, entre nous. Mais ça vous permettra de l'ouvrir sans avoir trop peur d'une part, et surtout c'est un format qui est «&nbsp;accepté&nbsp;» sur le forum LLL ;). Vous allez donc pouvoir plus facilement y poster votre fichier de données !</li>
67</ul> 65</ul>"
68</p>"
69 66
70"Version 1.0001","24/06/2020","<p>Petit bug corrigé (lors du choix de l'âge maxi sur la courbe)</p>" 67"Version 1.0001","24/06/2020","<p>Petit bug corrigé (lors du choix de l'âge maxi sur la courbe)</p>"
71 68
diff --git a/gestion_donnees.py b/gestion_donnees.py
index 8e19d8b..c24192e 100644
--- a/gestion_donnees.py
+++ b/gestion_donnees.py
@@ -428,6 +428,44 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
428 428
429 return (l_jours,l_donnee) 429 return (l_jours,l_donnee)
430 430
431# web vers python : enfants additionnels
432def gere_enfants_additionnels(data, files, liste_err):
433 """ data est le dictionnaire de requête.
434 files est le dictionnaire des fichiers (flask.request.files).
435 Renvoie les enfants additionnels sous forme de liste de dictionnaires :
436 {typed: (conf, lj, ldonnees)}
437 Dans conf y'a les infos qu'il faut pour tracer la courbe additionnelle voulue.
438 """
439
440 enfants_add = [] # Enfants additionnels
441 # Les enfants additionnels commencent à 2 (puis 3, 4, etc)
442 i=2
443 while "couleur_donnees_"+str(i) in data: # Tant qu'il y a des données de ce type
444 if 'fichier_donnees_'+str(i) in files: # Un enfant à ajouter
445 fichier = files["fichier_donnees_"+str(i)]
446 chaine = fichier.read() # On récupère la chaîne
447 if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable
448 debug("Un fichier de données additionnel trouvé", liste_err)
449 formulaire_2 = fichier_json_vers_configdonnees(chaine, liste_err)
450 if formulaire_2 =={}:
451 warning("Le fichier de données additionnel est vide ou mal formaté", liste_err)
452 else:
453 debug("Form 2 : "+str(formulaire_2), liste_err)
454 # Récupérer sous forme python
455 conf2, ljours2, listes_donnees2 = web_vers_python(formulaire_2,liste_err, court=True)
456 debug("Form 2 données travaillées "+str(ljours2)+str(listes_donnees2), liste_err)
457 # Le symbole et la couleur
458 symb2 = gere_symbole(data.get("symbole_donnees_"+str(i)))
459 coul2 = rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err)
460 enfant2 = eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2)
461 enfants_add.append(enfant2)
462 i+=1
463
464 return enfants_add
465
466
467
468
431 469
432# python vers Json 470# python vers Json
433#### export vers json 471#### export vers json
@@ -559,9 +597,9 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur):
559 """ conf est la config (on ne garde que le nom) pour un enfant additionnel, 597 """ conf est la config (on ne garde que le nom) pour un enfant additionnel,
560 ljours et ldonnees les dictionnaires de listes contenant les données. 598 ljours et ldonnees les dictionnaires de listes contenant les données.
561 symb est le symbole choisi pour cette courbe additionnelle (déjà vérifié) 599 symb est le symbole choisi pour cette courbe additionnelle (déjà vérifié)
562 On fabrique un joli dictionnaire typed -> (conf lj, ldonnee) avec le nom de l'enfant, 600 On fabrique un joli dictionnaire typed -> (conf, lj, ldonnee) avec le nom de l'enfant,
563 et les données pour chaque typed""" 601 et les données pour chaque typed"""
564 print("test conf avant "+str(ldonnees)+str(ljours)) 602 #print("test conf avant "+str(ldonnees)+str(ljours))
565 603
566 retour = {} 604 retour = {}
567 conf["symbole"] = symb # On ajoute le symbole additionnel 605 conf["symbole"] = symb # On ajoute le symbole additionnel
@@ -569,5 +607,5 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur):
569 for typed in CONFIG["liste_typedonnees"]: 607 for typed in CONFIG["liste_typedonnees"]:
570 retour[typed] = (conf, ljours[typed], ldonnees[typed]) 608 retour[typed] = (conf, ljours[typed], ldonnees[typed])
571 609
572 print("test "+str(retour)) 610 #print("test "+str(retour))
573 return retour \ No newline at end of file 611 return retour \ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..1392469
--- /dev/null
+++ b/static/favicon.ico
Binary files differ
diff --git a/static/outilspage.js b/static/outilspage.js
index 72a9b91..dac70bf 100644
--- a/static/outilspage.js
+++ b/static/outilspage.js
@@ -44,11 +44,23 @@ function ajoutelignes()
44 44
45} 45}
46 46
47// Affichage de la textarea "export" 47// Affichage de la section "export"
48function affiche_export() 48function affiche_export()
49{ 49{
50 document.getElementById("export").style.display = "block" ; 50 document.getElementById("export").style.display = "block" ;
51 51}
52// Copier vers le presse-papiers
53function copietexte()
54{
55 var elt = document.getElementById("export_texte");
56
57 /* Select the text field */
58 elt.select();
59 elt.setSelectionRange(0, 99999); /* For mobile devices */
60
61 /* Copy the text inside the text field */
62 document.execCommand("copy");
63
52} 64}
53 65
54function affiche_cache(id,elemcourant) 66function affiche_cache(id,elemcourant)
diff --git a/static/requetes.js b/static/requetes.js
index 5644469..ba2a81e 100644
--- a/static/requetes.js
+++ b/static/requetes.js
@@ -23,7 +23,7 @@ function appelle_image()
23 var calculextra = this.response.calculextra ; 23 var calculextra = this.response.calculextra ;
24 24
25 // on affiche l'export des données 25 // on affiche l'export des données
26 document.getElementById('export').innerHTML = texte; 26 document.getElementById('export_texte').innerHTML = texte;
27 document.getElementById('sectionexport').style.display = "block"; 27 document.getElementById('sectionexport').style.display = "block";
28 28
29 29
diff --git a/static/style.css b/static/style.css
index 95cd55e..4b82077 100644
--- a/static/style.css
+++ b/static/style.css
@@ -37,12 +37,14 @@ img#courbe {
37 display: none; 37 display: none;
38} 38}
39 39
40#export { 40#export_texte {
41 width: 25em; 41 width: 25em;
42 height: 20em; 42 height: 20em;
43 display:none;
44 max-width: 100% 43 max-width: 100%
45} 44}
45#export {
46 display: none;
47}
46 48
47#courbe_warnings { 49#courbe_warnings {
48 display: none; 50 display: none;
@@ -125,3 +127,8 @@ nav {
125.data { 127.data {
126 width:7em 128 width:7em
127} 129}
130
131/* Page changelog */
132#suite_changelog {
133 display: none;
134}
diff --git a/templates/base.html b/templates/base.html
index b84df6f..58e094d 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -4,7 +4,8 @@
4 <head> 4 <head>
5 <meta charset="UTF-8" > 5 <meta charset="UTF-8" >
6 <title>Courbes de croissance OMS de l'enfant</title> 6 <title>Courbes de croissance OMS de l'enfant</title>
7 <link rel="stylesheet" href="static/style.css" type="text/css"> 7 <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" type="text/css">
8 <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
8 <script src="static/requetes.js"></script> 9 <script src="static/requetes.js"></script>
9 <script src="static/outilspage.js"></script> 10 <script src="static/outilspage.js"></script>
10 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 11 <meta name="viewport" content="width=device-width, initial-scale=1.0">
diff --git a/templates/changelog.html b/templates/changelog.html
index 7ba96cd..ed47f99 100644
--- a/templates/changelog.html
+++ b/templates/changelog.html
@@ -1,17 +1,28 @@
1{% extends "base.html" %} 1{% extends "base.html" %}
2{% block contenu %} 2{% block contenu %}
3
3<h2>Suivi des versions</h2> 4<h2>Suivi des versions</h2>
4 5
5{% for ligne in table %} 6{% for ligne in table %}
6<div class="version"> 7 <div class="version">
7<h3>{{ ligne[0] }}</h3> 8 <h3>{{ ligne[0] }}</h3>
8<div class="date">Le {{ ligne[1] }}</div> 9 <div class="date">Le {{ ligne[1] }}</div>
9 10
10<div class="contenu_changelog"> 11 <div class="contenu_changelog">
11{{ ligne[2]|safe }} 12 {{ ligne[2]|safe }}
12</div> 13 </div>
14
15 </div>
16 {% if loop.index == nblignes and table | length > nblignes %}
17 <hr>
18 <p><span class="bouton" onclick="affiche_cache('suite_changelog', this)">Afficher</span> le log des versions plus anciennes.</p>
19 <div id="suite_changelog">
20 {% endif %}
21
13{% endfor %} 22{% endfor %}
14 23{% if table |length > nblignes %}
24</div>
25{% endif %}
15 26
16 27
17 28
diff --git a/templates/index.html b/templates/index.html
index 0ec6e9b..f25df0e 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -173,14 +173,17 @@
173 <input type="checkbox" name="calculextratemps_trace"> ... et le voir sur le graphique.</li> 173 <input type="checkbox" name="calculextratemps_trace"> ... et le voir sur le graphique.</li>
174 174
175</ul> 175</ul>
176<p>Les résultats de calculs seront affichés en-dessous des courbes.</p> 176<p>Les résultats de calculs seront affichés en-dessous des courbes. Ils ne seront pas sauvegardés.</p>
177</div> 177</div>
178 178
179<!-- Section courbes multiples -->
179<h3>Courbes multiples</h3> 180<h3>Courbes multiples</h3>
180<div class="bouton" onclick="affiche_cache('multi',this)">Afficher</div> 181<div class="bouton" onclick="affiche_cache('multi',this)">Afficher</div>
181 182
182<div id="multi"> 183<div id="multi">
183 <p>Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici. Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant «&nbsp;principal&nbsp;».</p> 184 <p>Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici.</p>
185 <p> Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant «&nbsp;principal&nbsp;».</p>
186 <p>Remarque&nbsp;: lors de l'export, seul l'enfant «&nbsp;principal&nbsp;» est sauvegardé.</p>
184 <ul id="liste_enfants_add">{% for numero_enfant in range(2, CONFIG.nb_fichiers_enfants_add+2) %} 187 <ul id="liste_enfants_add">{% for numero_enfant in range(2, CONFIG.nb_fichiers_enfants_add+2) %}
185 <li><input type="file" name="fichier_donnees_{{ numero_enfant }}" id="fichier_donnees_{{ numero_enfant }}"> <span class="bouton petit" onclick="vide_champ('fichier_donnees_{{ numero_enfant }}')">Enlever ce fichier</span> | 188 <li><input type="file" name="fichier_donnees_{{ numero_enfant }}" id="fichier_donnees_{{ numero_enfant }}"> <span class="bouton petit" onclick="vide_champ('fichier_donnees_{{ numero_enfant }}')">Enlever ce fichier</span> |
186 Symbole&nbsp;: <select name="symbole_donnees_{{ numero_enfant }}"> 189 Symbole&nbsp;: <select name="symbole_donnees_{{ numero_enfant }}">
@@ -244,6 +247,7 @@
244 </ul> 247 </ul>
245</div> 248</div>
246 249
250<!-- Section export des courbes -->
247 251
248<div id="sectionexport"> 252<div id="sectionexport">
249 <h2>Export des données</h2> 253 <h2>Export des données</h2>
@@ -253,9 +257,12 @@
253 <img src="static/icons/export.png"> 257 <img src="static/icons/export.png">
254 <span class="icon_legend">Télécharger les données</span> 258 <span class="icon_legend">Télécharger les données</span>
255 </div> 259 </div>
256 <p>Si vous n'arrivez pas à télécharger les données, <a href='#export' onclick="affiche_export()">cliquez ici</a> pour les voir en texte clair&nbsp;: il vous suffira de les copier/coller dans un fichier texte.</p> 260 <p>Si vous n'arrivez pas à télécharger les données, <a href='#export' onclick="affiche_export()">cliquez ici</a> pour les voir en texte clair&nbsp: il vous suffira de les copier/coller dans un fichier texte.</p>
257 <textarea readonly id="export"> 261 <div id="export">
262 <textarea readonly id="export_texte">
258 </textarea> 263 </textarea>
264 <p><span class="bouton" onclick="copietexte()">Sélectionner et copier</span> le texte dans le presse-papier.</p>
265 </div>
259 266
260</div> 267</div>
261 268
diff --git a/trace_courbe.py b/trace_courbe.py
index 39ade0e..c39f265 100644
--- a/trace_courbe.py
+++ b/trace_courbe.py
@@ -176,7 +176,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e
176 lj_conv = u.convertit_tableau(lj,unite,liste_err) 176 lj_conv = u.convertit_tableau(lj,unite,liste_err)
177 debug("Tracé de la courbe additionnelle de "+conf_add["nom"]+" config : "+str(conf_add), liste_err) 177 debug("Tracé de la courbe additionnelle de "+conf_add["nom"]+" config : "+str(conf_add), liste_err)
178 ax.plot(lj_conv, ld, label=conf_add["nom"], color=conf_add["couleurcourbe"],marker=conf_add["symbole"]) 178 ax.plot(lj_conv, ld, label=conf_add["nom"], color=conf_add["couleurcourbe"],marker=conf_add["symbole"])
179 print("bla") 179
180 if conf["sexe"] != conf_add["sexe"]: 180 if conf["sexe"] != conf_add["sexe"]:
181 warning("Attention, tous les enfants n'ont pas le même sexe. La courbe de référence est celle de "+conf["nom"]+" et ne sera pas forcément pertinente pour les autres. Vous pouvez éventuellement essayer la courbe neutre. Remarque : cette alerte s'affichera quand même.", liste_err) 181 warning("Attention, tous les enfants n'ont pas le même sexe. La courbe de référence est celle de "+conf["nom"]+" et ne sera pas forcément pertinente pour les autres. Vous pouvez éventuellement essayer la courbe neutre. Remarque : cette alerte s'affichera quand même.", liste_err)
182 182
@@ -245,10 +245,6 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e
245 # ça sera donc une extrapolation 245 # ça sera donc une extrapolation
246 r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], liste_err) 246 r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], liste_err)
247 message=formate_extrapole(conf["non_sauve"]["nbextradata"]) 247 message=formate_extrapole(conf["non_sauve"]["nbextradata"])
248# if == 0:
249# message+="l'ensemble des données"
250# else:
251# message+="les "+str(conf["non_sauve"]["nbextradata"])+" dernière"+met_s(conf["non_sauve"]["nbextradata"])+" données"
252 else: 248 else:
253 message=formate_interpole() 249 message=formate_interpole()
254 250