laowantong / mocodo

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

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

Closed Epithumia closed 10 months ago

Epithumia commented 10 months ago

Proposition pour #97

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

laowantong commented 10 months 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 10 months 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 10 months 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 10 months 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 10 months 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 10 months ago

Effectivement. C'est amendé.