chore: optimize styles and update dependencies

- Fix random sorting issue in RSS articles
- Optimize RSS style file
- Improve scrollbar styles
- Upgrade project dependencies
This commit is contained in:
radishzzz 2025-04-07 03:23:34 +01:00
parent e757da729a
commit b492e5c262
10 changed files with 741 additions and 548 deletions

View file

@ -18,8 +18,8 @@
"@astrojs/rss": "^4.0.11",
"@astrojs/sitemap": "^3.3.0",
"@waline/client": "^3.5.6",
"astro": "^5.5.6",
"astro-compress": "^2.3.7",
"astro": "^5.6.1",
"astro-compress": "^2.3.8",
"astro-og-canvas": "^0.7.0",
"astro-robots-txt": "^1.0.0",
"canvaskit-wasm": "^0.40.0",
@ -39,18 +39,18 @@
"@types/markdown-it": "^14.1.2",
"@types/node": "^22.14.0",
"@types/sanitize-html": "^2.15.0",
"@unocss/eslint-plugin": "66.1.0-beta.8",
"@unocss/preset-attributify": "66.1.0-beta.8",
"@unocss/reset": "66.1.0-beta.8",
"@unocss/eslint-plugin": "66.1.0-beta.10",
"@unocss/preset-attributify": "66.1.0-beta.10",
"@unocss/reset": "66.1.0-beta.10",
"astro-eslint-parser": "^1.2.2",
"eslint": "^9.23.0",
"eslint": "^9.24.0",
"eslint-plugin-astro": "^1.3.1",
"lint-staged": "^15.5.0",
"mdast-util-to-string": "^4.0.0",
"reading-time": "^1.5.0",
"sharp": "^0.33.5",
"typescript": "~5.8.2",
"unocss": "66.1.0-beta.8",
"sharp": "^0.34.0",
"typescript": "~5.8.3",
"unocss": "66.1.0-beta.10",
"unocss-preset-theme": "^0.14.1"
},
"lint-staged": {

1167
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -10,75 +10,49 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<style type="text/css">
/* Basic normalization styles */
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
body{margin:0}
article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}
summary{display:list-item}
a{background-color:transparent}
a:active,a:hover{outline-width:0}
b,strong{font-weight:bolder}
h1{font-size:2em;margin:.67em 0}
img{border-style:none}
svg:not(:root){overflow:hidden}
/* Basic box model */
/* Basic styles */
html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
body{margin:0;font-family:ui-sans-serif,system-ui,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:16px;line-height:1.5;word-wrap:break-word}
*{box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;color:#24292e}
p{margin-top:0;margin-bottom:16px}
strong{font-weight:600}
small{font-size:90%}
h1,h2,h3,h4,h5,h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}
h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #E0DFE3}
h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #E0DFE3}
h3{font-size:1.25em;margin-top:0;margin-bottom:0}
a{color:#0366d6;text-decoration:none}
a:hover{text-decoration:underline}
b,strong{font-weight:600}
/* Heading styles */
h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0;font-weight:600;line-height:1.25}
h1{font-size:32px}
h2{font-size:24px}
h3{font-size:20px}
p{margin-top:0;margin-bottom:10px}
small{font-size:90%}
/* Utility classes */
.bg-white{background-color:#F2F1F5!important}
.container-md{max-width:768px;margin-right:auto;margin-left:auto}
.bg-white{background-color:oklch(0.96 0.005 298)!important}
.px-4{padding-right:24px!important;padding-left:24px!important}
.py-2{padding-top:8px!important;padding-bottom:8px!important}
.py-5{padding-top:32px!important;padding-bottom:32px!important}
.pb-3{padding-bottom:16px!important}
.pb-5{padding-bottom:32px!important}
.mt-2{margin-top:8px!important}
.mt-3{margin-top:16px!important}
.mb-1{margin-bottom:4px!important}
.pr-1{padding-right:4px!important}
.border-0{border:0!important}
.text-gray{color:#586069!important}
/* Responsive classes */
.text-gray{color:oklch(0.25 0.005 298 / 75%)!important}
@media (min-width:768px){
.mt-md-5{margin-top:32px!important}
}
/* Markdown body styles */
.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}
.markdown-body::before{display:table;content:""}
.markdown-body::after{display:table;clear:both;content:""}
.markdown-body>*:first-child{margin-top:0!important}
.markdown-body>*:last-child{margin-bottom:0!important}
.markdown-body a:not([href]){color:inherit;text-decoration:none}
.markdown-body p{margin-top:0;margin-bottom:16px}
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}
.markdown-body h1{padding-bottom:.3em;font-size:2em;border-bottom:1px solid #E0DFE3}
.markdown-body h2{padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid #E0DFE3}
.markdown-body h3{font-size:1.25em}
.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}
/* Component styles */
.markdown{max-width:768px;margin-right:auto;margin-left:auto}
.markdown>*:first-child{margin-top:0!important}
.markdown>*:last-child{margin-bottom:0!important}
</style>
</head>
<body class="bg-white">
<nav class="container-md px-4 py-2 mt-3 mt-md-5 markdown-body">
<nav class="px-4 py-2 mt-3 mt-md-5 markdown">
<p>
<strong>This is a web feed,</strong> also known as an RSS feed. <strong>Subscribe</strong> by copying the URL from the address bar into your newsreader.
</p>
</nav>
<div class="container-md px-4 pb-3 markdown-body">
<div class="px-4 pb-3 markdown">
<header class="py-5">
<h1 class="border-0">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="vertical-align: text-bottom; width: 1.2em; height: 1.2em;" class="pr-1" id="RSSicon" viewBox="0 0 256 256">
@ -97,12 +71,11 @@
<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
</svg>
Web Feed Preview
</h1>
<h2><xsl:value-of select="/rss/channel/title"/></h2>
<p><xsl:value-of select="/rss/channel/description"/></p>
<a class="head_link" target="_blank">
<a target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="/rss/channel/link"/>
</xsl:attribute>
@ -123,13 +96,10 @@
<small class="text-gray">
Published: <xsl:value-of select="substring(pubDate, 1, 16)" />
</small>
<div class="description mt-2">
<xsl:value-of select="description" disable-output-escaping="yes" />
</div>
</div>
</xsl:for-each>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>

View file

@ -20,8 +20,8 @@ const showLanguageSwitcher = moreLocales.length > 0
const useSupportedLangs = isPost || (isTag && supportedLangs.length > 0)
// Choose a language switch list according to the page type
const nextUrl = useSupportedLangs
? getNextSupportedLangPath(currentPath, supportedLangs) // Switch between supported languages
: getNextGlobalLangPath(currentPath) // Switch between all languages
? getNextSupportedLangPath(currentPath, supportedLangs) // Switch between supported languages in post/tag page
: getNextGlobalLangPath(currentPath) // Switch between all languages in other pages
---
<div

View file

@ -53,7 +53,7 @@ function setupScrollbar() {
}, {
scrollbars: {
theme: 'scrollbar-widget',
autoHide: 'leave',
autoHide: 'never',
autoHideDelay: 500,
},
overflow: {
@ -89,17 +89,17 @@ document.addEventListener('astro:after-swap', setupScrollbar)
}
.scrollbar-widget {
--os-size: 0.35rem;
--os-padding-perpendicular: 0;
--os-padding-axis: 0;
--os-size: 0.6rem;
--os-padding-perpendicular: 0.1rem;
--os-padding-axis: 0.2rem;
--os-handle-border-radius: 99rem;
--os-handle-perpendicular-size: 75%;
--os-handle-perpendicular-size-hover: 100%;
--os-handle-perpendicular-size-active: 100%;
--os-handle-interactive-area-offset: 0.1rem;
--os-handle-interactive-area-offset: 0.2rem;
--os-handle-bg: oklch(var(--un-preset-theme-colors-secondary) / 0.15);
--os-handle-bg-hover: oklch(var(--un-preset-theme-colors-secondary) / 0.25);
--os-handle-bg-active: oklch(var(--un-preset-theme-colors-secondary) / 0.25);
--os-handle-bg-hover: oklch(var(--un-preset-theme-colors-secondary) / 0.30);
--os-handle-bg-active: oklch(var(--un-preset-theme-colors-secondary) / 0.30);
--os-handle-min-size: 12%;
}

View file

@ -104,7 +104,7 @@ const filteredHeadings = headings.filter(heading =>
}
.accordion-content {
--at-apply: 'overflow-hidden max-h-66 lg:max-h-82 2xl:(max-h-[calc(100vh-21.5rem)]) px-4';
--at-apply: 'overflow-hidden max-h-66 lg:max-h-82 2xl:(max-h-[calc(100vh-21.5rem)]) pl-4 pr-6';
}
/* When toggle is checked, expand the wrapper to show content */

View file

@ -13,7 +13,7 @@ export const langMap: Record<string, string[]> = {
export const walineLocaleMap: Record<string, string> = {
'zh': 'zh-CN',
'zh-tw': 'zh-TW',
'ja': 'jp-JP', // Waline uses jp-JP not ja-JP
'ja': 'jp-JP', // Waline uses jp-JP instead of ja-JP
'en': 'en-US',
'es': 'es-ES',
'ru': 'ru-RU',

View file

@ -23,7 +23,7 @@ const { isPost } = getPageInfo(Astro.url.pathname)
const fontStyle = themeConfig.global.fontStyle === 'serif' ? 'font-serif' : 'font-sans'
const MarginBottom = isPost && themeConfig.comment?.enabled
? 'mb-10' // Post page with comment system
: 'mb-12' // Other pages
: 'mb-12' // Other pages without comment system
---
<html

View file

@ -27,11 +27,16 @@ export async function generateRSS({ lang }: GenerateRSSOptions = {}) {
(!data.draft && (data.lang === lang || data.lang === '' || (lang === undefined && data.lang === defaultLocale))),
)
// Sort posts by published date in descending order
const sortedPosts = [...posts].sort((a, b) =>
new Date(b.data.published).getTime() - new Date(a.data.published).getTime(),
)
return rss({
title: siteTitle,
site: lang ? `${url}/${lang}` : url,
description: siteDescription,
stylesheet: '/rss/rss-style.min.xsl',
stylesheet: '/rss/rss-style.xsl',
customData: `
<copyright>Copyright © ${new Date().getFullYear()} ${themeConfig.site.author}</copyright>
<language>${lang || themeConfig.global.locale}</language>
@ -44,7 +49,7 @@ export async function generateRSS({ lang }: GenerateRSSOptions = {}) {
: ''
}
`.trim(),
items: posts.map((post: CollectionEntry<'posts'>) => ({
items: sortedPosts.map((post: CollectionEntry<'posts'>) => ({
title: post.data.title,
// Generate URL with language prefix and abbrlink/slug
link: new URL(