Skip to content

Conversation

@EwenKorr
Copy link
Contributor

@EwenKorr EwenKorr commented Sep 27, 2024

⚠️ Nouvelle PR suite au retour métier (j'avais fusionné trop vite 😵‍💫). Les ajouts/modifications de code, par rapport à la PR initiale relue, sont indiqués ci-après.
PR initiale : #4816
PR de revert : #4833

🤔 Pourquoi ?

Inciter les utilisateurs à renseigner plus d’infos dans leurs descriptions de fiche structure et fiche de poste.
On a observé de très bons résultats sur le marché depuis qu’ils l’ont fait.

🍰 Comment ?

  • utiliser django-easymde, qui importe EasyMDE (js et css) dans les formulaires, via {{ form.media }}.
    Malheureusement la version actuelle du django-easymde ne permet pas de configuration "dynamique" (mentionner une fonction JS, comme toggleBold par exemple), donc on doit configurer l'éditeur avec un fichier JS (itou/static/js/easymde_config.js) pour le moment. On enregistre en base de données un texte au format markdown.

  • django-markdownify: pour convertir le markdown enregistré en HTML. On préfère markdownify à markdown ici pour pouvoir choisir un sous-ensemble de balises HTML dans le rendu (<em>, <bold>, <a>…).

Les tests vérifient qu'on traduit les balises désirées, et qu'on ne traduit pas les autres balises.
On ne teste pas le bon chargement de l'éditeur EasyMDE (ça ferait partie de tests fronts ?).

Nouveautés avec cette nouvelle PR :

  • rajouté les listes numérotées
  • une nouvelle ligne en markdown génère une nouvelle ligne (br) en HTML.
  • cliquer sur un lien ouvre un nouvel onglet
  • les liens sont mieux gérés (par exemple [test](www.test.com) => on rajoute https://)

🚨 À vérifier

  • Mettre à jour le CHANGELOG_breaking_changes.md ?

🏝️ Comment tester + captures d'écran

En tant qu'employeur

Se connecter en tant qu'employeur et créer une nouvelle structure
image

Aller voir la fiche publique
image

Modifier les informations
image

Prévisualiser
image

En tant que prescripteur

Se connecter en tant qu'Orienteur (prescripteur non habilité) et "Modifier cette organisation"
image

Cas particulier pour France Travail (se connecter en tant que Prescripteur habilité), les champs sont en lecture seule :
image

@EwenKorr EwenKorr added the ajouté Ajouté dans le changelog. label Sep 27, 2024
@EwenKorr EwenKorr self-assigned this Sep 27, 2024
@EwenKorr EwenKorr changed the title feat(forms): markdown editor for long text inputs Employeur : ajouter un éditeur de texte markdown sur les grands champs de saisie Sep 27, 2024
@EwenKorr EwenKorr force-pushed the ewen/markdown branch 2 times, most recently from 082eed3 to b46b733 Compare September 27, 2024 12:18
@EwenKorr EwenKorr added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC and removed 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC labels Sep 27, 2024
@github-actions
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

@socket-security
Copy link

socket-security bot commented Sep 30, 2024

@EwenKorr EwenKorr force-pushed the ewen/markdown branch 2 times, most recently from 1efa213 to 066e757 Compare October 1, 2024 12:08
Copy link
Contributor Author

@EwenKorr EwenKorr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour la relecture : je mets en évidence les différences par rapport à #4816

from dotenv import load_dotenv

from itou.utils.enums import ItouEnvironment
from itou.utils.urls import markdown_url_set_protocol, markdown_url_set_target_blank
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ajouté ces callbacks pour mieux gérer les liens en markdown

Comment on lines +560 to +568
MARKDOWNIFY = {
"default": {
"WHITELIST_TAGS": ["a", "p", "ul", "ol", "li", "em", "strong", "br"],
"MARKDOWN_EXTENSIONS": ["nl2br", "sane_lists"],
"LINKIFY_TEXT": {
"PARSE_URLS": True,
"CALLBACKS": [markdown_url_set_target_blank, markdown_url_set_protocol],
"PARSE_EMAIL": True,
},
}
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nouvelle config de markdownify

Comment on lines +5 to +6
const easyMDE = new EasyMDE({
element: textarea,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quelques modifs sur ce fichier : les classes principalement, pour avoir des icônes plus grandes

Comment on lines +126 to +137
def markdown_url_set_target_blank(attrs, new=False):
attrs[(None, "target")] = "_blank"
attrs[(None, "rel")] = "noopener"
attrs[(None, "aria-label")] = "Ouverture dans un nouvel onglet"
return attrs


def markdown_url_set_protocol(attrs, new=False):
if href := attrs.get((None, "href")):
if not (href.startswith("http") or href.startswith("mailto")):
attrs[(None, "href")] = "https://" + href
return attrs
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nouveau :

  • pour ouvrir les liens dans un autre onglet
  • pour ajouter https:// aux liens qui n'auraient pas de protocole

@EwenKorr EwenKorr force-pushed the ewen/markdown branch 2 times, most recently from 39e9d87 to d559c46 Compare October 3, 2024 08:02
We changed the following fields:
- companies: description, provided_support
- job descriptions: description, profile_description
- prescribers: description

Two packages were added:
- `django-easymde`: add the JS and CSS needed in the forms)
  note: as of version 1.0.4, the plugin can only have static
  configuration, so we cannot properly configure it in `base.py`
  Hence, a (temporary?) `easymde_config.js` has to be loaded.
  https://github.com/WPI-LNL/django-easymde/blob/main/README.md#easymde-options
- `django-markdownify`: render only a chosen subset of HTML tags
@EwenKorr EwenKorr added this pull request to the merge queue Oct 3, 2024
Merged via the queue into master with commit 24ab953 Oct 3, 2024
@EwenKorr EwenKorr deleted the ewen/markdown branch October 3, 2024 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC ajouté Ajouté dans le changelog.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants