-
-
- {/*
{theme}
*/}
+
+
diff --git a/lib/formatDate.js b/lib/formatDate.js
index 6f274da8..0d752555 100644
--- a/lib/formatDate.js
+++ b/lib/formatDate.js
@@ -13,7 +13,6 @@ export default function formatDate (date, local) {
? res.replace('年', '-').replace('月', '-').replace('日', '')
: res
}
-
export function formatDateFmt (timestamp, fmt) {
const date = new Date(timestamp)
const o = {
diff --git a/lib/notion/getAllPosts.js b/lib/notion/getAllPosts.js
index c7401030..ad4acde6 100644
--- a/lib/notion/getAllPosts.js
+++ b/lib/notion/getAllPosts.js
@@ -45,7 +45,7 @@ export async function getAllPosts({ notionPageData, from, pageType }) {
// Sort by date
if (BLOG.POSTS_SORT_BY === 'date') {
posts.sort((a, b) => {
- return b?.sortDate - a?.sortDate
+ return b?.publishDate - a?.publishDate
})
}
return posts
diff --git a/lib/notion/getNotionData.js b/lib/notion/getNotionData.js
index 3df1db8f..5a247f8c 100644
--- a/lib/notion/getNotionData.js
+++ b/lib/notion/getNotionData.js
@@ -20,23 +20,23 @@ import { mapImgUrl, compressImage } from './mapImage'
* @returns
*
*/
-export async function getGlobalNotionData({
+export async function getGlobalData({
pageId = BLOG.NOTION_PAGE_ID,
from
}) {
- // 获取Notion数据
- const notionPageData = deepClone(await getNotionPageData({ pageId, from }))
- notionPageData.allNavPages = getNavPages({ allPages: notionPageData.allPages })
- delete notionPageData.block
- delete notionPageData.schema
- delete notionPageData.rawMetadata
- delete notionPageData.pageIds
- delete notionPageData.viewIds
- delete notionPageData.collection
- delete notionPageData.collectionQuery
- delete notionPageData.collectionId
- delete notionPageData.collectionView
- return notionPageData
+ // 从notion获取
+ const db = deepClone(await getNotionPageData({ pageId, from }))
+ // 不返回的敏感数据
+ delete db.block
+ delete db.schema
+ delete db.rawMetadata
+ delete db.pageIds
+ delete db.viewIds
+ delete db.collection
+ delete db.collectionQuery
+ delete db.collectionId
+ delete db.collectionView
+ return db
}
/**
@@ -48,8 +48,8 @@ function getLatestPosts({ allPages, from, latestPostCount }) {
const allPosts = allPages?.filter(page => page.type === 'Post' && page.status === 'Published')
const latestPosts = Object.create(allPosts).sort((a, b) => {
- const dateA = new Date(a?.lastEditedTime || a?.sortDate)
- const dateB = new Date(b?.lastEditedTime || b?.sortDate)
+ const dateA = new Date(a?.lastEditedTime || a?.publishDate)
+ const dateB = new Date(b?.lastEditedTime || b?.publishDate)
return dateB - dateA
})
return latestPosts.slice(0, latestPostCount)
@@ -69,12 +69,12 @@ export async function getNotionPageData({ pageId, from }) {
console.log('[缓存]:', `from:${from}`, `root-page-id:${pageId}`)
return data
}
- const pageRecordMap = await getDataBaseInfoByNotionAPI({ pageId, from })
+ const db = await getDataBaseInfoByNotionAPI({ pageId, from })
// 存入缓存
- if (pageRecordMap) {
- await setDataToCache(cacheKey, pageRecordMap)
+ if (db) {
+ await setDataToCache(cacheKey, db)
}
- return pageRecordMap
+ return db
}
/**
@@ -298,7 +298,7 @@ async function getDataBaseInfoByNotionAPI({ pageId, from }) {
// Sort by date
if (BLOG.POSTS_SORT_BY === 'date') {
allPages.sort((a, b) => {
- return b?.sortDate - a?.sortDate
+ return b?.publishDate - a?.publishDate
})
}
diff --git a/lib/notion/getPageProperties.js b/lib/notion/getPageProperties.js
index 1fbea148..f2ffe306 100644
--- a/lib/notion/getPageProperties.js
+++ b/lib/notion/getPageProperties.js
@@ -92,11 +92,9 @@ export default async function getPageProperties(id, block, schema, authToken, ta
properties.slug += '.html'
}
}
-
- properties.sortDate = value?.date?.start_date || value.created_time
- properties.createdTime = formatDate(new Date(value.created_time).toString(), BLOG.LANG)
- properties.publishTime = value?.date?.start_date ? formatDate(new Date(value?.date?.start_date).toString, BLOG.LANG) : properties.createdTime
- properties.lastEditedTime = formatDate(new Date(value?.last_edited_time).toString(), BLOG.LANG)
+ properties.publishDate = new Date(properties?.date?.start_date || value.created_time).getTime()
+ properties.publishTime = formatDate(properties.publishDate, BLOG.LANG)
+ properties.lastEditedTime = formatDate(new Date(value?.last_edited_time), BLOG.LANG)
properties.fullWidth = value.format?.page_full_width ?? false
properties.pageIcon = mapImgUrl(block[id].value?.format?.page_icon, block[id].value) ?? ''
properties.pageCover = mapImgUrl(block[id].value?.format?.page_cover, block[id].value) ?? ''
diff --git a/lib/rss.js b/lib/rss.js
index 88f213e7..d40b940b 100644
--- a/lib/rss.js
+++ b/lib/rss.js
@@ -46,7 +46,7 @@ export async function generateRss(posts) {
link: `${BLOG.LINK}/${post.slug}`,
description: post.summary,
content: await createFeedContent(post),
- date: new Date(post?.publishTime || post?.createdTime)
+ date: new Date(post?.publishTime)
})
}
diff --git a/lib/sitemap.xml.js b/lib/sitemap.xml.js
index 5a626e75..bb5239f1 100644
--- a/lib/sitemap.xml.js
+++ b/lib/sitemap.xml.js
@@ -24,7 +24,7 @@ export async function generateSitemapXml({ allPages }) {
allPages?.forEach(post => {
urls.push({
loc: `${BLOG.LINK}/${post.slug}`,
- lastmod: new Date(post?.publishTime || post?.createdTime).toISOString().split('T')[0],
+ lastmod: new Date(post?.publishTime).toISOString().split('T')[0],
changefreq: 'daily'
})
})
diff --git a/next.config.js b/next.config.js
index 68cf8109..a91e4e81 100644
--- a/next.config.js
+++ b/next.config.js
@@ -94,6 +94,9 @@ module.exports = withBundleAnalyzer({
config.resolve.alias['@theme-components'] = path.resolve(__dirname, 'themes', THEME)
return config
},
+ experimental: {
+ scrollRestoration: true
+ },
publicRuntimeConfig: { // 这里的配置既可以服务端获取到,也可以在浏览器端获取到
NODE_ENV_API: process.env.NODE_ENV_API || 'prod',
THEMES: themes
diff --git a/package.json b/package.json
index d9967502..b98f0b05 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "notion-next",
- "version": "3.16.2",
+ "version": "3.16.3",
"homepage": "https://github.com/tangly1024/NotionNext.git",
"license": "MIT",
"repository": {
diff --git a/pages/404.js b/pages/404.js
index 2a521d7c..c770385f 100644
--- a/pages/404.js
+++ b/pages/404.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router'
import { getLayoutByTheme } from '@/themes/theme'
@@ -21,7 +21,7 @@ const NoFound = props => {
}
export async function getStaticProps () {
- const props = (await getGlobalNotionData({ from: '404' })) || {}
+ const props = (await getGlobalData({ from: '404' })) || {}
return { props }
}
diff --git a/pages/[...slug].js b/pages/[...slug].js
index 38d4f488..941b04e9 100644
--- a/pages/[...slug].js
+++ b/pages/[...slug].js
@@ -1,6 +1,6 @@
import BLOG from '@/blog.config'
import { getPostBlocks } from '@/lib/notion'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useEffect, useState } from 'react'
import { idToUuid } from 'notion-utils'
import { useRouter } from 'next/router'
@@ -61,9 +61,6 @@ const Slug = props => {
post.toc = getPageTableOfContents(post, post.blockMap)
}
}
- router.events.on('routeChangeComplete', () => {
- window.scrollTo({ top: 0, behavior: 'smooth' })
- })
}, [post])
const meta = {
@@ -90,7 +87,7 @@ export async function getStaticPaths() {
}
const from = 'slug-paths'
- const { allPages } = await getGlobalNotionData({ from })
+ const { allPages } = await getGlobalData({ from })
return {
paths: allPages?.map(row => ({ params: { slug: [row.slug] } })),
fallback: true
@@ -105,7 +102,7 @@ export async function getStaticProps({ params: { slug } }) {
}
}
const from = `slug-props-${fullSlug}`
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
// 在列表内查找文章
props.post = props?.allPages?.find((p) => {
return p.slug === fullSlug || p.id === idToUuid(fullSlug)
diff --git a/pages/archive/index.js b/pages/archive/index.js
index 7a94f224..917fee76 100644
--- a/pages/archive/index.js
+++ b/pages/archive/index.js
@@ -1,10 +1,11 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
-import React, { useEffect } from 'react'
+import { getGlobalData } from '@/lib/notion/getNotionData'
+import { useEffect } from 'react'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import { useRouter } from 'next/router'
import { getLayoutByTheme } from '@/themes/theme'
import { isBrowser } from '@/lib/utils'
+import { formatDateFmt } from '@/lib/formatDate'
const ArchiveIndex = props => {
const { siteInfo } = props
@@ -41,7 +42,7 @@ const ArchiveIndex = props => {
}
export async function getStaticProps() {
- const props = await getGlobalNotionData({ from: 'archive-index' })
+ const props = await getGlobalData({ from: 'archive-index' })
// 处理分页
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published')
delete props.allPages
@@ -49,15 +50,13 @@ export async function getStaticProps() {
const postsSortByDate = Object.create(props.posts)
postsSortByDate.sort((a, b) => {
- const dateA = new Date(a?.publishTime || a.createdTime)
- const dateB = new Date(b?.publishTime || b.createdTime)
- return dateB - dateA
+ return b?.publishDate - a?.publishDate
})
const archivePosts = {}
postsSortByDate.forEach(post => {
- const date = post.date?.start_date?.slice(0, 7) || post.createdTime
+ const date = formatDateFmt(post.publishDate, 'yyyy-MM')
if (archivePosts[date]) {
archivePosts[date].push(post)
} else {
diff --git a/pages/category/[category]/index.js b/pages/category/[category]/index.js
index 3b37cca9..55300733 100644
--- a/pages/category/[category]/index.js
+++ b/pages/category/[category]/index.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import React from 'react'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
@@ -34,7 +34,7 @@ export default function Category(props) {
export async function getStaticProps({ params: { category } }) {
const from = 'category-props'
- let props = await getGlobalNotionData({ from })
+ let props = await getGlobalData({ from })
// 过滤状态
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published')
@@ -61,7 +61,7 @@ export async function getStaticProps({ params: { category } }) {
export async function getStaticPaths() {
const from = 'category-paths'
- const { categoryOptions } = await getGlobalNotionData({ from })
+ const { categoryOptions } = await getGlobalData({ from })
return {
paths: Object.keys(categoryOptions).map(category => ({
params: { category: categoryOptions[category]?.name }
diff --git a/pages/category/[category]/page/[page].js b/pages/category/[category]/page/[page].js
index c9b0ae1a..2f860c25 100644
--- a/pages/category/[category]/page/[page].js
+++ b/pages/category/[category]/page/[page].js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import React from 'react'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
@@ -34,7 +34,7 @@ export default function Category(props) {
export async function getStaticProps({ params: { category, page } }) {
const from = 'category-page-props'
- let props = await getGlobalNotionData({ from })
+ let props = await getGlobalData({ from })
// 过滤状态类型
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published').filter(post => post && post.category && post.category.includes(category))
@@ -56,7 +56,7 @@ export async function getStaticProps({ params: { category, page } }) {
export async function getStaticPaths() {
const from = 'category-paths'
- const { categoryOptions, allPages } = await getGlobalNotionData({ from })
+ const { categoryOptions, allPages } = await getGlobalData({ from })
const paths = []
categoryOptions?.forEach(category => {
diff --git a/pages/category/index.js b/pages/category/index.js
index 7eb5598e..b4872000 100644
--- a/pages/category/index.js
+++ b/pages/category/index.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import React from 'react'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
@@ -30,7 +30,7 @@ export default function Category(props) {
}
export async function getStaticProps() {
- const props = await getGlobalNotionData({ from: 'category-index-props' })
+ const props = await getGlobalData({ from: 'category-index-props' })
delete props.allPages
return {
props,
diff --git a/pages/index.js b/pages/index.js
index 897e6a11..af85c245 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,6 +1,6 @@
import BLOG from '@/blog.config'
import { getPostBlocks } from '@/lib/notion'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { generateRss } from '@/lib/rss'
import { generateRobotsTxt } from '@/lib/robots.txt'
@@ -24,7 +24,7 @@ const Index = props => {
*/
export async function getStaticProps() {
const from = 'index'
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
const { siteInfo } = props
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published')
diff --git a/pages/page/[page].js b/pages/page/[page].js
index 0751b10b..74b7f25b 100644
--- a/pages/page/[page].js
+++ b/pages/page/[page].js
@@ -1,6 +1,6 @@
import BLOG from '@/blog.config'
import { getPostBlocks } from '@/lib/notion'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useRouter } from 'next/router'
import { getLayoutByTheme } from '@/themes/theme'
@@ -30,7 +30,7 @@ const Page = props => {
export async function getStaticPaths() {
const from = 'page-paths'
- const { postCount } = await getGlobalNotionData({ from })
+ const { postCount } = await getGlobalData({ from })
const totalPages = Math.ceil(postCount / BLOG.POSTS_PER_PAGE)
return {
// remove first page, we 're not gonna handle that.
@@ -43,7 +43,7 @@ export async function getStaticPaths() {
export async function getStaticProps({ params: { page } }) {
const from = `page-${page}`
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
const { allPages } = props
const allPosts = allPages.filter(page => page.type === 'Post' && page.status === 'Published')
// 处理分页
diff --git a/pages/search/[keyword]/index.js b/pages/search/[keyword]/index.js
index 22e47639..59e26f96 100644
--- a/pages/search/[keyword]/index.js
+++ b/pages/search/[keyword]/index.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useGlobal } from '@/lib/global'
import { getDataFromCache } from '@/lib/cache/cache_manager'
import BLOG from '@/blog.config'
@@ -31,7 +31,7 @@ const Index = props => {
* @returns
*/
export async function getStaticProps({ params: { keyword } }) {
- const props = await getGlobalNotionData({
+ const props = await getGlobalData({
from: 'search-props',
pageType: ['Post']
})
diff --git a/pages/search/[keyword]/page/[page].js b/pages/search/[keyword]/page/[page].js
index 090673b9..e706e9b8 100644
--- a/pages/search/[keyword]/page/[page].js
+++ b/pages/search/[keyword]/page/[page].js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useGlobal } from '@/lib/global'
import { getDataFromCache } from '@/lib/cache/cache_manager'
import BLOG from '@/blog.config'
@@ -31,7 +31,7 @@ const Index = props => {
* @returns
*/
export async function getStaticProps({ params: { keyword, page } }) {
- const props = await getGlobalNotionData({
+ const props = await getGlobalData({
from: 'search-props',
pageType: ['Post']
})
diff --git a/pages/search/index.js b/pages/search/index.js
index 527fd96c..9fe02dbb 100644
--- a/pages/search/index.js
+++ b/pages/search/index.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router'
import BLOG from '@/blog.config'
@@ -45,7 +45,7 @@ const Search = props => {
* 浏览器前端搜索
*/
export async function getStaticProps() {
- const props = await getGlobalNotionData({
+ const props = await getGlobalData({
from: 'search-props',
pageType: ['Post']
})
diff --git a/pages/sitemap.xml.js b/pages/sitemap.xml.js
index 9dbb5ab7..a613a277 100644
--- a/pages/sitemap.xml.js
+++ b/pages/sitemap.xml.js
@@ -1,10 +1,10 @@
// pages/sitemap.xml.js
import { getServerSideSitemap } from 'next-sitemap'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import BLOG from '@/blog.config'
export const getServerSideProps = async (ctx) => {
- const { allPages } = await getGlobalNotionData({ from: 'rss' })
+ const { allPages } = await getGlobalData({ from: 'rss' })
const defaultFields = [
{
loc: `${BLOG.LINK}`,
@@ -41,7 +41,7 @@ export const getServerSideProps = async (ctx) => {
const postFields = allPages?.filter(p => p.status === BLOG.NOTION_PROPERTY_NAME.status_publish)?.map(post => {
return {
loc: `${BLOG.LINK}/${post.slug}`,
- lastmod: new Date(post?.publishTime || post?.createdTime).toISOString().split('T')[0],
+ lastmod: new Date(post?.publishTime).toISOString().split('T')[0],
changefreq: 'daily',
priority: '0.7'
}
diff --git a/pages/tag/[tag]/index.js b/pages/tag/[tag]/index.js
index cd946bb7..a211fc36 100644
--- a/pages/tag/[tag]/index.js
+++ b/pages/tag/[tag]/index.js
@@ -1,5 +1,5 @@
import { useGlobal } from '@/lib/global'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import BLOG from '@/blog.config'
import { useRouter } from 'next/router'
import { getLayoutByTheme } from '@/themes/theme'
@@ -30,7 +30,7 @@ const Tag = props => {
export async function getStaticProps({ params: { tag } }) {
const from = 'tag-props'
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
// 过滤状态
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published').filter(post => post && post.tags && post.tags.includes(tag))
@@ -68,7 +68,7 @@ function getTagNames(tags) {
export async function getStaticPaths() {
const from = 'tag-static-path'
- const { tagOptions } = await getGlobalNotionData({ from })
+ const { tagOptions } = await getGlobalData({ from })
const tagNames = getTagNames(tagOptions)
return {
diff --git a/pages/tag/[tag]/page/[page].js b/pages/tag/[tag]/page/[page].js
index 6d599f2d..92d01820 100644
--- a/pages/tag/[tag]/page/[page].js
+++ b/pages/tag/[tag]/page/[page].js
@@ -1,5 +1,5 @@
import { useGlobal } from '@/lib/global'
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import BLOG from '@/blog.config'
import { useRouter } from 'next/router'
import { getLayoutByTheme } from '@/themes/theme'
@@ -25,7 +25,7 @@ const Tag = props => {
export async function getStaticProps({ params: { tag, page } }) {
const from = 'tag-page-props'
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
// 过滤状态、标签
props.posts = props.allPages.filter(page => page.type === 'Post' && page.status === 'Published').filter(post => post && post.tags && post.tags.includes(tag))
// 处理文章数
@@ -44,7 +44,7 @@ export async function getStaticProps({ params: { tag, page } }) {
export async function getStaticPaths() {
const from = 'tag-page-static-path'
- const { tagOptions, allPages } = await getGlobalNotionData({ from })
+ const { tagOptions, allPages } = await getGlobalData({ from })
const paths = []
tagOptions?.forEach(tag => {
// 过滤状态类型
diff --git a/pages/tag/index.js b/pages/tag/index.js
index 66f940f3..54dab9a4 100644
--- a/pages/tag/index.js
+++ b/pages/tag/index.js
@@ -1,4 +1,4 @@
-import { getGlobalNotionData } from '@/lib/notion/getNotionData'
+import { getGlobalData } from '@/lib/notion/getNotionData'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
import { useRouter } from 'next/router'
@@ -30,7 +30,7 @@ const TagIndex = props => {
export async function getStaticProps() {
const from = 'tag-index-props'
- const props = await getGlobalNotionData({ from })
+ const props = await getGlobalData({ from })
delete props.allPages
return {
props,
diff --git a/themes/fukasawa/components/ArticleDetail.js b/themes/fukasawa/components/ArticleDetail.js
index afcb2cc9..7347b9c0 100644
--- a/themes/fukasawa/components/ArticleDetail.js
+++ b/themes/fukasawa/components/ArticleDetail.js
@@ -19,7 +19,7 @@ export default function ArticleDetail(props) {
if (!post) {
return <>>
}
- const date = formatDate(post?.publishTime || post?.createdTime, locale.LOCALE)
+ const date = formatDate(post?.publishTime, locale.LOCALE)
return (
{post?.type && !post?.type !== 'Page' && post?.pageCover && (
diff --git a/themes/gitbook/LayoutBase.js b/themes/gitbook/LayoutBase.js
new file mode 100644
index 00000000..071a68a0
--- /dev/null
+++ b/themes/gitbook/LayoutBase.js
@@ -0,0 +1,138 @@
+import CommonHead from '@/components/CommonHead'
+import { useState, createContext, useContext, useEffect } from 'react'
+import Footer from './components/Footer'
+import InfoCard from './components/InfoCard'
+import RevolverMaps from './components/RevolverMaps'
+import CONFIG_GITBOOK from './config_gitbook'
+import TopNavBar from './components/TopNavBar'
+import SearchInput from './components/SearchInput'
+import { useGlobal } from '@/lib/global'
+import Live2D from '@/components/Live2D'
+import BLOG from '@/blog.config'
+import NavPostList from './components/NavPostList'
+import ArticleInfo from './components/ArticleInfo'
+import Catalog from './components/Catalog'
+import { useRouter } from 'next/router'
+import Announcement from './components/Announcement'
+import PageNavDrawer from './components/PageNavDrawer'
+import FloatTocButton from './components/FloatTocButton'
+import { AdSlot } from '@/components/GoogleAdsense'
+import JumpToTopButton from './components/JumpToTopButton'
+const ThemeGlobalMedium = createContext()
+
+/**
+ * 基础布局 采用左右两侧布局,移动端使用顶部导航栏
+
+ * @returns {JSX.Element}
+ * @constructor
+ */
+const LayoutBase = (props) => {
+ const { children, meta, post, allNavPages, slotLeft, slotRight, slotTop } = props
+ const [tocVisible, changeTocVisible] = useState(false)
+ const [pageNavVisible, changePageNavVisible] = useState(false)
+ const [filterPosts, setFilterPosts] = useState(allNavPages)
+ const { onLoading } = useGlobal()
+ const router = useRouter()
+
+ const showTocButton = post?.toc?.length > 1
+
+ useEffect(() => {
+ setFilterPosts(allNavPages)
+ }, [post])
+
+ const LoadingCover =
+
+ return (
+
+
+
+
+ {/* 顶部导航栏 */}
+
+
+
+
+ {/* 左侧推拉抽屉 */}
+
+
+ {slotLeft}
+
+
+
+ {/* 所有文章列表 */}
+
+
+
+
+
+
+
+
+
+
+
+
+ {slotTop}
+
+
+
+ {onLoading ? LoadingCover : children}
+
+
+
+ {/* 回顶按钮 */}
+
+
+
+ {/* 底部 */}
+
+
+
+
+
+
+ {/* 右侧侧推拉抽屉 */}
+
+
+
+
+
+
+ {slotRight}
+ {router.route === '/' && <>
+
+ {CONFIG_GITBOOK.WIDGET_REVOLVER_MAPS === 'true' &&
}
+
+ >}
+ {/* gitbook主题首页只显示公告 */}
+
+
+
+
+
+
+
+
+
+
+ {showTocButton && !tocVisible &&
+
+
}
+
+
+
+ {/* 移动端底部导航栏 */}
+ {/*
*/}
+
+
+ )
+}
+
+export default LayoutBase
+export const useGitBookGlobal = () => useContext(ThemeGlobalMedium)
diff --git a/themes/gitbook/components/Footer.js b/themes/gitbook/components/Footer.js
index 0f09eceb..a5ef6f8f 100644
--- a/themes/gitbook/components/Footer.js
+++ b/themes/gitbook/components/Footer.js
@@ -1,7 +1,7 @@
import React from 'react'
import BLOG from '@/blog.config'
-const Footer = ({ title }) => {
+const Footer = ({ siteInfo }) => {
const d = new Date()
const currentYear = d.getFullYear()
const copyrightDate = (function () {
@@ -13,23 +13,24 @@ const Footer = ({ title }) => {
return (