Demandes d'évolutions : [Résolu] L'utilisation de @charset fait bugger la génération de la feuille de style
-
17/01/2013 16:36
Bonjour,
j'utilise le framework compass (sass) pour la création de mes feuilles de styles.
Un des modules ajoute automatiquement la directive suivante dans mon fichier css compilé par compass.@charset "utf-8";
Le problème c'est que cette directive n'est pas géré lors de la compilation du fichier CSS par Change du coup j'ai une exception qui me retourne le message suivant au sein de mon fichier compilé :@charset, @namespace and @phonetic-alphabet are not handeled.
Ca se passe au niveau du fichier :framework\f_web\css\CSSStylesheet.php
et plus précisémment ligne 204 :// handle @-rules // Rules like @xxx ...; //@charset, @namespace, @phonetic-alphabet // -> These @-rules are not very used, so we choose to ignore them here: using these rules will cause an error! else if ($cssText[$i] === '@' && $inSelector && !$inComment && (substr($cssText, $i, 10) === '@namespace' || substr($cssText, $i, 18) === '@phonetic-alphabet')) { throw new Exception('@charset, @namespace and @phonetic-alphabet are not handeled.'); }
Le pire, c'est que je n'ai même pas besoin de cette directive au final... la supprimer permet de régler le problème...
Est-il envisageable d'ignorer ces instructions en les supprimant du fichier final, plutôt que de bloquer la compilation de l'intégralité de la feuille de style ?
Tout en laissant une trace dans les logs pour en informer le développeur qui souhaite vraiment avoir cette directive ?
Si oui, il suffirait de déplacer ce sujet en demande d'évolution et si possible de m'aiguiller sur la marche à suivre pour que je puisse l'implémenter ASAP...
Merci d'avance !
Développe sous linux Ubuntu 12.04 LTS Desktop
Projet ecommerce core 3.6.7 -
17/01/2013 17:42
Effectivement, ces règles ne sont pas gérées pour diverses raisons.
En particulier, concernant le charset, c'est a priori une règle très peu utilisée et qui doit nécessairement se retrouver en première ligne de la feuille de style générée. Or comme nous fusionnons les différentes feuilles, cela n'est pas trivial à tester.
Mais effectivement, simplement les ignorer (en loguant un message en mode warn) plutôt que lancer une exception semble une meilleure solution, surtout si sass en génère une par défaut...
La modif que je viens de tester et que j'archiverai dans la 3.6.4 consiste à remplacer les lignes que vous avez citées par :// handle @-rules // Rules like @xxx ...; //@charset, @namespace, @phonetic-alphabet // -> These @-rules are not very used, so we choose to ignore them here: using these rules will cause an error! else if ($cssText[$i] === '@' && $inSelector && !$inComment && (substr($cssText, $i, 8) === '@charset' || substr($cssText, $i, 10) === '@namespace' || substr($cssText, $i, 18) === '@phonetic-alphabet')) { $idx = strpos($cssText, ";", $i); if (!$idx) { throw new Exception('Invalid directive @charset, @namespace and @phonetic-alphabet syntax'); } $directive = substr($cssText, $i, $idx - $i); Framework::warn(__METHOD__ . ' @charset, @namespace and @phonetic-alphabet are not handeled. The following rule was removed: ' . $directive . ';'); $i = $idx; }
Ainsi le seul cas où on lancera une exception c'est si la règle ne se termine pas par un point-virgule et est donc mal formée. Dans les autres cas, on se contentera de loguer sa suppression. -
18/01/2013 09:08
Mis en œuvre dans la future version 3.6.4 du framework, commit fce7065a4365f03ea4e8b9fbe36fe3a458cc3c3c -
au top ! merci
Développe sous linux Ubuntu 12.04 LTS Desktop
Projet ecommerce core 3.6.7
Merci de prendre connaissance et de respecter les règles des forums.