diff --git a/conf/contact.config.js b/conf/contact.config.js index d2a53274047..2784e3600b1 100644 --- a/conf/contact.config.js +++ b/conf/contact.config.js @@ -3,7 +3,12 @@ */ module.exports = { // 社交链接,不需要可留空白,例如 CONTACT_WEIBO:'' - CONTACT_EMAIL: process.env.NEXT_PUBLIC_CONTACT_EMAIL || '', // 邮箱地址 例如mail@tangly1024.com + CONTACT_EMAIL: + (process.env.NEXT_PUBLIC_CONTACT_EMAIL && + btoa( + unescape(encodeURIComponent(process.env.NEXT_PUBLIC_CONTACT_EMAIL)) + )) || + '', // 邮箱地址 例如mail@tangly1024.com CONTACT_WEIBO: process.env.NEXT_PUBLIC_CONTACT_WEIBO || '', // 你的微博个人主页 CONTACT_TWITTER: process.env.NEXT_PUBLIC_CONTACT_TWITTER || '', // 你的twitter个人主页 CONTACT_GITHUB: process.env.NEXT_PUBLIC_CONTACT_GITHUB || '', // 你的github个人主页 例如 https://github.com/tangly1024 diff --git a/lib/notion/getNotionConfig.js b/lib/notion/getNotionConfig.js index 029c7b96b5d..3e111fcda9a 100644 --- a/lib/notion/getNotionConfig.js +++ b/lib/notion/getNotionConfig.js @@ -157,9 +157,14 @@ export async function getConfigMapFromConfigPage(allPages) { // 只导入生效的配置 if (config.enable) { // console.log('[Notion配置]', config.key, config.value) - notionConfig[config.key] = - parseTextToJson(config.value) || config.value || null - // 配置不能是undefined,至少是null + if (config.key === 'CONTACT_EMAIL') { + notionConfig[config.key] = + (config.value && btoa(unescape(encodeURIComponent(config.value)))) || null + } else { + notionConfig[config.key] = + parseTextToJson(config.value) || config.value || null + // 配置不能是undefined,至少是null + } } } } diff --git a/lib/plugins/mailEncrypt.js b/lib/plugins/mailEncrypt.js new file mode 100644 index 00000000000..091c39b3bb8 --- /dev/null +++ b/lib/plugins/mailEncrypt.js @@ -0,0 +1,12 @@ +export const handleEmailClick = (e, emailIcon, CONTACT_EMAIL) => { + if (CONTACT_EMAIL && emailIcon && !emailIcon.current.href) { + e.preventDefault() + try { + const email = decodeURIComponent(escape(atob(CONTACT_EMAIL))) + emailIcon.current.href = `mailto:${email}` + emailIcon.current.click() + } catch (error) { + console.error('解密邮箱失败:', error) + } + } +} diff --git a/themes/commerce/components/SocialButton.js b/themes/commerce/components/SocialButton.js index 24823924127..adf18d7f790 100644 --- a/themes/commerce/components/SocialButton.js +++ b/themes/commerce/components/SocialButton.js @@ -1,77 +1,93 @@ import { siteConfig } from '@/lib/config' +import { useRef } from 'react' +import { handleEmailClick } from '@/lib/plugins/mailEncrypt' + /** * 社交联系方式按钮组 * @returns {JSX.Element} * @constructor */ const SocialButton = () => { + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') + const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + return (
- {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { )} - {siteConfig('CONTACT_BILIBILI') && ( + {CONTACT_BILIBILI && ( + href={CONTACT_BILIBILI}> )} - {siteConfig('CONTACT_YOUTUBE') && ( + {CONTACT_YOUTUBE && ( + href={CONTACT_YOUTUBE}> )} diff --git a/themes/fukasawa/components/SocialButton.js b/themes/fukasawa/components/SocialButton.js index a2bfa2f889c..6b4d33531c5 100644 --- a/themes/fukasawa/components/SocialButton.js +++ b/themes/fukasawa/components/SocialButton.js @@ -1,6 +1,6 @@ import QrCode from '@/components/QrCode' import { siteConfig } from '@/lib/config' -import { useState } from 'react' +import { useRef, useState } from 'react' /** * 社交联系方式按钮组 @@ -32,6 +32,9 @@ const SocialButton = () => { setQrCodeShow(false) } + const emailIcon = useRef(null) + + return (
@@ -91,10 +94,10 @@ const SocialButton = () => { )} {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} diff --git a/themes/gitbook/components/SocialButton.js b/themes/gitbook/components/SocialButton.js index a2bfa2f889c..1c29f6dc514 100644 --- a/themes/gitbook/components/SocialButton.js +++ b/themes/gitbook/components/SocialButton.js @@ -32,6 +32,9 @@ const SocialButton = () => { setQrCodeShow(false) } + const emailIcon = useRef(null) + + return (
@@ -91,10 +94,10 @@ const SocialButton = () => { )} {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} diff --git a/themes/heo/components/SocialButton.js b/themes/heo/components/SocialButton.js index f746bc0b61b..d6f86562e20 100644 --- a/themes/heo/components/SocialButton.js +++ b/themes/heo/components/SocialButton.js @@ -1,4 +1,6 @@ import { siteConfig } from '@/lib/config' +import { useRef } from 'react' +import { handleEmailClick } from '@/lib/plugins/mailEncrypt' /** * 社交联系方式按钮组 @@ -16,6 +18,9 @@ const SocialButton = () => { const ENABLE_RSS = siteConfig('ENABLE_RSS') const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + return (
@@ -75,14 +80,14 @@ const SocialButton = () => { )} {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(ENABLE_RSS) && ( + {ENABLE_RSS && ( { const closePopover = () => { setQrCodeShow(false) } + + const emailIcon = useRef(null) + return (
@@ -91,10 +95,10 @@ const SocialButton = () => { )} {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} diff --git a/themes/magzine/components/SocialButton.js b/themes/magzine/components/SocialButton.js index 5b3a39545ff..dc1a54f9817 100644 --- a/themes/magzine/components/SocialButton.js +++ b/themes/magzine/components/SocialButton.js @@ -1,6 +1,6 @@ import QrCode from '@/components/QrCode' import { siteConfig } from '@/lib/config' -import { useState } from 'react' +import { useRef, useState } from 'react' /** * 社交联系方式按钮组 @@ -31,6 +31,9 @@ const SocialButton = () => { setQrCodeShow(false) } + const emailIcon = useRef(null) + + return (
@@ -90,10 +93,10 @@ const SocialButton = () => { )} {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} diff --git a/themes/matery/components/SocialButton.js b/themes/matery/components/SocialButton.js index 4e15fed7212..a0a11a8510b 100644 --- a/themes/matery/components/SocialButton.js +++ b/themes/matery/components/SocialButton.js @@ -1,5 +1,5 @@ import { siteConfig } from '@/lib/config' -import { useState } from 'react' +import { useRef, useState } from 'react' /** * 社交联系方式按钮组 可折叠的组件 @@ -12,6 +12,20 @@ const SocialButton = () => { setShow(!show) } + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') + const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + + return (
{!show && ( @@ -22,70 +36,71 @@ const SocialButton = () => { )} {show && ( <> - {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + href={CONTACT_EMAIL}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { )} - {siteConfig('CONTACT_BILIBILI') && ( + {CONTACT_BILIBILI && ( + href={CONTACT_BILIBILI}> )} - {siteConfig('CONTACT_YOUTUBE') && ( + {CONTACT_YOUTUBE && ( + href={CONTACT_YOUTUBE}> )} diff --git a/themes/medium/components/SocialButton.js b/themes/medium/components/SocialButton.js index 95b8b4125e4..66899971cf0 100644 --- a/themes/medium/components/SocialButton.js +++ b/themes/medium/components/SocialButton.js @@ -1,4 +1,6 @@ import { siteConfig } from '@/lib/config' +import { useRef } from 'react' +import { handleEmailClick } from '@/lib/plugins/mailEncrypt' /** * 社交联系方式按钮组 @@ -6,72 +8,85 @@ import { siteConfig } from '@/lib/config' * @constructor */ const SocialButton = () => { + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') + const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + return (
- {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { )} - {siteConfig('CONTACT_BILIBILI') && ( + {CONTACT_BILIBILI && ( + href={CONTACT_BILIBILI}> )} - {siteConfig('CONTACT_YOUTUBE') && ( + {CONTACT_YOUTUBE && ( + href={CONTACT_YOUTUBE}> )} diff --git a/themes/nav/components/SocialButton.js b/themes/nav/components/SocialButton.js index 74fdad37285..e69929043bd 100755 --- a/themes/nav/components/SocialButton.js +++ b/themes/nav/components/SocialButton.js @@ -1,4 +1,6 @@ import { siteConfig } from '@/lib/config' +import { useRef } from 'react' +import { handleEmailClick } from '@/lib/plugins/mailEncrypt' /** * 社交联系方式按钮组 @@ -6,72 +8,83 @@ import { siteConfig } from '@/lib/config' * @constructor */ const SocialButton = () => { + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + + const emailIcon = useRef(null) + return (
- {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') + const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + return (
- {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { )} - {siteConfig('CONTACT_BILIBILI') && ( + {CONTACT_BILIBILI && ( + href={CONTACT_BILIBILI}> )} - {siteConfig('CONTACT_YOUTUBE') && ( + {CONTACT_YOUTUBE && ( + href={CONTACT_YOUTUBE}> )} diff --git a/themes/starter/components/SocialButton.js b/themes/starter/components/SocialButton.js index d11f34234b9..2cac8bf65ac 100644 --- a/themes/starter/components/SocialButton.js +++ b/themes/starter/components/SocialButton.js @@ -1,4 +1,6 @@ import { siteConfig } from '@/lib/config' +import { useRef } from 'react' +import { handleEmailClick } from '@/lib/plugins/mailEncrypt' /** * 社交联系方式按钮组 @@ -6,73 +8,86 @@ import { siteConfig } from '@/lib/config' * @constructor */ const SocialButton = () => { + const CONTACT_GITHUB = siteConfig('CONTACT_GITHUB') + const CONTACT_TWITTER = siteConfig('CONTACT_TWITTER') + const CONTACT_TELEGRAM = siteConfig('CONTACT_TELEGRAM') + const CONTACT_LINKEDIN = siteConfig('CONTACT_LINKEDIN') + const CONTACT_WEIBO = siteConfig('CONTACT_WEIBO') + const CONTACT_INSTAGRAM = siteConfig('CONTACT_INSTAGRAM') + const CONTACT_EMAIL = siteConfig('CONTACT_EMAIL') + const ENABLE_RSS = siteConfig('ENABLE_RSS') + const CONTACT_BILIBILI = siteConfig('CONTACT_BILIBILI') + const CONTACT_YOUTUBE = siteConfig('CONTACT_YOUTUBE') + + const emailIcon = useRef(null) + return (
- {siteConfig('CONTACT_GITHUB') && ( + {CONTACT_GITHUB && ( + href={CONTACT_GITHUB}> )} - {siteConfig('CONTACT_TWITTER') && ( + {CONTACT_TWITTER && ( + href={CONTACT_TWITTER}> )} - {siteConfig('CONTACT_TELEGRAM') && ( + {CONTACT_TELEGRAM && ( )} - {siteConfig('CONTACT_LINKEDIN') && ( + {CONTACT_LINKEDIN && ( )} - {siteConfig('CONTACT_WEIBO') && ( + {CONTACT_WEIBO && ( + href={CONTACT_WEIBO}> )} - {siteConfig('CONTACT_INSTAGRAM') && ( + {CONTACT_INSTAGRAM && ( + href={CONTACT_INSTAGRAM}> )} - {siteConfig('CONTACT_EMAIL') && ( + {CONTACT_EMAIL && ( + onClick={e => handleEmailClick(e, emailIcon, CONTACT_EMAIL)} + title='email' + className='cursor-pointer' + ref={emailIcon}> )} - {JSON.parse(siteConfig('ENABLE_RSS')) && ( + {ENABLE_RSS && ( { )} - {siteConfig('CONTACT_BILIBILI') && ( + {CONTACT_BILIBILI && ( + href={CONTACT_BILIBILI}> )} - {siteConfig('CONTACT_YOUTUBE') && ( + {CONTACT_YOUTUBE && ( + href={CONTACT_YOUTUBE}> )}