Skip to content

Commit 3658d68

Browse files
authored
Merge branch 'tangly1024:main' into martini
2 parents fd82784 + b39b47b commit 3658d68

File tree

25 files changed

+1303
-449
lines changed

25 files changed

+1303
-449
lines changed

components/ThemeSwitch.js

+87-47
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,126 @@
11
import { useGlobal } from '@/lib/global'
2-
import { useState } from 'react'
3-
import { Draggable } from './Draggable'
2+
import LANGS from '@/lib/lang'
3+
import { getQueryParam } from '@/lib/utils'
44
import { THEMES } from '@/themes/theme'
55
import { useRouter } from 'next/router'
6+
import { useState } from 'react'
67
import DarkModeButton from './DarkModeButton'
7-
import { getQueryParam } from '@/lib/utils'
8-
import LANGS from '@/lib/lang'
8+
import { Draggable } from './Draggable'
99
/**
1010
*
1111
* @returns 主题切换
1212
*/
1313
const ThemeSwitch = () => {
14-
const { theme, lang, changeLang, locale, isDarkMode, toggleDarkMode } = useGlobal()
14+
const { theme, lang, changeLang, locale, isDarkMode, toggleDarkMode } =
15+
useGlobal()
1516
const router = useRouter()
1617
const currentTheme = getQueryParam(router.asPath, 'theme') || theme
1718
// const currentLang = getQueryParam(router.asPath, 'lang') || lang
1819
const [isLoading, setIsLoading] = useState(false)
1920

2021
// 修改当前路径url中的 theme 参数
2122
// 例如 http://localhost?theme=hexo 跳转到 http://localhost?theme=newTheme
22-
const onThemeSelectChange = (e) => {
23-
document.ontouchmove = document.ontouchend = document.onmousemove = document.onmouseup = null
23+
const onThemeSelectChange = e => {
24+
document.ontouchmove =
25+
document.ontouchend =
26+
document.onmousemove =
27+
document.onmouseup =
28+
null
2429
setIsLoading(true)
2530
const newTheme = e.target.value
2631
const query = router.query
2732
query.theme = newTheme
2833
router.push({ pathname: router.pathname, query }).then(() => {
2934
setTimeout(() => {
3035
setIsLoading(false)
31-
}, 500);
36+
}, 500)
3237
})
3338
}
3439

