/* global hexo */
'use strict'
const url = require('url')
hexo.extend.helper.register('isInHomePaging', function (pagePath, route) {
if (pagePath.length > 5 && route === '/') {
return pagePath.slice(0, 5) === 'page/'
} else {
return false
}
})
hexo.extend.helper.register('createNewArchivePosts', function (posts) {
const postList = [],
postYearList = []
posts.forEach((post) => postYearList.push(post.date.year()))
Array.from(new Set(postYearList)).forEach((year) => {
postList.push({
year: year,
postList: []
})
})
postList.sort((a, b) => b.year - a.year)
postList.forEach((item) => {
posts.forEach((post) => item.year === post.date.year() && item.postList.push(post))
})
postList.forEach((item) => item.postList.sort((a, b) => b.date.unix() - a.date.unix()))
return postList
})
hexo.extend.helper.register('getAuthorLabel', function (postCount, isAuto, labelList) {
let level = Math.floor(Math.log2(postCount))
level = level < 2 ? 1 : level - 1
if (isAuto === false && Array.isArray(labelList) && labelList.length > 0) {
return level > labelList.length ? labelList[labelList.length - 1] : labelList[level - 1]
} else {
return `Lv${level}`
}
})
hexo.extend.helper.register('getPostUrl', function (rootUrl, path) {
if (rootUrl) {
let { href } = url.parse(rootUrl)
if (href.substr(href.length - 1, 1) !== '/') {
href = href + '/'
}
return href + path
} else {
return path
}
})
const getSourceCdnUrl = (tyle, themeConfig, path) => {
const version = require('../../package.json').version
const cdn = themeConfig?.cdn || {}
const { provider = 'jsdelivr' } = cdn
let urlPrefix = ''
switch (provider.toLocaleLowerCase()) {
case 'jsdelivr':
urlPrefix = '//cdn.jsdelivr.net/npm/hexo-theme-keep'
if (tyle === 'js') {
return ``
} else {
return ``
}
case 'unpkg':
urlPrefix = '//unpkg.com/hexo-theme-keep'
if (tyle === 'js') {
return ``
} else {
return ``
}
}
}
hexo.extend.helper.register('__js', function (path) {
const { enable } = this.theme.cdn
const _js = hexo.extend.helper.get('js').bind(hexo)
const cdnPathHandle = (pa) => {
return enable ? getSourceCdnUrl('js', this.theme, pa) : _js(pa)
}
let t = ``
if (Array.isArray(path)) {
for (const p of path) {
t += cdnPathHandle(p)
}
} else {
t = cdnPathHandle(path)
}
return t
})
hexo.extend.helper.register('__css', function (path) {
const { enable } = this.theme.cdn
const _css = hexo.extend.helper.get('css').bind(hexo)
return enable ? getSourceCdnUrl('css', this.theme, path) : _css(path)
})