mirror of
https://github.com/jerryc127/hexo-theme-butterfly.git
synced 2025-09-15 12:58:48 +08:00
improvement: 首頁社交圖標左右邊距調整 feat: 文章版權增加圖標 improvement: 重構 main.js 代碼 improvement: 優化 pjax 下的性能 fix: 修復子目錄下,pjax 跳轉 404 錯誤 feat: getScript 增加 attribute 配置 improvement: 優化手機端 toc 打開和關閉特效 improvement: 文章進入特效改為 transform, 優化 stylus improvement: 目錄側邊欄出現滾動條時,元素不會被擠壓 feat: 文章左右對齊 improvement: 處理 waline 的 url 後面多 / 導致跨域的問題 fix: 修復夜間模式下,小屏幕的toc 滾動條顏色不明顯的 bug fix: 修復設置字體超過17px時,toc 裏面的邊框異常的 bug improvement: 優化語言文件部分用詞 improvement: disqus 和 disqusjs 的評論數獲取不到時,顯示為 0 improvement: disqusjs 的評論數改為 api 獲取 improvement: 代碼優化 improvement: 更新 plugins.yml
65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
/**
|
|
* Tabs
|
|
* transplant from hexo-theme-next
|
|
* modify by Jerry
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
const postTabs = (args, content) => {
|
|
const tabBlock = /<!--\s*tab (.*?)\s*-->\n([\w\W\s\S]*?)<!--\s*endtab\s*-->/g
|
|
args = args.join(' ').split(',')
|
|
const tabName = args[0]
|
|
const tabActive = Number(args[1]) || 0
|
|
const matches = []
|
|
let match
|
|
let tabId = 0
|
|
let tabNav = ''
|
|
let tabContent = ''
|
|
let noDefault = true
|
|
|
|
!tabName && hexo.log.warn('Tabs block must have unique name!')
|
|
|
|
while ((match = tabBlock.exec(content)) !== null) {
|
|
matches.push(match[1], match[2])
|
|
}
|
|
|
|
for (let i = 0; i < matches.length; i += 2) {
|
|
const tabParameters = matches[i].split('@')
|
|
let postContent = matches[i + 1]
|
|
let tabCaption = tabParameters[0] || ''
|
|
let tabIcon = tabParameters[1] || ''
|
|
let tabHref = ''
|
|
|
|
postContent = hexo.render.renderSync({ text: postContent, engine: 'markdown' }).trim()
|
|
|
|
tabId += 1
|
|
tabHref = (tabName + ' ' + tabId).toLowerCase().split(' ').join('-');
|
|
|
|
((tabCaption.length === 0) && (tabIcon.length === 0)) && (tabCaption = tabName + ' ' + tabId)
|
|
|
|
const isOnlyicon = tabIcon.length > 0 && tabCaption.length === 0 ? ' style="text-align: center;"' : ''
|
|
const icon = tabIcon.trim()
|
|
tabIcon.length > 0 && (tabIcon = `<i class="${icon}"${isOnlyicon}></i>`)
|
|
|
|
let isActive = ''
|
|
if ((tabActive > 0 && tabActive === tabId) || (tabActive === 0 && tabId === 1)) {
|
|
isActive = ' active'
|
|
noDefault = false
|
|
}
|
|
tabNav += `<button type="button" class="tab ${isActive}" data-href="${tabHref}">${tabIcon + tabCaption.trim()}</button>`
|
|
tabContent += `<div class="tab-item-content${isActive}" id="${tabHref}">${postContent}</div>`
|
|
}
|
|
|
|
const toTop = '<div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div>'
|
|
|
|
tabNav = `<ul class="nav-tabs${noDefault ? ' no-default' : ''}">${tabNav}</ul>`
|
|
tabContent = `<div class="tab-contents">${tabContent}</div>`
|
|
|
|
return `<div class="tabs" id="${tabName.toLowerCase().split(' ').join('-')}">${tabNav + tabContent + toTop}</div>`
|
|
}
|
|
|
|
hexo.extend.tag.register('tabs', postTabs, { ends: true })
|
|
hexo.extend.tag.register('subtabs', postTabs, { ends: true })
|
|
hexo.extend.tag.register('subsubtabs', postTabs, { ends: true })
|