diff --git a/blog.config.js b/blog.config.js
index a3c52140..97f5eab6 100644
--- a/blog.config.js
+++ b/blog.config.js
@@ -69,6 +69,9 @@ const BLOG = {
// 樱花飘落特效
SAKURA: process.env.NEXT_PUBLIC_SAKURA || true, // 开关
+ // 星空雨特效 黑夜模式才会生效
+ STARRY_SKY: process.env.NEXT_PUBLIC_STARRY_SKY || false, // 开关
+
// 悬浮挂件
WIDGET_PET: process.env.NEXT_PUBLIC_WIDGET_PET || true, // 是否显示宠物挂件
WIDGET_PET_LINK: 'https://cdn.jsdelivr.net/npm/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json', // 挂件模型地址 @see https://github.com/xiazeyu/live2d-widget-models
diff --git a/components/StarrySky.js b/components/StarrySky.js
new file mode 100644
index 00000000..045dd533
--- /dev/null
+++ b/components/StarrySky.js
@@ -0,0 +1,133 @@
+/* eslint-disable */
+/**
+ * https://codepen.io/juliangarnier/pen/gmOwJX
+ * custom by hexo-theme-yun @YunYouJun
+ */
+import React from 'react'
+
+export const StarrySky = () => {
+ React.useEffect(() => {
+ dark()
+ }, [])
+ return (
+
+
+
+ )
+}
+
+/**
+ * 创建星空雨
+ * @param config
+ */
+function dark() {
+ window.requestAnimationFrame =
+ window.requestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.msRequestAnimationFrame
+ var n,
+ e,
+ i,
+ h,
+ t = 0.05,
+ s = document.getElementById('starry-sky-vixcity'),
+ o = !0,
+ a = '180,184,240',
+ r = '226,225,142',
+ d = '226,225,224',
+ c = []
+ function f() {
+ ;(n = window.innerWidth),
+ (e = window.innerHeight),
+ (i = 0.216 * n),
+ s.setAttribute('width', n),
+ s.setAttribute('height', e)
+ }
+ function u() {
+ h.clearRect(0, 0, n, e)
+ for (var t = c.length, i = 0; i < t; i++) {
+ var s = c[i]
+ s.move(), s.fadeIn(), s.fadeOut(), s.draw()
+ }
+ }
+ function y() {
+ ;(this.reset = function () {
+ ;(this.giant = m(3)),
+ (this.comet = !this.giant && !o && m(10)),
+ (this.x = l(0, n - 10)),
+ (this.y = l(0, e)),
+ (this.r = l(1.1, 2.6)),
+ (this.dx = l(t, 6 * t) + (this.comet + 1 - 1) * t * l(50, 120) + 2 * t),
+ (this.dy = -l(t, 6 * t) - (this.comet + 1 - 1) * t * l(50, 120)),
+ (this.fadingOut = null),
+ (this.fadingIn = !0),
+ (this.opacity = 0),
+ (this.opacityTresh = l(0.2, 1 - 0.4 * (this.comet + 1 - 1))),
+ (this.do = l(5e-4, 0.002) + 0.001 * (this.comet + 1 - 1))
+ }),
+ (this.fadeIn = function () {
+ this.fadingIn &&
+ ((this.fadingIn = !(this.opacity > this.opacityTresh)),
+ (this.opacity += this.do))
+ }),
+ (this.fadeOut = function () {
+ this.fadingOut &&
+ ((this.fadingOut = !(this.opacity < 0)),
+ (this.opacity -= this.do / 2),
+ (this.x > n || this.y < 0) && ((this.fadingOut = !1), this.reset()))
+ }),
+ (this.draw = function () {
+ if ((h.beginPath(), this.giant))
+ (h.fillStyle = 'rgba(' + a + ',' + this.opacity + ')'),
+ h.arc(this.x, this.y, 2, 0, 2 * Math.PI, !1)
+ else if (this.comet) {
+ ;(h.fillStyle = 'rgba(' + d + ',' + this.opacity + ')'),
+ h.arc(this.x, this.y, 1.5, 0, 2 * Math.PI, !1)
+ for (var t = 0; t < 30; t++)
+ (h.fillStyle =
+ 'rgba(' +
+ d +
+ ',' +
+ (this.opacity - (this.opacity / 20) * t) +
+ ')'),
+ h.rect(
+ this.x - (this.dx / 4) * t,
+ this.y - (this.dy / 4) * t - 2,
+ 2,
+ 2
+ ),
+ h.fill()
+ } else
+ (h.fillStyle = 'rgba(' + r + ',' + this.opacity + ')'),
+ h.rect(this.x, this.y, this.r, this.r)
+ h.closePath(), h.fill()
+ }),
+ (this.move = function () {
+ ;(this.x += this.dx),
+ (this.y += this.dy),
+ !1 === this.fadingOut && this.reset(),
+ (this.x > n - n / 4 || this.y < 0) && (this.fadingOut = !0)
+ }),
+ setTimeout(function () {
+ o = !1
+ }, 50)
+ }
+ function m(t) {
+ return Math.floor(1e3 * Math.random()) + 1 < 10 * t
+ }
+ function l(t, i) {
+ return Math.random() * (i - t) + t
+ }
+ f(),
+ window.addEventListener('resize', f, !1),
+ (function () {
+ h = s.getContext('2d')
+ for (var t = 0; t < i; t++) (c[t] = new y()), c[t].reset()
+ u()
+ })(),
+ (function t() {
+ document.getElementsByTagName('html')[0].className == 'dark' && u(),
+ window.requestAnimationFrame(t)
+ })()
+}
diff --git a/pages/_app.js b/pages/_app.js
index 0f196386..099b8514 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -26,6 +26,7 @@ import { DebugPanel } from '@/components/DebugPanel'
import { ThemeSwitch } from '@/components/ThemeSwitch'
import { Fireworks } from '@/components/Fireworks'
import { Sakura } from '@/components/Sakura'
+import { StarrySky } from '@/components/StarrySky'
import MusicPlayer from '@/components/MusicPlayer'
const Ackee = dynamic(() => import('@/components/Ackee'), { ssr: false })
@@ -50,6 +51,7 @@ const MyApp = ({ Component, pageProps }) => {
{BLOG.FACEBOOK_APP_ID && BLOG.FACEBOOK_PAGE_ID && }
{JSON.parse(BLOG.FIREWORKS) && }
{JSON.parse(BLOG.SAKURA) && }
+ {JSON.parse(BLOG.STARRY_SKY) && }
{JSON.parse(BLOG.MUSIC_PLAYER) && }
>
diff --git a/themes/matery/components/ArticleCopyright.js b/themes/matery/components/ArticleCopyright.js
index e5b56411..4bd32b7e 100644
--- a/themes/matery/components/ArticleCopyright.js
+++ b/themes/matery/components/ArticleCopyright.js
@@ -6,9 +6,6 @@ import { useEffect, useState } from 'react'
import CONFIG_MATERY from '../config_matery'
export default function ArticleCopyright () {
- if (!CONFIG_MATERY.ARTICLE_COPYRIGHT) {
- return <>>
- }
const router = useRouter()
const [path, setPath] = useState(BLOG.LINK + router.asPath)
useEffect(() => {
@@ -16,6 +13,11 @@ export default function ArticleCopyright () {
})
const { locale } = useGlobal()
+
+ if (!CONFIG_MATERY.ARTICLE_COPYRIGHT) {
+ return <>>
+ }
+
return (
@@ -37,5 +39,5 @@ export default function ArticleCopyright () {
- );
+ )
}
diff --git a/themes/matery/components/ArticleInfo.js b/themes/matery/components/ArticleInfo.js
index 1a4c9a4a..da62ac81 100644
--- a/themes/matery/components/ArticleInfo.js
+++ b/themes/matery/components/ArticleInfo.js
@@ -29,7 +29,7 @@ export const ArticleInfo = (props) => {
passHref
className="cursor-pointer whitespace-nowrap">
- 发布日期:{date}
+ 发布日期:{date}
@@ -43,5 +43,5 @@ export const ArticleInfo = (props) => {
- );
+ )
}
diff --git a/themes/matery/components/ArticleRecommend.js b/themes/matery/components/ArticleRecommend.js
index ed87337e..67620599 100644
--- a/themes/matery/components/ArticleRecommend.js
+++ b/themes/matery/components/ArticleRecommend.js
@@ -57,9 +57,9 @@ export default function ArticleRecommend({ recommendPosts, siteInfo }) {
)
- );
+ )
})}
- );
+ )
}
diff --git a/themes/matery/components/BlogPostArchive.js b/themes/matery/components/BlogPostArchive.js
index 20887d45..226f77eb 100644
--- a/themes/matery/components/BlogPostArchive.js
+++ b/themes/matery/components/BlogPostArchive.js
@@ -42,7 +42,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle }) => {
))}
- );
+ )
}
}
diff --git a/themes/matery/components/CategoryGroup.js b/themes/matery/components/CategoryGroup.js
index c88df60a..ad4e7b2a 100644
--- a/themes/matery/components/CategoryGroup.js
+++ b/themes/matery/components/CategoryGroup.js
@@ -22,10 +22,10 @@ const CategoryGroup = ({ currentCategory, categories }) => {
{category.name}({category.count})
- );
+ )
})}
- >;
+ >
}
export default CategoryGroup
diff --git a/themes/matery/components/HexoRecentComments.js b/themes/matery/components/HexoRecentComments.js
index 9c2042e6..4bdbb82f 100644
--- a/themes/matery/components/HexoRecentComments.js
+++ b/themes/matery/components/HexoRecentComments.js
@@ -39,7 +39,7 @@ const HexoRecentComments = (props) => {
)}
- );
+ )
}
export default HexoRecentComments
diff --git a/themes/matery/components/LatestPostsGroup.js b/themes/matery/components/LatestPostsGroup.js
index a6741fc2..cfb44018 100644
--- a/themes/matery/components/LatestPostsGroup.js
+++ b/themes/matery/components/LatestPostsGroup.js
@@ -57,8 +57,8 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
)
- );
+ )
})}
- >;
+ >
}
export default LatestPostsGroup
diff --git a/themes/matery/components/Logo.js b/themes/matery/components/Logo.js
index 61408026..3b615c5e 100644
--- a/themes/matery/components/Logo.js
+++ b/themes/matery/components/Logo.js
@@ -10,6 +10,6 @@ const Logo = props => {
{siteInfo?.title || BLOG.TITLE}
- );
+ )
}
export default Logo
diff --git a/themes/matery/components/MenuButtonGroupTop.js b/themes/matery/components/MenuButtonGroupTop.js
index c95fc50d..4f764ded 100644
--- a/themes/matery/components/MenuButtonGroupTop.js
+++ b/themes/matery/components/MenuButtonGroupTop.js
@@ -36,12 +36,12 @@ const MenuButtonGroupTop = (props) => {
- );
+ )
} else {
return null
}
})}
- );
+ )
}
export default MenuButtonGroupTop
diff --git a/themes/matery/components/MenuGroupCard.js b/themes/matery/components/MenuGroupCard.js
index f7e674c4..9012b936 100644
--- a/themes/matery/components/MenuGroupCard.js
+++ b/themes/matery/components/MenuGroupCard.js
@@ -34,12 +34,12 @@ const MenuGroupCard = (props) => {
- );
+ )
} else {
return null
}
})}
- );
+ )
}
export default MenuGroupCard
diff --git a/themes/matery/components/MenuList.js b/themes/matery/components/MenuList.js
index c9ace3b3..d059498c 100644
--- a/themes/matery/components/MenuList.js
+++ b/themes/matery/components/MenuList.js
@@ -41,12 +41,12 @@ const MenuList = (props) => {
{link.slot}
- );
+ )
} else {
return null
}
})}
- );
+ )
}
export default MenuList
diff --git a/themes/matery/components/NavButtonGroup.js b/themes/matery/components/NavButtonGroup.js
index d490cd7b..37d448a7 100644
--- a/themes/matery/components/NavButtonGroup.js
+++ b/themes/matery/components/NavButtonGroup.js
@@ -25,9 +25,9 @@ const NavButtonGroup = (props) => {
className='text-center w-full md:mx-6 md:w-40 md:h-14 lg:h-20 h-14 justify-center items-center flex border-2 cursor-pointer rounded-lg glassmorphism hover:bg-white hover:text-black duration-200 font-bold hover:scale-110 transform'>
{category.name}
- );
+ )
})}
- );
+ )
}
export default NavButtonGroup
diff --git a/themes/matery/components/PaginationNumber.js b/themes/matery/components/PaginationNumber.js
index 0eb0b001..0ebdade7 100644
--- a/themes/matery/components/PaginationNumber.js
+++ b/themes/matery/components/PaginationNumber.js
@@ -47,7 +47,7 @@ const PaginationNumber = ({ page, totalPage }) => {
- );
+ )
}
function getPageElement(page, currentPage, pagePrefix) {
@@ -66,7 +66,7 @@ function getPageElement(page, currentPage, pagePrefix) {
{page}
)
- );
+ )
}
function generatePages(pagePrefix, page, currentPage, totalPage) {
diff --git a/themes/matery/components/PaginationSimple.js b/themes/matery/components/PaginationSimple.js
index f773eb82..6605e64c 100644
--- a/themes/matery/components/PaginationSimple.js
+++ b/themes/matery/components/PaginationSimple.js
@@ -51,7 +51,7 @@ const PaginationSimple = ({ page, totalPage }) => {
- );
+ )
}
export default PaginationSimple
diff --git a/themes/matery/components/SideBar.js b/themes/matery/components/SideBar.js
index fd89b5e0..e1a02aac 100644
--- a/themes/matery/components/SideBar.js
+++ b/themes/matery/components/SideBar.js
@@ -18,11 +18,9 @@ const SideBar = (props) => {
const defaultLinks = [
{ icon: 'fas fa-home', name: locale.NAV.INDEX, to: '/' || '/', show: true },
- { icon: 'fas fa-tag', name: locale.COMMON.TAGS, to: '/tag', show: true },
{ icon: 'fas fa-archive', name: locale.NAV.ARCHIVE, to: '/archive', show: CONFIG_MATERY.MENU_ARCHIVE },
{ icon: 'fas fa-folder', name: locale.COMMON.CATEGORY, to: '/category', show: CONFIG_MATERY.MENU_CATEGORY },
{ icon: 'fas fa-tag', name: locale.COMMON.TAGS, to: '/tag', show: CONFIG_MATERY.MENU_TAG }
-
]
let links = [].concat(defaultLinks)
if (customNav) {
diff --git a/themes/matery/components/TagItemMiddle.js b/themes/matery/components/TagItemMiddle.js
index dd81d0ac..8da44092 100644
--- a/themes/matery/components/TagItemMiddle.js
+++ b/themes/matery/components/TagItemMiddle.js
@@ -14,7 +14,7 @@ const TagItemMiddle = ({ tag, selected = false }) => {
{tag.name + (tag.count ? `(${tag.count})` : '')}
- );
+ )
}
export default TagItemMiddle
diff --git a/themes/matery/components/TagItemMini.js b/themes/matery/components/TagItemMini.js
index 02587747..28a1d970 100644
--- a/themes/matery/components/TagItemMini.js
+++ b/themes/matery/components/TagItemMini.js
@@ -12,7 +12,7 @@ const TagItemMini = ({ tag, selected = false }) => {
{selected && } {tag.name + (tag.count ? `(${tag.count})` : '')}
- );
+ )
}
export default TagItemMini
diff --git a/themes/matery/components/TocDrawerButton.js b/themes/matery/components/TocDrawerButton.js
index 108c79e0..699bed00 100644
--- a/themes/matery/components/TocDrawerButton.js
+++ b/themes/matery/components/TocDrawerButton.js
@@ -10,10 +10,10 @@ import CONFIG_MATERY from '../config_matery'
* @constructor
*/
const TocDrawerButton = (props) => {
+ const { locale } = useGlobal()
if (!CONFIG_MATERY.WIDGET_TOC) {
return <>>
}
- const { locale } = useGlobal()
return (
)