Changeset 115264 in spip-zone for _plugins_/z-core/trunk


Ignore:
Timestamp:
May 7, 2019, 11:01:00 AM (3 months ago)
Author:
cedric@…
Message:

Extension de #ICON pour permettre de l'utiliser simplement avec des sprites svg perso ou inline:

  • utiliser une icone standard du sprite par defaut :

#ICON{search,icon-sm,Rechercher}

  • utiliser une icone #search definie dans un svg inline de la page

#ICON{#search,icon-sm,Rechercher}

  • utiliser une l'icone #search definie dans un svg externe (qui sera resolu via #CHEMIN)

#ICON{img/sprite.svg#search,icon-sm,Rechercher}

Location:
_plugins_/z-core/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/z-core/trunk/paquet.xml

    r115039 r115264  
    22        prefix="Zcore"
    33        categorie="outil"
    4         version="2.7.2"
     4        version="2.8.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
  • _plugins_/z-core/trunk/zcore_options.php

    r115039 r115264  
    132132
    133133/**
     134 * utiliser une icone standard du sprite par defaut :
    134135 * #ICON{search,icon-sm,Rechercher}
     136 *
     137 * utiliser une icone #search definie dans un svg inline de la page
     138 * #ICON{#search,icon-sm,Rechercher}
     139 *
     140 * utiliser une l'icone #search definie dans un svg externe (qui sera resolu via #CHEMIN)
     141 * #ICON{img/sprite.svg#search,icon-sm,Rechercher}
     142 *
    135143 * @param $p
    136144 * @return mixed
     
    160168
    161169function afficher_icone_svg($name, $class = '', $alt = '') {
    162         static $sprite_file;
    163         if (is_null($sprite_file)) {
    164                 if (!defined('_ICON_SPRITE_SVG_FILE')) {
    165                         define('_ICON_SPRITE_SVG_FILE', "css/bytesize/bytesize-symbols.min.svg");
    166                 }
    167                 $sprite_file = timestamp(find_in_path(_ICON_SPRITE_SVG_FILE));
    168         }
     170        $icone_href_class_from_name = chercher_filtre("icone_href_class_from_name");
     171        list($href, $class_base) = $icone_href_class_from_name($name);
    169172        if (!$name) {
    170                 return $sprite_file;
    171         }
    172         if ($sprite_file) {
    173                 $name = preg_replace(",[^\w\-],", "", $name);
     173                return $href;
     174        }
     175
     176        if ($href) {
    174177                /*
    175178                        <svg aria-labelledby="my-icon-title" role="img">
     
    184187                $svg = "<svg role=\"img\" width=\"0\" height=\"0\"";
    185188                if ($alt) {
    186                         $id = "icon-title-" . substr(md5("$name:$alt:$sprite_file"),0,4);
     189                        $id = "icon-title-" . substr(md5("$name:$alt:$href"),0,4);
    187190                        $svg .= " aria-labelledby=\"$id\"><title id=\"$id\">" . entites_html($alt)."</title>";
    188191                }
     
    190193                        $svg .= ">";
    191194                }
    192                 $icone_ancre_from_name = chercher_filtre("icone_ancre_from_name");
    193                 $ancre = $icone_ancre_from_name($name);
    194                 $svg .= "<use xlink:href=\"$sprite_file#$ancre\"></use>";
     195                $svg .= "<use xlink:href=\"$href\"></use>";
    195196                $svg .= "</svg>";
    196197
     198                if ($class_base = trim($class_base)) {
     199                        $class_base = ' icon-' . $class_base;
     200                }
    197201                if ($class = trim($class)) {
    198202                        $class = preg_replace(",[^\w\s\-],", "", $class);
    199203                }
    200                 return "<i class=\"icon icon-$name" . ($class ? " $class" : "") . "\">$svg</i> ";
     204                return "<i class=\"icon{$class_base}" . ($class ? " $class" : "") . "\">$svg</i> ";
    201205        }
    202206        return "";
    203207}
    204208
    205 function filtre_icone_ancre_from_name_dist($name) {
     209function filtre_icone_href_class_from_name_dist($name) {
     210        static $sprite_files = array();
     211
     212        if (strpos($name,'#') !== false or strpos($name,'/') !== false or strpos($name,'.svg') !== false) {
     213                // l'ancre est fournie explicitement (sprite inline)
     214                // voire le nom du fichier sprite svg
     215                list($filename, $anchor) = explode('#', trim($name), 2);
     216                // sanitizer l'ancre pour la class
     217                $class = preg_replace(",[^\w\-],", "", $anchor);
     218
     219                if ($filename) {
     220                        if (!isset($sprite_files[$filename])) {
     221                                $sprite_files[$filename] = timestamp(find_in_path($filename));
     222                        }
     223                        $filename = $sprite_files[$filename];
     224                        return array($filename . ($anchor ? '#' . $anchor : ''), $class);
     225                }
     226                else {
     227                        return array($name, $class);
     228                }
     229        }
     230        else {
     231                // c'est le sprite par defaut avec un name qui correspond a l'ancre abregee
     232                // et la gestion de quelques historiques de nommage/renommage
     233                if (!isset($sprite_files[''])) {
     234                        if (!defined('_ICON_SPRITE_SVG_FILE')) {
     235                                define('_ICON_SPRITE_SVG_FILE', "css/bytesize/bytesize-symbols.min.svg");
     236                        }
     237                        $sprite_files[''] = timestamp(find_in_path(_ICON_SPRITE_SVG_FILE));
     238                }
     239                // sanitizer l'ancre pour la class
     240                $class = preg_replace(",[^\w\-],", "", $name);
     241                if (!$name) {
     242                        return array($sprite_files[''], $class);
     243                }
     244                $icone_anchor_from_name = chercher_filtre("icone_anchor_from_name");
     245                $anchor = $icone_anchor_from_name($name);
     246                return array($sprite_files[''] . '#' . $anchor, $class);
     247        }
     248}
     249
     250function filtre_icone_anchor_from_name_dist($name) {
    206251        switch ($name) {
    207252                case "comment":
Note: See TracChangeset for help on using the changeset viewer.