2025-2-26-fixed
This commit is contained in:
118
themes/fluid/scripts/events/lib/injects.js
Normal file
118
themes/fluid/scripts/events/lib/injects.js
Normal file
@@ -0,0 +1,118 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Modified from https://github.com/next-theme/hexo-theme-next/blob/master/scripts/events/lib/injects.js
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const defaultExtname = '.ejs';
|
||||
|
||||
// Defining stylus types
|
||||
class StylusInject {
|
||||
|
||||
constructor(base_dir) {
|
||||
this.base_dir = base_dir;
|
||||
this.files = [];
|
||||
}
|
||||
|
||||
push(file) {
|
||||
// Get absolute path base on hexo dir
|
||||
this.files.push(path.resolve(this.base_dir, file));
|
||||
}
|
||||
}
|
||||
|
||||
// Defining view types
|
||||
class ViewInject {
|
||||
|
||||
constructor(base_dir) {
|
||||
this.base_dir = base_dir;
|
||||
this.raws = [];
|
||||
}
|
||||
|
||||
raw(name, raw, ...args) {
|
||||
// Set default extname
|
||||
if (path.extname(name) === '') {
|
||||
name += defaultExtname;
|
||||
}
|
||||
this.raws.push({ name, raw, args });
|
||||
}
|
||||
|
||||
file(name, file, ...args) {
|
||||
// Set default extname from file's extname
|
||||
if (path.extname(name) === '') {
|
||||
name += path.extname(file);
|
||||
}
|
||||
// Get absolute path base on hexo dir
|
||||
this.raw(name, fs.readFileSync(path.resolve(this.base_dir, file), 'utf8'), ...args);
|
||||
}
|
||||
}
|
||||
|
||||
const points = {
|
||||
views: [
|
||||
'head',
|
||||
'header',
|
||||
'bodyBegin',
|
||||
'bodyEnd',
|
||||
'footer',
|
||||
'postMetaTop',
|
||||
'postMetaBottom',
|
||||
'postMarkdownBegin',
|
||||
'postMarkdownEnd',
|
||||
'postLeft',
|
||||
'postRight',
|
||||
'postCopyright',
|
||||
'postComments',
|
||||
'pageComments',
|
||||
'linksComments'
|
||||
],
|
||||
styles: [
|
||||
'variable',
|
||||
'mixin',
|
||||
'style'
|
||||
]
|
||||
};
|
||||
|
||||
// Init injects
|
||||
function initInject(base_dir) {
|
||||
const injects = {};
|
||||
points.styles.forEach(item => {
|
||||
injects[item] = new StylusInject(base_dir);
|
||||
});
|
||||
points.views.forEach(item => {
|
||||
injects[item] = new ViewInject(base_dir);
|
||||
});
|
||||
return injects;
|
||||
}
|
||||
|
||||
module.exports = (hexo) => {
|
||||
// Exec theme_inject filter
|
||||
const injects = initInject(hexo.base_dir);
|
||||
hexo.execFilterSync('theme_inject', injects);
|
||||
hexo.theme.config.injects = {};
|
||||
|
||||
// Inject stylus
|
||||
points.styles.forEach(type => {
|
||||
hexo.theme.config.injects[type] = injects[type].files;
|
||||
});
|
||||
|
||||
// Inject views
|
||||
points.views.forEach(type => {
|
||||
const configs = Object.create(null);
|
||||
hexo.theme.config.injects[type] = [];
|
||||
// Add or override view.
|
||||
injects[type].raws.forEach((injectObj, index) => {
|
||||
const name = `inject/${type}/${injectObj.name}`;
|
||||
hexo.theme.setView(name, injectObj.raw);
|
||||
configs[name] = {
|
||||
layout : name,
|
||||
locals : injectObj.args[0],
|
||||
options: injectObj.args[1],
|
||||
order : injectObj.args[2] || index
|
||||
};
|
||||
});
|
||||
// Views sort.
|
||||
hexo.theme.config.injects[type] = Object.values(configs)
|
||||
.sort((x, y) => x.order - y.order);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user