hexo-theme-particlex 2.7.5 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/_config.yml +1 -1
- package/layout/categories.ejs +70 -70
- package/layout/import.ejs +16 -16
- package/layout/layout.ejs +2 -2
- package/layout/tags.ejs +70 -70
- package/package.json +2 -2
package/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[ParticleX](https://github.com/theme-particlex/hexo-theme-particlex) 主题,诞生原因是因为原来的 [Particle](https://github.com/korilin/hexo-theme-particle) 主题不维护了,但是我觉得还是很好的。
|
4
4
|
|
5
|
-
原来用的是 Vue 2 + Ant Design Vue 1,现更新到 Vue 3,去除 Ant Design Vue 采用自定义样式,图标更改为 Font Awesome 6,CDN 改为
|
5
|
+
原来用的是 Vue 2 + Ant Design Vue 1,现更新到 Vue 3,去除 Ant Design Vue 采用自定义样式,图标更改为 Font Awesome 6,CDN 改为 ZStatic。
|
6
6
|
|
7
7
|
原项目 `README.md` 里说:
|
8
8
|
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
# 2. 安装
|
20
20
|
|
21
|
-
```
|
21
|
+
```shell
|
22
22
|
cd themes
|
23
23
|
git clone https://github.com/theme-particlex/hexo-theme-particlex.git particlex --depth=1
|
24
24
|
```
|
@@ -40,6 +40,12 @@ prismjs:
|
|
40
40
|
enable: false
|
41
41
|
```
|
42
42
|
|
43
|
+
如果使用 Hexo 7.0.0 之后的版本只需要修改为:
|
44
|
+
|
45
|
+
```yaml
|
46
|
+
syntax_highlighter:
|
47
|
+
```
|
48
|
+
|
43
49
|
如果使用 Pandoc 还需要设置一下:
|
44
50
|
|
45
51
|
```yaml
|
@@ -250,14 +256,14 @@ search:
|
|
250
256
|
|
251
257
|
## 3.4. 评论配置
|
252
258
|
|
253
|
-
### 3.4.1.
|
259
|
+
### 3.4.1. giscus
|
254
260
|
|
255
|
-
|
261
|
+
giscus 是一个由 GitHub Discussions 支持的评论系统。
|
256
262
|
|
257
|
-
在 [
|
263
|
+
在 [giscus.app](https://giscus.app) 设置好各项后,会在下面生成一个 `<script>` 标签,在主题内填入即可。
|
258
264
|
|
259
265
|
```yaml
|
260
|
-
#
|
266
|
+
# giscus
|
261
267
|
# https://github.com/giscus/giscus
|
262
268
|
giscus:
|
263
269
|
enable: false
|
package/_config.yml
CHANGED
package/layout/categories.ejs
CHANGED
@@ -1,70 +1,70 @@
|
|
1
|
-
<div id="archives">
|
2
|
-
<% let posts = []; %>
|
3
|
-
<div class="categories-tags">
|
4
|
-
<% let prev; %>
|
5
|
-
<% site.categories.
|
6
|
-
<%
|
7
|
-
const colors = is_category(category.name)
|
8
|
-
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
9
|
-
: theme.colors.filter(color => color !== prev);
|
10
|
-
let id = Math.floor(Math.random() * colors.length);
|
11
|
-
prev = colors[id];
|
12
|
-
%>
|
13
|
-
<span>
|
14
|
-
<a href="<%- url_for(category.path) %>" style="background: <%- colors[id] %>">
|
15
|
-
<span class="icon">
|
16
|
-
<i class="fa-solid fa-bookmark fa-fw"></i>
|
17
|
-
</span>
|
18
|
-
<%= category.name %>
|
19
|
-
</a>
|
20
|
-
</span>
|
21
|
-
<% if (is_category(category.name)) { %>
|
22
|
-
<%
|
23
|
-
posts = category.posts;
|
24
|
-
posts.data.sort((a, b) => b.date - a.date);
|
25
|
-
%>
|
26
|
-
<% } %>
|
27
|
-
<% }); %>
|
28
|
-
</div>
|
29
|
-
<% posts.forEach(post => { %>
|
30
|
-
<div class="timeline">
|
31
|
-
<div class="timeline-tail"></div>
|
32
|
-
<div class="timeline-content">
|
33
|
-
<div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
|
34
|
-
<a href="<%- url_for(post.path) %>">
|
35
|
-
<h3><%= post.title %></h3>
|
36
|
-
</a>
|
37
|
-
<div class="info">
|
38
|
-
<% if (post.categories && post.categories.data.length !== 0) { %>
|
39
|
-
<span class="category">
|
40
|
-
<a href="<%- url_for(post.categories.data[0].path) %>">
|
41
|
-
<span class="icon">
|
42
|
-
<i class="fa-solid fa-bookmark fa-fw"></i>
|
43
|
-
</span>
|
44
|
-
<%= post.categories.data[0].name %>
|
45
|
-
</a>
|
46
|
-
</span>
|
47
|
-
<% } %>
|
48
|
-
<% if (post.tags && post.tags.data.length !== 0) { %>
|
49
|
-
<span class="tags">
|
50
|
-
<span class="icon">
|
51
|
-
<i class="fa-solid fa-tags fa-fw"></i>
|
52
|
-
</span>
|
53
|
-
<% let prev; %>
|
54
|
-
<% post.tags.data.forEach(tag => { %>
|
55
|
-
<span class="tag">
|
56
|
-
<%
|
57
|
-
const colors = theme.colors.filter(color => color !== prev);
|
58
|
-
let id = Math.floor(Math.random() * colors.length);
|
59
|
-
prev = colors[id];
|
60
|
-
%>
|
61
|
-
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
62
|
-
</span>
|
63
|
-
<% }); %>
|
64
|
-
</span>
|
65
|
-
<% } %>
|
66
|
-
</div>
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
<% }); %>
|
70
|
-
</div>
|
1
|
+
<div id="archives">
|
2
|
+
<% let posts = []; %>
|
3
|
+
<div class="categories-tags">
|
4
|
+
<% let prev; %>
|
5
|
+
<% site.categories.forEach(category => { %>
|
6
|
+
<%
|
7
|
+
const colors = is_category(category.name)
|
8
|
+
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
9
|
+
: theme.colors.filter(color => color !== prev);
|
10
|
+
let id = Math.floor(Math.random() * colors.length);
|
11
|
+
prev = colors[id];
|
12
|
+
%>
|
13
|
+
<span>
|
14
|
+
<a href="<%- url_for(category.path) %>" style="background: <%- colors[id] %>">
|
15
|
+
<span class="icon">
|
16
|
+
<i class="fa-solid fa-bookmark fa-fw"></i>
|
17
|
+
</span>
|
18
|
+
<%= category.name %>
|
19
|
+
</a>
|
20
|
+
</span>
|
21
|
+
<% if (is_category(category.name)) { %>
|
22
|
+
<%
|
23
|
+
posts = category.posts;
|
24
|
+
posts.data.sort((a, b) => b.date - a.date);
|
25
|
+
%>
|
26
|
+
<% } %>
|
27
|
+
<% }); %>
|
28
|
+
</div>
|
29
|
+
<% posts.forEach(post => { %>
|
30
|
+
<div class="timeline">
|
31
|
+
<div class="timeline-tail"></div>
|
32
|
+
<div class="timeline-content">
|
33
|
+
<div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
|
34
|
+
<a href="<%- url_for(post.path) %>">
|
35
|
+
<h3><%= post.title %></h3>
|
36
|
+
</a>
|
37
|
+
<div class="info">
|
38
|
+
<% if (post.categories && post.categories.data.length !== 0) { %>
|
39
|
+
<span class="category">
|
40
|
+
<a href="<%- url_for(post.categories.data[0].path) %>">
|
41
|
+
<span class="icon">
|
42
|
+
<i class="fa-solid fa-bookmark fa-fw"></i>
|
43
|
+
</span>
|
44
|
+
<%= post.categories.data[0].name %>
|
45
|
+
</a>
|
46
|
+
</span>
|
47
|
+
<% } %>
|
48
|
+
<% if (post.tags && post.tags.data.length !== 0) { %>
|
49
|
+
<span class="tags">
|
50
|
+
<span class="icon">
|
51
|
+
<i class="fa-solid fa-tags fa-fw"></i>
|
52
|
+
</span>
|
53
|
+
<% let prev; %>
|
54
|
+
<% post.tags.data.forEach(tag => { %>
|
55
|
+
<span class="tag">
|
56
|
+
<%
|
57
|
+
const colors = theme.colors.filter(color => color !== prev);
|
58
|
+
let id = Math.floor(Math.random() * colors.length);
|
59
|
+
prev = colors[id];
|
60
|
+
%>
|
61
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
62
|
+
</span>
|
63
|
+
<% }); %>
|
64
|
+
</span>
|
65
|
+
<% } %>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
<% }); %>
|
70
|
+
</div>
|
package/layout/import.ejs
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
<link rel="preconnect" href="https://
|
2
|
-
<script src="https://
|
3
|
-
<link rel="stylesheet" href="https://
|
1
|
+
<link rel="preconnect" href="https://s4.zstatic.net" />
|
2
|
+
<script src="https://s4.zstatic.net/ajax/libs/vue/3.3.7/vue.global.prod.min.js"></script>
|
3
|
+
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/font-awesome/6.4.2/css/all.min.css" />
|
4
4
|
<link rel="preconnect" href="https://fonts.loli.net" />
|
5
5
|
<link rel="preconnect" href="https://gstatic.loli.net" crossorigin />
|
6
6
|
<link rel="stylesheet" href="https://fonts.loli.net/css2?family=Fira+Code:wght@400;500;600;700&family=Lexend:wght@400;500;600;700;800;900&family=Noto+Sans+SC:wght@400;500;600;700;800;900&display=swap" />
|
@@ -9,25 +9,25 @@
|
|
9
9
|
<script src="https://polyfill.io/v3/polyfill.min.js?features=<%- theme.polyfill.features %>"></script>
|
10
10
|
<% } %>
|
11
11
|
<% if (theme.highlight.enable) { %>
|
12
|
-
<script src="https://
|
13
|
-
<script src="https://
|
12
|
+
<script src="https://s4.zstatic.net/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
13
|
+
<script src="https://s4.zstatic.net/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
|
14
14
|
<link
|
15
15
|
rel="stylesheet"
|
16
|
-
href="https://
|
16
|
+
href="https://s4.zstatic.net/ajax/libs/highlight.js/11.9.0/styles/<%- theme.highlight.style %>.min.css"
|
17
17
|
/>
|
18
18
|
<script src="<%- url_for("/js/lib/highlight.js") %>"></script>
|
19
19
|
<% } %>
|
20
20
|
<% if (theme.math.enable) { %>
|
21
|
-
<script src="https://
|
22
|
-
<script src="https://
|
23
|
-
<link rel="stylesheet" href="https://
|
21
|
+
<script src="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/katex.min.js"></script>
|
22
|
+
<script src="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/contrib/auto-render.min.js"></script>
|
23
|
+
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/katex.min.css" />
|
24
24
|
<script src="<%- url_for("/js/lib/math.js") %>"></script>
|
25
25
|
<% } %>
|
26
26
|
<% if (theme.preview.enable) { %>
|
27
27
|
<script src="<%- url_for("/js/lib/preview.js") %>"></script>
|
28
28
|
<% } %>
|
29
29
|
<% if (theme.crypto.enable && typeof page.secret !== "undefined") { %>
|
30
|
-
<script src="https://
|
30
|
+
<script src="https://s4.zstatic.net/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>
|
31
31
|
<script src="<%- url_for("/js/lib/crypto.js") %>"></script>
|
32
32
|
<% } %>
|
33
33
|
<% if (type === "archives" && theme.search.enable) { %>
|
@@ -35,16 +35,16 @@
|
|
35
35
|
<% } %>
|
36
36
|
<% if (type === "post" && page.comments) { %>
|
37
37
|
<% if (theme.gitalk.enable) { %>
|
38
|
-
<script src="https://
|
39
|
-
<link rel="stylesheet" href="https://
|
38
|
+
<script src="https://s4.zstatic.net/ajax/libs/gitalk/1.8.0/gitalk.min.js"></script>
|
39
|
+
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/gitalk/1.8.0/gitalk.min.css" />
|
40
40
|
<% } %>
|
41
41
|
<% if (theme.waline.enable) { %>
|
42
|
-
<script src="https://
|
43
|
-
<link rel="stylesheet" href="https://
|
44
|
-
<link rel="stylesheet" href="https://
|
42
|
+
<script src="https://s4.zstatic.net/ajax/libs/waline/2.15.8/waline.min.js"></script>
|
43
|
+
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/waline/2.15.8/waline.min.css" />
|
44
|
+
<link rel="stylesheet" href="https://s4.zstatic.net/ajax/libs/waline/2.15.8/waline-meta.min.css" />
|
45
45
|
<% } %>
|
46
46
|
<% if (theme.twikoo.enable) { %>
|
47
|
-
<script src="https://
|
47
|
+
<script src="https://s4.zstatic.net/ajax/libs/twikoo/1.6.31/twikoo.all.min.js"></script>
|
48
48
|
<% } %>
|
49
49
|
<% } %>
|
50
50
|
<% if (type === "index") { %>
|
package/layout/layout.ejs
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
<%
|
2
|
-
let type;
|
2
|
+
let type = "post";
|
3
3
|
if (is_home()) type = "index";
|
4
4
|
if (is_post() || is_page()) type = "post";
|
5
5
|
if (is_category() || page.type === "categories") type = "categories";
|
6
6
|
if (is_tag() || page.type === "tags") type = "tags";
|
7
7
|
if (is_archive()) type = "archives";
|
8
|
-
let title;
|
8
|
+
let title = page.title + " | " + config.title;
|
9
9
|
if (is_home()) title = config.title;
|
10
10
|
if (is_post() || is_page()) title = page.title + " | " + config.title;
|
11
11
|
if (is_category()) title = "Categories: " + page.category + " | " + config.title;
|
package/layout/tags.ejs
CHANGED
@@ -1,70 +1,70 @@
|
|
1
|
-
<div id="archives">
|
2
|
-
<% let posts = []; %>
|
3
|
-
<div class="categories-tags">
|
4
|
-
<% let prev; %>
|
5
|
-
<% site.tags.
|
6
|
-
<%
|
7
|
-
const colors = is_tag(tag.name)
|
8
|
-
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
9
|
-
: theme.colors.filter(color => color !== prev);
|
10
|
-
let id = Math.floor(Math.random() * colors.length);
|
11
|
-
prev = colors[id];
|
12
|
-
%>
|
13
|
-
<span>
|
14
|
-
<a href="<%- url_for(tag.path) %>" style="background: <%- colors[id] %>">
|
15
|
-
<span class="icon">
|
16
|
-
<i class="fa-solid fa-tags fa-fw"></i>
|
17
|
-
</span>
|
18
|
-
<%= tag.name %>
|
19
|
-
</a>
|
20
|
-
</span>
|
21
|
-
<% if (is_tag(tag.name)) { %>
|
22
|
-
<%
|
23
|
-
posts = tag.posts;
|
24
|
-
posts.data.sort((a, b) => b.date - a.date);
|
25
|
-
%>
|
26
|
-
<% } %>
|
27
|
-
<% }); %>
|
28
|
-
</div>
|
29
|
-
<% posts.forEach(post => { %>
|
30
|
-
<div class="timeline">
|
31
|
-
<div class="timeline-tail"></div>
|
32
|
-
<div class="timeline-content">
|
33
|
-
<div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
|
34
|
-
<a href="<%- url_for(post.path) %>">
|
35
|
-
<h3><%= post.title %></h3>
|
36
|
-
</a>
|
37
|
-
<div class="info">
|
38
|
-
<% if (post.categories && post.categories.data.length !== 0) { %>
|
39
|
-
<span class="category">
|
40
|
-
<a href="<%- url_for(post.categories.data[0].path) %>">
|
41
|
-
<span class="icon">
|
42
|
-
<i class="fa-solid fa-bookmark fa-fw"></i>
|
43
|
-
</span>
|
44
|
-
<%= post.categories.data[0].name %>
|
45
|
-
</a>
|
46
|
-
</span>
|
47
|
-
<% } %>
|
48
|
-
<% if (post.tags && post.tags.data.length !== 0) { %>
|
49
|
-
<span class="tags">
|
50
|
-
<span class="icon">
|
51
|
-
<i class="fa-solid fa-tags fa-fw"></i>
|
52
|
-
</span>
|
53
|
-
<% let prev; %>
|
54
|
-
<% post.tags.data.forEach(tag => { %>
|
55
|
-
<span class="tag">
|
56
|
-
<%
|
57
|
-
const colors = theme.colors.filter(color => color !== prev);
|
58
|
-
let id = Math.floor(Math.random() * colors.length);
|
59
|
-
prev = colors[id];
|
60
|
-
%>
|
61
|
-
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
62
|
-
</span>
|
63
|
-
<% }); %>
|
64
|
-
</span>
|
65
|
-
<% } %>
|
66
|
-
</div>
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
<% }); %>
|
70
|
-
</div>
|
1
|
+
<div id="archives">
|
2
|
+
<% let posts = []; %>
|
3
|
+
<div class="categories-tags">
|
4
|
+
<% let prev; %>
|
5
|
+
<% site.tags.forEach(tag => { %>
|
6
|
+
<%
|
7
|
+
const colors = is_tag(tag.name)
|
8
|
+
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
9
|
+
: theme.colors.filter(color => color !== prev);
|
10
|
+
let id = Math.floor(Math.random() * colors.length);
|
11
|
+
prev = colors[id];
|
12
|
+
%>
|
13
|
+
<span>
|
14
|
+
<a href="<%- url_for(tag.path) %>" style="background: <%- colors[id] %>">
|
15
|
+
<span class="icon">
|
16
|
+
<i class="fa-solid fa-tags fa-fw"></i>
|
17
|
+
</span>
|
18
|
+
<%= tag.name %>
|
19
|
+
</a>
|
20
|
+
</span>
|
21
|
+
<% if (is_tag(tag.name)) { %>
|
22
|
+
<%
|
23
|
+
posts = tag.posts;
|
24
|
+
posts.data.sort((a, b) => b.date - a.date);
|
25
|
+
%>
|
26
|
+
<% } %>
|
27
|
+
<% }); %>
|
28
|
+
</div>
|
29
|
+
<% posts.forEach(post => { %>
|
30
|
+
<div class="timeline">
|
31
|
+
<div class="timeline-tail"></div>
|
32
|
+
<div class="timeline-content">
|
33
|
+
<div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
|
34
|
+
<a href="<%- url_for(post.path) %>">
|
35
|
+
<h3><%= post.title %></h3>
|
36
|
+
</a>
|
37
|
+
<div class="info">
|
38
|
+
<% if (post.categories && post.categories.data.length !== 0) { %>
|
39
|
+
<span class="category">
|
40
|
+
<a href="<%- url_for(post.categories.data[0].path) %>">
|
41
|
+
<span class="icon">
|
42
|
+
<i class="fa-solid fa-bookmark fa-fw"></i>
|
43
|
+
</span>
|
44
|
+
<%= post.categories.data[0].name %>
|
45
|
+
</a>
|
46
|
+
</span>
|
47
|
+
<% } %>
|
48
|
+
<% if (post.tags && post.tags.data.length !== 0) { %>
|
49
|
+
<span class="tags">
|
50
|
+
<span class="icon">
|
51
|
+
<i class="fa-solid fa-tags fa-fw"></i>
|
52
|
+
</span>
|
53
|
+
<% let prev; %>
|
54
|
+
<% post.tags.data.forEach(tag => { %>
|
55
|
+
<span class="tag">
|
56
|
+
<%
|
57
|
+
const colors = theme.colors.filter(color => color !== prev);
|
58
|
+
let id = Math.floor(Math.random() * colors.length);
|
59
|
+
prev = colors[id];
|
60
|
+
%>
|
61
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
62
|
+
</span>
|
63
|
+
<% }); %>
|
64
|
+
</span>
|
65
|
+
<% } %>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
<% }); %>
|
70
|
+
</div>
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "hexo-theme-particlex",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.8.0",
|
4
4
|
"description": "A concise Hexo theme, based on Particle.",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -21,7 +21,7 @@
|
|
21
21
|
},
|
22
22
|
"homepage": "https://github.com/theme-particlex/hexo-theme-particlex#readme",
|
23
23
|
"dependencies": {
|
24
|
-
"hexo-helper-crypto": "^1.1.
|
24
|
+
"hexo-helper-crypto": "^1.1.5",
|
25
25
|
"hexo-renderer-ejs": "^2.0.0"
|
26
26
|
},
|
27
27
|
"scripts": {
|