Changeset 66259 in spip-zone


Ignore:
Timestamp:
Sep 26, 2012, 9:49:13 AM (7 years ago)
Author:
cedric@…
Message:

Centraliser dans ce plugin la prise en charge des .less dans la balise #CSS :

  • Prise en charge de la balise #CSS{style.css}
  • Regles :
  • - cherche un .css ou un .css.html ou un .less comme feuille de style
  • - si un seul des 3 trouve dans le chemin il est renvoye (et compile au passage si .less)
  • - si un .css.html et un .css trouves dans le chemin, c'est le .css.html qui est pris (surcharge d'un statique avec une css calculee)
  • - si un .less et un (.css ou .css.html) on compare la priorite du chemin des deux trouves :
  • le plus prioritaire des 2 est choisi
  • si priorite equivalente on choisi le (.css ou .css.html) qui est le moins couteux a produire
  • permet d'avoir dans le meme dossier le .less et sa version compilee .css : cette derniere est utilisee
  • #CSS{style.css} renvoie dans tous les cas un fichier .css qui est soit :
  • - un .less compile en .css
  • - un .css statique
  • - un .css.html calcule en .css

+ prefixage fonctions et PHPDoc

Location:
_plugins_/less-css/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/less-css/trunk/lesscss_fonctions.php

    r66257 r66259  
    11<?php
     2/*
     3 * Plugin LessCSS
     4 * Distribue sous licence MIT
     5 *
     6 */
     7
     8if (!defined("_ECRIRE_INC_VERSION")) return;
    29
    310/**
     
    1118 * @return string
    1219 */
    13 function less_compile($style, $contexte = array()){
     20function lesscss_compile($style, $contexte = array()){
    1421        require_once 'lessphp/lessc.inc.php';
    1522
     
    119126                }
    120127                else {
    121                         $contenu = less_compile($contenu, array('file'=>$source));
     128                        $contenu = lesscss_compile($contenu, array('file'=>$source));
    122129                }
    123130                // si erreur de compilation on renvoit un commentaire, et il y a deja eu un log
     
    135142                        return $done[$source] = $source;
    136143        }
    137         $source = less_compile($source);
     144        $source = lesscss_compile($source);
    138145        if (!$source)
    139146                return "/* Erreur compilation LESS : cf less.log */";
     
    154161        $flux .= '<'
    155162                .'?php header("X-Spip-Filtre: '
    156                 .'cssify_head'
     163                .'lesscss_cssify_head'
    157164                .'"); ?'.'>';
    158165        return $flux;
     
    167174 * @return void
    168175 */
    169 function cssify_head($head){
     176function lesscss_cssify_head($head){
    170177        $url_base = url_de_base();
    171178        $balises = extraire_balises($head,'link');
     
    195202        return $head;
    196203}
     204
     205/*
     206 * Prise en charge de la balise #CSS{style.css}
     207 * Regles :
     208 * - cherche un .css ou un .css.html ou un .less comme feuille de style
     209 * - si un seul des 3 trouve dans le chemin il est renvoye (et compile au passage si .less)
     210 * - si un .css.html et un .css trouves dans le chemin, c'est le .css.html qui est pris (surcharge d'un statique avec une css calculee)
     211 * - si un .less et un (.css ou .css.html) on compare la priorite du chemin des deux trouves :
     212 *   le plus prioritaire des 2 est choisi
     213 *   si priorite equivalente on choisi le (.css ou .css.html) qui est le moins couteux a produire
     214 *   permet d'avoir dans le meme dossier le .less et sa version compilee .css : cette derniere est utilisee
     215 *
     216 * #CSS{style.css} renvoie dans tous les cas un fichier .css qui est soit :
     217 * - un .less compile en .css
     218 * - un .css statique
     219 * - un .css.html calcule en .css
     220 */
     221function balise_CSS($p) {
     222        $_css = interprete_argument_balise(1,$p);
     223        $p->code = "timestamp(direction_css(lesscss_select_css($_css)))";
     224        $p->interdire_scripts = false;
     225        return $p;
     226}
     227
     228/**
     229 * Selectionner de preference la feuille .less (en la compilant)
     230 * et sinon garder la .css classiquement
     231 *
     232 * @param string $css_file
     233 * @return string
     234 */
     235function lesscss_select_css($css_file){
     236        if (function_exists('less_css')
     237          AND substr($css_file,-4)==".css"){
     238                $less_file = substr($css_file,0,-4).".less";
     239                $less_or_css = lesscss_find_less_or_css_in_path($less_file, $css_file);
     240                if (substr($less_or_css,-5)==".less")
     241                        return less_css($less_or_css);
     242                else
     243                        return $less_or_css;
     244        }
     245        return find_in_path($css_file);
     246}
     247
     248/**
     249 * Faire un find_in_path en cherchant un fichier .less ou .css
     250 * et en prenant le plus prioritaire des deux
     251 * ce qui permet de surcharger un .css avec un .less ou le contraire
     252 * Si ils sont dans le meme repertoire, c'est le .css qui est prioritaire,
     253 * par soucis de rapidite
     254 *
     255 * @param string $less_file
     256 * @param string $css_file
     257 * @return string
     258 */
     259function lesscss_find_less_or_css_in_path($less_file, $css_file){
     260        $l = find_in_path($less_file);
     261        $c = $f = trouver_fond($css_file);
     262        if (!$c)
     263                $c = find_in_path($css_file);
     264
     265        if (!$l)
     266                return ($f?produire_fond_statique($css_file,array('format'=>'css')):$c);
     267        elseif(!$c)
     268                return $l;
     269
     270        // on a un less et un css en concurence
     271        // prioriser en fonction de leur position dans le path
     272        $path = creer_chemin();
     273        foreach($path as $dir) {
     274                // css prioritaire
     275                if (strncmp($c,$dir . $css_file,strlen($dir . $css_file))==0)
     276                        return ($f?produire_fond_statique($css_file,array('format'=>'css')):$c);;
     277                if ($l == $dir . $less_file)
     278                        return $l;
     279        }
     280        // on ne doit jamais arriver la !
     281        spip_log('Resolution chemin less/css impossible',_LOG_CRITIQUE);
     282        debug_print_backtrace();
     283        die('Erreur fatale, je suis perdu');
     284}
     285
    197286?>
  • _plugins_/less-css/trunk/plugin.xml

    r66257 r66259  
    44        <auteur>Jean-Baptiste Bourgoin</auteur>
    55        <licence>MIT</licence>
    6         <version>0.5.3</version>
     6        <version>0.6.0</version>
    77        <etat>test</etat>
    88        <icon>img/lesscss-32.png</icon>
Note: See TracChangeset for help on using the changeset viewer.