94 lines
3.2 KiB
JavaScript
94 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const objUtil = require('../../utils/object');
|
|
const { isNotEmptyObject } = require('../../utils/object');
|
|
|
|
module.exports = (hexo) => {
|
|
const isZh = hexo.theme.i18n.languages[0].search(/zh-CN/i) !== -1;
|
|
|
|
let dataConfig = {};
|
|
let dataStaticConfig = {};
|
|
|
|
if (hexo.locals.get instanceof Function) {
|
|
const data = hexo.locals.get('data');
|
|
if (data && isNotEmptyObject(data.fluid_config)) {
|
|
dataConfig = data.fluid_config;
|
|
} else if (!configFromRoot(hexo)) {
|
|
if (isZh) {
|
|
hexo.log.warn('[Fluid] 推荐你使用覆盖配置功能: https://hexo.fluid-dev.com/docs/guide/#%E8%A6%86%E7%9B%96%E9%85%8D%E7%BD%AE');
|
|
} else {
|
|
hexo.log.warn('[Fluid] It is recommended that you use override configuration: https://hexo.fluid-dev.com/docs/en/guide/#override-configuration');
|
|
}
|
|
}
|
|
if (data && isNotEmptyObject(data.fluid_static_prefix)) {
|
|
dataStaticConfig = data.fluid_static_prefix;
|
|
}
|
|
|
|
const { language } = hexo.config;
|
|
const { i18n } = hexo.theme;
|
|
const langConfigMap = {};
|
|
for (const key in data) {
|
|
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
if (/^languages\/.+$/.test(key)) {
|
|
langConfigMap[key.replace('languages/', '')] = data[key];
|
|
}
|
|
}
|
|
}
|
|
if (isNotEmptyObject(langConfigMap)) {
|
|
const mergeLang = (lang) => {
|
|
if (langConfigMap[lang]) {
|
|
i18n.set(lang, objUtil.merge({}, i18n.get([lang]), langConfigMap[lang]));
|
|
}
|
|
};
|
|
if (Array.isArray(language)) {
|
|
for (const lang of language) {
|
|
mergeLang(lang);
|
|
}
|
|
} else {
|
|
mergeLang(language);
|
|
}
|
|
if (isZh) {
|
|
hexo.log.debug('[Fluid] 读取 source/_data/languages/*.yml 文件覆盖语言配置');
|
|
} else {
|
|
hexo.log.debug('[Fluid] Merge language config from source/_data/languages/*.yml');
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isNotEmptyObject(hexo.config.theme_config)) {
|
|
hexo.theme.config = objUtil.merge({}, hexo.theme.config, hexo.config.theme_config);
|
|
if (isZh) {
|
|
hexo.log.debug('[Fluid] 读取 _config.yml 中 theme_config 配置项覆盖主题配置');
|
|
} else {
|
|
hexo.log.debug('[Fluid] Merge theme config from theme_config in _config.yml');
|
|
}
|
|
}
|
|
|
|
if (isNotEmptyObject(dataStaticConfig)) {
|
|
hexo.theme.config.static_prefix = objUtil.merge({}, hexo.theme.config.static_prefix, dataStaticConfig);
|
|
if (isZh) {
|
|
hexo.log.debug('[Fluid] 读取 source/_data/fluid_static_prefix.yml 文件覆盖主题配置');
|
|
} else {
|
|
hexo.log.debug('[Fluid] Merge theme config from source/_data/fluid_static_prefix.yml');
|
|
}
|
|
}
|
|
|
|
if (isNotEmptyObject(dataConfig)) {
|
|
hexo.theme.config = objUtil.merge({}, hexo.theme.config, dataConfig);
|
|
if (isZh) {
|
|
hexo.log.debug('[Fluid] 读取 source/_data/fluid_config.yml 文件覆盖主题配置');
|
|
} else {
|
|
hexo.log.debug('[Fluid] Merge theme config from source/_data/fluid_config.yml');
|
|
}
|
|
}
|
|
|
|
hexo.log.debug('[Fluid] Output theme config:\n', JSON.stringify(hexo.theme.config, undefined, 2));
|
|
};
|
|
|
|
const configFromRoot = (hexo) => {
|
|
const configPath = path.join(hexo.base_dir, '_config.fluid.yml');
|
|
return fs.existsSync(configPath);
|
|
};
|