2014-09-18 3 views
0

Почему Kramdown's отключение автоматического разбора парсера при работе над текстовым полем gemojified?Gemoji разбивает HTML-код Kramdown

Для [Test](http://google.com "Test") я получаю:

<a href="http://google.com &quot;Test&quot;">Test</a> 

вместо ожидаемого выхода:

<a href="http://google.com" title="Test">Test</a> 

Живого приложение: http://runnable.com/VAL1VuMjrGFur2yx/forem-gemoji-kramdown (см Test поста)

application_helper.rb:

def add_emojify_and_kramdown(text) 
    raw(Kramdown::Document.new(emojify(text)).to_html) 
end 

[...snip...] 

def emojify(text) 
    h(text).to_str.gsub(/:([a-z0-9\+\-_]+):/) do |match| 

    if emoji = Emoji.find_by_alias($1) 
     '![' + $1 + '](' + asset_path("emoji/#{emoji.image_filename}") + ')' 
    else 
     match 
    end 
    end 
end 

Некоторые дополнительная информация:

  • raw(Kramdown::Document.new(text).to_html) возвращает ожидаемый выход, но без Gemoji
  • raw(emojify(text)) ничего не меняет видя, как text не содержит Emojis
  • raw(emojify(Kramdown::Document.new(text).to_html)) возвращает ожидаемый результат, но, как необработанный HTML

ответ

1

Первое, что ваш emojify способ делает это h(text), что HTML избегает ввода, преобразования

[Test](http://google.com "Test") 

в

[Test](http://google.com &quot;Test&quot;) 

Kramdown затем работает на этой строке, и, поскольку она больше не содержит цитаты не отмечает, что предполагает, что все содержимое (...) является URL, производство:

<a href="http://google.com &quot;Test&quot;">Test</a> 

чтобы заставить его работать вам просто нужно бросить вызов h: text.gsub(.... Вероятно, вам придется подумать о том, как управлять безопасностью строк, если это внешние данные.

+0

Отличный улов! Большое спасибо :) –

+0

Кстати, человек, любой шанс, что вы наняли для короткого концерта? –

Смежные вопросы