UNPKG

@marp-team/marpit

Version:

The skinny framework for creating slide deck from Markdown

56 lines (43 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _token = _interopRequireDefault(require("markdown-it/lib/token")); var _split = _interopRequireDefault(require("../helpers/split")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @module */ /** * Marpit heading divider plugin. * * Start a new slide page at before of headings by prepending hidden `<hr>` * elements. * * @alias module:markdown/heading_divider * @param {MarkdownIt} md markdown-it instance. * @param {Marpit} marpit Marpit instance. */ function headingDivider(md, marpit) { md.core.ruler.before('marpit_slide', 'marpit_heading_divider', state => { let target = marpit.options.headingDivider; if (marpit.lastGlobalDirectives && Object.prototype.hasOwnProperty.call(marpit.lastGlobalDirectives, 'headingDivider')) target = marpit.lastGlobalDirectives.headingDivider; if (state.inlineMode || target === false) return; if (Number.isInteger(target) && target >= 1 && target <= 6) target = [...Array(target).keys()].map(i => i + 1); if (!Array.isArray(target)) return; const splitTag = target.map(i => `h${i}`); const splitFunc = t => t.type === 'heading_open' && splitTag.includes(t.tag); const newTokens = []; for (const slideTokens of (0, _split.default)(state.tokens, splitFunc, true)) { const [token] = slideTokens; if (token && splitFunc(token) && newTokens.some(t => !t.hidden)) { const hr = new _token.default('hr', '', 0); hr.hidden = true; newTokens.push(hr); } newTokens.push(...slideTokens); } state.tokens = newTokens; }); } var _default = headingDivider; exports.default = _default;