Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
jerryc127 committed Oct 20, 2024
1 parent 95ca687 commit c72f8c4
Show file tree
Hide file tree
Showing 32 changed files with 207 additions and 209 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ npm i hexo-theme-butterfly
- [x] Share (Sharejs/Addtoany)
- [X] Comment (Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo/Giscus/Remark42/artalk)
- [x] Multiple Comment System Support
- [x] Online Chats (Chatra/Tidio/Daovoice/Crisp)
- [x] Online Chats (Chatra/Tidio/Crisp)
- [x] Web analytics
- [x] Google AdSense
- [x] Webmaster Verification
Expand Down
2 changes: 1 addition & 1 deletion README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ theme: butterfly
- [x] 多種分享系統(Sharejs/Addtoany)
- [X] 多種評論系統(Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo/Giscus/Remark42/artalk)
- [x] 支持雙評論部署
- [x] 多種在線聊天(Chatra/Tidio/Daovoice/Crisp)
- [x] 多種在線聊天(Chatra/Tidio/Crisp)
- [x] 多種分析系統
- [x] 谷歌廣告/手動廣告位置
- [x] 各種站長驗證
Expand Down
6 changes: 1 addition & 5 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,7 @@ artalk:
# --------------------------------------

chat:
# Choose: chatra/tidio/daovoice/crisp
# Choose: chatra/tidio/crisp
# Leave it empty if you don't need chat
use:
# Chat Button [recommend]
Expand All @@ -662,10 +662,6 @@ chatra:
tidio:
public_key:

# http://dashboard.daovoice.io/app
daovoice:
app_id:

# https://crisp.chat/en/
crisp:
website_id:
Expand Down
12 changes: 3 additions & 9 deletions layout/includes/mixins/indexPostUI.pug
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,9 @@ mixin indexPostUI()
i.fa-solid.fa-spinner.fa-spin

//- Display the article introduction on homepage
case theme.index_post_content.method
when false
- break
when 1
.content!= article.description
when 2
.content!= article.description || truncate(article.content, theme.index_post_content.length)
default
.content!= truncate(article.content, theme.index_post_content.length)
- const content = postDesc(article)
if content
.content!=content

if theme.ad && theme.ad.index
if (index + 1) % 3 === 0
Expand Down
6 changes: 4 additions & 2 deletions layout/includes/page/shuoshuo.pug
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
let start = 0
const container = document.getElementById('article-container')

const showDateAndTine = date => new Date(date).toLocaleString()

const addData = data => {
const cLength = data.length
const end = start + 10 > cLength ? cLength : start + 10
Expand All @@ -34,7 +36,7 @@
</div>
<div class="shuoshuo-info">
<div class="shuoshuo-author">${item.author || '!{config.author}'}</div>
<div class="shuoshuo-date">${btf.diffDate(item.date, true)}</div>
<time class="shuoshuo-date" title="${showDateAndTine(item.date)}">${btf.diffDate(item.date, true)}</time>
</div>
</div>
<div class="shuoshuo-content">
Expand Down Expand Up @@ -97,7 +99,7 @@
img.no-lightbox(src=i.avatar || url_for(theme.avatar.img))
.shuoshuo-info
.shuoshuo-author=i.author || config.author
.shuoshuo-date=relative_date(i.date)
time.shuoshuo-date(title=full_date(i.date))=date(i.date)
.shuoshuo-content
!=markdown(i.content)
.shuoshuo-footer
Expand Down
2 changes: 1 addition & 1 deletion layout/includes/page/tags.pug
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
.tag-cloud-list.is-center
.tag-cloud-list.text-center
!=cloudTags({source: site.tags, orderby: page.orderby || 'random', order: page.order || 1, minfontsize: 1.2, maxfontsize: 1.5, limit: 0, unit: 'em'})
42 changes: 20 additions & 22 deletions layout/includes/pagination.pug
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,28 @@
}
if is_post()
- let prev = theme.post_pagination === 1 ? page.prev : page.next
- let next = theme.post_pagination === 1 ? page.next : page.prev
- let paginationOrder = theme.post_pagination === 1 ? { prev: page.prev, next: page.next } : { prev: page.next, next: page.prev }

