Changeset 48764 in spip-zone
- Timestamp:
- Jun 13, 2011, 1:25:33 PM (10 years ago)
- Location:
- _plugins_/less-css/trunk
- Files:
-
- 2 added
- 3 deleted
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/less-css/trunk/lesscss_fonctions.php
r48760 r48764 1 1 <?php 2 2 3 require 'lessc.inc.php'; 3 /** 4 * Compiler des styles inline LESS en CSS 5 * @param string $style 6 * @return string 7 */ 8 function less_compile($style){ 9 require 'lessphp/lessc.inc.php'; 4 10 5 // créé un tableau $styles à partir de la recherche 6 // de tous les fichiers *.less dans le "path" spip 7 foreach (find_all_in_path("", ".[.]less$") as $styles) 8 { 9 // chaque fichier less produit un fichier css de la forme : 10 // "cheminVersFichierLess/less_nomFichierLess.css" 11 $styles_css = dirname($styles).'/'.basename($styles).'.css'; 11 // le compilateur lessc compile le contenu 12 $less = new lessc(); 13 try { 14 $out = $less->parse($style); 15 return $out; 16 } 17 // en cas d'erreur, on retourne du vide... 18 catch (exception $ex) { 19 spip_log('lessc fatal error:'.$ex->getMessage(),'less'._LOG_ERREUR); 20 return ''; 21 } 22 } 12 23 13 // le compilateur lessc compile chaque fichiers less et produit 14 // la feuille de style correspondante dans le même répertoire. 15 try { 16 lessc::ccompile($styles, $styles_css); 17 } catch (exception $ex) { 18 exit('lessc fatal error:<br />'.$ex->getMessage()); 19 } 20 } 24 /** 25 * Transformer du LESS en CSS 26 * Peut prendre en entree 27 * - un fichier .css ou .less : 28 * [(#CHEMIN{messtyles.less.css}|less_css)] 29 * la sortie est un chemin vers un fichier CSS 30 * - des styles inline, 31 * pour appliquer dans une feulle less calculee : 32 * #FILTRE{less_css} 33 * la sortie est du style inline 34 * 35 * @param string $source 36 * @return string 37 */ 38 function less_css($source){ 39 // Si on n'importe pas, est-ce un fichier ? 40 if (!preg_match(',[\s{}],', $source) 41 AND preg_match(',\.(less|css)$,i', $source, $r) 42 AND file_exists($source)) { 21 43 44 $f = basename($source,$r[0]); 45 $f = sous_repertoire (_DIR_VAR, 'cache-less') 46 . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-cssify-" 47 . substr(md5("$source-lesscss"), 0,4) . "\\2", $f, 1) 48 . '.css'; 49 50 # si la feuille compilee est plus recente que la feuille source 51 # l'utiliser sans rien faire, sauf si recalcul explicite 52 if ((@filemtime($f) > @filemtime($source)) 53 AND (!defined('_VAR_MODE') OR _VAR_MODE != 'recalcul')) 54 return $f; 55 56 if (!lire_fichier($source, $contenu)) 57 return $source; 58 59 # compiler le LESS 60 $contenu = less_compile($contenu); 61 // si erreur de compilation on renvoit la source, et il y a deja eu un log 62 if (!$contenu) 63 return $source; 64 # passer la css en url absolue (on ne peut pas le faire avant, car c'est du LESS, pas des CSS) 65 $contenu = urls_absolues_css($contenu, $source); 66 67 // ecrire le fichier destination, en cas d'echec renvoyer la source 68 if (ecrire_fichier($f, $contenu, true)) 69 return $f; 70 else 71 return $source; 72 } 73 $source = less_compile($source); 74 if (!$source) 75 return "/* Erreur compilation LESS : cf less.log */"; 76 else 77 return $source; 78 } 79 80 81 /** 82 * injecter l'appel au compresseur sous la forme de filtre 83 * pour intervenir sur l'ensemble du head 84 * du squelette public 85 * 86 * @param string $flux 87 * @return string 88 */ 89 function lesscss_insert_head($flux){ 90 $flux .= '<' 91 .'?php header("X-Spip-Filtre: ' 92 .'cssify_head' 93 .'"); ?'.'>'; 94 return $flux; 95 } 96 97 98 /** 99 * Attraper automatiquement toutes les .less ou .less.css du head 100 * les compiler, et les remplacer par leur css compilee 101 * 102 * @param string $head 103 * @return void 104 */ 105 function cssify_head($head){ 106 $url_base = url_de_base(); 107 $balises = extraire_balises($head,'link'); 108 $files = array(); 109 foreach ($balises as $s){ 110 if (extraire_attribut($s, 'rel') === 'stylesheet' 111 AND (!($type = extraire_attribut($s, 'type')) OR $type == 'text/css') 112 AND $src = extraire_attribut($s, 'href') 113 // format .less.css ou .less avec un eventuel timestamp ?123456 114 AND preg_match(",\.(less\.css|less)(\?\d+)?$,",$src) 115 AND $src = preg_replace(",\?\d+$,","",$src) 116 AND $src = preg_replace(",^$url_base,",_DIR_RACINE,$src) 117 AND file_exists($src)) 118 $files[$s] = $src; 119 } 120 121 if (!count($files)) 122 return $head; 123 124 foreach($files as $s=>$lessfile){ 125 $cssfile = less_css($lessfile); 126 $m = @filemtime($cssfile); 127 $s2 = inserer_attribut($s,"href","$cssfile?$m"); 128 $head = str_replace($s, $s2, $head); 129 } 130 131 return $head; 132 } 22 133 ?> -
_plugins_/less-css/trunk/plugin.xml
r45518 r48764 1 1 <plugin> 2 <nom>LESS pip</nom>2 <nom>LESS CSS</nom> 3 3 <auteur>Jean-Baptiste Bourgoin</auteur> 4 4 <licence>MIT</licence> 5 <version>0.2</version> 5 <version>0.3.0</version> 6 <etat>test</etat> 7 <icon>img/lesscss-32.png</icon> 6 8 <description> 7 9 Intégration de l'implémentation php de LESS dans SPIP. … … 11 13 l'écriture de feuilles de style complexes. 12 14 13 Ce plugin créé les fichiers css correspondant à vos fichiers less dans le répertoire où ces derniers ont été créés. 14 15 Ce plugin compile à la volée tous les fichiers .less.css ou .less du squelette qui contient #INSERT_HEAD. 16 Vous pouvez aussi forcer la compilation d'un fichier ou d'une feuille de style calculée à l'aide 17 du filtre less_css 15 18 </description> 16 <etat>dev</etat> 17 <prefix>lesspip</prefix> 18 <icon>img/lesspip.png</icon> 19 <prefix>lesscss</prefix> 19 20 <lien>http://leafo.net/lessphp/</lien> 20 21 <categorie>outil</categorie> 21 <fonctions>lessphp/gen_styles.php</fonctions> 22 <fonctions>lesscss_fonctions.php</fonctions> 23 <pipeline> 24 <nom>insert_head</nom> 25 </pipeline> 22 26 </plugin>
Note: See TracChangeset
for help on using the changeset viewer.