@marp-team/marpit
Version:
The skinny framework for creating slide deck from Markdown
50 lines (38 loc) • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _token = _interopRequireDefault(require("markdown-it/lib/token"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* Wrap array of tokens by specified container object.
*
* @alias module:helpers/wrap_tokens
* @param {String} type Token type. It will be suffixed by `_open` / `_close`.
* @param {Object} container A container object to wrap tokens, includes tag
* name and attributes.
* @param {String} container.tag The name of container element.
* @param {Object} [container.open] The object assigning to an opening token.
* @param {Object} [container.close] The object assigning to a closing token.
* @param {Token[]} [tokens=[]] Wrapping tokens.
* @returns {Token[]} Wrapped tokens.
*/
function wrapTokens(type, container, tokens = []) {
const {
tag
} = container; // Update nesting level of wrapping tokens
for (const t of tokens) t.level += 1; // Create markdown-it tokens
const open = new _token.default(`${type}_open`, tag, 1);
const close = new _token.default(`${type}_close`, tag, -1);
Object.assign(open, _objectSpread({}, container.open || {}));
Object.assign(close, _objectSpread({}, container.close || {})); // Assign attributes
for (const attr of Object.keys(container)) {
if (!['open', 'close', 'tag'].includes(attr) && container[attr] != null) open.attrSet(attr, container[attr]);
}
return [open, ...tokens, close];
}
var _default = wrapTokens;
exports.default = _default;