amélioration du code + page contact en cours + licences
authorDenise sur Lya <sekhmet@lya>
Fri, 19 Jun 2020 11:38:05 +0000 (13:38 +0200)
committerDenise sur Lya <sekhmet@lya>
Fri, 19 Jun 2020 11:38:05 +0000 (13:38 +0200)
13 files changed:
COPYING
LICENSE [new file with mode: 0644]
app.py
configuration.py
data_OMS/LICENSE [moved from data_OMS/licence with 100% similarity]
gestionOMS.py
gestion_donnees.py
licence [deleted file]
templates/apropos.html
templates/base.html
templates/contact.html [new file with mode: 0644]
templates/index.html
trace_courbe.py

diff --git a/COPYING b/COPYING
index d50c38d5a5715a7a8a6230133b5a841dc30f8253..13542f739659edcdb7def13dec9b10a9328e6803 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,5 +1,9 @@
 --------------
-Attention : application de licences :
+Attention : application des licences :
+
+Le dossier data_OMS est sous licence CC BY-NC-SA 3.0 IGO 
+https://creativecommons.org/licenses/by-nc-sa/3.0/igo/
+
+Le reste du projet est sous licence MIT "X11"
+https://fr.wikipedia.org/wiki/Licence_MIT
 
-Le dossier data_OMS est sous licence CC BY-NC-SA 3.0 IGO
-Le reste du projet est sous licence 
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..404d44c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,12 @@
+Ce projet, à l'exception du dossier data_OMS (voir fichier COPYING), est sous licence MIT "X11"
+(plus d'informations en français https://fr.wikipedia.org/wiki/Licence_MIT )
+
+----------------
+Copyright © 2020, Denise Maurice
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders X be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.
+Except as contained in this notice, the name of Denise Maurice shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Denise Maurice.
diff --git a/app.py b/app.py
index 3deb7f68eaf9911c06bd5449886cd1662054f56f..93c5b309ead261fa4ca6694cb6d6c6de842af264 100644 (file)
--- a/app.py
+++ b/app.py
@@ -27,7 +27,8 @@ def index():
             ## charger les donneés dans le formulaire
             fichier = flask.request.files['fichier_donnees']
         
-            val_form = fichier_json_vers_configdonnees(fichier,liste_err)
+            val_form2 = fichier_json_vers_configdonnees(fichier,liste_err)
+            val_form.update(val_form2)
             #return str(val_form['nb_data'])
     return flask.render_template("index.html",err=liste_err[1],valform=val_form)
 
@@ -46,13 +47,15 @@ def courbe_image(ext):
     config = gere_configuration(data,liste_err)    
     l_jours,l_poids = gere_donneespoids(data,config["naissance"],liste_err)
     
-    #print(config)
+
 
     texte = donnees_vers_json(l_jours,l_poids,config)
     
     # noter le nom de l'enfant pour l'export
     nomenfant = simplifie_nom(config['nom'])
 
+    #warning(str(config),liste_err)
+
     # créer la figure
     try:
         fig = cree_figure(config,l_jours,l_poids,liste_err)
@@ -63,7 +66,7 @@ def courbe_image(ext):
         plt.close(fig)
     except:
         result = "fail"
-        liste_err[0].append("Impossible de générer la courbe !")
+        liste_err[0].append("Impossible de générer la courbe ! Config : "+str(config))
     
     
     if ext == "b64":
@@ -88,23 +91,10 @@ def courbe_image(ext):
     else:
         return flask.render_template("erreur_fatale.html",erreur="Le type d'image demandé n'est pas reconnu")
     
-    #return flask.Response(base64.b64encode(output.getvalue()), mimetype='text/plain')
-
-#@app.route("/export_donnees",methods=['POST'])
-#def export_donnees():
-#    # exporte les données au format texte
-#    liste_err = initialise_erreurs()
-#    data = flask.request.form
-#    
-#    config = gere_configuration(data,liste_err)
-#    l_jours,l_poids = gere_donneespoids(data,config["naissance"],liste_err)
-#
-#    texte = configuration_vers_texte(config)
-#    texte += donnees_poids_vers_texte(l_jours,l_poids)    
-#    
-#    #texte = donnees_vers_json(l_jours,l_poids,config)
-#    #return flask.Response(texte,mimetype="application/json")
-#    return flask.Response(texte,mimetype="text/plain")
+    
+@app.route("/contact")
+def contact():
+    return flask.render_template("contact.html",err=[])
 
 @app.route("/faq")
 def faq():
index e173ad92a2751639ebd427d641f4a651ab17e1fa..3e652554d2b924d2d98af8b9ccecb0767e3cd5c0 100644 (file)
@@ -23,6 +23,9 @@ liste_data_choisie_p.sort(reverse=True)
 liste_data_choisie_z = [(2,-3),(3,-2),(4,-1),(5,0),(6,1),(7,2),(8,3)]
 liste_data_choisie_z.sort(reverse=True)
 
+
+CONFIG = {}
+
 liste_unites_valides = ["jours", "semaines", "mois", "années"]
 
 # nombre de jours dans autre chose
@@ -30,63 +33,82 @@ jours_dans_mois = 30.4375
 jours_dans_annee = 365.25
 jours_dans_semaine = 7
 
-
 ## Maxi et mini de "sécurité"
 # jours maxi
-jours_maxi_courbe = 6.2*jours_dans_annee
+jours_maxi_courbe = 5.5*jours_dans_annee
 # poids max (protection)
 poids_maxi = 80
 # taille max du nom
 longueur_max_nom_bebe = 100
 
-
-### Taille du graphique par défaut (pouces, en 80 points par pouce)
-largeur_graphique = 10
-hauteur_graphique = 7
-
 #largeurs et hauteurs min et max
 largeur_graphique_max = 40
-largeur_graphique_min = 2
+largeur_graphique_min = 3
 
 hauteur_graphique_max = 40
 hauteur_graphique_min = 2
 
+
+
+## Configuration "par défaut" du graphique, tel qu'exporté ?
+DEFAUT = {}
+
+### Taille du graphique par défaut (pouces, en 80 points par pouce)
+DEFAUT["largeur"] = 10
+DEFAUT["hauteur"] = 7
+
 # Nombre de lignes par défaut dans le formulaire
-nombre_lignes_form = 5
+DEFAUT["nb_data"] = 6
 
 # couleurs par défaut
-couleur_defaut_1 = "#0000FF" # bleu
-couleur_defaut_2 = "#00FF00" # vert
-couleur_defaut_3 = "#FF0000" # rouge
-couleur_defaut_1_tuple = (0,0,1)
-couleur_defaut_2_tuple = (0,1,0)
-couleur_defaut_3_tuple = (1,0,0)
+DEFAUT["couleurs"] = {}
+DEFAUT["couleurs"]["courbe1"] = "#0000FF" # bleu
+DEFAUT["couleurs"]["courbe2"] = "#00FF00" # vert
+DEFAUT["couleurs"]["courbe3"] = "#FF0000" # rouge
+DEFAUT["couleurs"]["fond"]= "#FFFFFF" # blanc
+DEFAUT["couleurs"]["cadretxt"] = "#000000" # noir
+DEFAUT["couleurs"]["grille"] = "#7f7f7f" # gris
+#couleur_defaut_1 = "#0000FF" # bleu
+#couleur_defaut_2 = "#00FF00" # vert
+#couleur_defaut_3 = "#FF0000" # rouge
+CONFIG["couleurs"] = {
+        "courbe1" : (0,0,1),
+        "courbe2" : (0,1,0),
+        "courbe3" : (1,0,0),
+        "fond": (1,1,1),
+        "cadretxt": (0,0,0),
+        "grille": (0.5,0.5,0.5)
+        }
+#couleur_defaut_1_tuple = (0,0,1)
+#couleur_defaut_2_tuple = (0,1,0)
+#couleur_defaut_3_tuple = (1,0,0)
 
 # couleurs par défaut fond
-couleur_defaut_fond = "#FFFFFF"
-couleur_defaut_fond_tuple = (1,1,1)
-couleur_defaut_cadretxt = "#000000"
-couleur_defaut_cadretxt_tuple = (0,0,0)
-couleur_defaut_grille = "#7f7f7f"
-couleur_defaut_grille_tuple = (0.5,0.5,0.5)
+#couleur_defaut_fond = "#FFFFFF"
+#couleur_defaut_fond_tuple = (1,1,1)
+#couleur_defaut_cadretxt = "#000000"
+#couleur_defaut_cadretxt_tuple = (0,0,0)
+#couleur_defaut_grille = "#7f7f7f"
+#couleur_defaut_grille_tuple = (0.5,0.5,0.5)
 
 #couleur_defaut_erreur = (0,0,0) # noir
 
 
 # initialiser la config
 def config_init():
-    return {"largeur": largeur_graphique, 
-            "hauteur": hauteur_graphique, 
-            "nb_data":nombre_lignes_form,
+    c = DEFAUT.copy()
+    c.update({
             "age_0": "0j",
             "legende": "oui",
             "positionlegende": "hg",
-            "couleur1": couleur_defaut_1,
-            "couleur2": couleur_defaut_2,
-            "couleur3": couleur_defaut_3,
-            "couleur_fond": couleur_defaut_fond,
-            "couleur_grille": couleur_defaut_grille,
-            "couleur_cadretxt": couleur_defaut_cadretxt
-            }
+#            "couleur1": couleur_defaut_1,
+#            "couleur2": couleur_defaut_2,
+#            "couleur3": couleur_defaut_3,
+#            "couleur_fond": couleur_defaut_fond,
+#            "couleur_grille": couleur_defaut_grille,
+#            "couleur_cadretxt": couleur_defaut_cadretxt
+            })
+            
+    return c
     
     
similarity index 100%
rename from data_OMS/licence
rename to data_OMS/LICENSE
index 5b773d97b0510384e3a99c4986f80300642cdbe2..cc634328fb42f68accbc43633e10c2219b11a578 100644 (file)
@@ -46,9 +46,9 @@ def afficheecarttype(z):
 
 def renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err):
     """ fabrique les deux listes de labels OMS"""
