从typecho迁移到hexo

从typecho迁移到hexo

typecho & handsome 迁移到 hexo & icarus

因为 typecho 的一些令人无法忍受的问题,决定还是将 blog 迁到静态的 hexo 去。

主题使用了 @TheSnowfield 魔改的 Icarus。然后在此基础上进一步魔改(

塞个vue处理友链

修改:已经使用湖精的 friendlinks.jsx 进行静态页面生成。

参考:https://blog.awa.moe/links/

友链列表 F12 一下发现是下面这个样子。

1
2
3
4
5
6
7
8
9
<li style="background: linear-gradient(rgba(255, 255, 255, 0.937), rgba(255, 255, 255, 0.937)), url(&quot;https://avatars.githubusercontent.com/u/17957399&quot;);">
<a class="gallery-item" href="https://avatars.githubusercontent.com/u/17957399">
<img class="icon" src="https://avatars.githubusercontent.com/u/17957399">
</a>
<div class="link-title">
<a target="_blank" href="https://blog.awa.moe">Atmosphere</a>
<span>IN PURSUIT OF FREEDOM</span>
</div>
</li>

手动复制粘贴然后逐个修改听起来就不是很合理,所以用 vue 的 v-for 来填充列表是一个合理方案。

作为一个 渐进式框架,自然可以直接塞进页面里面集成。那么马上开始手搓:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<div id="app">
<ul id="friend-list" v-for="f in friends">
<li :style="{ background: 'linear-gradient(#ffffffef,#ffffffef),url('+f.icon+')' }">
<a class="gallery-item" :href="f.icon">
<img class="icon" :src="f.icon">
</a>
<div class="link-title">
<a target="_blank" :href="f.href"> {{ f.blog }} </a>
<span> {{ f.info }} </span>
</div>
</li>
</ul>
</div>

<script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.prod.js'

createApp({
data() {
return {
friends: [
{
blog: 'Atmosphere',
info: 'IN PURSUIT OF FREEDOM',
href: 'https://blog.awa.moe',
icon: 'https://avatars.githubusercontent.com/u/17957399'
},
]}
}
})
</script>

然后发现 bloginfo 显示不出来(!)

一度以为是 vue 有问题,但这几乎不太可能。而且其他动态内容都是好的。于是去查找 Hexo FAQ 发现 {{ }}Nunjucks 给提前处理掉了。

解决方法也很简单:

1
2
3
{% raw %}
<div id="app">{{ message }}</div>
{% endraw %}

效果:友链

黑暗模式修改

icarus 本身并没有黑暗模式,使用了 @TheSnowfield 魔改的 icarus 黑暗模式。

由于给 icarus 写 plugin 有点恶心。。 所以直接改他的代码。

hljs 黑暗模式

hljs 的主题是在 head.jsx 中直接写入 <head><link> 的,更改 href 即可进行切换。

icarus/layout/common/head.jsx
1
{hlTheme ? <link rel="stylesheet" href={cdn('highlight.js', '11.7.0', 'styles/' + hlTheme + '.css')} /> : null}

其实可以直接用 js 进行修改,不过还是想做成可配置的。于是采用了一些神奇的做法。

icarus/layout/plugin/theme_switcher.jsx
1
2
3
4
5
6
7
8
9
10
11
...

const theme_url = {
light: cdn('highlight.js', '11.7.0', 'styles/' + light + '.css'),
dark: cdn('highlight.js', '11.7.0', 'styles/' + dark + '.css'),
};

return <Fragment>
<link rel="stylesheet" id="hljs-theme" light={theme_url.light} dark={theme_url.dark} />

...

这样直接在 theme-switcher.js 中将这个 link 的 href 设置为 light/dark 中的值就行了。虽然看着奇怪但至少能用

icarus/source/js/theme-switcher.jsx
1
2
const hljs_css = document.getElementById('hljs-theme');
hljs_css.setAttribute('href', _get_dark_theme() ? hljs_css.getAttribute('dark') : hljs_css.getAttribute('light'));

giscus黑暗模式

参考 https://github.com/giscus/giscus/issues/336

icarus魔改

颜色修改

直接改 icarus/include/style/const.styl

链接样式修改

颜色修改后发现 链接Code 的颜色相近不好识别,于是想在链接后面加一个提示符号。

就用 fas fa-arrow-up-right-from-square 吧。那么在 <a> 中添加一个伪元素 :after。查找发现 fa-arrow-up-right-from-square 的 content 是 \f08e 于是直接填上。同时为了便于识别,在 :hover 的时候添加一个下划线。

顺便修改一下 Code 的颜色以增加对比度提升观感。Stylus 提供了一些方便的颜色函数来处理颜色。

icarus/source/css/default-light.styl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// patch links
.card-content.article
.content
p,li
a[target='_blank']
color: $primary
&:after
padding-left: 0.3rem
padding-right: 0.3rem
font-family: "Font Awesome 6 Free"
font-size: 12px
font-weight: 900
content: "\f08e"
color: lighten($primary, 20%)
&:hover
border-bottom: 1px solid lighten($primary, 20%)

code
padding: 0
color: darken($primary, 20%)
background-color: tint($primary, 95%)
overflow-wrap: break-word

给内部链接也加一个:

icarus/source/css/default-light.styl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.card-content.article
.content
p,li
a:not([target='_blank']):not(.gallery-item)
color: $primary
&:after
padding-left: 0.3rem
padding-right: 0.3rem
font-family: "Font Awesome 6 Free"
font-size: 12px
font-weight: 400
content: "\f02e"
color: lighten($primary, 20%)
&:hover
border-bottom: 1px solid lighten($primary, 20%)

效果:

二级标题添加分割线

icarus/source/css/default-light.styl
1
2
3
4
.card-content.article
.content
h2
border-bottom: 1px solid lighten($primary, 80%)

给标题添加可点击的链接提示

标题左侧的 #

icarus/source/css/default-light.styl
1
2
3
4
5
6
7
8
9
10
.card-content.article
.content
h1,h2,h3,h4,h5
&:hover
a
color: $primary
&::after
content: "#"
position: absolute
left: 0.6rem

给标题添加滚动偏移

解决始终显示 navbar 时 toc 定位不准的问题。

icarus/source/css/default-light.styl
1
2
3
4
.card-content.article
.content
h1,h2,h3,h4,h5
scroll-margin-top: 70px !important
Author

InariAimu

Posted on

2023-10-10

Updated on

2023-10-23

Licensed under