nav#pagination.pagination-post
if(prev)
- var hasPageNext = next ? 'pull-left' : 'pull-full'
a.prev-post(class=hasPageNext href=url_for(prev.path) title=prev.title)
if prev.cover_type === 'img'
img.cover(src=url_for(prev.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of previous post')
else
.cover(style=`background: ${prev.cover || 'var(--default-bg-color)'}`)
.pagination-info
.label=_p('pagination.prev')
.prev_info=prev.title
each direction, key in paginationOrder
if direction
- const getPostDesc = direction.postDesc || postDesc(direction)
- let className = key === 'prev' ? (paginationOrder.next ? '' : 'full-width') : (paginationOrder.prev ? '' : 'full-width')
- className = getPostDesc ? className : className + ' no-desc'

a.pagination-related(class=className href=url_for(direction.path) title=direction.title)
if direction.cover_type === 'img'
img.cover(src=url_for(direction.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt=`cover of ${key === 'prev' ? 'previous' : 'next'} post`)
else
.cover(style=`background: ${direction.cover || 'var(--default-bg-color)'}`)

if(next)
- var hasPagePrev = prev ? 'pull-right' : 'pull-full'
a.next-post(class=hasPagePrev href=url_for(next.path) title=next.title)
if next.cover_type === 'img'
img.cover(src=url_for(next.cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of next post')
else
.cover(style=`background: ${next.cover || 'var(--default-bg-color)'}`)
.pagination-info
.label=_p('pagination.next')
.next_info=next.title
.info(class=key === 'prev' ? '' : 'text-right')
.info-1
.info-item-1=_p(`pagination.${key}`)
.info-item-2!=direction.title
if getPostDesc
.info-2
.info-item-1!=getPostDesc
else
nav#pagination
.pagination
Expand Down
4 changes: 2 additions & 2 deletions layout/includes/sidebar.pug
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ if theme.menu
#sidebar
#menu-mask
#sidebar-menus
.avatar-img.is-center
.avatar-img.text-center
img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.error_img.flink}'` alt="avatar")
.site-data.is-center
.site-data.text-center
a(href=url_for(config.archive_dir) + '/')
.headline= _p('aside.articles')
.length-num= site.posts.length
Expand Down
4 changes: 2 additions & 2 deletions layout/includes/third-party/abcjs/abcjs.pug
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
script.
(() => {
const abcjsInit = () => {
const abcjsFn = () => {
const abcjsFn = () => setTimeout(() => {
document.querySelectorAll(".abc-music-sheet").forEach(ele => {
if (ele.children.length > 0) return
ABCJS.renderAbc(ele, ele.innerHTML, {responsive: 'resize'})
})
}
}, 100)

typeof ABCJS === 'object' ? abcjsFn()
: btf.getScript('!{url_for(theme.asset.abcjs_basic_js)}').then(abcjsFn)
Expand Down
40 changes: 0 additions & 40 deletions layout/includes/third-party/chat/daovoice.pug

This file was deleted.

2 changes: 0 additions & 2 deletions layout/includes/third-party/chat/index.pug
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,5 @@ case theme.chat.use
include ./chatra.pug
when 'tidio'
include ./tidio.pug
when 'daovoice'
include ./daovoice.pug
when 'crisp'
include ./crisp.pug
2 changes: 1 addition & 1 deletion layout/includes/third-party/search/local-search.pug
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
button.search-close-button
i.fas.fa-times

#loading-database.is-center
#loading-database.text-center
i.fas.fa-spinner.fa-pulse
span= ' ' + _p("search.load_data")

Expand Down
2 changes: 1 addition & 1 deletion layout/includes/widget/card_author.pug
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
if theme.aside.card_author.enable
.card-widget.card-info.is-center
.card-widget.card-info.text-center
.avatar-img
img(src=url_for(theme.avatar.img) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt="avatar")
.author-info-name= config.author
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hexo-theme-butterfly",
"version": "5.1.0-b1",
"version": "5.1.0",
"description": "A Simple and Card UI Design theme for Hexo",
"main": "package.json",
"scripts": {
Expand Down
6 changes: 3 additions & 3 deletions plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ activate_power_mode:
algolia_search:
name: algoliasearch
file: dist/lite/builds/browser.umd.js
version: 5.8.1
version: 5.9.1
aplayer_css:
name: aplayer
file: dist/APlayer.min.css
Expand Down Expand Up @@ -45,7 +45,7 @@ canvas_ribbon:
chartjs:
name: chart.js
file: dist/chart.umd.min.js
version: 4.4.4
version: 4.4.5
clickShowText:
name: butterfly-extsrc
file: dist/click-show-text.min.js
Expand Down Expand Up @@ -111,7 +111,7 @@ instantpage:
instantsearch:
name: instantsearch.js
file: dist/instantsearch.production.min.js
version: 4.75.0
version: 4.75.1
katex:
name: katex
file: dist/katex.min.css
Expand Down
36 changes: 36 additions & 0 deletions scripts/common/postDesc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
'use strict'

const { stripHTML, truncate } = require('hexo-util')

// Truncates the given content to a specified length, removing HTML tags and replacing newlines with spaces.
const truncateContent = (content, length) => {
return truncate(stripHTML(content), { length, separator: ' ' }).replace(/\n/g, ' ')
}

// Generates a post description based on the provided data and theme configuration.
const postDesc = (data, hexo) => {
const { description, content, postDesc } = data

if (postDesc) return postDesc

const { length, method } = hexo.theme.config.index_post_content

if (method === false) return

let result
switch (method) {
case 1:
result = description
break
case 2:
result = description || truncateContent(content, length)
break
default:
result = truncateContent(content, length)
}

data.postDesc = result
return result
}

module.exports = { truncateContent, postDesc }
3 changes: 0 additions & 3 deletions scripts/events/merge_config.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,9 +380,6 @@ hexo.extend.filter.register('before_generate', () => {
tidio: {
public_key: null
},
daovoice: {
app_id: null
},
crisp: {
website_id: null
},
Expand Down
9 changes: 6 additions & 3 deletions scripts/helpers/page.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
'use strict'

const { stripHTML, prettyUrls, truncate } = require('hexo-util')
const { truncateContent, postDesc } = require('../common/postDesc')
const { prettyUrls } = require('hexo-util')
const crypto = require('crypto')

hexo.extend.helper.register('truncate', (content, length) => {
return truncate(stripHTML(content), { length, separator: ' ' }).replace(/\n/g, ' ')
hexo.extend.helper.register('truncate', truncateContent)

hexo.extend.helper.register('postDesc', data => {
return postDesc(data, hexo)
})

hexo.extend.helper.register('cloudTags', function (options = {}) {
Expand Down
30 changes: 21 additions & 9 deletions scripts/helpers/related_post.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable camelcase */
/**
* Butterfly
* Related Posts
Expand All @@ -6,20 +7,24 @@

'use strict'

const { postDesc } = require('../common/postDesc')

hexo.extend.helper.register('related_posts', function (currentPost, allPosts) {
let relatedPosts = []
const tagsData = currentPost.tags
tagsData.length && tagsData.forEach(function (tag) {
allPosts.forEach(function (post) {
if (currentPost.path !== post.path && isTagRelated(tag.name, post.tags)) {
const getPostDesc = post.postDesc || postDesc(post, hexo)
const relatedPost = {
title: post.title,
path: post.path,
cover: post.cover,
cover_type: post.cover_type,
weight: 1,
updated: post.updated,
created: post.date
created: post.date,
postDesc: getPostDesc
}
const index = findItem(relatedPosts, 'path', post.path)
if (index !== -1) {
Expand Down Expand Up @@ -50,20 +55,27 @@ hexo.extend.helper.register('related_posts', function (currentPost, allPosts) {
result += '<div class="relatedPosts-list">'

for (let i = 0; i < Math.min(relatedPosts.length, limitNum); i++) {
const cover = relatedPosts[i].cover || 'var(--default-bg-color)'
const title = this.escape_html(relatedPosts[i].title)
result += `<a href="${this.url_for(relatedPosts[i].path)}" title="${title}">`
if (relatedPosts[i].cover_type === 'img') {
result += `<img class="cover" src="${this.url_for(cover)}" alt="cover">`
let { cover, title, path, cover_type, created, updated, postDesc } = relatedPosts[i]
const { escape_html, url_for, date } = this
cover = cover || 'var(--default-bg-color)'
title = escape_html(title)
const className = postDesc ? 'pagination-related' : 'pagination-related no-desc'
result += `<a class="${className}" href="${url_for(path)}" title="${title}">`
if (cover_type === 'img') {
result += `<img class="cover" src="${url_for(cover)}" alt="cover">`
} else {
result += `<div class="cover" style="background: ${cover}"></div>`
}
if (dateType === 'created') {
result += `<div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> ${this.date(relatedPosts[i].created, hexoConfig.date_format)}</div>`
result += `<div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> ${date(created, hexoConfig.date_format)}</div>`
} else {
result += `<div class="content is-center"><div class="date"><i class="fas fa-history fa-fw"></i> ${this.date(relatedPosts[i].updated, hexoConfig.date_format)}</div>`
result += `<div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="fas fa-history fa-fw"></i> ${date(updated, hexoConfig.date_format)}</div>`
}
result += `<div class="info-item-2">${title}</div></div>`

if (postDesc) {
result += `<div class="info-2"><div class="info-item-1">${postDesc}</div></div>`
}
result += `<div class="title">${title}</div>`
result += '</div></a>'
}

Expand Down
Loading

0 comments on commit c72f8c4

Please sign in to comment.