-    #warning(str(liste_data_choisie_p),liste_err)
-    liste_data_labels_p = [(nocol,affichepercentile(pc),degrade_choix(conf["couleur1"],conf["couleur2"],conf["couleur3"],pc)) for (nocol,pc) in liste_data_choisie_p]
-    liste_data_labels_z = [(nocol,afficheecarttype(z),degrade_choix(conf["couleur1"],conf["couleur2"],conf["couleur3"],(z+3)/3*50) ) for (nocol,z) in liste_data_choisie_z]
+     #warning(str(conf),liste_err)
+    liste_data_labels_p = [(nocol,affichepercentile(pc),degrade_choix(conf["couleurs"]["courbe1"],conf["couleurs"]["courbe2"],conf["couleurs"]["courbe3"],pc)) for (nocol,pc) in liste_data_choisie_p]
+    liste_data_labels_z = [(nocol,afficheecarttype(z),degrade_choix(conf["couleurs"]["courbe1"],conf["couleurs"]["courbe2"],conf["couleurs"]["courbe3"],(z+3)/3*50) ) for (nocol,z) in liste_data_choisie_z]
     return liste_data_labels_p,liste_data_labels_z
     
 #liste_data_labels= liste_data_labels_z
index caacaf0c0e75c09a1d828260b5192bd52adad4ca..12afd5a8f35565dd2e3622fca0ab18a4699d7da5 100644 (file)
@@ -7,6 +7,7 @@ from gestion_couleurs import *
 import datetime
 import json
 import unidecode
