Я намагаюся кодувати плагін jekyll, щоб додати деякі теги для обробки деяких блоків із вкладками, оскільки на моєму сайті буде багато сторінок, що мають такий тип блоків.
Я намагаюся використати цей код:
{% tabs %}
{% tab tab-1 %}
Content of tab #1
{% endtab %}
{% tab tab-2 %}
Content of tab #2
{% endtab %}
{% tab tab-3 %}
Content of tab #3
{% endtab %}
{% endtabs %}
Надання цього HTML-коду:
<div class="tab-content">
<div class="tab-pane" id="tab-1">
Content of tab #1
</div>
<div class="tab-pane" id="tab-2">
Content of tab #2
</div>
<div class="tab-pane" id="tab-3">
Content of tab #3
</div>
</div>
Ось моя плагіна:
module Tags
class TabsBlock < Liquid::Block
def render(context)
"<div class="tab-content">" + super + "</div>"
end
end
class TabBlock < Liquid::Block
def initialize(tag_name, tab, tokens)
super
@tab = tab.strip
end
def render(context)
return "" if @tab.empty?
site = context.registers[:site]
converter = site.getConverterImpl(Jekyll::Converters::Markdown)
content = super.strip
content = converter.convert(content)
"<div id="" + @tab + "" class="tab-pane">" + content + "</div>"
end
end
end
Liquid::Template.register_tag("tabs", Tags::TabsBlock)
Liquid::Template.register_tag("tab", Tags::TabBlock)
Коли я намагаюся, розмітка не є правильною. Очікується лише розмітка першої вкладки, інші вкладки передаються за допомогою підсвічування коду, а я отримую
<div class="highlight">
<pre><code class="text language-text" data-lang="text"><div id="tab-1" class="tab-pane"><p>Content of tab #1</p></code></pre>
</div>
Я поняття не маю, чому, і я не знаю багато в Ruby / Liquid, щоб впоратися з ним сам :). Будь-яка ідея?
Дякую!
Відповіді:
2 для відповіді № 1Я не знаю, чому, але Джекіл або Рідкіс вважали, що, з огляду на поглиблення, це був якийсь код для високого рівня.
Я вирішив цю проблему, знову скинувши код конвертованої версії, щоб видалити розриви рядків і видаливши деякі відступи:
class TabBlock < Liquid::Block
def initialize(tag_name, tab, tokens)
super
@tab = tab.strip
end
def render(context)
return "" if @tab.empty?
site = context.registers[:site]
converter = site.getConverterImpl(Jekyll::Converters::Markdown)
lines = super.rstrip.split(/rn|r|n/).select { |line| line.size > 0 }
indentation = lines.map do |line|
match = line.match(/^(s+)[^s]+/)
match ? match[1].size : 0
end
indentation = indentation.min
content = indentation ? super.gsub(/^#{" |t" * indentation}/, "") : super
content = converter.convert(content)
content = content.strip # Strip again to avoid "n"
"<div id="" + @tab + "" class="tab-pane">" + content + "</div>"
end
end
1 для відповіді № 2
Це фантастично. Для всіх, хто стикається з цим:
змінити:
getConverterImpl
до
find_converter_instance