<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>博客 on 老刘博客</title>
    <link>https://www.iliu.org/tags/%E5%8D%9A%E5%AE%A2/</link>
    <description>Recent content in 博客 on 老刘博客</description>
    <image>
      <title>老刘博客</title>
      <url>https://www.iliu.org/img/liujinsuiyue.jpg</url>
      <link>https://www.iliu.org/img/liujinsuiyue.jpg</link>
    </image>
    <generator>Hugo -- 0.147.5</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 04 Jan 2026 18:01:08 +0800</lastBuildDate>
    <atom:link href="https://www.iliu.org/tags/%E5%8D%9A%E5%AE%A2/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>博客托管平台换成edgeone pages</title>
      <link>https://www.iliu.org/posts/migrated-my-blog-to-edgeone-pages/</link>
      <pubDate>Sun, 04 Jan 2026 18:01:08 +0800</pubDate>
      <guid>https://www.iliu.org/posts/migrated-my-blog-to-edgeone-pages/</guid>
      <description>&lt;p&gt;作为个人博主，Cloudflare 被称为赛博菩萨：免费 CDN、自动 SSL、无限流量。但对于中国大陆用户来说，CF 的免费版线路对联通用户来说非常的不友好——动辄 300ms+ 的延迟和高峰期的丢包，让“全球加速”变成了“全球减速”。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>作为个人博主，Cloudflare 被称为赛博菩萨：免费 CDN、自动 SSL、无限流量。但对于中国大陆用户来说，CF 的免费版线路对联通用户来说非常的不友好——动辄 300ms+ 的延迟和高峰期的丢包，让“全球加速”变成了“全球减速”。</p>
<p>前两天看到1900把博客迁移到了Edgeone，速度很快，我的博客没有备案，看了下可以使用海外版，测试了一下，发现要比cf快一些，于是决定把博客从 Cloudflare 迁移了过去。</p>
<h2 id="为什么选择-edgeone-pages">为什么选择 EdgeOne Pages？</h2>
<p>虽然 EdgeOne 的 Pages 功能在目前也主要使用海外节点，但实际体验下来，它在亚洲地区的路由优化明显优于 Cloudflare 的 pages。</p>
<h3 id="延迟表现从红爆到稳住">延迟表现：从“红爆”到“稳住”</h3>
<ul>
<li><strong>Cloudflare</strong>：联通线路经常在晚高峰时期，Ping 常跳到 800ms 以上。</li>
<li><strong>EdgeOne</strong>：同样是海外线路，EdgeOne 的 Anycast 策略似乎更懂中国开发者。实测联通和移动的延迟基本稳定在 <strong>200ms 左右</strong>。虽然比不上内地的“极速”，但相比 CF 的已经有了质的区别。</li>
</ul>
<h3 id="部署体验平替-cloudflare">部署体验：平替 Cloudflare</h3>
<p>EdgeOne Pages 的逻辑与 CF Pages 基本差不多，所以迁移成本几乎为零：</p>
<ul>
<li><strong>GitHub 集成</strong>：直接关联仓库，代码推送到指定分支即可触发全量构建。</li>
<li><strong>自动化部署</strong>：支持常见的静态网站框架（Hexo, Hugo, VitePress 等）。</li>
<li><strong>域名绑定</strong>：支持自定义域名，并自动签发免费的 SSL 证书。
由于我的博客是在本地生成了html，所以，1900遇到的那些坑，我一个都没有遇到</li>
</ul>
<hr>
<h2 id="迁移流程详解">迁移流程详解</h2>
<p>整个迁移过程非常丝滑，三步搞定：</p>
<h3 id="第一步开通-pages">第一步：开通 Pages</h3>
<p>登录腾讯云 EdgeOne 控制台，在左侧菜单栏找到 <strong>“Pages”</strong></p>
<h3 id="第二步关联-github-项目">第二步：关联 GitHub 项目</h3>
<p>授权 GitHub 账号后，选择你的博客仓库。</p>
<h3 id="第三步绑定域名">第三步：绑定域名</h3>
<p>部署完成后，你会得到一个边缘域名。直接绑定你自己的域名，并在 DNS 服务商处将 CNAME 指向 EdgeOne 提供的地址即可。</p>
<hr>
<h2 id="总结">总结</h2>
<p>这次迁移最大的感受是：<strong>选对路由比选大厂更重要。</strong> EdgeOne Pages 弥补了 Cloudflare 在国内部分运营商环境下“由于链路过长导致访问缓慢”的痛点。如果你也受够了 CF 联通线路的拉跨，不妨试试这个新选择。</p>
]]></content:encoded>
    </item>
    <item>
      <title>博客评论换回Giscus</title>
      <link>https://www.iliu.org/posts/back-to-giscus/</link>
      <pubDate>Tue, 30 Dec 2025 11:31:56 +0800</pubDate>
      <guid>https://www.iliu.org/posts/back-to-giscus/</guid>
      <description>&lt;p&gt;前几天，老张他们几个人一直吐槽，说想留言还得翻墙登录 GitHub。听多了，我也动了心思，就去折腾了一下 Artalk，把博客的评论系统换了过去。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>前几天，老张他们几个人一直吐槽，说想留言还得翻墙登录 GitHub。听多了，我也动了心思，就去折腾了一下 Artalk，把博客的评论系统换了过去。</p>
<p>不得不说，Artalk 用起来确实舒服。界面清爽，也更像我们习惯的那种“博客评论”，不用账号体系，不用跳来跳去，交流起来顺手很多。</p>
<p>我用的这台VPS，本来就只是随手用来跑点轻量服务：FreshRSS、Umami，再加一个 Artalk。前两天瞎折腾系统的时候，一个不小心，把服务给折腾挂了。</p>
<p>更糟的是——
没备份。</p>
<p>于是结果也就很自然了：
FreshRSS 的数据没了，Umami 的统计没了，Artalk 里的评论，也一起消失了。</p>
<hr>
<p>Artalk 并不差，甚至可以说比较完美：
它把“数据安全”这件事完全交给了使用者自己。</p>
<p>使用者需要考虑：</p>
<ul>
<li>
<p>VPS 是否稳定</p>
</li>
<li>
<p>是否做了定期备份</p>
</li>
<li>
<p>备份是否真的可恢复</p>
</li>
<li>
<p>迁移、重装、误操作怎么办</p>
</li>
</ul>
<p>对爱折腾的人来说，这些都是“可以接受的成本”；
但对一个只是想安安静静写点东西的博客来说，这些成本其实非常高。</p>
<p>尤其是评论这种东西——
它不是核心内容，却往往承载着读者的痕迹与交流，一旦丢了，有时候感觉比文章丢了还让人难受。</p>
<hr>
<p>所以兜兜转转，我又把评论系统换回了 Giscus。</p>
<p>它不完美：
要 GitHub 登录，对不少人不友好；
国内访问也谈不上顺畅；
用起来多少有点“技术味”。</p>
<p>但它有一个很现实的优点——省心。</p>
<p>评论直接存在 GitHub 仓库里，不用我操心数据库，不用备份，也不怕哪天手滑把服务器玩坏。只要 GitHub 还在，这些内容大概率就还在。</p>
<p>对我这种一边写博客，一边又总忍不住折腾系统的人来说，这一点反而显得特别重要。</p>
<hr>
<p>这次折腾完，反倒更清楚了一件事：</p>
<p>越“自由”的方案，其实越吃精力；
越省事的方案，往往是把控制权交出去。</p>
<p>Artalk 是自由的，Giscus 是妥协的。
但对现在的我来说，这种妥协是可以接受的。</p>
<p>博客这东西，说到底是个慢活。
能一直写下去，比用什么技术更重要。</p>
<p>所以，评论系统又换回来了。
也许以后还会再折腾，但至少这一次，我想让它先安静地用一段时间。</p>
]]></content:encoded>
    </item>
    <item>
      <title>把GotoSocial嵌入到Hugo</title>
      <link>https://www.iliu.org/posts/embedding-gotosocial-in-a-hugo-blog/</link>
      <pubDate>Tue, 21 Oct 2025 11:10:32 +0800</pubDate>
      <guid>https://www.iliu.org/posts/embedding-gotosocial-in-a-hugo-blog/</guid>
      <description>&lt;p&gt;把博客重新换成Hugo后，我又把GotoSocial安装了起来，就是想发布自己有一些碎语之类的东西，在memos和GotoSocial中纠结了一会，最终选择了GotoSocial，主要原因还是看到memeos的作者随意改动API，为了以后不再有不必要的麻烦，还是选择一个更稳定的最好。整体完成后的效果可以参考：&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>把博客重新换成Hugo后，我又把GotoSocial安装了起来，就是想发布自己有一些碎语之类的东西，在memos和GotoSocial中纠结了一会，最终选择了GotoSocial，主要原因还是看到memeos的作者随意改动API，为了以后不再有不必要的麻烦，还是选择一个更稳定的最好。整体完成后的效果可以参考：</p>
