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 = () => `
\n`; }); }