Bug #41734
amélioration du rendu des champs type tableau en mobile
0%
Description
Aujourd'hui il est impossible de voir complétement le texte saisi.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
- Assigné à mis à Thomas Jund (congés, retour le 29/04)
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
Widgets concernés par le problème d'affichage :
- Tableau
- Tableau de liste
- Tableau de longueur libre
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
- Fichier desktop.png desktop.png ajouté
- Fichier mobile.png mobile.png ajouté
- Fichier very-small.png very-small.png ajouté
- Fichier 0001-scss-make-table-widgets-responsive-41734.patch 0001-scss-make-table-widgets-responsive-41734.patch ajouté
- Fichier 0001-js-make-table-widgets-reponsive-41734.patch 0001-js-make-table-widgets-reponsive-41734.patch ajouté
- Tracker changé de Support à Bug
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Proposition :
- Vérifier si la tableau est plus large que son parent et dans ce cas le fixer à 100%
- en mobile, positionner les cellules les unes en dessous des autres, récupérer les titres de colonnes et les placer en ::before
- en very-small, positionner les td::before au dessus du champs
Nécessite du JS.
Une des difficultés fût de jongler entre les différents markup :
- les widgets tableau et tableau de liste ont les titres des colonnes en `thead tr th` , et les titres des lignes en `tbody tr th:first-child`
- les widgets tableau de longueur libre ont les titres des colonnes en `tbody tr:first-child th` et n'ont pas de titre de ligne
- Ils ont également une balise .widget autour de chaque input
J'ai donc donné la possibilité de passer les sélecteurs des titres en paramètres du script
new Responsive_table_widget(table, { col_headers_selector: 'thead th', row_headers_selector: 'tbody th' })
J'ai placé le script dans qommon.forms.js, mais il pourrait se généraliser à combo également.
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
Il faudra peut-être revoir le label du bouton "ajouter une ligne" puisque 'ligne' il n'y a plus en mobile.
Ensuite JS ajoute quelques class et des data-attributs. Cette partie pourrait sauter si ces éléments étaient ajoutés depuis le template des widgets. À voir.
Mis à jour par Frédéric Péters il y a plus de 3 ans
C'est quoi le résultat avec le js sur un site qui n'aurait pas les nouvelles css ? (ce qui serait le cas des sites au quotidien pas encore migrés)
Tu peux pointer les modifications dans le balisage qui seraient utiles ?
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
C'est quoi le résultat avec le js sur un site qui n'aurait pas les nouvelles css ? (ce qui serait le cas des sites au quotidien pas encore migrés)
Rien du tout, le JS va ajouter des class, des datas-attribut et un "width:100%" sur les tableaux (mais sans effet).
Bref, exactement comme si je n'avais rien fait.
Tu peux pointer les modifications dans le balisage qui seraient utiles ?
- uniformiser le balisage des "tableau de longueur libre" avec les autres tableau (en plaçant les titres des colonnes dans un `thead`, ça simplifierait le JS et le CSS.
- Ajouter des titres de lignes aux tableaux de longueur libre, ou à défaut un compteur, information qui serait vraiment utile en mobile. Le compteur peut s'ajouter en CSS only.
- Ensuite, pour permettre d'alléger la partie JS :
- Ajouter les data-attributs aux td directement dans les templates (mais là dessus j'hésite, c'est bien aussi que JS le fasse, cela permettrait de l'utiliser sur tout type de tableaux, à l'aide d'un `.pk-class-*`).
Mis à jour par Frédéric Péters il y a plus de 3 ans
Ajouter des titres de lignes
Qu'appelles-tu "titres de lignes" ?
Plus simplement sans doute, si tu peux faire un diff à partir du marqueur actuel pour me pointer les choses :
<div class="widget TableListRowsWidget widget-optional" data-field-id="18"> <div class="title"><label class="field--label" id="form_label_f18" for="form_f18">tableau longeur libre</label></div> <div class="content" aria-labelledby="form_label_f18"> <table> <tbody> <tr> <th>plop</th> <th>plip</th> </tr> <tr> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element0$col0" id="form_f18$element0$col0"></div></div></td> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element0$col1" id="form_f18$element0$col1"></div></div></td> </tr> <tr> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element1$col0" id="form_f18$element1$col0"></div></div></td> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element1$col1" id="form_f18$element1$col1"></div></div></td> </tr> ... </tbody> </table> <div class="widget SubmitWidget list-add widget-optional"> <div class="content " aria-labelledby="form_label_f18$add_element"> <button name="f18$add_element" value="Ajouter une ligne">Ajouter une ligne</button> </div> </div> </div> </div>
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
<div class="widget TableListRowsWidget widget-optional" data-field-id="18"> <div class="title"><label class="field--label" id="form_label_f18" for="form_f18">tableau longeur libre</label></div> <div class="content" aria-labelledby="form_label_f18"> <table> + <thead> + <tr> + <td></td> + <th>plop col1</th> + <th>plip col2</th> + </tr> + </thead> <tbody> - <tr> - <th>plop</th> - <th>plip</th> - </tr> <tr> + <th>plop row1</th> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element0$col0" id="form_f18$element0$col0"></div></div></td> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element0$col1" id="form_f18$element0$col1"></div></div></td> </tr> <tr> + <th>plop row2</th> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element1$col0" id="form_f18$element1$col0"></div></div></td> <td><div class="StringWidget widget"><div class="content"><input type="text" name="f18$element1$col1" id="form_f18$element1$col1"></div></div></td> </tr> ... </tbody> </table> <div class="widget SubmitWidget list-add widget-optional"> <div class="content " aria-labelledby="form_label_f18$add_element"> <button name="f18$add_element" value="Ajouter une ligne">Ajouter une ligne</button> </div> </div> </div> </div>
Mis à jour par Frédéric Péters il y a plus de 3 ans
Ok mais on n'a pas de libellés pour les lignes sur ce type de tableau, je ne vois pas le sens que ça aurait, de passer par exemple de :
Participants : | Prénom | Nom | |----------------------| | Frédéric | Péters | | Thomas | Jund | |-<+>------------------|
à :
Participants : | | Prénom | Nom | |---------------------------------------------------------| | Informations sur un participant: | Frédéric | Péters | | Informations sur un participant: | Thomas | Jund | |-<+>-----------------------------------------------------|
Pour le <thead> ok.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Lié à Development #47510: utiliser un <thead> dans les tableaux longueur libre ajouté
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
Ok mais on n'a pas de libellés pour les lignes sur ce type de tableau
Oui, c'est pourquoi je proposais juste un compteur pour améliorer la compréhension en mobile
Participants : | | Prénom | Nom | |--------------------------| | 1 | Frédéric | Péters | | 2 | Thomas | Jund | |-<+>----------------------| En, mobile Participants : | 1 | | Prénom | Frédéric | | Nom | Péters | | 2 | | Prénom | Thomas | | Nom | Jund | |-<+>----------------------| à la place de Participants : | Prénom | | | Nom | | | Prénom | | | Nom | | |-<+>----------------------|
Et avoir ainsi un feedback visuel permettant au user quand il clique sur "+" de voir "3"
Mis à jour par Frédéric Péters il y a plus de 3 ans
Cet aspect ça me va bien si ce n'est pas dans le balisage. Aussi même en-dehors de cet aspect je ne trouve pas ça terrible, ça ne serait pas tranquillement compréhensible d'avoir une variation dans la couleur de fond pour identifier les "lignes" différentes ?
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
ça ne serait pas tranquillement compréhensible d'avoir une variation dans la couleur de fond pour identifier les "lignes" différentes ?
Comme un zebra sur les tbdody > tr. Techniquement possible (aussi trouver une solution qui garantie de s'adapter à tous les thèmes existants) et voir si on le limite qu'à l'affichage mobile.
Cet aspect ça me va bien si ce n'est pas dans le balisage
Je pensais à un th vide qu'on viendrait remplir avec un compteur css. Pour des raisons d'accessibilité cela me semble plus efficace qu'une indication colorée. (Mais à y regarder de plus prêt, pour une bonne accessibilité il faudrait surtout des attributs scope sur les th : thead > tr > th[scope="col"]).
Mon avis : zebra c'est mieux que rien. Compteur plus efficace en terme de compréhension.
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
- Fichier 0001-scss-make-table-widgets-responsive-41734.patch 0001-scss-make-table-widgets-responsive-41734.patch ajouté
- Fichier 0001-js-make-table-widgets-reponsive-41734.patch 0001-js-make-table-widgets-reponsive-41734.patch ajouté
- Fichier zebra.png zebra.png ajouté
Suite à #47510
- Suppression des class CSS spécifiques pour identifier les headers des colonnes et des lignes.
- Suppression du paramètre de la fonction qui permet de personnaliser le sélecteur pour les headers de colonnes et de lignes.
- Ajout d'un zébra en mobile sur les tableaux pour aider à l'identification des lignes (voir capture zebra.png)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Jund (congés, retour le 29/04) il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
Patch JS wcs
commit 8407016c974961f067d980c9f904d34089c962c2 (HEAD -> master, origin/master, origin/HEAD) Author: Thomas JUND <tjund@entrouvert.com> Date: Thu Oct 8 14:13:01 2020 +0200 js: make table widgets reponsive (#41734)
Patch scss publik-base-theme
commit e536b5f214f87720585c3737502911da8e73dd7d (HEAD -> master, origin/master, origin/HEAD) Author: Thomas JUND <tjund@entrouvert.com> Date: Thu Oct 8 14:15:57 2020 +0200 scss: make table widgets responsive (#41734)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
scss: make table widgets responsive (#41734)