Le code du dimanche: Iconeleon

Comme je le disais dans le billet précédent à propos de SVGBox, l'idée était bonne mais le poids était rédhibitoire.

Pourtant, ça peut être sympa d'avoir un catalogue d'icônes prêtes à servir et dont on puisse altérer la couleur, sans compter que ce serait une bonne alternative aux webfonts tout en étant plus accessible.

Donc, j'ai récupéré le pack d'icônes de fontAwesome et j'ai bidouillé une API qui permette de faire la même chose que SVGBox.net, à savoir obtenir une icône svg dans la couleur que l'on souhaite.

Par exemple:

api.warriordudimanche.net/iconeleon/?i=headphones donne:

et si on ajoute le paramètre c on peut changer la couleur: api.warriordudimanche.net/iconeleon/?i=headphones&c=red

La couleur peut-être au format HTML, un nom de couleur css ou un rgba quelconque...

api.warriordudimanche.net/iconeleon/?i=headphones&c=rgba(255,0,255,0.5)

Comme pour fancytation

Toute icône modifiée est sauvegardée en cache pour éviter une surcharge du serveur

  • help: affiche une aide
  • iconlist: renvoie la liste des icones au format json
  • search=string: renvoie le résultat de la recherche au format json
  • download: permet de télécharger le script php de l'api
  • Et en plus

    Je vous ai ajouté un frontend minimaliste pour rechercher les icones dans les 1615 du pack.

    liens

    Voilà

    Du coup, si ça peut être utile, n'hésitez pas à vous servir voire à proposer un frontend plus... comment dire ? abouti ?

    Nouvelle version: Unicode

    En passant, j'ai mis à jour ma page sur les caractères unicode...

    Il y a plus de rubriques et j'ai ajouté un moteur de recherche qui accepte plusieurs mots séparés par des espaces.

    par exemple: http://unicode.warriordudimanche.net/?search=aubergine

    Allez, bisou !

    Getlib: ramener des bibliotheques & frameworks en local en une ligne [Edité]

    Certains se souviennent peut-être de goofi, pour récupérer des google fonts en local; sur la base de ce script, j'ai bricolé une version qui permettra de faire la même chose avec les bibliothèques et frameworks (notamment js) que tout un chacun utilise et dont l'appel participe aux stats de google et consorts à chaque requête sur leur serveur.

    Donc, en gros, il suffit de remplacer l'appel du script dans le en ajoutant getlib.php?url= devant.

    Ainsi

     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    deviendra

    <script src="http://monserveur/getlib.php?url=https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    Le fichier est récupéré une seule fois et seule la vertsion locale sera renvoyée par la suite.

    Au cas où vous voulez que le script récupère une éventuelle mise à jour, il suffit d'ajouter update dans l'url:

    <script src="http://monserveur/getlib.php?update&url=https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    Getlib vérifiera alors si le fichier distant a changé et le retéléchargera si c'est nécessaire.

    Comme avec Goofi, seule l'IP du serveur qui héberge le script est connue du serveur distant, jamais celle du visiteur.

    C'est tout! Je n'ai pas testé à fond encore et les erreurs ne sont pas gérées pour le moment, mais ça fonctionne quand même pas mal !

    <?php 
    # get libs from distant servers to local (& avoid unnecessary requests to servers who can log user's connections)
    # ex:  
    # https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
    # becomes
    # getlib.php?url=https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
    # if you want to update local file if the distant one changes, just add "update" 
    # getlib.php?update&url=https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
    # author: warriordudimanche.net
    # 
    $lib_folder='libs/';
    $check_updates=isset($_GET['update']);
    
    if (!empty($_GET['url'])){
        if (!is_dir($lib_folder)){mkdir($lib_folder);}
    
        $url=strip_tags($_GET['url']);
        define('LOCAL_FILENAME',$lib_folder.basename($url));
        $ext=pathinfo(LOCAL_FILENAME)['extension'];
        //$flag='non';
        if (
            !is_file(LOCAL_FILENAME)
            ||
            ($check_updates && !isSameFile($url))
    
        ){
            $lib=file_get_contents($url,false,null,0,1000000);
            file_put_contents(LOCAL_FILENAME,$lib);
            $head = array_change_key_case(get_headers($url, TRUE));
            file_put_contents(LOCAL_FILENAME.'.info', $head['last-modified']);
            //$flag='oui';
        }
        if ($ext=='css'){
            $mime='text/css';
        }elseif ($ext=='js'){
            $mime='text/javascript';
        }else{
            $mime=mime_content_type(LOCAL_FILENAME);
        }
    
        header('Content-Type: '.$mime);
        exit(file_get_contents(LOCAL_FILENAME));
    }
    
    
    function isSameFile($url){
        $head = array_change_key_case(get_headers($url, TRUE));
        $local=file_get_contents(LOCAL_FILENAME.'.info');
        $distant=$head['last-modified'];
        return $distant==$local;
    }

    getlib.zip le dépôt

    Comme toujours,
    c'est aux autres de débugger
    les scripts que tu commets, heu... commit...
    super.
    🗦

    Et je vais t avouer un truc  j ai même pas honte   C est même ma marque de fabrique  une genre de  Bronco s touch .jpg

    Fil RSS des articles