hexo-theme-shokax 0.0.3 → 0.0.4-alpha2
Sign up to get free protection for your applications and to get access to all the features.
- package/CONTRIBUTING.md +4 -0
- package/README.md +30 -4
- package/layout/_mixin/breadcrumb.pug +3 -3
- package/layout/_mixin/card.pug +5 -4
- package/layout/_mixin/comment.pug +2 -1
- package/layout/_mixin/postmeta.pug +3 -3
- package/layout/_mixin/segment.pug +2 -2
- package/layout/_mixin/sidebar.pug +4 -4
- package/layout/_mixin/widgets.pug +1 -1
- package/layout/_partials/footer.pug +3 -3
- package/layout/_partials/head/head.pug +1 -0
- package/layout/_partials/header.pug +2 -2
- package/layout/_partials/layout.pug +1 -1
- package/layout/_partials/pagination.pug +1 -1
- package/layout/_partials/post/copyright.pug +2 -2
- package/layout/_partials/post/footer.pug +2 -2
- package/layout/_partials/post/nav.pug +1 -1
- package/layout/_partials/post/post.pug +1 -1
- package/layout/_partials/post/reward.pug +1 -1
- package/layout/_partials/sidebar/menu.pug +2 -2
- package/layout/_partials/sidebar/overview.pug +1 -1
- package/layout/archive.pug +1 -1
- package/layout/category.pug +1 -1
- package/layout/page.pug +1 -1
- package/layout/post.pug +1 -1
- package/layout/tag.pug +1 -1
- package/package.json +1 -1
- package/source/css/_common/components/post/post.styl +5 -0
- package/source/css/_common/components/third-party/valine.styl +4 -0
- package/source/css/_common/scaffolding/base.styl +25 -0
- package/source/js/_app/global.js +6 -11
- package/source/js/_app/library.js +22 -10
- package/source/js/_app/page.js +18 -16
- package/source/js/_app/vue.js +1 -1
package/CONTRIBUTING.md
CHANGED
@@ -25,6 +25,10 @@
|
|
25
25
|
2. 您愿意接受长时间的等待(一般不超过15天)
|
26
26
|
3. 您能够接受因代码质量等问题而提出的疑问,并愿意讨论是否接受更改
|
27
27
|
|
28
|
+
有关issues的说明:
|
29
|
+
1. 如果您愿意开发某 issues 的提议功能或修复 bug,建议在对应 issue 下评论说明一下,避免闭门造车和重复造轮子的惨剧
|
30
|
+
2. 您应该在对应 PR 提交时绑定对应 issue,以便进行统计
|
31
|
+
|
28
32
|
## Github PR
|
29
33
|
此处为在使用 Github PR 提交时应注意的事:
|
30
34
|
- 默认你对 Git、GitHub 已经有了一定的了解,并且懂得使用 PR(此方面问题可以去讨论区发起 Q&A)
|
package/README.md
CHANGED
@@ -9,16 +9,33 @@
|
|
9
9
|
诞生原因是目前shoka已经两年没有更新了,积压了大量BUG和功能请求。\
|
10
10
|
本项目处于高强度开发期,但github仓库版本已基本可用 \
|
11
11
|
二次开发与常见问题请看wiki \
|
12
|
-
`0.0.2-alpha2`开始,`lantern`和`qweather`已迁移为插件
|
13
|
-
插件系统已完工,食用方法见[awesome-shokaX](https://github.com/zkz098/awesome-shokaX)
|
12
|
+
`0.0.2-alpha2`开始,`lantern`和`qweather`已迁移为插件
|
14
13
|
|
15
|
-
|
14
|
+
shokaX的社区资源导航和插件仓库为[awesome-shokaX](https://github.com/zkz098/awesome-shokaX)
|
15
|
+
|
16
|
+
## 💬 和shoka的区别
|
16
17
|
原先shoka使用了javascript+Native+nunjucks的技术 \
|
17
18
|
而shokaX则使用了typescript+Vue 3+Pug的技术搭配 \
|
18
19
|
图标库可能会更换为Font Awesome 6 \
|
19
20
|
更改了大量难以访问的CDN链接
|
20
21
|
|
21
|
-
##
|
22
|
+
## ✨ 功能清单
|
23
|
+
|
24
|
+
| 功能名称 | 实现状态 | 功能名称 | 实现状态 |
|
25
|
+
|:--------:|:----:|:------------:|:----:|
|
26
|
+
| PWA支持 | ✅ | JSD拆分 | ✅ |
|
27
|
+
| 注入API | ✅ | 社区插件系统 | ✅ |
|
28
|
+
| 自定义字体 | ✅* | 自定义样式 | ✅* |
|
29
|
+
| 多种评论系统支持 | ✅ | 用户行为分析支持 | ✅ |
|
30
|
+
| 底部备案号 | ✅ | 自定义页尾 | ✅* |
|
31
|
+
| CSS渐变封面 | ✅ | typescript支持 | ✅^ |
|
32
|
+
|
33
|
+
备注:
|
34
|
+
- *: 需要使用注入API实现
|
35
|
+
- ^: 仅page js部分,hexo script未实现
|
36
|
+
|
37
|
+
|
38
|
+
## 🔧 如何安装?
|
22
39
|
建议使用[ShokaX-CLI](https://github.com/zkz098/shokaX-CLI) ,执行下列命令即可:
|
23
40
|
```bash
|
24
41
|
npm i shokax-cli --location=global
|
@@ -27,6 +44,15 @@ SXC install shokaX
|
|
27
44
|
```
|
28
45
|
后续配置请点[这里](https://www.kaitaku.xyz/webbuild/shokaX/) 查看
|
29
46
|
|
47
|
+
releases及npm的版本号区别如下:
|
48
|
+
- x.x.x-alpha版本是早期测试版,部分未经测试环境测试,不能保证正常运行
|
49
|
+
- x.x.x-beta(目前还没有)是测试版,可以保证正常生成,但可能存在bug
|
50
|
+
- x.x.x是相对稳定的版本,基本上不存在严重BUG
|
51
|
+
|
52
|
+
github仓库建议通过右边的 releases 下载,步骤为:
|
53
|
+
- 点击 Releases 的 Latest 版本
|
54
|
+
- 下载 Assets 中的 `Source code(zip)`
|
55
|
+
- 解压即可作为主题使用
|
30
56
|
# 许可证
|
31
57
|
许可证: BSD-3-Clause \
|
32
58
|
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fzkz098%2Fhexo-theme-shokaX.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fzkz098%2Fhexo-theme-shokaX?ref=badge_large)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
mixin BCRender(post, home)
|
2
2
|
if home
|
3
3
|
!= '<div class="breadcrumb" itemListElement itemscope itemtype="https://schema.org/BreadcrumbList">'
|
4
|
-
i(class="
|
4
|
+
i(class="fa fa-solid fa-house")
|
5
5
|
span
|
6
6
|
a(href=url_for(site.path))
|
7
7
|
!= __('menu.home')
|
@@ -10,7 +10,7 @@ mixin BCRender(post, home)
|
|
10
10
|
if post.categories && post.categories.length
|
11
11
|
- var cat_length = post.categories.length
|
12
12
|
if home
|
13
|
-
i(class="
|
13
|
+
i(class="fa fa-solid fa-angle-right")
|
14
14
|
each cat,index in post.categories.toArray()
|
15
15
|
if home
|
16
16
|
if index===cat_length
|
@@ -29,5 +29,5 @@ mixin BCRender(post, home)
|
|
29
29
|
a(href=url_for(cat.path) title=__('post.in')+cat.name)
|
30
30
|
!= cat.name
|
31
31
|
if cat_length > 1 && index !== cat_length
|
32
|
-
i(class="
|
32
|
+
i(class="fa fa-solid fa-angle-right")
|
33
33
|
!= '</div>'
|
package/layout/_mixin/card.pug
CHANGED
@@ -12,10 +12,11 @@ mixin CardRender(item)
|
|
12
12
|
!= item.top.name
|
13
13
|
div(class="info")
|
14
14
|
if item.link
|
15
|
-
- var postTitleIcon = '<i class="
|
15
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
16
16
|
- var postText = itemname || item.link || __('post.untitled')
|
17
|
+
- var tempI = postText + (postTitleIcon || '')
|
17
18
|
div(class="ribbon")
|
18
|
-
!= _url(item.link ,
|
19
|
+
!= _url(item.link , tempI , {itemprop: 'url', title: postText})
|
19
20
|
div(class="inner")
|
20
21
|
- var len = ''
|
21
22
|
if item.child
|
@@ -30,8 +31,8 @@ mixin CardRender(item)
|
|
30
31
|
div(class="meta footer")
|
31
32
|
if item.top
|
32
33
|
span
|
33
|
-
!= _url(item.top.path, '<i class="
|
34
|
+
!= _url(item.top.path, '<i class="fa fa-solid fa-flag"></i>'+item.top.name, {itemprop: 'url', title: item.top.name})
|
34
35
|
span
|
35
|
-
i(class="
|
36
|
+
i(class="fa fa-solid fa-file")
|
36
37
|
!= len
|
37
38
|
!= _url(item.path, 'more...', {itemprop: 'url', title: itemname, class: 'btn'})
|
@@ -33,6 +33,7 @@ mixin CommentRender()
|
|
33
33
|
else if gt
|
34
34
|
div(class="warp" id="gtcomments")
|
35
35
|
script(type="text/javascript" data-pjax).
|
36
|
+
const gproxy = theme.gitalk.proxy || undefined
|
36
37
|
const gitalk = new Gitalk({
|
37
38
|
clientID: '#{theme.gitalk.clientID}',
|
38
39
|
clientSecret: '#{theme.gitalk.clientSecret}',
|
@@ -41,7 +42,7 @@ mixin CommentRender()
|
|
41
42
|
admin: #{theme.gitalk.admin},
|
42
43
|
id: location.pathname, // Ensure uniqueness and length less than 50
|
43
44
|
distractionFreeMode: false, // Facebook-like distraction free mode
|
44
|
-
proxy: "#{
|
45
|
+
proxy: "#{gproxy}"
|
45
46
|
});
|
46
47
|
gitalk.render("gtcomments")
|
47
48
|
else if gs
|
@@ -5,7 +5,7 @@ mixin PMRender(item, full)
|
|
5
5
|
- var create_title = __('post.created') + __('symbol.colon') + full_date(item.date)
|
6
6
|
span(class="item" title=create_title)
|
7
7
|
span(class="icon")
|
8
|
-
i(class="
|
8
|
+
i(class="fa fa-solid fa-calendar-days")
|
9
9
|
if full
|
10
10
|
span(class="text")
|
11
11
|
!= __('post.posted')
|
@@ -14,7 +14,7 @@ mixin PMRender(item, full)
|
|
14
14
|
if theme.post.count
|
15
15
|
span(class="item" title=__('symbols_count_time.count'))
|
16
16
|
span(class="icon")
|
17
|
-
i(class="
|
17
|
+
i(class="fa fa-solid fa-pen-nib")
|
18
18
|
if full
|
19
19
|
span(class="text")
|
20
20
|
!= __('symbols_count_time.count')
|
@@ -23,7 +23,7 @@ mixin PMRender(item, full)
|
|
23
23
|
!= __('symbols_count_time.word')
|
24
24
|
span(class="item" title=__('symbols_count_time.time'))
|
25
25
|
span(class="icon")
|
26
|
-
i(class="
|
26
|
+
i(class="fa fa-solid fa-clock")
|
27
27
|
if full
|
28
28
|
span(class="text")
|
29
29
|
!= __('symbols_count_time.time')
|
@@ -4,7 +4,7 @@ mixin SMRender(item)
|
|
4
4
|
- var link1 = item.link || item.path
|
5
5
|
- var gradient = theme?.experiments?.gradient
|
6
6
|
if item.link
|
7
|
-
- var postTitleIcon = '<i class="
|
7
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
8
8
|
- var postText = item.title || item.link || __('post.untitled')
|
9
9
|
article(class="item")
|
10
10
|
if gradient
|
@@ -27,6 +27,6 @@ mixin SMRender(item)
|
|
27
27
|
div(class="meta footer")
|
28
28
|
span
|
29
29
|
- var lastcat = item.categories.last()
|
30
|
-
!= _url(lastcat.path, '<i class="
|
30
|
+
!= _url(lastcat.path, '<i class="fa fa-solid fa-flag"></i>' + lastcat.name, {itemprop: 'url', title: lastcat.name})
|
31
31
|
!= _url(link1, 'more...', {itemprop: 'url', title: postText, class: 'btn'})
|
32
32
|
|
@@ -25,12 +25,12 @@ mixin sidebarRender(display_toc)
|
|
25
25
|
li(class="prev pjax")
|
26
26
|
if page && page.prev
|
27
27
|
if prevlink
|
28
|
-
!= _url(prevlink, '<i class="
|
28
|
+
!= _url(prevlink, '<i class="fa fa-solid fa-chevron-left"></i>', {rel: 'prev', title: __('post.prev')})
|
29
29
|
li(class="up")
|
30
|
-
i(class="
|
30
|
+
i(class="fa fa-solid fa-arrow-up")
|
31
31
|
li(class="down")
|
32
|
-
i(class="
|
32
|
+
i(class="fa fa-solid fa-arrow-down")
|
33
33
|
li(class="next pjax")
|
34
34
|
if nextlink
|
35
|
-
!= _url(nextlink, '<i class="
|
35
|
+
!= _url(nextlink, '<i class="fa fa-solid fa-chevron-right"></i>', {rel: 'next', title: __('post.next')})
|
36
36
|
li(class="percent")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
mixin field(item)
|
2
2
|
if item.link
|
3
|
-
- var postTitleIcon = '<i class="
|
3
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
4
4
|
li(class="item")
|
5
5
|
+BCRender(item, false)
|
6
6
|
- var postText = item.title || item.link || __('post.untitled')
|
@@ -5,18 +5,18 @@ div(class="status")
|
|
5
5
|
span(itemprop="copyrightYear")
|
6
6
|
!= copyright_year
|
7
7
|
span(class="with-love")
|
8
|
-
i(class=`
|
8
|
+
i(class=`fa fa-solid fa-${ theme.footer.icon.name }`)
|
9
9
|
span(class="author" itemprop="copyrightHolder")
|
10
10
|
!= `${author} @ ${ alternate?alternate:title}`
|
11
11
|
if theme.footer.count
|
12
12
|
div(class="count")
|
13
13
|
span(class="post-meta-item-icon")
|
14
|
-
i(class="
|
14
|
+
i(class="fa fa-solid fa-chart-area")
|
15
15
|
span(title=__('symbols_count_time.count_total'))
|
16
16
|
!= `${ symbolsCountTotal(site) } ${__('symbols_count_time.word')}`
|
17
17
|
span(class="post-meta-divider") |
|
18
18
|
span(class="post-meta-item-icon")
|
19
|
-
i(class="
|
19
|
+
i(class="fa fa-solid fa-coffee")
|
20
20
|
span(title=__('symbols_count_time.time_total'))
|
21
21
|
!= symbolsTimeTotal(site, config.symbols_count_time.awl, config.symbols_count_time.wpm, __('symbols_count_time.time_minutes'))
|
22
22
|
//- span(id="timeDate")
|
@@ -33,6 +33,7 @@ link(rel="alternate" type="application/json" title=siteTitle href=feedLink)
|
|
33
33
|
if fontConfig
|
34
34
|
!= _vendor_font()
|
35
35
|
!= _css('app.css')
|
36
|
+
link(rel="stylesheet" type="text/css" href="https://cdn.staticfile.org/font-awesome/6.2.1/css/all.min.css")
|
36
37
|
- var debugVue = theme?.experiments?.debug
|
37
38
|
if debugVue
|
38
39
|
script(src="https://cdn.staticfile.org/vue/3.2.45/vue.global.js")
|
@@ -11,8 +11,8 @@ nav(id="nav")
|
|
11
11
|
!= alternate || title
|
12
12
|
ul(class="right" id="rightNav")
|
13
13
|
li(class="item theme" @click="changeThemeByBtn")
|
14
|
-
i(class="
|
14
|
+
i(class="fa fa-solid fa-sunrise")
|
15
15
|
li(class="item search")
|
16
|
-
i(class="
|
16
|
+
i(class="fa fa-solid fa-magnifying-glass")
|
17
17
|
!= shokax_inject('rightNav')
|
18
18
|
|
@@ -65,7 +65,7 @@ html(lang=page.language?page.language:config.language, style=theme.grayMode ? 'f
|
|
65
65
|
div(class="widgets")
|
66
66
|
+WRender
|
67
67
|
!= partial('_partials/footer.pug', {}, {cache: true})
|
68
|
-
- var ccIcon = '<i class="
|
68
|
+
- var ccIcon = '<i class="fa fa-solid fa-creative-commons"></i>'
|
69
69
|
- var ccText = theme.creative_commons.license.toUpperCase()
|
70
70
|
<script data-config type="text/javascript" >
|
71
71
|
| var LOCAL = {
|
@@ -1,4 +1,4 @@
|
|
1
1
|
if page.prev || page.next
|
2
2
|
nav(class="pagination")
|
3
3
|
div(class="inner")
|
4
|
-
!= paginator({prev_text: '<i class="
|
4
|
+
!= paginator({prev_text: '<i class="fa fa-solid fa-angle-left" aria-label="' + __('accessibility.prev_page') + '"></i>',next_text: '<i class="fa fa-solid fa-angle-right" aria-label="' + __('accessibility.next_page') + '"></i>',mid_size : 1,escape : false})
|
@@ -1,5 +1,5 @@
|
|
1
1
|
if page.copyright !== false
|
2
|
-
- var ccIcon = '<i class="
|
2
|
+
- var ccIcon = '<i class="fa fa-brands fa-creative-commons"><em>(CC)</em></i>'
|
3
3
|
- var ccText = theme.creative_commons.license.toUpperCase()
|
4
4
|
div(id="copyright")
|
5
5
|
ul
|
@@ -7,7 +7,7 @@ if page.copyright !== false
|
|
7
7
|
strong
|
8
8
|
!= __('post.copyright.author') + __('symbol.colon')
|
9
9
|
!= page.author || author
|
10
|
-
i(class="
|
10
|
+
i(class="fa fa-solid fa-at")
|
11
11
|
em @
|
12
12
|
!= title
|
13
13
|
li(class="link")
|
@@ -1,12 +1,12 @@
|
|
1
1
|
div(class="meta")
|
2
2
|
if date(post.date) != date(post.updated) || time(post.date) != time(post.updated)
|
3
3
|
span(class="icon")
|
4
|
-
i(class="
|
4
|
+
i(class="fa fa-solid fa-eye")
|
5
5
|
span 此文章已被阅读次数:
|
6
6
|
span(id="twikoo_visitors" class="waline-pageview-count" data-path=post.path) 正在加载...
|
7
7
|
span(class="item")
|
8
8
|
span(class="icon")
|
9
|
-
i(class="
|
9
|
+
i(class="fa fa-solid fa-calendar-check")
|
10
10
|
span(class="text")
|
11
11
|
!= __('post.edited')
|
12
12
|
time(title=__('post.modified') + __('symbol.colon') + full_date(post.updated) itemprop="dateModified" datetime=moment(post.updated).format())
|
@@ -1,7 +1,7 @@
|
|
1
1
|
mixin navpost(item, type)
|
2
2
|
- var postText = item.title || item.link || __('post.untitled')
|
3
3
|
- var lastcat = item.categories.last()
|
4
|
-
- var itemlink=`<span class="type">${__('post.' + type)}</span><span class="category"><i class="
|
4
|
+
- var itemlink=`<span class="type">${__('post.' + type)}</span><span class="category"><i class="fa fa-solid fa-flag"></i>${lastcat?.name}</span><h3>${ postText }</h3>`
|
5
5
|
!= _url(item.path, itemlink, {itemprop: 'url', rel: type, 'data-background-image': _cover(item), title: postText})
|
6
6
|
|
7
7
|
div(class="post-nav")
|
@@ -17,7 +17,7 @@ article(itemscope itemtype="http://schema.org/Article" class="post block" lang=t
|
|
17
17
|
div(class="tags")
|
18
18
|
each tag in post.tags.toArray()
|
19
19
|
a(href!=url_for(tag.path) rel="tag")
|
20
|
-
i(class="
|
20
|
+
i(class="fa fa-solid fa-tag")
|
21
21
|
!= tag.name
|
22
22
|
footer
|
23
23
|
!= partial('_partials/post/footer.pug')
|
@@ -3,7 +3,7 @@ mixin item(name, path, parent, dropdown, sublist)
|
|
3
3
|
- var path = path.split('||')
|
4
4
|
- var itemURL = path[0].trim()
|
5
5
|
- if (!itemURL.startsWith('http')){ itemURL = itemURL.replace('//', '/') }
|
6
|
-
- var menuIcon = '<i class="
|
6
|
+
- var menuIcon = '<i class="fa fa-solid fa-' + trimn(path[1]) + '"></i>'
|
7
7
|
- var menuText = __('menu.' + name).replace('menu.', '')
|
8
8
|
if parent
|
9
9
|
li(class="item dropdown")
|
@@ -21,7 +21,7 @@ mixin item(name, path, parent, dropdown, sublist)
|
|
21
21
|
- var menuText = __('menu.' + subname).replace('menu.', '')
|
22
22
|
if subname == 'default'
|
23
23
|
- var menuText = __('menu.' + name).replace('menu.', '')
|
24
|
-
- var menuIcon = '<i class="
|
24
|
+
- var menuIcon = '<i class="fa fa-solid fa-' + trimn(path[1]) + '"></i>'
|
25
25
|
li(class="item")
|
26
26
|
!= _url(itemURL, menuIcon + menuText, {rel: 'section'})
|
27
27
|
else
|
@@ -32,7 +32,7 @@ nav(class="state")
|
|
32
32
|
div(class="social")
|
33
33
|
each link, name in theme.social
|
34
34
|
- var sidebarURL = link.split('||')[0].trim()
|
35
|
-
- var sidebarIcon = '<i class="
|
35
|
+
- var sidebarIcon = '<i class="fa fa-solid fa-' + link.split('||')[1].trim() + '"></i>'
|
36
36
|
!= _url(sidebarURL, sidebarIcon, {title: sidebarURL, class: 'item ' + name})
|
37
37
|
|
38
38
|
!= shokax_inject('sidebar')
|
package/layout/archive.pug
CHANGED
@@ -103,7 +103,7 @@ block content
|
|
103
103
|
a(href=url_for(cat.path)) #{cat.name}
|
104
104
|
div(class="title")
|
105
105
|
if post.link
|
106
|
-
- var postTitleIcon = '<i class="
|
106
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
107
107
|
- var postText = post.title || post.link
|
108
108
|
!= _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
|
109
109
|
else
|
package/layout/category.pug
CHANGED
@@ -53,7 +53,7 @@ block content
|
|
53
53
|
) #{date(post.date, 'MM-DD')}
|
54
54
|
div(class="title")
|
55
55
|
if post.link
|
56
|
-
- var postTitleIcon = '<i class="
|
56
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
57
57
|
- var postText = post.title || post.link
|
58
58
|
!= _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
|
59
59
|
else
|
package/layout/page.pug
CHANGED
@@ -16,7 +16,7 @@ block title
|
|
16
16
|
block header
|
17
17
|
h1(itemprop="name headline")
|
18
18
|
if page.link
|
19
|
-
- var postTitleIcon = '<i class="
|
19
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
20
20
|
- var postText = page.title || page.link
|
21
21
|
!= _url(page.link, postText + postTitleIcon, {class: 'link external', itemprop: 'url'})
|
22
22
|
else
|
package/layout/post.pug
CHANGED
@@ -17,7 +17,7 @@ block title
|
|
17
17
|
block header
|
18
18
|
h1(itemprop="name headline")
|
19
19
|
if page.link
|
20
|
-
- var postTitleIcon = '<i class="
|
20
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
21
21
|
- var postText = page.title || page.link
|
22
22
|
!= _url(page.link, postText + postTitleIcon, {class: 'link external', itemprop: 'url'})
|
23
23
|
else
|
package/layout/tag.pug
CHANGED
@@ -33,7 +33,7 @@ block content
|
|
33
33
|
!= cat.name
|
34
34
|
div(class="title")
|
35
35
|
if post.link
|
36
|
-
- var postTitleIcon = '<i class="
|
36
|
+
- var postTitleIcon = '<i class="fa fa-solid fa-up-right-from-square"></i>'
|
37
37
|
- var postText = post.title || post.link
|
38
38
|
!= _url(post.link, postText + postTitleIcon, {class: 'external', itemprop: 'url'})
|
39
39
|
else
|
package/package.json
CHANGED
@@ -145,6 +145,7 @@ input, textarea {
|
|
145
145
|
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.242/fonts/webfonts/JetBrainsMono-Regular.woff2") format("woff2");
|
146
146
|
}
|
147
147
|
|
148
|
+
// TODO
|
148
149
|
.ic {
|
149
150
|
font-family: "ic" !important;
|
150
151
|
-webkit-font-smoothing: antialiased;
|
@@ -158,15 +159,39 @@ input, textarea {
|
|
158
159
|
line-height: 1;
|
159
160
|
}
|
160
161
|
|
162
|
+
.fa {
|
163
|
+
-webkit-font-smoothing: antialiased;
|
164
|
+
-moz-osx-font-smoothing: grayscale;
|
165
|
+
text-align: center;
|
166
|
+
width: 1.25em;
|
167
|
+
display: inline-block;
|
168
|
+
font-style: normal;
|
169
|
+
font-variant: normal;
|
170
|
+
text-rendering: auto;
|
171
|
+
line-height: 1;
|
172
|
+
}
|
173
|
+
|
174
|
+
// TODO
|
161
175
|
.ic em {
|
162
176
|
font-size: 0;
|
163
177
|
}
|
164
178
|
|
179
|
+
.fa em {
|
180
|
+
font-size: 0;
|
181
|
+
}
|
182
|
+
|
183
|
+
// TODO
|
165
184
|
.ic-lg {
|
166
185
|
font-size: 1.33333em;
|
167
186
|
line-height: .75em;
|
168
187
|
vertical-align: -.0667em;
|
169
188
|
}
|
189
|
+
|
190
|
+
.fa-lg {
|
191
|
+
font-size: 1.33333em;
|
192
|
+
line-height: .75em;
|
193
|
+
vertical-align: -.0667em;
|
194
|
+
}
|
170
195
|
//.weather {
|
171
196
|
// color: var(--text-color) !important;
|
172
197
|
//}
|
package/source/js/_app/global.js
CHANGED
@@ -25,16 +25,16 @@ let LOCAL_HASH = 0;
|
|
25
25
|
let LOCAL_URL = window.location.href;
|
26
26
|
let pjax;
|
27
27
|
const changeTheme = function (type) {
|
28
|
-
const btn = $dom('.theme .
|
28
|
+
const btn = $dom('.theme .fa');
|
29
29
|
if (type === 'dark') {
|
30
30
|
HTML.attr('data-theme', type);
|
31
|
-
btn.removeClass('
|
32
|
-
btn.addClass('
|
31
|
+
btn.removeClass('fa-sunrise');
|
32
|
+
btn.addClass('fa-moon-stars');
|
33
33
|
}
|
34
34
|
else {
|
35
35
|
HTML.attr('data-theme', null);
|
36
|
-
btn.removeClass('
|
37
|
-
btn.addClass('
|
36
|
+
btn.removeClass('fa-moon-stars');
|
37
|
+
btn.addClass('fa-sunrise');
|
38
38
|
}
|
39
39
|
};
|
40
40
|
const autoDarkmode = function () {
|
@@ -43,12 +43,7 @@ const autoDarkmode = function () {
|
|
43
43
|
changeTheme('dark');
|
44
44
|
}
|
45
45
|
else {
|
46
|
-
|
47
|
-
changeTheme('dark');
|
48
|
-
}
|
49
|
-
else {
|
50
|
-
changeTheme();
|
51
|
-
}
|
46
|
+
changeTheme();
|
52
47
|
}
|
53
48
|
}
|
54
49
|
};
|
@@ -149,7 +149,7 @@ const getScript = function (url, callback, condition) {
|
|
149
149
|
else {
|
150
150
|
let script = document.createElement('script');
|
151
151
|
script.onload = function (_, isAbort) {
|
152
|
-
if (isAbort || !script.readyState
|
152
|
+
if (isAbort || !script.readyState) {
|
153
153
|
console.log("abort!");
|
154
154
|
script.onload = null;
|
155
155
|
script = undefined;
|
@@ -288,15 +288,27 @@ const pjaxScript = function (element) {
|
|
288
288
|
}
|
289
289
|
parent.appendChild(script);
|
290
290
|
};
|
291
|
-
const pageScroll =
|
291
|
+
const pageScroll = (target, offset, complete) => {
|
292
292
|
const opt = {
|
293
|
-
|
294
|
-
|
295
|
-
easing: 'easeInOutQuad',
|
296
|
-
scrollTop: offset || (typeof target === 'number' ? target : (target ? target.top() + document.documentElement.scrollTop - siteNavHeight : 0)),
|
297
|
-
complete: function () {
|
298
|
-
complete && complete();
|
299
|
-
}
|
293
|
+
left: 0,
|
294
|
+
behavior: "smooth"
|
300
295
|
};
|
301
|
-
|
296
|
+
if (typeof target === "number") {
|
297
|
+
opt.top = target;
|
298
|
+
}
|
299
|
+
else {
|
300
|
+
if (typeof target === 'number') {
|
301
|
+
opt.top = offset || target;
|
302
|
+
}
|
303
|
+
else {
|
304
|
+
if (offset || target) {
|
305
|
+
opt.top = target.top() + document.documentElement.scrollTop - siteNavHeight;
|
306
|
+
}
|
307
|
+
else {
|
308
|
+
opt.top = 0;
|
309
|
+
}
|
310
|
+
}
|
311
|
+
}
|
312
|
+
scrollTo(opt);
|
313
|
+
complete && complete();
|
302
314
|
};
|
package/source/js/_app/page.js
CHANGED
@@ -175,7 +175,7 @@ const postBeauty = function () {
|
|
175
175
|
$dom.each('figure.highlight', function (element) {
|
176
176
|
const code_container = element.child('.code-container');
|
177
177
|
const caption = element.child('figcaption');
|
178
|
-
element.insertAdjacentHTML('beforeend', '<div class="operation"><span class="breakline-btn"><i class="
|
178
|
+
element.insertAdjacentHTML('beforeend', '<div class="operation"><span class="breakline-btn"><i class="fa fa-solid fa-align-left"></i></span><span class="copy-btn"><i class="fa fa-solid fa-clipboard"></i></span><span class="fullscreen-btn"><i class="fa fa-solid fa-expand"></i></span></div>');
|
179
179
|
const copyBtn = element.child('.copy-btn');
|
180
180
|
if (LOCAL.nocopy) {
|
181
181
|
copyBtn.remove();
|
@@ -190,14 +190,14 @@ const postBeauty = function () {
|
|
190
190
|
comma = '\n';
|
191
191
|
});
|
192
192
|
clipBoard(code, function (result) {
|
193
|
-
target.child('.
|
193
|
+
target.child('.fa').className = result ? 'fa fa-solid fa-check' : 'fa fa-solid fa-times';
|
194
194
|
target.blur();
|
195
195
|
showtip(LOCAL.copyright);
|
196
196
|
});
|
197
197
|
}, { passive: true });
|
198
198
|
copyBtn.addEventListener('mouseleave', function (event) {
|
199
199
|
setTimeout(function () {
|
200
|
-
event.target.child('.
|
200
|
+
event.target.child('.fa').className = 'fa fa-solid fa-clipboard';
|
201
201
|
}, 1000);
|
202
202
|
});
|
203
203
|
}
|
@@ -206,11 +206,11 @@ const postBeauty = function () {
|
|
206
206
|
const target = event.currentTarget;
|
207
207
|
if (element.hasClass('breakline')) {
|
208
208
|
element.removeClass('breakline');
|
209
|
-
target.child('.
|
209
|
+
target.child('.fa').className = 'fa fa-solid fa-align-left';
|
210
210
|
}
|
211
211
|
else {
|
212
212
|
element.addClass('breakline');
|
213
|
-
target.child('.
|
213
|
+
target.child('.fa').className = 'fa fa-solid fa-align-justify';
|
214
214
|
}
|
215
215
|
});
|
216
216
|
const fullscreenBtn = element.child('.fullscreen-btn');
|
@@ -218,7 +218,7 @@ const postBeauty = function () {
|
|
218
218
|
element.removeClass('fullscreen');
|
219
219
|
element.scrollTop = 0;
|
220
220
|
BODY.removeClass('fullscreen');
|
221
|
-
fullscreenBtn.child('.
|
221
|
+
fullscreenBtn.child('.fa').className = 'fa fa-solid fa-expand';
|
222
222
|
};
|
223
223
|
const fullscreenHandle = function (event) {
|
224
224
|
const target = event.currentTarget;
|
@@ -234,7 +234,7 @@ const postBeauty = function () {
|
|
234
234
|
else {
|
235
235
|
element.addClass('fullscreen');
|
236
236
|
BODY.addClass('fullscreen');
|
237
|
-
fullscreenBtn.child('.
|
237
|
+
fullscreenBtn.child('.fa').className = 'fa fa-solid fa-compress';
|
238
238
|
if (code_container && code_container.find('tr').length > 15) {
|
239
239
|
const showBtn = code_container.child('.show-btn');
|
240
240
|
code_container.style.maxHeight = '';
|
@@ -246,7 +246,7 @@ const postBeauty = function () {
|
|
246
246
|
caption && caption.addEventListener('click', fullscreenHandle);
|
247
247
|
if (code_container && code_container.find('tr').length > 15) {
|
248
248
|
code_container.style.maxHeight = '300px';
|
249
|
-
code_container.insertAdjacentHTML('beforeend', '<div class="show-btn"><i class="
|
249
|
+
code_container.insertAdjacentHTML('beforeend', '<div class="show-btn"><i class="fa fa-solid fa-angle-down"></i></div>');
|
250
250
|
const showBtn = code_container.child('.show-btn');
|
251
251
|
const hideCode = function () {
|
252
252
|
code_container.style.maxHeight = '300px';
|
@@ -414,7 +414,7 @@ const algoliaSearch = function (pjax) {
|
|
414
414
|
if (!siteSearch) {
|
415
415
|
siteSearch = BODY.createChild('div', {
|
416
416
|
id: 'search',
|
417
|
-
innerHTML: '<div class="inner"><div class="header"><span class="icon"><i class="
|
417
|
+
innerHTML: '<div class="inner"><div class="header"><span class="icon"><i class="fa fa-solid fa-magnifying-glass"></i></span><div class="search-input-container"></div><span class="close-btn"><i class="fa fa-solid fa-times-circle"></i></span></div><div class="results"><div class="inner"><div id="search-stats"></div><div id="search-hits"></div><div id="search-pagination"></div></div></div></div>'
|
418
418
|
});
|
419
419
|
}
|
420
420
|
const search = instantsearch({
|
@@ -459,7 +459,7 @@ const algoliaSearch = function (pjax) {
|
|
459
459
|
container: '#search-hits',
|
460
460
|
templates: {
|
461
461
|
item: function (data) {
|
462
|
-
const cats = data.categories ? '<span>' + data.categories.join('<i class="
|
462
|
+
const cats = data.categories ? '<span>' + data.categories.join('<i class="fa fa-solid fa-angle-right"></i>') + '</span>' : '';
|
463
463
|
return '<a href="' + CONFIG.root + data.path + '">' + cats + data._highlightResult.title.value + '</a>';
|
464
464
|
},
|
465
465
|
empty: function (data) {
|
@@ -478,10 +478,10 @@ const algoliaSearch = function (pjax) {
|
|
478
478
|
showFirst: false,
|
479
479
|
showLast: false,
|
480
480
|
templates: {
|
481
|
-
first: '<i class="
|
482
|
-
last: '<i class="
|
483
|
-
previous: '<i class="
|
484
|
-
next: '<i class="
|
481
|
+
first: '<i class="fa fa=solid fa-angle-double-left"></i>',
|
482
|
+
last: '<i class="fa fa-solid fa-angle-double-right"></i>',
|
483
|
+
previous: '<i class="fa fa-solid fa-angle-left"></i>',
|
484
|
+
next: '<i class="fa fa-solid fa-angle-right"></i>'
|
485
485
|
},
|
486
486
|
cssClasses: {
|
487
487
|
root: 'pagination',
|
@@ -530,7 +530,7 @@ const domInit = function () {
|
|
530
530
|
if (!toolBtn) {
|
531
531
|
toolBtn = siteHeader.createChild('div', {
|
532
532
|
id: 'tool',
|
533
|
-
innerHTML: '<div class="item player"></div><div class="item contents"><i class="
|
533
|
+
innerHTML: '<div class="item player"></div><div class="item contents"><i class="fa fa-solid fa-list-ol"></i></div><div class="item chat"><i class="fa fa-solid fa-comments"></i></div><div class="item back-to-top"><i class="fa fa-solid fa-arrow-up"></i><span>0%</span></div>'
|
534
534
|
});
|
535
535
|
}
|
536
536
|
toolPlayer = toolBtn.child('.player');
|
@@ -618,6 +618,8 @@ const siteInit = function () {
|
|
618
618
|
});
|
619
619
|
siteRefresh(1);
|
620
620
|
};
|
621
|
-
window.addEventListener('DOMContentLoaded', siteInit
|
621
|
+
window.addEventListener('DOMContentLoaded', siteInit, {
|
622
|
+
passive: true
|
623
|
+
});
|
622
624
|
console.log('%c Theme.ShokaX v' + CONFIG.version + ' %c https://github.com/zkz098/hexo-theme-shokaX ', 'color: white; background: #e9546b; padding:5px 0;', 'padding:4px;border:1px solid #e9546b;');
|
623
625
|
console.log('%c by kaitaku ' + '%c https://www.kaitaku.xyz', 'color: white; background: #00bfff; padding: 5px 3px;', 'padding: 4px;border:1px solid #00bfff');
|
package/source/js/_app/vue.js
CHANGED
@@ -5,7 +5,7 @@ Vue.createApp({
|
|
5
5
|
methods: {
|
6
6
|
changeThemeByBtn() {
|
7
7
|
let c;
|
8
|
-
const btn = $dom('.theme').child('.
|
8
|
+
const btn = $dom('.theme').child('.fa');
|
9
9
|
const neko = BODY.createChild('div', {
|
10
10
|
id: 'neko',
|
11
11
|
innerHTML: '<div class="planet"><div class="sun"></div><div class="moon"></div></div><div class="body"><div class="face"><section class="eyes left"><span class="pupil"></span></section><section class="eyes right"><span class="pupil"></span></section><span class="nose"></span></div></div>'
|