UNPKG

@marp-team/marpit

Version:

The skinny framework for creating slide deck from Markdown

67 lines (54 loc) 1.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _wrap_tokens = _interopRequireDefault(require("../helpers/wrap_tokens")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @module */ /** * Marpit header and footer plugin. * * At each slide, add header and footer that are provided by directives. * * @alias module:markdown/header_and_footer * @param {MarkdownIt} md markdown-it instance. */ function headerAndFooter(md) { md.core.ruler.after('marpit_directives_apply', 'marpit_header_and_footer', state => { if (state.inlineMode) return; const parsedInlines = new Map(); const getParsed = markdown => { let parsed = parsedInlines.get(markdown); if (!parsed) { parsed = md.parseInline(markdown, state.env); delete parsed.map; parsedInlines.set(markdown, parsed); } return parsed; }; const createMarginalTokens = (tag, markdown) => (0, _wrap_tokens.default)(`marpit_${tag}`, { tag, close: { block: true } }, getParsed(markdown)); let current; const newTokens = []; for (const token of state.tokens) { if (token.type === 'marpit_slide_open') { current = token; newTokens.push(token); if (current.meta && current.meta.marpitHeader) newTokens.push(...createMarginalTokens('header', current.meta.marpitHeader)); } else if (token.type === 'marpit_slide_close') { if (current.meta && current.meta.marpitFooter) newTokens.push(...createMarginalTokens('footer', current.meta.marpitFooter)); newTokens.push(token); } else { newTokens.push(token); } } state.tokens = newTokens; }); } var _default = headerAndFooter; exports.default = _default;