@marp-team/marpit
Version:
The skinny framework for creating slide deck from Markdown
56 lines (43 loc) • 1.79 kB
JavaScript
;
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;