+import copy
 
 
 ############ Fonctions de conversion
@@ -193,13 +194,13 @@ def gere_configuration(data,liste_err):
     # dimensions du graphique
     largeur = data.get("largeur","")
     if largeur == "":
-        largeur = largeur_graphique
+        largeur = DEFAUT["largeur_graphique"]
     else:
         try:
             largeur = int(largeur)
         except:
             warning("La largeur "+largeur+"est invalide !",liste_err)
-            largeur = largeur_graphique
+            largeur = DEFAUT["largeur_graphique"]
         if largeur > largeur_graphique_max:
             largeur = largeur_graphique_max
             warning("Largeur trop grande !",liste_err)
@@ -210,13 +211,13 @@ def gere_configuration(data,liste_err):
     
     hauteur = data.get("hauteur","")
     if hauteur == "":
-        hauteur = hauteur_graphique
+        hauteur = DEFAUT["hauteur_graphique"]
     else:
         try:
             hauteur = int(hauteur)
         except:
             warning("La hauteur "+hauteur+"est invalide !",liste_err)
-            hauteur = hauteur_graphique
+            hauteur = DEFAUT["hauteur_graphique"]
         if hauteur > hauteur_graphique_max:
             hauteur = hauteur_graphique_max
             warning("Hauteur trop grande !",liste_err)
