Projet

Général

Profil

Development #42968

Un champ titre pour la cellule texte

Ajouté par Thomas Jund il y a presque 4 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
15 mai 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Dans le but d'uniformiser les cellules, simplifier le code CSS et faciliter l'application des options (comme foldable) ou l'ajout d'image, il me semblerait opportun que la cellule texte (textcell) ai un champ titre optionnel.
Cela éviterait de devoir détecter si la cellule possède une balise h2 en début de contenu et essayer d'y appliquer le comportement de titre des autres cellules.


Fichiers


Demandes liées

Lié à Combo - Development #64681: Les paramètres pour les titres de celluleFermé29 avril 2022

Actions

Révisions associées

Révision afde19c1 (diff)
Ajouté par Corentin Séchet il y a plus d'un an

misc: add title field to text cells (#42968)

Historique

#1

Mis à jour par Corentin Séchet il y a presque 2 ans

  • Assigné à mis à Corentin Séchet
#2

Mis à jour par Frédéric Péters il y a presque 2 ans

(attention Corentin, ne t'avance pas ici, mauvais ticket, à discuter).

#3

Mis à jour par Corentin Séchet il y a presque 2 ans

J'en ai parlé rapidement sur Jabber avec Thomas J., d'où cette proposition discutable, en effet :). On extrait le titre des cellules textes existantes, pour le réinjecter dans le nouveau champs "title" de la cellule texte. Ça permet d'ajouter des classes sur les titres de cellules texte et évite d'avoir à utiliser first-child. On pourrait éventuellement migrer les cellules existantes en faisant ça en base pour toutes les cellules textes.

Un souci qu'à soulevé Thomas est que ça sera cassé si des h2 dans les cellules textes sont stylés, ce qu'il est possible de faire avec CKEditor.

Bref : à voir effectivement si le jeu en vaut la chandelle.

#4

Mis à jour par Corentin Séchet il y a presque 2 ans

  • Fichier 0001-misc-add-title-field-to-text-cells-42968.patch ajouté
  • Statut changé de Nouveau à Solution proposée
  • Patch proposed changé de Non à Oui
#5

Mis à jour par Corentin Séchet il y a presque 2 ans

  • Fichier 0001-misc-add-title-field-to-text-cells-42968.patch supprimé
#6

Mis à jour par Frédéric Péters il y a presque 2 ans

Alors clairement s'il y avait un nouveau paramètre titre et une envie de migration automatique, il faudrait faire ça sous forme de migration, plutôt que séparer titre et texte lors du rendu.

Mais mon problème de base avec ce ticket c'est qu'il fait passer une cellule évidente (un seul champ dans lequel taper du texte peu importe lequel) à une cellule qui propose aussi de taper un titre, avec des questions qui se poseront quant à la relation entre celui-ci et le texte libre, et sûr si on ne veut pas exposer le titre on peut désormais le mettre dans un autre onglet mais alors n'est-ce pas étrange d'avoir l'élément qui apparait en premier caché sous un autre onglet.

Voilà j'étais vraiment très bien à ignorer ce ticket, et vraiment peu prioritaire pour moi de donner du temps pour discuter des mérites et approches de ce ticket.

#7

Mis à jour par Thomas Jund il y a presque 2 ans

  • Statut changé de Solution proposée à Solution validée

Mais mon problème de base avec ce ticket c'est qu'il fait passer une cellule évidente (un seul champ dans lequel taper du texte peu importe lequel) à une cellule qui propose aussi de taper un titre, avec des questions qui se poseront quant à la relation entre celui-ci et le texte libre

Une cellule évidente ? pas de mon point de vue.
Toutes les cellules ont un champ titre qui correspond au titre de la cellule. Cette cellule fait exception.

Pour lui donner un titre, on en revient donc à bidouiller du code CSS pour appliquer le style "titre de la cellule" au premier h2 du corps du texte (et qui n'est documenté il me semble nulle part) et qui rend encore plus confus l'utilisation de l'option foldable qui ne fonctionnera pas si ce h2 posé manuellement n'est pas présent.
Au delà de cela, ça crée une exception dans le style et le markup de cette cellule, dont les marges avec le bord de la cellule sont alors gérées à coup de margin sur les éléments du corps de texte (mais pas sur tous les éléments, car tous les lister serait assez contre-productif et complique la maintenance, du coup, pas d'alignement typo garanti et souvent des lignes de patchs dans les thèmes). Cette exception complique encore plus le besoin de pourvoir ajuster les marges des cellules (voir #64406 qui a ressorti ce ticket d'outre tombe).

Ajouter un champ champ titre optionnel permetterait donc :

  • Éviter les bidouilles et à terme nettoyer les exceptions pour cette cellule dans le core de publik-base-theme
  • Pouvoir ajouter un h2 en premier enfant de corps de texte qui ne soit pas un titre de cellule (ne pas appliquer le style, parce que pas besoin mais besoin de conserver la hiérarchie des titres).
  • Ajouter vraiment un titre à cette cellule (en option) et les options qui vont avec dans une UI similaire aux autres cellules.
  • homogénéiser le markup des cellules.
  • Avoir un alignement typo garanti pour les éléments du texte (quand je tape un h1, un h2, une ul/li, etc).

quant à la relation entre celui-ci et le texte libre

Je ne comprends pas ce qui te pose problème, tu pourrais préciser ?
le champ titre étant omiprésent pour les autres cellules, il a le même objectif : donner un titre à la cellule dans le style 'titre de cellule". Si on en veut pas on en met pas et on peut continuer comme aujourd'hui. Mais on permet une décorélation entre hiérarchie de titres et design.
Bref, je n'y vois que des avantages à la condition de pouvoir trouver une solution de migration de l'existant.

#8

Mis à jour par Frédéric Péters il y a presque 2 ans

  • Statut changé de Solution validée à En cours

C'est agressif de valider un patch pour lequel je note la nécessité de discussion.

#11

Mis à jour par Corentin Séchet il y a presque 2 ans

  • Fichier 0001-misc-add-title-field-to-text-cells-42968.patch ajouté
  • Statut changé de En cours à Solution proposée

Voilà le patch. A noter que la migration est faite pendant l'affichage, mais que ça serait temporaire et qu'il faudrait la faire partout en base.

#12

Mis à jour par Frédéric Péters il y a presque 2 ans

  • Statut changé de Solution proposée à En cours

(je souhaiterais que ne soit pas proposé de patch avant qu'il y ait eu la discussion)

#13

Mis à jour par Corentin Séchet il y a presque 2 ans

  • Fichier 0001-misc-add-title-field-to-text-cells-42968.patch supprimé
#14

Mis à jour par Pierre Cros il y a presque 2 ans

Je ne suis pas en mesure de juger de l'opportunité d'avoir un titre sur la cellule au niveau technique.

En revanche au niveau fonctionnel je peux affirmer qu'on ne peut pas faire plus simple que la cellule telle qu'elle est actuellement, sans titre.

#15

Mis à jour par Frédéric Péters il y a presque 2 ans

#16

Mis à jour par Frédéric Péters il y a presque 2 ans

Maintenant qu'on a les titres uniformément rangés dans un onglet, on peut reprendre ici.

#17

Mis à jour par Corentin Séchet il y a plus d'un an

Ça implique qu'on ne supporte plus les mises en formes exotiques qu'autorisaient CKEditor et qu'elles seront supprimées (ajouter du gras ou des liens dans un titre). À voir si c'est acceptable.

#18

Mis à jour par Frédéric Péters il y a plus d'un an

Il faudrait mesurer l'impact.

Il me semble aussi possible de faire en sorte que la migration ne touche pas au contenu / n'ajoute pas de titre si le titre a quelque chose de particulier.

#19

Mis à jour par Thomas Jund il y a plus d'un an

Si on ne migre pas l'existant ou tout l'existant, il faudra les CSS pour les 2 cas de figure : avec titre et sans titre.
Avec titre on va pouvoir se retrouver enfin dans un markup standard d'une cellule

.text-cell
  div
    h2
    div // cell body avec padding de 10px / ckeditor wrapper
      ..ckeditor markup (sans marges h de 10px) = toutes balises correctement alignées

Sans titre, faudra garder version actuelle

.text-cell
  div // ck editor wrapper
    .. ckeditor markup avec marges h 10px sur certains enfants + code specifique pour simuler le h2:first-child

Cela signifie donc que ça ne règlera pas les problèmes d'alignement comme lors de l'utilisation une balise h1.

Idéalement il faudrait pouvoir migrer l'existant vers un markup qui supprime les specificités markup et CSS de cette cellule :

.text-cell
  div
    div.cell--body // padding 10px
      ..ckeditor markup (sans marges h de 10px) = toutes balises correctement alignées

Mais si trop compliqué et trop d'impact on peut réfléchir à le faire en plusieurs étapes (perso je serais pour évaluer les impacts avant de prendre une décision).

#20

Mis à jour par Frédéric Péters il y a plus d'un an

"Mesurer l'impact et/ou plusieurs étapes" c'est les deux phrases de mon commentaire précédent.

#21

Mis à jour par Corentin Séchet il y a plus d'un an

J'ai lancé ce script :

from combo.data.models import TextCell
import lxml
import lxml.html
from lxml.etree import Comment
from io import StringIO
from django.urls import reverse
from django.db import connection

tenant = connection.get_tenant()

if hasattr(tenant, 'domain_url'):
    tenant_url = f'https://{tenant.domain_url}'

    for cell in TextCell.objects.all():
        if not cell.text:
            continue

        parser = lxml.etree.HTMLParser()
        html_document = lxml.etree.parse(StringIO(cell.text), parser)
        root = html_document.getroot()
        if root is None:
            continue

        title_nodes = root.xpath('/html/body/h2[1]')

        if title_nodes:
            assert len(title_nodes) == 1
            title_node = title_nodes[0]

            lxml.etree.strip_tags(title_node, Comment, 'meta')
            if len(title_node) or len(title_node.attrib):
                title_node_content = lxml.html.tostring(title_node).strip().decode()
                title_node_content = title_node_content.replace('\n', '').replace('\r', '')
                page_url = reverse('combo-manager-page-view', kwargs={'pk': cell.page.id})
                print(f'{tenant_url}{page_url} : {cell.get_reference()} : {title_node_content}')

sur amiens-prod, cd31-prod, combo.node1.hds.saas.entrouvert, combo.node1.prod.saas.entrouvert.org, cr-reunion-prod, grenoble-prod, lille-prod, moselle-prod, sitiv-prod, toulouse-1, villejuif-prod. J'ai une erreur de forwarding de stdin quand je me connecte à cnil-prod, et combo-manage tenant_command runscript ne trouve pas mon script sur sictiam-prod, je n'ai pas investigué.

Le résultat en PJ. On a donc 1446 cellules sur les serveurs mentionnés avec du markup dans le titre. Si on filtre les cellules pour lesquelles c'est "uniquement" de la mise en forme :

$ cat nested-cell-text-title.txt | grep -Ev '<h2(\s*(style|class|align)=".*")*>[^<]*(<[/]?(br|strong|em|u|i|b)>[^<]*)*</h2>' | wc -l                              
206

Dont 145 titres qui contiennent un lien

$ cat nested-cell-text-title.txt | grep -Ev '<h2(\s*(style|class|align)=".*")*>[^<]*(<[/]?(br|strong|em|u)>[^<]*)*</h2>' | grep '<a' | wc -l
145

Et 26 qui contiennent une image

$ cat nested-cell-text-title.txt | grep -Ev '<h2(\s*(style|class|align)=".*")*>[^<]*(<[/]?(br|strong|em|u)>[^<]*)*</h2>' | grep '<img' | wc -l
26

Le reste sont des titres avec des attributs id, ou contenant des styles ou des balises <font>.

Je propose donc de faire comme Fred suggère : migrer uniquement les titres qui ne contiennent pas de balises, ou une sélection de balises qu'on considère comme acceptable de supprimer (les strong par exemple). Ensuite ajouter une dépréciation pour les cellules qui restent pour plus tard migrer le style en utilisant la classe cell--title, ce qui supprimera le support du système actuel.

#22

Mis à jour par Corentin Séchet il y a plus d'un an

Je n'avais pas réalisé que la page dépréciations concernait uniquement WCS. On pourrait éventuellement faire ça avec les ValidityInfo des cellules, mais une échéance de deux jours pour régler ça me paraît un peu courte. Besoin d'un avis ici, est-ce que c'est envisageable de permettre de définir le timedelta dans ValidityInfo.invalid_datetime pour gérer ça, ou est-ce qu'il vaut mieux s'y prendre autrement ?

#23

Mis à jour par Frédéric Péters il y a plus d'un an

est-ce qu'il vaut mieux s'y prendre autrement

En fait j'imagine qu'à certains endroits le balisage a du sens, qu'on ne veut pas perdre certaines parties, donc je serais pour exposer cet inventaire des cellules dans un pad, avec tous les liens pour permettre aux responsables de projets de juger / manuellement migrer, et dans le même temps ça permettra d'identifier les points à problème.

#24

Mis à jour par Corentin Séchet il y a plus d'un an

On migre automatiquement uniquement si le titre n'a pas de nœuds enfants et pas d'attributs. Je ferais le pad suggéré, le style pourra être migré dans un second temps.

#25

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée

Le résultat en PJ. On a donc 1446 cellules sur les serveurs mentionnés avec du markup dans le titre

dont plus d'un tiers c'est demarches.montreuil.fr pour entourer d'un <strong>; 94 cellules sur support.grandlyon.com qui ajoutent un text-align: center. Ces utilisations (strong/center) se trouvent aussi, moins massivement, ailleurs, on peut en faire des classes utilisables officiellement. (#70283 et #70284).

#26

Mis à jour par Corentin Séchet il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit afde19c1fe399951ee4f796201c89a8a7968d980
Author: Corentin Séchet <csechet@entrouvert.com>
Date:   Wed Apr 27 11:41:49 2022 +0200

    misc: add title field to text cells (#42968)
#27

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#28

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF