nnbb 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -0
- package/.env.local +2 -0
- package/.eslintrc.json +15 -0
- package/.github/stale.yml +16 -0
- package/.github/workflows/codeql-analysis.yml +73 -0
- package/.github/workflows/docker-ghcr.yaml +59 -0
- package/.prettierrc +9 -0
- package/.vscode/launch.json +28 -0
- package/.vscode/settings.json +6 -0
- package/Dockerfile +38 -0
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/blog.config.js +454 -0
- package/components/Ackee.js +83 -0
- package/components/AdBlockDetect.js +40 -0
- package/components/AlgoliaSearchModal.js +250 -0
- package/components/Artalk.js +30 -0
- package/components/Busuanzi.js +26 -0
- package/components/ChatBase.js +19 -0
- package/components/Collapse.tsx +134 -0
- package/components/Comment.js +161 -0
- package/components/CommonHead.tsx +101 -0
- package/components/CommonScript.js +125 -0
- package/components/CusdisComponent.js +35 -0
- package/components/CustomContextMenu.js +221 -0
- package/components/DebugPanel.js +134 -0
- package/components/DisableCopy.js +21 -0
- package/components/Draggable.js +167 -0
- package/components/Equation.js +31 -0
- package/components/ExternalPlugins.js +75 -0
- package/components/ExternalScript.js +29 -0
- package/components/FacebookMessenger.js +255 -0
- package/components/FacebookPage.js +34 -0
- package/components/Fireworks.js +210 -0
- package/components/FlipCard.js +56 -0
- package/components/FlutteringRibbon.js +322 -0
- package/components/FullScreenButton.js +48 -0
- package/components/Giscus.js +33 -0
- package/components/Gitalk.js +42 -0
- package/components/GoogleAdsense.js +111 -0
- package/components/Gtag.js +18 -0
- package/components/HeroIcons.tsx +321 -0
- package/components/KatexReact.js +53 -0
- package/components/LazyImage.js +95 -0
- package/components/Live2D.js +52 -0
- package/components/Loading.js +20 -0
- package/components/Mark.js +28 -0
- package/components/NProgress.ts +8 -0
- package/components/Nest.js +124 -0
- package/components/NotionIcon.js +20 -0
- package/components/NotionPage.tsx +206 -0
- package/components/Player.js +54 -0
- package/components/PrismMac.js +236 -0
- package/components/QrCode.js +34 -0
- package/components/Ribbon.js +98 -0
- package/components/Sakura.js +192 -0
- package/components/Select.js +40 -0
- package/components/ShareBar.js +29 -0
- package/components/ShareButtons.js +403 -0
- package/components/SideBarDrawer.js +50 -0
- package/components/StarrySky.js +130 -0
- package/components/Tabs.js +64 -0
- package/components/ThemeSwitch.js +67 -0
- package/components/Twikoo.js +27 -0
- package/components/TwikooCommentCount.js +22 -0
- package/components/TwikooCommentCounter.js +78 -0
- package/components/TwikooRecentComments.js +11 -0
- package/components/Utterances.js +35 -0
- package/components/VConsole.js +76 -0
- package/components/ValineComponent.js +59 -0
- package/components/ValineCount.js +6 -0
- package/components/ValinePanel.js +3 -0
- package/components/Vercel.tsx +54 -0
- package/components/WWAds.js +18 -0
- package/components/WalineComponent.js +83 -0
- package/components/WebMention.js +173 -0
- package/components/Webwhiz.js +17 -0
- package/components/WordCount.js +73 -0
- package/hooks/useToggleClickOutSide.ts +32 -0
- package/hooks/useWindowSize.ts +30 -0
- package/lib/algolia.js +108 -0
- package/lib/busuanzi.js +99 -0
- package/lib/cache/cacheManager.ts +49 -0
- package/lib/cache/localFileCache.ts +56 -0
- package/lib/cache/memoryMache.ts +20 -0
- package/lib/cache/mongoDbCache.ts +70 -0
- package/lib/cache/types.ts +5 -0
- package/lib/font.js +46 -0
- package/lib/global.tsx +129 -0
- package/lib/gtag.js +17 -0
- package/lib/mailchimp.js +49 -0
- package/lib/memorize.js +0 -0
- package/lib/mhchem.js +1696 -0
- package/lib/notion/getAllCategories.ts +51 -0
- package/lib/notion/getAllPageIds.ts +51 -0
- package/lib/notion/getAllPosts.js +68 -0
- package/lib/notion/getAllTags.ts +43 -0
- package/lib/notion/getNotionData.ts +340 -0
- package/lib/notion/getPageInfoOfPostPage.ts +58 -0
- package/lib/notion/getPageProperties.ts +203 -0
- package/lib/notion/getPageTableOfContents.ts +107 -0
- package/lib/notion/getPostBlocks.ts +147 -0
- package/lib/notion/mapImage.ts +130 -0
- package/lib/notion/types.ts +125 -0
- package/lib/notion.js +2 -0
- package/lib/robots.txt.js +25 -0
- package/lib/rss.js +63 -0
- package/lib/sitemap.xml.js +67 -0
- package/lib/utils.js +212 -0
- package/next-env.d.ts +5 -0
- package/next-i18next.config.js +7 -0
- package/next-sitemap.config.js +11 -0
- package/next.config.js +124 -0
- package/package.json +92 -0
- package/pages/404.tsx +40 -0
- package/pages/[prefix]/[slug].tsx +123 -0
- package/pages/[prefix]/index.tsx +223 -0
- package/pages/_app.js +59 -0
- package/pages/_document.js +42 -0
- package/pages/api/subscribe.js +22 -0
- package/pages/archive/index.tsx +79 -0
- package/pages/category/[category]/index.tsx +87 -0
- package/pages/category/[category]/page/[page].tsx +103 -0
- package/pages/category/index.tsx +43 -0
- package/pages/index.tsx +88 -0
- package/pages/page/[page].tsx +93 -0
- package/pages/search/[keyword]/index.tsx +162 -0
- package/pages/search/[keyword]/page/[page].tsx +166 -0
- package/pages/search/index.tsx +69 -0
- package/pages/sitemap.xml.js +70 -0
- package/pages/tag/[tag]/index.tsx +73 -0
- package/pages/tag/[tag]/page/[page].tsx +87 -0
- package/pages/tag/index.tsx +42 -0
- package/postcss.config.js +6 -0
- package/public/ads.txt +1 -0
- package/public/avatar.png +0 -0
- package/public/avatar.svg +11 -0
- package/public/bg_image.jpg +0 -0
- package/public/css/all.min.css +9 -0
- package/public/css/custom.css +8 -0
- package/public/css/img-shadow.css +5 -0
- package/public/css/prism-mac-style.css +58 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.svg +9 -0
- package/public/js/cusdis.es.js +107 -0
- package/public/js/custom.js +1 -0
- package/public/locales/en/common.json +44 -0
- package/public/locales/en/menu.json +9 -0
- package/public/locales/en/nav.json +11 -0
- package/public/locales/zh-CN/common.json +44 -0
- package/public/locales/zh-CN/menu.json +9 -0
- package/public/locales/zh-CN/nav.json +9 -0
- package/public/webfonts/fa-brands-400.ttf +0 -0
- package/public/webfonts/fa-brands-400.woff2 +0 -0
- package/public/webfonts/fa-regular-400.ttf +0 -0
- package/public/webfonts/fa-regular-400.woff2 +0 -0
- package/public/webfonts/fa-solid-900.ttf +0 -0
- package/public/webfonts/fa-solid-900.woff2 +0 -0
- package/public/webfonts/fa-v4compatibility.ttf +0 -0
- package/public/webfonts/fa-v4compatibility.woff2 +0 -0
- package/styles/animate.css +503 -0
- package/styles/globals.css +183 -0
- package/styles/notion.css +2064 -0
- package/styles/nprogress.css +84 -0
- package/styles/prism-theme.css +119 -0
- package/styles/utility-patterns.css +79 -0
- package/tailwind.config.js +37 -0
- package/theme/index.ts +6 -0
- package/theme/types/@theme-components.d.ts +29 -0
- package/theme/useLayout.ts +41 -0
- package/theme/utils.ts +108 -0
- package/themes/innocent/package.json +7 -0
- package/themes/innocent/theme.config.js +1 -0
- package/themes/nobelium/components/Announcement.tsx +27 -0
- package/themes/nobelium/components/ArticleFooter.tsx +39 -0
- package/themes/nobelium/components/ArticleInfo.tsx +58 -0
- package/themes/nobelium/components/ArticleLock.tsx +86 -0
- package/themes/nobelium/components/BlogArchiveItem.js +41 -0
- package/themes/nobelium/components/BlogListBar.js +39 -0
- package/themes/nobelium/components/BlogListPage.tsx +67 -0
- package/themes/nobelium/components/BlogListScroll.tsx +96 -0
- package/themes/nobelium/components/BlogPost.tsx +33 -0
- package/themes/nobelium/components/DarkModeButton.tsx +50 -0
- package/themes/nobelium/components/ExampleRecentComments.js +35 -0
- package/themes/nobelium/components/Footer.tsx +35 -0
- package/themes/nobelium/components/JumpToTopButton.tsx +39 -0
- package/themes/nobelium/components/LanguageSwitchButton.tsx +58 -0
- package/themes/nobelium/components/MenuItemCollapse.tsx +92 -0
- package/themes/nobelium/components/MenuItemDrop.tsx +83 -0
- package/themes/nobelium/components/Nav/Nav.module.css +50 -0
- package/themes/nobelium/components/Nav/Nav.tsx +187 -0
- package/themes/nobelium/components/RandomPostButton.tsx +31 -0
- package/themes/nobelium/components/SearchButton.tsx +31 -0
- package/themes/nobelium/components/SearchInput.tsx +94 -0
- package/themes/nobelium/components/SearchNavBar.js +19 -0
- package/themes/nobelium/components/SideBar.js +83 -0
- package/themes/nobelium/components/SvgIcon.js +29 -0
- package/themes/nobelium/components/TagItem.js +13 -0
- package/themes/nobelium/components/Tags.tsx +44 -0
- package/themes/nobelium/components/Title.js +19 -0
- package/themes/nobelium/index.tsx +28 -0
- package/themes/nobelium/layout/LayoutBase.tsx +79 -0
- package/themes/nobelium/pages/Archive.tsx +30 -0
- package/themes/nobelium/pages/Category.tsx +43 -0
- package/themes/nobelium/pages/Home.tsx +22 -0
- package/themes/nobelium/pages/PageNotFound.tsx +15 -0
- package/themes/nobelium/pages/Post.tsx +34 -0
- package/themes/nobelium/pages/PostList.tsx +74 -0
- package/themes/nobelium/pages/Search.tsx +65 -0
- package/themes/nobelium/pages/Tag.tsx +42 -0
- package/themes/nobelium/providers/index.tsx +60 -0
- package/themes/nobelium/stores/index.tsx +42 -0
- package/themes/nobelium/theme.config.ts +17 -0
- package/themes/nobelium/types/index.ts +10 -0
- package/tsconfig.json +29 -0
- package/types/index.ts +1 -0
- package/types/page.ts +102 -0
- package/vercel.json +5 -0
package/blog.config.js
ADDED
@@ -0,0 +1,454 @@
|
|
1
|
+
// 注: process.env.XX是Vercel的环境变量,配置方式见:https://docs.tangly1024.com/article/how-to-config-notion-next#c4768010ae7d44609b744e79e2f9959a
|
2
|
+
const BLOG = {
|
3
|
+
// Important page_id!!!Duplicate Template from https://www.notion.so/tanghh/02ab3b8678004aa69e9e415905ef32a5
|
4
|
+
NOTION_PAGE_ID:
|
5
|
+
process.env.NOTION_PAGE_ID || 'bd97cd8eaf6e40cab04bcc654a8b87c2',
|
6
|
+
PSEUDO_STATIC: false, // 伪静态路径,开启后所有文章URL都以 .html 结尾。
|
7
|
+
// TODO: 类型判断
|
8
|
+
NEXT_REVALIDATE_SECOND: 5, // 更新内容缓存间隔 单位(秒);即每个页面有5秒的纯静态期、此期间无论多少次访问都不会抓取notion数据;调大该值有助于节省Vercel资源、同时提升访问速率,但也会使文章更新有延迟。
|
9
|
+
THEME: process.env.NEXT_PUBLIC_THEME || 'nobelium', // 当前主题,在themes文件夹下可找到所有支持的主题;主题名称就是文件夹名,例如 example,fukasawa,gitbook,heo,hexo,landing,matery,medium,next,nobelium,plog,simple
|
10
|
+
THEME_SWITCH: process.env.NEXT_PUBLIC_THEME_SWITCH || false, // 是否显示切换主题按钮
|
11
|
+
LANG: process.env.NEXT_PUBLIC_LANG || 'en-US', // e.g 'zh-CN','en-US' see /lib/lang.js for more.
|
12
|
+
SINCE: 2021, // e.g if leave this empty, current year will be used.
|
13
|
+
APPEARANCE: process.env.NEXT_PUBLIC_APPEARANCE || 'light', // ['light', 'dark', 'auto'], // light 日间模式 , dark夜间模式, auto根据时间和主题自动夜间模式
|
14
|
+
APPEARANCE_DARK_TIME: [18, 6], // 夜间模式起至时间,false时关闭根据时间自动切换夜间模式
|
15
|
+
|
16
|
+
// 3.14.1版本后,欢迎语在此配置,英文逗号隔开 , 即可支持多个欢迎语打字效果。
|
17
|
+
GREETING_WORDS:
|
18
|
+
process.env.NEXT_PUBLIC_GREETING_WORDS ||
|
19
|
+
'嗨,我是糕糕,欢迎来到我的博客🎉',
|
20
|
+
|
21
|
+
AUTHOR: process.env.NEXT_PUBLIC_AUTHOR || '糕糕', // 您的昵称 例如 tangly1024
|
22
|
+
BIO: process.env.NEXT_PUBLIC_BIO || '一只咸鱼🐟', // 作者简介
|
23
|
+
LINK: process.env.NEXT_PUBLIC_LINK || 'https://04.lu', // 网站地址
|
24
|
+
KEYWORDS: process.env.NEXT_PUBLIC_KEYWORD || 'Notion, 博客', // 网站关键词 英文逗号隔开
|
25
|
+
|
26
|
+
// 社交链接,不需要可留空白,例如 CONTACT_WEIBO:''
|
27
|
+
CONTACT_EMAIL: process.env.NEXT_PUBLIC_CONTACT_EMAIL || '811460602@qq.com', // 邮箱地址 例如mail@tangly1024.com
|
28
|
+
CONTACT_WEIBO: process.env.NEXT_PUBLIC_CONTACT_WEIBO || '', // 你的微博个人主页
|
29
|
+
CONTACT_TWITTER: process.env.NEXT_PUBLIC_CONTACT_TWITTER || '', // 你的twitter个人主页
|
30
|
+
CONTACT_GITHUB:
|
31
|
+
process.env.NEXT_PUBLIC_CONTACT_GITHUB || 'https://github.com/meannoharm', // 你的github个人主页 例如 https://github.com/tangly1024
|
32
|
+
CONTACT_TELEGRAM: process.env.NEXT_PUBLIC_CONTACT_TELEGRAM || '', // 你的telegram 地址 例如 https://t.me/tangly_1024
|
33
|
+
CONTACT_LINKEDIN: process.env.NEXT_PUBLIC_CONTACT_LINKEDIN || '', // 你的linkedIn 首页
|
34
|
+
CONTACT_INSTAGRAM: process.env.NEXT_PUBLIC_CONTACT_INSTAGRAM || '', // 您的instagram地址
|
35
|
+
CONTACT_BILIBILI: process.env.NEXT_PUBLIC_CONTACT_BILIBILI || '', // B站主页
|
36
|
+
CONTACT_YOUTUBE: process.env.NEXT_PUBLIC_CONTACT_YOUTUBE || '', // Youtube主页
|
37
|
+
|
38
|
+
NOTION_HOST: process.env.NEXT_PUBLIC_NOTION_HOST || 'https://www.notion.so', // Notion域名,您可以选择用自己的域名进行反向代理,如果不懂得什么是反向代理,请勿修改此项
|
39
|
+
|
40
|
+
BLOG_FAVICON: process.env.NEXT_PUBLIC_FAVICON || '/favicon.ico', // blog favicon 配置, 默认使用 /public/favicon.ico,支持在线图片,如 https://img.imesong.com/favicon.png
|
41
|
+
|
42
|
+
// START ************网站字体*****************
|
43
|
+
|
44
|
+
FONT_STYLE: process.env.NEXT_PUBLIC_FONT_STYLE || 'font-sans', // ['font-serif','font-sans'] 两种可选,分别是衬线和无衬线: 参考 https://www.jianshu.com/p/55e410bd2115
|
45
|
+
// 字体CSS 例如 https://npm.elemecdn.com/lxgw-wenkai-webfont@1.6.0/style.css
|
46
|
+
FONT_URL: [
|
47
|
+
// 'https://npm.elemecdn.com/lxgw-wenkai-webfont@1.6.0/style.css',
|
48
|
+
'https://fonts.googleapis.com/css?family=Bitter&display=swap',
|
49
|
+
'https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300&display=swap',
|
50
|
+
'https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@300&display=swap',
|
51
|
+
],
|
52
|
+
// 无衬线字体 例如'"LXGW WenKai"'
|
53
|
+
FONT_SANS: [
|
54
|
+
// '"LXGW WenKai"',
|
55
|
+
'"PingFang SC"',
|
56
|
+
'-apple-system',
|
57
|
+
'BlinkMacSystemFont',
|
58
|
+
'"Hiragino Sans GB"',
|
59
|
+
'"Microsoft YaHei"',
|
60
|
+
'"Segoe UI Emoji"',
|
61
|
+
'"Segoe UI Symbol"',
|
62
|
+
'"Segoe UI"',
|
63
|
+
'"Noto Sans SC"',
|
64
|
+
'HarmonyOS_Regular',
|
65
|
+
'"Helvetica Neue"',
|
66
|
+
'Helvetica',
|
67
|
+
'"Source Han Sans SC"',
|
68
|
+
'Arial',
|
69
|
+
'sans-serif',
|
70
|
+
'"Apple Color Emoji"',
|
71
|
+
],
|
72
|
+
// 衬线字体 例如'"LXGW WenKai"'
|
73
|
+
FONT_SERIF: [
|
74
|
+
// '"LXGW WenKai"',
|
75
|
+
'Bitter',
|
76
|
+
'"Noto Serif SC"',
|
77
|
+
'SimSun',
|
78
|
+
'"Times New Roman"',
|
79
|
+
'Times',
|
80
|
+
'serif',
|
81
|
+
'"Segoe UI Emoji"',
|
82
|
+
'"Segoe UI Symbol"',
|
83
|
+
'"Apple Color Emoji"',
|
84
|
+
],
|
85
|
+
FONT_AWESOME:
|
86
|
+
process.env.NEXT_PUBLIC_FONT_AWESOME_PATH ||
|
87
|
+
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css', // font-awesome 字体图标地址; 可选 /css/all.min.css , https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/6.0.0/css/all.min.css
|
88
|
+
|
89
|
+
// END ************网站字体*****************
|
90
|
+
CAN_COPY: process.env.NEXT_PUBLIC_CAN_COPY || true, // 是否允许复制页面内容 默认允许,如果设置为false、则全栈禁止复制内容。
|
91
|
+
CUSTOM_RIGHT_CLICK_CONTEXT_MENU:
|
92
|
+
process.env.NEXT_PUBLIC_CUSTOM_RIGHT_CLICK_CONTEXT_MENU || false, // 自定义右键菜单,覆盖系统菜单
|
93
|
+
|
94
|
+
// 自定义外部脚本,外部样式
|
95
|
+
CUSTOM_EXTERNAL_JS: [''], // e.g. ['http://xx.com/script.js','http://xx.com/script.js']
|
96
|
+
CUSTOM_EXTERNAL_CSS: [''], // e.g. ['http://xx.com/style.css','http://xx.com/style.css']
|
97
|
+
|
98
|
+
// 侧栏布局 是否反转(左变右,右变左) 已支持主题: hexo next medium fukasawa example
|
99
|
+
LAYOUT_SIDEBAR_REVERSE: false,
|
100
|
+
|
101
|
+
// 一个小插件展示你的facebook fan page~ @see https://tw.andys.pro/article/add-facebook-fanpage-notionnext
|
102
|
+
FACEBOOK_PAGE_TITLE: process.env.NEXT_PUBLIC_FACEBOOK_PAGE_TITLE || null, // 邊欄 Facebook Page widget 的標題欄,填''則無標題欄 e.g FACEBOOK 粉絲團'
|
103
|
+
FACEBOOK_PAGE: process.env.NEXT_PUBLIC_FACEBOOK_PAGE || null, // Facebook Page 的連結 e.g https://www.facebook.com/tw.andys.pro
|
104
|
+
FACEBOOK_PAGE_ID: process.env.NEXT_PUBLIC_FACEBOOK_PAGE_ID || '', // Facebook Page ID 來啟用 messenger 聊天功能
|
105
|
+
FACEBOOK_APP_ID: process.env.NEXT_PUBLIC_FACEBOOK_APP_ID || '', // Facebook App ID 來啟用 messenger 聊天功能 获取: https://developers.facebook.com/
|
106
|
+
|
107
|
+
BEI_AN: process.env.NEXT_PUBLIC_BEI_AN || '', // 备案号 闽ICP备XXXXXXX
|
108
|
+
|
109
|
+
// START********代码相关********
|
110
|
+
// PrismJs 代码相关
|
111
|
+
PRISM_JS_PATH: 'https://npm.elemecdn.com/prismjs@1.29.0/components/',
|
112
|
+
PRISM_JS_AUTO_LOADER:
|
113
|
+
'https://npm.elemecdn.com/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js',
|
114
|
+
|
115
|
+
// 代码主题 @see https://github.com/PrismJS/prism-themes
|
116
|
+
PRISM_THEME_PREFIX_PATH:
|
117
|
+
process.env.NEXT_PUBLIC_PRISM_THEME_PREFIX_PATH ||
|
118
|
+
'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-okaidia.css', // 代码块默认主题
|
119
|
+
PRISM_THEME_SWITCH: process.env.NEXT_PUBLIC_PRISM_THEME_SWITCH || true, // 是否开启浅色/深色模式代码主题切换; 开启后将显示以下两个主题
|
120
|
+
PRISM_THEME_LIGHT_PATH:
|
121
|
+
process.env.NEXT_PUBLIC_PRISM_THEME_LIGHT_PATH ||
|
122
|
+
'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-solarizedlight.css', // 浅色模式主题
|
123
|
+
PRISM_THEME_DARK_PATH:
|
124
|
+
process.env.NEXT_PUBLIC_PRISM_THEME_DARK_PATH ||
|
125
|
+
'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-okaidia.min.css', // 深色模式主题
|
126
|
+
|
127
|
+
CODE_MAC_BAR: process.env.NEXT_PUBLIC_CODE_MAC_BAR || true, // 代码左上角显示mac的红黄绿图标
|
128
|
+
CODE_LINE_NUMBERS: process.env.NEXT_PUBLIC_CODE_LINE_NUMBERS || false, // 是否显示行号
|
129
|
+
CODE_COLLAPSE: process.env.NEXT_PUBLIC_CODE_COLLAPSE || true, // 是否折叠代码框
|
130
|
+
// END********代码相关********
|
131
|
+
|
132
|
+
// Mermaid 图表CDN
|
133
|
+
MERMAID_CDN:
|
134
|
+
process.env.NEXT_PUBLIC_MERMAID_CDN ||
|
135
|
+
'https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.2.4/mermaid.min.js', // CDN
|
136
|
+
// QRCodeCDN
|
137
|
+
QR_CODE_CDN:
|
138
|
+
process.env.NEXT_PUBLIC_QR_CODE_CDN ||
|
139
|
+
'https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js',
|
140
|
+
|
141
|
+
BACKGROUND_LIGHT: '#eeeeee', // use hex value, don't forget '#' e.g #fffefc
|
142
|
+
BACKGROUND_DARK: '#000000', // use hex value, don't forget '#'
|
143
|
+
SUB_PATH: '', // leave this empty unless you want to deploy in a folder
|
144
|
+
|
145
|
+
POST_SHARE_BAR_ENABLE: process.env.NEXT_PUBLIC_POST_SHARE_BAR || 'false', // 文章分享功能 ,将在底部显示一个分享条
|
146
|
+
POSTS_SHARE_SERVICES:
|
147
|
+
process.env.NEXT_PUBLIC_POST_SHARE_SERVICES ||
|
148
|
+
'link,wechat,qq,weibo,email,facebook,twitter,telegram,messenger,line,reddit,whatsapp,linkedin', // 分享的服務,按顺序显示,逗号隔开
|
149
|
+
// 所有支持的分享服务:link(复制链接),wechat(微信),qq,weibo(微博),email(邮件),facebook,twitter,telegram,messenger,line,reddit,whatsapp,linkedin,vkshare,okshare,tumblr,livejournal,mailru,viber,workplace,pocket,instapaper,hatena
|
150
|
+
|
151
|
+
POST_URL_PREFIX: process.env.NEXT_PUBLIC_POST_URL_PREFIX || 'article',
|
152
|
+
// POST类型文章的默认路径前缀,例如默认POST类型的路径是 /article/[slug]
|
153
|
+
// 如果此项配置为 '' 空, 则文章将没有前缀路径,使用场景: 希望文章前缀路径为 /post 的情况 支持多级
|
154
|
+
// 支援類似 WP 可自訂文章連結格式的功能:https://wordpress.org/documentation/article/customize-permalinks/,目前只先實作 %year%/%month%/%day%
|
155
|
+
// 例:如想連結改成前綴 article + 時間戳記,可變更為: 'article/%year%/%month%/%day%'
|
156
|
+
|
157
|
+
POST_LIST_STYLE: process.env.NEXT_PUBLIC_POST_LIST_STYLE || 'page', // ['page','scroll] 文章列表样式:页码分页、单页滚动加载
|
158
|
+
POST_LIST_PREVIEW: process.env.NEXT_PUBLIC_POST_PREVIEW || 'false', // 是否在列表加载文章预览
|
159
|
+
POST_PREVIEW_LINES: 12, // 预览博客行数
|
160
|
+
POST_RECOMMEND_COUNT: 6, // 推荐文章数量
|
161
|
+
POSTS_PER_PAGE: 12, // post counts per page
|
162
|
+
POSTS_SORT_BY: process.env.NEXT_PUBLIC_POST_SORT_BY || 'notion', // 排序方式 'date'按时间,'notion'由notion控制
|
163
|
+
|
164
|
+
ALGOLIA_APP_ID: process.env.NEXT_PUBLIC_ALGOLIA_APP_ID || null, // 在这里查看 https://dashboard.algolia.com/account/api-keys/
|
165
|
+
ALGOLIA_ADMIN_APP_KEY: process.env.ALGOLIA_ADMIN_APP_KEY || null, // 管理后台的KEY,不要暴露在代码中,在这里查看 https://dashboard.algolia.com/account/api-keys/
|
166
|
+
ALGOLIA_SEARCH_ONLY_APP_KEY:
|
167
|
+
process.env.NEXT_PUBLIC_ALGOLIA_SEARCH_ONLY_APP_KEY || null, // 客户端搜索用的KEY
|
168
|
+
ALGOLIA_INDEX: process.env.NEXT_PUBLIC_ALGOLIA_INDEX || null, // 在Algolia中创建一个index用作数据库
|
169
|
+
// ALGOLIA_RECREATE_DATA: process.env.ALGOLIA_RECREATE_DATA || process.env.npm_lifecycle_event === 'build', // 为true时重新构建索引数据; 默认在build时会构建
|
170
|
+
|
171
|
+
PREVIEW_CATEGORY_COUNT: 16, // 首页最多展示的分类数量,0为不限制
|
172
|
+
PREVIEW_TAG_COUNT: 16, // 首页最多展示的标签数量,0为不限制
|
173
|
+
|
174
|
+
POST_DISABLE_GALLERY_CLICK: false, // 画册视图禁止点击,方便在友链页面的画册插入链接
|
175
|
+
|
176
|
+
// ********动态特效相关********
|
177
|
+
// 鼠标点击烟花特效
|
178
|
+
FIREWORKS: process.env.NEXT_PUBLIC_FIREWORKS || false, // 开关
|
179
|
+
// 烟花色彩,感谢 https://github.com/Vixcity 提交的色彩
|
180
|
+
FIREWORKS_COLOR: [
|
181
|
+
'255, 20, 97',
|
182
|
+
'24, 255, 146',
|
183
|
+
'90, 135, 255',
|
184
|
+
'251, 243, 140',
|
185
|
+
],
|
186
|
+
|
187
|
+
// 樱花飘落特效
|
188
|
+
SAKURA: process.env.NEXT_PUBLIC_SAKURA || false, // 开关
|
189
|
+
// 漂浮线段特效
|
190
|
+
NEST: process.env.NEXT_PUBLIC_NEST || false, // 开关
|
191
|
+
// 动态彩带特效
|
192
|
+
FLUTTERINGRIBBON: process.env.NEXT_PUBLIC_FLUTTERINGRIBBON || false, // 开关
|
193
|
+
// 静态彩带特效
|
194
|
+
RIBBON: process.env.NEXT_PUBLIC_RIBBON || false, // 开关
|
195
|
+
// 星空雨特效 黑夜模式才会生效
|
196
|
+
STARRY_SKY: process.env.NEXT_PUBLIC_STARRY_SKY || false, // 开关
|
197
|
+
|
198
|
+
// ********挂件组件相关********
|
199
|
+
// Chatbase 是否显示chatbase机器人 https://www.chatbase.co/
|
200
|
+
CHATBASE_ID: process.env.NEXT_PUBLIC_CHATBASE_ID || null,
|
201
|
+
// WebwhizAI 机器人 @see https://github.com/webwhiz-ai/webwhiz
|
202
|
+
WEB_WHIZ_ENABLED: process.env.NEXT_PUBLIC_WEB_WHIZ_ENABLED || false, // 是否显示
|
203
|
+
WEB_WHIZ_BASE_URL:
|
204
|
+
process.env.NEXT_PUBLIC_WEB_WHIZ_BASE_URL || 'https://api.webwhiz.ai', // 可以自建服务器
|
205
|
+
WEB_WHIZ_CHAT_BOT_ID: process.env.NEXT_PUBLIC_WEB_WHIZ_CHAT_BOT_ID || null, // 在后台获取ID
|
206
|
+
|
207
|
+
// 悬浮挂件
|
208
|
+
WIDGET_PET: process.env.NEXT_PUBLIC_WIDGET_PET || false, // 是否显示宠物挂件
|
209
|
+
WIDGET_PET_LINK:
|
210
|
+
process.env.NEXT_PUBLIC_WIDGET_PET_LINK ||
|
211
|
+
'https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json', // 挂件模型地址 @see https://github.com/xiazeyu/live2d-widget-models
|
212
|
+
WIDGET_PET_SWITCH_THEME:
|
213
|
+
process.env.NEXT_PUBLIC_WIDGET_PET_SWITCH_THEME || true, // 点击宠物挂件切换博客主题
|
214
|
+
|
215
|
+
// 音乐播放插件
|
216
|
+
MUSIC_PLAYER: process.env.NEXT_PUBLIC_MUSIC_PLAYER || false, // 是否使用音乐播放插件
|
217
|
+
MUSIC_PLAYER_VISIBLE: process.env.NEXT_PUBLIC_MUSIC_PLAYER_VISIBLE || true, // 是否在左下角显示播放和切换,如果使用播放器,打开自动播放再隐藏,就会以类似背景音乐的方式播放,无法取消和暂停
|
218
|
+
MUSIC_PLAYER_AUTO_PLAY:
|
219
|
+
process.env.NEXT_PUBLIC_MUSIC_PLAYER_AUTO_PLAY || true, // 是否自动播放,不过自动播放时常不生效(移动设备不支持自动播放)
|
220
|
+
MUSIC_PLAYER_LRC_TYPE: process.env.NEXT_PUBLIC_MUSIC_PLAYER_LRC_TYPE || '0', // 歌词显示类型,可选值: 3 | 1 | 0(0:禁用 lrc 歌词,1:lrc 格式的字符串,3:lrc 文件 url)(前提是有配置歌词路径,对 meting 无效)
|
221
|
+
MUSIC_PLAYER_CDN_URL:
|
222
|
+
process.env.NEXT_PUBLIC_MUSIC_PLAYER_CDN_URL ||
|
223
|
+
'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/aplayer/1.10.1/APlayer.min.js',
|
224
|
+
MUSIC_PLAYER_ORDER: process.env.NEXT_PUBLIC_MUSIC_PLAYER_ORDER || 'list', // 默认播放方式,顺序 list,随机 random
|
225
|
+
MUSIC_PLAYER_AUDIO_LIST: [
|
226
|
+
// 示例音乐列表。除了以下配置外,还可配置歌词,具体配置项看此文档 https://aplayer.js.org/#/zh-Hans/
|
227
|
+
{
|
228
|
+
name: '风を共に舞う気持ち',
|
229
|
+
artist: 'Falcom Sound Team jdk',
|
230
|
+
url: 'https://music.163.com/song/media/outer/url?id=731419.mp3',
|
231
|
+
cover:
|
232
|
+
'https://p2.music.126.net/kn6ugISTonvqJh3LHLaPtQ==/599233837187278.jpg',
|
233
|
+
},
|
234
|
+
{
|
235
|
+
name: '王都グランセル',
|
236
|
+
artist: 'Falcom Sound Team jdk',
|
237
|
+
url: 'https://music.163.com/song/media/outer/url?id=731355.mp3',
|
238
|
+
cover:
|
239
|
+
'https://p1.music.126.net/kn6ugISTonvqJh3LHLaPtQ==/599233837187278.jpg',
|
240
|
+
},
|
241
|
+
],
|
242
|
+
MUSIC_PLAYER_METING: process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING || false, // 是否要开启 MetingJS,从平台获取歌单。会覆盖自定义的 MUSIC_PLAYER_AUDIO_LIST,更多配置信息:https://github.com/metowolf/MetingJS
|
243
|
+
MUSIC_PLAYER_METING_SERVER:
|
244
|
+
process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING_SERVER || 'netease', // 音乐平台,[netease, tencent, kugou, xiami, baidu]
|
245
|
+
MUSIC_PLAYER_METING_ID:
|
246
|
+
process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING_ID || '60198', // 对应歌单的 id
|
247
|
+
MUSIC_PLAYER_METING_LRC_TYPE:
|
248
|
+
process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING_LRC_TYPE || '1', // 可选值: 3 | 1 | 0(0:禁用 lrc 歌词,1:lrc 格式的字符串,3:lrc 文件 url)
|
249
|
+
|
250
|
+
// ********挂件组件相关********
|
251
|
+
// ----> 评论互动 可同时开启多个支持 WALINE VALINE GISCUS CUSDIS UTTERRANCES GITALK
|
252
|
+
|
253
|
+
// artalk 评论插件
|
254
|
+
COMMENT_ARTALK_SERVER: process.env.NEXT_PUBLIC_COMMENT_ARTALK_SERVER || '', // ArtalkServert后端地址 https://artalk.js.org/guide/deploy.html
|
255
|
+
COMMENT_ARTALK_JS:
|
256
|
+
process.env.NEXT_PUBLIC_COMMENT_ARTALK_JS ||
|
257
|
+
'https://cdnjs.cloudflare.com/ajax/libs/artalk/2.5.5/Artalk.js', // ArtalkServert js cdn
|
258
|
+
COMMENT_ARTALK_CSS:
|
259
|
+
process.env.NEXT_PUBLIC_COMMENT_ARTALK_CSS ||
|
260
|
+
'https://cdnjs.cloudflare.com/ajax/libs/artalk/2.5.5/Artalk.css', // ArtalkServert css cdn
|
261
|
+
|
262
|
+
// twikoo
|
263
|
+
COMMENT_TWIKOO_ENV_ID: process.env.NEXT_PUBLIC_COMMENT_ENV_ID || '', // TWIKOO后端地址 腾讯云环境填envId;Vercel环境填域名,教程:https://tangly1024.com/article/notionnext-twikoo
|
264
|
+
COMMENT_TWIKOO_COUNT_ENABLE:
|
265
|
+
process.env.NEXT_PUBLIC_COMMENT_TWIKOO_COUNT_ENABLE || false, // 博客列表是否显示评论数
|
266
|
+
COMMENT_TWIKOO_CDN_URL:
|
267
|
+
process.env.NEXT_PUBLIC_COMMENT_TWIKOO_CDN_URL ||
|
268
|
+
'https://cdn.staticfile.org/twikoo/1.6.16/twikoo.min.js', // twikoo客户端cdn
|
269
|
+
|
270
|
+
// utterance
|
271
|
+
COMMENT_UTTERRANCES_REPO:
|
272
|
+
process.env.NEXT_PUBLIC_COMMENT_UTTERRANCES_REPO || '', // 你的代码仓库名, 例如我是 'tangly1024/NotionNext'; 更多文档参考 https://utteranc.es/
|
273
|
+
|
274
|
+
// giscus @see https://giscus.app/
|
275
|
+
COMMENT_GISCUS_REPO: process.env.NEXT_PUBLIC_COMMENT_GISCUS_REPO || '', // 你的Github仓库名 e.g 'tangly1024/NotionNext'
|
276
|
+
COMMENT_GISCUS_REPO_ID: process.env.NEXT_PUBLIC_COMMENT_GISCUS_REPO_ID || '', // 你的Github Repo ID e.g ( 設定完 giscus 即可看到 )
|
277
|
+
COMMENT_GISCUS_CATEGORY_ID:
|
278
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_CATEGORY_ID || '', // 你的Github Discussions 內的 Category ID ( 設定完 giscus 即可看到 )
|
279
|
+
COMMENT_GISCUS_MAPPING:
|
280
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_MAPPING || 'pathname', // 你的Github Discussions 使用哪種方式來標定文章, 預設 'pathname'
|
281
|
+
COMMENT_GISCUS_REACTIONS_ENABLED:
|
282
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_REACTIONS_ENABLED || '1', // 你的 Giscus 是否開啟文章表情符號 '1' 開啟 "0" 關閉 預設開啟
|
283
|
+
COMMENT_GISCUS_EMIT_METADATA:
|
284
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_EMIT_METADATA || '0', // 你的 Giscus 是否提取 Metadata '1' 開啟 '0' 關閉 預設關閉
|
285
|
+
COMMENT_GISCUS_INPUT_POSITION:
|
286
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_INPUT_POSITION || 'bottom', // 你的 Giscus 發表留言位置 'bottom' 尾部 'top' 頂部, 預設 'bottom'
|
287
|
+
COMMENT_GISCUS_LANG: process.env.NEXT_PUBLIC_COMMENT_GISCUS_LANG || 'zh-CN', // 你的 Giscus 語言 e.g 'en', 'zh-TW', 'zh-CN', 預設 'en'
|
288
|
+
COMMENT_GISCUS_LOADING:
|
289
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_LOADING || 'lazy', // 你的 Giscus 載入是否漸進式載入, 預設 'lazy'
|
290
|
+
COMMENT_GISCUS_CROSSORIGIN:
|
291
|
+
process.env.NEXT_PUBLIC_COMMENT_GISCUS_CROSSORIGIN || 'anonymous', // 你的 Giscus 可以跨網域, 預設 'anonymous'
|
292
|
+
|
293
|
+
COMMENT_CUSDIS_APP_ID: process.env.NEXT_PUBLIC_COMMENT_CUSDIS_APP_ID || '', // data-app-id 36位 see https://cusdis.com/
|
294
|
+
COMMENT_CUSDIS_HOST:
|
295
|
+
process.env.NEXT_PUBLIC_COMMENT_CUSDIS_HOST || 'https://cusdis.com', // data-host, change this if you're using self-hosted version
|
296
|
+
COMMENT_CUSDIS_SCRIPT_SRC:
|
297
|
+
process.env.NEXT_PUBLIC_COMMENT_CUSDIS_SCRIPT_SRC || '/js/cusdis.es.js', // change this if you're using self-hosted version
|
298
|
+
|
299
|
+
// gitalk评论插件 更多参考 https://gitalk.github.io/
|
300
|
+
COMMENT_GITALK_REPO: process.env.NEXT_PUBLIC_COMMENT_GITALK_REPO || '', // 你的Github仓库名,例如 'NotionNext'
|
301
|
+
COMMENT_GITALK_OWNER: process.env.NEXT_PUBLIC_COMMENT_GITALK_OWNER || '', // 你的用户名 e.g tangly1024
|
302
|
+
COMMENT_GITALK_ADMIN: process.env.NEXT_PUBLIC_COMMENT_GITALK_ADMIN || '', // 管理员用户名、一般是自己 e.g 'tangly1024'
|
303
|
+
COMMENT_GITALK_CLIENT_ID:
|
304
|
+
process.env.NEXT_PUBLIC_COMMENT_GITALK_CLIENT_ID || '', // e.g 20位ID , 在gitalk后台获取
|
305
|
+
COMMENT_GITALK_CLIENT_SECRET:
|
306
|
+
process.env.NEXT_PUBLIC_COMMENT_GITALK_CLIENT_SECRET || '', // e.g 40位ID, 在gitalk后台获取
|
307
|
+
COMMENT_GITALK_DISTRACTION_FREE_MODE: false, // 类似facebook的无干扰模式
|
308
|
+
COMMENT_GITALK_JS_CDN_URL:
|
309
|
+
process.env.NEXT_PUBLIC_COMMENT_GITALK_JS_CDN_URL ||
|
310
|
+
'https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js', // gitalk客户端 js cdn
|
311
|
+
COMMENT_GITALK_CSS_CDN_URL:
|
312
|
+
process.env.NEXT_PUBLIC_COMMENT_GITALK_CSS_CDN_URL ||
|
313
|
+
'https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css', // gitalk客户端 css cdn
|
314
|
+
|
315
|
+
COMMENT_GITTER_ROOM: process.env.NEXT_PUBLIC_COMMENT_GITTER_ROOM || '', // gitter聊天室 see https://gitter.im/ 不需要则留空
|
316
|
+
COMMENT_DAO_VOICE_ID: process.env.NEXT_PUBLIC_COMMENT_DAO_VOICE_ID || '', // DaoVoice http://dashboard.daovoice.io/get-started
|
317
|
+
COMMENT_TIDIO_ID: process.env.NEXT_PUBLIC_COMMENT_TIDIO_ID || '', // [tidio_id] -> //code.tidio.co/[tidio_id].js
|
318
|
+
|
319
|
+
COMMENT_VALINE_CDN:
|
320
|
+
process.env.NEXT_PUBLIC_VALINE_CDN ||
|
321
|
+
'https://unpkg.com/valine@1.5.1/dist/Valine.min.js',
|
322
|
+
COMMENT_VALINE_APP_ID: process.env.NEXT_PUBLIC_VALINE_ID || '', // Valine @see https://valine.js.org/quickstart.html 或 https://github.com/stonehank/react-valine#%E8%8E%B7%E5%8F%96app-id-%E5%92%8C-app-key
|
323
|
+
COMMENT_VALINE_APP_KEY: process.env.NEXT_PUBLIC_VALINE_KEY || '',
|
324
|
+
COMMENT_VALINE_SERVER_URLS: process.env.NEXT_PUBLIC_VALINE_SERVER_URLS || '', // 该配置适用于国内自定义域名用户, 海外版本会自动检测(无需手动填写) @see https://valine.js.org/configuration.html#serverURLs
|
325
|
+
COMMENT_VALINE_PLACEHOLDER:
|
326
|
+
process.env.NEXT_PUBLIC_VALINE_PLACEHOLDER || '抢个沙发吧~', // 可以搭配后台管理评论 https://github.com/DesertsP/Valine-Admin 便于查看评论,以及邮件通知,垃圾评论过滤等功能
|
327
|
+
|
328
|
+
COMMENT_WALINE_SERVER_URL: process.env.NEXT_PUBLIC_WALINE_SERVER_URL || '', // 请配置完整的Waline评论地址 例如 hhttps://preview-waline.tangly1024.com @see https://waline.js.org/guide/get-started.html
|
329
|
+
COMMENT_WALINE_RECENT: process.env.NEXT_PUBLIC_WALINE_RECENT || false, // 最新评论
|
330
|
+
|
331
|
+
// 此评论系统基于WebMention,细节可参考https://webmention.io
|
332
|
+
// 它是一个基于IndieWeb理念的开放式评论系统,下方COMMENT_WEBMENTION包含的属性皆需配置:
|
333
|
+
// ENABLE: 是否开启
|
334
|
+
// AUTH: Webmention使用的IndieLogin,可使用Twitter或Github个人页面连结
|
335
|
+
// HOSTNAME: Webmention绑定之网域,通常即为本站网址
|
336
|
+
// TWITTER_USERNAME: 评论显示区域需要的资讯
|
337
|
+
// TOKEN: Webmention的API token
|
338
|
+
COMMENT_WEBMENTION: {
|
339
|
+
ENABLE: process.env.NEXT_PUBLIC_WEBMENTION_ENABLE || false,
|
340
|
+
AUTH: process.env.NEXT_PUBLIC_WEBMENTION_AUTH || '',
|
341
|
+
HOSTNAME: process.env.NEXT_PUBLIC_WEBMENTION_HOSTNAME || '',
|
342
|
+
TWITTER_USERNAME: process.env.NEXT_PUBLIC_TWITTER_USERNAME || '',
|
343
|
+
TOKEN: process.env.NEXT_PUBLIC_WEBMENTION_TOKEN || '',
|
344
|
+
},
|
345
|
+
|
346
|
+
// <---- 评论插件
|
347
|
+
|
348
|
+
// ----> 站点统计
|
349
|
+
ANALYTICS_VERCEL: process.env.NEXT_PUBLIC_ANALYTICS_VERCEL || false, // vercel自带的统计 https://vercel.com/docs/concepts/analytics/quickstart https://github.com/tangly1024/NotionNext/issues/897
|
350
|
+
ANALYTICS_BUSUANZI_ENABLE:
|
351
|
+
process.env.NEXT_PUBLIC_ANALYTICS_BUSUANZI_ENABLE || true, // 展示网站阅读量、访问数 see http://busuanzi.ibruce.info/
|
352
|
+
ANALYTICS_BAIDU_ID: process.env.NEXT_PUBLIC_ANALYTICS_BAIDU_ID || '', // e.g 只需要填写百度统计的id,[baidu_id] -> https://hm.baidu.com/hm.js?[baidu_id]
|
353
|
+
ANALYTICS_CNZZ_ID: process.env.NEXT_PUBLIC_ANALYTICS_CNZZ_ID || '', // 只需要填写站长统计的id, [cnzz_id] -> https://s9.cnzz.com/z_stat.php?id=[cnzz_id]&web_id=[cnzz_id]
|
354
|
+
ANALYTICS_GOOGLE_ID: process.env.NEXT_PUBLIC_ANALYTICS_GOOGLE_ID || '', // 谷歌Analytics的id e.g: G-XXXXXXXXXX
|
355
|
+
|
356
|
+
// ACKEE网站访客统计工具
|
357
|
+
ANALYTICS_ACKEE_TRACKER:
|
358
|
+
process.env.NEXT_PUBLIC_ANALYTICS_ACKEE_TRACKER || '', // e.g 'https://ackee.tangly1024.com/tracker.js'
|
359
|
+
ANALYTICS_ACKEE_DATA_SERVER:
|
360
|
+
process.env.NEXT_PUBLIC_ANALYTICS_ACKEE_DATA_SERVER || '', // e.g https://ackee.tangly1024.com , don't end with a slash
|
361
|
+
ANALYTICS_ACKEE_DOMAIN_ID:
|
362
|
+
process.env.NEXT_PUBLIC_ANALYTICS_ACKEE_DOMAIN_ID || '', // e.g '82e51db6-dec2-423a-b7c9-b4ff7ebb3302'
|
363
|
+
|
364
|
+
SEO_GOOGLE_SITE_VERIFICATION:
|
365
|
+
process.env.NEXT_PUBLIC_SEO_GOOGLE_SITE_VERIFICATION || '', // Remove the value or replace it with your own google site verification code
|
366
|
+
|
367
|
+
SEO_BAIDU_SITE_VERIFICATION:
|
368
|
+
process.env.NEXT_PUBLIC_SEO_BAIDU_SITE_VERIFICATION || '', // Remove the value or replace it with your own google site verification code
|
369
|
+
|
370
|
+
// <---- 站点统计
|
371
|
+
|
372
|
+
// START---->营收相关
|
373
|
+
|
374
|
+
// 谷歌广告
|
375
|
+
ADSENSE_GOOGLE_ID: process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_ID || '', // 谷歌广告ID e.g ca-pub-xxxxxxxxxxxxxxxx
|
376
|
+
ADSENSE_GOOGLE_TEST: process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_TEST || false, // 谷歌广告ID测试模式,这种模式获取假的测试广告,用于开发 https://www.tangly1024.com/article/local-dev-google-adsense
|
377
|
+
ADSENSE_GOOGLE_SLOT_IN_ARTICLE:
|
378
|
+
process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_SLOT_IN_ARTICLE || '3806269138', // Google AdScene>广告>按单元广告>新建文章内嵌广告 粘贴html代码中的data-ad-slot值
|
379
|
+
ADSENSE_GOOGLE_SLOT_FLOW:
|
380
|
+
process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_SLOT_FLOW || '1510444138', // Google AdScene>广告>按单元广告>新建信息流广告
|
381
|
+
ADSENSE_GOOGLE_SLOT_NATIVE:
|
382
|
+
process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_SLOT_NATIVE || '4980048999', // Google AdScene>广告>按单元广告>新建原生广告
|
383
|
+
ADSENSE_GOOGLE_SLOT_AUTO:
|
384
|
+
process.env.NEXT_PUBLIC_ADSENSE_GOOGLE_SLOT_AUTO || '8807314373', // Google AdScene>广告>按单元广告>新建展示广告 (自动广告)
|
385
|
+
|
386
|
+
// 万维广告
|
387
|
+
AD_WWADS_ID: process.env.NEXT_PUBLIC_WWAD_ID || null, // https://wwads.cn/ 创建您的万维广告单元ID
|
388
|
+
AD_WWADS_BLOCK_DETECT: process.env.NEXT_PUBLIC_WWADS_AD_BLOCK_DETECT || false, // 是否开启WWADS广告屏蔽插件检测,开启后会在广告位上以文字提示 @see https://github.com/bytegravity/whitelist-wwads
|
389
|
+
|
390
|
+
// END<----营收相关
|
391
|
+
|
392
|
+
// 自定义配置notion数据库字段名
|
393
|
+
NOTION_PROPERTY_NAME: {
|
394
|
+
password: process.env.NEXT_PUBLIC_NOTION_PROPERTY_PASSWORD || 'password',
|
395
|
+
type: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE || 'type', // 文章类型,
|
396
|
+
type_post: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_POST || 'Post', // 当type文章类型与此值相同时,为博文。
|
397
|
+
type_page: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_PAGE || 'Page', // 当type文章类型与此值相同时,为单页。
|
398
|
+
type_notice:
|
399
|
+
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_NOTICE || 'Notice', // 当type文章类型与此值相同时,为公告。
|
400
|
+
type_menu: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_MENU || 'Menu', // 当type文章类型与此值相同时,为菜单。
|
401
|
+
type_sub_menu:
|
402
|
+
process.env.NEXT_PUBLIC_NOTION_PROPERTY_TYPE_SUB_MENU || 'SubMenu', // 当type文章类型与此值相同时,为子菜单。
|
403
|
+
title: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TITLE || 'title', // 文章标题
|
404
|
+
status: process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS || 'status',
|
405
|
+
status_publish:
|
406
|
+
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_PUBLISH || 'Published', // 当status状态值与此相同时为发布,可以为中文
|
407
|
+
status_invisible:
|
408
|
+
process.env.NEXT_PUBLIC_NOTION_PROPERTY_STATUS_INVISIBLE || 'Invisible', // 当status状态值与此相同时为隐藏发布,可以为中文 , 除此之外其他页面状态不会显示在博客上
|
409
|
+
summary: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SUMMARY || 'summary',
|
410
|
+
slug: process.env.NEXT_PUBLIC_NOTION_PROPERTY_SLUG || 'slug',
|
411
|
+
category: process.env.NEXT_PUBLIC_NOTION_PROPERTY_CATEGORY || 'category',
|
412
|
+
date: process.env.NEXT_PUBLIC_NOTION_PROPERTY_DATE || 'date',
|
413
|
+
tags: process.env.NEXT_PUBLIC_NOTION_PROPERTY_TAGS || 'tags',
|
414
|
+
icon: process.env.NEXT_PUBLIC_NOTION_PROPERTY_ICON || 'icon',
|
415
|
+
},
|
416
|
+
|
417
|
+
// RSS订阅
|
418
|
+
// TODO
|
419
|
+
ENABLE_RSS: true, // 是否开启RSS订阅功能
|
420
|
+
MAILCHIMP_LIST_ID: process.env.MAILCHIMP_LIST_ID || null, // 开启mailichimp邮件订阅 客户列表ID ,具体使用方法参阅文档
|
421
|
+
MAILCHIMP_API_KEY: process.env.MAILCHIMP_API_KEY || null, // 开启mailichimp邮件订阅 APIkey
|
422
|
+
|
423
|
+
// 作废配置
|
424
|
+
AVATAR: process.env.NEXT_PUBLIC_AVATAR || '/avatar.svg', // 作者头像,被notion中的ICON覆盖。若无ICON则取public目录下的avatar.png
|
425
|
+
TITLE: process.env.NEXT_PUBLIC_TITLE || 'NotionNextBlogBase', // 站点标题 ,被notion中的页面标题覆盖;此处请勿留空白,否则服务器无法编译
|
426
|
+
HOME_BANNER_IMAGE:
|
427
|
+
process.env.NEXT_PUBLIC_HOME_BANNER_IMAGE || '/bg_image.jpg', // 首页背景大图, 会被notion中的封面图覆盖,若无封面图则会使用代码中的 /public/bg_image.jpg 文件
|
428
|
+
DESCRIPTION:
|
429
|
+
process.env.NEXT_PUBLIC_DESCRIPTION ||
|
430
|
+
'这是一个由NotionNextBlogBase生成的站点', // 站点描述,被notion中的页面描述覆盖
|
431
|
+
|
432
|
+
// 网站图片
|
433
|
+
IMG_LAZY_LOAD_PLACEHOLDER:
|
434
|
+
process.env.NEXT_PUBLIC_IMG_LAZY_LOAD_PLACEHOLDER ||
|
435
|
+
'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', // 懒加载占位图片地址,支持base64或url
|
436
|
+
IMG_URL_TYPE: process.env.NEXT_PUBLIC_IMG_TYPE || 'Notion', // 此配置已失效,请勿使用;AMAZON方案不再支持,仅支持Notion方案。 ['Notion','AMAZON'] 站点图片前缀 默认 Notion:(https://notion.so/images/xx) , AMAZON(https://s3.us-west-2.amazonaws.com/xxx)
|
437
|
+
IMG_SHADOW: process.env.NEXT_PUBLIC_IMG_SHADOW || false, // 文章图片是否自动添加阴影
|
438
|
+
|
439
|
+
// 开发相关
|
440
|
+
NOTION_ACCESS_TOKEN: process.env.NOTION_ACCESS_TOKEN || '', // Useful if you prefer not to make your database public
|
441
|
+
DEBUG: process.env.NEXT_PUBLIC_DEBUG || false, // 是否显示调试按钮
|
442
|
+
ENABLE_CACHE:
|
443
|
+
process.env.ENABLE_CACHE || process.env.npm_lifecycle_event === 'build', // 缓存在开发调试和打包过程中选择性开启,正式部署开启此功能意义不大。
|
444
|
+
isProd: process.env.VERCEL_ENV === 'production', // distinguish between development and production environment (ref: https://vercel.com/docs/environment-variables#system-environment-variables) isProd: process.env.VERCEL_ENV === 'production' // distinguish between development and production environment (ref: https://vercel.com/docs/environment-variables#system-environment-variables)
|
445
|
+
VERSION: process.env.NEXT_PUBLIC_VERSION, // 版本号
|
446
|
+
|
447
|
+
// 协议
|
448
|
+
LICENSE: process.env.NEXT_PUBLIC_LICENSE || 'CC BY-NC-SA 4.0',
|
449
|
+
LICENSE_URL:
|
450
|
+
process.env.NEXT_PUBLIC_LICENSE_URL ||
|
451
|
+
'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh',
|
452
|
+
};
|
453
|
+
|
454
|
+
module.exports = BLOG;
|
@@ -0,0 +1,83 @@
|
|
1
|
+
'use strict'
|
2
|
+
|
3
|
+
import { useEffect } from 'react'
|
4
|
+
import BLOG from '@/blog.config'
|
5
|
+
import { loadExternalResource } from '@/lib/utils'
|
6
|
+
import { useRouter } from 'next/router'
|
7
|
+
const Ackee = () => {
|
8
|
+
const router = useRouter()
|
9
|
+
|
10
|
+
// handleAckee 函数
|
11
|
+
const handleAckeeCallback = () => {
|
12
|
+
handleAckee(
|
13
|
+
router.asPath,
|
14
|
+
{
|
15
|
+
server: BLOG.ANALYTICS_ACKEE_DATA_SERVER,
|
16
|
+
domainId: BLOG.ANALYTICS_ACKEE_DOMAIN_ID
|
17
|
+
},
|
18
|
+
{
|
19
|
+
/*
|
20
|
+
* Enable or disable tracking of personal data.
|
21
|
+
* We recommend to ask the user for permission before turning this option on.
|
22
|
+
*/
|
23
|
+
detailed: true,
|
24
|
+
/*
|
25
|
+
* Enable or disable tracking when on localhost.
|
26
|
+
*/
|
27
|
+
ignoreLocalhost: false,
|
28
|
+
/*
|
29
|
+
* Enable or disable the tracking of your own visits.
|
30
|
+
* This is enabled by default, but should be turned off when using a wildcard Access-Control-Allow-Origin header.
|
31
|
+
* Some browsers strictly block third-party cookies. The option won't have an impact when this is the case.
|
32
|
+
*/
|
33
|
+
ignoreOwnVisits: false
|
34
|
+
}
|
35
|
+
)
|
36
|
+
}
|
37
|
+
|
38
|
+
// 或者使用其他依赖数组,根据需要执行 handleAckee
|
39
|
+
useEffect(() => {
|
40
|
+
handleAckeeCallback()
|
41
|
+
}, [router])
|
42
|
+
|
43
|
+
return null
|
44
|
+
}
|
45
|
+
|
46
|
+
export default Ackee
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Function to use Ackee.
|
50
|
+
* Creates an instance once and a new record every time the pathname changes.
|
51
|
+
* Safely no-ops during server-side rendering.
|
52
|
+
* @param {?String} pathname - Current path.
|
53
|
+
* @param {Object} environment - Object containing the URL of the Ackee server and the domain id.
|
54
|
+
* @param {?Object} options - Ackee options.
|
55
|
+
*/
|
56
|
+
const handleAckee = async function(pathname, environment, options = {}) {
|
57
|
+
await loadExternalResource(BLOG.ANALYTICS_ACKEE_TRACKER, 'js')
|
58
|
+
const ackeeTracker = window.ackeeTracker
|
59
|
+
|
60
|
+
const instance = ackeeTracker?.create(environment.server, options)
|
61
|
+
|
62
|
+
if (instance == null) {
|
63
|
+
console.warn('Skipped record creation because useAckee has been called in a non-browser environment')
|
64
|
+
return
|
65
|
+
}
|
66
|
+
|
67
|
+
const hasPathname = (
|
68
|
+
pathname != null && pathname !== ''
|
69
|
+
)
|
70
|
+
|
71
|
+
if (hasPathname === false) {
|
72
|
+
console.warn('Skipped record creation because useAckee has been called without pathname')
|
73
|
+
return
|
74
|
+
}
|
75
|
+
|
76
|
+
const attributes = ackeeTracker?.attributes(options.detailed)
|
77
|
+
const url = new URL(pathname, location)
|
78
|
+
|
79
|
+
return instance.record(environment.domainId, {
|
80
|
+
...attributes,
|
81
|
+
siteLocation: url.href
|
82
|
+
}).stop
|
83
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { useEffect } from 'react'
|
2
|
+
|
3
|
+
/**
|
4
|
+
* 检测广告插件
|
5
|
+
* @returns
|
6
|
+
*/
|
7
|
+
export default function AdBlockDetect() {
|
8
|
+
useEffect(() => {
|
9
|
+
// 如果检测到广告屏蔽插件
|
10
|
+
function ABDetected() {
|
11
|
+
if (!document) {
|
12
|
+
return
|
13
|
+
}
|
14
|
+
const wwadsCns = document.getElementsByClassName('wwads-cn')
|
15
|
+
if (wwadsCns && wwadsCns.length > 0) {
|
16
|
+
for (const wwadsCn of wwadsCns) {
|
17
|
+
wwadsCn.insertAdjacentHTML('beforeend', "<style>.wwads-horizontal,.wwads-vertical{background-color:#f4f8fa;padding:5px;min-height:120px;margin-top:20px;box-sizing:border-box;border-radius:3px;font-family:sans-serif;display:flex;min-width:150px;position:relative;overflow:hidden;}.wwads-horizontal{flex-wrap:wrap;justify-content:center}.wwads-vertical{flex-direction:column;align-items:center;padding-bottom:32px}.wwads-horizontal a,.wwads-vertical a{text-decoration:none}.wwads-horizontal .wwads-img,.wwads-vertical .wwads-img{margin:5px}.wwads-horizontal .wwads-content,.wwads-vertical .wwads-content{margin:5px}.wwads-horizontal .wwads-content{flex:130px}.wwads-vertical .wwads-content{margin-top:10px}.wwads-horizontal .wwads-text,.wwads-content .wwads-text{font-size:14px;line-height:1.4;color:#0e1011;-webkit-font-smoothing:antialiased}.wwads-horizontal .wwads-poweredby,.wwads-vertical .wwads-poweredby{display:block;font-size:11px;color:#a6b7bf;margin-top:1em}.wwads-vertical .wwads-poweredby{position:absolute;left:10px;bottom:10px}.wwads-horizontal .wwads-poweredby span,.wwads-vertical .wwads-poweredby span{transition:all 0.2s ease-in-out;margin-left:-1em}.wwads-horizontal .wwads-poweredby span:first-child,.wwads-vertical .wwads-poweredby span:first-child{opacity:0}.wwads-horizontal:hover .wwads-poweredby span,.wwads-vertical:hover .wwads-poweredby span{opacity:1;margin-left:0}.wwads-horizontal .wwads-hide,.wwads-vertical .wwads-hide{position:absolute;right:-23px;bottom:-23px;width:46px;height:46px;border-radius:23px;transition:all 0.3s ease-in-out;cursor:pointer;}.wwads-horizontal .wwads-hide:hover,.wwads-vertical .wwads-hide:hover{background:rgb(0 0 0 /0.05)}.wwads-horizontal .wwads-hide svg,.wwads-vertical .wwads-hide svg{position:absolute;left:10px;top:10px;fill:#a6b7bf}.wwads-horizontal .wwads-hide:hover svg,.wwads-vertical .wwads-hide:hover svg{fill:#3E4546}</style><a href='https://wwads.cn/page/whitelist-wwads' class='wwads-img' target='_blank' rel='nofollow'><img src='https://creatives-1301677708.file.myqcloud.com/images/placeholder/wwads-friendly-ads.png' width='130'></a><div class='wwads-content'><a href='https://wwads.cn/page/whitelist-wwads' class='wwads-text' target='_blank' rel='nofollow'>为了本站的长期运营,请将我们的网站加入广告拦截器的白名单,感谢您的支持!</a><a href='https://wwads.cn/page/end-user-privacy' class='wwads-poweredby' title='万维广告 ~ 让广告更优雅,且有用' target='_blank'><span>万维</span><span>广告</span></a></div><a class='wwads-hide' onclick='parentNode.remove()' title='隐藏广告'><svg xmlns='http://www.w3.org/2000/svg' width='6' height='7'><path d='M.879.672L3 2.793 5.121.672a.5.5 0 11.707.707L3.708 3.5l2.12 2.121a.5.5 0 11-.707.707l-2.12-2.12-2.122 2.12a.5.5 0 11-.707-.707l2.121-2.12L.172 1.378A.5.5 0 01.879.672z'></path></svg></a>")
|
18
|
+
}
|
19
|
+
}
|
20
|
+
};
|
21
|
+
|
22
|
+
// check document ready
|
23
|
+
function docReady(t) {
|
24
|
+
document.readyState === 'complete' ||
|
25
|
+
document.readyState === 'interactive'
|
26
|
+
? setTimeout(t, 1)
|
27
|
+
: document.addEventListener('DOMContentLoaded', t)
|
28
|
+
}
|
29
|
+
|
30
|
+
// check if wwads' fire function was blocked after document is ready with 3s timeout (waiting the ad loading)
|
31
|
+
docReady(function () {
|
32
|
+
setTimeout(function () {
|
33
|
+
if (window._AdBlockInit === undefined) {
|
34
|
+
ABDetected()
|
35
|
+
}
|
36
|
+
}, 3000)
|
37
|
+
})
|
38
|
+
}, [])
|
39
|
+
return null
|
40
|
+
}
|