<p><a href="http://iliu.org/toots">我的微博</a></p>
<h2 id="总体思路">总体思路</h2>
<p>由于 GoToSocial 默认开启了严格的 CORS 限制，获取内容的时候需要token，由于Hugo是静态博客，直接把token写在前端非常不安全，所以我们需要一个中转层。
Cloudflare Workers 可以完美胜任代理转发的功能，作用是：</p>
<ul>
<li>从 Hugo 前端发请求 → Cloudflare Worker</li>
<li>Worker 向 https://你的域名/api/v1/accounts/&hellip;/statuses 请求 GoToSocial 数据</li>
<li>Worker 再把 JSON 数据返回给 Hugo 前端</li>
<li>Hugo 构建时渲染</li>
</ul>
<h2 id="获取-gotosocial-的-toot-api-接口">获取 GoToSocial 的 toot API 接口</h2>
<h3 id="目标概述">目标概述</h3>
<p>我们要：</p>
<ol>
<li>向 https://你的域名/api/v1/apps 注册一个应用；</li>
<li>通过浏览器授权；</li>
<li>用授权码换取 access_token；</li>
<li>把这个 token 放入 Cloudflare Worker 的环境变量；</li>
<li>然后 Hugo 博客就能安全地从 Worker 获取嘟文数据。</li>
</ol>
<h3 id="详细步骤">详细步骤</h3>
<h4 id="注册一个新应用">注册一个新应用</h4>
<p>在命令行执行以下命令（用 curl，别忘了改你的 app 名称）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -X POST <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -H <span class="s2">&#34;Content-Type: application/json&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -d <span class="s1">&#39;{
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;client_name&#34;: &#34;hugo-gts-proxy&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;redirect_uris&#34;: &#34;urn:ietf:wg:oauth:2.0:oob&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;scopes&#34;: &#34;read&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">      }&#39;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="s1">&#39;https://你的域名/api/v1/apps&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>成功后会返回类似：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;01J1CYJ4QRNFZD6WHQMZV7248G&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;hugo-gts-proxy&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;redirect_uri&#34;</span><span class="p">:</span> <span class="s2">&#34;urn:ietf:wg:oauth:2.0:oob&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;client_id&#34;</span><span class="p">:</span> <span class="s2">&#34;xxxxxxxxxxxxxxxx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;client_secret&#34;</span><span class="p">:</span> <span class="s2">&#34;yyyyyyyyyyyyyyyy&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>👉 复制并保存 client_id 与 client_secret。</p>
<h4 id="获取授权码">获取授权码</h4>
<p>打开浏览器访问以下链接（注意替换 YOUR_CLIENT_ID）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">https://你的域名/oauth/authorize?client_id=YOUR_CLIENT_ID&amp;redirect_uri=urn:ietf:wg:oauth:2.0:oob&amp;response_type=code&amp;scope=read
</span></span></code></pre></td></tr></table>
</div>
</div><p>系统会要求你登录并授权。
点击「允许」，你会看到页面上出现：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Here&#39;s your out-of-band token:
</span></span><span class="line"><span class="cl">YOUR_AUTHORIZATION_CODE
</span></span></code></pre></td></tr></table>
</div>
</div><p>👉 复制这个 YOUR_AUTHORIZATION_CODE。</p>
<h4 id="用授权码换取访问令牌">用授权码换取访问令牌</h4>
<p>然后在命令行执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -X POST <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -H <span class="s2">&#34;Content-Type: application/json&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -d <span class="s1">&#39;{
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;redirect_uri&#34;: &#34;urn:ietf:wg:oauth:2.0:oob&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;client_id&#34;: &#34;YOUR_CLIENT_ID&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;client_secret&#34;: &#34;YOUR_CLIENT_SECRET&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;grant_type&#34;: &#34;authorization_code&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;code&#34;: &#34;YOUR_AUTHORIZATION_CODE&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">      }&#39;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="s1">&#39;https://你的域名/oauth/token&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>会返回类似：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;access_token&#34;</span><span class="p">:</span> <span class="s2">&#34;YOUR_ACCESS_TOKEN&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;created_at&#34;</span><span class="p">:</span> <span class="mi">1729436650</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;scope&#34;</span><span class="p">:</span> <span class="s2">&#34;read&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;token_type&#34;</span><span class="p">:</span> <span class="s2">&#34;Bearer&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>🎉 这就是我们需要的 access_token！</p>
<h4 id="验证-token-是否可用">验证 token 是否可用</h4>
<p>试试看：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -H <span class="s2">&#34;Authorization: Bearer YOUR_ACCESS_TOKEN&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="s1">&#39;https://你的域名/api/v1/accounts/verify_credentials&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果返回你的用户资料（ username, id, url 等），说明 token 有效 。</p>
<h2 id="cloudflare-worker的设置">Cloudflare Worker的设置</h2>
<p>接下来打开 Cloudflare → Workers → 你的 Worker →
「Settings」→「Variables」→「Add Variable」</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Name: GTS_TOKEN
</span></span><span class="line"><span class="cl">Value: YOUR_ACCESS_TOKEN
</span></span></code></pre></td></tr></table>
</div>
</div><p>保存。
Worker 代码示例如下 👇：</p>
<details>
<summary>点击展开查看完整的配置代码（大约 160 行）</summary>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">async</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">request</span><span class="p">,</span> <span class="nx">env</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">url</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">URL</span><span class="p">(</span><span class="nx">request</span><span class="p">.</span><span class="nx">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">headers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Origin&#34;</span><span class="o">:</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Methods&#34;</span><span class="o">:</span> <span class="s2">&#34;GET, OPTIONS&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Headers&#34;</span><span class="o">:</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">request</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s2">&#34;OPTIONS&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="p">{</span> <span class="nx">headers</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">target</span> <span class="o">=</span> <span class="sb">`https://你的域名</span><span class="si">${</span><span class="nx">url</span><span class="p">.</span><span class="nx">pathname</span><span class="si">}${</span><span class="nx">url</span><span class="p">.</span><span class="nx">search</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">resp</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">target</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Authorization&#34;</span><span class="o">:</span> <span class="s2">&#34;Bearer &#34;</span> <span class="o">+</span> <span class="nx">env</span><span class="p">.</span><span class="nx">GTS_TOKEN</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;User-Agent&#34;</span><span class="o">:</span> <span class="s2">&#34;GTS-Proxy-Worker&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">resp</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="kr">await</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">text</span><span class="p">(),</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">status</span><span class="o">:</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">status</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="p">...</span><span class="nx">headers</span><span class="p">,</span> <span class="s2">&#34;Content-Type&#34;</span><span class="o">:</span> <span class="s2">&#34;application/json&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="nx">细步骤</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// 并行拉取每条嘟文的回复
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="kr">const</span> <span class="nx">statuses</span> <span class="o">=</span> <span class="kr">await</span> <span class="nb">Promise</span><span class="p">.</span><span class="nx">all</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="kr">async</span> <span class="p">(</span><span class="nx">status</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="kd">let</span> <span class="nx">replies</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">      <span class="k">try</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kr">const</span> <span class="nx">ctx</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="sb">`https://你的域名/api/v1/statuses/</span><span class="si">${</span><span class="nx">status</span><span class="p">.</span><span class="nx">id</span><span class="si">}</span><span class="sb">/context`</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="s2">&#34;Authorization&#34;</span><span class="o">:</span> <span class="s2">&#34;Bearer &#34;</span> <span class="o">+</span> <span class="nx">env</span><span class="p">.</span><span class="nx">GTS_TOKEN</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="p">});</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">ctx</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="kr">const</span> <span class="nx">contextData</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">ctx</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">          <span class="nx">replies</span> <span class="o">=</span> <span class="nx">contextData</span><span class="o">?</span><span class="p">.</span><span class="nx">descendants</span><span class="o">?</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">r</span> <span class="p">=&gt;</span> <span class="p">({</span>
</span></span><span class="line"><span class="cl">            <span class="nx">id</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nx">content</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">content</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nx">account</span><span class="o">:</span> <span class="p">{</span><span class="o">&lt;</span><span class="nx">details</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;</span><span class="nx">summary</span><span class="o">&gt;</span><span class="nx">点击展开查看完整的配置代码</span><span class="err">（</span><span class="nx">大约</span> <span class="mi">100</span> <span class="nx">行</span><span class="err">）</span><span class="o">&lt;</span><span class="err">/summary&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="nx">username</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">              <span class="nx">display_name</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">              <span class="nx">avatar完全正确</span> <span class="err">✅</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">          <span class="p">}))</span> <span class="o">||</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;Reply fetch failed:&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">id</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">created_at</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">created_at</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">content</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">content</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">url</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">account</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nx">username</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">display_name</span><span class="o">:</span> <span class="nx">statuexport</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">async</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">request</span><span class="p">,</span> <span class="nx">env</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">url</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">URL</span><span class="p">(</span><span class="nx">request</span><span class="p">.</span><span class="nx">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">headers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Origin&#34;</span><span class="o">:</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Methods&#34;</span><span class="o">:</span> <span class="s2">&#34;GET, OPTIONS&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Access-Control-Allow-Headers&#34;</span><span class="o">:</span> <span class="s2">&#34;*&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">request</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s2">&#34;OPTIONS&#34;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="p">{</span> <span class="nx">headers</span> <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">target</span> <span class="o">=</span> <span class="sb">`https://l22.org</span><span class="si">${</span><span class="nx">url</span><span class="p">.</span><span class="nx">pathname</span><span class="si">}${</span><span class="nx">url</span><span class="p">.</span><span class="nx">search</span><span class="si">}</span><span class="sb">`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">resp</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">target</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Authorization&#34;</span><span class="o">:</span> <span class="s2">&#34;Bearer &#34;</span> <span class="o">+</span> <span class="nx">env</span><span class="p">.</span><span class="nx">GTS_TOKEN</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;User-Agent&#34;</span><span class="o">:</span> <span class="s2">&#34;GTS-Proxy-Worker&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">resp</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="kr">await</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">text</span><span class="p">(),</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">status</span><span class="o">:</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">status</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="p">...</span><span class="nx">headers</span><span class="p">,</span> <span class="s2">&#34;Content-Type&#34;</span><span class="o">:</span> <span class="s2">&#34;application/json&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">resp</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// 并行拉取每条嘟文的回复
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="kr">const</span> <span class="nx">statuses</span> <span class="o">=</span> <span class="kr">await</span> <span class="nb">Promise</span><span class="p">.</span><span class="nx">all</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="kr">async</span> <span class="p">(</span><span class="nx">status</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="kd">let</span> <span class="nx">replies</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">      <span class="k">try</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kr">const</span> <span class="nx">ctx</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="sb">`https://l22.org/api/v1/statuses/</span><span class="si">${</span><span class="nx">status</span><span class="p">.</span><span class="nx">id</span><span class="si">}</span><span class="sb">/context`</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="s2">&#34;Authorization&#34;</span><span class="o">:</span> <span class="s2">&#34;Bearer &#34;</span> <span class="o">+</span> <span class="nx">env</span><span class="p">.</span><span class="nx">GTS_TOKEN</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="p">});</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="nx">ctx</span><span class="p">.</span><span class="nx">ok</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="kr">const</span> <span class="nx">contextData</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">ctx</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">          <span class="nx">replies</span> <span class="o">=</span> <span class="nx">contextData</span><span class="o">?</span><span class="p">.</span><span class="nx">descendants</span><span class="o">?</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">r</span> <span class="p">=&gt;</span> <span class="p">({</span>
</span></span><span class="line"><span class="cl">            <span class="nx">id</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nx">content</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">content</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nx">account</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">              <span class="nx">username</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">              <span class="nx">display_name</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">              <span class="nx">avatar</span><span class="o">:</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">          <span class="p">}))</span> <span class="o">||</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&#34;Reply fetch failed:&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">id</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">created_at</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">created_at</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">content</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">content</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">url</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">account</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nx">username</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">display_name</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">avatar</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nx">replies_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">replies_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">reblogs_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">reblogs_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">favourites_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">favourites_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">media_attachments</span><span class="o">:</span> <span class="p">(</span><span class="nx">status</span><span class="p">.</span><span class="nx">media_attachments</span> <span class="o">||</span> <span class="p">[]).</span><span class="nx">map</span><span class="p">(</span><span class="nx">media</span> <span class="p">=&gt;</span> <span class="p">({</span>
</span></span><span class="line"><span class="cl">          <span class="nx">url</span><span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span><span class="o">?</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="s2">&#34;/&#34;</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&#34;https://域名&#34;</span> <span class="o">+</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span> <span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">preview_url</span><span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span><span class="o">?</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="s2">&#34;/&#34;</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&#34;https://域名&#34;</span> <span class="o">+</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span> <span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">})),</span>
</span></span><span class="line"><span class="cl">        <span class="nx">replies</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">}));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">statuses</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="p">...</span><span class="nx">headers</span><span class="p">,</span> <span class="s2">&#34;Content-Type&#34;</span><span class="o">:</span> <span class="s2">&#34;application/json&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span><span class="o">&lt;</span><span class="err">/details&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nx">s</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">avatar</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nx">replies_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">replies_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">reblogs_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">reblogs_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">favourites_count</span><span class="o">:</span> <span class="nx">status</span><span class="p">.</span><span class="nx">favourites_count</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">media_attachments</span><span class="o">:</span> <span class="p">(</span><span class="nx">status</span><span class="p">.</span><span class="nx">media_attachments</span> <span class="o">||</span> <span class="p">[]).</span><span class="nx">map</span><span class="p">(</span><span class="nx">media</span> <span class="p">=&gt;</span> <span class="p">({</span>
</span></span><span class="line"><span class="cl">          <span class="nx">url</span><span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span><span class="o">?</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="s2">&#34;/&#34;</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&#34;https://你的域名&#34;</span> <span class="o">+</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span> <span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nx">preview_url</span><span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span><span class="o">?</span><span class="p">.</span><span class="nx">startsWith</span><span class="p">(</span><span class="s2">&#34;/&#34;</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&#34;https://你的域名&#34;</span> <span class="o">+</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span> <span class="o">:</span> <span class="nx">media</span><span class="p">.</span><span class="nx">preview_url</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">})),</span>
</span></span><span class="line"><span class="cl">        <span class="nx">replies</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">}));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">new</span> <span class="nx">Response</span><span class="p">(</span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">statuses</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">headers</span><span class="o">:</span> <span class="p">{</span> <span class="p">...</span><span class="nx">headers</span><span class="p">,</span> <span class="s2">&#34;Content-Type&#34;</span><span class="o">:</span> <span class="s2">&#34;application/json&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></td></tr></table>
</div>
</div></details>
<h3 id="hugo模板设置">Hugo模板设置</h3>
<p>在 Hugo 博客根目录下，新建：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">content/toots/_index.md
</span></span><span class="line"><span class="cl">layouts/_default/toots.html
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="-contenttoots_indexmd">📄 content/toots/_index.md</h4>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">title: &#34;我的嘟文&#34;
</span></span><span class="line"><span class="cl">description: &#34;来自 GoToSocial 的最新动态&#34;
</span></span><span class="line"><span class="cl">---
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="-layouts_defaulttootshtml">🧩 layouts/_default/toots.html</h4>
<details>
<summary>点击展开查看完整的配置代码（大约 280 行）</summary>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span><span class="lnt">113
</span><span class="lnt">114
</span><span class="lnt">115
</span><span class="lnt">116
</span><span class="lnt">117
</span><span class="lnt">118
</span><span class="lnt">119
</span><span class="lnt">120
</span><span class="lnt">121
</span><span class="lnt">122
</span><span class="lnt">123
</span><span class="lnt">124
</span><span class="lnt">125
</span><span class="lnt">126
</span><span class="lnt">127
</span><span class="lnt">128
</span><span class="lnt">129
</span><span class="lnt">130
</span><span class="lnt">131
</span><span class="lnt">132
</span><span class="lnt">133
</span><span class="lnt">134
</span><span class="lnt">135
</span><span class="lnt">136
</span><span class="lnt">137
</span><span class="lnt">138
</span><span class="lnt">139
</span><span class="lnt">140
</span><span class="lnt">141
</span><span class="lnt">142
</span><span class="lnt">143
</span><span class="lnt">144
</span><span class="lnt">145
</span><span class="lnt">146
</span><span class="lnt">147
</span><span class="lnt">148
</span><span class="lnt">149
</span><span class="lnt">150
</span><span class="lnt">151
</span><span class="lnt">152
</span><span class="lnt">153
</span><span class="lnt">154
</span><span class="lnt">155
</span><span class="lnt">156
</span><span class="lnt">157
</span><span class="lnt">158
</span><span class="lnt">159
</span><span class="lnt">160
</span><span class="lnt">161
</span><span class="lnt">162
</span><span class="lnt">163
</span><span class="lnt">164
</span><span class="lnt">165
</span><span class="lnt">166
</span><span class="lnt">167
</span><span class="lnt">168
</span><span class="lnt">169
</span><span class="lnt">170
</span><span class="lnt">171
</span><span class="lnt">172
</span><span class="lnt">173
</span><span class="lnt">174
</span><span class="lnt">175
</span><span class="lnt">176
</span><span class="lnt">177
</span><span class="lnt">178
</span><span class="lnt">179
</span><span class="lnt">180
</span><span class="lnt">181
</span><span class="lnt">182
</span><span class="lnt">183
</span><span class="lnt">184
</span><span class="lnt">185
</span><span class="lnt">186
</span><span class="lnt">187
</span><span class="lnt">188
</span><span class="lnt">189
</span><span class="lnt">190
</span><span class="lnt">191
</span><span class="lnt">192
</span><span class="lnt">193
</span><span class="lnt">194
</span><span class="lnt">195
</span><span class="lnt">196
</span><span class="lnt">197
</span><span class="lnt">198
</span><span class="lnt">199
</span><span class="lnt">200
</span><span class="lnt">201
</span><span class="lnt">202
</span><span class="lnt">203
</span><span class="lnt">204
</span><span class="lnt">205
</span><span class="lnt">206
</span><span class="lnt">207
</span><span class="lnt">208
</span><span class="lnt">209
</span><span class="lnt">210
</span><span class="lnt">211
</span><span class="lnt">212
</span><span class="lnt">213
</span><span class="lnt">214
</span><span class="lnt">215
</span><span class="lnt">216
</span><span class="lnt">217
</span><span class="lnt">218
</span><span class="lnt">219
</span><span class="lnt">220
</span><span class="lnt">221
</span><span class="lnt">222
</span><span class="lnt">223
</span><span class="lnt">224
</span><span class="lnt">225
</span><span class="lnt">226
</span><span class="lnt">227
</span><span class="lnt">228
</span><span class="lnt">229
</span><span class="lnt">230
</span><span class="lnt">231
</span><span class="lnt">232
</span><span class="lnt">233
</span><span class="lnt">234
</span><span class="lnt">235
</span><span class="lnt">236
</span><span class="lnt">237
</span><span class="lnt">238
</span><span class="lnt">239
</span><span class="lnt">240
</span><span class="lnt">241
</span><span class="lnt">242
</span><span class="lnt">243
</span><span class="lnt">244
</span><span class="lnt">245
</span><span class="lnt">246
</span><span class="lnt">247
</span><span class="lnt">248
</span><span class="lnt">249
</span><span class="lnt">250
</span><span class="lnt">251
</span><span class="lnt">252
</span><span class="lnt">253
</span><span class="lnt">254
</span><span class="lnt">255
</span><span class="lnt">256
</span><span class="lnt">257
</span><span class="lnt">258
</span><span class="lnt">259
</span><span class="lnt">260
</span><span class="lnt">261
</span><span class="lnt">262
</span><span class="lnt">263
</span><span class="lnt">264
</span><span class="lnt">265
</span><span class="lnt">266
</span><span class="lnt">267
</span><span class="lnt">268
</span><span class="lnt">269
</span><span class="lnt">270
</span><span class="lnt">271
</span><span class="lnt">272
</span><span class="lnt">273
</span><span class="lnt">274
</span><span class="lnt">275
</span><span class="lnt">276
</span><span class="lnt">277
</span><span class="lnt">278
</span><span class="lnt">279
</span><span class="lnt">280
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">{{ define &#34;main&#34; }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">main</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;main post-single&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;toots-page&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">header</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;page-header&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>{{ .Title }}<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    {{ with .Description }}
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">p</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;page-description&#34;</span><span class="p">&gt;</span>{{ . }}<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    {{ end }}
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">header</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;toots-container&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;toots&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;load-more-wrapper&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">button</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;load-more-btn&#34;</span><span class="p">&gt;</span>加载更多嘟文<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kd">let</span> <span class="nx">tootsData</span> <span class="o">=</span> <span class="p">[];</span>
</span></span><span class="line"><span class="cl">  <span class="kd">let</span> <span class="nx">displayedCount</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">pageSize</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span> <span class="c1">// 每次加载条数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">  <span class="c1">// ✅ 加载嘟文
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="kr">async</span> <span class="kd">function</span> <span class="nx">loadToots</span><span class="p">(</span><span class="nx">initial</span><span class="o">=</span><span class="kc">false</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">initial</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="c1">// 请注意：如果您要使用 Cloudflare Worker，这里的 URL 应该是您的 Worker URL，而不是原始 Mastodon/GoToSocial 实例的 URL。
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="c1">// 假设您的 Worker 地址是 https://worker.yourdomain.com/api/v1/accounts/01M4A5Q58VD6GJH97T2TE6W25J/statuses?exclude_reblogs=true
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="kr">const</span> <span class="nx">url</span> <span class="o">=</span> <span class="s2">&#34;https://toots.iliu.org/api/v1/accounts/01M4A5Q58VD6GJH97T2TE6W25J/statuses?exclude_reblogs=true&#34;</span><span class="p">;</span> 
</span></span><span class="line"><span class="cl">      <span class="kr">const</span> <span class="nx">res</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="nx">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nx">tootsData</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">container</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;toots-container&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">nextToots</span> <span class="o">=</span> <span class="nx">tootsData</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="nx">displayedCount</span><span class="p">,</span> <span class="nx">displayedCount</span> <span class="o">+</span> <span class="nx">pageSize</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="kr">const</span> <span class="nx">t</span> <span class="k">of</span> <span class="nx">nextToots</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="kr">const</span> <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">t</span><span class="p">.</span><span class="nx">created_at</span><span class="p">).</span><span class="nx">toLocaleString</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">      <span class="kr">const</span> <span class="nx">username</span> <span class="o">=</span> <span class="nx">t</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span> <span class="o">||</span> <span class="nx">t</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span> <span class="o">||</span> <span class="s2">&#34;匿名&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="kr">const</span> <span class="nx">avatar</span> <span class="o">=</span> <span class="nx">t</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span> <span class="o">||</span> <span class="s2">&#34;https://l22.org/path-to-default-avatar.png&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="c1">// ✅ 九宫格多图布局
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="kd">let</span> <span class="nx">mediaHTML</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="nx">t</span><span class="p">.</span><span class="nx">media_attachments</span> <span class="o">&amp;&amp;</span> <span class="nx">t</span><span class="p">.</span><span class="nx">media_attachments</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">mediaHTML</span> <span class="o">=</span> <span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-media-grid&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            </span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">media_attachments</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">m</span> <span class="p">=&gt;</span> <span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb">              &lt;div class=&#34;toot-media-item&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">                &lt;img src=&#34;</span><span class="si">${</span><span class="nx">m</span><span class="p">.</span><span class="nx">preview_url</span> <span class="o">||</span> <span class="nx">m</span><span class="p">.</span><span class="nx">url</span><span class="si">}</span><span class="sb">&#34; alt=&#34;</span><span class="si">${</span><span class="nx">m</span><span class="p">.</span><span class="nx">description</span> <span class="o">||</span> <span class="s1">&#39;&#39;</span><span class="si">}</span><span class="sb">&#34; loading=&#34;lazy&#34; onclick=&#34;showLightbox(&#39;</span><span class="si">${</span><span class="nx">m</span><span class="p">.</span><span class="nx">url</span><span class="si">}</span><span class="sb">&#39;)&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">              &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            `</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">        `</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="c1">// 🚨 【修复点】直接使用 Worker 预取的 t.replies 数据来构建回复内容
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="kd">let</span> <span class="nx">repliesHTML</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="nx">t</span><span class="p">.</span><span class="nx">replies</span> <span class="o">&amp;&amp;</span> <span class="nx">t</span><span class="p">.</span><span class="nx">replies</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">repliesHTML</span> <span class="o">=</span> <span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-replies&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            </span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">replies</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">r</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">              <span class="kr">const</span> <span class="nx">avatar</span> <span class="o">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">avatar</span> <span class="o">||</span> <span class="s2">&#34;https://l22.org/path-to-default-avatar.png&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">              <span class="kr">const</span> <span class="nx">name</span> <span class="o">=</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">display_name</span> <span class="o">||</span> <span class="nx">r</span><span class="p">.</span><span class="nx">account</span><span class="o">?</span><span class="p">.</span><span class="nx">username</span> <span class="o">||</span> <span class="s2">&#34;匿名&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">              <span class="k">return</span> <span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb">                &lt;div class=&#34;toot-reply&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">                  &lt;img src=&#34;</span><span class="si">${</span><span class="nx">avatar</span><span class="si">}</span><span class="sb">&#34; class=&#34;toot-reply-avatar&#34; alt=&#34;</span><span class="si">${</span><span class="nx">name</span><span class="si">}</span><span class="sb">&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">                  &lt;div class=&#34;toot-reply-body&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">                    &lt;strong&gt;</span><span class="si">${</span><span class="nx">name</span><span class="si">}</span><span class="sb">&lt;/strong&gt;：</span><span class="si">${</span><span class="nx">r</span><span class="p">.</span><span class="nx">content</span><span class="si">}</span><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">                  &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">                &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">              `</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="si">}</span><span class="sb">).join(&#39;&#39;)}
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">        `</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">t</span><span class="p">.</span><span class="nx">replies_count</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1">// 如果 Worker 没有返回 replies 但计数大于 0，可能是 Worker 拉取回复失败
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>        <span class="nx">repliesHTML</span> <span class="o">=</span> <span class="sb">`&lt;div class=&#34;toot-replies&#34;&gt;&lt;p class=&#39;no-reply&#39;&gt;暂无回复（或Worker拉取失败）&lt;/p&gt;&lt;/div&gt;`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="kr">const</span> <span class="nx">tootHTML</span> <span class="o">=</span> <span class="sb">`
</span></span></span><span class="line"><span class="cl"><span class="sb">        &lt;article class=&#34;toot-card&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-header&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            &lt;img class=&#34;toot-avatar&#34; src=&#34;</span><span class="si">${</span><span class="nx">avatar</span><span class="si">}</span><span class="sb">&#34; alt=&#34;</span><span class="si">${</span><span class="nx">username</span><span class="si">}</span><span class="sb">&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            &lt;span class=&#34;toot-username&#34;&gt;</span><span class="si">${</span><span class="nx">username</span><span class="si">}</span><span class="sb">&lt;/span&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-date&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            &lt;a href=&#34;</span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">url</span><span class="si">}</span><span class="sb">&#34; target=&#34;_blank&#34;&gt;</span><span class="si">${</span><span class="nx">date</span><span class="si">}</span><span class="sb">&lt;/a&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-content&#34;&gt;</span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">content</span><span class="si">}</span><span class="sb">&lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          </span><span class="si">${</span><span class="nx">mediaHTML</span><span class="si">}</span><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;div class=&#34;toot-footer&#34;&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">            ❤️ </span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">favourites_count</span><span class="si">}</span><span class="sb">　🔁 </span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">reblogs_count</span><span class="si">}</span><span class="sb">　💬 </span><span class="si">${</span><span class="nx">t</span><span class="p">.</span><span class="nx">replies_count</span><span class="si">}</span><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">          &lt;/div&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">          </span><span class="si">${</span><span class="nx">repliesHTML</span><span class="si">}</span><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">        &lt;/article&gt;
</span></span></span><span class="line"><span class="cl"><span class="sb">      `</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="nx">container</span><span class="p">.</span><span class="nx">insertAdjacentHTML</span><span class="p">(</span><span class="s2">&#34;beforeend&#34;</span><span class="p">,</span> <span class="nx">tootHTML</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      
</span></span><span class="line"><span class="cl">      <span class="c1">// 🚨 【修复点】移除了原有的 loadReplies(t.id) 调用
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">displayedCount</span> <span class="o">+=</span> <span class="nx">pageSize</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;load-more-btn&#34;</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="nx">displayedCount</span> <span class="o">&gt;=</span> <span class="nx">tootsData</span><span class="p">.</span><span class="nx">length</span> <span class="o">?</span> <span class="s2">&#34;none&#34;</span> <span class="o">:</span> <span class="s2">&#34;inline-block&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// 🚨 【修复点】移除了 loadReplies 函数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">  <span class="c1">// ✅ 初次加载
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;load-more-btn&#34;</span><span class="p">).</span><span class="nx">onclick</span> <span class="o">=</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="nx">loadToots</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">  <span class="nx">loadToots</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// ✅ 简易图片灯箱
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="kd">function</span> <span class="nx">showLightbox</span><span class="p">(</span><span class="nx">src</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">let</span> <span class="nx">lightbox</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;lightbox&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">lightbox</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">lightbox</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&#34;div&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nx">lightbox</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="s2">&#34;lightbox&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="nx">lightbox</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="sb">`&lt;img id=&#34;lightbox-img&#34;&gt;&lt;span id=&#34;lightbox-close&#34;&gt;×&lt;/span&gt;`</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">lightbox</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;lightbox-close&#34;</span><span class="p">).</span><span class="nx">onclick</span> <span class="o">=</span> <span class="p">()</span> <span class="p">=&gt;</span> <span class="nx">lightbox</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">remove</span><span class="p">(</span><span class="s2">&#34;show&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="nx">lightbox</span><span class="p">.</span><span class="nx">onclick</span> <span class="o">=</span> <span class="nx">e</span> <span class="p">=&gt;</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">target</span> <span class="o">===</span> <span class="nx">lightbox</span><span class="p">)</span> <span class="nx">lightbox</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">remove</span><span class="p">(</span><span class="s2">&#34;show&#34;</span><span class="p">);</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">&#34;lightbox-img&#34;</span><span class="p">).</span><span class="nx">src</span> <span class="o">=</span> <span class="nx">src</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">lightbox</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="s2">&#34;show&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="c">/* 容器样式 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">toots-container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">flex-direction</span><span class="p">:</span> <span class="kc">column</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">gap</span><span class="p">:</span> <span class="mf">1.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-top</span><span class="p">:</span> <span class="mi">2</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c">/* 嘟文卡片 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-card</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">entry</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">radius</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span> <span class="mf">1.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">box-shadow</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">shadow</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">transition</span><span class="p">:</span> <span class="k">transform</span> <span class="mf">.2</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">,</span> <span class="k">box-shadow</span> <span class="mf">.2</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-card</span><span class="p">:</span><span class="nd">hover</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">transform</span><span class="p">:</span> <span class="nb">translateY</span><span class="p">(</span><span class="mi">-2</span><span class="kt">px</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">box-shadow</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">shadow</span><span class="o">-</span><span class="n">hover</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-header</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">align-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">gap</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-bottom</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-avatar</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">width</span><span class="p">:</span> <span class="mi">36</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">height</span><span class="p">:</span> <span class="mi">36</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">50</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">object-fit</span><span class="p">:</span> <span class="kc">cover</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-username</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-weight</span><span class="p">:</span> <span class="kc">bold</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">primary</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-date</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mf">.85</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">secondary</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-bottom</span><span class="p">:</span> <span class="mf">.25</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-content</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">primary</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">line-height</span><span class="p">:</span> <span class="mf">1.6</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">overflow-wrap</span><span class="p">:</span> <span class="kc">break-word</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c">/* 九宫格多图 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-media-grid</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">grid-template-columns</span><span class="p">:</span> <span class="nf">repeat</span><span class="p">(</span><span class="kc">auto</span><span class="o">-</span><span class="kc">fill</span><span class="p">,</span> <span class="nf">minmax</span><span class="p">(</span><span class="mi">100</span><span class="kt">px</span><span class="p">,</span> <span class="mi">1</span><span class="n">fr</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">    <span class="k">gap</span><span class="p">:</span> <span class="mi">4</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-top</span><span class="p">:</span> <span class="mf">.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-media-item</span> <span class="nt">img</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">width</span><span class="p">:</span> <span class="mi">100</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">height</span><span class="p">:</span> <span class="mi">100</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">object-fit</span><span class="p">:</span> <span class="kc">cover</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">6</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">cursor</span><span class="p">:</span> <span class="kc">pointer</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">transition</span><span class="p">:</span> <span class="k">transform</span> <span class="mf">.2</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">,</span> <span class="k">opacity</span> <span class="mf">.3</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-media-item</span> <span class="nt">img</span><span class="p">:</span><span class="nd">hover</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">transform</span><span class="p">:</span> <span class="nb">scale</span><span class="p">(</span><span class="mf">1.05</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">opacity</span><span class="p">:</span> <span class="mf">.9</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c">/* 回复样式 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-replies</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-top</span><span class="p">:</span> <span class="mf">.75</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-left</span><span class="p">:</span> <span class="mi">2</span><span class="kt">px</span> <span class="kc">solid</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">border</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding-left</span><span class="p">:</span> <span class="mf">.75</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-reply</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">align-items</span><span class="p">:</span> <span class="kc">flex-start</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">gap</span><span class="p">:</span> <span class="mf">.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin-top</span><span class="p">:</span> <span class="mf">.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-reply-avatar</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">width</span><span class="p">:</span> <span class="mi">28</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">height</span><span class="p">:</span> <span class="mi">28</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">50</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">toot-reply-body</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mf">.9</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">line-height</span><span class="p">:</span> <span class="mf">1.4</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">no-reply</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">secondary</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mf">.85</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c">/* 加载更多按钮 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">load-more-wrapper</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">text-align</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin</span><span class="p">:</span> <span class="mi">2</span><span class="kt">rem</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">load-more-btn</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding</span><span class="p">:</span> <span class="mf">.6</span><span class="kt">rem</span> <span class="mf">1.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border</span><span class="p">:</span> <span class="kc">none</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">9999</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">background</span><span class="p">:</span> <span class="nb">linear-gradient</span><span class="p">(</span><span class="mi">90</span><span class="kt">deg</span><span class="p">,</span> <span class="mh">#1e90ff</span><span class="p">,</span> <span class="mh">#0066cc</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="mh">#fff</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">cursor</span><span class="p">:</span> <span class="kc">pointer</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">box-shadow</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">3</span><span class="kt">px</span> <span class="mi">10</span><span class="kt">px</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">.1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">transition</span><span class="p">:</span> <span class="kc">all</span> <span class="mf">.3</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">load-more-btn</span><span class="p">:</span><span class="nd">hover</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">transform</span><span class="p">:</span> <span class="nb">translateY</span><span class="p">(</span><span class="mi">-2</span><span class="kt">px</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">box-shadow</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">5</span><span class="kt">px</span> <span class="mi">15</span><span class="kt">px</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">.2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c">/* 灯箱样式 */</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">lightbox</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">position</span><span class="p">:</span> <span class="kc">fixed</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">inset</span><span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">background</span><span class="p">:</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.8</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="kc">none</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">justify-content</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">align-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">z-index</span><span class="p">:</span> <span class="mi">9999</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">lightbox</span><span class="p">.</span><span class="nc">show</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">lightbox</span> <span class="nt">img</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">max-width</span><span class="p">:</span> <span class="mi">90</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">max-height</span><span class="p">:</span> <span class="mi">85</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border-radius</span><span class="p">:</span> <span class="mi">8</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">box-shadow</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">15</span><span class="kt">px</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">.5</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">#</span><span class="nn">lightbox-close</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">position</span><span class="p">:</span> <span class="kc">absolute</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">top</span><span class="p">:</span> <span class="mi">20</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">right</span><span class="p">:</span> <span class="mi">30</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">font-size</span><span class="p">:</span> <span class="mi">2</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">color</span><span class="p">:</span> <span class="mh">#fff</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">cursor</span><span class="p">:</span> <span class="kc">pointer</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">@</span><span class="k">media</span> <span class="o">(</span><span class="nt">prefers-color-scheme</span><span class="o">:</span> <span class="nt">dark</span><span class="o">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="p">.</span><span class="nc">toot-card</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">background</span><span class="p">:</span> <span class="mh">#1c1c1c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">main</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{ end }}
</span></span></code></pre></td></tr></table>
</div>
</div></details>
<h3 id="生成页面">生成页面</h3>
<p>运行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hugo server
</span></span></code></pre></td></tr></table>
</div>
</div><p>访问：
👉 http://localhost:1313/toots/
即可看到自动加载的嘟文列表。
部署后访问 https://你的博客域名/toots/ 就能看到相同效果。
我是把CSS和模板写到了一起，有兴趣的可以把CSS单独弄一个文件，还会更简练。</p>
]]></content:encoded>
    </item>
    <item>
      <title>给Hugo PaperMod主题添加一个漂亮又简洁的友情链接页面</title>
      <link>https://www.iliu.org/posts/add-a-beautiful-and-simple-links-page-to-the-hugo-papermod-theme/</link>
      <pubDate>Mon, 13 Oct 2025 15:45:49 +0800</pubDate>
      <guid>https://www.iliu.org/posts/add-a-beautiful-and-simple-links-page-to-the-hugo-papermod-theme/</guid>
      <description>&lt;p&gt;PaperMod 默认是极简风格，没有自带“友情链接（Friends / Links）”页，但是我们博主也不是互联网的孤岛，总有一些自己喜欢的左邻右舍，最简单的方法是用生成一个页面来作为友情链接页面，但是太丑了。老刘结合chatgpt，自己添加一个漂亮的友情链接页面，下面是 详细教程（以 Hugo + PaperMod 为例）：&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>PaperMod 默认是极简风格，没有自带“友情链接（Friends / Links）”页，但是我们博主也不是互联网的孤岛，总有一些自己喜欢的左邻右舍，最简单的方法是用生成一个页面来作为友情链接页面，但是太丑了。老刘结合chatgpt，自己添加一个漂亮的友情链接页面，下面是 详细教程（以 Hugo + PaperMod 为例）：</p>
<h3 id="一创建友情链接页面">一、创建友情链接页面</h3>
<p>在你的 Hugo 项目根目录执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new friends/_index.md
</span></span></code></pre></td></tr></table>
</div>
</div><blockquote>
<p>这会在 content/friends/_index.md 生成文件。
打开该文件，修改为：</p></blockquote>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;友情链接&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">layout</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;friends&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;那些值得一去的好地方&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>（ 注意： layout 是我们下一步要创建的模板文件名。）</p>
<h3 id="二创建页面模板">二、创建页面模板</h3>
<p>PaperMod 的页面模板位于：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">themes/PaperMod/layouts/
</span></span></code></pre></td></tr></table>
</div>
</div><p>但我们不直接改主题文件（避免主题升级覆盖），而是复制到你的项目中：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p layouts/_default
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后创建一个新模板文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano layouts/_default/friends.html
</span></span></code></pre></td></tr></table>
</div>
</div><p>写入以下示例模板（简洁、与 PaperMod 风格一致）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl">{{ define &#34;main&#34; }}
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">main</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;main-content&#34;</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;main-content&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">article</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;post-single&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">header</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;post-header&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">     
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">h1</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;post-title&#34;</span><span class="p">&gt;</span>{{ .Title }}<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      {{ with .Params.summary }}
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">p</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;post-description&#34;</span><span class="p">&gt;</span>{{ . }}<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      {{ end }}
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">header</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">friend-links</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">display</span><span class="p">:</span> <span class="k">grid</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">grid-template-columns</span><span class="p">:</span> <span class="nf">repeat</span><span class="p">(</span><span class="kc">auto</span><span class="o">-</span><span class="kc">fill</span><span class="p">,</span> <span class="nf">minmax</span><span class="p">(</span><span class="mi">280</span><span class="kt">px</span><span class="p">,</span> <span class="mi">1</span><span class="n">fr</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="k">gap</span><span class="p">:</span> <span class="mf">1.2</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">margin-top</span><span class="p">:</span> <span class="mf">1.5</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">friend-card</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">align-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mf">0.75</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">background</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">entry</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">box-shadow</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">1</span><span class="kt">px</span> <span class="mi">3</span><span class="kt">px</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">transition</span><span class="p">:</span> <span class="kc">all</span> <span class="mf">0.25</span><span class="kt">s</span> <span class="kc">ease</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">friend-card</span><span class="p">:</span><span class="nd">hover</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">transform</span><span class="p">:</span> <span class="nb">translateY</span><span class="p">(</span><span class="mi">-4</span><span class="kt">px</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">box-shadow</span><span class="p">:</span> <span class="mi">0</span> <span class="mi">4</span><span class="kt">px</span> <span class="mi">10</span><span class="kt">px</span> <span class="nb">rgba</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.15</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">friend-card</span> <span class="nt">img</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">width</span><span class="p">:</span> <span class="mi">3</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">height</span><span class="p">:</span> <span class="mi">3</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mi">9999</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">margin-right</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">friend-card</span> <span class="p">.</span><span class="nc">text-gray-600</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="nf">var</span><span class="p">(</span><span class="o">--</span><span class="n">secondary</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;post-content&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      {{ .Content }}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;friend-links grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 mt-6&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        {{ range .Site.Data.friends }}
</span></span><span class="line"><span class="cl">          <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;{{ .url }}&#34;</span> <span class="na">target</span><span class="o">=</span><span class="s">&#34;_blank&#34;</span> <span class="na">rel</span><span class="o">=</span><span class="s">&#34;noopener&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;friend-card flex items-center p-4 rounded-xl shadow-sm hover:shadow-md transition&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">img</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;{{ .avatar }}&#34;</span> <span class="na">alt</span><span class="o">=</span><span class="s">&#34;{{ .name }}&#34;</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;w-12 h-12 rounded-full mr-4&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;font-semibold&#34;</span><span class="p">&gt;</span>{{ .name }}<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">              <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;text-sm text-gray-600&#34;</span><span class="p">&gt;</span>{{ .desc }}<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        {{ end }}
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">article</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">main</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{ end }}
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="三创建数据文件友情链接信息">三、创建数据文件（友情链接信息）</h3>
<p>在项目根目录新建：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">data/friends.yml
</span></span></code></pre></td></tr></table>
</div>
</div><p>添加如下内容（你可以随意扩展）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;PaperMod 官方&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://github.com/adityatelange/hugo-PaperMod&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">avatar</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://avatars.githubusercontent.com/u/21258296?v=4&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">desc</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;简洁优雅的 Hugo 主题&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Hugo 官网&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://gohugo.io/&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">avatar</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://gohugo.io/images/hugo-logo-wide.svg&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">desc</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;世界上最快的静态网站生成器&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;老刘博客&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://iliu.org/&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">avatar</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://iliu.org/img/apple-touch-icon.png/&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">desc</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;分享我的思考与生活&#34;</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><h3 id="四将友情链接加入导航栏">四、将“友情链接”加入导航栏</h3>
<p>打开 config.yml 或 config.toml（根据你使用的格式），找到菜单配置部分：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">menu</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">main</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">identifier</span><span class="p">:</span><span class="w"> </span><span class="l">friends</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">友情链接</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="l">/friends/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">weight</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><h3 id="五重新生成并预览">五、重新生成并预览</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo server -D
</span></span></code></pre></td></tr></table>
</div>
</div><p>打开浏览器访问：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">http://localhost:1313/friends/
</span></span></code></pre></td></tr></table>
</div>
</div><p>即可看到一个简洁、卡片式的友情链接页面，与 PaperMod 风格一致。
具体风格可以参考：
<a href="https://iliu.org/friends/">老刘博客</a></p>
<p>通过以上步骤，你就成功地为 Hugo PaperMod 主题添加了一个既美观又简洁的友情链接页面。这个页面不仅能增强你的站点互通性，还能提升用户体验。如果你喜欢，也可以根据自己的需求对样式和布局进行进一步的调整和优化。希望这篇文章对你有所帮助！</p>
]]></content:encoded>
    </item>
    <item>
      <title>重新启航</title>
      <link>https://www.iliu.org/posts/set-sail-again/</link>
      <pubDate>Wed, 28 Aug 2024 09:48:57 +0800</pubDate>
      <guid>https://www.iliu.org/posts/set-sail-again/</guid>
      <description>既然缘法如此，就重新开始吧</description>
      <content:encoded><![CDATA[<p>朋友们，老刘换新博客了，事情的原因是这样子的：</p>
<p>在某年某月的某一天，老刘发现电脑有点不好用了，于是，就重置了一下电脑，并且没有保留软件和文档。所以，等老刘意识到还没有备份网站数据的时候，事情已经发生了，有看官要问了，你的网站数据难道是放在C盘了吗？这个说来就有点话长了。</p>
<p>最初换成Hugo的时候，电脑是比较旧的一台电脑，装的是endeavouros，而且在Linux下，配置Hugo那不是一般的方便。后来把电脑进行了升级，就没有在装双系统。看了下Windows下配置git和Hugo的复杂性，老刘选择了启动Windows里带的子系统Ubuntu，所以，网站数据都存在那个Ubuntu这个子系统内。</p>
<p>当老刘重置系统后，子系统也被重置了，我的数据也就随风飘散了。Hugo的好处在于本地和网络是两个不同的世界，所以我的网站是没有任何的问题，但是无法再进行更新了。也正是这个原因，换了Hugo后，对备份少了一丝敬畏之心。一个疏忽，就这样了。</p>
<p>本来吧，有HTML的文件在，把这些文件重新转成md文件也是可以的，但是这样一来，网站的目录势必发生变化，后来想想，天下没有不散之宴席，任何事物都不开永远的存在，网站博客也是如此，这可能也是图南博客的缘法。所以，最后老刘的决定是把图南博客就放在那里好了，不再进行更新。</p>
<p>新博客还是沿用流金岁月的名字吧，寓意博主对过去时光的珍视，表达了平淡的生活也自有记录的意义这个含义。</p>
<p>枯木前头万木春，靠别老博客冗长的数据，也许是一件好事。新博客将以记录生活为主，折腾和一些私货为辅吧。</p>
<p>最后的最后，希望大家都勤备份，格局大一些，昨天老刘仔细研究了一下Windows下安装git和Hugo也没有想象的那么复杂，所以，有时候告别自己的舒适圈还是有必要的。目前网站数据放在其他的盘了，并同步到群晖，由群晖加密同步到百度网盘，应该是有一些保证了。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Hello World</title>
      <link>https://www.iliu.org/posts/hello-world/</link>
      <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://www.iliu.org/posts/hello-world/</guid>
      <description>&lt;p&gt;欢迎来到我的新博客！&lt;/p&gt;
&lt;p&gt;这是使用 Hugo 和自定义三栏主题搭建的第一篇文章。&lt;/p&gt;
&lt;h2 id=&#34;为什么选择-hugo&#34;&gt;为什么选择 Hugo？&lt;/h2&gt;
&lt;p&gt;Hugo 是一个快速、现代的静态网站生成器，具有以下优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;快速构建&lt;/strong&gt;：极快的构建速度&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简单易用&lt;/strong&gt;：配置简单，易于上手&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主题丰富&lt;/strong&gt;：社区有大量优秀主题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;功能强大&lt;/strong&gt;：支持丰富的功能和扩展&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;主题设计&#34;&gt;主题设计&lt;/h2&gt;
&lt;p&gt;这个主题采用了三栏布局设计：&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>欢迎来到我的新博客！</p>
<p>这是使用 Hugo 和自定义三栏主题搭建的第一篇文章。</p>
<h2 id="为什么选择-hugo">为什么选择 Hugo？</h2>
<p>Hugo 是一个快速、现代的静态网站生成器，具有以下优势：</p>
<ul>
<li><strong>快速构建</strong>：极快的构建速度</li>
<li><strong>简单易用</strong>：配置简单，易于上手</li>
<li><strong>主题丰富</strong>：社区有大量优秀主题</li>
<li><strong>功能强大</strong>：支持丰富的功能和扩展</li>
</ul>
<h2 id="主题设计">主题设计</h2>
<p>这个主题采用了三栏布局设计：</p>
<ul>
<li><strong>左栏</strong>：导航菜单、搜索、分类和标签</li>
<li><strong>中栏</strong>：主要内容区域，支持时间线效果</li>
<li><strong>右栏</strong>：侧边栏，显示作者信息、最新文章和归档</li>
</ul>
<h2 id="响应式设计">响应式设计</h2>
<p>主题完全响应式，适配各种设备：</p>
<ul>
<li>桌面端：完整三栏显示</li>
<li>平板端：两栏布局</li>
<li>移动端：单栏布局，可折叠菜单</li>
</ul>
<p>期待与你分享更多内容！</p>
]]></content:encoded>
    </item>
    <item>
      <title>如何使用git并把代码提交到GitHub</title>
      <link>https://www.iliu.org/posts/how-to-use-git/</link>
      <pubDate>Wed, 15 Nov 2023 21:28:20 +0800</pubDate>
      <guid>https://www.iliu.org/posts/how-to-use-git/</guid>
      <description>&lt;p&gt;这篇文章纯粹给初学者看的，大佬请无视。使用Hugo之后，为了方便推送方便，一般要用到git这个软件。今天就来谈谈git具体的用法。&lt;/p&gt;
&lt;h1 id=&#34;git的用法&#34;&gt;git的用法&lt;/h1&gt;
&lt;h3 id=&#34;设置用户名&#34;&gt;设置用户名&lt;/h3&gt;
&lt;p&gt;因为git可以用来团队协助方面，设置用户名的目的是为了让别人知道，你是谁，这个程序的bug是谁提交的😰。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>这篇文章纯粹给初学者看的，大佬请无视。使用Hugo之后，为了方便推送方便，一般要用到git这个软件。今天就来谈谈git具体的用法。</p>
<h1 id="git的用法">git的用法</h1>
<h3 id="设置用户名">设置用户名</h3>
<p>因为git可以用来团队协助方面，设置用户名的目的是为了让别人知道，你是谁，这个程序的bug是谁提交的😰。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git config --global user.name <span class="s2">&#34;xxxx&#34;</span>
</span></span><span class="line"><span class="cl">git config --global user.email <span class="s2">&#34;xxxx@qq.com&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="设置本地仓库">设置本地仓库</h3>
<p>选择你项目的文件夹，在里面打开终端，运行如下命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git init
</span></span></code></pre></td></tr></table>
</div>
</div><p>在每次修改完程序后，运行如下命令提交：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;简短的说明，本次提交了什么&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="设置远程仓库">设置远程仓库</h2>
<p>很多时候我们还要把代码提交到GitHub上去，当然你也可以创建自己的远程git服务器，这里不涉及。</p>
<h3 id="首先用ssh生成公钥"><strong>首先，用ssh生成公钥</strong></h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh-keygen -t rsa -C <span class="s2">&#34;****@qq.com&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>一般会在~/.ssh/这个文件夹里，生成两个文件，打开后缀为pub的那个文件。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCh9zv7aD0IQAen8wC5slQPlE9H2Jjh6Z8v7YShZGXaFxq2Hd/e5v0KTLDHuL0DSItsbQGVMiLuJhPE3f1ypxAruj14Frak4+U5WZhV6xTSeQVwIWd8QyMBaYNjv7s49nb+tz9NAYrzu8ZNT8+2s1vUXCI5K6vPNMTax0KrAjmqOZ0sbcSzmz57LVpJqadc9Svuh84X65LH2XuzfNudzmrMIK3uu5GoFosqY4Y+tu3ssvmeUKWfFRM14Gab0I6funZZh5EdRv2/ltkEdzIRl01FQTAyo5rnzaY4jPhCR5ANd1smzo+h4KvqIK3uux96Hs= ****@qq.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后把copy这个文件的内容，打开GitHub网站，登录自己的账户，在设置里找到ssh那个选项，提交进去可以了。</p>
<h3 id="连接远程代码仓库提交代码">连接远程代码仓库提交代码</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git remote add origin git@github.com:GitHub用户名/我的项目.git 
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后，提交代码到自己的项目里：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></td></tr></table>
</div>
</div><p>以后的提交可以不用-u这个参数了。</p>
<h2 id="把远程仓库的代码下载到本地">把远程仓库的代码下载到本地</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git pull
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="远程pull的时候出现错误">远程Pull的时候出现错误</h2>
<p>这是我的另一个项目在pull的时候催化下的错误。在从远程pull的时候出现了，error: Your local changes to the following files would be overwritten by merge:这个错误提示，提示的是数据库文件，是因为因为网站访问的原因，导致本地数据库和远程的数据库文件不一致。其实后期是不会用到这个数据库文件的。因此，丢弃本地的修改</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git checkout .
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Hugo-papermod主题的优化记录</title>
      <link>https://www.iliu.org/posts/hugo-papermod-modification/</link>
      <pubDate>Sat, 04 Nov 2023 21:30:05 +0800</pubDate>
      <guid>https://www.iliu.org/posts/hugo-papermod-modification/</guid>
      <description>&lt;p&gt;在上一篇文章中曾经说到把博客从WordPress转到了Hugo，经过这几天的使用，发现还是很不错的，用起来也比较方便。但是，在使用PaperMod主题的时候，也是遇到了一些问题，本文就遇到的问题作一个记录。目前，主题的代码高亮功能还是没有搞定，不过也是影响不大，先放一放也无所谓。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>在上一篇文章中曾经说到把博客从WordPress转到了Hugo，经过这几天的使用，发现还是很不错的，用起来也比较方便。但是，在使用PaperMod主题的时候，也是遇到了一些问题，本文就遇到的问题作一个记录。目前，主题的代码高亮功能还是没有搞定，不过也是影响不大，先放一放也无所谓。</p>
<h3 id="首页不显示文章">首页不显示文章</h3>
<p>把WordPress导出的md文件导入的Hugo的psots目录后，在使用代码创建新文件时候</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">hugo new posts/***.md
</span></span></code></pre></td></tr></table>
</div>
</div><p>发现新建的md文件，生成网页后不会在首页显示。但是在栏目里是会有的。后来的在@<a href="https://www.sharpgan.com/">阿甘博客</a>博客的提醒下，使用导出的md文件的文档属性标头，成功的显示了。但是，每次在生成文章md的时候，都需要手动的更改，不是太方便。后来，在看某篇文章的时候得到启发，修改archetypes/default.md,把默认的代码删除，改成：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">title: &#34;{{ replace .Name &#34;-&#34; &#34; &#34; | title }}&#34; 
</span></span><span class="line"><span class="cl">author: 老刘
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">date: {{ .Date }}
</span></span><span class="line"><span class="cl">url: /optics-weekly-issue-8/
</span></span><span class="line"><span class="cl">categories:
</span></span><span class="line"><span class="cl">  - 齐物
</span></span><span class="line"><span class="cl">---
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后，再创建md文件后，只需要修改一下url里的值就OK了。</p>
<h3 id="增加评论功能">增加评论功能</h3>
<p>这个主要是copy了阿甘博客的方法。 在artalk的官方文档中找到<code>Artalk.css</code>和<code>Artalk.js</code>文件的cdn地址然后下载到本地，在hugo项目根目录的/static文件夹下面新建一个叫 artalk的文件夹，然后把前述两个静态文件放进这个文件夹</p>
<p>创建模板文件 /主题目录/layouts/partials/comment/artalk.html，文件内容如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;link href=&#34;https://www.iliu.org/artalk/Artalk.css&#34; rel=&#34;stylesheet&#34;&gt;
</span></span><span class="line"><span class="cl">&lt;script src=&#34;https://www.iliu.org/artalk/Artalk.js&#34;&gt;&lt;/script&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;!-- Artalk --&gt;
</span></span><span class="line"><span class="cl">&lt;div id=&#34;Comments&#34;&gt;&lt;/div&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;script&gt;
</span></span><span class="line"><span class="cl">  Artalk.init({
</span></span><span class="line"><span class="cl">    el:        &#39;#Comments&#39;,
</span></span><span class="line"><span class="cl">    pageKey:   &#39;{{ .Permalink }}&#39;,
</span></span><span class="line"><span class="cl">    pageTitle: &#39;{{ .Title }}&#39;,
</span></span><span class="line"><span class="cl">    server:    &#39;{{ $.Site.Params.artalk.server }}&#39;,
</span></span><span class="line"><span class="cl">    site:      &#39;{{ $.Site.Params.artalk.site }}&#39;,
</span></span><span class="line"><span class="cl">    // ...你的其他配置
</span></span><span class="line"><span class="cl">  })
</span></span><span class="line"><span class="cl">&lt;/script&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>文章页模板 /主题目录/layouts/_default/single.html 合适的位置添加：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;div class=&#34;article-comments&#34;&gt;
</span></span><span class="line"><span class="cl">  {{- partial &#34;comment/artalk&#34; . -}}
</span></span><span class="line"><span class="cl">&lt;/div&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>具体位置为<code>single.html</code>文件的{{- if (.Param “comments”) }}判断体中，完整的代码如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">{{- if (.Param &#34;comments&#34;) }}
</span></span><span class="line"><span class="cl">  &lt;div class=&#34;article-comments&#34;&gt;
</span></span><span class="line"><span class="cl">  {{- partial &#34;comment/artalk&#34; . -}}
</span></span><span class="line"><span class="cl">&lt;/div&gt;
</span></span><span class="line"><span class="cl">  {{- end }}
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后在 Hugo 配置文件中添加如下内容：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">params:
</span></span><span class="line"><span class="cl">  artalk:
</span></span><span class="line"><span class="cl">    server: &#39;https://artalk.sharpgan.com&#39;
</span></span><span class="line"><span class="cl">    site: &#39;图南博客&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><p>至于artalk的部署方法，可以用docker来部署，官方有详细的方法</p>
<h3 id="不加载css和js">不加载CSS和JS</h3>
<p>这个问题有点玄学，很多教程给出的答案都是去Cloudflare里修改，使优化不压缩js和CSS，但是在我这里没有效果。看了错误的提示好像是SHA-256完整性的检查不通过，浏览器阻塞了。 一般的解决办法是： 是要么关闭 SRI，要么取消 Cloudflare 的「Auto Minify」。 Cloudflare 关闭的方法：速度 - 优化 - Auto Minify。 在 Hugo 中关闭的方法：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">params:
</span></span><span class="line"><span class="cl">  assets:
</span></span><span class="line"><span class="cl">    disableFingerprinting: true
</span></span></code></pre></td></tr></table>
</div>
</div><p>但是，在我这里怎么搞都没有用。 后来看到一个哥们的博客，网址我忘掉了，通过修改一个值，搞定了。 在 themes\PaperMod\layouts\partials 文件夹下找到一个 head.html 文件，发现里面确实有 integrity=&quot;{{ $stylesheet.Data.Integrity }}&quot; 这么一句代码，把它改为 integrity=&quot;&quot; 然后重新发布</p>
<h3 id="代码高亮">代码高亮</h3>
<p>这个我参考了阿甘和其他的一些文章，但是都没有成功，有时候有一点颜色，有时候一丢丢颜色也没有。我感觉可能是和物品修改了上面的那个head.html有关系。 然而，我的猜测是错误❌的，加上那个代码也没有用。然后我回复用官方的一个dome，发现是可以显示代码高亮的，仔细查看了我的配置文件和官方的配置文件的差别，发现是在设置代码高亮的那个地方，有一个选项不能是true，不然就不显示，太玄学了。 具体代码：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">highlight:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># anchorLineNos: true
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">noClasses: false
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># anchorLineNos: true
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#codeFences: true
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">#guessSyntax: true
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">lineNos: true
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">style: monokai
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
    <item>
      <title>朋友们，博客改名加换域名了！</title>
      <link>https://www.iliu.org/4399.html</link>
      <pubDate>Sun, 21 May 2023 09:18:15 +0000</pubDate>
      <guid>https://www.iliu.org/4399.html</guid>
      <description>&lt;p&gt;流金岁月换域名，换博客名了 最近读《庄子》，对&lt;strong&gt;绝云气、负青天、然后图南&lt;/strong&gt;的大鹏很是羡慕，遂改博客名为图南博客，域名为https://tunan.org&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>流金岁月换域名，换博客名了 最近读《庄子》，对<strong>绝云气、负青天、然后图南</strong>的大鹏很是羡慕，遂改博客名为图南博客，域名为https://tunan.org</p>
<p>有订阅老刘的同志们，麻烦改改链接哈</p>
]]></content:encoded>
    </item>
    <item>
      <title>重新弄了下博客环境</title>
      <link>https://www.iliu.org/3746.html</link>
      <pubDate>Thu, 20 May 2021 09:30:37 +0000</pubDate>
      <guid>https://www.iliu.org/3746.html</guid>
      <description>&lt;p&gt;最近一段时间发现博客回复的时候一直显示提交中，不会跳转到评论成功的页面，以前也遇到过这种问题，基本上重启vps解决，但是这次貌似重启了也作用不大。&lt;figure class=&#34;wp-block-image size-large&#34;&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>最近一段时间发现博客回复的时候一直显示提交中，不会跳转到评论成功的页面，以前也遇到过这种问题，基本上重启vps解决，但是这次貌似重启了也作用不大。<figure class="wp-block-image size-large"></p>
<p><a href="https://tunan.org/wp-content/uploads/2021/05/709ac9ab754c1c0.jpg"><img loading="lazy" decoding="async" width="800" height="320" src="https://tunan.org/wp-content/uploads/2021/05/709ac9ab754c1c0.jpg" alt="" class="wp-image-3747" srcset="https://tunan.org/wp-content/uploads/2021/05/709ac9ab754c1c0.jpg 800w, https://tunan.org/wp-content/uploads/2021/05/709ac9ab754c1c0-300x120.jpg 300w, https://tunan.org/wp-content/uploads/2021/05/709ac9ab754c1c0-768x307.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure></p>
<p>以前还以为是我浏览器的问题，所以也就没有太在意，而且吧，这个问题时有时无。前两天，有博友也问道老刘这个问题，是否评论成功，才意识到可能不是我的问题。</p>
<p>研究了一下也没有什么头绪，只能说明自己太菜。后来想到当初偷懒加瞅便宜，趁着双11活动的时候的时候买了个urlos的授权。当时装上这个面板后，懒得再改别的，就一直用了下去，还写过一篇《<a href="https://tunan.org/3597.html">试用urlos</a>》的文章，要说这个面板的理念很超前，但是使用起来还是有一丢丢的不方便。只是懒得改了，就一直用到现在。现在看来是时候弃用了。</p>
<p>本来还想试用一下小皮面板，但是装上后直接打不开，也懒得再付出时间来找问题的所在了。直接还是用自己最熟悉的oneinstack好了。</p>
<p>用了差不多两个来小时编译环境，重新部署博客后，也不知道是不是错觉，感觉速度有了那么一丢丢的快。难道php8.0这么牛叉？</p>
]]></content:encoded>
    </item>
    <item>
      <title>博客改名字了</title>
      <link>https://www.iliu.org/3018.html</link>
      <pubDate>Sat, 18 Jan 2020 08:20:51 +0000</pubDate>
      <guid>https://www.iliu.org/3018.html</guid>
      <description>&lt;p&gt;全年5月份左右开始把个人博客独立出来，当时也不知道起个什么名字好，就姑且叫做跋涉者了，半年过去了，发现也没有什么好跋涉的。所记录的也仅仅是如流水的匆匆岁月。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>全年5月份左右开始把个人博客独立出来，当时也不知道起个什么名字好，就姑且叫做跋涉者了，半年过去了，发现也没有什么好跋涉的。所记录的也仅仅是如流水的匆匆岁月。</p>
<p>因此，决定把博客的名字改成流金岁月了，流通刘，意思是记录老刘经历的那些事。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
