2025-2-26-fixed
This commit is contained in:
50
themes/fluid/scripts/events/lib/lazyload.js
Normal file
50
themes/fluid/scripts/events/lib/lazyload.js
Normal file
@@ -0,0 +1,50 @@
|
||||
'use strict';
|
||||
|
||||
const urlJoin = require('../../utils/url-join');
|
||||
|
||||
module.exports = (hexo) => {
|
||||
const config = hexo.theme.config;
|
||||
const loadingImage = urlJoin(hexo.config.root, config.lazyload.loading_img
|
||||
|| urlJoin(config.static_prefix.internal_img, 'loading.gif'));
|
||||
if (!config.lazyload || !config.lazyload.enable || !loadingImage) {
|
||||
return;
|
||||
}
|
||||
if (config.lazyload.onlypost) {
|
||||
hexo.extend.filter.register('after_post_render', (page) => {
|
||||
if (page.layout !== 'post' && !page.lazyload) {
|
||||
return;
|
||||
}
|
||||
if (page.lazyload !== false) {
|
||||
page.content = lazyImages(page.content, loadingImage);
|
||||
page.content = lazyComments(page.content);
|
||||
}
|
||||
return page;
|
||||
});
|
||||
} else {
|
||||
hexo.extend.filter.register('after_render:html', (html, data) => {
|
||||
if (!data.page || data.page.lazyload !== false) {
|
||||
html = lazyImages(html, loadingImage);
|
||||
html = lazyComments(html);
|
||||
return html;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const lazyImages = (htmlContent, loadingImage) => {
|
||||
return htmlContent.replace(/<img[^>]+?src=(".*?")[^>]*?>/gims, (str, p1) => {
|
||||
if (/lazyload/i.test(str)) {
|
||||
return str;
|
||||
}
|
||||
return str.replace(p1, `${p1} srcset="${loadingImage}" lazyload`);
|
||||
});
|
||||
};
|
||||
|
||||
const lazyComments = (htmlContent) => {
|
||||
return htmlContent.replace(/<[^>]+?id="comments"[^>]*?>/gims, (str) => {
|
||||
if (/lazyload/i.test(str)) {
|
||||
return str;
|
||||
}
|
||||
return str.replace('id="comments"', 'id="comments" lazyload');
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user