diff --git a/layout/includes/third-party/pjax.pug b/layout/includes/third-party/pjax.pug index 38e0504..107ce2c 100644 --- a/layout/includes/third-party/pjax.pug +++ b/layout/includes/third-party/pjax.pug @@ -1,4 +1,4 @@ -- var pjaxExclude = 'a:not([target="_blank"])' +- var pjaxExclude = 'a:not([target="_blank"]):not([data-fancybox])' if theme.pjax.exclude each val in theme.pjax.exclude - pjaxExclude += `:not([href="${val}"])` diff --git a/package.json b/package.json index 5debe44..f7ee6a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hexo-theme-butterfly", - "version": "5.6.0", + "version": "5.6.1", "description": "A Simple and Card UI Design theme for Hexo", "main": "package.json", "scripts": { diff --git a/scripts/helpers/series.js b/scripts/helpers/series.js index bd4e65f..24bdd06 100644 --- a/scripts/helpers/series.js +++ b/scripts/helpers/series.js @@ -1,22 +1,24 @@ -'use strict' - -hexo.extend.helper.register('groupPosts', function () { - const getGroupArray = array => { - return array.reduce((groups, item) => { - const key = item.series - if (key) { - groups[key] = groups[key] || [] - groups[key].push(item) - } - return groups - }, {}) - } - - const sortPosts = posts => { - const { orderBy = 'date', order = 1 } = this.theme.aside.card_post_series - if (orderBy === 'title') return posts.sort('title', order) - return posts.sort('date', order) - } - - return getGroupArray(sortPosts(this.site.posts)) -}) +'use strict' + +// Read pre-built groups from tag/series.js (hexo._seriesGroups) +// and sort each group according to the sidebar card config. +hexo.extend.helper.register('groupPosts', function () { + const groups = hexo._seriesGroups || {} + const { orderBy = 'date', order = 1 } = this.theme.aside.card_post_series + + const result = {} + Object.keys(groups).forEach(key => { + const arr = groups[key].slice() // copy to avoid mutating the shared data + if (orderBy === 'title') { + arr.sort((a, b) => { + const cmp = a.title.toUpperCase().localeCompare(b.title.toUpperCase()) + return order === 1 ? cmp : -cmp + }) + } else { + arr.sort((a, b) => order === 1 ? a.date - b.date : b.date - a.date) + } + result[key] = arr + }) + + return result +}) diff --git a/scripts/tag/series.js b/scripts/tag/series.js index cadd2d4..8eb9d79 100644 --- a/scripts/tag/series.js +++ b/scripts/tag/series.js @@ -1,67 +1,88 @@ -/** - * series plugin - * Syntax: - * {% series [series name] %} - * Usage: - * {% series %} - * {% series series1 %} - */ - -'use strict' - -const urlFor = require('hexo-util').url_for.bind(hexo) -const groups = {} - -hexo.extend.filter.register('before_generate', () => { - Object.keys(groups).forEach(k => delete groups[k]) -}) - -hexo.extend.filter.register('before_post_render', data => { - if (!hexo.theme.config.series.enable) return data - - const { layout, series } = data - if (layout === 'post' && series) { - if (!groups[series]) groups[series] = [] - groups[series].push({ - title: data.title, - path: data.path, - date: data.date.unix() - }) - } - return data -}) - -function series (args) { - const { series } = hexo.theme.config - if (!series.enable) { - hexo.log.warn('Series plugin is disabled in the theme config') - return '' - } - - const seriesArr = args.length ? groups[args[0]] : groups[this.series] - - if (!seriesArr) { - hexo.log.warn(`There is no series named "${args[0]}"`) - return '' - } - - const isAsc = (series.order || 1) === 1 // 1: asc, -1: desc - const isSortByTitle = series.orderBy === 'title' - - const compareFn = (a, b) => { - const itemA = isSortByTitle ? a.title.toUpperCase() : a.date - const itemB = isSortByTitle ? b.title.toUpperCase() : b.date - - return itemA < itemB ? (isAsc ? -1 : 1) : itemA > itemB ? (isAsc ? 1 : -1) : 0 - } - - seriesArr.sort(compareFn) - - const listItems = seriesArr.map(ele => - `