This commit is contained in:
tangly1024.com
2023-11-06 16:28:01 +08:00
parent ecf7825dad
commit a0b481eaca
137 changed files with 326 additions and 383 deletions

View File

@@ -5,7 +5,7 @@ const BLOG = {
process.env.NOTION_PAGE_ID || '02ab3b8678004aa69e9e415905ef32a5', process.env.NOTION_PAGE_ID || '02ab3b8678004aa69e9e415905ef32a5',
PSEUDO_STATIC: process.env.NEXT_PUBLIC_PSEUDO_STATIC || false, // 伪静态路径开启后所有文章URL都以 .html 结尾。 PSEUDO_STATIC: process.env.NEXT_PUBLIC_PSEUDO_STATIC || false, // 伪静态路径开启后所有文章URL都以 .html 结尾。
NEXT_REVALIDATE_SECOND: process.env.NEXT_PUBLIC_REVALIDATE_SECOND || 5, // 更新内容缓存间隔 单位(秒)即每个页面有5秒的纯静态期、此期间无论多少次访问都不会抓取notion数据调大该值有助于节省Vercel资源、同时提升访问速率但也会使文章更新有延迟。 NEXT_REVALIDATE_SECOND: process.env.NEXT_PUBLIC_REVALIDATE_SECOND || 5, // 更新内容缓存间隔 单位(秒)即每个页面有5秒的纯静态期、此期间无论多少次访问都不会抓取notion数据调大该值有助于节省Vercel资源、同时提升访问速率但也会使文章更新有延迟。
THEME: process.env.NEXT_PUBLIC_THEME || 'hexo', // 当前主题在themes文件夹下可找到所有支持的主题主题名称就是文件夹名例如 example,fukasawa,gitbook,heo,hexo,landing,matery,medium,next,nobelium,plog,simple THEME: process.env.NEXT_PUBLIC_THEME || 'simple', // 当前主题在themes文件夹下可找到所有支持的主题主题名称就是文件夹名例如 example,fukasawa,gitbook,heo,hexo,landing,matery,medium,next,nobelium,plog,simple
THEME_SWITCH: process.env.NEXT_PUBLIC_THEME_SWITCH || false, // 是否显示切换主题按钮 THEME_SWITCH: process.env.NEXT_PUBLIC_THEME_SWITCH || false, // 是否显示切换主题按钮
LANG: process.env.NEXT_PUBLIC_LANG || 'zh-CN', // e.g 'zh-CN','en-US' see /lib/lang.js for more. LANG: process.env.NEXT_PUBLIC_LANG || 'zh-CN', // e.g 'zh-CN','en-US' see /lib/lang.js for more.
SINCE: 2021, // e.g if leave this empty, current year will be used. SINCE: 2021, // e.g if leave this empty, current year will be used.

View File

@@ -21,7 +21,7 @@ export async function getConfigMapFromConfigPage(allPages) {
const notionConfig = BLOG const notionConfig = BLOG
if (!allPages || !Array.isArray(allPages) || allPages.length === 0) { if (!allPages || !Array.isArray(allPages) || allPages.length === 0) {
console.warn('[Notion配置] 忽略的配置', allPages, typeof allPages) console.warn('[Notion配置] 忽略的配置')
return null return null
} }
const configPage = allPages?.find(post => { const configPage = allPages?.find(post => {
@@ -29,7 +29,7 @@ export async function getConfigMapFromConfigPage(allPages) {
}) })
if (!configPage) { if (!configPage) {
console.warn('[Notion配置]未找到配置页面', allPages, typeof allPages) console.warn('[Notion配置] 未找到配置页面')
return null return null
} }
const configPageId = configPage.id const configPageId = configPage.id
@@ -40,7 +40,7 @@ export async function getConfigMapFromConfigPage(allPages) {
const content = pageRecordMap.block[configPageId].value.content const content = pageRecordMap.block[configPageId].value.content
if (!content) { if (!content) {
console.warn('[Notion配置]未找到配置表格', pageRecordMap.block[configPageId], pageRecordMap.block[configPageId].value) console.warn('[Notion配置] 未找到配置表格', pageRecordMap.block[configPageId], pageRecordMap.block[configPageId].value)
return null return null
} }

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -8,7 +7,7 @@ import { siteConfig } from '@/lib/config'
export default function ArticleCopyright () { export default function ArticleCopyright () {
const router = useRouter() const router = useRouter()
const [path, setPath] = useState(BLOG.LINK + router.asPath) const [path, setPath] = useState(siteConfig('LINK') + router.asPath)
useEffect(() => { useEffect(() => {
setPath(window.location.href) setPath(window.location.href)
}) })

View File

@@ -1,6 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
@@ -38,7 +38,7 @@ export default function ArticleRecommend({ recommendPosts, siteInfo }) {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="flex h-40 cursor-pointer overflow-hidden"> className="flex h-40 cursor-pointer overflow-hidden">

View File

@@ -1,5 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
/** /**
* 博客归档列表 * 博客归档列表
* @param posts 所有文章 * @param posts 所有文章
@@ -29,7 +30,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle }) => {
<span className="text-gray-400">{post.date?.start_date}</span>{' '} <span className="text-gray-400">{post.date?.start_date}</span>{' '}
&nbsp; &nbsp;
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="dark:text-gray-400 dark:hover:text-red-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-red-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">

View File

@@ -2,7 +2,7 @@ import NotionPage from '@/components/NotionPage'
import Link from 'next/link' import Link from 'next/link'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import TwikooCommentCount from '@/components/TwikooCommentCount' import TwikooCommentCount from '@/components/TwikooCommentCount'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { formatDateFmt } from '@/lib/formatDate' import { formatDateFmt } from '@/lib/formatDate'
/** /**
@@ -15,7 +15,7 @@ export const BlogPostCardInfo = ({ post, showPreview, showPageCover, showSummary
<div> <div>
{/* 标题 */} {/* 标题 */}
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={`line-clamp-2 replace cursor-pointer text-2xl ${showPreview ? 'text-center' : '' className={`line-clamp-2 replace cursor-pointer text-2xl ${showPreview ? 'text-center' : ''
} leading-tight font-normal text-gray-600 dark:text-gray-100 hover:text-red-700 dark:hover:text-red-400`}> } leading-tight font-normal text-gray-600 dark:text-gray-100 hover:text-red-700 dark:hover:text-red-400`}>

View File

@@ -1,6 +1,6 @@
import ProductCard from './ProductCard' import ProductCard from './ProductCard'
import PaginationNumber from './PaginationNumber' import PaginationNumber from './PaginationNumber'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
/** /**
@@ -12,8 +12,8 @@ import BlogPostListEmpty from './BlogPostListEmpty'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const showPagination = postCount >= BLOG.POSTS_PER_PAGE const showPagination = postCount >= parseInt(siteConfig('POSTS_PER_PAGE'))
if (!posts || posts.length === 0 || page > totalPage) { if (!posts || posts.length === 0 || page > totalPage) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />
} else { } else {

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import ProductCard from './ProductCard' import ProductCard from './ProductCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
@@ -14,7 +14,7 @@ import { useEffect, useRef, useState } from 'react'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => { const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const postsToShow = getListByPage(posts, page, postsPerPage) const postsToShow = getListByPage(posts, page, postsPerPage)

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Card from '@/themes/hexo/components/Card' import Card from '@/themes/hexo/components/Card'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
@@ -16,7 +16,7 @@ const HexoRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
// import Image from 'next/image' // import Image from 'next/image'
@@ -28,7 +28,7 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
</div> </div>
</div> </div>
{latestPosts.map(post => { {latestPosts.map(post => {
const selected = currentPath === `${BLOG.SUB_PATH}/${post.slug}` const selected = currentPath === `${siteConfig('SUB_PATH')}/${post.slug}`
const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover
@@ -36,7 +36,7 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={'my-3 flex'}> className={'my-3 flex'}>

View File

@@ -1,6 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
// import Image from 'next/image' // import Image from 'next/image'
@@ -19,7 +19,7 @@ const ProductCard = ({ index, post, siteInfo }) => {
<div key={post.id} className={'group flex flex-col space-y-2 justify-between border dark:border-black bg-white dark:bg-hexo-black-gray'}> <div key={post.id} className={'group flex flex-col space-y-2 justify-between border dark:border-black bg-white dark:bg-hexo-black-gray'}>
{/* 图片封面 */} {/* 图片封面 */}
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<div className="overflow-hidden m-2"> <div className="overflow-hidden m-2">
<LazyImage priority={index === 1} src={post?.pageCoverThumbnail} className='h-auto aspect-square w-full object-cover object-center group-hover:scale-110 duration-500' /> <LazyImage priority={index === 1} src={post?.pageCoverThumbnail} className='h-auto aspect-square w-full object-cover object-center group-hover:scale-110 duration-500' />
</div> </div>

View File

@@ -6,7 +6,7 @@ import Catalog from './Catalog'
import { InfoCard } from './InfoCard' import { InfoCard } from './InfoCard'
import { AnalyticsCard } from './AnalyticsCard' import { AnalyticsCard } from './AnalyticsCard'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import Announcement from './Announcement' import Announcement from './Announcement'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
@@ -65,7 +65,7 @@ export default function SideRight(props) {
<Announcement post={notice}/> <Announcement post={notice}/>
{BLOG.COMMENT_WALINE_SERVER_URL && BLOG.COMMENT_WALINE_RECENT && <HexoRecentComments/>} {siteConfig('COMMENT_WALINE_SERVER_URL') && siteConfig('COMMENT_WALINE_RECENT') && <HexoRecentComments/>}
<div className='sticky top-20'> <div className='sticky top-20'>
{post && post.toc && post.toc.length > 1 && <Card> {post && post.toc && post.toc.length > 1 && <Card>

View File

@@ -60,7 +60,7 @@ const LayoutBase = props => {
{/* 主区块 */} {/* 主区块 */}
<main id="wrapper" className={`${CONFIG.HOME_BANNER_ENABLE ? '' : 'pt-16'} bg-hexo-background-gray dark:bg-black w-full py-8 md:px-8 lg:px-24 relative`}> <main id="wrapper" className={`${CONFIG.HOME_BANNER_ENABLE ? '' : 'pt-16'} bg-hexo-background-gray dark:bg-black w-full py-8 md:px-8 lg:px-24 relative`}>
<div id="container-inner" className={(siteConfig('LAYOUT_SIDEBAR_REVERSE') ? 'flex-row-reverse' : '') + ' w-full mx-auto lg:flex lg:space-x-4 justify-center relative z-10'} > <div id="container-inner" className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + ' w-full mx-auto lg:flex lg:space-x-4 justify-center relative z-10'} >
<div className={`${className || ''} w-full h-full max-w-screen-xl overflow-hidden`}> <div className={`${className || ''} w-full h-full max-w-screen-xl overflow-hidden`}>
<Transition <Transition

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
/** /**
@@ -24,7 +24,7 @@ export default function BlogListGroupByDate({ archiveTitle, archivePosts }) {
{post?.publishDay} {post?.publishDay}
</span>{' '} </span>{' '}
&nbsp; &nbsp;
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">
{post.title} {post.title}
</Link> </Link>
</div> </div>

View File

@@ -1,5 +1,5 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import Link from 'next/link' import Link from 'next/link'
@@ -10,7 +10,7 @@ export const BlogListPage = props => {
const { page = 1, posts, postCount } = props const { page = 1, posts, postCount } = props
const { locale } = useGlobal() const { locale } = useGlobal()
const router = useRouter() const router = useRouter()
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const currentPage = +page const currentPage = +page
const showPrev = currentPage > 1 const showPrev = currentPage > 1

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useCallback, useEffect, useRef, useState } from 'react' import { useCallback, useEffect, useRef, useState } from 'react'
import throttle from 'lodash.throttle' import throttle from 'lodash.throttle'
@@ -13,12 +13,12 @@ export const BlogListScroll = props => {
let hasMore = false let hasMore = false
const postsToShow = posts const postsToShow = posts
? Object.assign(posts).slice(0, BLOG.POSTS_PER_PAGE * page) ? Object.assign(posts).slice(0, parseInt(siteConfig('POSTS_PER_PAGE')) * page)
: [] : []
if (posts) { if (posts) {
const totalCount = posts.length const totalCount = posts.length
hasMore = page * BLOG.POSTS_PER_PAGE < totalCount hasMore = page * parseInt(siteConfig('POSTS_PER_PAGE')) < totalCount
} }
const handleGetMore = () => { const handleGetMore = () => {
if (!hasMore) return if (!hasMore) return

View File

@@ -1,9 +1,8 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import CONFIG from '../config' import CONFIG from '../config'
import Link from 'next/link' import Link from 'next/link'
import TwikooCommentCount from '@/components/TwikooCommentCount' import TwikooCommentCount from '@/components/TwikooCommentCount'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
const BlogPostCard = ({ post }) => { const BlogPostCard = ({ post }) => {
const showPageCover = CONFIG.POST_LIST_COVER && post?.pageCoverThumbnail const showPageCover = CONFIG.POST_LIST_COVER && post?.pageCoverThumbnail
@@ -42,7 +41,7 @@ const BlogPostCard = ({ post }) => {
{/* 图片封面 */} {/* 图片封面 */}
{showPageCover && ( {showPageCover && (
<div className="md:w-5/12 w-full h-44 overflow-hidden p-1"> <div className="md:w-5/12 w-full h-44 overflow-hidden p-1">
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<LazyImage src={post?.pageCoverThumbnail} className='w-full bg-cover hover:scale-110 duration-200' /> <LazyImage src={post?.pageCoverThumbnail} className='w-full bg-cover hover:scale-110 duration-200' />
</Link> </Link>
</div> </div>

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import { RecentComments } from '@waline/client' import { RecentComments } from '@waline/client'
@@ -13,7 +13,7 @@ const ExampleRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import DarkModeButton from '@/components/DarkModeButton' import DarkModeButton from '@/components/DarkModeButton'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
@@ -16,10 +15,10 @@ export const Footer = (props) => {
<div className="md:p-0 text-center md:text-right text-xs"> <div className="md:p-0 text-center md:text-right text-xs">
{/* 右侧链接 */} {/* 右侧链接 */}
{/* <a href="#" className="text-black no-underline hover:underline">Privacy Policy</a> */} {/* <a href="#" className="text-black no-underline hover:underline">Privacy Policy</a> */}
{BLOG.BEI_AN && (<a href="https://beian.miit.gov.cn/" className="text-black dark:text-gray-200 no-underline hover:underline ml-4">{BLOG.BEI_AN} </a>)} {siteConfig('BEI_AN') && (<a href="https://beian.miit.gov.cn/" className="text-black dark:text-gray-200 no-underline hover:underline ml-4">{siteConfig('BEI_AN')} </a>)}
<span className='dark:text-gray-200 no-underline ml-4'> <span className='dark:text-gray-200 no-underline ml-4'>
Powered by Powered by
<a href="https://github.com/tangly1024/NotionNext" className=' hover:underline'> NotionNext {BLOG.VERSION} </a> <a href="https://github.com/tangly1024/NotionNext" className=' hover:underline'> NotionNext {siteConfig('VERSION')} </a>
</span> </span>
</div> </div>
</div> </div>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
@@ -51,7 +51,7 @@ export const SideBar = (props) => {
<Announcement post={notice}/> <Announcement post={notice}/>
{BLOG.COMMENT_WALINE_SERVER_URL && BLOG.COMMENT_WALINE_RECENT && <aside className="rounded shadow overflow-hidden mb-6"> {siteConfig('COMMENT_WALINE_SERVER_URL') && siteConfig('COMMENT_WALINE_RECENT') && <aside className="rounded shadow overflow-hidden mb-6">
<h3 className="text-sm bg-gray-100 text-gray-700 dark:bg-hexo-black-gray dark:text-gray-200 py-3 px-4 dark:border-hexo-black-gray border-b">{locale.COMMON.RECENT_COMMENTS}</h3> <h3 className="text-sm bg-gray-100 text-gray-700 dark:bg-hexo-black-gray dark:text-gray-200 py-3 px-4 dark:border-hexo-black-gray border-b">{locale.COMMON.RECENT_COMMENTS}</h3>
<div className="p-4"> <div className="p-4">

View File

@@ -1,6 +1,5 @@
'use client' 'use client'
import BLOG from '@/blog.config'
import CONFIG from './config' import CONFIG from './config'
import { useEffect } from 'react' import { useEffect } from 'react'
import { Header } from './components/Header' import { Header } from './components/Header'
@@ -27,6 +26,7 @@ import { useRouter } from 'next/router'
import { Transition } from '@headlessui/react' import { Transition } from '@headlessui/react'
import { Style } from './style' import { Style } from './style'
import CommonHead from '@/components/CommonHead' import CommonHead from '@/components/CommonHead'
import { siteConfig } from '@/lib/config'
/** /**
* 基础布局框架 * 基础布局框架
@@ -67,7 +67,7 @@ const LayoutBase = props => {
{/* 标题栏 */} {/* 标题栏 */}
<Title {...props} /> <Title {...props} />
<div id='container-wrapper' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'flex-row-reverse' : '') + 'relative container mx-auto justify-center md:flex items-start py-8 px-2'}> <div id='container-wrapper' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + 'relative container mx-auto justify-center md:flex items-start py-8 px-2'}>
{/* 内容 */} {/* 内容 */}
<div className='w-full max-w-3xl xl:px-14 lg:px-4 '> <div className='w-full max-w-3xl xl:px-14 lg:px-4 '>
@@ -134,7 +134,7 @@ const LayoutPostList = props => {
} }
return ( return (
<LayoutBase {...props} slotTop={slotTop}> <LayoutBase {...props} slotTop={slotTop}>
{BLOG.POST_LIST_STYLE === 'page' ? <BlogListPage {...props} /> : <BlogListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogListPage {...props} /> : <BlogListScroll {...props} />}
</LayoutBase> </LayoutBase>
) )
} }

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import CONFIG_FUKA from '../config' import CONFIG_FUKA from '../config'
@@ -25,10 +25,10 @@ const BlogCard = ({ index, post, showSummary, siteInfo }) => {
{/* 封面图 */} {/* 封面图 */}
{showPageCover && ( {showPageCover && (
<div className="flex-grow mb-3 w-full duration-200 cursor-pointer transform overflow-hidden"> <div className="flex-grow mb-3 w-full duration-200 cursor-pointer transform overflow-hidden">
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<LazyImage <LazyImage
src={post?.pageCoverThumbnail} src={post?.pageCoverThumbnail}
alt={post?.title || BLOG.TITLE} alt={post?.title || siteConfig('TITLE')}
className="object-cover w-full h-full hover:scale-125 transform duration-500" className="object-cover w-full h-full hover:scale-125 transform duration-500"
/> />
</Link> </Link>
@@ -37,7 +37,7 @@ const BlogCard = ({ index, post, showSummary, siteInfo }) => {
{/* 文字部分 */} {/* 文字部分 */}
<div className="flex flex-col w-full"> <div className="flex flex-col w-full">
<Link passHref href={`${BLOG.SUB_PATH}/${post.slug}`} <Link passHref href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className={`break-words cursor-pointer font-bold hover:underline text-xl ${showPreview ? 'justify-center' : 'justify-start'} leading-tight text-gray-700 dark:text-gray-100 hover:text-blue-500 dark:hover:text-blue-400`} className={`break-words cursor-pointer font-bold hover:underline text-xl ${showPreview ? 'justify-center' : 'justify-start'} leading-tight text-gray-700 dark:text-gray-100 hover:text-blue-500 dark:hover:text-blue-400`}
> >
{post.title} {post.title}

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { deepClone, isBrowser } from '@/lib/utils' import { deepClone, isBrowser } from '@/lib/utils'
import BlogCard from './BlogCard' import BlogCard from './BlogCard'
import BlogPostListEmpty from './BlogListEmpty' import BlogPostListEmpty from './BlogListEmpty'
@@ -15,7 +15,7 @@ import { AdSlot } from '@/components/GoogleAdsense'
* @constructor * @constructor
*/ */
const BlogListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const BlogListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const showNext = page < totalPage const showNext = page < totalPage
const [columns, setColumns] = useState(calculateColumns()) const [columns, setColumns] = useState(calculateColumns())
@@ -59,7 +59,7 @@ const BlogListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
<BlogCard index={posts.indexOf(post)} key={post.id} post={post} siteInfo={siteInfo} /> <BlogCard index={posts.indexOf(post)} key={post.id} post={post} siteInfo={siteInfo} />
</div> </div>
))} ))}
{BLOG.ADSENSE_GOOGLE_ID && ( {siteConfig('ADSENSE_GOOGLE_ID') && (
<div className='p-3'> <div className='p-3'>
<AdSlot type='flow'/> <AdSlot type='flow'/>
</div> </div>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useEffect, useRef, useState } from 'react' import { useEffect, useRef, useState } from 'react'
import BlogCard from './BlogCard' import BlogCard from './BlogCard'
import BlogPostListEmpty from './BlogListEmpty' import BlogPostListEmpty from './BlogListEmpty'
@@ -21,12 +21,12 @@ const BlogListScroll = props => {
let hasMore = false let hasMore = false
const postsToShow = posts const postsToShow = posts
? Object.assign(posts).slice(0, BLOG.POSTS_PER_PAGE * page) ? Object.assign(posts).slice(0, parseInt(siteConfig('POSTS_PER_PAGE')) * page)
: [] : []
if (posts) { if (posts) {
const totalCount = posts.length const totalCount = posts.length
hasMore = page * BLOG.POSTS_PER_PAGE < totalCount hasMore = page * parseInt(siteConfig('POSTS_PER_PAGE')) < totalCount
} }
const handleGetMore = () => { const handleGetMore = () => {
if (!hasMore) return if (!hasMore) return

View File

@@ -1,5 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
/** /**
* 博客归档 * 博客归档
* @param posts 所有文章 * @param posts 所有文章
@@ -29,7 +30,7 @@ const BlogArchiveItem = ({ posts = [], archiveTitle }) => {
<span className="text-gray-400">{post.date?.start_date}</span>{' '} <span className="text-gray-400">{post.date?.start_date}</span>{' '}
&nbsp; &nbsp;
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
function SiteInfo ({ title }) { function SiteInfo ({ title }) {
@@ -11,14 +10,14 @@ function SiteInfo ({ title }) {
<footer <footer
className='relative leading-6 justify-start w-full text-gray-600 dark:text-gray-300 text-xs font-sans' className='relative leading-6 justify-start w-full text-gray-600 dark:text-gray-300 text-xs font-sans'
> >
<span> © {`${copyrightDate}`} <span> <a href={BLOG.LINK}> <i className='mx-1 animate-pulse fas fa-heart'/> {siteConfig('AUTHOR')}</a>. <br /></span> <span> © {`${copyrightDate}`} <span> <a href={siteConfig('LINK')}> <i className='mx-1 animate-pulse fas fa-heart'/> {siteConfig('AUTHOR')}</a>. <br /></span>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br/></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br/></>}
<span className='hidden busuanzi_container_site_pv'> <i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span> <span className='hidden busuanzi_container_site_pv'> <i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span>
<span className='pl-2 hidden busuanzi_container_site_uv'> <i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span> <span className='pl-2 hidden busuanzi_container_site_uv'> <i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span>
<br /> <br />
<span className='text-xs font-serif'> Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline'>NotionNext {BLOG.VERSION}</a></span><br /></span> <span className='text-xs font-serif'> Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline'>NotionNext {siteConfig('VERSION')}</a></span><br /></span>
<h1>{title}</h1> <h1>{title}</h1>
</footer> </footer>
) )

View File

@@ -3,7 +3,6 @@
import CONFIG from './config' import CONFIG from './config'
import TopNav from './components/TopNav' import TopNav from './components/TopNav'
import AsideLeft from './components/AsideLeft' import AsideLeft from './components/AsideLeft'
import BLOG from '@/blog.config'
import { isBrowser } from '@/lib/utils' import { isBrowser } from '@/lib/utils'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import BlogListPage from './components/BlogListPage' import BlogListPage from './components/BlogListPage'
@@ -21,6 +20,7 @@ import { AdSlot } from '@/components/GoogleAdsense'
import { Style } from './style' import { Style } from './style'
import replaceSearchResult from '@/components/Mark' import replaceSearchResult from '@/components/Mark'
import CommonHead from '@/components/CommonHead' import CommonHead from '@/components/CommonHead'
import { siteConfig } from '@/lib/config'
const Live2D = dynamic(() => import('@/components/Live2D')) const Live2D = dynamic(() => import('@/components/Live2D'))
@@ -72,7 +72,7 @@ const LayoutBase = (props) => {
<TopNav {...props} /> <TopNav {...props} />
<div className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'flex-row-reverse' : '') + ' flex'}> <div className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + ' flex'}>
{/* 侧边抽屉 */} {/* 侧边抽屉 */}
<AsideLeft {...props} slot={leftAreaSlot} /> <AsideLeft {...props} slot={leftAreaSlot} />
@@ -124,7 +124,7 @@ const LayoutIndex = (props) => {
*/ */
const LayoutPostList = (props) => { const LayoutPostList = (props) => {
return <LayoutBase {...props}> return <LayoutBase {...props}>
{BLOG.POST_LIST_STYLE === 'page' ? <BlogListPage {...props} /> : <BlogListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogListPage {...props} /> : <BlogListScroll {...props} />}
</LayoutBase> </LayoutBase>
} }

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
/** /**
@@ -23,7 +23,7 @@ export default function BlogArchiveItem({ archiveTitle, archivePosts }) {
</span>{' '} </span>{' '}
&nbsp; &nbsp;
<Link passHref href={`${BLOG.SUB_PATH}/${post.slug}`} <Link passHref href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">
{post.title} {post.title}
</Link> </Link>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -8,7 +8,7 @@ const BlogPostCard = ({ post, className }) => {
return ( return (
<div key={post.id} className={`${className} py-1 cursor-pointer px-2 hover:bg-gray-50 rounded-md dark:hover:bg-gray-600 ${currentSelected ? 'bg-green-50 text-green-500' : ''}`}> <div key={post.id} className={`${className} py-1 cursor-pointer px-2 hover:bg-gray-50 rounded-md dark:hover:bg-gray-600 ${currentSelected ? 'bg-green-50 text-green-500' : ''}`}>
<div className="flex flex-col w-full select-none"> <div className="flex flex-col w-full select-none">
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref>
{post.title} {post.title}
</Link> </Link>
</div> </div>

View File

@@ -1,5 +1,5 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import NavPostListEmpty from './NavPostListEmpty' import NavPostListEmpty from './NavPostListEmpty'
import PaginationSimple from './PaginationSimple' import PaginationSimple from './PaginationSimple'
@@ -12,7 +12,7 @@ import PaginationSimple from './PaginationSimple'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
if (!posts || posts.length === 0) { if (!posts || posts.length === 0) {
return <NavPostListEmpty /> return <NavPostListEmpty />

View File

@@ -1,5 +1,3 @@
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
const Footer = ({ siteInfo }) => { const Footer = ({ siteInfo }) => {
@@ -15,13 +13,13 @@ const Footer = ({ siteInfo }) => {
<hr className='pb-2' /> <hr className='pb-2' />
<div className='flex justify-center'> <div className='flex justify-center'>
<div><i className='mx-1 animate-pulse fas fa-heart' /> <a href={BLOG.LINK} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br /></div> <div><i className='mx-1 animate-pulse fas fa-heart' /> <a href={siteConfig('LINK')} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br /></div>
© {`${copyrightDate}`} © {`${copyrightDate}`}
</div> </div>
<div className='text-xs font-serif'>Powered By <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext</a></div> <div className='text-xs font-serif'>Powered By <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext</a></div>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br /></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br /></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import Router from 'next/router' import Router from 'next/router'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
@@ -12,7 +11,7 @@ const InfoCard = (props) => {
<LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/> <LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/>
</div> </div>
<div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div> <div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div>
<div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{BLOG.BIO}</div> <div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{siteConfig('BIO')}</div>
<SocialButton/> <SocialButton/>
</div> </div>
</div> </div>

View File

@@ -11,7 +11,6 @@ import TopNavBar from './components/TopNavBar'
import SearchInput from './components/SearchInput' import SearchInput from './components/SearchInput'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import BLOG from '@/blog.config'
import NavPostList from './components/NavPostList' import NavPostList from './components/NavPostList'
import ArticleInfo from './components/ArticleInfo' import ArticleInfo from './components/ArticleInfo'
import Catalog from './components/Catalog' import Catalog from './components/Catalog'
@@ -35,6 +34,7 @@ import BlogArchiveItem from './components/BlogArchiveItem'
import BlogPostListPage from './components/BlogPostListPage' import BlogPostListPage from './components/BlogPostListPage'
import Link from 'next/link' import Link from 'next/link'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import { siteConfig } from '@/lib/config'
const WWAds = dynamic(() => import('@/components/WWAds'), { ssr: false }) const WWAds = dynamic(() => import('@/components/WWAds'), { ssr: false })
// 主题全局变量 // 主题全局变量
@@ -70,7 +70,7 @@ const LayoutBase = (props) => {
{/* 顶部导航栏 */} {/* 顶部导航栏 */}
<TopNavBar {...props} /> <TopNavBar {...props} />
<main id='wrapper' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'flex-row-reverse' : '') + 'relative flex justify-between w-full h-full mx-auto'}> <main id='wrapper' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + 'relative flex justify-between w-full h-full mx-auto'}>
{/* 左侧推拉抽屉 */} {/* 左侧推拉抽屉 */}
<div className={'font-sans hidden md:block border-r dark:border-transparent relative z-10 '}> <div className={'font-sans hidden md:block border-r dark:border-transparent relative z-10 '}>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -8,7 +7,7 @@ import { siteConfig } from '@/lib/config'
export default function ArticleCopyright () { export default function ArticleCopyright () {
const router = useRouter() const router = useRouter()
const [path, setPath] = useState(BLOG.LINK + router.asPath) const [path, setPath] = useState(siteConfig('LINK') + router.asPath)
useEffect(() => { useEffect(() => {
setPath(window.location.href) setPath(window.location.href)
}) })

View File

@@ -1,8 +1,8 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
/** /**
* 关联推荐文章 * 关联推荐文章
@@ -43,7 +43,7 @@ export default function ArticleRecommend({ recommendPosts, siteInfo }) {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="flex h-40 cursor-pointer overflow-hidden rounded-2xl"> className="flex h-40 cursor-pointer overflow-hidden rounded-2xl">

View File

@@ -1,8 +1,8 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config'
import CONFIG from '../config' import CONFIG from '../config'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
/** /**
* 博客归档列表 * 博客归档列表
* @param posts 所有文章 * @param posts 所有文章
@@ -34,7 +34,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle, siteInfo }) => {
{/* 图片封面 */} {/* 图片封面 */}
{showPageCover && ( {showPageCover && (
<div> <div>
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<LazyImage className={'rounded-xl bg-center bg-cover w-40 h-24'} src={post?.pageCoverThumbnail}/> <LazyImage className={'rounded-xl bg-center bg-cover w-40 h-24'} src={post?.pageCoverThumbnail}/>
</Link> </Link>
</div> </div>
@@ -53,7 +53,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle, siteInfo }) => {
{/* 标题 */} {/* 标题 */}
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={' group-hover:text-indigo-700 group-hover:dark:text-indigo-400 text-black dark:text-gray-100 dark:group-hover:text-yellow-600 line-clamp-2 replace cursor-pointer text-xl font-extrabold leading-tight'}> className={' group-hover:text-indigo-700 group-hover:dark:text-indigo-400 text-black dark:text-gray-100 dark:group-hover:text-yellow-600 line-clamp-2 replace cursor-pointer text-xl font-extrabold leading-tight'}>
<span className='menu-link '>{post.title}</span> <span className='menu-link '>{post.title}</span>

View File

@@ -1,8 +1,8 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
const BlogPostCard = ({ index, post, showSummary, siteInfo }) => { const BlogPostCard = ({ index, post, showSummary, siteInfo }) => {
const showPreview = CONFIG.POST_LIST_PREVIEW && post.blockMap const showPreview = CONFIG.POST_LIST_PREVIEW && post.blockMap
@@ -22,7 +22,7 @@ const BlogPostCard = ({ index, post, showSummary, siteInfo }) => {
{/* 图片封面 */} {/* 图片封面 */}
{showPageCover && ( {showPageCover && (
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<div className="w-full md:w-5/12 2xl:w-full overflow-hidden"> <div className="w-full md:w-5/12 2xl:w-full overflow-hidden">
<LazyImage priority={index === 0} src={post?.pageCoverThumbnail} alt={post?.title} className='h-60 w-full object-cover group-hover:scale-105 group-hover:brightness-75 transition-all duration-300' /> <LazyImage priority={index === 0} src={post?.pageCoverThumbnail} alt={post?.title} className='h-60 w-full object-cover group-hover:scale-105 group-hover:brightness-75 transition-all duration-300' />
</div> </div>
@@ -42,7 +42,7 @@ const BlogPostCard = ({ index, post, showSummary, siteInfo }) => {
{/* 标题 */} {/* 标题 */}
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={' group-hover:text-indigo-700 dark:hover:text-yellow-700 dark:group-hover:text-yellow-600 text-black dark:text-gray-100 line-clamp-2 replace cursor-pointer text-xl font-extrabold leading-tight'}> className={' group-hover:text-indigo-700 dark:hover:text-yellow-700 dark:group-hover:text-yellow-600 text-black dark:text-gray-100 line-clamp-2 replace cursor-pointer text-xl font-extrabold leading-tight'}>
<span className='menu-link '>{post.title}</span> <span className='menu-link '>{post.title}</span>

View File

@@ -1,7 +1,7 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import PaginationNumber from './PaginationNumber' import PaginationNumber from './PaginationNumber'
import BLOG from '@/blog.config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { siteConfig } from '@/lib/config'
/** /**
* 文章列表分页表格 * 文章列表分页表格
@@ -12,8 +12,8 @@ import BlogPostListEmpty from './BlogPostListEmpty'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const showPagination = postCount >= BLOG.POSTS_PER_PAGE const showPagination = postCount >= parseInt(siteConfig('POSTS_PER_PAGE'))
if (!posts || posts.length === 0 || page > totalPage) { if (!posts || posts.length === 0 || page > totalPage) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />
} else { } else {

View File

@@ -1,10 +1,10 @@
import BLOG from '@/blog.config'
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useEffect, useRef, useState } from 'react' import { useEffect, useRef, useState } from 'react'
import CONFIG from '../config' import CONFIG from '../config'
import { getListByPage } from '@/lib/utils' import { getListByPage } from '@/lib/utils'
import { siteConfig } from '@/lib/config'
/** /**
* 博客列表滚动分页 * 博客列表滚动分页
@@ -14,7 +14,7 @@ import { getListByPage } from '@/lib/utils'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => { const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const postsToShow = getListByPage(posts, page, postsPerPage) const postsToShow = getListByPage(posts, page, postsPerPage)

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
@@ -29,18 +28,18 @@ const Footer = ({ title }) => {
<div id='footer-bottom' className='w-full h-20 flex flex-col p-3 lg:flex-row justify-between px-6 items-center bg-[#f1f3f7] dark:bg-[#30343f]'> <div id='footer-bottom' className='w-full h-20 flex flex-col p-3 lg:flex-row justify-between px-6 items-center bg-[#f1f3f7] dark:bg-[#30343f]'>
<div id='footer-bottom-left'> <div id='footer-bottom-left'>
NotionNext {BLOG.VERSION} <i className='fas fa-copyright' /> {`${copyrightDate}`} <i className='mx-1 animate-pulse fas fa-heart' /> <a href={BLOG.LINK} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>. NotionNext {siteConfig('VERSION')} <i className='fas fa-copyright' /> {`${copyrightDate}`} <i className='mx-1 animate-pulse fas fa-heart' /> <a href={siteConfig('LINK')} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.
</div> </div>
<div id='footer-bottom-right'> <div id='footer-bottom-right'>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span>
<span className='pl-2 hidden busuanzi_container_site_uv'> <span className='pl-2 hidden busuanzi_container_site_uv'>
<i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span> <i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span>
{/* <h1 className='text-xs pt-4 text-light-400 dark:text-gray-400'>{title} {BLOG.BIO && <>|</>} {BLOG.BIO}</h1> */} {/* <h1 className='text-xs pt-4 text-light-400 dark:text-gray-400'>{title} {siteConfig('BIO') && <>|</>} {siteConfig('BIO')}</h1> */}
</div> </div>
</div> </div>

View File

@@ -1,8 +1,7 @@
// import Image from 'next/image' // import Image from 'next/image'
import BLOG from '@/blog.config'
import { ArrowSmallRight, PlusSmall } from '@/components/HeroIcons' import { ArrowSmallRight, PlusSmall } from '@/components/HeroIcons'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { useImperativeHandle, useRef, useState } from 'react' import { useImperativeHandle, useRef, useState } from 'react'
@@ -70,7 +69,7 @@ function Banner(props) {
function handleClickBanner() { function handleClickBanner() {
const randomIndex = Math.floor(Math.random() * latestPosts.length) const randomIndex = Math.floor(Math.random() * latestPosts.length)
const randomPost = latestPosts[randomIndex] const randomPost = latestPosts[randomIndex]
router.push(`${BLOG.SUB_PATH}/${randomPost?.slug}`) router.push(`${siteConfig('SUB_PATH')}/${randomPost?.slug}`)
} }
return ( return (
@@ -233,7 +232,7 @@ function TopGroup(props) {
> >
{topPosts?.map((p, index) => { {topPosts?.map((p, index) => {
return ( return (
<Link href={`${BLOG.SUB_PATH}/${p?.slug}`} key={index}> <Link href={`${siteConfig('SUB_PATH')}/${p?.slug}`} key={index}>
<div className="cursor-pointer h-[164px] group relative flex flex-col w-52 xl:w-full overflow-hidden shadow bg-white dark:bg-black dark:text-white rounded-xl"> <div className="cursor-pointer h-[164px] group relative flex flex-col w-52 xl:w-full overflow-hidden shadow bg-white dark:bg-black dark:text-white rounded-xl">
<LazyImage <LazyImage
priority={index === 0} priority={index === 0}

View File

@@ -1,9 +1,9 @@
import BLOG from '@/blog.config'
import Card from '@/themes/hexo/components/Card' import Card from '@/themes/hexo/components/Card'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { RecentComments } from '@waline/client' import { RecentComments } from '@waline/client'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { siteConfig } from '@/lib/config'
/** /**
* @see https://waline.js.org/guide/get-started.html * @see https://waline.js.org/guide/get-started.html
@@ -16,7 +16,7 @@ const HexoRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -1,5 +1,5 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
/** /**
@@ -22,7 +22,7 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
return ( return (
(<Link key={post.id} passHref (<Link key={post.id} passHref
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className={'my-3 flex flex-col w-full'}> className={'my-3 flex flex-col w-full'}>

View File

@@ -1,5 +1,5 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
// import Image from 'next/image' // import Image from 'next/image'
import Link from 'next/link' import Link from 'next/link'
@@ -28,7 +28,7 @@ export default function LatestPostsGroupMini ({ latestPosts, siteInfo }) {
</div> </div>
</div> </div>
{latestPosts.map(post => { {latestPosts.map(post => {
const selected = currentPath === `${BLOG.SUB_PATH}/${post.slug}` const selected = currentPath === `${siteConfig('SUB_PATH')}/${post.slug}`
const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover
@@ -36,7 +36,7 @@ export default function LatestPostsGroupMini ({ latestPosts, siteInfo }) {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={'my-3 flex'}> className={'my-3 flex'}>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { Home } from '@/components/HeroIcons' import { Home } from '@/components/HeroIcons'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import Link from 'next/link' import Link from 'next/link'
@@ -12,7 +11,7 @@ const Logo = props => {
<LazyImage src={siteInfo?.icon} width={24} height={24} alt={siteConfig('AUTHOR')} className='mr-4 hidden md:block' /> <LazyImage src={siteInfo?.icon} width={24} height={24} alt={siteConfig('AUTHOR')} className='mr-4 hidden md:block' />
<div id='logo-text' className='group rounded-2xl flex-none relative'> <div id='logo-text' className='group rounded-2xl flex-none relative'>
<div className='group-hover:opacity-0 opacity-100 visible group-hover:invisible text-lg my-auto rounded dark:border-white duration-200'> <div className='group-hover:opacity-0 opacity-100 visible group-hover:invisible text-lg my-auto rounded dark:border-white duration-200'>
{siteConfig('TITLE') || BLOG.TITLE} {siteConfig('TITLE') }
</div> </div>
<div className='flex justify-center rounded-2xl group-hover:bg-indigo-600 w-full group-hover:opacity-100 opacity-0 invisible group-hover:visible absolute top-0 py-1 duration-200'> <div className='flex justify-center rounded-2xl group-hover:bg-indigo-600 w-full group-hover:opacity-100 opacity-0 invisible group-hover:visible absolute top-0 py-1 duration-200'>
<Home className={'w-6 h-6 stroke-white stroke-2 '}/> <Home className={'w-6 h-6 stroke-white stroke-2 '}/>

View File

@@ -8,7 +8,6 @@ import SlideOver from './SlideOver'
import ReadingProgress from './ReadingProgress' import ReadingProgress from './ReadingProgress'
import { MenuListTop } from './MenuListTop' import { MenuListTop } from './MenuListTop'
import { isBrowser } from '@/lib/utils' import { isBrowser } from '@/lib/utils'
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
/** /**
@@ -141,14 +140,14 @@ const NavBar = props => {
{/* 中间菜单 */} {/* 中间菜单 */}
<div id='nav-bar-swipe' className={`hidden lg:flex flex-grow flex-col items-center justify-center h-full relative w-full ${activeIndex === 0 ? 'fade-in-down' : 'fade-in-up'}`}> <div id='nav-bar-swipe' className={`hidden lg:flex flex-grow flex-col items-center justify-center h-full relative w-full ${activeIndex === 0 ? 'fade-in-down' : 'fade-in-up'}`}>
{activeIndex === 0 && <MenuListTop {...props} />} {activeIndex === 0 && <MenuListTop {...props} />}
{activeIndex === 1 && <h1 className='font-bold text-center text-light-400 dark:text-gray-400'>{siteConfig('AUTHOR') || siteConfig('TITLE')} {siteConfig('BIO') && <>|</>} {BLOG.BIO}</h1>} {activeIndex === 1 && <h1 className='font-bold text-center text-light-400 dark:text-gray-400'>{siteConfig('AUTHOR') || siteConfig('TITLE')} {siteConfig('BIO') && <>|</>} {siteConfig('BIO')}</h1>}
</div> </div>
{/* 右侧固定 */} {/* 右侧固定 */}
<div className='flex flex-shrink-0 justify-center items-center'> <div className='flex flex-shrink-0 justify-center items-center'>
<RandomPostButton {...props} /> <RandomPostButton {...props} />
<SearchButton {...props}/> <SearchButton {...props}/>
{!JSON.parse(BLOG.THEME_SWITCH) && <div className='hidden md:block'><DarkModeButton {...props} /></div>} {!JSON.parse(siteConfig('THEME_SWITCH')) && <div className='hidden md:block'><DarkModeButton {...props} /></div>}
<ReadingProgress /> <ReadingProgress />
{/* 移动端菜单按钮 */} {/* 移动端菜单按钮 */}

View File

@@ -1,5 +1,5 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import NotionIcon from '@/components/NotionIcon' import NotionIcon from '@/components/NotionIcon'
import WavesArea from './WavesArea' import WavesArea from './WavesArea'
import { HashTag } from '@/components/HeroIcons' import { HashTag } from '@/components/HeroIcons'
@@ -90,7 +90,7 @@ export default function PostHeader({ post, siteInfo }) {
</div> </div>
{JSON.parse(BLOG.ANALYTICS_BUSUANZI_ENABLE) && <div className="busuanzi_container_page_pv font-light mr-2"> {JSON.parse(siteConfig('ANALYTICS_BUSUANZI_ENABLE')) && <div className="busuanzi_container_page_pv font-light mr-2">
<i className="fa-solid fa-fire-flame-curved"></i> <span className="mr-2 busuanzi_value_page_pv" /> <i className="fa-solid fa-fire-flame-curved"></i> <span className="mr-2 busuanzi_value_page_pv" />
</div>} </div>}
</section> </section>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -15,7 +15,7 @@ export default function RandomPostButton(props) {
function handleClick() { function handleClick() {
const randomIndex = Math.floor(Math.random() * latestPosts.length) const randomIndex = Math.floor(Math.random() * latestPosts.length)
const randomPost = latestPosts[randomIndex] const randomPost = latestPosts[randomIndex]
router.push(`${BLOG.SUB_PATH}/${randomPost?.slug}`) router.push(`${siteConfig('SUB_PATH')}/${randomPost?.slug}`)
} }
return ( return (

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import AlgoliaSearchModal from '@/components/AlgoliaSearchModal' import AlgoliaSearchModal from '@/components/AlgoliaSearchModal'
@@ -14,7 +14,7 @@ export default function SearchButton(props) {
const searchModal = useRef(null) const searchModal = useRef(null)
function handleSearch() { function handleSearch() {
if (BLOG.ALGOLIA_APP_ID) { if (siteConfig('ALGOLIA_APP_ID')) {
searchModal.current.openSearch() searchModal.current.openSearch()
} else { } else {
router.push('/search') router.push('/search')

View File

@@ -13,7 +13,6 @@ import Footer from './components/Footer'
import SideRight from './components/SideRight' import SideRight from './components/SideRight'
import NavBar from './components/NavBar' import NavBar from './components/NavBar'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import BlogPostListPage from './components/BlogPostListPage' import BlogPostListPage from './components/BlogPostListPage'
import BlogPostListScroll from './components/BlogPostListScroll' import BlogPostListScroll from './components/BlogPostListScroll'
import Hero from './components/Hero' import Hero from './components/Hero'
@@ -130,7 +129,7 @@ const LayoutIndex = props => {
<div id="post-outer-wrapper" className="px-5 md:px-0"> <div id="post-outer-wrapper" className="px-5 md:px-0">
{/* 文章分类条 */} {/* 文章分类条 */}
<CategoryBar {...props} /> <CategoryBar {...props} />
{BLOG.POST_LIST_STYLE === 'page' {siteConfig('POST_LIST_STYLE') === 'page'
? ( ? (
<BlogPostListPage {...props} /> <BlogPostListPage {...props} />
) )
@@ -164,7 +163,7 @@ const LayoutPostList = props => {
<div id="post-outer-wrapper" className="px-5 md:px-0"> <div id="post-outer-wrapper" className="px-5 md:px-0">
{/* 文章分类条 */} {/* 文章分类条 */}
<CategoryBar {...props} /> <CategoryBar {...props} />
{BLOG.POST_LIST_STYLE === 'page' {siteConfig('POST_LIST_STYLE') === 'page'
? ( ? (
<BlogPostListPage {...props} /> <BlogPostListPage {...props} />
) )
@@ -223,7 +222,7 @@ const LayoutSearch = props => {
) )
: ( : (
<div id="posts-wrapper"> <div id="posts-wrapper">
{BLOG.POST_LIST_STYLE === 'page' {siteConfig('POST_LIST_STYLE') === 'page'
? ( ? (
<BlogPostListPage {...props} /> <BlogPostListPage {...props} />
) )

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -8,7 +7,7 @@ import { siteConfig } from '@/lib/config'
export default function ArticleCopyright () { export default function ArticleCopyright () {
const router = useRouter() const router = useRouter()
const [path, setPath] = useState(BLOG.LINK + router.asPath) const [path, setPath] = useState(siteConfig('LINK') + router.asPath)
useEffect(() => { useEffect(() => {
setPath(window.location.href) setPath(window.location.href)
}) })

View File

@@ -1,6 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
@@ -38,7 +38,7 @@ export default function ArticleRecommend({ recommendPosts, siteInfo }) {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="flex h-40 cursor-pointer overflow-hidden"> className="flex h-40 cursor-pointer overflow-hidden">

View File

@@ -1,5 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
/** /**
* 博客归档列表 * 博客归档列表
* @param posts 所有文章 * @param posts 所有文章
@@ -29,7 +30,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle }) => {
<span className="text-gray-400">{post.date?.start_date}</span>{' '} <span className="text-gray-400">{post.date?.start_date}</span>{' '}
&nbsp; &nbsp;
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="dark:text-gray-400 dark:hover:text-indigo-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-indigo-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">

View File

@@ -1,7 +1,7 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import { BlogPostCardInfo } from './BlogPostCardInfo' import { BlogPostCardInfo } from './BlogPostCardInfo'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
// import Image from 'next/image' // import Image from 'next/image'
@@ -32,7 +32,7 @@ const BlogPostCard = ({ index, post, showSummary, siteInfo }) => {
{/* 图片封面 */} {/* 图片封面 */}
{showPageCover && ( {showPageCover && (
<div className="md:w-5/12 overflow-hidden"> <div className="md:w-5/12 overflow-hidden">
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<LazyImage priority={index === 1} src={post?.pageCoverThumbnail} className='h-56 w-full object-cover object-center group-hover:scale-110 duration-500' /> <LazyImage priority={index === 1} src={post?.pageCoverThumbnail} className='h-56 w-full object-cover object-center group-hover:scale-110 duration-500' />
</Link> </Link>
</div> </div>

View File

@@ -2,7 +2,7 @@ import NotionPage from '@/components/NotionPage'
import Link from 'next/link' import Link from 'next/link'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import TwikooCommentCount from '@/components/TwikooCommentCount' import TwikooCommentCount from '@/components/TwikooCommentCount'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { formatDateFmt } from '@/lib/formatDate' import { formatDateFmt } from '@/lib/formatDate'
/** /**
@@ -15,7 +15,7 @@ export const BlogPostCardInfo = ({ post, showPreview, showPageCover, showSummary
<div> <div>
{/* 标题 */} {/* 标题 */}
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={`line-clamp-2 replace cursor-pointer text-2xl ${showPreview ? 'text-center' : '' className={`line-clamp-2 replace cursor-pointer text-2xl ${showPreview ? 'text-center' : ''
} leading-tight font-normal text-gray-600 dark:text-gray-100 hover:text-indigo-700 dark:hover:text-indigo-400`}> } leading-tight font-normal text-gray-600 dark:text-gray-100 hover:text-indigo-700 dark:hover:text-indigo-400`}>

View File

@@ -1,6 +1,6 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import PaginationNumber from './PaginationNumber' import PaginationNumber from './PaginationNumber'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
/** /**
@@ -12,8 +12,8 @@ import BlogPostListEmpty from './BlogPostListEmpty'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const showPagination = postCount >= BLOG.POSTS_PER_PAGE const showPagination = postCount >= parseInt(siteConfig('POSTS_PER_PAGE'))
if (!posts || posts.length === 0 || page > totalPage) { if (!posts || posts.length === 0 || page > totalPage) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />
} else { } else {

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
@@ -14,7 +14,7 @@ import { getListByPage } from '@/lib/utils'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => { const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const postsToShow = getListByPage(posts, page, postsPerPage) const postsToShow = getListByPage(posts, page, postsPerPage)

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
const Footer = ({ title }) => { const Footer = ({ title }) => {
@@ -13,9 +12,9 @@ const Footer = ({ title }) => {
> >
{/* <DarkModeButton/> */} {/* <DarkModeButton/> */}
<i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={BLOG.LINK} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/> <i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={siteConfig('LINK')} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br/></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br/></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span>

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Card from '@/themes/hexo/components/Card' import Card from '@/themes/hexo/components/Card'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
@@ -16,7 +16,7 @@ const HexoRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import Card from './Card' import Card from './Card'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
// import Image from 'next/image' // import Image from 'next/image'
@@ -28,7 +28,7 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
</div> </div>
</div> </div>
{latestPosts.map(post => { {latestPosts.map(post => {
const selected = currentPath === `${BLOG.SUB_PATH}/${post.slug}` const selected = currentPath === `${siteConfig('SUB_PATH')}/${post.slug}`
const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover const headerImage = post?.pageCoverThumbnail ? post.pageCoverThumbnail : siteInfo?.pageCover
@@ -36,7 +36,7 @@ const LatestPostsGroup = ({ latestPosts, siteInfo }) => {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={'my-3 flex'}> className={'my-3 flex'}>

View File

@@ -1,12 +1,11 @@
import BLOG from '@/blog.config'
import Link from 'next/link'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
import Link from 'next/link'
const Logo = props => { const Logo = props => {
return ( return (
<Link href='/' passHref legacyBehavior> <Link href='/' passHref legacyBehavior>
<div className='flex flex-col justify-center items-center cursor-pointer space-y-3'> <div className='flex flex-col justify-center items-center cursor-pointer space-y-3'>
<div className='font-medium text-lg p-1.5 rounded dark:border-white menu-link transform duration-200'> {siteConfig('TITLE') || BLOG.TITLE}</div> <div className='font-medium text-lg p-1.5 rounded dark:border-white menu-link transform duration-200'> {siteConfig('TITLE') }</div>
</div> </div>
</Link> </Link>
) )

View File

@@ -1,10 +1,10 @@
import Link from 'next/link' import Link from 'next/link'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import NotionIcon from '@/components/NotionIcon' import NotionIcon from '@/components/NotionIcon'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { formatDateFmt } from '@/lib/formatDate' import { formatDateFmt } from '@/lib/formatDate'
import { siteConfig } from '@/lib/config'
export default function PostHeader({ post, siteInfo }) { export default function PostHeader({ post, siteInfo }) {
const { locale } = useGlobal() const { locale } = useGlobal()
@@ -57,7 +57,7 @@ export default function PostHeader({ post, siteInfo }) {
</div> </div>
</div> </div>
{JSON.parse(BLOG.ANALYTICS_BUSUANZI_ENABLE) && <div className="busuanzi_container_page_pv font-light mr-2"> {JSON.parse(siteConfig('ANALYTICS_BUSUANZI_ENABLE')) && <div className="busuanzi_container_page_pv font-light mr-2">
<span className="mr-2 busuanzi_value_page_pv" /> <span className="mr-2 busuanzi_value_page_pv" />
{locale.COMMON.VIEWS} {locale.COMMON.VIEWS}
</div>} </div>}

View File

@@ -6,11 +6,11 @@ import Catalog from './Catalog'
import { InfoCard } from './InfoCard' import { InfoCard } from './InfoCard'
import { AnalyticsCard } from './AnalyticsCard' import { AnalyticsCard } from './AnalyticsCard'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import Announcement from './Announcement' import Announcement from './Announcement'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import { siteConfig } from '@/lib/config'
const HexoRecentComments = dynamic(() => import('./HexoRecentComments')) const HexoRecentComments = dynamic(() => import('./HexoRecentComments'))
const FaceBookPage = dynamic( const FaceBookPage = dynamic(
@@ -65,7 +65,7 @@ export default function SideRight(props) {
<Announcement post={notice}/> <Announcement post={notice}/>
{BLOG.COMMENT_WALINE_SERVER_URL && BLOG.COMMENT_WALINE_RECENT && <HexoRecentComments/>} {siteConfig('COMMENT_WALINE_SERVER_URL') && siteConfig('COMMENT_WALINE_RECENT') && <HexoRecentComments/>}
<div className='sticky top-20'> <div className='sticky top-20'>
{post && post.toc && post.toc.length > 1 && <Card> {post && post.toc && post.toc.length > 1 && <Card>

View File

@@ -1,5 +1,4 @@
import CONFIG from './config' import CONFIG from './config'
import CommonHead from '@/components/CommonHead' import CommonHead from '@/components/CommonHead'
import { useEffect, useRef } from 'react' import { useEffect, useRef } from 'react'
import Footer from './components/Footer' import Footer from './components/Footer'
@@ -70,7 +69,7 @@ const LayoutBase = props => {
{/* 主区块 */} {/* 主区块 */}
<main id="wrapper" className={`${CONFIG.HOME_BANNER_ENABLE ? '' : 'pt-16'} bg-hexo-background-gray dark:bg-black w-full py-8 md:px-8 lg:px-24 min-h-screen relative`}> <main id="wrapper" className={`${CONFIG.HOME_BANNER_ENABLE ? '' : 'pt-16'} bg-hexo-background-gray dark:bg-black w-full py-8 md:px-8 lg:px-24 min-h-screen relative`}>
<div id="container-inner" className={(siteConfig('LAYOUT_SIDEBAR_REVERSE') ? 'flex-row-reverse' : '') + ' w-full mx-auto lg:flex lg:space-x-4 justify-center relative z-10'} > <div id="container-inner" className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + ' w-full mx-auto lg:flex lg:space-x-4 justify-center relative z-10'} >
<div className={`${className || ''} w-full max-w-4xl h-full overflow-hidden`}> <div className={`${className || ''} w-full max-w-4xl h-full overflow-hidden`}>
<Transition <Transition
@@ -100,7 +99,7 @@ const LayoutBase = props => {
<RightFloatArea floatSlot={floatSlot} /> <RightFloatArea floatSlot={floatSlot} />
{/* 页脚 */} {/* 页脚 */}
<Footer title={siteConfig('TITLE') || siteConfig('TITLE')} /> <Footer title={siteConfig('TITLE') } />
</div> </div>
) )
} }

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -8,7 +7,7 @@ import { siteConfig } from '@/lib/config'
export default function ArticleCopyright () { export default function ArticleCopyright () {
const router = useRouter() const router = useRouter()
const [path, setPath] = useState(BLOG.LINK + router.asPath) const [path, setPath] = useState(siteConfig('LINK') + router.asPath)
useEffect(() => { useEffect(() => {
setPath(window.location.href) setPath(window.location.href)
}) })

View File

@@ -1,6 +1,6 @@
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
@@ -38,7 +38,7 @@ export default function ArticleRecommend({ recommendPosts, siteInfo }) {
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="flex h-40 cursor-pointer overflow-hidden"> className="flex h-40 cursor-pointer overflow-hidden">

View File

@@ -1,5 +1,5 @@
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
/** /**
* 博客归档列表 * 博客归档列表
@@ -30,7 +30,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle }) => {
<span className="text-gray-400">{post.date?.start_date}</span>{' '} <span className="text-gray-400">{post.date?.start_date}</span>{' '}
&nbsp; &nbsp;
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="dark:text-gray-400 dark:hover:text-indigo-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-indigo-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import TagItemMini from './TagItemMini' import TagItemMini from './TagItemMini'
import CONFIG from '../config' import CONFIG from '../config'
@@ -29,7 +29,7 @@ const BlogPostCard = ({ index, post, showSummary, siteInfo }) => {
{/* 头部图片 填充卡片 */} {/* 头部图片 填充卡片 */}
{showPageCover && ( {showPageCover && (
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<div className="flex flex-grow w-full relative duration-200 = rounded-t-md cursor-pointer transform overflow-hidden"> <div className="flex flex-grow w-full relative duration-200 = rounded-t-md cursor-pointer transform overflow-hidden">
<LazyImage <LazyImage
src={post?.pageCoverThumbnail} src={post?.pageCoverThumbnail}

View File

@@ -1,5 +1,5 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import PaginationSimple from './PaginationSimple' import PaginationSimple from './PaginationSimple'
@@ -12,8 +12,8 @@ import PaginationSimple from './PaginationSimple'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount, siteInfo }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
const showPagination = postCount >= BLOG.POSTS_PER_PAGE const showPagination = postCount >= parseInt(siteConfig('POSTS_PER_PAGE'))
if (!posts || posts.length === 0 || page > totalPage) { if (!posts || posts.length === 0 || page > totalPage) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />
} else { } else {

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
@@ -15,7 +15,7 @@ import throttle from 'lodash.throttle'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => { const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY, siteInfo }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const postsToShow = getListByPage(posts, page, postsPerPage) const postsToShow = getListByPage(posts, page, postsPerPage)
// 监听滚动 // 监听滚动

View File

@@ -1,12 +1,11 @@
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
const Footer = ({ title }) => { const Footer = ({ title }) => {
const d = new Date() const d = new Date()
const currentYear = d.getFullYear() const currentYear = d.getFullYear()
const copyrightDate = (function() { const copyrightDate = (function() {
if (Number.isInteger(BLOG.SINCE) && BLOG.SINCE < currentYear) { if (Number.isInteger(siteConfig('SINCE')) && siteConfig('SINCE') < currentYear) {
return BLOG.SINCE + '-' + currentYear return siteConfig('SINCE') + '-' + currentYear
} }
return currentYear return currentYear
})() })()
@@ -17,9 +16,9 @@ const Footer = ({ title }) => {
> >
{/* <DarkModeButton/> */} {/* <DarkModeButton/> */}
<i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={BLOG.LINK} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/> <i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={siteConfig('LINK')} className='underline font-bold dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br/></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br/></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span>
@@ -27,7 +26,7 @@ const Footer = ({ title }) => {
<i className='fas fa-users'/> <span className='px-1 busuanzi_value_site_uv'> </span> </span> <i className='fas fa-users'/> <span className='px-1 busuanzi_value_site_uv'> </span> </span>
<br/> <br/>
<h1>{title}</h1> <h1>{title}</h1>
<span className='text-xs '>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline dark:text-gray-300'>NotionNext {BLOG.VERSION}</a>.</span></span><br/> <span className='text-xs '>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline dark:text-gray-300'>NotionNext {siteConfig('VERSION')}</a>.</span></span><br/>
</footer> </footer>
) )

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Card from '@/themes/hexo/components/Card' import Card from '@/themes/hexo/components/Card'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
@@ -16,7 +16,7 @@ const HexoRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -1,10 +1,9 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import Card from './Card' import Card from './Card'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
import MenuGroupCard from './MenuGroupCard' import MenuGroupCard from './MenuGroupCard'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import { siteConfig } from '@/lib/config'
export function InfoCard (props) { export function InfoCard (props) {
const { className, siteInfo } = props const { className, siteInfo } = props
@@ -19,7 +18,7 @@ export function InfoCard (props) {
<LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/> <LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/>
</div> </div>
<div className='text-center text-xl pb-4'>{siteConfig('AUTHOR')}</div> <div className='text-center text-xl pb-4'>{siteConfig('AUTHOR')}</div>
<div className='text-sm text-center'>{BLOG.BIO}</div> <div className='text-sm text-center'>{siteConfig('BIO')}</div>
<MenuGroupCard {...props}/> <MenuGroupCard {...props}/>
<SocialButton /> <SocialButton />
</Card> </Card>

View File

@@ -1,13 +1,11 @@
import BLOG from '@/blog.config'
import Link from 'next/link'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
import Link from 'next/link'
const Logo = props => { const Logo = props => {
return ( return (
<Link href='/' passHref legacyBehavior> <Link href='/' passHref legacyBehavior>
<div className='flex flex-col justify-center items-center cursor-pointer space-y-3'> <div className='flex flex-col justify-center items-center cursor-pointer space-y-3'>
<div className=' text-lg p-1.5 rounded dark:border-white hover:scale-110 transform duration-200'> {siteConfig('TITLE') || BLOG.TITLE}</div> <div className=' text-lg p-1.5 rounded dark:border-white hover:scale-110 transform duration-200'> {siteConfig('TITLE') }</div>
</div> </div>
</Link> </Link>
) )

View File

@@ -3,7 +3,6 @@ import CommonHead from '@/components/CommonHead'
import TopNav from './components/TopNav' import TopNav from './components/TopNav'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import Footer from './components/Footer' import Footer from './components/Footer'
import { useEffect } from 'react' import { useEffect } from 'react'
import RightFloatButtons from './components/RightFloatButtons' import RightFloatButtons from './components/RightFloatButtons'
@@ -125,7 +124,7 @@ const LayoutIndex = (props) => {
const LayoutPostList = (props) => { const LayoutPostList = (props) => {
return ( return (
<LayoutBase {...props} containerSlot={<BlogListBar {...props} />}> <LayoutBase {...props} containerSlot={<BlogListBar {...props} />}>
{BLOG.POST_LIST_STYLE === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />}
</LayoutBase> </LayoutBase>
) )
} }
@@ -157,7 +156,7 @@ const LayoutSearch = props => {
{!currentSearch {!currentSearch
? <SearchNave {...props} /> ? <SearchNave {...props} />
: <div id="posts-wrapper"> : <div id="posts-wrapper">
{BLOG.POST_LIST_STYLE === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />}
</div>} </div>}
</LayoutBase> </LayoutBase>
) )

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
/** /**
@@ -23,7 +23,7 @@ export default function BlogArchiveItem({ archiveTitle, archivePosts }) {
</span>{' '} </span>{' '}
&nbsp; &nbsp;
<Link passHref href={`${BLOG.SUB_PATH}/${post.slug}`} <Link passHref href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">
{post.title} {post.title}
</Link> </Link>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import NotionPage from '@/components/NotionPage' import NotionPage from '@/components/NotionPage'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
@@ -23,7 +23,7 @@ const BlogPostCard = ({ post, showSummary }) => {
<div className="lg:py-8 py-4 flex flex-col w-full"> <div className="lg:py-8 py-4 flex flex-col w-full">
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={ className={
'cursor-pointer font-bold hover:underline text-3xl leading-tight text-gray-700 dark:text-gray-300 hover:text-green-500 dark:hover:text-green-400' 'cursor-pointer font-bold hover:underline text-3xl leading-tight text-gray-700 dark:text-gray-300 hover:text-green-500 dark:hover:text-green-400'
@@ -62,7 +62,7 @@ const BlogPostCard = ({ post, showSummary }) => {
<div className="pointer-events-none border-t pt-8 border-dashed"> <div className="pointer-events-none border-t pt-8 border-dashed">
<div className="w-full justify-start flex"> <div className="w-full justify-start flex">
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="hover:bg-opacity-100 hover:scale-105 duration-200 pointer-events-auto transform font-bold text-green-500 cursor-pointer"> className="hover:bg-opacity-100 hover:scale-105 duration-200 pointer-events-auto transform font-bold text-green-500 cursor-pointer">

View File

@@ -1,5 +1,5 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import PaginationSimple from './PaginationSimple' import PaginationSimple from './PaginationSimple'
@@ -12,7 +12,7 @@ import PaginationSimple from './PaginationSimple'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
if (!posts || posts.length === 0) { if (!posts || posts.length === 0) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
@@ -14,10 +14,11 @@ import { useRouter } from 'next/router'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch }) => { const BlogPostListScroll = ({ posts = [], currentSearch }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const router = useRouter()
let filteredPosts = Object.assign(posts) let filteredPosts = Object.assign(posts)
const searchKey = getSearchKey() const searchKey = router?.query?.s || null
if (searchKey) { if (searchKey) {
filteredPosts = posts.filter(post => { filteredPosts = posts.filter(post => {
const tagContent = post?.tags ? post?.tags.join(' ') : '' const tagContent = post?.tags ? post?.tags.join(' ') : ''
@@ -95,12 +96,4 @@ const getPostByPage = function (page, totalPosts, postsPerPage) {
) )
} }
function getSearchKey() {
const router = useRouter()
if (router.query && router.query.s) {
return router.query.s
}
return null
}
export default BlogPostListScroll export default BlogPostListScroll

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import DarkModeButton from '@/components/DarkModeButton' import DarkModeButton from '@/components/DarkModeButton'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
@@ -13,9 +12,9 @@ const Footer = ({ title }) => {
className='z-10 dark:bg-hexo-black-gray flex-shrink-0 justify-center text-center m-auto w-full leading-6 text-sm p-6 relative' className='z-10 dark:bg-hexo-black-gray flex-shrink-0 justify-center text-center m-auto w-full leading-6 text-sm p-6 relative'
> >
<DarkModeButton/> <DarkModeButton/>
<i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={BLOG.LINK} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/> <i className='fas fa-copyright' /> {`${copyrightDate}`} <span><i className='mx-1 animate-pulse fas fa-heart'/> <a href={siteConfig('LINK')} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br/>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt'/> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br/></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt'/> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br/></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye'/><span className='px-1 busuanzi_value_site_pv'> </span> </span>
@@ -23,7 +22,7 @@ const Footer = ({ title }) => {
<i className='fas fa-users'/> <span className='px-1 busuanzi_value_site_uv'> </span> </span> <i className='fas fa-users'/> <span className='px-1 busuanzi_value_site_uv'> </span> </span>
<br/> <br/>
<h1>{title}</h1> <h1>{title}</h1>
<span className='text-xs font-serif'>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext {BLOG.VERSION}</a>.</span></span> <span className='text-xs font-serif'>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext {siteConfig('VERSION')}</a>.</span></span>
</footer> </footer>
) )
} }

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import Router from 'next/router' import Router from 'next/router'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
@@ -12,7 +11,7 @@ const InfoCard = (props) => {
<LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/> <LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/>
</div> </div>
<div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div> <div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div>
<div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{BLOG.BIO}</div> <div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{siteConfig('BIO')}</div>
<SocialButton/> <SocialButton/>
</div> </div>
</div> </div>

View File

@@ -1,5 +1,4 @@
import CONFIG from './config' import CONFIG from './config'
import { useState, createContext, useContext, useEffect } from 'react' import { useState, createContext, useContext, useEffect } from 'react'
import Footer from './components/Footer' import Footer from './components/Footer'
import InfoCard from './components/InfoCard' import InfoCard from './components/InfoCard'
@@ -11,7 +10,6 @@ import BottomMenuBar from './components/BottomMenuBar'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import BLOG from '@/blog.config'
import Announcement from './components/Announcement' import Announcement from './components/Announcement'
import JumpToTopButton from './components/JumpToTopButton' import JumpToTopButton from './components/JumpToTopButton'
import BlogPostListPage from './components/BlogPostListPage' import BlogPostListPage from './components/BlogPostListPage'
@@ -64,7 +62,7 @@ const LayoutBase = props => {
<div id='theme-medium' className='bg-white dark:bg-hexo-black-gray w-full h-full min-h-screen justify-center dark:text-gray-300'> <div id='theme-medium' className='bg-white dark:bg-hexo-black-gray w-full h-full min-h-screen justify-center dark:text-gray-300'>
<main id='wrapper' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'flex-row-reverse' : '') + 'relative flex justify-between w-full h-full mx-auto'}> <main id='wrapper' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + 'relative flex justify-between w-full h-full mx-auto'}>
{/* 桌面端左侧菜单 */} {/* 桌面端左侧菜单 */}
{/* <LeftMenuBar/> */} {/* <LeftMenuBar/> */}
@@ -138,7 +136,7 @@ const LayoutIndex = (props) => {
const LayoutPostList = (props) => { const LayoutPostList = (props) => {
const slotTop = <BlogPostBar {...props} /> const slotTop = <BlogPostBar {...props} />
return <LayoutBase {...props} slotTop={slotTop}> return <LayoutBase {...props} slotTop={slotTop}>
{BLOG.POST_LIST_STYLE === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />}
</LayoutBase> </LayoutBase>
} }
@@ -233,7 +231,7 @@ const LayoutSearch = (props) => {
{/* 文章列表 */} {/* 文章列表 */}
{currentSearch && <div> {currentSearch && <div>
{BLOG.POST_LIST_STYLE === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />} {siteConfig('POST_LIST_STYLE') === 'page' ? <BlogPostListPage {...props} /> : <BlogPostListScroll {...props} />}
</div>} </div>}
</LayoutBase> </LayoutBase>
} }

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import Link from 'next/link' import Link from 'next/link'
/** /**
@@ -23,7 +22,7 @@ export default function BlogArchiveItem({ archiveTitle, archivePosts }) {
</span>{' '} </span>{' '}
&nbsp; &nbsp;
<Link passHref href={`${BLOG.SUB_PATH}/${post.slug}`} <Link passHref href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">
{post.title} {post.title}
</Link> </Link>

View File

@@ -1,5 +1,4 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BLOG from '@/blog.config'
import NavPostListEmpty from './NavPostListEmpty' import NavPostListEmpty from './NavPostListEmpty'
import PaginationSimple from './PaginationSimple' import PaginationSimple from './PaginationSimple'
@@ -12,7 +11,7 @@ import PaginationSimple from './PaginationSimple'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
if (!posts || posts.length === 0) { if (!posts || posts.length === 0) {
return <NavPostListEmpty /> return <NavPostListEmpty />

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
const Footer = ({ siteInfo }) => { const Footer = ({ siteInfo }) => {
@@ -14,13 +13,13 @@ const Footer = ({ siteInfo }) => {
{/* <hr className='pb-2' /> */} {/* <hr className='pb-2' /> */}
<div className='flex justify-center'> <div className='flex justify-center'>
<div><i className='text-xs mx-1 animate-pulse fas fa-heart' /><a href={BLOG.LINK} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br /></div> <div><i className='text-xs mx-1 animate-pulse fas fa-heart' /><a href={siteConfig('LINK')} className='underline font-bold text-gray-500 dark:text-gray-300 '>{siteConfig('AUTHOR')}</a>.<br /></div>
© {`${copyrightDate}`} © {`${copyrightDate}`}
</div> </div>
<div className='text-xs font-serif py-1'>Powered By <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext</a></div> <div className='text-xs font-serif py-1'>Powered By <a href='https://github.com/tangly1024/NotionNext' className='underline text-gray-500 dark:text-gray-300'>NotionNext</a></div>
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br /></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br /></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='text-xs fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='text-xs fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import Router from 'next/router' import Router from 'next/router'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
@@ -12,7 +11,7 @@ const InfoCard = (props) => {
<LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/> <LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/>
</div> </div>
<div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div> <div className='text-xl py-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-300'>{siteConfig('AUTHOR')}</div>
<div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{BLOG.BIO}</div> <div className='font-light text-gray-600 mb-2 hover:scale-105 transform duration-200 flex justify-center dark:text-gray-400'>{siteConfig('BIO')}</div>
<SocialButton/> <SocialButton/>
</div> </div>
</div> </div>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import Link from 'next/link' import Link from 'next/link'
import CONFIG from '../config' import CONFIG from '../config'
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
@@ -16,7 +15,7 @@ export default function LogoBar(props) {
<Link href='/' className='md:w-48 grid justify-items-center text-md md:text-xl dark:text-gray-200'> <Link href='/' className='md:w-48 grid justify-items-center text-md md:text-xl dark:text-gray-200'>
{/* eslint-disable-next-line @next/next/no-img-element */} {/* eslint-disable-next-line @next/next/no-img-element */}
<img src={siteInfo?.icon?.replaceAll('width=400', 'width=280')} <img src={siteInfo?.icon?.replaceAll('width=400', 'width=280')}
height='44px' alt={siteConfig('AUTHOR') + ' - ' + BLOG.NEXT_PUBLIC_BIO} className='md:block transition-all hover:scale-110 duration-150' placeholderSrc='' /> height='44px' alt={siteConfig('AUTHOR') + ' - ' + siteConfig('NEXT_PUBLIC_BIO')} className='md:block transition-all hover:scale-110 duration-150' placeholderSrc='' />
{CONFIG.SHOW_TITLE_TEXT && siteConfig('TITLE')} {CONFIG.SHOW_TITLE_TEXT && siteConfig('TITLE')}
</Link> </Link>
</div> </div>

View File

@@ -11,7 +11,6 @@ import { useEffect, useState, createContext, useContext } from 'react'
import Footer from './components/Footer' import Footer from './components/Footer'
import TopNavBar from './components/TopNavBar' import TopNavBar from './components/TopNavBar'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import Announcement from './components/Announcement' import Announcement from './components/Announcement'
import PageNavDrawer from './components/PageNavDrawer' import PageNavDrawer from './components/PageNavDrawer'
import FloatTocButton from './components/FloatTocButton' import FloatTocButton from './components/FloatTocButton'
@@ -33,6 +32,7 @@ import Link from 'next/link'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import { MenuItem } from './components/MenuItem' import { MenuItem } from './components/MenuItem'
import { siteConfig } from '@/lib/config'
const WWAds = dynamic(() => import('@/components/WWAds'), { ssr: false }) const WWAds = dynamic(() => import('@/components/WWAds'), { ssr: false })
// 主题全局变量 // 主题全局变量
@@ -81,7 +81,7 @@ const LayoutBase = (props) => {
<TopNavBar {...props} /> <TopNavBar {...props} />
{/* 左右布局区块 */} {/* 左右布局区块 */}
<main id='wrapper' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'flex-row-reverse' : '') + ' relative flex justify-between w-full h-screen mx-auto'}> <main id='wrapper' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'flex-row-reverse' : '') + ' relative flex justify-between w-full h-screen mx-auto'}>
{/* 左侧推拉抽屉 */} {/* 左侧推拉抽屉 */}
<div className={'font-sans hidden md:block dark:border-transparent relative z-10 mx-4 w-52 max-h-full pb-44'}> <div className={'font-sans hidden md:block dark:border-transparent relative z-10 mx-4 w-52 max-h-full pb-44'}>

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import BlogAround from './BlogAround' import BlogAround from './BlogAround'
import Comment from '@/components/Comment' import Comment from '@/components/Comment'
import RecommendPosts from './RecommendPosts' import RecommendPosts from './RecommendPosts'
@@ -23,7 +22,7 @@ import { siteConfig } from '@/lib/config'
*/ */
export default function ArticleDetail(props) { export default function ArticleDetail(props) {
const { post, recommendPosts, prev, next } = props const { post, recommendPosts, prev, next } = props
const url = BLOG.LINK + useRouter().asPath const url = siteConfig('LINK') + useRouter().asPath
const { locale } = useGlobal() const { locale } = useGlobal()
const showArticleInfo = CONFIG.ARTICLE_INFO const showArticleInfo = CONFIG.ARTICLE_INFO

View File

@@ -1,5 +1,5 @@
import { siteConfig } from '@/lib/config'
import Link from 'next/link' import Link from 'next/link'
import BLOG from '@/blog.config'
/** /**
* 博客归档列表 * 博客归档列表
@@ -30,7 +30,7 @@ const BlogPostArchive = ({ posts = [], archiveTitle }) => {
<span className="text-gray-400">{post.date?.start_date}</span>{' '} <span className="text-gray-400">{post.date?.start_date}</span>{' '}
&nbsp; &nbsp;
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600"> className="dark:text-gray-400 dark:hover:text-gray-300 overflow-x-hidden hover:underline cursor-pointer text-gray-600">

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Image from 'next/image' import Image from 'next/image'
import Link from 'next/link' import Link from 'next/link'
@@ -9,6 +8,7 @@ import NotionPage from '@/components/NotionPage'
import NotionIcon from '@/components/NotionIcon' import NotionIcon from '@/components/NotionIcon'
import TwikooCommentCount from '@/components/TwikooCommentCount' import TwikooCommentCount from '@/components/TwikooCommentCount'
import { formatDateFmt } from '@/lib/formatDate' import { formatDateFmt } from '@/lib/formatDate'
import { siteConfig } from '@/lib/config'
const BlogPostCard = ({ post, showSummary }) => { const BlogPostCard = ({ post, showSummary }) => {
const { locale } = useGlobal() const { locale } = useGlobal()
@@ -21,7 +21,7 @@ const BlogPostCard = ({ post, showSummary }) => {
> >
<div className="lg:p-8 p-4 flex flex-col w-full"> <div className="lg:p-8 p-4 flex flex-col w-full">
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
data-aos="fade-down" data-aos="fade-down"
data-aos-duration="500" data-aos-duration="500"
@@ -104,7 +104,7 @@ const BlogPostCard = ({ post, showSummary }) => {
<div className="text-right border-t pt-8 border-dashed"> <div className="text-right border-t pt-8 border-dashed">
<Link <Link
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
className="hover:bg-opacity-100 hover:underline transform duration-300 p-3 text-white bg-gray-800 cursor-pointer"> className="hover:bg-opacity-100 hover:underline transform duration-300 p-3 text-white bg-gray-800 cursor-pointer">
{locale.COMMON.ARTICLE_DETAIL} {locale.COMMON.ARTICLE_DETAIL}
@@ -115,7 +115,7 @@ const BlogPostCard = ({ post, showSummary }) => {
</div> </div>
{CONFIG.POST_LIST_COVER && post?.pageCoverThumbnail && ( {CONFIG.POST_LIST_COVER && post?.pageCoverThumbnail && (
<Link href={`${BLOG.SUB_PATH}/${post.slug}`} passHref legacyBehavior> <Link href={`${siteConfig('SUB_PATH')}/${post.slug}`} passHref legacyBehavior>
<div className="h-72 w-full relative duration-200 cursor-pointer transform overflow-hidden"> <div className="h-72 w-full relative duration-200 cursor-pointer transform overflow-hidden">
<Image <Image
className="hover:scale-105 transform duration-500" className="hover:scale-105 transform duration-500"

View File

@@ -1,7 +1,7 @@
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import PaginationNumber from './PaginationNumber' import PaginationNumber from './PaginationNumber'
import BLOG from '@/blog.config'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { siteConfig } from '@/lib/config'
/** /**
* 文章列表分页表格 * 文章列表分页表格
@@ -12,7 +12,7 @@ import BlogPostListEmpty from './BlogPostListEmpty'
* @constructor * @constructor
*/ */
const BlogPostListPage = ({ page = 1, posts = [], postCount }) => { const BlogPostListPage = ({ page = 1, posts = [], postCount }) => {
const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const totalPage = Math.ceil(postCount / parseInt(siteConfig('POSTS_PER_PAGE')))
if (!posts || posts.length === 0) { if (!posts || posts.length === 0) {
return <BlogPostListEmpty /> return <BlogPostListEmpty />

View File

@@ -1,10 +1,10 @@
import BLOG from '@/blog.config'
import BlogPostCard from './BlogPostCard' import BlogPostCard from './BlogPostCard'
import BlogPostListEmpty from './BlogPostListEmpty' import BlogPostListEmpty from './BlogPostListEmpty'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import throttle from 'lodash.throttle' import throttle from 'lodash.throttle'
import { useCallback, useEffect, useRef, useState } from 'react' import { useCallback, useEffect, useRef, useState } from 'react'
import CONFIG from '../config' import CONFIG from '../config'
import { siteConfig } from '@/lib/config'
/** /**
* 博客列表滚动分页 * 博客列表滚动分页
@@ -14,7 +14,7 @@ import CONFIG from '../config'
* @constructor * @constructor
*/ */
const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY }) => { const BlogPostListScroll = ({ posts = [], currentSearch, showSummary = CONFIG.POST_LIST_SUMMARY }) => {
const postsPerPage = BLOG.POSTS_PER_PAGE const postsPerPage = parseInt(siteConfig('POSTS_PER_PAGE'))
const [page, updatePage] = useState(1) const [page, updatePage] = useState(1)
const postsToShow = getPostByPage(page, posts, postsPerPage) const postsToShow = getPostByPage(page, posts, postsPerPage)

View File

@@ -1,5 +1,4 @@
import { siteConfig } from '@/lib/config' import { siteConfig } from '@/lib/config'
import BLOG from '@/blog.config'
import DarkModeButton from '@/components/DarkModeButton' import DarkModeButton from '@/components/DarkModeButton'
const Footer = ({ title }) => { const Footer = ({ title }) => {
@@ -16,9 +15,9 @@ const Footer = ({ title }) => {
<span> <span>
<DarkModeButton /> <DarkModeButton />
<i className='fas fa-copyright' /> {`${copyrightDate}`} <span className='mx-1 animate-pulse'><i className='fas fa-heart' /></span> <a href={BLOG.LINK} className='underline font-bold '>{siteConfig('AUTHOR')}</a>.<br /> <i className='fas fa-copyright' /> {`${copyrightDate}`} <span className='mx-1 animate-pulse'><i className='fas fa-heart' /></span> <a href={siteConfig('LINK')} className='underline font-bold '>{siteConfig('AUTHOR')}</a>.<br />
{BLOG.BEI_AN && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{BLOG.BEI_AN}</a><br /></>} {siteConfig('BEI_AN') && <><i className='fas fa-shield-alt' /> <a href='https://beian.miit.gov.cn/' className='mr-2'>{siteConfig('BEI_AN')}</a><br /></>}
<span className='hidden busuanzi_container_site_pv'> <span className='hidden busuanzi_container_site_pv'>
<i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span> <i className='fas fa-eye' /><span className='px-1 busuanzi_value_site_pv'> </span> </span>
@@ -26,7 +25,7 @@ const Footer = ({ title }) => {
<i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span> <i className='fas fa-users' /> <span className='px-1 busuanzi_value_site_uv'> </span> </span>
<br /> <br />
<h1>{title}</h1> <h1>{title}</h1>
<span className='text-xs font-serif text-gray-500 dark:text-gray-300 '>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline '>NotionNext {BLOG.VERSION}</a>.</span> <span className='text-xs font-serif text-gray-500 dark:text-gray-300 '>Powered by <a href='https://github.com/tangly1024/NotionNext' className='underline '>NotionNext {siteConfig('VERSION')}</a>.</span>
</span> </span>
</footer> </footer>
) )

View File

@@ -1,4 +1,3 @@
import BLOG from '@/blog.config'
import LazyImage from '@/components/LazyImage' import LazyImage from '@/components/LazyImage'
import Router from 'next/router' import Router from 'next/router'
import SocialButton from './SocialButton' import SocialButton from './SocialButton'
@@ -12,7 +11,7 @@ const InfoCard = (props) => {
<LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/> <LazyImage src={siteInfo?.icon} className='rounded-full' width={120} alt={siteConfig('AUTHOR')}/>
</div> </div>
<div className='text-2xl font-serif dark:text-white py-2 hover:scale-105 transform duration-200'>{siteConfig('AUTHOR')}</div> <div className='text-2xl font-serif dark:text-white py-2 hover:scale-105 transform duration-200'>{siteConfig('AUTHOR')}</div>
<div className='font-light dark:text-white py-2 hover:scale-105 transform duration-200 text-center'>{BLOG.BIO}</div> <div className='font-light dark:text-white py-2 hover:scale-105 transform duration-200 text-center'>{siteConfig('BIO')}</div>
<SocialButton/> <SocialButton/>
</div> </div>
</> </>

View File

@@ -1,4 +1,4 @@
import BLOG from '@/blog.config' import { siteConfig } from '@/lib/config'
import { useGlobal } from '@/lib/global' import { useGlobal } from '@/lib/global'
import Link from 'next/link' import Link from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
@@ -26,12 +26,12 @@ const LatestPostsGroup = ({ latestPosts }) => {
</div> </div>
</div> </div>
{latestPosts.map(post => { {latestPosts.map(post => {
const selected = currentPath === `${BLOG.SUB_PATH}/${post.slug}` const selected = currentPath === `${siteConfig('SUB_PATH')}/${post.slug}`
return ( return (
(<Link (<Link
key={post.id} key={post.id}
title={post.title} title={post.title}
href={`${BLOG.SUB_PATH}/${post.slug}`} href={`${siteConfig('SUB_PATH')}/${post.slug}`}
passHref passHref
className={'my-1 flex font-light'}> className={'my-1 flex font-light'}>

View File

@@ -1,7 +1,7 @@
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import BLOG from '@/blog.config'
import Link from 'next/link' import Link from 'next/link'
import { RecentComments } from '@waline/client' import { RecentComments } from '@waline/client'
import { siteConfig } from '@/lib/config'
/** /**
* @see https://waline.js.org/guide/get-started.html * @see https://waline.js.org/guide/get-started.html
@@ -13,7 +13,7 @@ const NextRecentComments = (props) => {
const [onLoading, changeLoading] = useState(true) const [onLoading, changeLoading] = useState(true)
useEffect(() => { useEffect(() => {
RecentComments({ RecentComments({
serverURL: BLOG.COMMENT_WALINE_SERVER_URL, serverURL: siteConfig('COMMENT_WALINE_SERVER_URL'),
count: 5 count: 5
}).then(({ comments }) => { }).then(({ comments }) => {
changeLoading(false) changeLoading(false)

View File

@@ -7,8 +7,8 @@ import Tabs from '@/components/Tabs'
import Logo from './Logo' import Logo from './Logo'
import Card from './Card' import Card from './Card'
import CONFIG from '../config' import CONFIG from '../config'
import BLOG from '@/blog.config'
import Live2D from '@/components/Live2D' import Live2D from '@/components/Live2D'
import { siteConfig } from '@/lib/config'
/** /**
* 侧边平铺 * 侧边平铺
@@ -23,7 +23,7 @@ const SideAreaLeft = props => {
const { post, slot, postCount } = props const { post, slot, postCount } = props
const { locale } = useGlobal() const { locale } = useGlobal()
const showToc = post && post.toc && post.toc.length > 1 const showToc = post && post.toc && post.toc.length > 1
return <aside id='left' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'ml-4' : 'mr-4') + ' hidden lg:block flex-col w-60 z-20 relative'}> return <aside id='left' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'ml-4' : 'mr-4') + ' hidden lg:block flex-col w-60 z-20 relative'}>
<section <section
className='w-60'> className='w-60'>

View File

@@ -5,10 +5,10 @@ import CategoryGroup from './CategoryGroup'
import TagGroups from './TagGroups' import TagGroups from './TagGroups'
import CONFIG from '../config' import CONFIG from '../config'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import BLOG from '@/blog.config'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import Announcement from './Announcement' import Announcement from './Announcement'
import LatestPostsGroup from './LatestPostsGroup' import LatestPostsGroup from './LatestPostsGroup'
import { siteConfig } from '@/lib/config'
const NextRecentComments = dynamic(() => import('./NextRecentComments')) const NextRecentComments = dynamic(() => import('./NextRecentComments'))
/** /**
@@ -27,7 +27,7 @@ const SideAreaRight = (props) => {
const router = useRouter() const router = useRouter()
const announcementVisible = notice && Object.keys(notice).length > 0 const announcementVisible = notice && Object.keys(notice).length > 0
return (<aside id='right' className={(BLOG.LAYOUT_SIDEBAR_REVERSE ? 'mr-4' : 'ml-4') + ' space-y-4 hidden xl:block flex-col w-60 relative z-10'}> return (<aside id='right' className={(JSON.parse(siteConfig('LAYOUT_SIDEBAR_REVERSE')) ? 'mr-4' : 'ml-4') + ' space-y-4 hidden xl:block flex-col w-60 relative z-10'}>
{CONFIG.RIGHT_AD && <Card className='mb-2'> {CONFIG.RIGHT_AD && <Card className='mb-2'>
{/* 展示广告 */} {/* 展示广告 */}
@@ -92,7 +92,7 @@ const SideAreaRight = (props) => {
</Card> </Card>
)} )}
{BLOG.COMMENT_WALINE_SERVER_URL && BLOG.COMMENT_WALINE_RECENT && <Card> {siteConfig('COMMENT_WALINE_SERVER_URL') && siteConfig('COMMENT_WALINE_RECENT') && <Card>
<div className="text-sm pb-1 px-2 flex flex-nowrap justify-between font-light dark:text-gray-200"> <div className="text-sm pb-1 px-2 flex flex-nowrap justify-between font-light dark:text-gray-200">
<div className="text-gray-600 dark:text-gray-200"> <div className="text-gray-600 dark:text-gray-200">
<i className="mr-2 fas fa-tag" /> <i className="mr-2 fas fa-tag" />

Some files were not shown because too many files have changed in this diff Show More