diff --git a/_data/plugins/auto_alert.yml b/_data/plugins/auto_alert.yml new file mode 100644 index 0000000..daa43c4 --- /dev/null +++ b/_data/plugins/auto_alert.yml @@ -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 diff --git a/_plugins/auto-alert.rb b/_plugins/auto-alert.rb new file mode 100644 index 0000000..ee0d1b8 --- /dev/null +++ b/_plugins/auto-alert.rb @@ -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] 形式
[!NOTE]
+ if text == "[!#{type}]" + # 将 alert 类型对应的 class 加入 blockquote + item['class'] = [item['class'], data["class_name"]].compact.join(" ") + + # 将替换为
[!NOTE]\n\n other content
+ elsif text.start_with? "[!#{type}]\n" + # 将 alert 类型对应的 class 加入 blockquote + item['class'] = [item['class'], data["class_name"]].compact.join(" ") + # 在原段落前插入标题[!NOTE]\n\n other content
+ first_child.add_previous_sibling "\n other content
+ first_child.content = first_child.content.sub(/\A#{Regexp.escape("[!#{type}]\n")}/i, "") + break + end + end + end + doc.content = fragment.to_html +end diff --git a/index.md b/index.md index c188575..79b0119 100644 --- a/index.md +++ b/index.md @@ -13,13 +13,8 @@ author: wifi-left > You can also submit your suggestions here. - > [!NOTE] -> -> > 如果您遇到 BUG,请及时在 [HMCL/issues](https://github.com/HMCL-dev/HMCL/issues) 发送反馈。\ > 您也可以在这里提交您的建议。 -