96 votes

Haml : Contrôler les espaces autour du texte

Dans mon modèle Rails, j'aimerais réaliser le HTML final à cet effet en utilisant HAML :

I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met

Le modèle qui s'en rapproche le plus :

I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
  , then render this half of the sentence if a condition is met

Vous pouvez toutefois noter que cela produit un espace entre le lien et la virgule. Existe-t-il un moyen pratique d'éviter cet espace blanc ? Je sais qu'il existe une syntaxe pour supprimer l'espace autour des balises, mais cette même syntaxe peut-elle être appliquée au texte ? Je n'aime vraiment pas la solution qui consiste à ajouter des balises supplémentaires pour y parvenir.

209voto

Ryan Heneise Points 3435

Une meilleure façon de procéder a été introduite grâce aux aides de Haml :

entourer

= surround '(', ')' do
  %a{:href => "food"} chicken

Produit :

(<a href='food'>chicken</a>)

réussir :

click
= succeed '.' do
  %a{:href=>"thing"} here

Produit :

click
<a href='thing'>here</a>.

précéder :

= precede '*' do
  %span.small Not really

Produit :

*<span class='small'>Not really</span>

Pour répondre à la question initiale :

I will first
= succeed ',' do
  = link_to 'link somewhere', 'http://example.com'
- if @condition
  then render this half of the sentence if a condition is met

Produit :

I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met

40voto

Ryan Heneise Points 3435

Vous pouvez également utiliser le modificateur "trim whitespace" de Haml. Insérer > après une déclaration Haml empêchera l'ajout d'espaces blancs autour de celle-ci :

I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

produit :

I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met

Cependant, comme vous pouvez le constater, la > supprime également l'espace devant le lien, supprimant ainsi l'espace souhaité entre les mots et le lien. Je n'ai pas encore trouvé de moyen agréable de contourner ce problème, si ce n'est d'ajouter &nbsp; à la fin de "Je commencerai", comme suit :

I will first&nbsp;
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

Ce qui permet enfin d'obtenir le résultat souhaité sans avoir recours à de nombreuses interpolations difficiles à lire :

I will first&nbsp;<span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met

12voto

Matchu Points 37755

D'accord, voici la solution que je retiens :

Aide

def one_line(&block)
  haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")
end

Voir

I will first
- one_line do
  = link_to 'link somewhere', 'http://example.com'
  - if @condition
    , then render this half of the sentence
    \\n
    if a condition is met

De cette façon, les espaces blancs sont exclus par défaut, mais je peux toujours les inclure explicitement avec un " \n ". (Elle a besoin de la double barre oblique inverse, sinon HAML l'interprète comme une véritable nouvelle ligne). Faites-moi savoir s'il existe une meilleure option !

5voto

Chuck Points 138930

Une approche que j'ai adoptée pour ce genre de choses consiste à utiliser l'interpolation de chaînes de caractères :

I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}

Je n'aime pas l'aspect de la chaîne littérale dans l'interpolation, mais je l'ai déjà utilisé avec des chaînes déclarées précédemment ou des chaînes générées dynamiquement.

5voto

thethinman Points 309

Vous pouvez le faire pour conserver l'espace de tête :

%a{:href => 'http://example.com'}>= ' link somewhere'

L'espace se trouve entre les guillemets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X