hexo-theme-reimu
Version:
A Hakurei Reimu style Hexo theme
66 lines (60 loc) • 2.05 kB
JavaScript
const { url_for } = require("hexo-util");
hexo.extend.helper.register("themeConfig", function () {
const { config } = hexo.theme;
const siteConfig = hexo.config;
const _global = ["window.REIMU_CONFIG = {};"];
const addConfig = (key, value) => {
if (value) {
_global.push(
`window.REIMU_CONFIG.${key} = ${
typeof value === "string" ? `'${value}'` : JSON.stringify(value)
};`
);
}
};
const licenseType = this._p(
"article_copyright.license_content",
(config.article_copyright?.content?.license_type || "").toUpperCase()
);
const realLangs = config.i18n?.enable
? config.i18n.languages || [siteConfig.language]
: [siteConfig.language];
addConfig("icon_font", config.icon_font);
addConfig("clipboard_tips", {
...config.clipboard,
success: realLangs.reduce((acc, lang) => {
const success = config.clipboard.success;
acc[lang] =
typeof success === "string"
? success
: success[lang] || "Copy successfully (*^▽^*)";
return acc;
}, {}),
fail: realLangs.reduce((acc, lang) => {
const fail = config.clipboard.fail;
acc[lang] =
typeof fail === "string" ? fail : fail[lang] || "Copy failed (゚⊿゚)ツ";
return acc;
}, {}),
});
addConfig("clipboard_tips.copyright.content", licenseType);
if (config.service_worker?.enable) {
addConfig("swPath", url_for.call(hexo, "/sw.js"));
}
addConfig("outdate", config.outdate?.enable ? config.outdate : null);
if (config.anchor_icon || config.anchor_icon === false) {
_global.push(
`window.REIMU_CONFIG.anchor_icon = ${
typeof config.anchor_icon === "string"
? `'${config.anchor_icon}'`
: JSON.stringify(config.anchor_icon)
};`
);
}
addConfig("code_block", config.code_block);
addConfig("base", siteConfig.url);
if (config.i18n?.enable) {
addConfig("i18n_languages", (config.i18n.languages || []).slice(1));
}
return `<script>${_global.join("")}</script>`;
});