UNPKG

@marp-team/marpit

Version:

The skinny framework for creating slide deck from Markdown

44 lines (36 loc) 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _postcss = _interopRequireDefault(require("postcss")); var _wrap_array = _interopRequireDefault(require("../../helpers/wrap_array")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @module */ const buildSelector = elms => elms.map(e => { const classes = new Set((e.class || '').split(/\s+/).filter(c => c)); let element = [e.tag, ...classes].join('.'); if (e.id) element += `#${e.id}`; return element; }).join(' > '); /** * Marpit PostCSS pseudo selector replace plugin. * * Replace `:marpit-container` and `:marpit-slide` pseudo selector into * container element(s). * * @alias module:postcss/pseudo_selector/replace * @param {Element|Element[]} [elements] Container elements * @param {Element|Element[]} [slideElements={ tag: 'section' }] Slide elements */ const plugin = _postcss.default.plugin('marpit-postcss-pseudo-selector-replace', (elements, slideElements = { tag: 'section' }) => { const container = buildSelector([...(0, _wrap_array.default)(elements)]); const section = buildSelector([...(0, _wrap_array.default)(slideElements)]); return css => css.walkRules(rule => { rule.selectors = rule.selectors.map(selector => selector.replace(/:marpit-container(?![\w-])/g, container).replace(/:marpit-slide(?![\w-])/g, section).replace(/^\s*>\s*/, '')); }); }); var _default = plugin; exports.default = _default;