@@ -241,25 +242,33 @@ def gere_configuration(data,liste_err):
     configuration["positionlegende"] = positionlegende
     
     #warning("bla"+data["couleur1"],liste_err)
-    coul1 = rgb_vers_tuple(data.get("couleur1",""),couleur_defaut_1_tuple,liste_err)
-    coul2 = rgb_vers_tuple(data.get("couleur2",""),couleur_defaut_2_tuple,liste_err)
-    coul3 = rgb_vers_tuple(data.get("couleur3",""),couleur_defaut_3_tuple,liste_err)
-    #warning("bla2"+str(coul1),liste_err)
-    configuration["couleur1"] = coul1
-    configuration["couleur2"] = coul2
-    configuration["couleur3"] = coul3
+#    coul1 = rgb_vers_tuple(data.get("couleur1",""),couleur_defaut_1_tuple,liste_err)
+#    coul2 = rgb_vers_tuple(data.get("couleur2",""),couleur_defaut_2_tuple,liste_err)
+#    coul3 = rgb_vers_tuple(data.get("couleur3",""),couleur_defaut_3_tuple,liste_err)
+#    #warning("bla2"+str(coul1),liste_err)
+#    configuration["couleur1"] = coul1
+#    configuration["couleur2"] = coul2
+#    configuration["couleur3"] = coul3
     
-    # couleur de fond
-    coul_fond = rgb_vers_tuple(data.get("couleur_fond",""),couleur_defaut_fond_tuple,liste_err)
-    configuration["couleur_fond"] = coul_fond
-    
-    # couleur d'axes et de texte
-    coul_cadretxt = rgb_vers_tuple(data.get("couleur_cadretxt",""),couleur_defaut_cadretxt_tuple,liste_err)
-    configuration["couleur_cadretxt"] = coul_cadretxt
+    configuration["couleurs"] = {}
+    # gérer les couleurs
+    #warning("data : "+str(data),liste_err)
+    for clecouleur in DEFAUT["couleurs"]:
+        coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
+        configuration["couleurs"][clecouleur] = coul
     
-    # couleur de la grille
-    coul_grille = rgb_vers_tuple(data.get("couleur_grille",""),couleur_defaut_grille_tuple,liste_err)
-    configuration["couleur_grille"] = coul_grille
+    #warning("config : "+str(configuration["couleurs"]),liste_err)
+    # couleur de fond
+#    coul_fond = rgb_vers_tuple(data.get("couleur_fond",""),couleur_defaut_fond_tuple,liste_err)
+#    configuration["couleur_fond"] = coul_fond
+#    
+#    # couleur d'axes et de texte
+#    coul_cadretxt = rgb_vers_tuple(data.get("couleur_cadretxt",""),couleur_defaut_cadretxt_tuple,liste_err)
+#    configuration["couleur_cadretxt"] = coul_cadretxt
+#    
+#    # couleur de la grille
+#    coul_grille = rgb_vers_tuple(data.get("couleur_grille",""),couleur_defaut_grille_tuple,liste_err)
+#    configuration["couleur_grille"] = coul_grille
     #warning(str(configuration["couleur1"]),liste_err)
     
     return configuration   
