laowantong / mocodo

Modélisation Conceptuelle de Données. Nickel. Ni souris.
https://www.mocodo.net
MIT License
181 stars 49 forks source link

Ajout d'un menu pour les cardinalités relatives #101

Closed Epithumia closed 1 year ago

Epithumia commented 1 year ago

Proposition pour #97

Le menu déroulant est bien sur la même ligne désormais.

laowantong commented 1 year ago

Ok pour ce genre de lignes :

  createOptions("sql_case", ["snake_case", "camelCase", "PascalCase"], "snake_case");
  createOptions("strengthen_card", ["_1,1_", "(1,1)", "1,1 (R)", "(R) 1,1", "1,1"], "_1,1_");
  createOptions("fk_prefix", ["#", ""], "#");

Il y a cependant un problème : la syntaxe _1,1_ ne devrait pas être exposée à l'utilisateur de Mocodo online. Il faudrait 1,1. Mais je ne sais pas comment on fait dans un menu, et pas le temps de regarder ça en ce moment.

Pour le reste, je verrais peut-être une fonction à part qu'on appellerait trois fois pour placer chaque menu au bout de la ligne de l'option appropriée.

Epithumia commented 1 year ago

Ok pour ce genre de lignes :

  createOptions("sql_case", ["snake_case", "camelCase", "PascalCase"], "snake_case");
  createOptions("strengthen_card", ["_1,1_", "(1,1)", "1,1 (R)", "(R) 1,1", "1,1"], "_1,1_");
  createOptions("fk_prefix", ["#", ""], "#");

Il y a cependant un problème : la syntaxe _1,1_ ne devrait pas être exposée à l'utilisateur de Mocodo online. Il faudrait 1,1. Mais je ne sais pas comment on fait dans un menu, et pas le temps de regarder ça en ce moment.

En HTML natif, c'est impossible, il faut passer par une bibliothèque qui réimplemente select (par exemple https://select2.org) en l'augmentant pour que ça soit dessiné par le navigateur et non par l'OS. Il faudra aussi modifier createOptions pour qu'il puisse avoir une valeur différente entre ce qui est affiché et ce qui est envoyé à mocodo.

Pour le reste, je verrais peut-être une fonction à part qu'on appellerait trois fois pour placer chaque menu au bout de la ligne de l'option appropriée.

Ca me paraît ingérable en l'état car il n'y a pas de moyen simple d'identifier les lignes : il faut trouver le bon input, récupérer son grand-père (le <li> dans lequel le <span> contenant la checkbox se trouve), puis insérer le HTML du menu déroulant dans ce <li> après ce span. Pour moi, la légère modification de createCheckboxes est plus maintenable : si par la suite on veut rajouter quelque chose, on a juste à remplir la propriété "extra", et sinon le code généré reste inchangé.

laowantong commented 1 year ago

En HTML natif, c'est impossible, il faut passer par une bibliothèque qui réimplemente select (par exemple https://select2.org) en l'augmentant pour que ça soit dessiné par le navigateur et non par l'OS.

D'accord, c'est ce que je craignais. À éviter donc. Je suggère un soulignement unicode : 1̲,1̲. Testé sous macOS 12.6, à voir si vous avez accès à d'autres plateformes.

Il faudra aussi modifier createOptions pour qu'il puisse avoir une valeur différente entre ce qui est affiché et ce qui est envoyé à mocodo.

Je fais déjà ce genre de choses pour delays :

https://github.com/laowantong/mocodo/blob/32269e3d6e9c8f929972f5fb5a7421fe1abe6f44/web/mocodo.js#L4-L11

laowantong commented 1 year ago

Ca me paraît ingérable en l'état car il n'y a pas de moyen simple d'identifier les lignes : il faut trouver le bon input, récupérer son grand-père (le <li> dans lequel le <span> contenant la checkbox se trouve), puis insérer le HTML du menu déroulant dans ce <li> après ce span. Pour moi, la légère modification de createCheckboxes est plus maintenable : si par la suite on veut rajouter quelque chose, on a juste à remplir la propriété "extra", et sinon le code généré reste inchangé.

Pour moi, ça ne fait qu'une ligne :

https://github.com/laowantong/mocodo/blob/a6b243f33d45084ef81ac68f6be79d0ff9b7416c/web/mocodo.js#L189

Epithumia commented 1 year ago

Ah, intéressant.

Sinon quand j'avais fait mes versions et mes tests, je n'avais pas besoin des lignes

https://github.com/laowantong/mocodo/blob/a6b243f33d45084ef81ac68f6be79d0ff9b7416c/web/generate.php#L118 https://github.com/laowantong/mocodo/blob/a6b243f33d45084ef81ac68f6be79d0ff9b7416c/web/generate.php#L119

Parce qu'a priori, la ligne https://github.com/laowantong/mocodo/blob/a6b243f33d45084ef81ac68f6be79d0ff9b7416c/web/generate.php#L96 passe tout ce qui n'est pas le modèle et le statut à params.json, et que comme les select ont le même nom que les paramètres de la ligne de commande, c'est traité avec le reste des options (comme le detect_overlaps, par exemple).

laowantong commented 1 year ago

Effectivement. C'est amendé.