mirror of
https://gitee.com/huanghongxun/HMCL-docs.git
synced 2025-12-16 01:32:39 +08:00
支持 GitHub 风格的 Markdown 提示块(Alert)语法 (#344)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
e3717d0ebe
commit
077b92be1d
15
_data/plugins/auto_alert.yml
Normal file
15
_data/plugins/auto_alert.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
note:
|
||||||
|
title: 注意
|
||||||
|
class_name: notice--info
|
||||||
|
tip:
|
||||||
|
title: 提示
|
||||||
|
class_name: notice--success
|
||||||
|
important:
|
||||||
|
title: 重要
|
||||||
|
class_name: notice--primary
|
||||||
|
warning:
|
||||||
|
title: 警告
|
||||||
|
class_name: notice--warning
|
||||||
|
caution:
|
||||||
|
title: 谨慎
|
||||||
|
class_name: notice--danger
|
||||||
45
_plugins/auto-alert.rb
Normal file
45
_plugins/auto-alert.rb
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
require "nokogiri"
|
||||||
|
|
||||||
|
Jekyll::Hooks.register [:pages, :documents], :post_convert do |doc|
|
||||||
|
next unless doc.output_ext == ".html"
|
||||||
|
site = doc.site
|
||||||
|
next unless site.data["plugins"]
|
||||||
|
alert_type = site.data["plugins"]["auto_alert"]
|
||||||
|
next unless alert_type
|
||||||
|
|
||||||
|
fragment = Nokogiri::HTML::DocumentFragment.parse(doc.content)
|
||||||
|
# 遍历 HTML 中的所有 blockquote 标签
|
||||||
|
fragment.css("blockquote").each do |item|
|
||||||
|
# 找出第一个子节点,用于判断是否含有 [!type] 标记
|
||||||
|
first_child = item.at_css("*:first-child")
|
||||||
|
next unless first_child
|
||||||
|
next unless first_child.name == "p"
|
||||||
|
|
||||||
|
text = first_child.text.downcase
|
||||||
|
|
||||||
|
# 遍历所有 alert 类型
|
||||||
|
alert_type.each do |type, data|
|
||||||
|
# 情况一:完整匹配 [!type] 形式 <p>[!NOTE]</p>
|
||||||
|
if text == "[!#{type}]"
|
||||||
|
# 将 alert 类型对应的 class 加入 blockquote
|
||||||
|
item['class'] = [item['class'], data["class_name"]].compact.join(" ")
|
||||||
|
|
||||||
|
# 将 <p> 替换为 <div> 并插入标题
|
||||||
|
first_child.name = "div"
|
||||||
|
first_child.inner_html = "<strong>#{data["title"]}</strong>"
|
||||||
|
break
|
||||||
|
|
||||||
|
# 情况二:段落以 [!type]\n 开头 <p>[!NOTE]\n\n other content</p>
|
||||||
|
elsif text.start_with? "[!#{type}]\n"
|
||||||
|
# 将 alert 类型对应的 class 加入 blockquote
|
||||||
|
item['class'] = [item['class'], data["class_name"]].compact.join(" ")
|
||||||
|
# 在原段落前插入标题 <div><strong>提示</strong></div><p>[!NOTE]\n\n other content</p>
|
||||||
|
first_child.add_previous_sibling "<div><strong>#{data["title"]}</strong></div>"
|
||||||
|
# 移除段落内容开头的 [!type]\n <div><strong>提示</strong></div><p>\n other content</p>
|
||||||
|
first_child.content = first_child.content.sub(/\A#{Regexp.escape("[!#{type}]\n")}/i, "")
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
doc.content = fragment.to_html
|
||||||
|
end
|
||||||
7
index.md
7
index.md
@ -13,13 +13,8 @@ author: wifi-left
|
|||||||
> You can also submit your suggestions here.
|
> You can also submit your suggestions here.
|
||||||
<!----{{ '>' }}
|
<!----{{ '>' }}
|
||||||
{: .notice--info }
|
{: .notice--info }
|
||||||
|
<!---->
|
||||||
|
|
||||||
<!--{% comment %}-->
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> <!--{% endcomment %}-->
|
|
||||||
> <!----{{ '>' }} **注意** <br> {{ '<' }}!---->
|
|
||||||
> 如果您遇到 BUG,请及时在 [HMCL/issues](https://github.com/HMCL-dev/HMCL/issues) 发送反馈。\
|
> 如果您遇到 BUG,请及时在 [HMCL/issues](https://github.com/HMCL-dev/HMCL/issues) 发送反馈。\
|
||||||
> 您也可以在这里提交您的建议。
|
> 您也可以在这里提交您的建议。
|
||||||
<!----{{ '>' }}
|
|
||||||
{: .notice--info }
|
|
||||||
<!---->
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user