From 5e940929308e96573068309843bb55471adc2b6e Mon Sep 17 00:00:00 2001 From: RastaPopoulos <rastapopoulos@spip.org> Date: Wed, 27 Mar 2024 15:40:19 +0100 Subject: [PATCH] =?UTF-8?q?feat(5660):=20nouveau=20filtre=20|balise=5Fimg?= =?UTF-8?q?=5Fsvg=20pour=20ins=C3=A9rer=20une=20image=20ou=20un=20svg=20in?= =?UTF-8?q?line=20sans=20savoir=20d'avance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix: #5660 --- ecrire/inc/filtres.php | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 07ecf8d465..5ca898ea5a 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -3671,6 +3671,51 @@ function filtre_balise_svg_dist($img, $alt = '', $class = null, $size = null) { return $svg; } +/** + * Génère une balise HTML `img` ou un `svg` inline suivant le nom du fichier. + * + * @uses filtre_balise_img_dist() + * @uses filtre_balise_svg_dist() + * + * @param string $img + * chemin vers un fichier ou balise `<img src='...' />` (generee par un filtre image par exemple) + * @param string $alt + * texte alternatif ; une valeur nulle pour explicitement ne pas avoir de balise alt sur l'image (au lieu d'un alt vide) + * @param string $class + * attribut class ; null par defaut (ie si img est une balise, son attribut class sera inchange. pas de class inseree + * @param string|int $size + * taille imposee + * @2x : pour imposer une densite x2 (widht et height seront divisees par 2) + * largeur : pour une image carree + * largeurx* : pour imposer uniquement la largeur (un attribut height sera aussi ajoute, mais calcule automatiquement pour respecter le ratio initial de l'image) + * largeurxhauteur pour fixer les 2 dimensions + * @return string + * Code HTML de la balise IMG + */ +function filtre_balise_img_svg_dist($src, $alt = '', $class = null, $size = null) { + $balise = ''; + + // Récupérer le chemin si c'est déjà un tag <img> + if (str_starts_with(ltrim($src), '<img')) { + $src = extraire_attribut($src, 'src'); + } + + // Retrouver l'extension + $src = supprimer_timestamp($src); + $extension = strtolower(pathinfo($src, PATHINFO_EXTENSION)); + + // Si c'est un svg, on embed + if ($extension === 'svg') { + $balise = filtrer('balise_svg', $src, $alt, $class, $size); + // Sinon, balise_img si pas déjà le cas + } else { + $balise = filtrer('balise_img', $src, $alt, $class, $size); + } + + return $balise; +} + + /** * Obtient des informations sur les plugins actifs * -- GitLab