Filtre pour balise `<svg>` inline ou `<img>` si pixel suivant le type
SPIP fournit des filtres balise_img
pour… une balise <img>
(toute image) ou balise_svg
spécifiquement pour insérer un SVG inline.
Sauf que de très (très) nombreuses images sont dynamiques, fournie par le contenu, et on ne devrait pas avoir à faire des tests partout dans les squelettes, quand on veut que les SVG soient bien inline, mais les autres en <img>
et qu'on ne sait pas d'avance le type.
SPIP devrait donc sûrement proposer aussi un filtre qui fait un mix des deux, tout simplement en appelant ce qui existe :
/**
* Génère une balise HTML `img` ou `svg` suivant le nom du fichier.
*
* @uses filtre_balise_img_dist()
* @uses filte_balise_svg_dist()
*
* @param string $src
* @param string $alt
* @param string $class
* @return string
*/
function filtre_balise_img_svg($src, $alt='', $class='') {
include_spip('inc/filtres');
$balise = '';
// Récupérer le chemin si c'est déjà un tag <img>
if (substr(trim($src), 0, 4) === '<img') {
$src = extraire_attribut($src, 'src');
}
// Retrouver l'extension
$src = supprimer_timestamp($src);
$extension = pathinfo($src, PATHINFO_EXTENSION);
// Si c'est un svg, on embed
if ($extension === 'svg') {
$balise = filtrer('balise_svg', $src, $alt, $class);
// Sinon, balise_img si pas déjà le cas
} else {
$balise = filtrer('balise_img', $src, $alt, $class);
}
return $balise;
}
Utilisable alors lisiblement dans les squelettes sans casse-tête
[(#LOGO_PATATE|balise_img_svg{'Ceci n’est pas une patate.', 'frite'})]
Modification effectuée par marcimat