diff --git a/.github/scripts/lib/photo-url.mjs b/.github/scripts/lib/photo-url.mjs index 13c3c55..720811f 100644 --- a/.github/scripts/lib/photo-url.mjs +++ b/.github/scripts/lib/photo-url.mjs @@ -1,11 +1,17 @@ // Extraction d'URL d'image — pur, sans dépendance (pas de sharp). // Le chemin de la photo sur disque vit dans member-paths.mjs. -/** Extrait l'URL d'image d'un champ Issue Form (markdown ![alt](url) ou URL nue). */ +/** Extrait l'URL d'image d'un champ Issue Form. + * Gère les trois formes : markdown `![alt](url)`, balise HTML `` + * (le drag-drop GitHub insère désormais ça), et URL nue. */ export function extractImageUrl(field) { const text = String(field ?? ''); const md = text.match(/!\[[^\]]*\]\((https?:\/\/[^)\s]+)\)/); if (md) return md[1]; - const bare = text.match(/https?:\/\/\S+/); + const html = text.match(/]*\bsrc\s*=\s*["']([^"']+)["']/i); + if (html) return html[1]; + // URL nue : s'arrête aux délimiteurs (guillemets, chevrons, parenthèses) pour ne pas + // capter un caractère de fin de balise/markdown collé à l'URL. + const bare = text.match(/https?:\/\/[^\s"'<>)]+/); return bare ? bare[0] : null; } diff --git a/.github/scripts/lib/photo-url.test.mjs b/.github/scripts/lib/photo-url.test.mjs index 4533320..ab7ba07 100644 --- a/.github/scripts/lib/photo-url.test.mjs +++ b/.github/scripts/lib/photo-url.test.mjs @@ -23,4 +23,13 @@ describe('extractImageUrl', () => { const url = extractImageUrl('texte https://autre.com ![x](https://vrai.com/i.webp)'); assert.equal(url, 'https://vrai.com/i.webp'); }); + + it('extrait l\'URL d\'une balise HTML (drag-drop GitHub actuel), sans le guillemet', () => { + const field = 'Image'; + assert.equal(extractImageUrl(field), 'https://github.com/user-attachments/assets/6451b1af-c883-4151-9836-acfd1dae5d25'); + }); + + it('n\'attrape pas un guillemet/chevron collé à une URL nue', () => { + assert.equal(extractImageUrl('src="https://example.com/c.png"'), 'https://example.com/c.png'); + }); });