【问题标题】:Jekyll plugin change charactersJekyll 插件更改字符
【发布时间】:2019-11-03 20:45:49
【问题描述】:

我制作了我的 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:如果我手动将 &amp;lt; 替换为 &lt; 并将 &amp;gt; 替换为 &gt;,则效果很好。

【问题讨论】:

    标签: ruby jekyll liquid jekyll-extensions


    【解决方案1】:

    从技术上讲,由空格分隔的每一行都会呈现为 HTML &lt;p&gt; 元素。

    为避免自动生成&lt;p&gt; 标记,请在&lt;div> 中显式换行:

    <div>
      aaaaaaaaaaa  {% spoiler secret text %} bbbbbbbbbbbb
    </div>
    

    【讨论】:

    • 谢谢,这行得通。但是,有没有另一种方法可以在插件中做到这一点,并在没有 html 标签的情况下保持 markdown 干净?
    • 其实没有。原因是 Jekyll 的 Markdown 转换器(kramdown 的包装器)在当前文档中的所有 Liquid 完成渲染后运行。当kramdown 遇到一个被空格包围的独立文本时,它会将文本呈现为 HTML &lt;p&gt; 标签。如果你想完全通过插件处理这个问题,你将不得不放弃使用 Liquid Tag,而是依靠字符串替换post_render 钩子。您可能需要查看jemoji 插件的源代码以供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多