31 lines
876 B
JavaScript
31 lines
876 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var imageSize = require('image-size');
|
||
|
var path = require('node:path');
|
||
|
|
||
|
function lazy_loading_plugin(md, mdOptions) {
|
||
|
var defaultImageRenderer = md.renderer.rules.image;
|
||
|
|
||
|
md.renderer.rules.image = function (tokens, idx, options, env, self) {
|
||
|
var token = tokens[idx];
|
||
|
token.attrSet('loading', 'lazy');
|
||
|
|
||
|
if (mdOptions && mdOptions.decoding === true) {
|
||
|
token.attrSet('decoding', 'async');
|
||
|
}
|
||
|
|
||
|
if (mdOptions && mdOptions.base_path && mdOptions.image_size === true) {
|
||
|
const imgSrc = token.attrGet('src');
|
||
|
const imgPath = path.join(mdOptions.base_path, imgSrc);
|
||
|
const dimensions = imageSize(imgPath);
|
||
|
|
||
|
token.attrSet('width', dimensions.width);
|
||
|
token.attrSet('height', dimensions.height);
|
||
|
}
|
||
|
|
||
|
return defaultImageRenderer(tokens, idx, options, env, self);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = lazy_loading_plugin;
|