109 lines
2.6 KiB
JavaScript
109 lines
2.6 KiB
JavaScript
import { type, compareDate } from './index'
|
|
|
|
/**
|
|
* 过滤非文章页
|
|
* @param {Array} posts 所有文章数据
|
|
*/
|
|
export function filterPosts (posts) {
|
|
posts = posts.filter(item => {
|
|
const { frontmatter: { pageComponent, article, home } } = item
|
|
return !(pageComponent || article === false || home === true) // 存在页面组件、article字段为false,以及首页
|
|
})
|
|
return posts
|
|
}
|
|
|
|
/**
|
|
* 按置顶和时间排序
|
|
* @param {Array} posts 过滤非文章页之后的文章数据
|
|
*/
|
|
export function sortPosts (posts) {
|
|
posts.sort((prev, next) => {
|
|
const prevSticky = prev.frontmatter.sticky
|
|
const nextSticky = next.frontmatter.sticky
|
|
if (prevSticky && nextSticky) {
|
|
return prevSticky == nextSticky ? compareDate(prev, next) : (prevSticky - nextSticky)
|
|
} else if (prevSticky && !nextSticky) {
|
|
return -1
|
|
} else if (!prevSticky && nextSticky) {
|
|
return 1
|
|
}
|
|
return compareDate(prev, next)
|
|
})
|
|
return posts
|
|
}
|
|
|
|
/**
|
|
* 按时间排序
|
|
* @param {Array} posts 过滤非文章页之后的文章数据
|
|
*/
|
|
export function sortPostsByDate (posts) {
|
|
posts.sort((prev, next) => {
|
|
return compareDate(prev, next)
|
|
})
|
|
return posts
|
|
}
|
|
|
|
/**
|
|
* 按分类和标签分组
|
|
* @param {Array} posts 按时间排序之后的文章数据
|
|
*/
|
|
export function groupPosts (posts) {
|
|
const categoriesObj = {}
|
|
const tagsObj = {}
|
|
|
|
for (let i = 0, postsL = posts.length; i < postsL; i++) {
|
|
const { frontmatter: { categories, tags } } = posts[i]
|
|
if (type(categories) === 'array') {
|
|
categories.forEach(item => {
|
|
if (item) { // 分类值是有效的
|
|
if (!categoriesObj[item]) {
|
|
categoriesObj[item] = []
|
|
}
|
|
categoriesObj[item].push(posts[i])
|
|
}
|
|
})
|
|
}
|
|
if (type(tags) === 'array') {
|
|
tags.forEach(item => {
|
|
if (item) { // 标签值是有效的
|
|
if (!tagsObj[item]) {
|
|
tagsObj[item] = []
|
|
}
|
|
tagsObj[item].push(posts[i])
|
|
}
|
|
})
|
|
}
|
|
}
|
|
return {
|
|
categories: categoriesObj,
|
|
tags: tagsObj
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取所有分类和标签
|
|
* @param {Object} groupPosts 按分类和标签分组之后的文章数据
|
|
*/
|
|
export function categoriesAndTags (groupPosts) {
|
|
const categoriesArr = []
|
|
const tagsArr = []
|
|
|
|
for (let key in groupPosts.categories) {
|
|
categoriesArr.push({
|
|
key,
|
|
length: groupPosts.categories[key].length
|
|
})
|
|
}
|
|
|
|
for (let key in groupPosts.tags) {
|
|
tagsArr.push({
|
|
key,
|
|
length: groupPosts.tags[key].length
|
|
})
|
|
}
|
|
return {
|
|
categories: categoriesArr,
|
|
tags: tagsArr
|
|
}
|
|
}
|