35-
const onLangSelectChange = (e) => {
36-
document.ontouchmove = document.ontouchend = document.onmousemove = document.onmouseup = null
40+
const onLangSelectChange = e => {
41+
document.ontouchmove =
42+
document.ontouchend =
43+
document.onmousemove =
44+
document.onmouseup =
45+
null
3746
const newLang = e.target.value
3847
changeLang(newLang)
3948
}
4049

41-
return (<>
42-
<Draggable>
43-
<div id="draggableBox" style={{ left: '0px', top: '80vh' }} className="fixed group space-y-2 overflow-hidden z-50 p-3 flex flex-col items-start dark:text-white bg-white dark:bg-black rounded-xl shadow-lg ">
44-
{/* 深色按钮 */}
45-
<div className="text-sm flex items-center w-0 group-hover:w-32 transition-all duration-200">
46-
<DarkModeButton />
47-
<div onClick={toggleDarkMode} className='cursor-pointer w-0 group-hover:w-24 transition-all duration-200 overflow-hidden whitespace-nowrap pl-1 h-auto'>{isDarkMode ? locale.MENU.DARK_MODE : locale.MENU.LIGHT_MODE}</div>
48-
</div>
50+
return (
51+
<>
52+
<Draggable>
53+
<div
54+
id='draggableBox'
55+
style={{ left: '0px', top: '80vh' }}
56+
className='fixed group hover:scale-105 transition-all space-y-2 overflow-hidden z-50 p-3 flex flex-col items-start dark:text-white bg-white dark:bg-black rounded-xl shadow-lg '>
57+
{/* 主题切换按钮 */}
58+
<div className='text-sm flex items-center group-hover:w-32 transition-all duration-200'>
59+
<i className='fa-solid fa-palette w-5' />
60+
<div className='w-0 group-hover:w-24 transition-all duration-200 overflow-hidden'>
61+
<label htmlFor='themeSelect' className='sr-only'>
62+
{locale.COMMON.THEME}
63+
</label>
64+
<select
65+
id='themeSelect'
66+
value={currentTheme}
67+
onChange={onThemeSelectChange}
68+
name='themes'
69+
className='pl-1 bg-gray-50 dark:bg-black appearance-none outline-none dark:text-white uppercase cursor-pointer'>
70+
{THEMES?.map(t => {
71+
return (
72+
<option key={t} value={t}>
73+
{t}
74+
</option>
75+
)
76+
})}
77+
</select>
78+
</div>
79+
</div>
4980

50-
{/* 翻译按钮 */}
51-
<div className="text-sm flex items-center group-hover:w-32 transition-all duration-200">
52-
<i className="fa-solid fa-language w-5" />
53-
<div className='w-0 group-hover:w-24 transition-all duration-200 overflow-hidden'>
54-
<label htmlFor="langSelect" className="sr-only">选择语言:</label>
55-
<select id="langSelect" value={lang} onChange={onLangSelectChange} name="themes" className='pl-1 bg-gray-50 dark:bg-black appearance-none outline-none dark:text-white uppercase cursor-pointer'>
56-
{Object.keys(LANGS)?.map(t => {
57-
return <option key={t} value={t}>{LANGS[t].LOCALE}</option>
58-
})}
59-
</select>
60-
</div>
61-
</div>
81+
{/* 深色按钮 */}
82+
<div className='text-sm flex items-center w-0 group-hover:w-32 transition-all duration-200'>
83+
<DarkModeButton />
84+
<div
85+
onClick={toggleDarkMode}
86+
className='cursor-pointer w-0 group-hover:w-24 transition-all duration-200 overflow-hidden whitespace-nowrap pl-1 h-auto'>
87+
{isDarkMode ? locale.MENU.DARK_MODE : locale.MENU.LIGHT_MODE}
88+
</div>
89+
</div>
6290

63-
{/* 主题切换按钮 */}
64-
<div className="text-sm flex items-center group-hover:w-32 transition-all duration-200">
65-
<i className="fa-solid fa-palette w-5" />
66-
<div className='w-0 group-hover:w-24 transition-all duration-200 overflow-hidden'>
67-
<label htmlFor="themeSelect" className="sr-only">选择主题:</label>
68-
<select id="themeSelect" value={currentTheme} onChange={onThemeSelectChange} name="themes" className='pl-1 bg-gray-50 dark:bg-black appearance-none outline-none dark:text-white uppercase cursor-pointer'>
69-
{THEMES?.map(t => {
70-
return <option key={t} value={t}>{t}</option>
71-
})}
72-
</select>
73-
</div>
74-
</div>
91+
{/* 翻译按钮 */}
92+
<div className='text-sm flex items-center group-hover:w-32 transition-all duration-200'>
93+
<i className='fa-solid fa-language w-5' />
94+
<div className='w-0 group-hover:w-24 transition-all duration-200 overflow-hidden'>
95+
<label htmlFor='langSelect' className='sr-only'>
96+
选择语言:
97+
</label>
98+
<select
99+
id='langSelect'
100+
value={lang}
101+
onChange={onLangSelectChange}
102+
name='themes'
103+
className='pl-1 bg-gray-50 dark:bg-black appearance-none outline-none dark:text-white uppercase cursor-pointer'>
104+
{Object.keys(LANGS)?.map(t => {
105+
return (
106+
<option key={t} value={t}>
107+
{LANGS[t].LOCALE}
108+
</option>
109+
)
110+
})}
111+
</select>
75112
</div>
76-
</Draggable>
113+
</div>
114+
</div>
115+
</Draggable>
77116

78-
{/* 切换主题加载时的全屏遮罩 */}
79-
<div className={`${isLoading ? 'opacity-90 ' : 'opacity-0'}
117+
{/* 切换主题加载时的全屏遮罩 */}
118+
<div
119+
className={`${isLoading ? 'opacity-90 ' : 'opacity-0'}
80120
w-screen h-screen glassmorphism bg-black text-white shadow-text flex justify-center items-center
81121
transition-all fixed top-0 left-0 pointer-events-none duration-1000 z-50 shadow-inner`}>
82-
<i className='text-3xl mr-5 fas fa-spinner animate-spin' />
83-
</div>
122+
<i className='text-3xl mr-5 fas fa-spinner animate-spin' />
123+
</div>
84124
</>
85125
)
86126
}

lib/lang/en-US.js

+3
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ export default {
1414
INDEX: 'Home',
1515
RSS: 'RSS',
1616
SEARCH: 'Search',
17+
NAVIGATOR: 'NAV',
1718
ABOUT: 'About',
1819
MAIL: 'E-Mail',
1920
ARCHIVE: 'Archive'
2021
},
2122
COMMON: {
23+
THEME: 'Theme',
24+
ARTICLE_LIST: 'Article List',
2225
MORE: 'More',
2326
NO_MORE: 'No More',
2427
LATEST_POSTS: 'Latest posts',

lib/lang/zh-CN.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export default {
2020
ARCHIVE: '归档'
2121
},
2222
COMMON: {
23+
THEME: 'Theme',
24+
ARTICLE_LIST: '文章列表',
2325
MORE: '更多',
2426
NO_MORE: '没有更多了',
2527
LATEST_POSTS: '最新发布',
@@ -63,7 +65,7 @@ export default {
6365
MINUTE: '分钟',
6466
WORD_COUNT: '字数',
6567
READ_TIME: '阅读时长',
66-
NEXT_POST:'下一篇'
68+
NEXT_POST: '下一篇'
6769
},
6870
PAGINATION: {
6971
PREV: '上页',

lib/lang/zh-HK.js

+34-2
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,47 @@ export default {
55
RSS: '訂閱',
66
SEARCH: '搜尋',
77
ABOUT: '關於',
8-
MAIL: '電郵'
8+
MAIL: '電郵',
9+
NAVIGATOR: '導航',
10+
ARCHIVE: '封存'
11+
},
12+
COMMON: {
13+
ARTICLE_LIST: '文章列表',
14+
MORE: '更多',
15+
NO_MORE: '沒有更多了',
16+
LATEST_POSTS: '最新文章',
17+
TAGS: '標籤',
18+
NO_TAG: '無標籤',
19+
CATEGORY: '分類',
20+
SHARE: '分享',
21+
SCAN_QR_CODE: 'QRCode',
22+
URL_COPIED: '連結已複製!',
23+
TABLE_OF_CONTENTS: '目錄',
24+
RELATE_POSTS: '相關文章',
25+
COPYRIGHT: '著作權',
26+
AUTHOR: '作者',
27+
URL: '連結',
28+
ANALYTICS: '分析',
29+
POSTS: '篇文章',
30+
ARTICLE: '文章',
31+
VISITORS: '位訪客',
32+
VIEWS: '次查看',
33+
COPYRIGHT_NOTICE: '本文採用 CC BY-NC-SA 4.0 許可協議,轉載請註明出處。',
34+
RESULT_OF_SEARCH: '篇搜尋到的结果',
35+
ARTICLE_DETAIL: '完整文章',
36+
PASSWORD_ERROR: '密碼錯誤!',
37+
ARTICLE_LOCK_TIPS: '文章已上鎖,請輸入訪問密碼',
38+
SUBMIT: '提交',
39+
POST_TIME: '发布于',
40+
LAST_EDITED_TIME: '最后更新'
941
},
1042
PAGINATION: {
1143
PREV: '上一頁',
1244
NEXT: '下一頁'
1345
},
1446
SEARCH: {
1547
ARTICLES: '搜尋文章',
16-
TAGS: '搜尋標簽'
48+
TAGS: '搜尋標籤'
1749
},
1850
POST: {
1951
BACK: '返回',

lib/lang/zh-TW.js

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export default {
1010
ARCHIVE: '封存'
1111
},
1212
COMMON: {
13+
ARTICLE_LIST: '文章列表',
1314
MORE: '更多',
1415
NO_MORE: '沒有更多了',
1516
LATEST_POSTS: '最新文章',

lib/notion/mapImage.js

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ const compressImage = (image, width, quality = 50, fmt = 'webp') => {
110110
return image
111111
}
112112

113+
if (image.includes(".svg")) return image
114+
113115
if (!width || width === 0) {
114116
width = siteConfig('IMAGE_COMPRESS_WIDTH')
115117
}

0 commit comments

Comments
 (0)