From 86d2fb215a00545fb160907ec59754170ae53927 Mon Sep 17 00:00:00 2001 From: Vaica <94612053+zqlit@users.noreply.github.com> Date: Tue, 2 Jun 2026 12:44:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=8E=E5=8C=96url=E5=92=8Cmp4=E9=93=BE?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../index.md | 6 +- ...s_2bbe13cc47075fab4343233ad3e58bb8.content | 2557 ----------------- ...scss_2bbe13cc47075fab4343233ad3e58bb8.json | 1 - themes/Ying/assets/css/main.css | 175 +- themes/Ying/assets/js/modules/linkify.js | 83 + .../layouts/_default/_markup/render-link.html | 43 +- themes/Ying/layouts/_default/single.html | 17 +- themes/Ying/layouts/partials/footer.html | 3 +- 8 files changed, 244 insertions(+), 2641 deletions(-) delete mode 100644 resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.content delete mode 100644 resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.json create mode 100644 themes/Ying/assets/js/modules/linkify.js diff --git a/content/post/2026/2026-05-20-我的静态博客动态化方案/index.md b/content/post/2026/2026-05-20-我的静态博客动态化方案/index.md index 63235ff7..58efd1d1 100644 --- a/content/post/2026/2026-05-20-我的静态博客动态化方案/index.md +++ b/content/post/2026/2026-05-20-我的静态博客动态化方案/index.md @@ -24,11 +24,11 @@ ai_comment: >- 前几天在浏览博友博客时,我发现了几个很有意思的文章,核心思路都是用静态博客实现一个后台,主要分为以下三个方案: -小十的博客(https://www.xiaoten.com/posts/2026/03/ai-build-hugo-cms/)——用AI为Hugo打造了博客文章发布平台; +小十的博客 https://www.xiaoten.com/posts/2026/03/ai-build-hugo-cms——用AI为Hugo打造了博客文章发布平台; -东风博主的博客(https://easte.cc/posts/feishu-sync-bot-deploy)——飞书同步机器人,利用飞书提供的接口,将飞书文档同步到博客中,这个想法非常有趣; +东风博主的博客 https://easte.cc/posts/feishu-sync-bot-deploy ——飞书同步机器人,利用飞书提供的接口,将飞书文档同步到博客中,这个想法非常有趣; -小饿博主的博客(https://dongjunke.cn/posts/2026/05/05/50369.html)——我的独立博客,终于拥有了一个像样的后台。 +小饿博主的博客 https://dongjunke.cn/posts/2026/05/05/50369.html ——我的独立博客,终于拥有了一个像样的后台。 经朋友推荐,我尝试使用了DeepSeek V4 Pro。DeepSeek的收费模式跟其他家有点不一样,主要是通过充值余额,直接消耗余额来使用,没有其他家所谓的coding plan。对于我这种使用频率较低的用户来说,还是很不错的。 diff --git a/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.content b/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.content deleted file mode 100644 index b83c992d..00000000 --- a/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.content +++ /dev/null @@ -1,2557 +0,0 @@ -@charset "UTF-8"; -:root { - --font-family-paragraph: 'JetBrainsMono',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,"Helvetica Neue",Helvetica,"PingFangSC-Regular","Hiragino Sans GB","Lantinghei SC","Microsoft Yahei","Source Han Sans CN","WenQuanYi Micro Hei",SimSun,sans-serif; - --font-family-title: 'JetBrainsMono',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,"Helvetica Neue",Helvetica,"PingFangSC-Regular","Hiragino Sans GB","Lantinghei SC","Microsoft Yahei","Source Han Sans CN","WenQuanYi Micro Hei",SimSun,sans-serif; - --font-family-code: 'JetBrainsMono', -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,"Helvetica Neue",Helvetica,"PingFangSC-Regular","Hiragino Sans GB","Lantinghei SC","Microsoft Yahei","Source Han Sans CN","WenQuanYi Micro Hei",SimSun,sans-serif; - --bankuai-color: #f6f6f6; - --background-color: #fff; - --background-dark-color: #201d1e; - --text-content-color:#222; - --text-content-dark-color:#CCC; - --text-highlight-color:#FC9151; - --frame-dark-color: #332D2F; - --frame-color: #eee; - --erji-color: #666; - --sanji-color: #999; } - -body, html { - margin: 0; - padding: 0; } - -ol, ul { - margin: 0; - padding: 0; - list-style: none; } - ol li, ul li { - list-style: none; } - -.header { - display: flex; - padding: 25px 0 25px 0; - align-items: center; } - @media (min-width: 900px) { - .header { - z-index: 100; - padding: 40px 0 60px 0; - height: 20px; } } -.new-heard-menu { - display: none; } - @media (min-width: 900px) { - .new-heard-menu { - display: flex; - gap: 30px; } } -.header-menu a { - color: var(--erji-color); - font-size: 1rem; - font-family: var(--font-family-paragraph); } - -.header-menu { - display: flex; - align-items: center; } - -.menu-current a { - color: var(--text-highlight-color) !important; } - -.heard-right { - display: flex; - grid-gap: 0; - /* 中间空10px间距 */ - align-items: center; - margin-left: auto; } - @media (min-width: 900px) { - .heard-right { - grid-gap: 20px; - /* 中间空10px间距 */ } } -.about-koobai img { - width: 32px; - height: 32px; - border-radius: 50%; - transition: opacity .3s ease-in-out; } - @media (min-width: 900px) { - .about-koobai img { - width: 20px; - height: 20px; - display: block; } } -.about-koobai img:hover { - opacity: 0.6; } - -.heard-right svg { - display: none; } - @media (min-width: 900px) { - .heard-right svg { - fill: #999; - width: 20px; - height: 20px; - display: block; } } -.heard-right svg:hover { - fill: #666; } - -@media (prefers-color-scheme: dark) { - .header-menu a { - color: var(--sanji-color); } - .header-menu svg { - color: #827478; } - .heard-right svg { - fill: #6b6063; } - .heard-right svg:hover { - fill: #999; } } - -.footer-background { - width: 100vw; - margin-left: calc(50% - 50vw); - margin-top: 40px; } - -.footer { - padding-top: 10px; - border-top: 0.5px solid var(--frame-color); - text-align: center; } - -.footer-info, .footer-info a, .footer-rss, .footer-rss a { - font-size: 0.75rem; - line-height: 1.6em; - color: #a7a7a7; } - -.footer-info { - padding: 0 20px; } - -#gotop { - display: none; - /* Hidden by default */ - position: fixed; - /* Fixed/sticky position */ - bottom: 40px; - /* Place the button at the bottom of the page */ - right: 40px; - /* Place the button 30px from the right */ - z-index: 99; - /* Make sure it does not overlap */ - cursor: pointer; - /* Add a mouse pointer on hover */ } - -.gotop { - width: 40px; - height: 40px; - border-radius: 50%; - background: #ffffff; - position: relative; - /* 设置相对定位 */ } - -.gotop:hover { - background: #ededed; } - -.gotop img { - width: 1.1rem; - height: 1.1rem; - position: absolute; - /* 设置绝对定位 */ - top: 50%; - /* 将图片的顶部对齐容器的中间位置 */ - left: 50%; - /* 将图片的左侧对齐容器的中间位置 */ - transform: translate(-50%, -50%); } - -.youpaiyun { - margin: 0 4px 0 4px; } - -/*.footer-rss{ - margin-bottom: 30px; -}*/ -.footer-cmdk { - display: flex; - gap: 6px; - font-size: 0.75rem; - align-items: center; - color: #a2a2a2; - margin: 10px 0 30px 0; - justify-content: center; } - -.footer-cmdk-key { - background: #e8e8e8; - padding: 4px; - width: 12px; - height: 12px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 4px; } - -@media (prefers-color-scheme: dark) { - .footer-info, .footer-info a, .footer-rss a, .footer-rss { - color: var(--erji-color); } - .footer { - border-top: 0.5px solid #231e20; } - .gotop { - background: #999; } - .footer-background { - background: #1A1718; - border-top: solid #3d3d3d 0.5px; - box-sizing: border-box; } - .footer-cmdk { - color: #666; } - .footer-cmdk-key { - background: #292526; } } - -@media (max-width: 1200px) { - .gotop_hide { - display: none; } } - -.article_details img { - max-width: 100%; - cursor: zoom-in; } - -.article_details_title { - font-size: 1.4rem; - font-family: var(--font-family-title); - line-height: 1.3; - margin-bottom: 15px; } - @media (min-width: 700px) { - .article_details_title { - font-size: 1.8rem; } } -a { - color: var(--text-content-color); - text-decoration: none; } - a:hover { - text-decoration: underline; } - -h2, h3 { - font-family: var(--font-family-title); - font-weight: normal; - font-display: swap; - font-weight: bold; } - -p { - color: var(--text-content-color); - font-family: var(--font-family-paragraph); - font-size: 1.05rem; - line-height: 24px; } - -p:empty { - display: none; } - -ol, -ul { - margin: 0; - padding: 0; - list-style: none; } - ol li, - ul li { - list-style: none; } - -.content_zhengwen { - margin: 15px 0 20px 0; } - -.content_zhengwen img, .top-img { - cursor: pointer; } - -.content { - font-size: 1.05rem; } - .content p { - font-size: 1.05rem; - line-height: 2; - margin: 0; - padding: 0; - margin-bottom: 15px; } - .content strong { - color: var(--text-highlight-color); } - .content h2, .content h3 { - font-size: 1.1rem; - line-height: 1.6; - margin-bottom: 6px; - letter-spacing: 0.5px; - color: var(--text-highlight-color); } - .content ul { - list-style: disc; } - .content ul li { - list-style: disc; } - .content ol { - list-style: decimal; } - .content ol li { - list-style: decimal; } - .content ul, - .content ol { - margin-left: 0; - margin-top: 10px; - margin-bottom: 20px; } - .content ul li, - .content ol li { - font-size: 1.1rem; - line-height: 2; - margin-bottom: 10px; - margin-left: 20px; } - @media (min-width: 700px) { - .content ul li, - .content ol li { - margin-left: 0; } } - @media (min-width: 700px) { - .content ul, - .content ol { - margin-left: 20px; } } - .content a { - text-decoration: underline; - word-wrap: break-word; - word-break: break-all; - text-decoration: none; - text-decoration: underline; - margin: 0 2px; - transition: opacity 0.3s ease-in-out 0s; } - .content a:hover { - opacity: 0.6; } - .content blockquote { - border-left: 5px solid #666; - margin: 30px 0; - padding: 20px; } - .content blockquote p { - font-size: 20px; - display: inline; - color: var(--color-base-text); } - .content img { - margin: 10px 0 0 0; - max-width: 100%; - height: auto; - cursor: zoom-in; } - .content figure { - margin: 2.6rem 0 1.18rem; } - .content figure img { - margin: 0; } - .content figure figcaption { - margin-top: 10px; } - .content figure figcaption h4 { - margin: 0; - font-size: 1rem; - font-weight: bold; } - .content figure figcaption p { - margin: 0; } - .content code, - .content pre { - font-family: var(--font-family-code); - line-height: 1.9; } - .content .highlight pre { - font-size: 0.9rem; - padding: 20px; - overflow: auto; - border-radius: 6px; - background: #24273A; } - -.footnotes ol { - list-style: decimal; } - .footnotes ol li { - list-style: decimal; } - -.single-nrong { - display: flex; } - -.single-zw { - width: 100%; } - -.paragraph-dh { - display: none; } - @media (min-width: 1200px) { - .paragraph-dh { - display: block; - position: fixed; - opacity: 0; - top: 30%; - margin-left: 40px; - transition: opacity 0.5s ease; - max-width: 300px; } } -.paragraph-dh ul { - gap: 10px; - display: grid; } - -.paragraph-dh ul ul { - margin-top: 10px; } - -.paragraph-dh ul ul a { - color: #999; } - -.paragraph-dh a.active { - color: var(--text-highlight-color); - text-indent: 0; } - -.paragraph-dh a { - padding-left: 25px; - position: relative; - display: flex; - align-items: center; - text-indent: -9999px; - /* 把文字移出可视区域 */ - overflow: hidden; - white-space: nowrap; - line-height: 1.4; - color: #666; - font-size: 0.85rem; } - -.paragraph-dh:hover a { - text-indent: 0; - /* 重置文字缩进,使文本可见 */ } - -.paragraph-dh li > a:before { - content: ''; - display: inline-block; - width: 16px; - height: 5px; - border-radius: 6px; - background-color: #ddd; - position: absolute; - left: 0; } - -.paragraph-dh li li > a:before { - width: 10px; } - -.paragraph-dh a.active:before { - background-color: var(--text-highlight-color); } - -@media (prefers-color-scheme: dark) { - .paragraph-dh a { - color: #999; } - .paragraph-dh ul ul a { - color: #7e7174; } - .paragraph-dh li > a:before { - background-color: #6b6063; } } - -.intro h1 { - font-size: 40px; - margin-bottom: 10px; } - -.intro h2 { - font-size: 50px; - line-height: 56px; } - @media (min-width: 700px) { - .intro h2 { - width: 80%; } } -.intro p { - font-size: 1.1rem; - line-height: 1.8; } - @media (min-width: 700px) { - .intro p { - width: 100%; - font-size: 1.1rem; - line-height: 32px; } } -.intro .article_title { - font-size: 1.8rem; - line-height: 35px; - margin-bottom: 20px; - font-weight: normal; } - -.intro .read-more { - font-size: 1.1rem; - line-height: 26px; - font-weight: bold; } - @media (min-width: 700px) { - .intro .read-more { - font-size: 1.1rem; - line-height: 32px; } } -.intro img { - max-width: 100%; - cursor: zoom-in; } - -.summary { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); - grid-gap: 20px; } - -.summary-nrong { - border-radius: 4px; - background: #fff; - box-shadow: rgba(0, 0, 0, 0.07) 0px 6px 20px 0px; - padding: 15px; } - @media (min-width: 900px) { - .summary-nrong { - padding: 20px; } } -.summary-date { - font-size: 0.85rem; - color: var(--sanji-color); - font-family: var(--font-family-code); - margin-top: 6px; } - -.summary-title { - font-family: var(--font-family-title); - font-size: 1.2rem; - margin-top: 6px; - line-height: 1.6; } - -.summary-description { - font-size: 1rem; - line-height: 1.8; - color: var(--erji-color); - margin-top: 10px; - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; } - -@media (prefers-color-scheme: dark) { - .summary-description { - color: var(--sanji-color); } - .summary-date { - color: #666 !important; } - .summary-nrong { - background: var(--background-dark-color); } } - -.menu-main-mobile { - position: fixed; - background: var(--text-highlight-color); - top: 0; - left: 0; - width: 100%; - height: 100vh; - opacity: 0; - visibility: hidden; - transition: opacity 0.35s, visibility 0.35s, height 0.35s; - overflow: hidden; - display: none; - justify-content: center; - flex-direction: column; } - .menu-main-mobile.open { - opacity: 1; - visibility: visible; - height: 100%; - z-index: 10; - display: flex; } - .menu-main-mobile.open li { - animation: fadeInTop 0.5s ease forwards; - animation-delay: 0.1s; - margin-bottom: 6%; } - .menu-main-mobile.open li:nth-of-type(2) { - animation-delay: 0.15s; } - .menu-main-mobile.open li:nth-of-type(3) { - animation-delay: 0.20s; } - .menu-main-mobile.open li:nth-of-type(4) { - animation-delay: 0.25s; } - .menu-main-mobile.open li:nth-of-type(5) { - animation-delay: 0.30s; } - .menu-main-mobile.open li:nth-of-type(6) { - animation-delay: 0.35s; } - .menu-main-mobile ul { - font-size: 1.6rem; - font-family: var(--font-family-title); - text-align: center; - list-style: none; - margin: 0; - flex: 0; } - .menu-main-mobile ul li { - display: block; - position: relative; - opacity: 0; } - .menu-main-mobile ul li a { - display: block; - position: relative; - color: #FFF; - text-decoration: none; } - .menu-main-mobile ul li a:hover { - opacity: 0.7; } - .menu-main-mobile ul li ul.sub-menu { - font-size: 1.2rem; } - -.hamburger-trigger { - height: 30px; - display: flex; - align-items: center; } - @media (min-width: 900px) { - .hamburger-trigger { - display: none; } } -.hamburger { - border: none; - cursor: pointer; - outline: none; - position: relative; - display: block; - width: 30px; - height: 20px; - background: transparent; - border-top: 2px solid; - border-bottom: 2px solid; - font-size: 0; - transition: all 0.25s ease-in-out; - color: var(--text-highlight-color); } - .hamburger:before, .hamburger:after { - content: ''; - display: block; - width: 100%; - height: 2px; - position: absolute; - top: 50%; - left: 50%; - background: currentColor; - transform: translate(-50%, -50%); - transition: transform 0.25s ease-in-out; } - .hamburger:hover { - opacity: 0.7; } - .hamburger.is-active { - border-color: transparent; - z-index: 100; - color: #fff; } - .hamburger.is-active:hover { - opacity: 1; } - .hamburger.is-active:before { - transform: translate(-50%, -50%) rotate(45deg); } - .hamburger.is-active:after { - transform: translate(-50%, -50%) rotate(-45deg); } - -@keyframes fadeInTop { - 0% { - opacity: 0; - top: 20%; } - 100% { - opacity: 1; - top: 0; } } - -.highlight { - color: #c9d1d9; - /* Overall text color */ - background: #0d1117; - /* Background color */ } - -/* Comments & Documentation */ -.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs, .highlight .cp, .highlight .cpf, .highlight .c2 { - color: #8b949e; - font-style: italic; } - -/* Keywords */ -.highlight .k, .highlight .kd, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kt { - color: #7f9bf5; - font-weight: bold; } - -/* Operators */ -.highlight .o, .highlight .ob, .highlight .op, .highlight .ow { - color: #c58b45; - font-weight: bold; } - -/* Strings, values and literals */ -.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .s1, .highlight .se, .highlight .sh, .highlight .ss, .highlight .sx, .highlight .sr { - color: #79b8ff; } - -/* Names & Identifiers */ -.highlight .n, .highlight .nf, .highlight .nc, .highlight .no, .highlight .na, .highlight .nb, .highlight .nd, -.highlight .ni, .highlight .ne, .highlight .nn, .highlight .nt, .highlight .nv, .highlight .vc, .highlight .vg, .highlight .vi { - color: #b392f0; } - -/* Numbers */ -.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .mo, .highlight .mb, .highlight .mx, .highlight .il { - color: #dc6a6a; } - -/* Built-in, Variables */ -.highlight .bp, .highlight .vg, .highlight .vi, .highlight .vm, .highlight .ss { - color: #3fb950; } - -/* Literals & Doc Tags */ -.highlight .do, .highlight .py, .highlight .kd, .highlight .kp, .highlight .kr { - color: #79b8ff; } - -/* Labels, Attributes & Arguments */ -.highlight .na, .highlight .w, .highlight .mb, .highlight .mx, .highlight .il { - color: #8b949e; } - -/* Punctuation */ -.highlight .p { - color: #c9d1d9; } - -/* Error */ -.highlight .err { - color: #f85149; - font-weight: bold; } - -.artalk { - margin-top: 20px; } - -.atk-list-read-more { - padding-bottom: 0px !important; } - -.atk-comment { - padding: 10px 0 !important; } - -.artalk > .atk-list > .atk-list-header { - display: none !important; } - -.atk-content p { - font-size: 1rem !important; - color: var(--text-content-color) !important; } - -.atk-comment-children > .atk-comment-wrap { - margin-top: 6px !important; } - -.atk-content { - line-height: 1.5 !important; } - -.atk-avatar img { - border-radius: 50% !important; } - -.atk-comment > .atk-avatar img { - width: 24px !important; - height: 24px !important; - margin-top: 8px; } - -.atk-main { - margin-left: 34px !important; } - -.atk-comment-children > .atk-comment-wrap > .atk-comment { - padding: 0px !important; - margin: auto; } - -.atk-comment > .atk-main > .atk-header { - margin-bottom: 0px !important; } - -.atk-textarea { - min-height: 70px !important; } - -.artalk > .atk-list > .atk-list-footer { - bottom: auto !important; } - -.atk-item.atk-nick { - color: var(--text-content-color) !important; - font-weight: bold; } - -.atk-item.atk-nick a { - color: #999 !important; } - -.atk-ua { - color: #999 !important; - background: var(--frame-color) !important; } - -.atk-ua-wrap { - font-size: 11px; } - -.atk-text { - color: #999 !important; } - -.atk-badge { - display: none !important; } - -.atk-list-no-comment, .atk-copyright, .atk-copyright a { - color: #999 !important; } - -.atk-send-btn { - padding: 0 10px !important; - min-width: 5em !important; - background: transparent !important; - border: 0.5px solid var(--text-highlight-color) !important; - color: var(--text-highlight-color) !important; } - -.atk-send-btn:hover { - opacity: 0.7; } - -.atk-list-header .atk-dropdown-wrap .atk-dropdown-item.active span, .atk-list-header .atk-dropdown-wrap .atk-dropdown-item span:hover { - color: var(--text-highlight-color) !important; } - -.artalk { - --at-color-main:#666!important; - --at-color-pink:var(--text-highlight-color)!important; - --at-color-light:var(--text-highlight-color)!important; - --at-color-meta:#999!important; - --at-color-border: #DDD !important; } - -.atk-content img { - max-height: 1.1rem !important; - vertical-align: middle; - margin-left: 2px; - margin-right: 2px; - margin-top: -4px !important; } - -.atk-comment > .atk-main > .atk-body > .atk-content img { - width: 1.1rem !important; } - -.atk-comment .atk-height-limit:after { - margin-bottom: 20px; } - -.atk-editor-plug-emoticons > .atk-grp-wrap > .atk-grp[data-type="image"] > .atk-item { - height: 32px !important; - width: 32px !important; } - -.atk-editor-plug-emoticons > .atk-grp-wrap > .atk-grp > .atk-item { - font-size: 24px !important; - padding: 0 !important; } - -.atk-notify.atk-fade-in { - background: #666 !important; - margin-bottom: 6px; } - -.atk-pinned-badge { - background: #999 !important; } - -.atk-send-reply { - background: none !important; } - -.atk-reply-to { - border-left: 3px solid #FFF !important; } - -.atk-plug-panel-wrap { - height: 110px !important; } - -img[atk-emoticon] { - max-height: 20px !important; } - -.atk-bottom { - padding: 5px 10px 10px 5px !important; } - -.atk-main-editor > .atk-header { - padding: 10px 5px 0 !important; } - -.atk-main-editor > .atk-plug-panel-wrap { - border-top: 0.5px solid var(--at-color-border) !important; } - -.atk-textarea { - padding: 10px !important; } - -.atk-main-editor { - border: 1px solid var(--frame-color) !important; } - -.artalk code { - border: 1px solid #FFBE98 !important; - border-radius: 4px !important; - background: transparent !important; - margin: 0 4px !important; } - -.atk-main-editor > .atk-textarea-wrap > .atk-textarea { - line-height: 1.6; } - -.atk-main-editor > .atk-bottom .atk-state-btn .atk-text-wrap { - color: #999; } - -@media (prefers-color-scheme: dark) { - .atk-content p { - color: var(--text-content-dark-color) !important; } - .pinglun { - color: var(--text-content-dark-color); } - .atk-main-editor { - background: transparent !important; - border: 1px solid var(--frame-dark-color) !important; } - .atk-textarea { - color: var(--text-content-dark-color) !important; - font-size: 15px; - background: transparent !important; } - .atk-content, .atk-header { - color: var(--text-content-dark-color) !important; } - .atk-ua { - color: #666 !important; - background: var(--background-dark-color) !important; } - .artalk { - --at-color-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0), #242021)!important; - --at-color-bg: #1A1718 !important; - --at-color-border: #332D2F !important; - --at-color-meta:#666 !important; - --at-color-font:#BBB !important; - --at-color-bg-grey: var(--background-dark-color) !important; - --at-color-bg-grey:#332D2E!important; } - .artalk.atk-dark-mode { - --at-color-grey:#747474 !important; } - .atk-text, .atk-list-no-comment, .atk-copyright, .atk-copyright a { - color: #666 !important; } - .atk-item.atk-nick { - color: var(--text-content-dark-color) !important; } - .atk-pinned-badge { - color: var(--text-content-dark-color) !important; - background: #666 !important; } - .atk-reply-to { - border-left: 3px solid #242021 !important; } - .atk-comment .atk-main .atk-footer .atk-actions span:hover { - color: #999 !important; } - .atk-item.atk-nick a { - color: #666 !important; } - .atk-main-editor > .atk-bottom .atk-state-btn { - background: var(--background-dark-color) !important; } - .atk-main-editor > .atk-bottom .atk-state-btn .atk-text-wrap { - color: #666; } } - -.artalk.hidden { - display: none; } - -@media (max-width: 700px) { - .atk-main-editor > .atk-header { - display: block !important; } } - -#MoreComments { - background: transparent; - cursor: pointer; - color: var(--text-highlight-color); - border-radius: 4px; - padding: 10px 30px; - font-family: var(--font-family-title); - font-size: 0.85rem; - border: 0.5px solid var(--text-highlight-color); - display: inline-block; } - -#MoreComments:hover { - opacity: 0.8; - transition: opacity .3s ease-in-out; } - -.appdquanjudiv { - display: grid; - grid-gap: 10px; - /* 中间空10px间距 */ } - @media (min-width: 900px) { - .appdquanjudiv { - grid-template-columns: repeat(2, 1fr); - grid-gap: 15px; - /* 中间空10px间距 */ } } -.appquanju { - display: grid; - grid-template-columns: auto 1fr auto; - grid-gap: 10px; - align-items: center; - justify-content: center; - background: #fff; - box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 20px 0px; - padding: 15px; - border-radius: 4px; - z-index: 1; } - -.appimg img { - width: 70px; - transition: transform 0.3s ease; } - -.apptitle { - font-size: 1rem; - margin-bottom: 4px; } - @media (min-width: 900px) { - .apptitle { - font-size: 0.85rem; } } -.appnote { - display: none; } - @media (min-width: 900px) { - .appnote { - display: grid; - position: absolute; - padding: 6px 15px 6px 0; - background: #fff; - top: 0; - bottom: 0; - color: var(--erji-color); - font-size: 0.9rem; - line-height: 1.4; - align-items: center; - opacity: 0; - text-align: justify; - transition: opacity 0.3s ease; } } -.appquanju:hover .appnote { - opacity: 1; } - -.appzhuangtai { - display: flex; - gap: 10px; - flex-wrap: wrap; } - -.macos { - font-size: 0.75rem; - font-family: var(--font-family-code); - color: var(--sanji-color); } - -.macos:empty, .kaiyuan:empty, .shoufei:empty, .free:empty { - display: none; } - -.kaiyuan, .shoufei, .free { - font-size: 0.9rem; - padding: 5px 8px; - border-radius: 20px; } - @media (min-width: 900px) { - .kaiyuan, .shoufei, .free { - font-size: 0.75rem; } } -.kaiyuan { - color: var(--text-highlight-color); - border: 0.5px solid var(--text-highlight-color); } - -.shoufei { - color: #0774e0; - border: 0.5px solid #0774e0; } - -.free { - color: #11a173; - border: 0.5px solid #11a173; } - -.appdquanjudiv a:hover { - text-decoration: none; } - -.apptitle a:hover { - text-decoration: underline; } - -.pagetitle { - font-size: 1rem; - line-height: 1.8; - margin-bottom: 20px; - max-width: 620px; - margin: auto; - padding-bottom: 20px; - text-align: center; - color: var(--erji-color); } - -.app-star { - display: block; - position: relative; - aspect-ratio: 1; - overflow: hidden; - padding: 10px 25px 40px 25px; } - -.app-star .appnote { - opacity: 1; - background: transparent; - padding: 0; - position: static; - display: block; - font-size: 0.85rem; - line-height: 1.6; } - @media (min-width: 900px) { - .app-star .appnote { - font-size: 0.9rem; } } -.star-img { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; } - -.star-img img { - height: 100%; - width: 100%; - object-fit: cover; - border-radius: 4px; - transition: transform 0.3s ease; } - -.star-img img:hover { - transform: scale(1.1); } - -.app-star .apptitle2 { - font-size: 1.6rem; - margin-bottom: 5px; } - -.app-star .apptitle2 a, .app-star .appnote, .app-star .macos, .app-star .kaiyuan, .app-star .shoufei, .app-star .free { - color: #fff; - font-family: var(--font-family-code); - transition: opacity .3s ease-in-out; } - -.app-star .apptitle2 a:hover { - opacity: 0.8; } - -.app-star .macos { - margin-bottom: 20px; } - -.app-star .kaiyuan, .app-star .shoufei, .app-star .free { - border: 0.5px solid #fff; } - -.app-star .appzhuangtai-right { - display: inline-block; } - -@media (prefers-color-scheme: dark) { - .macos { - color: var(--erji-color); } - .pagetitle { - color: var(--sanji-color); } - .appnote, .apptitle a { - color: var(--text-content-dark-color); } - .appquanju, .appnote { - background: var(--background-dark-color); } - .app-star .apptitle2 a, .app-star .appnote, .app-star .macos, .app-star .kaiyuan, .app-star .shoufei, .app-star .free { - color: #dfdfdf; } - .app-star .kaiyuan, .app-star .shoufei, .app-star .free { - border: 0.5px solid #dfdfdf; } } - -.quanju { - display: grid; - grid-template-columns: repeat(2, 1fr); - grid-gap: 10px; - /* 中间空10px间距 */ } - @media (min-width: 900px) { - .quanju { - grid-template-columns: repeat(3, 1fr); - grid-gap: 15px; - /* 中间空10px间距 */ } } -.duiqi { - display: flex; - justify-content: center; - align-items: center; } - -.duiqi img { - max-width: 70%; - margin: 0; - transition: transform 0.3s ease; } - @media (min-width: 900px) { - .duiqi img { - max-width: 60%; } } -.bankuai { - background: #F8F8F8; - padding: 30px 0 40px 0; - border-radius: 4px; } - -.bankuai a:hover { - text-decoration: none; } - -.hardware-text { - text-align: center; - color: var(--sanji-color); - margin-top: 20px; } - -.hardware-title { - margin-bottom: 4px; - font-size: 0.9rem; - padding: 0 10px; } - @media (min-width: 900px) { - .hardware-title { - padding: 0; } } -.hardware-title a { - color: var(--text-content-color); } - -.hardware-title a:hover { - text-decoration: underline; } - -.hardware-jiage { - margin-left: auto; - font-size: 0.85rem; - border-radius: 20px; - font-family: var(--font-family-code); } - @media (min-width: 900px) { - .hardware-jiage { - font-size: 0.75rem; } } -.liing_2_right { - justify-content: center; - /* 水平居中对齐 */ - display: flex; } - -.tiyi { - color: var(--text-highlight-color); - font-size: 1rem; - border: 0.5px solid var(--text-highlight-color); - padding: 4px 10px; - border-radius: 20px; - margin-top: 6px; } - @media (min-width: 900px) { - .tiyi { - font-size: 0.85rem; } } -.tiyi:hover { - text-decoration: underline; } - -.tiyi:empty, .details:empty { - display: none; } - -.note { - display: none; } - @media (min-width: 900px) { - .note { - display: block; - position: absolute; - padding: 15px; - z-index: 10; - top: 0; - background: rgba(248, 248, 248, 0.6); - color: var(--erji-color); - font-size: 0.9rem; - line-height: 1.6; - opacity: 0; - backdrop-filter: saturate(140%) blur(20px); - -webkit-backdrop-filter: saturate(140%) blur(20px); - transition: opacity 0.4s ease; } } -.bankuai:hover .note { - opacity: 1; } - -@media (prefers-color-scheme: dark) { - .bankuai { - background: var(--background-dark-color); } - .hardware-text { - color: var(--erji-color); } - .hardware-title a, .note { - color: var(--text-content-dark-color); } } - -@media (prefers-color-scheme: dark) and (min-width: 900px) { - .note { - background: rgba(32, 29, 30, 0.6); } } - -/*归档页标签*/ -.archives_tags { - display: flex; - flex-wrap: wrap; - grid-gap: 10px; } - -.list-tags { - border-radius: 20px; - padding: 10px; - border: 1px solid var(--frame-color); - font-size: 0.85rem; } - -.list-tags a { - color: var(--erji-color); } - -.archives_tags_f { - color: var(--sanji-color); - font-size: 0.85rem; } - -/*文章页标签*/ -.single-biaoq { - margin-top: 20px; } - -.single-biaoq, .single-tag { - display: flex; - flex-wrap: wrap; - gap: 10px; - align-items: center; } - -.page-time, .single-tag-c { - font-size: 0.85rem; - color: #999; - display: inline-block; } - -.single-tag-c a { - color: var(--sanji-color); } - -@media (prefers-color-scheme: dark) { - .page-time, .single-tag-c { - color: #666; } - .single-tag-c a { - color: #666; } - .archives_tags_f { - color: var(--erji-color); } - .list-tags { - border: 0.5px solid var(--frame-dark-color); } - .list-tags a { - color: var(--sanji-color); } } - -.movie-quanju { - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-gap: 2px; - margin-bottom: 40px; } - -.movies_video { - position: absolute; - height: 30rem; - width: 100%; - left: 0; - right: 0; - top: 0; - z-index: -10; } - -.movies_video:after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - height: 100%; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #FFF 100%); } - -.page-movies .pagetitle, .page-movies .header-menu a { - color: #FFF; } - -.page-movies .header-menu svg { - color: #ebebeb; } - -.page-movies .menu-main svg { - fill: #dfdfdf; } - -#movies_page { - display: grid; - grid-gap: 2px; - grid-template-columns: repeat(3, 1fr); } - -.movies_bankuai { - position: relative; - overflow: hidden; - width: 100%; - aspect-ratio: 3 / 4.4; } - -.movies_bankuai img { - width: 100%; - height: 100%; - object-fit: cover; } - -.movies-nrong { - display: none; } - @media (min-width: 700px) { - .movies-nrong { - display: block; - padding: 60px 20px 20px 20px; - color: #fff; - font-size: 0.85rem; - position: absolute; - transition: transform 0.3s ease; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.85); - opacity: 0; } } -.movies_bankuai:hover .movies-nrong { - opacity: 1; - transform: scale(1.05); } - -.movie-time { - color: #c7c7c7; - margin-top: 7px; } - -.movie-title { - font-family: var(--font-family-title); - font-weight: bold; - font-size: 1rem; - margin: 6px 0 6px 0; } - -.movie-title a { - color: #FFF; } - -.movie-pfeng { - color: #c7c7c7; - margin-bottom: 8px; - display: flex; - gap: 4px; } - -.movie-pfeng svg { - width: 0.85rem; - height: 0.85rem; - color: #fcb68d; } - -.movie-info { - line-height: 1.6; - color: #FFF; - text-align: justify; } - -.movies_loadMore { - background: 0 0; - cursor: pointer; - color: var(--text-highlight-color); - border-radius: 4px; - padding: 10px 30px; - font-family: var(--font-family-title); - font-size: .85rem; - border: 0.5px solid var(--text-highlight-color); - margin-top: 20px; - display: inline-block; } - -.movies_loadMore:hover { - opacity: 0.8; } - -@media (prefers-color-scheme: dark) { - .movie-content-right-3, .movie-content-right-2 a { - color: var(--sanji-color); } - .movies_video:after { - background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #1A1718 100%); } - .page-movies .pagetitle, .page-movies .header-menu a { - color: var(--sanji-color); } - .page-movies .header-menu svg { - color: #827478; } - .page-movies .pagetitle, .page-movies .header-menu a, .movie-info, .movie-title a { - color: #dfdfdf; } - .page-movies .header-menu svg { - color: #dfdfdf; } - .page-movies .menu-main svg { - fill: #c3c3c3; } } - -.memos_diaoyong { - max-width: 700px; - margin: auto; - padding-bottom: 20px; } - -.memos-random-background { - border-radius: 4px; - background: var(--bankuai-color) !important; - padding: 10px; } - -.memos-diaoyong-tag .memos-tag-dg { - cursor: auto; } - -.memos-diaoyong-tag .memos-tag-dg:hover { - text-decoration: none; } - -.memos_diaoyong_from a { - color: var(--erji-color); - font-family: var(--font-family-code); } - -.memos-logo, .memos-logo2 { - padding-top: 7px; } - -.memos-logo img, .memos-logo2 img { - width: 24px; - height: 24px; - border-radius: 50%; - margin-right: 8px; } - -.talks_comments { - margin-left: auto; } - -.talks_comments svg { - color: var(--sanji-color); - cursor: pointer; - width: 18px; - height: 18px; } - -.talks_comments svg:hover { - color: var(--erji-color); } - -.memos_diaoyong_top { - margin-top: 5px; - display: flex; - align-items: center; - gap: 6px; } - -.memos_diaoyong_from, .memos_diaoyong_time, .memos_diaoyong_laiz, .memos_diaoyong_more { - color: var(--sanji-color); - font-size: 0.85rem; } - -.memos_diaoyong_laiz a, .memos_diaoyong_more a { - color: var(--sanji-color); } - -.memos_diaoyong_info p { - font-size: 1rem; - color: var(--text-content-color); - line-height: 1.8; - margin: 0; } - -.memos_diaoyong_more { - margin-left: auto; } - -.bb-timeline { - margin-bottom: 0; } - @media (min-width: 900px) { - .bb-timeline { - margin-bottom: 40px; } } -.datacont p { - font-size: 1rem; - line-height: 1.8; - margin: 0; - text-align: justify; } - -.datacont a { - text-decoration: underline; - margin: 0 2px; - transition: opacity 0.3s ease-in-out 0s; } - .datacont a:hover { - opacity: 0.6; } - -.resimg figure { - margin: 0; - margin-bottom: -4px; } - -.resimg { - display: grid; - gap: 6px; - width: 60%; - grid-template-columns: repeat(2, 1fr); - margin-top: 5px; - margin-bottom: 10px; } - -.gallery-thumbnail img { - width: 100% !important; - aspect-ratio: 3.5 / 3; - object-fit: cover; - border-radius: 4px; - transition: transform 0.3s ease; - cursor: zoom-in; - margin: 0 !important; } - -.resimg img:hover { - transform: scale(1.03); } - -.grid-3, .grid-5, .grid-6, .grid-7, .grid-8, .grid-9 { - grid-template-columns: repeat(3, 1fr); } - -.memos-tag-dg, .memos-tag-sc { - display: inline-block; - /* 根据padding宽度自动调整 */ - padding: 4px 4px 4px 2px; - color: var(--sanji-color); - font-size: 0.85rem; - border-radius: 4px; - vertical-align: middle; - cursor: pointer; } - -#tag-list-all { - margin-top: 10px; - display: flex; - gap: 10px; - flex-wrap: wrap; } - -.memos-tag-all { - padding: 6px; - color: var(--sanji-color); - background: #f2f2f2; - font-size: 0.85rem; - border-radius: 4px; - cursor: pointer; } - -.memos-tag-sc-2 { - align-items: center; - display: flex; - margin-top: 10px; - font-size: 0.85rem; - color: var(--sanji-color); - margin-bottom: 10px; } - -.memos-tag-sc { - margin-left: 10px; - font-size: 0.85rem !important; - color: #666 !important; - background: #e5e5e5 !important; - padding: 8px !important; } - -.memos-tag-sc svg { - width: 1rem; - margin-left: 6px; - vertical-align: middle; - margin-top: -4px; } - -.memos-tag-sc:hover { - text-decoration: line-through; } - -.memos-tag-dg:hover, .memos-tag-all:hover { - text-decoration: underline; } - -.memos-pl { - display: flex; - margin-bottom: 8px; - align-items: center; - gap: 6px; } - -.bb-load button { - background: transparent; - cursor: pointer; - color: var(--text-highlight-color); - border-radius: 4px; - padding: 10px 30px; - font-family: var(--font-family-title); - font-size: 0.85rem; - border: 0.5px solid var(--text-highlight-color); } - -.bb-load button:hover { - opacity: 0.8; - transition: opacity .3s ease-in-out; } - -.memos-hide { - margin-left: auto; - color: var(--text-highlight-color); } - -.datacont pre { - border-radius: 4px; - line-height: 1.8; - background: #ececec; - padding: 10px; - white-space: pre-wrap; - margin-top: 5px; - margin-bottom: 10px; } - @media (min-width: 900px) { - .datacont pre { - background: #f6f6f6; } } -.datacont pre code { - background: transparent; - font-size: 0.85rem; - padding: 0; - color: var(--erji-color); - border: none; - margin: 0; } - -.datacont code { - background: #ffe4d4; - border: 1px solid #FFBE98; - border-radius: 4px; - font-size: 1rem; - padding: 2px 6px 2px 6px; - font-family: var(--font-family-code); - margin: 0 4px 0 4px; - word-wrap: break-word; } - -blockquote p { - background: var(--background-color); - border-radius: 0 4px 4px 0; - padding: 10px; - font-size: 1rem !important; - line-height: 1.6 !important; - border-left: 4px solid #bfbfbf; - color: #666 !important; - margin: -10px -40px 0 -40px !important; } - -.load-memos-editor { - cursor: pointer; - display: inline-block; - margin-left: 30px; - color: transparent; } - -.outline svg { - color: var(--sanji-color); - width: 18px; - height: 18px; } - -.memos-more-ico { - position: relative; } - -.memos-xiala { - width: 80px; - position: absolute; - background-color: #fff; - padding: 6px 0; - box-shadow: 2px 4px 1rem rgba(0, 0, 0, 0.15); - text-align: center; - border-radius: 4px; - display: none; - font-size: 0.85rem; - right: -30px; } - -.memos-more-ico:hover .memos-xiala { - display: block; } - -.memos-more-ico svg { - color: var(--sanji-color); } - -.memos-xiala svg { - width: 18px; - height: 18px; - color: #ababab; } - -.memos-xiala .switchUser-btn { - margin-top: 20px !important; } - -.memos-xiala .switchUser-btn, .memos-xiala .private-btn, .memos-xiala .oneday-btn, .image-btn, .code-btn { - margin: 12px 0; - cursor: pointer; - color: var(--erji-color); - display: flex; - align-items: center; - justify-content: center; - gap: 8px; } - -.memos-xiala .switchUser-btn:hover, .memos-xiala .private-btn:hover, .memos-xiala .oneday-btn:hover, .image-btn:hover, .code-btn:hover { - text-decoration: underline; } - -.outline svg:hover { - color: #444; } - -.memos-title { - display: none; } - -.d-flex { - display: flex; - align-items: center; - gap: 18px; } - -.d-none { - display: none !important; } - -.memos-editor-body { - border-radius: 4px; - border: 0.5px solid #eaeaea; - padding: 15px; - margin-bottom: 10px; } - @media (min-width: 900px) { - .memos-editor-body { - margin-bottom: 40px; } } -.memos-editor-content .memos-editor-textarea { - border: transparent; - border-radius: 4px; - line-height: 1.6; - min-height: 60px; - overflow-x: hidden; - overflow-y: clip; - width: 100%; - outline: 0.1px solid transparent; - resize: none; - background: transparent; - font-family: var(--font-family-paragraph); - font-size: 1rem; - padding: 0; } - -.memos-editor-tools { - margin-top: 4px; - margin-bottom: 10px; } - -.action-btn { - cursor: pointer; } - -.memos-editor-tools .memos-tag-list { - display: flex; - flex-wrap: wrap; - margin-top: 15px; - grid-gap: 15px; } - -.memos-editor-tools .memos-tag { - cursor: pointer; } - -.memos-editor-tools .memos-tag a { - color: var(--sanji-color); } - -.editor-selector { - position: relative; - display: inline-block; } - -.editor-selector select { - appearance: none; - /* 隐藏原生控件样式 */ - border: 0 solid transparent; - border-radius: 4px; - padding: 8px 20px 8px 0; - background: transparent; - color: var(--sanji-color); - font-family: var(--font-family-paragraph); - font-size: 0.85rem; - outline: 0.5px solid transparent; } - -.editor-selector::after { - content: ''; - position: absolute; - top: 50%; - right: 8px; - /* 调整箭头的位置,这里示例将箭头靠右偏移8像素 */ - width: 0; - border-style: solid; - border-width: 4px 4px 0 4px; - /* 控制箭头的大小和形状 */ - border-color: #999 transparent transparent transparent; - /* 控制箭头的颜色 */ - transform: translateY(-50%); - /* 将箭头垂直居中对齐 */ } - -.submit-memos-btn, .edit-memos-btn { - background: transparent; - cursor: pointer; - color: var(--text-highlight-color); - border-radius: 4px; - padding: 6px 0; } - -.cancel-edit-btn { - padding: 6px 0; - cursor: pointer; - border: 0.5px solid #FFF; - color: var(--sanji-color); } - -.memos-open-api-submit:hover, .edit-memos-btn:hover, .cancel-edit-btn:hover { - opacity: 0.7; - transition: opacity .3s ease-in-out; } - -.memos-editor-textarea::placeholder { - color: #bbbbbb; } - -.memos-editor-footer { - display: flex; - align-items: center; } - -.justify-content-end { - margin-left: auto; } - -.memos-image-list { - cursor: pointer; - gap: 10px; - color: var(--sanji-color); - margin-bottom: 15px; } - -.memos-image-list .memos-up-image { - background-size: cover; - background-repeat: no-repeat; - width: 4rem; - height: 4rem; - border-radius: 4px; - transition: opacity .3s ease-in-out; } - -.memos-image-list .memos-up-image:hover { - opacity: 0.6; } - -.memos-img-edit { - background: #f5f5f5; - padding: 6px; - border-radius: 4px; } - -.memos-img-edit:hover { - text-decoration: line-through; } - -.memos-editor-option { - display: flex; } - -.memos-path-input, .memos-token-input { - border: transparent; - padding: 6px 0 6px 0; - outline: 0.5px solid transparent; - background: transparent; - font-size: 1rem; - font-family: var(--font-family-code); - width: 50%; } - -.memos-token-input { - margin-left: 40px; - margin-right: 10px; } - -.memos-open-api-submit { - background: var(--text-highlight-color); - cursor: pointer; - color: #fff; - border-radius: 4px; - width: 100px; - display: flex; - align-items: center; - justify-content: center; } - -.memos-oneday { - margin-bottom: 10px; - list-style: none; } - @media (min-width: 900px) { - .memos-oneday { - margin-bottom: 40px; } } -.memos-oneday .memos_diaoyong_time { - color: var(--text-highlight-color); } - -.memos-edit { - margin-left: auto; - position: relative; } - -.memos-menu { - margin-left: 40px; - color: transparent; } - -.memos-menu-d { - width: 60px; - position: absolute; - top: 8px; - background-color: #fff; - padding: 8px 0 8px 0; - box-shadow: 2px 4px 1rem rgba(0, 0, 0, 0.15); - text-align: center; - border-radius: 4px; - display: none; } - -.memos-edit:hover .memos-menu-d { - display: block; } - -.edit-btn, .archive-btn, .delete-btn { - cursor: pointer; - line-height: 1.8; - color: var(--sanji-color); - font-size: 0.85rem; } - -.edit-btn:hover, .archive-btn:hover, .delete-btn:hover { - text-decoration: underline; } - -.delete-btn { - color: #c70000 !important; } - -.edit-memos { - display: flex; - gap: 20px; } - -@media (max-width: 900px) { - .resimg { - width: 100% !important; } - .resimg figure { - margin-bottom: -8px; } - .memos_diaoyong { - display: none; } - .bb-load button { - margin-top: 10px; } - .bb-list-li { - background: #f6f6f6; - padding: 15px; - margin-bottom: 10px; - border-radius: 6px; } } - -@media (max-width: 900px) and (prefers-color-scheme: dark) { - .bb-list-li { - background: var(--background-dark-color); } } - -@media (min-width: 900px) { - .memos_diaoyong .resimg { - width: 100% !important; - grid-template-columns: repeat(5, 1fr); } - .memos_diaoyong .grid-3, .memos_diaoyong .grid-5, .memos_diaoyong .grid-6, .memos_diaoyong .grid-7, .memos_diaoyong grid-8, .memos_diaoyong .grid-9 { - grid-template-columns: repeat(5, 1fr); } - .bb-list-ul { - display: grid; - grid-row-gap: 40px; - /* 可选项,设置列之间的间隔 */ } } - -@media (prefers-color-scheme: dark) { - .memos-xiala { - background-color: #282527; } - .memos-xiala .switchUser-btn, .memos-xiala .private-btn, .memos-xiala .oneday-btn, .image-btn, .code-btn { - color: var(--sanji-color); } - .memos-more-ico svg { - color: var(--erji-color); } - .memos-editor-textarea::placeholder { - color: #444; } - .memos-tag-all { - background: #332E2F; } - .memos-tag-sc-2 { - color: var(--erji-color); } - .memos-editor-body { - border: 0.5px solid var(--frame-dark-color); } - .memos-tag-dg { - color: var(--erji-color); } - .memos-tag-sc { - color: #999 !important; - background: #332E2F !important; } - .bb-load button { - background: var(--background-dark-color); } - .memos_diaoyong_from a { - color: var(--sanji-color); } - .memos_diaoyong_time, .memos_diaoyong_laiz a, .memos_diaoyong_more a, .memos_diaoyong_from { - color: var(--erji-color); } - .memos_diaoyong_info p, .memos_diaoyong_info a { - color: var(--text-content-dark-color) !important; } - .talks_comments svg { - color: var(--erji-color); } - .talks_comments svg:hover { - color: var(--sanji-color); } - .datacont pre, blockquote p { - background: #2c2829; } - .datacont pre code { - color: var(--sanji-color); } - .datacont code { - background: #2c2829; - border: 1px solid #2c2829; - color: var(--text-highlight-color); } - blockquote p { - border-left: 4px solid #5f5f5f; - color: #888 !important; } - .memos_diaoyong_info blockquote p { - color: #888 !important; } - .outline svg { - color: var(--erji-color); } - .outline svg:hover { - color: var(--sanji-color); } - .memos-path-input, .memos-token-input { - color: var(--text-content-dark-color) !important; } - .editor-selector select { - color: #666 !important; } - .editor-selector::after { - border-color: #666 transparent transparent transparent; - /* 控制箭头的颜色 */ } - .memos-editor-content .memos-editor-textarea { - color: var(--text-content-dark-color); } - .memos-open-api-submit { - background: #1A1718 !important; - color: var(--text-highlight-color) !important; } - .edit-btn, .archive-btn, .delete-btn, .cancel-edit-btn, .memos-image-list { - color: var(--erji-color); } - .memos-menu-d, .memos-img-edit { - background-color: #282527; } - .cancel-edit-btn { - border: 0.5px solid #201d1e; } - #memos-tag-menu { - background-color: #282527 !important; - box-shadow: 2px 4px 1rem rgba(0, 0, 0, 0.3) !important; - color: #888 !important; } - .tag-option.selected { - background-color: #3e3e3e !important; - color: #bdbdbd !important; } } - -.emoji-selector { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(32px, 1fr)); - gap: 6px; - margin-top: 6px; } - -.emoji-item { - padding: 4px; - font-size: 24px; - line-height: 0.8; - cursor: pointer; - text-align: center; } - -.emoji-item:hover { - opacity: 0.6; } - -#memos-tag-menu { - position: absolute; - background-color: white; - z-index: 100; - padding: 5px; - box-shadow: 2px 4px 1rem rgba(0, 0, 0, 0.15); - color: var(--sanji-color); - border-radius: 4px; - font-size: 0.85rem; - column-count: 3; - /* 每列显示的数量 */ - column-gap: 4; - /* 列之间的间距 */ } - -#memos-tag-menu:empty { - display: none; } - -.tag-option { - padding: 6px 10px 6px 10px; - cursor: pointer; } - -.tag-option:hover { - text-decoration: underline; } - -.tag-option.selected { - background-color: #f0f0f0; - border-radius: 4px; - color: var(--erji-color); } - -.index-laodao { - display: flex; - align-items: center; - margin-bottom: 20px; - gap: 8px; - font-size: 1rem; - color: #999; } - -.index-laodao svg { - color: var(--text-highlight-color); - width: 24px; - height: 24px; } - -.sidebar-biaot { - margin-bottom: 20px; - font-size: 1rem; - color: var(--sanji-color); } - -.sidebar-bowen { - margin-bottom: 40px; } - -.sidebar-posts-title { - margin-top: 4px; - font-family: var(--font-family-title); - font-size: 1.25rem; - line-height: 1.6; } - -.sidebar-posts-title a { - color: var(--text-content-color); } - -.sidebar_article_new { - background: var(--text-highlight-color); - color: #fff; - padding: 2px 4px; - font-family: var(--font-family-code); - border-radius: 2px; - font-size: 0.75rem; - display: inline-block; } - -@media (prefers-color-scheme: dark) { - .sidebar-posts-title a { - color: var(--text-content-dark-color); } - .sidebar-biaot, .index-laodao { - color: var(--erji-color); } } - -.about-img { - position: relative; } - -.about-img img { - width: 100%; } - -.about-img-text { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - color: #fff; - font-family: var(--font-family-code); - font-size: 1.8rem; } - @media (min-width: 700px) { - .about-img-text { - font-size: 55px; } } -.about-text { - margin: 20px 0 20px 0; - line-height: 2; - font-size: 1.05rem; - text-align: justify; } - -.about-text a { - color: var(--text-highlight-color); } - -.about-img-intro { - padding: 8px; - border-radius: 2px; - font-size: 0.75rem; - background: rgba(0, 0, 0, 0.4); - position: absolute; - color: #FFF; - bottom: 0; - right: 0; - margin-bottom: 4px; } - -.posts-new { - display: grid; - gap: 30px; } - @media (min-width: 900px) { - .posts-new { - gap: 40px; } } -.posts-background { - position: relative; - overflow: hidden; } - -.posts-title a { - font-family: var(--font-family-title); - font-size: 1.4rem; - line-height: 1.5; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; } - -.posts-description { - line-height: 1.8; - font-size: 1rem; - margin: 6px 0; - color: var(--erji-color); - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; } - -.posts_list { - display: grid; - gap: 15px; - margin-top: 30px; } - @media (min-width: 900px) { - .posts_list { - display: flex; - flex-wrap: wrap; } } -.posts_list_article { - border-radius: 4px; - background: #fff; - box-shadow: rgba(0, 0, 0, 0.07) 0px 6px 20px 0px; - padding: 15px; } - -.posts-img { - margin: 10px 0; - overflow: hidden; - aspect-ratio: 5.3 / 3; } - -.posts-img img { - width: 100%; - height: 100%; - object-fit: cover; - transition: transform 0.3s ease; } - -.posts-img img:hover { - transform: scale(1.03); } - -.posts-time-new { - display: flex; - align-items: center; - gap: 8px; } - -.archives_nrong { - margin: 30px 0; - display: grid; - grid-gap: 15px; - /* 中间空10px间距 */ - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); } - @media (min-width: 700px) { - .archives_nrong { - grid-gap: 20px; - /* 中间空10px间距 */ } } -.archives_one { - display: flex; - align-items: center; - background: #fff; - box-shadow: rgba(0, 0, 0, 0.07) 0px 6px 20px 0px; - padding: 15px; } - @media (min-width: 700px) { - .archives_one { - grid-gap: 20px; - /* 中间空10px间距 */ } } -.archive-title { - font-family: var(--font-family-title); - font-size: 1rem; - line-height: 1.6; } - -.archive-time { - font-size: 0.85rem; - color: var(--sanji-color); - font-family: var(--font-family-code); } - -.archive-img { - margin-left: auto; } - -.archive-img img { - width: 120px; - aspect-ratio: 4.5 / 3; - object-fit: cover; - border-radius: 6px; - transition: transform 0.3s ease; - margin-left: 10px; } - -.archives_one:hover .archive-img img { - transform: scale(1.05); } - -@media (prefers-color-scheme: dark) { - .archive-time { - color: var(--erji-color); } - .posts_list_article, .archives_one { - background: var(--background-dark-color); } - .posts-description { - color: var(--sanji-color); } } - -.page-tiaozhuan .header, .page-tiaozhuan .footer-background { - display: none; } - -.tiaozhuan-all { - position: relative; - box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px; - border-radius: 10px; - background: #fff url(https://img.koobai.com/tiaozhuanico.webp) no-repeat center center/cover; - color: #666; - word-break: break-all; - max-width: 700px; - height: 350px; - text-align: center; - font-size: 0.85rem; - overflow: hidden; - margin: 100px auto 0; } - @media (min-width: 700px) { - .tiaozhuan-all { - aspect-ratio: 2 / 1; - height: auto; } } -.tiaozhuan-nrong { - position: absolute; - bottom: 0; - left: 0; - right: 0; - padding: 20px 20px 30px 20px; } - -.tiaozhuan-title { - font-size: 1.3rem; - font-family: var(--font-family-title); - color: #222; - line-height: 1.4; - margin-bottom: 4px; } - -.tiaozhuan-info { - margin-top: 6px; } - -.tiaozhuan-button { - margin-top: 20px; } - -.tiaozhuan-button a { - color: var(--text-highlight-color); - border-radius: 4px; - padding: 10px 30px; - font-family: var(--font-family-title); - font-size: 0.85rem; - border: 0.5px solid var(--text-highlight-color); - display: inline-block; } - -@media (prefers-color-scheme: dark) { - .tiaozhuan-all { - background: var(--background-dark-color) url(https://img.koobai.com/tiaozhuandark.webp) no-repeat center center/cover; - color: #acacac; } - .tiaozhuan-title { - color: #ddd; } } - -.command-menu { - border-radius: 1rem; - display: flex; - flex-direction: column; - max-height: 55vh; - width: 340px; - overflow: hidden; - pointer-events: none; - text-align: left; - position: fixed; - bottom: 50%; - left: 50%; - z-index: 999; - opacity: 0; - box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px; - transform: translate3d(-50%, calc(50% + 0.5rem), 0) scale(0.95); - transform-origin: 50% 0; - animation: fadeInOut 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55); - display: none; - background-color: rgba(255, 255, 255, 0.9); - -webkit-backdrop-filter: saturate(140%) blur(20px); - backdrop-filter: saturate(140%) blur(20px); } - -@keyframes fadeInOut { - 0% { - opacity: 0; - transform: translate3d(-50%, calc(50% + 0.5rem), 0) scale(0.95); } - 100% { - opacity: 1; - transform: translate3d(-50%, 50%, 0) scale(1); } } - -.command-menu.visible { - opacity: 1; - transform: translate3d(-50%, 50%, 0) scale(1); } - -.command-menu:not([hidden]) { - opacity: 1; - pointer-events: auto; - transform: translate3d(-50%, 50%, 0) scale(1); } - -.list-reset { - list-style-type: none; - margin-top: 0; - margin-bottom: 0; - padding-left: 0; } - -.group-option-link { - display: block; - border-radius: 0.75rem; - text-decoration: none; - color: var(--erji-color); - width: 100%; - display: flex; - align-items: center; - text-align: center; - gap: 1rem; - font-family: var(--font-family-title); - width: 100%; } - -.group-option-link svg { - color: var(--sanji-color); } - -.group-option a { - text-decoration: none !important; } - -.command-menu-search { - border-radius: 0.75rem 0.75rem 0 0; - border-width: 0; - display: block; - font: inherit; - padding: 1rem 1.5rem; - width: 100%; } - -.command-menu-header { - flex: 0 0 100%; } - -.command-menu-content { - flex: auto; - overflow-y: auto; - scroll-padding-top: 3rem; - scroll-padding-bottom: 3rem; } - -.group { - padding: 0.75rem; } - -.group-label { - display: block; - font-size: 0.85rem; - text-align: center; - color: #9e9e9e; - margin-top: 10px; - margin-bottom: 10px; } - -.command-menu-header { - border-bottom: 1px solid #666666; } - -.command-menu-search { - background-color: transparent; - color: #cccccc; } - -.command-menu-search:focus { - outline: 0; } - -.group-option-link:focus-visible { - outline: 0; } - -.group-option-link:not(:hover):focus { - color: var(--text-content-color); - outline: none; - position: relative; - text-decoration: underline; } - -/*.group-option-link:not(:hover):focus:after { - border-radius: 0.75rem; - content: ''; - display: block; - position: absolute; - inset: 0; -}*/ -.shortcuts { - display: flex; - margin-left: auto; - gap: 8px; - background: #b7b7b7; - border-radius: 6px; } - -kbd { - font-size: .85rem; - width: 14px; - height: 14px; - padding: 4px; - color: #fff; - display: inline-flex; - align-items: center; - justify-content: center; - text-transform: uppercase; - font-family: var(--font-family-code); } - -li.group-option { - display: flex; - align-items: center; - height: 48px; - padding: 0 15px; } - -li.group-option:hover, .command-menu .focused { - background-color: rgba(102, 102, 102, 0.15); - border-radius: 6px; } - -li.group-option:hover a { - color: var(--text-content-color); - text-decoration: none; } - -.kbd-btn { - color: inherit; - gap: 0.25rem; - display: flex; - align-items: center; - opacity: .5; } - -@media (prefers-color-scheme: dark) { - li.group-option:hover, .command-menu .focused { - background-color: rgba(55, 49, 51, 0.6); } - .shortcuts { - background: #393235; } - kbd { - color: #ccc; } - .group-option-link { - color: var(--text-content-dark-color); } - .group-option-link svg { - color: #827478; } - .group-label { - color: #8a8a8a; } - .command-menu { - background-color: rgba(26, 23, 24, 0.6); - box-shadow: 0 0 0 1px #322d2e; } - .group-option-link:not(:hover):focus, li.group-option:hover a { - color: #eee; } } - -#heatmap { - display: none; } - @media (min-width: 900px) { - #heatmap { - width: 700px; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(12px, 1fr)); - margin-bottom: 40px; - gap: 5px; } } -.heatmap_week { - display: flex; - flex-direction: column; - gap: 5px; } - -.heatmap_day { - width: 100%; - height: 13px; - border-radius: 4px; - position: relative; } - -.month { - display: flex; - justify-content: space-between; - /* 将月份平均分布在容器内 */ - margin-bottom: 8px; - font-size: 12px; - color: #999; } - -.month span { - flex: 1; - /* 将月份平均分配可用空间 */ - text-align: center; - /* 文字居中 */ } - -.heatmap_tooltip { - position: absolute; - bottom: 12px; - left: 50%; - width: max-content; - background: #827679; - color: #fff; - font-size: 0.85rem; - padding: 8px; - border-radius: 4px; - white-space: pre-wrap; - opacity: 1; - transition: 0.3s; - z-index: 1000; - transform: translateX(-50%); - gap: 2px; - display: grid; } - -.heatmap_tooltip_title a { - color: #fff; } - -.heatmap_day_level_0 { - background-color: #f1f1f1; } - -.heatmap_day_level_1 { - background-color: #fcdecd; - z-index: 1000; } - -.heatmap_day_level_2 { - background-color: #ffd4bb; - z-index: 1000; } - -.heatmap_day_level_3 { - background-color: #FFBE98; - z-index: 1000; } - -.heatmap_day_level_4 { - background-color: #FC9151; - z-index: 1000; } - -@media (prefers-color-scheme: dark) { - .heatmap_day_level_0 { - background: #252121; } - .heatmap_tooltip { - background: #484043; - color: #eeeeee; } - .heatmap_tooltip_title a { - color: #eeeeee; } - .retu, .month { - color: #666; } - .heatmap_day_level_1 { - background-color: #56311b; } - .heatmap_day_level_2 { - background-color: #7d4626; } - .heatmap_day_level_3 { - background-color: #c87240; } } - -@font-face { - font-family: JetBrainsMono; - font-display: swap; - src: url("https://img.koobai.com/fonts/JetBrainsMono-Regular.woff2") format("woff2"); - unicode-range: U+61-7a,U+41-5a,U+30-39; } - -html, body { - box-sizing: border-box; } - -body { - background: var(--background-color); - font-family: var(--font-family-paragraph); - color: var(--text-content-color); - margin: 0; - padding: 0 20px 0 20px; - overflow-x: hidden; } - @media (min-width: 700px) { - body { - padding: 0 30px 0 30px; } } -.wrapper { - max-width: 700px; - margin: 0 auto; } - -.highlight { - background-color: var(--bankuai-color); } - -::selection { - background: #ffe8da; } - -@media (prefers-color-scheme: dark) { - body { - background: #1A1718; - color: var(--text-content-dark-color); } - p { - color: var(--text-content-dark-color); } - h1, - h2 { - color: #CCCCCC; } - h3 { - color: #FFF; } - a { - color: var(--text-content-dark-color); } - .author { - color: #CCCCCC; } - .summary-date { - color: #AAAAAA; } - .highlight { - background-color: var(--background-dark-color); } - img { - filter: brightness(0.8) contrast(1.2); } - .highlight pre { - background: var(--background-dark-color) !important; } - ::selection { - background: #634939; } } - -@media (min-width: 900px) { - .img-hide, .retu-hide { - opacity: 0; - transform: translateY(6%); - transition: opacity 0.4s ease, transform 0.8s ease; } - .img-hide.visible, .retu-hide.visible { - opacity: 1; - transform: translateY(0); } } - -/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.json b/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.json deleted file mode 100644 index 28c014b0..00000000 --- a/resources/_gen/assets/scss/style.scss_2bbe13cc47075fab4343233ad3e58bb8.json +++ /dev/null @@ -1 +0,0 @@ -{"Target":"css/style.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/themes/Ying/assets/css/main.css b/themes/Ying/assets/css/main.css index 57664a06..34c5f61f 100644 --- a/themes/Ying/assets/css/main.css +++ b/themes/Ying/assets/css/main.css @@ -4994,26 +4994,89 @@ html[data-theme="light"] .atk-loading-spinner svg circle { -/* Lazy Load Animation */ -.lazyload { - opacity: 1; - transform: none; - filter: none; - transition: none; - will-change: auto; +/* Link Card */ +a.link-card { + display: flex; + align-items: center; + gap: 12px; + padding: 12px 16px; + margin: 1rem 0; + border: 1px solid rgba(0, 0, 0, 0.08); + border-radius: 12px; + background: linear-gradient(135deg, rgba(0, 0, 0, 0.015), rgba(0, 0, 0, 0.005)); + text-decoration: none !important; + color: #1e1e1e; + font-size: 14px; + line-height: 1.5; + max-width: 100%; + transition: all 0.2s ease; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04); } - -.lazyload.lazy-loaded { - opacity: 1; - transform: none; - filter: none; +a.link-card:hover { + border-color: rgba(0, 0, 0, 0.15); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); + transform: translateY(-1px); + text-decoration: none !important; } - -[data-theme="dark"] .ai-comment-card .atk-content p { - color: var(--text-content-dark-color); +.link-card-icon { + width: 24px; + height: 24px; + border-radius: 5px; + flex-shrink: 0; + object-fit: contain; +} +.link-card-body { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 1px; +} +.link-card-title { + font-weight: 500; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 13.5px; + color: rgba(30, 30, 30, 0.92); +} +.link-card-url { + font-size: 11px; + color: rgba(30, 30, 30, 0.45); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.link-card-arrow { + flex-shrink: 0; + color: rgba(30, 30, 30, 0.3); + font-size: 13px; + transition: color 0.2s; +} +a.link-card:hover .link-card-arrow { + color: rgba(30, 30, 30, 0.6); +} +[data-theme="dark"] a.link-card { + border-color: rgba(148, 163, 184, 0.15); + background: linear-gradient(135deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.5)); + color: #e2e8f0; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); +} +[data-theme="dark"] a.link-card:hover { + border-color: rgba(148, 163, 184, 0.3); +} +[data-theme="dark"] .link-card-title { + color: rgba(226, 232, 240, 0.96); +} +[data-theme="dark"] .link-card-url { + color: rgba(226, 232, 240, 0.4); +} +[data-theme="dark"] .link-card-arrow { + color: rgba(226, 232, 240, 0.3); +} +[data-theme="dark"] a.link-card:hover .link-card-arrow { + color: rgba(226, 232, 240, 0.6); } - - /* Reward System */ .reward-container { @@ -5168,39 +5231,28 @@ html[data-theme="light"] .atk-loading-spinner svg circle { display: flex; flex-direction: column; align-items: center; - gap: 12px; + gap: 10px; } - .reward-qr-img-wrapper { - width: 160px; - height: 160px; - background: rgba(255,255,255,0.5); - border-radius: 16px; + width: 180px; + height: 180px; + border-radius: 12px; overflow: hidden; - padding: 10px; - /* border: 1px solid rgba(0,0,0,0.05); */ - transition: transform 0.3s ease; + border: 2px solid var(--line); + transition: transform 0.3s ease, box-shadow 0.3s ease; + background: #fff; } - -.reward-qr-img-wrapper:hover { - transform: translateY(-5px); -} - -[data-theme='dark'] .reward-qr-img-wrapper { - background: rgba(255,255,255,0.05); - border-color: rgba(255,255,255,0.1); -} - -.reward-qr-item img { +.reward-qr-img-wrapper img { width: 100%; height: 100%; - object-fit: contain; - display: block; - border-radius: 8px; + object-fit: cover; +} +.reward-qr-img-wrapper:hover { + transform: translateY(-5px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); } - .reward-qr-item span { - font-size: 0.9rem; + font-size: 14px; color: #666; font-weight: 500; } @@ -5219,34 +5271,19 @@ html[data-theme="light"] .atk-loading-spinner svg circle { .reward-qr-group { gap: 15px; } - - .reward-qr-img-wrapper { - width: 120px; - height: 120px; - } - - .reward-title { - font-size: 1.1rem; - margin-bottom: 20px; - } } - - -/* Dark Mode Background Mask */ -body { - position: relative; +/* Post Video */ +.post-video { + display: block; + max-width: 100%; + margin: 1rem 0; + border-radius: 12px; + border: 1px solid rgba(0, 0, 0, 0.08); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06); + background: #000; } - -[data-theme='dark'] body::before { - content: ''; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.4); - z-index: -1; - pointer-events: none; - transition: background 0.3s ease; +[data-theme="dark"] .post-video { + border-color: rgba(148, 163, 184, 0.15); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); } diff --git a/themes/Ying/assets/js/modules/linkify.js b/themes/Ying/assets/js/modules/linkify.js new file mode 100644 index 00000000..99ffc6f0 --- /dev/null +++ b/themes/Ying/assets/js/modules/linkify.js @@ -0,0 +1,83 @@ +// linkify.js - Convert bare URLs to link cards, video URLs to players +(function() { + var URL_RE = /(https?:\/\/[^\s一-鿿 -〿＀-￯<>"')\]]+)/g; + var VIDEO_RE = /\.(mp4|webm|ogg|mov)(\?|$)/i; + var FAVICON_API = 'https://api.usj.cc/api/favicon?url='; + + function getDomain(url) { + try { return new URL(url).hostname; } catch (e) { return url; } + } + + function makeVideo(url) { + var video = document.createElement('video'); + video.className = 'post-video'; + video.controls = true; + video.preload = 'metadata'; + video.playsInline = true; + var source = document.createElement('source'); + source.src = url; + video.appendChild(source); + return video; + } + + function makeCard(url) { + var domain = getDomain(url); + var card = document.createElement('a'); + card.className = 'link-card'; + card.href = '/tiaozhuan.html?target=' + btoa(url); + card.target = '_blank'; + card.rel = 'noopener'; + card.innerHTML = '' + + '' + domain + '' + + '' + url + '' + + '↗'; + return card; + } + + function linkify(root) { + var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false); + var textNodes = []; + while (walker.nextNode()) { + var node = walker.currentNode; + if (node.parentElement && node.parentElement.closest('a, .link-card, code, pre, video')) continue; + if (URL_RE.test(node.textContent)) textNodes.push(node); + } + + textNodes.forEach(function(node) { + URL_RE.lastIndex = 0; + var text = node.textContent; + var parts = []; + var lastIdx = 0; + var match; + while ((match = URL_RE.exec(text)) !== null) { + if (match.index > lastIdx) { + parts.push(document.createTextNode(text.slice(lastIdx, match.index))); + } + if (VIDEO_RE.test(match[1])) { + parts.push(makeVideo(match[1])); + } else { + parts.push(makeCard(match[1])); + } + lastIdx = match.index + match[0].length; + } + if (parts.length === 0) return; + if (lastIdx < text.length) { + parts.push(document.createTextNode(text.slice(lastIdx))); + } + var frag = document.createDocumentFragment(); + parts.forEach(function(p) { frag.appendChild(p); }); + node.parentNode.replaceChild(frag, node); + }); + } + + function run() { + var content = document.querySelector('.post-content'); + if (content) linkify(content); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', run); + } else { + run(); + } +})(); diff --git a/themes/Ying/layouts/_default/_markup/render-link.html b/themes/Ying/layouts/_default/_markup/render-link.html index d640ca14..6d07bc1a 100644 --- a/themes/Ying/layouts/_default/_markup/render-link.html +++ b/themes/Ying/layouts/_default/_markup/render-link.html @@ -1,10 +1,35 @@ {{ $url := .Destination }} - -{{ .Text | safeHTML }} \ No newline at end of file +{{ $isExternal := strings.HasPrefix $url "http" }} +{{ $isBareUrl := eq .Text .Destination }} +{{ $displayText := .Text }} +{{ $isVideo := or (strings.HasSuffix $url ".mp4") (strings.HasSuffix $url ".webm") (strings.HasSuffix $url ".ogg") (strings.HasSuffix $url ".mov") }} + +{{- if $isVideo -}} + +{{- else if $isExternal -}} +{{- $domain := urls.Parse $url -}} +{{- $faviconUrl := printf "https://api.usj.cc/api/favicon?url=%s" $domain.Host -}} +{{- if $isBareUrl -}} + + + + {{ $domain.Host }} + {{ $url }} + + ↗ + +{{- else -}} + + + + {{ $displayText }} + {{ $domain.Host }} + + ↗ + +{{- end -}} +{{- else -}} +{{ $displayText | safeHTML }} +{{- end -}} diff --git a/themes/Ying/layouts/_default/single.html b/themes/Ying/layouts/_default/single.html index 05bae32f..f81f1947 100644 --- a/themes/Ying/layouts/_default/single.html +++ b/themes/Ying/layouts/_default/single.html @@ -20,10 +20,25 @@ -
+
{{ .Content }}
+ +
diff --git a/themes/Ying/layouts/partials/footer.html b/themes/Ying/layouts/partials/footer.html index d2512a81..b5772114 100644 --- a/themes/Ying/layouts/partials/footer.html +++ b/themes/Ying/layouts/partials/footer.html @@ -67,8 +67,9 @@ {{ $infiniteScroll := resources.Get "js/modules/infinite-scroll.js" }} {{ $artalkModule := resources.Get "js/modules/artalk.js" }} {{ $pjaxLib := resources.Get "js/libs/pjax.js" }} +{{ $linkify := resources.Get "js/modules/linkify.js" }} -{{ $scripts := slice $iconfont $uikit $easylazyload $viewimage $utils $loader $cache $search $floatingTools $paragraphComments $infiniteScroll $artalkModule $nprogress $pjaxLib $main $mypjax $toast $tiaozhuan $reward | resources.Concat "js/bundle.js" | resources.Minify | resources.Fingerprint }} +{{ $scripts := slice $iconfont $uikit $easylazyload $viewimage $utils $loader $cache $search $floatingTools $paragraphComments $infiniteScroll $artalkModule $nprogress $pjaxLib $linkify $main $mypjax $toast $tiaozhuan $reward | resources.Concat "js/bundle.js" | resources.Minify | resources.Fingerprint }} {{ $aiGreetings := "static/js/ai_greetings.js" }} {{ if os.FileExists $aiGreetings }}