@@ -306,7 +315,7 @@ def gere_donneespoids(data,naissance,liste_err):
 
 def donnees_vers_json(l_jours,l_poids,config):
     """ retourne le json à renvoyer"""
-    gros_dico = config.copy()
+    gros_dico = copy.deepcopy(config)
     l_jours2 = [convertit_age_vers_texte(d) for d in l_jours]
     gros_dico["data_j"] = l_jours2
     gros_dico["data_p"] = l_poids
@@ -316,8 +325,10 @@ def donnees_vers_json(l_jours,l_poids,config):
     # gérer l'age maxi
     gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"])
     # gérer les couleurs
-    for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]:
-        gros_dico[cle] = tuple_vers_rgb(gros_dico[cle])
+#    for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]:
+#        gros_dico[cle] = tuple_vers_rgb(gros_dico[cle])
+    for clecouleur in DEFAUT["couleurs"]:
+        gros_dico["couleurs"][clecouleur] = tuple_vers_rgb(gros_dico["couleurs"][clecouleur])
     
     
         
@@ -341,7 +352,7 @@ def fichier_json_vers_configdonnees(fichier,liste_err):
         valform["age_"+str(i)] = l_jours[i]
         valform["poids_"+str(i)] = l_poids[i]
         
-    valform["nb_data"] = max(long +2,nombre_lignes_form)
+    valform["nb_data"] = max(long +2,DEFAUT["nb_data"])
     
     return valform
     
diff --git a/licence b/licence
deleted file mode 100644 (file)
index f9241d4..0000000
--- a/licence
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2020 Denise Maurice
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
index 9f2b0768d9494724ae2410393644abc429532755..b3c51998ee3239c873613d8526af10a691217e65 100644 (file)
@@ -5,6 +5,6 @@
 
 <p>Ces données, ainsi que ce site web, sont sous licence <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/igo/">CC BY-NC-SA 3.0 IGO</a></p>
 
