On a des fichiers CSS (entres autres) qui contiennent des URLs vers des ressources (fichiers) fournies par Dotclear (ou des plugins tiers).
Ça peut être des images (pour le fond par exemple), des URLs pointant vers des polices de caractères, etc.
Or l’accès à ces ressources ne peut se faire directement depuis l’URL du blog (ou de l’administration), parce que les chemins réels sont dynamiques d’une installation à une autre.
On a donc un URL handler qui gère ce genre de demandes, en vérifiant au passage deux ou trois bricoles pour ne pas servir n’importe quoi :-)
Sauf que les URLs utilisées peuvent varier, comme en ce moment où on casse/reconstruit toute la hiérarchie du code de Dotclear.
Par exemple, ceci (avec la 2.26) :
@font-face {
font-family: 'opendys';
src: url('index.php?pf=a11yConfig/lib/css/fonts/opendyslexic-regular-webfont.woff2') format('woff2'),
url('index.php?pf=a11yConfig/lib/css/fonts/opendyslexic-regular-webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
}
body:not(.a42-ac-inv-contrast):not(.a42-ac-high-contrast):not(.a42-ac-text-img) #accessconfig.a11yc-vd button {
background-image: url(index.php?pf=a11yConfig/img/visual-deficiency.svg), none;
}
body:not(.a42-ac-inv-contrast):not(.a42-ac-high-contrast):not(.a42-ac-text-img) #accessconfig.a11yc-wc button {
background-image: url(index.php?pf=a11yConfig/img/wheelchair.svg), none;
}
Deviendra cela (avec la 2.27) :
@font-face {
font-family: 'opendys';
src: url('index.php?process=Home&pf==a11yConfig/lib/css/fonts/opendyslexic-regular-webfont.woff2') format('woff2'),
url('index.php?process=Home&pf==a11yConfig/lib/css/fonts/opendyslexic-regular-webfont.woff') format('woff');
font-weight: normal;
font-style: normal;
}
body:not(.a42-ac-inv-contrast):not(.a42-ac-high-contrast):not(.a42-ac-text-img) #accessconfig.a11yc-vd button {
background-image: url(index.php?process=Home&pf==a11yConfig/img/visual-deficiency.svg), none;
}
body:not(.a42-ac-inv-contrast):not(.a42-ac-high-contrast):not(.a42-ac-text-img) #accessconfig.a11yc-wc button {
background-image: url(index.php?process=Home&pf==a11yConfig/img/wheelchair.svg), none;
}
En détail url(index.php?pf=
devient url(index.php?process=Home&pf=
.
J’avais pensé à :
- utiliser des variables CSS initialisées avec un script JS, lui-même récupérant les infos utiles via un behavior PHP, mais il y a des cas où ça arrive trop tard (comprendre après le chargement du fichier CSS)
- modifier à la volée le contenu du fichier servi, mais ça va ralentir passablement les délais de réponse
- gérer ce genre de fichier comme des fichiers PHP, ce qui permettrait d’insérer du code pour récupérer dynamiquement les URLs, sauf que c’est une jolie porte d’entrée pas trop sécurisée.
Bref, je me demande si on ne va pas simplement basculer les URLs sous leurs nouvelles formes dans les fichiers CSS vu que ça ne risque pas de changer tous les jours…
Suffit de faire un remplacement avec son éditeur de code favori, à la nuance près que ça ne sera compatible qu’avec la prochaine version de Dotclear (2.27).
PS : Peut-être qu’une nouvelle idée me viendra dans quelques jours, mois, années… Qui sait !
1 De manu -
Je réfléchis à voix haute (c’est moche), mais est-ce que ça ne serait pas préférable et plus simple d’avoir une routine d’installation (des plugins et du reste) qui installe les ressources (CSS, js) dans un répertoire statique dont le chemin serait standardisé ? Là ça ressemble à une usine à gaz, un peu, je trouve.
2 De Franck -
C’est une idée en effet, à condition que les ressources, ou plutôt les chemins d’accès à celles-ci restent simples. Il y a quelques plugins pour lesquels ça pourrait être un poil plus compliqué.
Je vais y réfléchir (sachant qu’il faut qu’on conserve un rétro-compatibilité avec les installations existantes)…