Плагин Jekyll меняет символы

Я сделал свой плагин onw jekyll, который дает специальный текст css (спойлер).

Это мой код:

class Spoiler < Liquid::Tag
   def initialize(tag_name, input, tokens)
     super
     @input = input
   end

   def render(context)
     output = "<div class='spoiler'>" + @input + "<div>"
     return  output;
   end

end
Liquid::Template.register_tag('spoiler', Spoiler)                                 

Вот пример того, как я хочу использовать его в своих сообщениях по уценке:

---
layout: post
title:  "testing file"
date:   2019-09-25
category: article
---

aaaaaaaaaaa  {% spoiler secret text %} bbbbbbbbbbbb

но вот как выглядит страница:

снимок экрана моего сайта

Когда я смотрю на сгенерированный исходный код, текст выглядит так:

<p>aaaaaaa &lt;div class='spoiler'&gt;secret text &lt;/div&gt; bbbbbbbb</p>

Что мне сделать, чтобы плагин jekyll генерировал элемент html вместо текста?

PS: Если я вручную заменю &lt; на < и &gt; на >, все будет нормально.


person Jan Černý    schedule 03.11.2019    source источник


Ответы (1)


Технически каждая строка, разделенная пробелом, преобразуется в элемент HTML <p>.

Чтобы избежать автоматического создания тегов <p>, явно заключите строки в <div>:

<div>
  aaaaaaaaaaa  {% spoiler secret text %} bbbbbbbbbbbb
</div>
person ashmaroli    schedule 04.11.2019
comment
Спасибо, это работает. Но есть ли другой способ сделать это в плагине и сохранить уценку чистой без тегов html? - person Jan Černý; 04.11.2019
comment
Вообще-то, нет. Причина в том, что конвертер Markdown Jekyll (оболочка для kramdown) запускается после того, как все Liquid в текущем документе завершили рендеринг. Когда kramdown встречает отдельный текст, окруженный пробелами, он преобразует этот текст в HTML-теги <p>. Если вы хотите обрабатывать это полностью с помощью плагинов, вам придется отказаться с помощью Liquid Tag и вместо этого полагаться на подстановку строк с помощью ловушки post_render. Вы можете посмотреть исходный код плагина jemoji для справки. - person ashmaroli; 04.11.2019