-<p>Le code source (<a href="https://fr.wikipedia.org/wiki/Licence_MIT">licence MIT</a> sauf en ce qui concerne les données) est disponible là.</p>
+<p>Le code source (<a href="https://fr.wikipedia.org/wiki/Licence_MIT">licence MIT (licence X11)</a> sauf en ce qui concerne les données de l'OMS) est disponible <href="https://git.immae.eu/?p=perso/Denise/oms.git">là</href>.</p>
 
 {% endblock %}
index 694266c9b1b67800329034b84411746c2cfb1ccf..8b96c1723157dac56aaf8a6cfa57306153efd958 100644 (file)
                <hr>
                
                <nav><a href="/">Accueil et saisie des données</a> |
-               <a href="/apropos">À propos</a> |
                <a href="/faq">FAQ</a> |
+               <a href="/contact">Contact</a> |
+               <a href="/apropos">À propos</a> |
                <a href="/changelog">Changelog</a>
+
                </nav> 
                
        </body>
diff --git a/templates/contact.html b/templates/contact.html
new file mode 100644 (file)
index 0000000..c4a54e8
--- /dev/null
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+{% block contenu %}
+<p>Si vous avez une question, un commentaire, une idée, vous pouvez me contacter à l'adresse suivante : </p>
+<p>Vous pouvez également me retrouver sur le <a href="https://forum.lllfrance.org/">forum LLL</a>, sous le nom de Sekhmet.</p>
+
+<p><strong>Merci</strong> à celles et ceux qui m'ont aidée à mettre en place cet outil :
+<ul>
+       <li>immae pour l'hébergement et l'aide technique,</li>
+       <li>cerise pour le coup de peinture sur la façade,</li>
+       <li>arcanmster pour le côté "je tape partout pour voir si ça casse",</li>
+       <li>les bêta-testeuses enthousiastes du forum LLL, entre autres MmeMarguerite, Maman-chat, bloom et Nerialka</li>
+</ul></p>
+
+{% endblock %}
index 2b1b82bfbe0b2d45deed48fc3c6b1508a4b81424..3404f220895158c0c1cd123029d91e5049b42c90 100644 (file)
@@ -29,8 +29,8 @@
 <h3>Informations sur l'enfant</h3>
 <ul>
 <li><label>Nom de l'enfant&nbsp;:</label> <input type="text" name="nom" value="{{ valform.nom }}"></li>
-<li><label>Sexe&nbsp;:</label> <input type="radio" name="sexe" value="F" {%if valform.sexe == "F" %}checked{% endif %}> féminin 
-| <input type="radio" name="sexe" value="M" {%if valform.sexe == "M"%} checked {% endif %}> masculin | <input type="radio" name="sexe" value="N" {%if valform.sexe == "N"%} checked {% endif %}> neutre (expérimental)</li>
+<li><label>Sexe&nbsp;:</label> <label><input type="radio" name="sexe" value="F" {%if valform.sexe == "F" %}checked{% endif %}> féminin </label>
+| <label><input type="radio" name="sexe" value="M" {%if valform.sexe == "M"%} checked {% endif %}> masculin</label> | <label><input type="radio" name="sexe" value="N" {%if valform.sexe == "N"%} checked {% endif %}> neutre (expérimental)</label></li>
 <li><label>Date de naissance&nbsp;: </label> <input type="date" name="naissance" value="{{ valform.naissance }}"></li>
 </ul>
 
 <div class="bouton" onclick="affiche_cache('pref_graphique',this)">Afficher</div>
 
 <ul id="pref_graphique">
-       <li><label>Type de courbe&nbsp;:</label> <input type="radio" name="typecourbe" value="P"
-       {% if valform.typecourbe == "P" or valform.typecourbe is not defined %} checked {% endif %}> Percentiles | <input type="radio" name="typecourbe" value="Z"
-       {% if valform.typecourbe == "Z" %}  checked {% endif %}> Moyenne et écarts-type</li>
-       <li><label>Grille&nbsp;: </label><input type="checkbox" name="grille" {%if valform.grille == "oui" or valform.grille is not defined %} checked {% endif %}></li>
-       <li><label>Unité&nbsp;: </label>
+       <li><label>Type de courbe&nbsp;:</label> <label><input type="radio" name="typecourbe" value="P"
+       {% if valform.typecourbe == "P" or valform.typecourbe is not defined %} checked {% endif %}> Percentiles</label> | <label><input type="radio" name="typecourbe" value="Z"
+       {% if valform.typecourbe == "Z" %}  checked {% endif %}> Moyenne et écarts-type</label></li>
+       <li><label>Grille&nbsp;: <input type="checkbox" name="grille" {%if valform.grille == "oui" or valform.grille is not defined %} checked {% endif %}></label></li>
+       <li><label>Unité&nbsp;: 
                <select name="unite">
                        <option value="" {% if valform.typecourbe == "" or valform is not defined %} selected {%endif %}>Par défaut</option>
        {% for unite in ['jours','semaines','mois','années'] %}
                        <option value="{{ unite }}"{% if valform.unite == unite %} selected {% endif %} >{{ unite }}</option>
        {% endfor %}
-               </select></li>
+               </select></label></li>
        <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" name="maxi" value="{{ valform.maxi }}"></li>
        <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 
        <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
-       <li><label>Légende&nbsp;: </label><input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> 
-Position&nbsp;: <select name="positionlegende">
+       <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label>
+<label>Position&nbsp;: <select name="positionlegende">
 {%for (pos,posnom) in [('upper left','Haut gauche'),('upper right','Haut Droite'),('lower left','Bas gauche'),('lower right','Bas droite')] %}
 <option value="{{ pos }}">{{ posnom }}</option>
 {% endfor %}
-</select>
+</select></label>
        </li>
-       <li>Couleur courbe du bas <input type="color" name="couleur1" value="{{ valform.couleur1 }}"> | Couleur courbe du milieu <input type="color" name="couleur2"  value="{{ valform.couleur2 }}"> | Couleur courbe du haut <input type="color" name="couleur3" value="{{ valform.couleur3 }}"> </li>
-       <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleur_fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleur_grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleur_cadretxt }}"></li>
+       <li>Couleur courbe du bas <input type="color" name="couleur_courbe1" value="{{ valform.couleurs.courbe1 }}"> | Couleur courbe du milieu <input type="color" name="couleur_courbe2"  value="{{ valform.couleurs.courbe2 }}"> | Couleur courbe du haut <input type="color" name="couleur_courbe3" value="{{ valform.couleurs.courbe3 }}"> </li>
+       <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleurs.fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleurs.grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleurs.cadretxt }}"></li>
 </ul>
 
 
