Pergunta

No meu modelo Rails, eu gostaria de realizar HTML final para esse efeito usando HAML:

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

O modelo que chega perto:

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

Você pode, no entanto, nota que esta produz um espaço entre a ligação ea vírgula. Existe alguma maneira prática para evitar este espaço em branco? Eu sei que há sintaxe para remover espaço em branco em torno de tags, mas pode ser aplicada esta mesma sintaxe para texto apenas? Eu realmente não gosto da solução de marcação extra para fazer isso.

Foi útil?

Solução

A melhor maneira de fazer isso foi introduzida através de ajudantes de Haml:

??envolvente

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

sucesso :

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

preceder :

= precede '*' do
  %span.small Not really
produz:
*<span class='small'>Not really</span>

Para responder à pergunta original:

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

Outras dicas

Você também pode fazer isso usando modificador "espaços em branco guarnição" da Haml. Inserindo > após uma declaração Haml irá evitar espaços em branco de ser adicionado à sua volta:

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

produz:

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

No entanto, como você pode ver, o modificador > também retira o espaço em branco na frente do link, removendo o espaço desejado entre as palavras e o link. Eu ainda não descobri uma maneira muito redor isso ainda, exceto para adicionar &nbsp; para o final do "Eu vou primeiro", assim:

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

O que finalmente produz a saída desejada, sem muita interpolação de difícil leitura:

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

Tudo bem, aqui está a solução que eu estou de se estabelecer em:

Helper

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

Ver

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

Dessa forma, espaços em branco são excluídos por padrão, mas ainda posso incluí-lo explicitamente com um "\ n" linha. (Precisa do duplo barra invertida porque senão HAML interpreta como uma nova linha real.) Deixe-me saber se há uma opção melhor lá fora!

Você pode usar o 'sintaxe aligator' de HAML

Whitespace Remoção:> e <

e Irá remover todos os espaços em torno de um tag, enquanto enfrenta fora da tag e come o espaço em branco do lado de fora, e

http://haml.info/docs/yardoc/file.REFERENCE. html # whitespace_removal__and_

Uma vez abordagem que eu tomei a este tipo de coisa é usar interpolação de string:

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

Eu não gosto da aparência da cadeia literal da interpolação, mas eu usei-o com cordas tenham sido previamente declarados ou seqüências geradas dinamicamente antes.

Você pode fazer isso para manter o espaço à esquerda:

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

O espaço é nas citações.

Apesar de não ser bem documentado, este é claramente conseguido usando HAML espaços de preservação (>) combinado com um espaço ASCII (& # 32;), e não com os ajudantes:

%a{:href=>'/home'}> Home link
,&#32; 
%a{:href=>'/page'} Next link

Isto irá produzir o que você quer:

<a href='/home'>Anchor text</a>,&#32;
<a href='/page'>More text</a>

Mas eu concordo, HAML precisa chegar a uma maneira melhor de fazer isso, pois não adicionar caracteres ASCII desnecessários para a página (mas ainda é mais eficiente do que usar ajudantes).

Há o suporte de ângulo "espaços em branco mastigando" sintaxe, caso contrário, escrever um método auxiliar para ele.

me deparei com um problema semelhante e encontrei este, então eu pensei que eu ia postar uma outra solução que não requer um método auxiliar. Use Rubi interpolação # {} para embrulhar o link e se afirmações:

I will first 
#{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}

Isso funciona em 3.0.18, ele também pode funcionar em versões anteriores.

No entanto, outra opção que eu usei no passado:

- if @condition
  %span> , then some more text after the link.

Você também pode sempre fazer:

= link_to url_path do 
  = ["part_1", "part_2"].join(", ")

A solução que eu fui trabalhar é:

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

Você pode usar =, embora = é usada para a saída do resultado de código Rails, mas aqui ele vai servidor o efeito.

O preservar função funcionou para mim

.white-space-pre= preserve "TEXT"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top