diff --git a/components/ArticleDetail.js b/components/ArticleDetail.js
index aeb733ee..010e8c15 100644
--- a/components/ArticleDetail.js
+++ b/components/ArticleDetail.js
@@ -23,7 +23,8 @@ import { useGlobal } from '@/lib/global'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faEye, faFolderOpen } from '@fortawesome/free-solid-svg-icons'
import BlogAround from '@/components/BlogAround'
-import { useEffect, useRef } from 'react'
+import { useRef } from 'react'
+import WordCount from './WordCount'
/**
*
@@ -37,10 +38,6 @@ export default function ArticleDetail ({ post, blockMap, recommendPosts, prev, n
const { locale } = useGlobal()
const date = formatDate(post?.date?.start_date || post.createdTime, BLOG.lang)
- useEffect(() => {
- countWords()
- })
-
return (<>
@@ -181,7 +178,7 @@ export default function ArticleDetail ({ post, blockMap, recommendPosts, prev, n
{/* 评论互动 */}
-
@@ -199,42 +196,3 @@ export default function ArticleDetail ({ post, blockMap, recommendPosts, prev, n
const mapPageUrl = id => {
return 'https://www.notion.so/' + id.replace(/-/g, '')
}
-
-/**
- * 更新字数统计和阅读时间
- */
-function countWords () {
- if (window) {
- const articleElement = document.getElementById('notion-article')
- if (articleElement) {
- const articleText = deleteHtmlTag(articleElement.innerHTML)
- const wordCount = fnGetCpmisWords(articleText)
- // 阅读速度 300-500每分钟
- document.getElementById('wordCount').innerHTML = wordCount
- document.getElementById('readTime').innerHTML = Math.floor(wordCount / 400)
- }
- }
-}
-
-// 去除html标签
-function deleteHtmlTag (str) {
- str = str.replace(/<[^>]+>|&[^>]+;/g, '').trim()// 去掉所有的html标签和 之类的特殊符合
- return str
-}
-
-// 用word方式计算正文字数
-function fnGetCpmisWords (str) {
- let sLen = 0
- try {
- // eslint-disable-next-line no-irregular-whitespace
- str = str.replace(/(\r\n+|\s+| +)/g, '龘')
- // eslint-disable-next-line no-control-regex
- str = str.replace(/[\x00-\xff]/g, 'm')
- str = str.replace(/m+/g, '*')
- str = str.replace(/龘+/g, '')
- sLen = str.length
- } catch (e) {
-
- }
- return sLen
-}
diff --git a/components/BlogPostCard.js b/components/BlogPostCard.js
index 05a7ced7..2a1f5dbf 100644
--- a/components/BlogPostCard.js
+++ b/components/BlogPostCard.js
@@ -8,7 +8,7 @@ import TagItemMini from './TagItemMini'
const BlogPostCard = ({ post, tags }) => {
return (
-
@@ -41,8 +41,8 @@ const BlogPostCard = ({ post, tags }) => {
{post?.page_cover && (
-
-
+
+
)}
diff --git a/components/BlogPostListScroll.js b/components/BlogPostListScroll.js
index 29a86a47..351c4927 100644
--- a/components/BlogPostListScroll.js
+++ b/components/BlogPostListScroll.js
@@ -64,7 +64,7 @@ const BlogPostListScroll = ({ posts = [], tags, currentSearch, currentCategory,
{
handleGetMore()
}}
- className='w-full my-4 py-4 text-center cursor-pointer glassmorphism dark:text-gray-200'
+ className='w-full my-4 py-4 text-center cursor-pointer glassmorphism shadow-xl rounded-xl dark:text-gray-200'
> {hasMore ? '继续加载' : '加载完了😰'}
diff --git a/components/CategoryGroup.js b/components/CategoryGroup.js
index b21547ce..7c2759bb 100644
--- a/components/CategoryGroup.js
+++ b/components/CategoryGroup.js
@@ -10,9 +10,9 @@ const CategoryGroup = ({ currentCategory, categories }) => {
const selected = currentCategory === category
return
+ ' rounded-xl text-md w-full items-center duration-300 dark:hover:text-blue-400 hover:underline px-3 mx-2 cursor-pointer py-2 font-light'}>
{category}({categories[category]})
diff --git a/components/FloatDarkModeButton.js b/components/FloatDarkModeButton.js
index a22abdf2..e09b79c3 100644
--- a/components/FloatDarkModeButton.js
+++ b/components/FloatDarkModeButton.js
@@ -32,7 +32,7 @@ export default function FloatDarkModeButton () {
onClick={handleChangeDarkMode}
className={
(show ? 'animate__fadeInRight ' : 'hidden lg:block') +
- ' px-3.5 py-3 animate__animated animate__faster shadow-card fixed right-5 bottom-36 z-10 duration-200 text-xs cursor-pointer rounded-xl' +
+ ' px-3.5 py-3 animate__animated animate__faster shadow-card fixed right-3 bottom-36 z-10 duration-200 text-xs cursor-pointer rounded-xl' +
' text-black shadow-card dark:border-gray-500 glassmorphism dark:bg-gray-700 dark:text-gray-200'
}
>
diff --git a/components/JumpToTopButton.js b/components/JumpToTopButton.js
index 9297da01..792d9c93 100644
--- a/components/JumpToTopButton.js
+++ b/components/JumpToTopButton.js
@@ -37,7 +37,7 @@ const JumpToTopButton = ({ targetRef, showPercent = true }) => {
return () => document.removeEventListener('scroll', scrollListener)
}, [show])
- return (
+ return (
window.scrollTo({ top: 0, behavior: 'smooth' })}
className={(show ? '' : 'hidden') + ' animate__fadeInRight animate__animated animate__faster shadow-card rounded-xl glassmorphism py-1 cursor-pointer '}>
diff --git a/components/LatestPostsGroup.js b/components/LatestPostsGroup.js
index c254b93b..5ead6bd2 100644
--- a/components/LatestPostsGroup.js
+++ b/components/LatestPostsGroup.js
@@ -1,6 +1,7 @@
-import Link from 'next/link'
import BLOG from '@/blog.config'
-import { formatDateFmt } from '@/lib/formatDate'
+import { faFileAlt } from '@fortawesome/free-solid-svg-icons'
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
+import Link from 'next/link'
import { useRouter } from 'next/router'
/**
@@ -32,13 +33,11 @@ const LatestPostsGroup = ({ posts, sliceCount = 5 }) => {
return (
-
+
{post.title}
-
- {formatDateFmt(post.lastEditedTime, 'yyyy/MM/dd')}
-
)
diff --git a/components/LoadingCover.js b/components/LoadingCover.js
index 2eacf0c6..1bbc0de1 100644
--- a/components/LoadingCover.js
+++ b/components/LoadingCover.js
@@ -2,7 +2,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faSpinner } from '@fortawesome/free-solid-svg-icons'
export default function LoadingCover () {
- return (
+ return (
diff --git a/components/MenuButtonGroup.js b/components/MenuButtonGroup.js
index f564c40a..d6736511 100644
--- a/components/MenuButtonGroup.js
+++ b/components/MenuButtonGroup.js
@@ -28,7 +28,7 @@ const MenuButtonGroup = ({ allowCollapse = false }) => {
if (link.show) {
const selected = (router.pathname === link.to) || (router.asPath === link.to)
return
-
diff --git a/components/SideArea.js b/components/SideArea.js
index 0766d359..7f945890 100644
--- a/components/SideArea.js
+++ b/components/SideArea.js
@@ -1,15 +1,13 @@
-import React from 'react'
-import MenuButtonGroup from '@/components/MenuButtonGroup'
-import InfoCard from '@/components/InfoCard'
-import TagGroups from '@/components/TagGroups'
-import LatestPostsGroup from '@/components/LatestPostsGroup'
import CategoryGroup from '@/components/CategoryGroup'
+import InfoCard from '@/components/InfoCard'
+import MenuButtonGroup from '@/components/MenuButtonGroup'
import SearchInput from '@/components/SearchInput'
-import Link from 'next/link'
-import { useGlobal } from '@/lib/global'
import Toc from '@/components/Toc'
+import { useGlobal } from '@/lib/global'
+import { faAngleDoubleRight, faThList } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
-import { faAngleDoubleRight, faArchive, faTags, faThList } from '@fortawesome/free-solid-svg-icons'
+import Link from 'next/link'
+import React from 'react'
/**
* 侧边平铺
@@ -26,36 +24,26 @@ import { faAngleDoubleRight, faArchive, faTags, faThList } from '@fortawesome/fr
const SideArea = ({ title, tags, currentTag, post, posts, categories, currentCategory, currentSearch }) => {
const { locale } = useGlobal()
- return