Changeset 113268 in spip-zone


Ignore:
Timestamp:
Jan 5, 2019, 5:19:03 PM (2 months ago)
Author:
nicod@…
Message:

Filtre et fonctions d'insertion d'images svg dimensionnées et accessibles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/galactic/galactic/galactic_fonctions.php

    r111743 r113268  
    234234
    235235}
     236
     237
     238function balise_svg($source, $width = null, $height = null, $alt = null) {
     239        $style = '';
     240        if ($source && file_exists($source)) {
     241                $svg = svg_accessible(svg_compacte(file_get_contents($source)), $alt);
     242                if ($width) {
     243                        $style .= 'max-width: '.$width.'px; width: 100%;';
     244                }
     245                if ($height) {
     246                        $style .= 'max-height: '.$height.'px; height: 100%;';
     247                }
     248                if ($style) {
     249                        $svg = str_replace('<svg ', '<svg style="'.$style.'" ', $svg);
     250                }
     251                return $svg;
     252        }
     253        return null;
     254}
     255
     256function svg_compacte($svg) {
     257        $svg = preg_replace('#(<\?xml[^>]*\?' . '>)#', '', $svg);
     258        $svg = preg_replace('#(<!--[^>]*>)#', '', $svg);
     259        $svg = preg_replace('#(xmlns="[^"]*")#', '', $svg);
     260        $svg = preg_replace('#(xmlns:xlink="[^"]*")#', '', $svg);
     261        $svg = preg_replace("#(\r|\n)*#", '', $svg);
     262        $svg = preg_replace("#(\s)+#", ' ', $svg);
     263
     264        return $svg;
     265}
     266
     267function svg_accessible($svg, $titre = null, $desc = null, $role = 'img') {
     268        if ($titre || $desc) {
     269                // insérer l'attribut sur la balise <svg>
     270                $aria_labelledby = 'aria-labelledby="' . ($titre ? 'title' : '') . ($titre && $desc ? ' ' : '') . ($desc ? 'desc' : '') . '"';
     271                $svg             = preg_replace('#(<svg[^>]*)>#', '$1 ' . $aria_labelledby . '>', $svg);
     272                // insérer les balises
     273                if ($desc) {
     274                        $svg = preg_replace('#(<svg[^>]*>)#', '$1' . "\n" . '<desc id="desc">' . $desc . '</desc>', $svg);
     275                }
     276                if ($titre) {
     277                        $svg = preg_replace('#(<svg[^>]*>)#', '$1' . "\n" . '<title id="title">' . $titre . '</title>', $svg);
     278                }
     279        }
     280        if ($role) {
     281                // insérer l'attribut sur la balise <svg>
     282                $aria_role = 'role="' . $role . '"';
     283                $svg       = preg_replace('#(<svg[^>]*)>#', '$1 ' . $aria_role . '>', $svg);
     284        }
     285
     286        return $svg;
     287}
Note: See TracChangeset for help on using the changeset viewer.