index c86dbd995761d4d4d9fd1cd30594be6321d073fb..fccb6571e9afdf9b5b12d5bc928837631c5c5e89 100644 (file)
@@ -7,7 +7,7 @@ from gestion_unites import *
 import matplotlib.pyplot as plt
 
 def cree_figure(conf,l_jours,l_poids,liste_err):
-    #warning("debut de cree_figure",liste_err)
+    #warning("debut de cree_figure"+str(conf),liste_err)
     try:
         liste_data_labels_p,liste_data_labels_z = renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err)
     except:
@@ -86,13 +86,13 @@ def cree_figure(conf,l_jours,l_poids,liste_err):
     
 
     #### La figure
-    fig = plt.figure(num=None, figsize=(conf["largeur"], conf["hauteur"]), dpi=100, facecolor=conf["couleur_fond"])
-    plt.rcParams['axes.facecolor'] = conf["couleur_fond"]
-    plt.rcParams['axes.edgecolor']= conf["couleur_cadretxt"]
-    plt.rcParams['xtick.color'] = conf["couleur_cadretxt"]
-    plt.rcParams['ytick.color'] = conf["couleur_cadretxt"]
-    plt.rcParams['grid.color'] = conf["couleur_grille"]
-    plt.rcParams['legend.edgecolor'] = conf["couleur_grille"]
+    fig = plt.figure(num=None, figsize=(conf["largeur"], conf["hauteur"]), dpi=100, facecolor=conf["couleurs"]["fond"])
+    plt.rcParams['axes.facecolor'] = conf["couleurs"]["fond"]
+    plt.rcParams['axes.edgecolor']= conf["couleurs"]["cadretxt"]
+    plt.rcParams['xtick.color'] = conf["couleurs"]["cadretxt"]
+    plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"]
+    plt.rcParams['grid.color'] = conf["couleurs"]["grille"]
+    plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
 
     #warning("bla"+str(liste_data_labels),liste_err)  
     for (i,label,couleur) in liste_data_labels:
@@ -121,14 +121,14 @@ def cree_figure(conf,l_jours,l_poids,liste_err):
     if l_jours != []:
         plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleur_cadretxt"],marker='o')
     
-    plt.xlabel("Âge en "+conf["unite"],color=conf["couleur_cadretxt"])
-    plt.ylabel("Poids en kg",color=conf["couleur_cadretxt"])
-    plt.title(titre,color=conf["couleur_cadretxt"])
+    plt.xlabel("Âge en "+conf["unite"],color=conf["couleurs"]["cadretxt"])
+    plt.ylabel("Poids en kg",color=conf["couleurs"]["cadretxt"])
+    plt.title(titre,color=conf["couleurs"]["cadretxt"])
     plt.axis([0,age_maxi,poids_min,poids_max])
     
     if conf['legende']=="oui":
         legende = plt.legend(loc=conf['positionlegende'])
-        plt.setp(legende.get_texts(), color=conf["couleur_cadretxt"])
+        plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"])
     plt.grid(conf["grille"]=="oui")
 
     fig.tight_layout()