mirror of
https://github.com/jerryc127/hexo-theme-butterfly.git
synced 2026-06-05 21:01:46 +08:00
breaking change:
1. 部分配置更改 feat: 1. 移除 messenger 聊天插件 2. 更新 fackbook 版本號 3. 增加 香港繁體、日文和韓語 4. 使用的新的複製api 代替舊的 5. 增加 umami 分析 6. 增加 umami 獲取訪問量/訪客數 7. snackbar 增加透明度 8. 文章頁下, nav fixed 下 顯示文章標題 improvement: 1. 代碼優化 2. 修改部分用語 3. 回復之前的相對時間邏輯 4. timeline tag 樣式優化 5. 優化 seo 6. 優化 artalk 的最新評論 fix: 1. tag-hide toggle 圓角問題 2. lazyload 為 false 時,artalk 無法正常加載評論的 bug 3. 修復 gallery 出現抖動的 bug
This commit is contained in:
+10
-13
@@ -82,11 +82,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
}
|
||||
|
||||
const copy = ctx => {
|
||||
if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
|
||||
document.execCommand('copy')
|
||||
const copy = async (text, ctx) => {
|
||||
try {
|
||||
await navigator.clipboard.writeText(text)
|
||||
alertInfo(ctx, GLOBAL_CONFIG.copy.success)
|
||||
} else {
|
||||
} catch (err) {
|
||||
console.error('Failed to copy: ', err)
|
||||
alertInfo(ctx, GLOBAL_CONFIG.copy.noSupport)
|
||||
}
|
||||
}
|
||||
@@ -95,14 +96,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const highlightCopyFn = (ele, clickEle) => {
|
||||
const $buttonParent = ele.parentNode
|
||||
$buttonParent.classList.add('copy-true')
|
||||
const selection = window.getSelection()
|
||||
const range = document.createRange()
|
||||
const preCodeSelector = isPrismjs ? 'pre code' : 'table .code pre'
|
||||
range.selectNodeContents($buttonParent.querySelector(`${preCodeSelector}`))
|
||||
selection.removeAllRanges()
|
||||
selection.addRange(range)
|
||||
copy(clickEle.previousElementSibling)
|
||||
selection.removeAllRanges()
|
||||
const codeElement = $buttonParent.querySelector(preCodeSelector)
|
||||
if (!codeElement) return
|
||||
copy(codeElement.innerText, clickEle.previousElementSibling)
|
||||
$buttonParent.classList.remove('copy-true')
|
||||
}
|
||||
|
||||
@@ -238,8 +235,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
gap: 5,
|
||||
isConstantSize: true,
|
||||
sizeRange: [150, 600],
|
||||
useResizeObserver: true,
|
||||
observeChildren: true,
|
||||
// useResizeObserver: true,
|
||||
// observeChildren: true,
|
||||
useTransform: true
|
||||
// useRecycle: false
|
||||
})
|
||||
|
||||
+23
-11
@@ -20,19 +20,31 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
const translateBody = (fobj) => {
|
||||
const objs = typeof fobj === 'object' ? fobj.childNodes : document.body.childNodes
|
||||
for (let i = 0; i < objs.length; i++) {
|
||||
const obj = objs.item(i)
|
||||
if ('BR|HR'.includes(obj.tagName) || obj === translateButtonObject) continue
|
||||
const nodes = typeof fobj === 'object' ? fobj.childNodes : document.body.childNodes
|
||||
|
||||
if (obj.title) obj.title = translateText(obj.title)
|
||||
if (obj.alt) obj.alt = translateText(obj.alt)
|
||||
if (obj.placeholder) obj.placeholder = translateText(obj.placeholder)
|
||||
if (obj.tagName === 'INPUT' && obj.value && obj.type !== 'text' && obj.type !== 'hidden') {
|
||||
obj.value = translateText(obj.value)
|
||||
for (const node of nodes) {
|
||||
// Skip BR, HR tags, or the translate button object
|
||||
if (['BR', 'HR'].includes(node.tagName) || node === translateButtonObject) continue
|
||||
|
||||
if (node.nodeType === Node.ELEMENT_NODE) {
|
||||
const { tagName, title, alt, placeholder, value, type } = node
|
||||
|
||||
// Translate title, alt, placeholder
|
||||
if (title) node.title = translateText(title)
|
||||
if (alt) node.alt = translateText(alt)
|
||||
if (placeholder) node.placeholder = translateText(placeholder)
|
||||
|
||||
// Translate input value except text and hidden types
|
||||
if (tagName === 'INPUT' && value && type !== 'text' && type !== 'hidden') {
|
||||
node.value = translateText(value)
|
||||
}
|
||||
|
||||
// Recursively translate child nodes
|
||||
translateBody(node)
|
||||
} else if (node.nodeType === Node.TEXT_NODE) {
|
||||
// Translate text node data
|
||||
node.data = translateText(node.data)
|
||||
}
|
||||
if (obj.nodeType === 3) obj.data = translateText(obj.data)
|
||||
else translateBody(obj)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-11
@@ -98,10 +98,10 @@
|
||||
|
||||
if (!more) return Math.floor(diffDay)
|
||||
|
||||
if (diffMonth > 24) return datePost.toISOString().slice(0, 10)
|
||||
if (diffMonth >= 3) return `${Math.floor(diffMonth)} ${dateSuffix.month}`
|
||||
if (diffDay >= 3) return `${Math.floor(diffDay)} ${dateSuffix.day}`
|
||||
if (diffHour >= 3) return `${Math.floor(diffHour)} ${dateSuffix.hour}`
|
||||
if (diffMonth > 12) return datePost.toISOString().slice(0, 10)
|
||||
if (diffMonth >= 1) return `${Math.floor(diffMonth)} ${dateSuffix.month}`
|
||||
if (diffDay >= 1) return `${Math.floor(diffDay)} ${dateSuffix.day}`
|
||||
if (diffHour >= 1) return `${Math.floor(diffHour)} ${dateSuffix.hour}`
|
||||
if (diffMin >= 1) return `${Math.floor(diffMin)} ${dateSuffix.min}`
|
||||
return dateSuffix.just
|
||||
},
|
||||
@@ -145,18 +145,19 @@
|
||||
requestAnimationFrame(animate)
|
||||
},
|
||||
|
||||
animateIn: (ele, text) => {
|
||||
animateIn: (ele, animation) => {
|
||||
ele.style.display = 'block'
|
||||
ele.style.animation = text
|
||||
ele.style.animation = animation
|
||||
},
|
||||
|
||||
animateOut: (ele, text) => {
|
||||
ele.addEventListener('animationend', function f () {
|
||||
animateOut: (ele, animation) => {
|
||||
const handleAnimationEnd = () => {
|
||||
ele.style.display = ''
|
||||
ele.style.animation = ''
|
||||
ele.removeEventListener('animationend', f)
|
||||
})
|
||||
ele.style.animation = text
|
||||
ele.removeEventListener('animationend', handleAnimationEnd)
|
||||
}
|
||||
ele.addEventListener('animationend', handleAnimationEnd)
|
||||
ele.style.animation = animation
|
||||
},
|
||||
|
||||
wrap: (selector, eleType, options) => {
|
||||
|
||||
Reference in New Issue
Block a user