diff --git a/components/NotionPage.js b/components/NotionPage.js index c7902fdd..07e62f4f 100644 --- a/components/NotionPage.js +++ b/components/NotionPage.js @@ -31,7 +31,7 @@ const Pdf = dynamic( // https://github.com/txs // import PrismMac from '@/components/PrismMac' const PrismMac = dynamic(() => import('@/components/PrismMac'), { - ssr: true + ssr: false }) const Collection = dynamic(() => diff --git a/components/PrismMac.js b/components/PrismMac.js index 0df21ba3..ee531070 100644 --- a/components/PrismMac.js +++ b/components/PrismMac.js @@ -1,5 +1,3 @@ -'use client' - import { useEffect } from 'react' import Prism from 'prismjs' // 所有语言的prismjs 使用autoloader引入 @@ -13,7 +11,7 @@ import 'prismjs/plugins/line-numbers/prism-line-numbers.css' // mermaid图 import BLOG from '@/blog.config' -import { isBrowser, loadExternalResource } from '@/lib/utils' +import { loadExternalResource } from '@/lib/utils' import { useRouter } from 'next/navigation' /** @@ -23,20 +21,19 @@ import { useRouter } from 'next/navigation' const PrismMac = () => { const router = useRouter() useEffect(() => { - if (isBrowser()) { - if (BLOG.CODE_MAC_BAR) { - loadExternalResource('/css/prism-mac-style.css', 'css') - } - loadExternalResource(BLOG.PRISM_THEME_PATH, 'css') - loadExternalResource(BLOG.PRISM_JS_AUTO_LOADER, 'js').then((url) => { - if (window?.Prism?.plugins?.autoloader) { - window.Prism.plugins.autoloader.languages_path = BLOG.PRISM_JS_PATH - } - renderPrismMac() - renderMermaid() - }) + console.log('渲染Code') + if (BLOG.CODE_MAC_BAR) { + loadExternalResource('/css/prism-mac-style.css', 'css') } - }, [router.events]) + loadExternalResource(BLOG.PRISM_THEME_PATH, 'css') + loadExternalResource(BLOG.PRISM_JS_AUTO_LOADER, 'js').then((url) => { + if (window?.Prism?.plugins?.autoloader) { + window.Prism.plugins.autoloader.languages_path = BLOG.PRISM_JS_PATH + } + renderPrismMac() + renderMermaid() + }) + }, [router]) return <> } diff --git a/lib/notion/getNotionData.js b/lib/notion/getNotionData.js index 8b14b355..80625ef2 100644 --- a/lib/notion/getNotionData.js +++ b/lib/notion/getNotionData.js @@ -179,7 +179,7 @@ export function getNavPages({ allPages }) { const allNavPages = allPages.filter(post => { return post && post?.slug && (!post?.slug?.startsWith('http')) && post?.type === 'Post' && post?.status === 'Published' }) - const result = allNavPages.map(item => ({ id: item.id, title: item.title, category: item.category || null, tags: item.tags || null, summary: item.summary || null, slug: item.slug })) + const result = allNavPages.map(item => ({ id: item.id, title: item.title || null, category: item.category || null, tags: item.tags || null, summary: item.summary || null, slug: item.slug })) const groupedArray = result.reduce((groups, item) => { const categoryName = item.category ? item.category.join('/') : '' // 将category转换为字符串 diff --git a/styles/notion.css b/styles/notion.css index 99c2251e..60c89455 100644 --- a/styles/notion.css +++ b/styles/notion.css @@ -2015,10 +2015,3 @@ code.language-mermaid { .notion-equation-inline .katex-display { margin: 0 0 !important; } - -.two-line-clamp { - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; -} diff --git a/themes/fukasawa/components/BlogCard.js b/themes/fukasawa/components/BlogCard.js index 9297cfd7..7dc9f492 100644 --- a/themes/fukasawa/components/BlogCard.js +++ b/themes/fukasawa/components/BlogCard.js @@ -6,73 +6,74 @@ import CONFIG_FUKA from '../config_fuka' const BlogCard = ({ index, post, showSummary, siteInfo }) => { const showPreview = CONFIG_FUKA.POST_LIST_PREVIEW && post.blockMap - // matery 主题默认强制显示图片 - if (post && !post.pageCover) { + // fukasawa 强制显示图片 + if (CONFIG_FUKA.POST_LIST_COVER_FORCE && post && !post.pageCover) { post.pageCoverThumbnail = siteInfo?.pageCover } const showPageCover = CONFIG_FUKA.POST_LIST_COVER && post?.pageCoverThumbnail return ( -
-
-
-
- +
+
+ {/* 封面图 */} + {showPageCover && ( +
+ + {/* eslint-disable-next-line @next/next/no-img-element */} + {post.title} + +
+ )} - {post.title} - - - - {(!showPreview || showSummary) && ( -

- {post.summary} -

- )} - - {/* 分类标签 */} -
+ {/* 文字部分 */} +
- - - {post.category} - + 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.tagItems.map(tag => ( - - ))} + + {(!showPreview || showSummary) && ( +

+ {post.summary} +

+ )} + + {/* 分类标签 */} +
+ {post.category && + + {post.category} + } +
+
+ + {post.tagItems.map((tag) => ( + + ))} +
- - {showPageCover && ( - -
- {/* eslint-disable-next-line @next/next/no-img-element */} - {post.title} - {/* {post.title} */} -
- - )}
-
-
- ) } diff --git a/themes/fukasawa/components/BlogListPage.js b/themes/fukasawa/components/BlogListPage.js index c919ef94..ad2bdbb3 100644 --- a/themes/fukasawa/components/BlogListPage.js +++ b/themes/fukasawa/components/BlogListPage.js @@ -1,8 +1,10 @@ import BLOG from '@/blog.config' +import { deepClone } from '@/lib/utils' import BlogCard from './BlogCard' import BlogPostListEmpty from './BlogListEmpty' import PaginationSimple from './PaginationSimple' - +import { useEffect, useState } from 'react' +import { debounce } from 'lodash' /** * 文章列表分页表格 * @param page 当前页 @@ -15,14 +17,43 @@ const BlogListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { const totalPage = Math.ceil(postCount / BLOG.POSTS_PER_PAGE) const showNext = page < totalPage - if (!posts || posts.length === 0) { + const [columns, setColumns] = useState(calculateColumns()) + const [filterPosts, setFilterPosts] = useState([]) + + useEffect(() => { + const handleResize = debounce(() => { + setColumns(calculateColumns()) + }, 200) + window.addEventListener('resize', handleResize) + return () => window.removeEventListener('resize', handleResize) + }, []) + + /** + * 文章重新布局,使纵向排列看起来是横向排列 + */ + useEffect(() => { + const count = posts?.length || 0 + const rows = Math.ceil(count / columns) + const newFilterPosts = [] + for (let i = 0; i < columns; i++) { + for (let j = 0; j < rows; j++) { + const index = j * columns + i + if (index < count) { + newFilterPosts.push(deepClone(posts[index])) + } + } + } + setFilterPosts(newFilterPosts) + }, [columns, posts]) + + if (!filterPosts || filterPosts.length === 0) { return } else { return (
{/* 文章列表 */}
- {posts?.map(post => ( + {filterPosts?.map(post => (
@@ -34,4 +65,14 @@ const BlogListPage = ({ page = 1, posts = [], postCount, siteInfo }) => { } } +const calculateColumns = () => { + if (window.innerWidth >= 1024) { + return 3 + } else if (window.innerWidth >= 640) { + return 2 + } else { + return 1 + } +} + export default BlogListPage diff --git a/themes/fukasawa/config_fuka.js b/themes/fukasawa/config_fuka.js index a10fe869..81c2e83a 100644 --- a/themes/fukasawa/config_fuka.js +++ b/themes/fukasawa/config_fuka.js @@ -1,6 +1,7 @@ const FUKA_CONFIG = { POST_LIST_COVER: true, // 文章列表显示图片封面 + POST_LIST_COVER_FORCE: false, // 即使没有封面也将站点背景图设置为封面 POST_LIST_PREVIEW: false, // 显示文章预览 // 菜单 diff --git a/themes/hexo/components/BlogPostCardInfo.js b/themes/hexo/components/BlogPostCardInfo.js index 508114f4..e943c1b0 100644 --- a/themes/hexo/components/BlogPostCardInfo.js +++ b/themes/hexo/components/BlogPostCardInfo.js @@ -43,14 +43,14 @@ export const BlogPostCardInfo = ({ post, showPreview, showPageCover, showSummary {/* 摘要 */} {(!showPreview || showSummary) && !post.results && ( -

+

{post.summary}

)} {/* 搜索结果 */} {post.results && ( -

+

{post.results.map(r => ( {r} ))}