Du code propre sur mon CMS!

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Yop! je me suis pas mal pris la tête pour toruver comment faire ça alors, pour ceux qui savent pas déjà le faire, je laisse une trace.

Donc, j'ai fais ça sur drupal avec le thème par défaut "garland", couleur personalisée, en desactivant le cache pour plus de simplicité. Mais ça suffit pas avec ce thème, je crois que c'est à cause la couleur, ça génère une css temporaire donc faut recharger le thème lui-même pour voire les modifs. Pour ça, je vais dans la configuration du thème et je fais 'enregistrer la configuration'

Voci quel était mon problème : il me fallait afficher dans des balises de code le résultat de commandes entrées dans des terminaux GNU/Linux. Ces lignes de codes sont souvent longues, le résultat tient sur plusieurs lignes et est souvent identé, comme le résultat de la commande pstree, qui affiche l'arbres des processus du système.

Or, le html bouffe les espaces inutiles. La solution la plus connues est d'ajouter le code des espaces insécables mais cela suscite deux difficultés majeures: la première étant qu'il faut les ajouter à la main et ne pas se planter dans le nombre d'espaces à rajouter. La seconde est que quand on travaille en code, on a les poils qui se hérissent devant un code aussi moche que ce qui en résulte!

<

p>J'ai donc fouillé le web et ai fini par trouver la règle css à inclure dans les balises de code:
white-space: pre;

Vous connaissez la balise pre, certainement, elle permet de prendre en compte les saut de ligne. Ici, c'est le meme principe appliqué aux "whites-spaces".

Est alors apparu un nouveau soucis, celui des polices. J'ai eu beau mettre mes code bien face à face dans l'éditeur, pour que tout soit identé correctement, le résultat était décallé. C'est parceque les polices qu'on utilise sont jolies, les 'i' par exemple, prennent moins de place que les 'w' parceque c'est plus agréable à l'oeil. Il existe néanmoins des polices qui ont une taille fixe pour chaque lettre, ce qui évite les décallages. Ce sont les polices à chasse fixe, j'ai choisi monospace:

font-family:monospace;

Mais c'était pas fini, j'avais toujours le même décallage, en un peu moins prononcé, ce qui prouvait bien que ce que j'avais fait avait eu un résultat positif. La cause de ce problème était tout simplement que la police utilisée par mon éditeur n'était pas à chasse fixe. Merci à l'extension firebug de firefox qui m'a permis de trouver l'attribut css responsable et d'employer monospace également pour l'éditeur de code:

textarea, select {
  font-family: monospace;
  color: #494949;
}

C'était donc presque prêt, me restait à rajouter quelques touches personnelles, pour avoir un affichage de type matrix (hé oui, on est geek ou on l'est pas!) avec une chouette bordure:

code {
   white-space: pre;
  display:block;
background-color:black;
    color:green;
   font-family:monospace;
/*margin:0.5%;*/
   padding:1%;
    line-height:100%;
        border-style:ridge;
}

Les autre élement importants sont : le 'display:block', qui permet d'avoir chaque code sur une ligne dédiée plutôt que dans le texte si la balise code est incluse dans un paragraphe et surtout d'avoir un fond de couleur uniforme pour les codes de plusieurs lignes; Le 'padding:1%', sinon, le bord du cadre coïncide avec le bord des caractères, c'est moche; le line-height est là pour contre carrer l'héritage de mes css, qui le fixe à 170%, ce qui a pour effet d'espacer chaque ligne de code outre-mesure (on croirait des sauts de deux lignes).

<

p>Ha, oui, j'oubliais, le résultat, à cette adresse

Version de Drupal : 

Ha oui, on module comme ça, c'est certainement plus propre que de modifier les css à la main! Puis y'a plus de possibilités, je vasi l'essayer dès que j'aurais fini de faire mes essais de thèmes.

Mais bon, l'astuce est plus générale, pas vraiment spécifique à drupal.

EDIT: petit ajout, j'ai essayé geshi mais il ne me convient pas vraiment, y'a que la fonction de numérotation des lignes qui me semble utilie dans mon cas mais j'ai un impératif personnel: Il faut que le code html de mes pages soit réutilisable tel quel sur d'autre sites web en restant propre, si je commence à rajouter des attributs exotiques dans les balises, je vais pas finir. Donc, je préfère, quand c'est nécessaire, numéroter les lignes à la main.

ça reste quand même un module intéressant, pas adapté à mon cas seulement.

Sinon, j'ai rajouté une ligne à ma css:

overflow:auto

Parceque je me suis apperçu, en testant le site sur un écran plus réduit que le mien (le 16/10, c'est cool mais pas pour tester les sites web!) que de cette manière-là, les codes sortaient du cadre sans s'occuper de savoir s'ils sont bien où il faut. à noter aussi, que l'argument whites-pace:pre-wrap a aussi un comportement bizarre pour une taille d'affichage réduite en largeur, les retours à la ligne forcés par la taille du bloc ne sont pas l'identés, ce qui est gênant.

ça donne le code qui suit, jusqu'à révision:

code {
   white-space: pre;
  display:block;
background-color:black;
    color:green;
   font-family:monospace;
padding:1%;
    line-height:100%;
  border-style:ridge;
    overflow:auto;
}

Petite note personnelle à l'usage des webmestre: Ce serait certainement une bonne idée d'activer le support fullhtml pour les contributions, parceque pour monter ce que donnent les modifs sur des styles (dans mon exemple), rien ne vaut la possibilité d'ajouter une balise div style="" comme celle-la:

<

div style="white-space: pre;display:block;background-color:black;color:green;font-family:monospace;padding:1%;line-height:100%;border-style:ridge;overflow:auto;">test

Le résultat est pas très convainquant, si?