bny-md Markdown 扩展
基于 HTMX 扩展模式的 Markdown 运行时渲染器。无需构建步骤,将 Markdown 文本实时渲染为 bny-ui 组件。 支持基本语法、GFM 扩展、常用 hack 语法、自定义插件,并与 HTMX 响应无缝集成。
1. 元素触发
hx-ext="bny-md"
直接在容器元素上写 hx-ext="bny-md",该元素的 textContent 会被解析为 Markdown
并替换为渲染后的 HTML。bny-md-config 属性写在与 hx-ext 相同的标签上即可作为元素级配置。
- 预览
- 代码
# 内联 Markdown
这段内容会被 **bny-md** 自动渲染。
- 列表项 1
- 列表项 2
- [x] 已完成
- [ ] 待办
> 引用块也支持
<div hx-ext="bny-md">
# 内联 Markdown
这段内容会被 **bny-md** 自动渲染。
- 列表项 1
- 列表项 2
</div>
2. 加载 .md 文件
hx-get + .md 响应
当 HTMX 请求的 URL 以 .md 结尾(或响应头 Content-Type: text/markdown)时,
bny-md 会自动将响应体解析为 HTML 再交换到目标元素。
- 预览
- 代码
<button hx-get="sample.md"
hx-target="#md-output"
hx-ext="bny-md"
bny-md-config='{"html":true}'
class="bny-btn" color="blue">
加载 sample.md
</button>
<div id="md-output"></div>
3. 命令式调用
bny.markdown(text)
通过全局 API bny.markdown(text, options) 在任意 JavaScript 中将 Markdown 文本渲染为 HTML 字符串,
可用于动态内容、表单预览等场景。修改下方文本框内容后点击「渲染」按钮查看效果。
- 预览
- 代码
<textarea id="md-input"># 输入 Markdown</textarea>
<button onclick="render()">渲染</button>
<div id="md-output-2"></div>
<script>
function render() {
document.getElementById('md-output-2').innerHTML =
bny.markdown(document.getElementById('md-input').value);
}
</script>
4. 自定义插件
bny.md.block()
通过 bny.md.block() 注册自定义块级规则,无需修改核心解析器。
下方示例注册了一个 :::callout 语法,将其渲染为 bny-alert 组件。
- 预览
- 代码
:::callout
这是一个自定义 callout 块
:::
<script>
// multiline 模式下 ctx.__lines 收集从开始到结束的所有行
bny.md.block({
name: 'callout',
test: /^:::callout\s*$/,
multiline: true,
render: function(match, ctx) {
var lines = (ctx.__lines || []).slice(1, -1);
var body = lines.join('\n').trim();
return '<div class="bny-alert" color="blue">' +
ctx.inline(body) + '</div>';
}
});
</script>
<div hx-ext="bny-md">
:::callout
这是一个自定义 callout 块
:::
</div>