diff options
-rw-r--r-- | app.py | 24 | ||||
-rw-r--r-- | config.py | 8 | ||||
-rw-r--r-- | data/bingo_data.txt | 4 | ||||
-rw-r--r-- | gere_grille.py | 10 | ||||
-rw-r--r-- | static/outilspage.js | 15 | ||||
-rw-r--r-- | templates/apropos.html | 24 | ||||
-rw-r--r-- | templates/base.html | 2 | ||||
-rw-r--r-- | templates/custom.html | 8 | ||||
-rw-r--r-- | templates/index.html | 12 |
9 files changed, 89 insertions, 18 deletions
@@ -35,24 +35,26 @@ app = flask.Flask(__name__) | |||
35 | def index(): | 35 | def index(): |
36 | liste_err = e.initialise_erreurs() | 36 | liste_err = e.initialise_erreurs() |
37 | tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) | 37 | tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) |
38 | #categ= data.extraire_categories(tablecomplete) | 38 | |
39 | #print(tabletextes) | 39 | conf = DEFAUT.copy() |
40 | idg = flask.request.args.get("grille", "") # Id de grille passée en param (ou pas) | 40 | idg = flask.request.args.get("grille", "") # Id de grille passée en param (ou pas) |
41 | if idg != "": # Si on a mis un url de grille | 41 | if idg != "": # Si on a mis un url de grille |
42 | conf = g.decode_grille(idg, liste_err) | 42 | |
43 | if conf == {}: # Erreur à la génération | 43 | confimport = g.decode_grille(idg, liste_err) |
44 | if confimport == {}: # Erreur à la génération | ||
44 | #tabletextes = data.extraire_qr(tablecomplete, categ) # Toutes les remarques | 45 | #tabletextes = data.extraire_qr(tablecomplete, categ) # Toutes les remarques |
45 | bingo = g.genere_grille(DEFAUT, tablecomplete, liste_err) | 46 | bingo = g.genere_grille(DEFAUT, tablecomplete, liste_err) |
46 | conf = DEFAUT.copy() | ||
47 | e.erreur("L'url de la grille n'est pas valide...", liste_err) | 47 | e.erreur("L'url de la grille n'est pas valide...", liste_err) |
48 | else: | 48 | else: |
49 | conf.update(confimport) | ||
49 | bingo=conf["grille"] | 50 | bingo=conf["grille"] |
50 | else: | 51 | else: |
51 | # On récupère les données post (et ça sera défaut si y'a rien) | 52 | # On récupère les données post (et ça sera défaut si y'a rien) |
52 | if flask.request.method == "POST": | 53 | if flask.request.method == "POST": |
53 | conf = g.gere_donnees_custom(flask.request.form, liste_err) | 54 | e.debug("avant utilisation post : "+str(conf), liste_err) |
54 | else: | 55 | conf.update(g.gere_donnees_custom(flask.request.form, liste_err)) |
55 | conf= DEFAUT.copy() | 56 | e.debug("après utilisation post : "+str(conf), liste_err) |
57 | |||
56 | #tabletextes = data.extraire_qr(tablecomplete, conf["categories"]) | 58 | #tabletextes = data.extraire_qr(tablecomplete, conf["categories"]) |
57 | bingo = g.genere_grille(conf, tablecomplete, liste_err) # aléatoire avec la config donnée | 59 | bingo = g.genere_grille(conf, tablecomplete, liste_err) # aléatoire avec la config donnée |
58 | 60 | ||
@@ -70,6 +72,12 @@ def custom(): | |||
70 | print(nombre_categ) | 72 | print(nombre_categ) |
71 | return flask.render_template("custom.html", DEFAUT=DEFAUT,CONFIG=CONFIG, nbdata=len(tablecomplete), categ=categ, nbparcat = nombre_categ, e=liste_err[0]+liste_err[1]+liste_err[2]) | 73 | return flask.render_template("custom.html", DEFAUT=DEFAUT,CONFIG=CONFIG, nbdata=len(tablecomplete), categ=categ, nbparcat = nombre_categ, e=liste_err[0]+liste_err[1]+liste_err[2]) |
72 | 74 | ||
75 | @app.route('/apropos') | ||
76 | def apropos(): | ||
77 | #liste_err = e.initialise_erreurs() | ||
78 | return flask.render_template("apropos.html") | ||
79 | |||
80 | |||
73 | if __name__ == "__main__": | 81 | if __name__ == "__main__": |
74 | # print("Mode debug maison : "+str(niveau_debug)) | 82 | # print("Mode debug maison : "+str(niveau_debug)) |
75 | app.run(host='0.0.0.0',debug=True) \ No newline at end of file | 83 | app.run(host='0.0.0.0',debug=True) \ No newline at end of file |
@@ -10,12 +10,18 @@ DEFAUT = {} | |||
10 | DEFAUT["titre"] = "Le bingo de l'allaitement" | 10 | DEFAUT["titre"] = "Le bingo de l'allaitement" |
11 | 11 | ||
12 | DEFAUT["nblignes"] = 4 | 12 | DEFAUT["nblignes"] = 4 |
13 | DEFAUT["nbcolonnes"] = 3 | 13 | DEFAUT["nbcolonnes"] = 4 |
14 | DEFAUT["nbcasesvides"] = 0 | 14 | DEFAUT["nbcasesvides"] = 0 |
15 | DEFAUT["reponses_presentes"] = True # veut-on proposer les réponses | 15 | DEFAUT["reponses_presentes"] = True # veut-on proposer les réponses |
16 | DEFAUT["categories"] = [] # Tout | 16 | DEFAUT["categories"] = [] # Tout |
17 | 17 | ||
18 | # Score | 18 | # Score |
19 | DEFAUT["score"] = {} | ||
20 | DEFAUT["score"]["case"] = 1 | ||
21 | DEFAUT["score"]["ligne"] = 10 | ||
22 | DEFAUT["score"]["colonne"] = 10 | ||
23 | DEFAUT["score"]["diagonale"] = 10 | ||
24 | |||
19 | 25 | ||
20 | # Configuration | 26 | # Configuration |
21 | 27 | ||
diff --git a/data/bingo_data.txt b/data/bingo_data.txt index 0d25331..a3d142a 100644 --- a/data/bingo_data.txt +++ b/data/bingo_data.txt | |||
@@ -7,13 +7,17 @@ | |||
7 | "Allaitement","Tu arrêteras quand bébé aura des dents" | 7 | "Allaitement","Tu arrêteras quand bébé aura des dents" |
8 | "Allaitement","Tu ne devrais pas l'endormir au sein" | 8 | "Allaitement","Tu ne devrais pas l'endormir au sein" |
9 | "Allaitement","Encore au sein ?" | 9 | "Allaitement","Encore au sein ?" |
10 | "Allaitement","Tu es une tétine géante.","Non, c'est la tétine qui est un sein miniature !","Je savais que la grossesse m'avait fait grossir, mais à ce point..." | ||
11 | "Allaitement","L'allaitement, c'est bon pour les mamans et bébés du Tiers-Monde." | ||
10 | 12 | ||
11 | "Sommeil","Bébé fait (enfin) ses nuits ?","Et toi, tu fais tes nuits ?","Bébé fait SES nuits bien à lui/elle.","Oui.","Non." | 13 | "Sommeil","Bébé fait (enfin) ses nuits ?","Et toi, tu fais tes nuits ?","Bébé fait SES nuits bien à lui/elle.","Oui.","Non." |
12 | "Sommeil","Bébé dort (encore) avec vous ?" | 14 | "Sommeil","Bébé dort (encore) avec vous ?" |
13 | "Sommeil","Laisse bébé pleurer il/elle finira bien par dormir." | 15 | "Sommeil","Laisse bébé pleurer il/elle finira bien par dormir." |
14 | "Sommeil","Il faut lui donner un rythme." | 16 | "Sommeil","Il faut lui donner un rythme." |
17 | "Sommeil","Le bébé de [Untel], il fait ses nuits, lui." | ||
15 | 18 | ||
16 | "Pleurs","Laisse bébé pleurer, ça lui fera les poumons." | 19 | "Pleurs","Laisse bébé pleurer, ça lui fera les poumons." |
20 | "Pleurs","C'est un caprice, ça !" | ||
17 | 21 | ||
18 | "Éducation","Il/elle doit apprendre à se détacher de maman." | 22 | "Éducation","Il/elle doit apprendre à se détacher de maman." |
19 | 23 | ||
diff --git a/gere_grille.py b/gere_grille.py index 25ff51c..073a584 100644 --- a/gere_grille.py +++ b/gere_grille.py | |||
@@ -70,13 +70,15 @@ def genere_grille(config, textes, liste_err): | |||
70 | 70 | ||
71 | return grille | 71 | return grille |
72 | 72 | ||
73 | #######################" Encoder/décoder la grille et la configuration via l'URL ############ | ||
74 | |||
73 | def encode_grille(config, grille, liste_err): | 75 | def encode_grille(config, grille, liste_err): |
74 | """ grille est un tableau double qu'on veut sauvegarder. | 76 | """ grille est un tableau double qu'on veut sauvegarder. |
75 | config est la configuration (on va garder le titre avec) | 77 | config est la configuration (on va garder le titre avec) |
76 | Renvoie une chaîne de caractères qui encode cette grille | 78 | Renvoie une chaîne de caractères qui encode cette grille |
77 | de manière condensée. Renvoie une chaîne cheloue""" | 79 | de manière condensée. Renvoie une chaîne cheloue""" |
78 | # Chaîne de caractère | 80 | # Chaîne de caractère |
79 | data = {"titre": config["titre"], "grille": grille} | 81 | data = {"titre": config["titre"], "grille": grille, "score": config["score"].copy()} |
80 | chaine = json.dumps(data) | 82 | chaine = json.dumps(data) |
81 | code = zlib.compress(chaine.encode()) | 83 | code = zlib.compress(chaine.encode()) |
82 | chaineencodee = str(base64.urlsafe_b64encode(code)) | 84 | chaineencodee = str(base64.urlsafe_b64encode(code)) |
@@ -136,6 +138,12 @@ def gere_donnees_custom(data, liste_err): | |||
136 | for (key, val) in data.items(): | 138 | for (key, val) in data.items(): |
137 | if key[0:10] == "categorie_" and val=="on": | 139 | if key[0:10] == "categorie_" and val=="on": |
138 | conf["categories"].append(key[10:]) | 140 | conf["categories"].append(key[10:]) |
141 | |||
142 | # Score | ||
143 | conf["score"] = {} | ||
144 | for cle in DEFAUT["score"]: | ||
145 | if "score_"+cle in data: | ||
146 | conf["score"][cle] = minimaxi(data.get("score_"+cle, ""), 0, 2**31, DEFAUT["score"][cle], liste_err) | ||
139 | 147 | ||
140 | e.debug(str(conf), liste_err) | 148 | e.debug(str(conf), liste_err) |
141 | return conf | 149 | return conf |
diff --git a/static/outilspage.js b/static/outilspage.js index 1ddb713..f0f90b4 100644 --- a/static/outilspage.js +++ b/static/outilspage.js | |||
@@ -1,9 +1,3 @@ | |||
1 | /* Calcul des scores */ | ||
2 | var points_par_case = 1 ; | ||
3 | var points_par_ligne = 10 ; | ||
4 | |||
5 | |||
6 | |||
7 | // Couleurs des cases | 1 | // Couleurs des cases |
8 | var couleur_base = "rgb(238, 238, 238)" ; | 2 | var couleur_base = "rgb(238, 238, 238)" ; |
9 | var couleur_valide = 'rgb(255, 136, 136)' ; | 3 | var couleur_valide = 'rgb(255, 136, 136)' ; |
@@ -156,7 +150,7 @@ function detectelignes(elem) { | |||
156 | 150 | ||
157 | 151 | ||
158 | // Mettre le score à jour | 152 | // Mettre le score à jour |
159 | score = (nb_lignes_completes + nb_colonnes_completes + nb_diagonales_1 + nb_diagonales_2) *points_par_ligne + nbcases ; | 153 | score = nb_lignes_completes*scoreLigne + nb_colonnes_completes*scoreColonne + (nb_diagonales_1 + nb_diagonales_2) *scoreDiagonale + nbcases*scoreCase ; |
160 | metscore(score) ; | 154 | metscore(score) ; |
161 | } | 155 | } |
162 | 156 | ||
@@ -204,3 +198,10 @@ function affiche_phrase(elem) { | |||
204 | for (var i=0; i<ltemp.length; i++) ltemp[i].style.display = "none" ; | 198 | for (var i=0; i<ltemp.length; i++) ltemp[i].style.display = "none" ; |
205 | } | 199 | } |
206 | 200 | ||
201 | /* Url à mettre : on ajoute ce qu'il y a là à l'URL actuelle */ | ||
202 | function met_url(aajouter) { | ||
203 | let url = new URL(window.location.href) ; | ||
204 | url.search = aajouter ; | ||
205 | //alert(url) ; | ||
206 | history.pushState({}, null, url); | ||
207 | } | ||
diff --git a/templates/apropos.html b/templates/apropos.html new file mode 100644 index 0000000..bdf2581 --- /dev/null +++ b/templates/apropos.html | |||
@@ -0,0 +1,24 @@ | |||
1 | {% extends "base.html" %} | ||
2 | {% block contenu %} | ||
3 | <h1>Bingo de l'allaitement (ou autre), infos</h1> | ||
4 | |||
5 | <div id="contenu"> | ||
6 | |||
7 | <h2>C'est quoi ce truc ?</h2> | ||
8 | |||
9 | <p>Parents, vous en avez assez des remarques aussi inutiles que désagréables sur votre façon de vous occuper de vos enfants ? « Mais tu vas l'allaiter jusqu'à quand ? », « Laisse-le pleurer, il finira par s'endormir », « Le bébé de Untel, il fait ses nuits, LUI », etc etc. Vous n'êtes pas seul(e)s :). Et toutes ces remarques vous sont régulièrement servies par la famille, les inconnus, ou même le personnel médical !</p> | ||
10 | |||
11 | <p>Créez votre bingo personnalisé, et emportez-le avec vous la prochaine fois que vous allez voir vos beaux-parents, votre médecin, etc. Cochez les cases adaptées et vous pouvez crier "bingo" quand vous avez une ligne complète, devant le regard médusé de votre interlocuteur. Et voir si vous faites un bon score.</p> | ||
12 | |||
13 | <p>Il/elle ne comprendra pas pourquoi, mais au moins vous aurez un peu rigolé.</p> | ||
14 | |||
15 | <h2>Ça marche comment ?</h2> | ||
16 | <p>Vous pouvez utiliser une grille aléatoire, ou la générer en choisissant certains paramètres. Quand la grille vous plaît, vous pouvez sauvegarder l'URL pour la partager ou la sauvegarder.</p> | ||
17 | <p>Une fois la grille chargée, vous pouvez jouer sans connexion.</p> | ||
18 | |||
19 | <p>Il y a quelques "réponses" possibles si vous cliquez une fois de plus sur les cases, si vous cherchez la réplique qui tue.</p> | ||
20 | |||
21 | </div> | ||
22 | |||
23 | |||
24 | {% endblock %} | ||
diff --git a/templates/base.html b/templates/base.html index 028aaa9..d1b4376 100644 --- a/templates/base.html +++ b/templates/base.html | |||
@@ -21,7 +21,7 @@ | |||
21 | <nav> | 21 | <nav> |
22 | <a href="/">Grille aléatoire</a> | | 22 | <a href="/">Grille aléatoire</a> | |
23 | <a href="/custom">Créer une grille personnalisée</a> | | 23 | <a href="/custom">Créer une grille personnalisée</a> | |
24 | <!-- <a href="/apropos">À propos</a> |--> | 24 | <a href="/apropos">À propos</a> |
25 | 25 | ||
26 | </nav> | 26 | </nav> |
27 | </div> | 27 | </div> |
diff --git a/templates/custom.html b/templates/custom.html index b3aed77..50858ba 100644 --- a/templates/custom.html +++ b/templates/custom.html | |||
@@ -36,7 +36,15 @@ | |||
36 | <li>{{ cat }} <input type="checkbox" name="categorie_{{cat}}" checked> ({{ nbparcat[loop.index -1] }} phrase(s))</li> | 36 | <li>{{ cat }} <input type="checkbox" name="categorie_{{cat}}" checked> ({{ nbparcat[loop.index -1] }} phrase(s))</li> |
37 | {% endfor %} | 37 | {% endfor %} |
38 | </ul></li> | 38 | </ul></li> |
39 | |||
40 | <li>Score par : <ul> | ||
41 | {% for cle, val in DEFAUT.score.items() %} | ||
42 | <li>{{ cle }} : <input class="data" type="number" min="0" name="score_{{ cle }}" value="{{ val }}"></li> | ||
43 | {% endfor %} | ||
44 | </ul></li> | ||
45 | |||
39 | </ul> | 46 | </ul> |
47 | |||
40 | <input type="submit" name="zou" value="Je veux une grille !"> | 48 | <input type="submit" name="zou" value="Je veux une grille !"> |
41 | 49 | ||
42 | </form> | 50 | </form> |
diff --git a/templates/index.html b/templates/index.html index af8ac6c..82b556e 100644 --- a/templates/index.html +++ b/templates/index.html | |||
@@ -1,5 +1,16 @@ | |||
1 | {% extends "base.html" %} | 1 | {% extends "base.html" %} |
2 | {% block contenu %} | 2 | {% block contenu %} |
3 | <script> | ||
4 | /* Calcul des scores */ | ||
5 | var scoreCase = {{ conf.score.case }}; | ||
6 | var scoreLigne = {{ conf.score.ligne }} ; | ||
7 | var scoreColonne = {{ conf.score.colonne }} ; | ||
8 | var scoreDiagonale = {{ conf.score.diagonale }} ; | ||
9 | |||
10 | /*URL */ | ||
11 | met_url('?grille={{ chainecode }}') | ||
12 | </script> | ||
13 | |||
3 | <h1>{{ conf.titre }}</h1> | 14 | <h1>{{ conf.titre }}</h1> |
4 | 15 | ||
5 | {% if e | length >0 %} | 16 | {% if e | length >0 %} |
@@ -44,6 +55,7 @@ | |||
44 | <hr> | 55 | <hr> |
45 | <a href="/?grille={{ chainecode }}">Lien permanent vers cette grille</a> | 56 | <a href="/?grille={{ chainecode }}">Lien permanent vers cette grille</a> |
46 | 57 | ||
58 | |||
47 | </div> | 59 | </div> |
48 | 60 | ||
49 | 61 | ||