Aller charette (etait : link_to_remote et layout)

Guillaume :

“Pourquoi diable est-ce qu’il ajoute un ‘\n’ alors qu’on n’a pas mis
de <%= ?”

C’est nous qui rajoutons les retours chariots et là , on demande à ERb
d’en sucrer un.

  • Avertissement : si vous ne vous préoccupez pas de savoir si
    le HTML que vous générez est mal indenté ou contient trop de lignes
    blanches, ne lisez pas ce mail.

  • Terminologie

  • j’appelle ERb chunks, des trucs comme ça <% … %>,
    <%= … %>, etc. Erb code chunk ceci : <% … %>,
    Erb string chunk cela <%= … %>.

  • J’utilise “retour chariot” comme synonyme de “newline”, au risque
    de choquer les puristes.

  • Avertissement n°2

Dans mes explications, je ne vais pas rentrer dans les détails de
la machinerie d’ERb, pour que ce soit plus clair, déjà que c’est
pas gagné que ce soit clair.

  • Exemples de base
  • charette.rhtml:
    hello
    world

  • charette.rhtml “version explicite”
    hello (+ \n)
    world

Il y a deux lignes, car on a mis un retour chariot entre ‘hello’ et
‘world’.
(dans toute la suite, je suppose que je ne mets pas de newlines tout Ã
la fin de mon fichier, ni même de ‘whitespaces’, ça finit toujours
par world)

  • Avec des chunks Erb
  • charette.rhtml avec un ERb code chunk :
    hello
    <% true %>
    world

Sous forme de chaîne de caractères, ce fichier sera vu :
“hello\n<% true %>\nworld”

2 retours chariot => 3 lignes.

Comme mon ERb ne fait rien, le fichier html généré sous forme
de string, sera sous la forme “hello\n\nworld”. Dans mon navigateur,
j’aurai “hello world”.

Remarque n°1, on génère du HTML, donc une suite d’espaces,
de retours chariot ou tabulations ne sera représentée à l’écran
que par une espace.

Si on générait d’autres formats de fichier (exemple texte), alors
les retours chariot pourraient être significatifs.

  • charette.rhtml avec un ERb string chunk :
    hello
    <% “my” %>
    world

3 lignes, le html => “hello\nmy\nworld”, 2 newlines donc 3 lignes,
à l’écran “hello my world”.

  • charette.rhtml avec un ERb code chunk sur plusieurs lignes:
    hello
    <%
    true
    %>
    world

Le “\ntrue\n” sera géré par ERb (et donc par Rails), donc
“hello\n<%\ntrue\n%>\nworld” genère en html “hello\n\nworld”,
2 retours chariots, soit 3 lignes.
mais à l’écran, toujours “hello world”, HTML oblige.

Pour un ERb string chunk, ce qui compte, c’est de savoir si l’objet
obtenu à la fin, une fois converti en String, contient des newlines.
(si on a déjà une chaîne, la conversion ne fait évidemment rien)

<%= “hello\n” %> -> génère un retour chariot

Mais (Erb string chunk sur plusieurs lignes)
<%= if choix == true
“hello”
else
“goodbye”
end %>

… génère “hello” ou “goodbye”, selon la condition, chaînes qui
n’ont pas de \n.

  • L’ERb code chunk avec un moins à la fin : <% -%>

Rails, par défaut, utilise ERb dans un mode qui prend en considération
la présence du moins.
Quand on spécifie -%>, on dit à ERb : “si tu es en fin de ligne, ie.
ce chunk est suivi par un retour chariot, sucre-le”.

  • charette.rhtml:
    hello
    <% true -%>
    world

=> “hello\n<% true -%>\nworld” => “hello\nworld” (2 lignes)
=> “hello world” à l’écran.

  • charette.rhtml:
    hello
    brave <% true -%>
    world

html : “hello\nbrave world”
browser : “hello brave world”

  • charette.rhtml:
    hello
    <% true -%>brave
    world

html : “hello\nbrave\nworld”
butineur : “hello brave world”

  • charette.rhtml:
    hello
    brave <% true -%>new
    world

(ici dans les deux derniers exemples, l’Erb chunk code n’est pas suivi
par \n, donc le - ne sert à rien)

html : “hello\nbrave new\nworld”
navigateur : “hello brave new world”

Après, je peux faire des variations en mettant plusieurs Erb chunks
sur une même ligne, mais je ne vais pas faire toutes les combinaisons
possibles et imaginables non plus !

  • L’ERb code chunk avec un moins au début : <%- %>

C’est moins connu, on peut virer les espaces ou tabulations en début
de ligne (s’il n’y a que ça) avec <%-

  • charette.rhtml:
    hello
    <%- true %>world

=> “hello\nworld”

  • charette.rhtml:
    hello
    <%- true %>
    world

=> “hello\n\nworld”
(déjà en début de ligne !, donc - ne sert à rien)

  • charette.rhtml:
    hello
    brave <%- true%>world

=> “hello\n brave world”
(ici, le - ne sert à rien)

  • Remarque n°2 : on peut utiliser des Erb code chunks
    avec des doubles moins.
<%- for colonne in colonnes -%> <%- end -%>
....
  • Remarque n°3 : <%= … -%> est possible, mais pas forcément
    ce qu’on recherche.

EN RÉSUMÉ
-%> essaie de virer le newline juste après.
<%- essaie de virer les espaces/tabulations juste avant.
<% ne se préoccupe pas de ce qui précède.
%> ne se préoccupe pas de ce qui suit.

Pouet.

 -- Jean-François.

Jean-François a écrit :

[snip]

EN RÉSUMÉ
-%> essaie de virer le newline juste après.
<%- essaie de virer les espaces/tabulations juste avant.
<% ne se préoccupe pas de ce qui précède.
%> ne se préoccupe pas de ce qui suit.

Ah ben personnellement je trouve ça clair :wink: Je te rassure, j’ai trouvé
le reste de ton explication claire (en tout cas j’ai compris quelque
chose) et je ne connaissais pas le coup du <%-.

C’est nous qui rajoutons les retours chariots et là , on demande à ERb
d’en sucrer un.

ouah !!! quelle explication !!!
et pas de doutes : c’est très clair !

merci beaucoup (((-:

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723