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