diff --git a/frontend/scenarios/edit_content.feature b/frontend/scenarios/edit_content.feature index df5dde8c..c9ad5b5a 100644 --- a/frontend/scenarios/edit_content.feature +++ b/frontend/scenarios/edit_content.feature @@ -8,11 +8,17 @@ Scénario: de la glose dont on est l'auteur Et une session active avec mon compte Quand j'essaie de remplacer le contenu de la glose par : """ - Nous traduisons ici "shape" par "ombre" et non "forme" car dans un autre - poème du recueil, les "shapes" sont clairement ce qui apparaît en allumant - une lampe dans les ténèbres. + Corinne : Voilà donc heu on utilise leurs produits et puis comme on avait + visité heuu ils font aussi de très bons produits. + + Mathilde : Et vous la produisez avec quelle machine ? + + Corinne : La farine ? """ - Alors la glose contient "Nous traduisons ici" + Alors la glose contient "Corinne : Voilà donc heu" + Et "Corinne" est en gras + Et "Mathilde" est en gras + Scénario: de la glose dont on n'est pas l'auteur diff --git a/frontend/src/components/EditableText.jsx b/frontend/src/components/EditableText.jsx index 9c07a6d8..a1fafc12 100644 --- a/frontend/src/components/EditableText.jsx +++ b/frontend/src/components/EditableText.jsx @@ -7,6 +7,17 @@ import PictureUploadAction from '../menu-items/PictureUploadAction'; import {v4 as uuid} from 'uuid'; import { OverlayTrigger, Tooltip } from 'react-bootstrap'; +function boldSpeakerNames(text) { + return text.split('\n').map(line => { + const match = line.match(/^([\p{Lu}][\p{L}'\- ]+?)\s*:/u); + if (match) { + const name = match[1]; + return line.replace(name, `**${name}**`); + } + return line; + }).join('\n'); +} + function EditableText({id, text, rubric, isPartOf, links, fragment, setFragment, setHighlightedText, setSelectedText, rawEditMode, setRawEditMode, backend, setLastUpdate}) { const [beingEdited, setBeingEdited] = useState(false); const [editedDocument, setEditedDocument] = useState(); @@ -110,7 +121,7 @@ function EditableText({id, text, rubric, isPartOf, links, fragment, setFragment, >
- {text || ' '} + {boldSpeakerNames(text || ' ')}
diff --git a/frontend/tests/outcome.js b/frontend/tests/outcome.js index 9075be4f..d2f401e2 100644 --- a/frontend/tests/outcome.js +++ b/frontend/tests/outcome.js @@ -9,6 +9,14 @@ Alors("{string} est la glose ouverte", (title) => { cy.get('.runningHead .scholium').should('contain', title); }); +Alors("{string} est en gras", (texte) => { + cy.get(".scholium").eq(1).find("strong") + .should(($strong) => { + const strongText = $strong.map((i, el) => Cypress.$(el).text().trim()).get(); + expect(strongText).to.include(texte); + }); +}); + Alors("je peux lire {string}", (text) => { cy.get('body').should('contain', text); });