77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = exports.backgroundImageParse = void 0;
|
|
var _plugin = _interopRequireDefault(require("../../plugin"));
|
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
/** @module */
|
|
|
|
const bgSizeKeywords = {
|
|
auto: 'auto',
|
|
contain: 'contain',
|
|
cover: 'cover',
|
|
fit: 'contain'
|
|
};
|
|
const splitSizeMatcher = /^(left|right)(?::((?:\d*\.)?\d+%))?$/;
|
|
|
|
/**
|
|
* Marpit background image parse plugin.
|
|
*
|
|
* Parse Marpit's image token and mark as background image when the alternate
|
|
* text includes `bg`. The marked images will not show as the regular image.
|
|
*
|
|
* Furthermore, it parses additional keywords needed for background image.
|
|
*
|
|
* @function backgroundImageParse
|
|
* @param {MarkdownIt} md markdown-it instance.
|
|
*/
|
|
function _backgroundImageParse(md) {
|
|
md.inline.ruler2.after('marpit_parse_image', 'marpit_background_image', ({
|
|
tokens
|
|
}) => {
|
|
for (const t of tokens) {
|
|
if (t.type === 'image') {
|
|
const {
|
|
marpitImage
|
|
} = t.meta;
|
|
if (marpitImage.options.some(v => !v.consumed && v.content === 'bg')) {
|
|
marpitImage.background = true;
|
|
t.hidden = true;
|
|
for (const opt of marpitImage.options) {
|
|
if (opt.consumed) continue;
|
|
let consumed = false;
|
|
|
|
// bg keyword
|
|
if (opt.content === 'bg') consumed = true;
|
|
|
|
// Background size keyword
|
|
if (bgSizeKeywords[opt.content]) {
|
|
marpitImage.backgroundSize = bgSizeKeywords[opt.content];
|
|
consumed = true;
|
|
}
|
|
|
|
// Split background keyword
|
|
const matched = opt.content.match(splitSizeMatcher);
|
|
if (matched) {
|
|
const [, splitSide, splitSize] = matched;
|
|
marpitImage.backgroundSplit = splitSide;
|
|
marpitImage.backgroundSplitSize = splitSize;
|
|
consumed = true;
|
|
}
|
|
|
|
// Background aligned direction
|
|
if (opt.content === 'vertical' || opt.content === 'horizontal') {
|
|
marpitImage.backgroundDirection = opt.content;
|
|
consumed = true;
|
|
}
|
|
if (consumed) opt.consumed = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
const backgroundImageParse = exports.backgroundImageParse = (0, _plugin.default)(_backgroundImageParse);
|
|
var _default = exports.default = backgroundImageParse; |