/** * AnZhiYu * for aside archives */ "use strict"; hexo.extend.helper.register("aside_archives", function (options = {}) { const { config } = this; const archiveDir = config.archive_dir; const { timezone } = config; const lang = toMomentLocale(this.page.lang || this.page.language || config.language); let { format } = options; const type = options.type || "monthly"; const { transform } = options; const showCount = Object.prototype.hasOwnProperty.call(options, "show_count") ? options.show_count : true; const order = options.order || -1; const compareFunc = type === "monthly" ? (yearA, monthA, yearB, monthB) => yearA === yearB && monthA === monthB : (yearA, monthA, yearB, monthB) => yearA === yearB; const limit = options.limit; let result = ""; if (!format) { format = type === "monthly" ? "MMMM YYYY" : "YYYY"; } const posts = this.site.posts.sort("date", order); if (!posts.length) return result; const data = []; let length = 0; posts.forEach(post => { // Clone the date object to avoid pollution let date = post.date.clone(); if (timezone) date = date.tz(timezone); const year = date.year(); const month = date.month() + 1; const lastData = data[length - 1]; if (!lastData || !compareFunc(lastData.year, lastData.month, year, month)) { if (lang) date = date.locale(lang); const name = date.format(format); length = data.push({ name, year, month, count: 1, }); } else { lastData.count++; } }); const link = item => { let url = `${archiveDir}/${item.year}/`; if (type === "monthly") { if (item.month < 10) url += "0"; url += `${item.month}/`; } return this.url_for(url); }; const len = data.length; const Judge = limit === 0 ? len : Math.min(len, limit); result += `
${this._p( "aside.card_archives" )}`; if (len > Judge) { result += ` `; } result += '
"; return result; }); const toMomentLocale = function (lang) { if (lang === undefined) { return undefined; } // moment.locale('') equals moment.locale('en') // moment.locale(null) equals moment.locale('en') if (!lang || lang === "en" || lang === "default") { return "en"; } return lang.toLowerCase().replace("_", "-"); };