Files
2026-09-27 10:31:47 +02:00

63 lines
1.6 KiB
JavaScript

export function setup(helper) {
if (!helper.markdownIt) {
return;
}
helper.allowList(["div.hledger-dashboard"]);
helper.registerOptions((opts, siteSettings) => {
opts.features.hledger = siteSettings.hledger_enabled;
});
helper.registerPlugin((md) => {
if (!md.options.discourse.features.hledger) {
return;
}
md.block.ruler.before(
"fence",
"hledger_dashboard",
(state, startLine, endLine, silent) => {
const start = state.bMarks[startLine] + state.tShift[startLine];
const max = state.eMarks[startLine];
const opening = state.src.slice(start, max);
if (!/^\s*`{3,}hledger\s*$/.test(opening)) {
return false;
}
let closingLine = startLine + 1;
let closed = false;
for (; closingLine < endLine; closingLine++) {
const pos = state.bMarks[closingLine] + state.tShift[closingLine];
const lineMax = state.eMarks[closingLine];
if (/^\s*`{3,}\s*$/.test(state.src.slice(pos, lineMax))) {
closed = true;
break;
}
}
if (!closed) {
return false;
}
if (silent) {
return true;
}
const token = state.push("hledger_dashboard", "div", 0);
token.block = true;
token.map = [startLine, closingLine + 1];
state.line = closingLine + 1;
return true;
},
{ alt: ["paragraph", "reference", "blockquote", "list"] }
);
md.renderer.rules.hledger_dashboard = () =>
`<div class="hledger-dashboard"></div>\n`;
});
}