diff options
author | Denise sur Lya <sekhmet@lya> | 2021-07-22 14:02:16 +0200 |
---|---|---|
committer | Denise sur Lya <sekhmet@lya> | 2021-07-22 14:02:16 +0200 |
commit | e4ec2d3d510d6138430c48d5dc699c10ff8dc463 (patch) | |
tree | 8ee7d1763405b8568add33e924014da37cc7b0f2 | |
parent | f1e65b5e6bc5e0803f359f93c8e795a61f61b4a6 (diff) | |
download | oms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.tar.gz oms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.tar.zst oms-e4ec2d3d510d6138430c48d5dc699c10ff8dc463.zip |
petites améliorations graphiques, icône, etc
-rw-r--r-- | app.py | 35 | ||||
-rw-r--r-- | configuration.py | 4 | ||||
-rw-r--r-- | data/changelog_data.txt | 37 | ||||
-rw-r--r-- | gestion_donnees.py | 44 | ||||
-rw-r--r-- | static/favicon.ico | bin | 0 -> 1246 bytes | |||
-rw-r--r-- | static/outilspage.js | 16 | ||||
-rw-r--r-- | static/requetes.js | 2 | ||||
-rw-r--r-- | static/style.css | 11 | ||||
-rw-r--r-- | templates/base.html | 3 | ||||
-rw-r--r-- | templates/changelog.html | 25 | ||||
-rw-r--r-- | templates/index.html | 15 | ||||
-rw-r--r-- | trace_courbe.py | 6 |
12 files changed, 126 insertions, 72 deletions
@@ -8,9 +8,8 @@ import base64 | |||
8 | from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | 8 | from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas |
9 | 9 | ||
10 | from configuration import config_init,CONFIG | 10 | from configuration import config_init,CONFIG |
11 | from gestion_erreurs import initialise_erreurs, debug, niveau_debug, warning | 11 | from gestion_erreurs import initialise_erreurs, debug, niveau_debug |
12 | import gestion_donnees as donnees | 12 | import gestion_donnees as donnees |
13 | import gestion_couleurs as couleurs | ||
14 | from trace_courbe import cree_figure | 13 | from trace_courbe import cree_figure |
15 | import faq as f | 14 | import 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(): | |||
55 | def courbe_image(ext): | 56 | def 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 | ||
161 | if __name__ == "__main__": | 144 | if __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 @@ | |||
5 | CONFIG = {} | 5 | CONFIG = {} |
6 | 6 | ||
7 | ### La version de l'app | 7 | ### La version de l'app |
8 | CONFIG["version"] = 2.4 | 8 | CONFIG["version"] = 2.5 |
9 | # Nombre de versions anciennes dans le changelog | ||
10 | CONFIG["nb_lignes_changelog"] = 4 | ||
9 | 11 | ||
10 | # les unités acceptées | 12 | # les unités acceptées |
11 | CONFIG["liste_unites"] = ["jours", "semaines", "mois", "années"] | 13 | CONFIG["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 :</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> |
24 | En 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> |
45 | Tout retour sur cette fonctionnalité est le bienvenu ! | 45 | Tout 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 « .txt ». 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 « accepté » 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 « .txt ». 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 « accepté » 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 | ||
432 | def 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" |
48 | function affiche_export() | 48 | function 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 | ||
53 | function 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 | ||
54 | function affiche_cache(id,elemcourant) | 66 | function 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 « principal ».</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 « principal ».</p> | ||
186 | <p>Remarque : lors de l'export, seul l'enfant « principal » 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 : <select name="symbole_donnees_{{ numero_enfant }}"> | 189 | Symbole : <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 : 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 : 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 | ||