本文属于合集:星际餐馆修建报告
赛博小屋折腾小记
没想到这篇笔记哗啦啦一下子写了这么长,脑子嗡嗡的
鉴于人类的本质,这篇笔记也许会一直更新……
因为本人没有任何的代码基础,基本上是现学现卖,所以一定会有很多地方写得非常小白,欢迎大佬指正,就是,轻点喷 qwq
相关颜色变量请换成自己的。
以下所有修改测试于 Stellar 1.29.1
。
温馨提示:道路千万条,安全第一条;魔改不备份,博主两行泪
给超长代码块增加滚动条
首先判断代码块是否过长,如果是,则设置最大高度并开启滚动。
新建 source/js/adjust-codeblock-height.js
,添加以下内容:
1 | // adjust-code-block-height.js |
以上代码代表如果代码框高度超过 800px,则开启折叠,折叠框最大高度为 300px。其中,可自行设置判断阈值 if (highlightBlock.clientHeight > 800) {
以及折叠后最大高度 highlightBlock.style.maxHeight = '300px';
。
雪花特效
代码来自这里。我稍微做了一点修改,做成了一个按钮引入到主题中并用 localStorage 记录下雪状态,很简单的代码完美的解决了我的强迫症~
博客已运行x天x小时x分钟
在网站页脚部分添加一个“博客已运行 x 天 x 小时 x 分钟”字样,显示效果:
代码抄自这里,我为了调整样式加了一行代码 。在 _config.stellar.yml
里添加如下代码,其中 <span class='runtime'>
中的类名 runtime
可自行设置。
1 | footer: |
再在自定义的 css 文件里添加以下代码,其中 color 可设置为主题色 var(--theme-link)
或自行设置:
1 | .runtime |
页脚增加猫猫图片
显示效果:
首先,如果是使用本地图片,将图片上传到主题的资源文件夹,比如 source/asset/posts/keyboard.png
然后在主题配置文件的 _config.stellar.yml
中添加:
1 | footer: |
其中 float: right
限定图片右对齐,width:60px
限制图片大小,可自行调整。
外部链接后面显示图标
显示效果:
Warning
老方法依赖 cheerio 模块,可行,但似乎会带来一些网站加载过慢的问题,我现在已经开心地转用新方法了,把老方法摆在这里全当(水)记(字)录(数)。
新建 themes/stellar/scripts/filters/link-icon.js
文件,增加以下代码:
1 | //使用 cheerio 模块在文章中的外部链接后添加一个小图标:npm i cheerio --save |
Success
用老方法配置完我总觉得使用 Cheerio 模块后会导致网站加载过慢,就又优化了一下。询问 ChatGPT 得知可以考虑不使用 Node.js 的服务器端处理,而是使用纯前端的方法来达到同样的效果,通过在客户端 JavaScript 中添加代码来实现类似的功能,而不是在 Hexo 的后端渲染过程中处理。(好了,可以卸载 cheerio 了)
下面的这段代码可以在页面加载完成后运行,它会查找指定元素中的链接,并在这些链接后添加一个图标。这种方法的好处是,它不需要服务端的处理,所有操作都在用户的浏览器内完成,可以减少服务器负担,并且避免可能因服务器端渲染引起的加载问题。此外,这种方法也提供了更好的用户体验,因为它不会延迟页面内容的显示。
新建source/js/link-icon.js
文件,填入以下内容:
1 | document.addEventListener('DOMContentLoaded', function () { |
这里做了两个筛选:
const parentClasses = ['tag-plugin.users-wrap', 'tag-plugin.sites-wrap', 'tag-plugin.ghcard', 'tag-plugin.link.dis-select', 'tag-plugin.colorful.note', 'social-wrap.dis-select'];
是被排除的类,可自行增减;if (href && (href.startsWith('http') || href.startsWith('/')))
判断链接是否以http
或/
开头,如果不想给站内链接添加图标的话可以把后面的筛选条件去掉。
然后在主题文件 _config.stellar.yml
中引入:
1 | inject: |
增加参与讨论按钮
代码抄自星日语,最新主题已自带此功能。
适配 Obsidian Callouts 标注块语法
显示效果:
暗黑模式下的显示效果:
参考了 Hexo 博客适配 Obsidian 新语法,基础的设置请参考此链接。我暂时用不上其他功能,就把 callout 的样式搬来并做了一些修改。我个人还挺喜欢这个 callout 样式,比 quote 要好看而且添加也很方便,主要是可以和 Obsidian 打通,嘿嘿。
样式修改
原版的 callouts 标注块样式间距太大,我在此基础上改了 callout_blocks_common.css(不是很懂,写得很烂……但是能用):
点击展开代码
1 | :root{--callout-note:68,138,255;--callout-abstract:0,176,255;--callout-info:0,184,212;--callout-tip:0,191,165;--callout-success:8,185,78;--callout-question:224,172,0;--callout-warning:255,145,0;--callout-failure:255,82,82;--callout-danger:255,23,68;--callout-bug:245,0,87;--callout-example:124,77,255;--callout-quote:158,158,158;--callout-radius:6px;--callout-border-opacity:0.5;--callout-title-bg-opacity:0.08}.callout-fold:before{align-self:center;content:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="gray" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="chevron-down"><path d="m6 9 6 6 6-6"/></svg>')}.callout-fold{display:flex;transform:rotate(-90deg);transition:.5s cubic-bezier(.075,.82,.165,1)}.custom-callout[open]>summary>.callout-fold{transform:rotate(0deg)}.custom-callout>summary{border-top-left-radius:var(--callout-radius);border-top-right-radius:var(--callout-radius);cursor:pointer;margin:0;padding:0.5rem 1rem}.custom-callout>summary::marker{content:""}.custom-callout>summary:before{margin-right:.5rem}.custom-callout>summary::-webkit-details-marker{display:none}.callout-title{--fsp: calc(17px - 1px);font-size: var(--fsp);display:flex;justify-content:space-between;font-weight:bold;}.custom-callout>.callout-body{background:transparent ;border-left:none;margin:0 ;padding:.3rem 1rem;position:relative} |
集成 Telegram Channel 说说
显示效果:
篇幅限制,只展示2条,请耐心等待加载。(可能要挂代理)
代码抄自把Tg Channel接入到Stellar时间线。因为我懒得做标签筛选所以直接把这个去掉啦,在此还要感谢佬的耐心解答
GitHub Action 自动部署并修复更新时间
在自动部署这里遇到了几个坑,总结下来大概有下:
- 网上流行的很多 yml workflow 文件都有些过时
- 公钥私钥啥的不太懂,配置了半天
- 因为我的博客有数学公式显示,所以要在 workflow 里加入安装 pandoc 的部分,才能够成功运行
- 自动部署后网站的文章更新时间全部变成 push 时间,但在本地是正常的。一番搜索后找到了解决方法,在 yml 文件里加入了以下代码,分别修复 posts、wiki、notes 的更新时间:
1 | - name: Restore file modification time 🕒 |
最后附上完整代码,拿去用的话要自己配置一下 GitHub 部分的设置:
点击展开代码
1 | name: auto deploy |
给博客添加地理定位并制作个性欢迎
显示效果:
代码来自给博客添加腾讯地图定位并制作个性欢迎。我稍微做了一点调整:
新建 source/js/services/txmap.js
,并添加以下代码:
点击展开代码
1 | //get请求 |
在主题文件中配置
在主题配置文件 _config.stellar.yml
中引入jQuery依赖和刚刚的js文件:
1 | inject: |
在 source/_data/widgets.yml
中添加小组件,我在里面嵌套了一个随机文章跳转,不要的话可以删掉,其中,<span id="welcome-info" ></span>
是必须的不可以删:
1 | welcomeloc: |
然后就跟正常的小组件一样在想要的地方引用即可。
添加更改字体按钮
显示效果:
第一种:
在任意位置增加一个 button 按钮
鼠标放到上面会显示提示:
第二种:
在文章页面目录下方显示
之前一直纠结要不要把自定义字体效果去掉,在选择和留下之间来回切换 最终才出现了这里的方案:默认不加载任何字体,喜欢 LXGW 字体的话可点击图标转换,同时再点击一下就恢复。代码不长但完美地解决了我的强迫症~
第一步:准备字体文件
可以是在线文件也可以是本地文件,我是在主题 config 文件下通过 inject 引入了 LXGW 字体。
第二步:修改 css
首先确保 LXGW WenKai Screen 字体已经通过 CSS 正确引入。你可以在 CSS 文件中添加一个特定的类,用于当用户选择使用这种字体时切换到它:
1 | /* 设置字体 */ |
第三步:添加 javascript
新建 source/js/changefont.js
文件,添加以下代码:
1 | document.addEventListener('DOMContentLoaded', function () { |
第四步:添加切换按钮
然后在想要的地方引用即可,可以自行添加各种 emoji,比如:
1 | <button class="custom-button tooltip" onclick="toggleLXGWFont()" data-msg="警告,真的很危险"><img src="https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/Blob/ablobcatrainbow.png" alt="Emoji" style="vertical-align: middle; width: 20px; height: 20px;"> 危险,请勿点击</button> |
给按钮加入 css 提示框
在自定义 css 文件中添加:
1 |
|
第二种样式
Warning
第二种样式需要对主题文件进行一丢丢修改,但貌似不太影响更新……只要无冲突的话可以一直 update fork
在 languages/zh-CN.yml
中添加一行 font: 更改字体
,并在 icons.yml 里添加:
1 | default:font: <svg class="theme-icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path d="m12.677 17.781l-2.626-6.256l-2.694 6.256Zm6.723 6.511h-7.069v-1.365l.458-.023a1.847 1.847 0 0 0 .972-.2a.313.313 0 0 0 .145-.263a4.158 4.158 0 0 0-.419-1.4l-.812-1.931H7.322L6.4 21.259a3.319 3.319 0 0 0-.349 1.157c0 .036 0 .119.154.241a2.481 2.481 0 0 0 1.191.247l.448.033v1.354H2v-1.31l.4-.07a2.188 2.188 0 0 0 1-.318a6.318 6.318 0 0 0 1.18-2.066l5.575-13.036H11.2l5.512 13.174a5.255 5.255 0 0 0 1.049 1.835a1.959 1.959 0 0 0 1.19.4l.454.027Zm6.441-2.732v-3.985a22.542 22.542 0 0 0-2.226.97a3.845 3.845 0 0 0-1.29 1.05a2.03 2.03 0 0 0-.388 1.2a1.951 1.951 0 0 0 .491 1.362a1.49 1.49 0 0 0 1.13.544a4.142 4.142 0 0 0 2.283-1.141m-3.333 2.949a2.833 2.833 0 0 1-2.139-.893a3.206 3.206 0 0 1-.833-2.285a2.959 2.959 0 0 1 .415-1.577a5 5 0 0 1 1.791-1.625a23.876 23.876 0 0 1 3.617-1.588v-.074a2.905 2.905 0 0 0-.383-1.833a1.325 1.325 0 0 0-1.075-.412a1.155 1.155 0 0 0-.816.26a.687.687 0 0 0-.277.536l.023.646a1.62 1.62 0 0 1-.4 1.158a1.481 1.481 0 0 1-2.1-.019a1.634 1.634 0 0 1-.391-1.134a2.8 2.8 0 0 1 1.182-2.177a4.813 4.813 0 0 1 3.125-.932a5.381 5.381 0 0 1 2.508.524a2.628 2.628 0 0 1 1.213 1.346a6.391 6.391 0 0 1 .244 2.2v3.55a14.665 14.665 0 0 0 .051 1.749a.661.661 0 0 0 .054.2c.085-.078.284-.225.864-.806l.819-.828v1.967l-.1.128c-.958 1.283-1.883 1.907-2.83 1.907a1.6 1.6 0 0 1-1.257-.557a1.788 1.788 0 0 1-.358-.74a9.688 9.688 0 0 1-1.433.977a3.579 3.579 0 0 1-1.514.332"/></svg> |
在 layout/_partial/widgets/toc.ejs
中,在想要的位置,如 el += editBtn
后,添加以下代码:
1 | el += `<a class="toggle-font" onclick="toggleLXGWFont()">` |
为了使这个图标随主题明暗自动变化,在自定义 css 文件中加入:
1 | /* 设置图标颜色 */ |
随机文章跳转
Info
要在主题文件夹里新增文件,不影响主题后续更新
终于来到了我最爱的生活哲学!代码参考了这个链接。创建 themes/stellar/scripts/helpers/random.js
,增加以下代码:
1 | hexo.extend.filter.register('after_render:html', function (data) { |
在主题配置文件引入 _config.stellar.yml
,inject的 head里添加
1 | - <script src="/js/random.js"></script> # 随机文章 |
然后在需要调用的位置执行 toRandomPost ()
函数即可。比如任意 dom 添加 onclick="toRandomPost ()"
好吧,我知道你肯定没听懂
反正我当时看完是一脸懵圈
不过没关系,我最后还是琢磨明白啦,下面就有填写示例,接着看就好
代码:<button onclick="toRandomPost()">随机阅读一篇文章</button>
代码:<a href="#" onclick="toRandomPost(); return false;">随机阅读一篇文章</a>
在下一节还有应用示例,请往下看——
超链接样式调整
文章内链接:加粗并下移下划线。显示效果:
在自定义 css 文件里加入:
1 | /* 文章内链接 */ |
测试链接:关于
新样式!为链接使用荧光笔下划线效果,这个和上面的样式二选一就好。显示效果:
1 | /* 文章内链接:为链接使用荧光笔下划线效果 */ |
选中文本:使用超链接高亮的背景色
在自定义 css 文件里加入:
1 | /* 选中文本:使用超链接高亮的背景色 */ |
Twikoo 评论样式优化
Title
样式优化需要改主题文件,但下面的给评论输入框加入提示是纯 css 实现的不需要改
显示效果:
只截了部分,整体效果可在评论区查看。代码全部抄自星日语大佬的这条 commit。评论区表情显示优化可参考这条 commit。
给评论输入框加入提示
显示效果:
原始代码忘记在哪里抄的了,我就修改了最后 3 行……在自定义 css 文件中加入以下内容:
1 | /* 设置文字内容 :nth-child(1)的作用是选择第几个 */ |
Stellar & Twikoo 表情包补全计划
blobcat
这个系列表情真的不要太可爱,一眼爱上
光在博客正文里用怎么够,当然还要在评论区里也安排上
blobcat 表情主要来自星日语佬。本人在学会自定义后收集癖大发,一口气制作了几个系列的表情,往现有的 blobcat里也加了几个比较好看的
Stellar 引入:blobcatplus:https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/Blob/{name}.png
Twikoo 使用链接:
1 | https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/blobcatplus.json |
表情 | 索引 | 表情 | 索引 | 表情 | 索引 |
---|---|---|---|---|---|
ablobcatheart | ablobcatheartbroken | blobcatheart | |||
blobcatheartpride | blobcatlove | blobcatkissheart | |||
blobcatsnuggle | comfyuee | comfyslep | |||
blobcatcomfysweat | blobcatcomftears | blobcatfacepalm | |||
blobcat0_0 | blobcatangry | blobbanhammerr | |||
blobcatt | blobcatblush | blobcatcoffee | |||
blobcatcry | blobcatdead | blobcatdied | |||
blobcatdisturbed | blobcatfearful | blobcatfingerguns | |||
blobcatflip | blobcatflower | blobcatgay | |||
blobcatgooglycry | blobcatneutral | blobcatopenmouth | |||
blobcatsadreach | blobcatscared | blobcatnomblobcat | |||
blobcatpresentred | blobcatread | blobcatsipsweat | |||
blobcatsnapped | blobcatthink | blobcattriumph | |||
blobcatumm | blobcatverified | blobcatbox | |||
blobcatcaged | blobcatgooglytrash | blobcatheadphones | |||
blobcathighfive | blobcatmelt | blobcatmeltthumb | |||
blobcatnotlikethis | blobcatsaitama | blobcatyandere | |||
blobcatpeek2 | blobcatpeekaboo | blobcatphoto | |||
ablobcatattentionreverse | ablobcatreachrev | ablobcatwave | |||
blobcatalt | blobcatpolice | blobcatshocked | |||
ablobcatrainbow | |||||
A_BlobCat_REEEE | A_BlobCat_Code | ablobcatknitsweats | |||
A_BlobCat_Nervous | blobcat-aww | ablobcatcry | |||
ablobcatdead |
azuki
Stellar 引入:azuki: https://cdn.jsdelivr.net/gh/Saidosi/azuki-emoji-for-waline@1.0/azukisan/{name}.png
Twikoo 使用链接:
1 | https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/xiaodouni.json |
表情 | 索引 | 表情 | 索引 | 表情 | 索引 |
---|---|---|---|---|---|
001 | 015 | 029 | |||
002 | 016 | 030 | |||
003 | 017 | 031 | |||
004 | 018 | 032 | |||
005 | 019 | 033 | |||
006 | 020 | 034 | |||
007 | 021 | 035 | |||
008 | 022 | 036 | |||
009 | 023 | 037 | |||
010 | 024 | 038 | |||
011 | 025 | 039 | |||
012 | 026 | 040 | |||
013 | 027 | ||||
014 | 028 |
neko
Stellar 引入:neko: https://cdn.jsdelivr.net/gh/2x-ercha/twikoo-magic@master/image/Yurui-Neko/{name}.png
Twikoo 使用链接:
1 | https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/neko.json |
表情 | 索引 | 表情 | 索引 | 表情 | 索引 |
---|---|---|---|---|---|
001 | 015 | 028 | |||
002 | 016 | 029 | |||
003 | 017 | 030 | |||
004 | 018 | 031 | |||
005 | 019 | 032 | |||
006 | 020 | 033 | |||
007 | 021 | 034 | |||
008 | 022 | 035 | |||
009 | 023 | 036 | |||
010 | 024 | 037 | |||
011 | 025 | 038 | |||
012 | 026 | 039 | |||
013 | 027 | ||||
014 |
dokomo
Stellar 引入: dokomo: https://cdn.jsdelivr.net/gh/infinitesum/Twikoo-emoji@master/dokomo/{name}.png
Twikoo 使用链接:
1 | https://raw.githubusercontent.com/infinitesum/Twikoo-emoji/main/dokomo/dokomo.json |
表情 | 索引 | 表情 | 索引 | 表情 | 索引 |
---|---|---|---|---|---|
dokomo-1 | dokomo-18 | dokomo-35 | |||
dokomo-2 | dokomo-19 | dokomo-36 | |||
dokomo-3 | dokomo-20 | dokomo-37 | |||
dokomo-4 | dokomo-21 | dokomo-38 | |||
dokomo-5 | dokomo-22 | dokomo-39 | |||
dokomo-6 | dokomo-23 | dokomo-40 | |||
dokomo-7 | dokomo-24 | dokomo-41 | |||
dokomo-8 | dokomo-25 | dokomo-42 | |||
dokomo-9 | dokomo-26 | dokomo-43 | |||
dokomo-10 | dokomo-27 | dokomo-44 | |||
dokomo-11 | dokomo-28 | dokomo-45 | |||
dokomo-12 | dokomo-29 | dokomo-46 | |||
dokomo-13 | dokomo-30 | dokomo-47 | |||
dokomo-14 | dokomo-31 | dokomo-48 | |||
dokomo-15 | dokomo-32 | dokomo-49 | |||
dokomo-16 | dokomo-33 | ||||
dokomo-17 | dokomo-34 |
总字数统计:“发表了x篇文章,共计x字”
注
需要修改主题文件
显示效果:
首先,安装 hexo-wordcount
插件:
1 | npm i hexo-wordcount --save |
在 themes/stellar/layout/_partial/main/footer.ejs
中,找到以下部分:
1 | // footer |
在以上代码后面添加以下代码:
1 |
|
最后的代码看上去应该像这样:
1 | ... |
在自定义 css 里,增加以下代码修改风格:
1 | .post-count { |
评论区增加可爱猫猫图片
注
需要修改主题文件
(这也能水一个)显示效果:
在 themes/stellar/layout/_partial/comments/layout.ejs
,找到下面这一部分:
1 | <div style="display: flex; align-items: center;"> |
在其后面添加:
1 | <img src="/你的/图片/路径.png" alt="描述文字" style="margin-left: 10px; height: 50px;"> |
最后代码应该长这样:
1 | <div style="display: flex; align-items: center;"> |
主页文章列表添加标签显示、字数统计
注
需要修改主题文件
显示效果:
Warning
这里加入了字数统计并将位置移到了上面,要是不想要字数统计可以将相应的代码删掉。
找到 themes/stellar/layout/_partial/main/post_list/post_card.ejs
,删掉原有的代码,替换为以下内容:
点击展开代码
1 | <% |
标签样式
新建 source/css/tagcolor-switch.css
文件,添加以下代码(颜色可以自行修改):
1 | /* 默认的浅色模式颜色 */ |
字数统计样式
在自定义 css 文件中,增加以下代码:
1 | #post-meta { |
更改暗色模式颜色
在 themes/stellar/source/css/_defines/theme.styl
里按需修改,这里就不放代码了(主要是自己改了半天还不如不改,我的审美告诉我是时候放弃)
添加分类 widget
自己挺想要的功能,效果如图:
教程写在这里:Stellar 主题中添加分类索引 Widget
添加展示最新评论 widget
显示效果可见主页,教程来自这里,毫无修改直接照搬,就不复制了。
在文章页面添加标签显示
注
需要修改主题文件
显示效果:
在 layout/_partial/main/navbar/article_banner.ejs
文件中,找到
1 | // 3.left.top: 面包屑导航 |
并在后面添加:
1 | // 在这里添加标签代码 |
toc 字体大小调整
注
需要修改主题文件
就是把文章目录字体调小了一点点。
在themes/stellar/source/css/_layout/widgets/toc.styl
文件中,找到
1 | // 各级缩进样式 |
把--fsp: $fsp1
一行注释掉:
1 | // 各级缩进样式 |