diff --git a/package.json b/package.json index 0e13d2e..d2a5415 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hexo-theme-butterfly", - "version": "5.3.0", + "version": "5.3.1", "description": "A Simple and Card UI Design theme for Hexo", "main": "package.json", "scripts": { diff --git a/scripts/filters/random_cover.js b/scripts/filters/random_cover.js index f9cc13c..057a67e 100644 --- a/scripts/filters/random_cover.js +++ b/scripts/filters/random_cover.js @@ -5,23 +5,32 @@ 'use strict' hexo.extend.generator.register('post', locals => { - const recentCovers = [] - const randomCoverFn = () => { - const { cover: { default_cover: defaultCover } } = hexo.theme.config + const previousIndexes = [] + + const getRandomCover = defaultCover => { if (!defaultCover) return false if (!Array.isArray(defaultCover)) return defaultCover - const defaultCoverLen = defaultCover.length - const limit = 3 - let num + const coverCount = defaultCover.length + + if (coverCount === 1) { + return defaultCover[0] + } + + const maxPreviousIndexes = coverCount === 2 ? 1 : (coverCount === 3 ? 2 : 3) + + let index do { - num = Math.floor(Math.random() * defaultCoverLen) - } while (recentCovers.includes(num)) + index = Math.floor(Math.random() * coverCount) + } while (previousIndexes.includes(index) && previousIndexes.length < coverCount) - recentCovers.push(num) - if (recentCovers.length > limit) recentCovers.shift() + previousIndexes.push(index) + if (previousIndexes.length > maxPreviousIndexes) { + previousIndexes.shift() + } - return defaultCover[num] + console.log(defaultCover[index]) + return defaultCover[index] } const handleImg = data => { @@ -30,15 +39,20 @@ hexo.extend.generator.register('post', locals => { // Add path to top_img and cover if post_asset_folder is enabled if (hexo.config.post_asset_folder) { - if (topImg && topImg.indexOf('/') === -1 && imgTestReg.test(topImg)) data.top_img = `${data.path}${topImg}` - if (coverVal && coverVal.indexOf('/') === -1 && imgTestReg.test(coverVal)) data.cover = `${data.path}${coverVal}` + if (topImg && topImg.indexOf('/') === -1 && imgTestReg.test(topImg)) { + data.top_img = `${data.path}${topImg}` + } + if (coverVal && coverVal.indexOf('/') === -1 && imgTestReg.test(coverVal)) { + data.cover = `${data.path}${coverVal}` + } } if (coverVal === false) return data // If cover is not set, use random cover if (!coverVal) { - const randomCover = randomCoverFn() + const { cover: { default_cover: defaultCover } } = hexo.theme.config + const randomCover = getRandomCover(defaultCover) data.cover = randomCover coverVal = randomCover // update coverVal } @@ -50,11 +64,9 @@ hexo.extend.generator.register('post', locals => { return data } - return locals.posts.sort('date').map(post => { - return { - data: handleImg(post), - layout: 'post', - path: post.path - } - }) + return locals.posts.sort('date').map(post => ({ + data: handleImg(post), + layout: 'post', + path: post.path + })) })