mirror of
https://github.com/jerryc127/hexo-theme-butterfly.git
synced 2026-04-08 12:07:06 +08:00
- Bump version from 5.5.3-b2 to 5.5.3 in package.json - Update third-party dependencies: * algolia_search: 5.43.0 -> 5.46.0 * docsearch: 4.3.1 -> 4.3.2 * fancybox: 6.1.4 -> 6.1.7 * katex: 0.16.25 -> 0.16.27 * mermaid: 11.12.1 -> 11.12.2 * waline: 3.7.1 -> 3.8.0 perf: optimize JavaScript performance - Add defer attribute to script tags in pjax and prismjs - Improve DOM content loading timing in pjax - Optimize utilities with better throttle implementation - Cache header positions for TOC performance - Optimize related posts generation with Maps - Improve archive helpers performance fix: improve error handling and UI fixes - Replace process.exit with proper error throwing - Fix tooltip positioning with boundary checks - Add btn-effects to readmode exit button - Fix element height calculation for hidden elements - Improve image filters in dark mode (brightness .88, contrast .95) style: code improvements and consistency - Refactor random cover generation with generator pattern - Optimize data processing in helpers - Clean up unused functions and improve code structure - Fix Chinese translation: 页 -> 頁
87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
const { deepMerge } = require('hexo-util')
|
|
const path = require('path')
|
|
|
|
// Cache default config to avoid repeated file reads
|
|
let cachedDefaultConfig = null
|
|
|
|
/**
|
|
* Check Hexo version and configuration
|
|
*/
|
|
function checkHexoEnvironment (hexo) {
|
|
const { version, log, locals } = hexo
|
|
|
|
const [major, minor] = version.split('.').map(Number)
|
|
const requiredMajor = 5
|
|
const requiredMinor = 3
|
|
|
|
if (major < requiredMajor || (major === requiredMajor && minor < requiredMinor)) {
|
|
log.error('Please update Hexo to V5.3.0 or higher!')
|
|
log.error('請把 Hexo 升級到 V5.3.0 或更高的版本!')
|
|
throw new Error('Hexo version too old')
|
|
}
|
|
|
|
// Check for deprecated configuration file
|
|
if (locals.get) {
|
|
const data = locals.get('data')
|
|
if (data && data.butterfly) {
|
|
log.error("'butterfly.yml' is deprecated. Please use '_config.butterfly.yml'")
|
|
log.error("'butterfly.yml' 已經棄用,請使用 '_config.butterfly.yml'")
|
|
throw new Error('Deprecated configuration file')
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load default configuration
|
|
*/
|
|
function loadDefaultConfig () {
|
|
if (cachedDefaultConfig) {
|
|
return cachedDefaultConfig
|
|
}
|
|
|
|
const configPath = path.join(__dirname, '../common/default_config.js')
|
|
cachedDefaultConfig = require(configPath)
|
|
return cachedDefaultConfig
|
|
}
|
|
|
|
/**
|
|
* Process comment system configuration
|
|
*/
|
|
function processCommentConfig (themeConfig) {
|
|
const { comments } = themeConfig
|
|
if (!comments || !comments.use) {
|
|
return
|
|
}
|
|
|
|
let { use } = comments
|
|
|
|
if (!Array.isArray(use)) {
|
|
use = typeof use === 'string' ? use.split(',') : [use]
|
|
}
|
|
|
|
use = use
|
|
.map(item => {
|
|
if (typeof item !== 'string') return item
|
|
return item.trim().toLowerCase().replace(/\b[a-z]/g, s => s.toUpperCase())
|
|
})
|
|
.filter(Boolean)
|
|
|
|
// Handle Disqus and Disqusjs conflict
|
|
if (use.includes('Disqus') && use.includes('Disqusjs')) {
|
|
hexo.log.warn('Disqus and Disqusjs conflict detected, keeping only the first one')
|
|
hexo.log.warn('檢測到 Disqus 和 Disqusjs 衝突,只保留第一個')
|
|
use = [use[0]]
|
|
}
|
|
|
|
themeConfig.comments.use = use
|
|
}
|
|
|
|
hexo.extend.filter.register('before_generate', () => {
|
|
checkHexoEnvironment(hexo)
|
|
|
|
const defaultConfig = loadDefaultConfig()
|
|
hexo.theme.config = deepMerge(defaultConfig, hexo.theme.config)
|
|
|
|
processCommentConfig(hexo.theme.config)
|
|
}, 1)
|