hexo-theme-particlex 2.6.9 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +11 -0
- package/_config.yml +11 -0
- package/layout/archives.ejs +5 -9
- package/layout/categories.ejs +11 -13
- package/layout/layout.ejs +1 -1
- package/layout/post.ejs +8 -12
- package/layout/posts.ejs +5 -9
- package/layout/tags.ejs +12 -14
- package/package.json +1 -1
- package/source/css/main.css +2 -2
- package/source/js/lib/crypto.js +4 -11
- package/source/js/lib/highlight.js +1 -1
package/README.md
CHANGED
@@ -79,6 +79,17 @@ favicon: /images/favicon.png
|
|
79
79
|
# Home page background image
|
80
80
|
background:
|
81
81
|
- /images/background.jpg
|
82
|
+
|
83
|
+
# Loading image
|
84
|
+
loading: /images/loading.gif
|
85
|
+
|
86
|
+
# Optional colors for category and tag
|
87
|
+
colors:
|
88
|
+
- "#ffa2c4"
|
89
|
+
- "#00bcd4"
|
90
|
+
- "#03a9f4"
|
91
|
+
- "#00a596"
|
92
|
+
- "#ff7d73"
|
82
93
|
```
|
83
94
|
|
84
95
|
## 3.2. 内容配置
|
package/_config.yml
CHANGED
@@ -11,6 +11,17 @@ favicon: /images/favicon.png
|
|
11
11
|
background:
|
12
12
|
- /images/background.jpg
|
13
13
|
|
14
|
+
# Loading image
|
15
|
+
loading: /images/loading.gif
|
16
|
+
|
17
|
+
# Optional colors for category and tag
|
18
|
+
colors:
|
19
|
+
- "#ffa2c4"
|
20
|
+
- "#00bcd4"
|
21
|
+
- "#03a9f4"
|
22
|
+
- "#00a596"
|
23
|
+
- "#ff7d73"
|
24
|
+
|
14
25
|
# ParticleX theme icon is adopts the Font Awesome 6
|
15
26
|
# https://fontawesome.com
|
16
27
|
|
package/layout/archives.ejs
CHANGED
@@ -31,19 +31,15 @@
|
|
31
31
|
<span class="icon">
|
32
32
|
<i class="fa-solid fa-tags fa-fw"></i>
|
33
33
|
</span>
|
34
|
+
<% let prev; %>
|
34
35
|
<% post.tags.data.forEach(tag => { %>
|
35
36
|
<span class="tag">
|
36
37
|
<%
|
37
|
-
const
|
38
|
-
|
39
|
-
|
40
|
-
"color: #03a9f4",
|
41
|
-
"color: #00a596",
|
42
|
-
"color: #ff7d73",
|
43
|
-
];
|
44
|
-
let id = Math.floor(Math.random() * color.length);
|
38
|
+
const colors = theme.colors.filter(color => color !== prev);
|
39
|
+
let id = Math.floor(Math.random() * colors.length);
|
40
|
+
prev = colors[id];
|
45
41
|
%>
|
46
|
-
<a href="<%- url_for(tag.path) %>" style="<%-
|
42
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
47
43
|
</span>
|
48
44
|
<% }); %>
|
49
45
|
</span>
|
package/layout/categories.ejs
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
<div id="archives">
|
2
2
|
<% let posts = []; %>
|
3
3
|
<div class="categories-tags">
|
4
|
+
<% let prev; %>
|
4
5
|
<% site.categories.data.forEach(category => { %>
|
5
6
|
<%
|
6
|
-
const
|
7
|
+
const colors = is_category(category.name)
|
7
8
|
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
8
|
-
:
|
9
|
-
let id = Math.floor(Math.random() *
|
9
|
+
: theme.colors.filter(color => color !== prev);
|
10
|
+
let id = Math.floor(Math.random() * colors.length);
|
11
|
+
prev = colors[id];
|
10
12
|
%>
|
11
13
|
<span>
|
12
|
-
<a href="<%- url_for(category.path) %>" style="background: <%-
|
14
|
+
<a href="<%- url_for(category.path) %>" style="background: <%- colors[id] %>">
|
13
15
|
<span class="icon">
|
14
16
|
<i class="fa-solid fa-bookmark fa-fw"></i>
|
15
17
|
</span>
|
@@ -48,19 +50,15 @@
|
|
48
50
|
<span class="icon">
|
49
51
|
<i class="fa-solid fa-tags fa-fw"></i>
|
50
52
|
</span>
|
53
|
+
<% let prev; %>
|
51
54
|
<% post.tags.data.forEach(tag => { %>
|
52
55
|
<span class="tag">
|
53
56
|
<%
|
54
|
-
const
|
55
|
-
|
56
|
-
|
57
|
-
"color: #03a9f4",
|
58
|
-
"color: #00a596",
|
59
|
-
"color: #ff7d73",
|
60
|
-
];
|
61
|
-
let id = Math.floor(Math.random() * color.length);
|
57
|
+
const colors = theme.colors.filter(color => color !== prev);
|
58
|
+
let id = Math.floor(Math.random() * colors.length);
|
59
|
+
prev = colors[id];
|
62
60
|
%>
|
63
|
-
<a href="<%- url_for(tag.path) %>" style="<%-
|
61
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
64
62
|
</span>
|
65
63
|
<% }); %>
|
66
64
|
</span>
|
package/layout/layout.ejs
CHANGED
package/layout/post.ejs
CHANGED
@@ -24,19 +24,15 @@
|
|
24
24
|
<span class="icon">
|
25
25
|
<i class="fa-solid fa-tags fa-fw"></i>
|
26
26
|
</span>
|
27
|
+
<% let prev; %>
|
27
28
|
<% page.tags.data.forEach(tag => { %>
|
28
29
|
<span class="tag">
|
29
30
|
<%
|
30
|
-
const
|
31
|
-
|
32
|
-
|
33
|
-
"color: #03a9f4",
|
34
|
-
"color: #00a596",
|
35
|
-
"color: #ff7d73",
|
36
|
-
];
|
37
|
-
let id = Math.floor(Math.random() * color.length);
|
31
|
+
const colors = theme.colors.filter(color => color !== prev);
|
32
|
+
let id = Math.floor(Math.random() * colors.length);
|
33
|
+
prev = colors[id];
|
38
34
|
%>
|
39
|
-
<a href="<%- url_for(tag.path) %>" style="<%-
|
35
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
40
36
|
</span>
|
41
37
|
<% }); %>
|
42
38
|
</span>
|
@@ -46,8 +42,8 @@
|
|
46
42
|
<% const CryptoJS = crypto(); %>
|
47
43
|
<input
|
48
44
|
id="crypto"
|
49
|
-
:class="['input',
|
50
|
-
:disabled="cryptoStatus"
|
45
|
+
:class="['input', cryptoStatus]"
|
46
|
+
:disabled="cryptoStatus == 'success'"
|
51
47
|
ref="crypto"
|
52
48
|
placeholder="文章被加密,请输入密码"
|
53
49
|
data-encrypted="<%- CryptoJS.AES.encrypt(page.content, page.secret).toString() %>"
|
@@ -55,7 +51,7 @@
|
|
55
51
|
v-model="crypto"
|
56
52
|
/>
|
57
53
|
<transition name="fade">
|
58
|
-
<div class="content" ref="content" v-show="cryptoStatus"></div>
|
54
|
+
<div class="content" ref="content" v-show="cryptoStatus == 'success'"></div>
|
59
55
|
</transition>
|
60
56
|
<% } else { %>
|
61
57
|
<div class="content" v-pre>
|
package/layout/posts.ejs
CHANGED
@@ -58,19 +58,15 @@
|
|
58
58
|
<i class="fa-solid fa-tags fa-fw"></i>
|
59
59
|
</span>
|
60
60
|
<% } %>
|
61
|
+
<% let prev; %>
|
61
62
|
<% post.tags.data.forEach(tag => { %>
|
62
63
|
<span class="tag">
|
63
64
|
<%
|
64
|
-
const
|
65
|
-
|
66
|
-
|
67
|
-
"color: #03a9f4",
|
68
|
-
"color: #00a596",
|
69
|
-
"color: #ff7d73",
|
70
|
-
];
|
71
|
-
let id = Math.floor(Math.random() * color.length);
|
65
|
+
const colors = theme.colors.filter(color => color !== prev);
|
66
|
+
let id = Math.floor(Math.random() * colors.length);
|
67
|
+
prev = colors[id];
|
72
68
|
%>
|
73
|
-
<a href="<%- url_for(tag.path) %>" style="<%-
|
69
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
74
70
|
</span>
|
75
71
|
<% }); %>
|
76
72
|
</div>
|
package/layout/tags.ejs
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
<div id="archives">
|
2
2
|
<% let posts = []; %>
|
3
3
|
<div class="categories-tags">
|
4
|
+
<% let prev; %>
|
4
5
|
<% site.tags.data.forEach(tag => { %>
|
5
6
|
<%
|
6
|
-
const
|
7
|
+
const colors = is_tag(tag.name)
|
7
8
|
? ["linear-gradient(120deg, #9abbf7 0%, #ffbbf4 100%)"]
|
8
|
-
:
|
9
|
-
let id = Math.floor(Math.random() *
|
9
|
+
: theme.colors.filter(color => color !== prev);
|
10
|
+
let id = Math.floor(Math.random() * colors.length);
|
11
|
+
prev = colors[id];
|
10
12
|
%>
|
11
13
|
<span>
|
12
|
-
<a href="<%- url_for(tag.path) %>" style="background: <%-
|
14
|
+
<a href="<%- url_for(tag.path) %>" style="background: <%- colors[id] %>">
|
13
15
|
<span class="icon">
|
14
16
|
<i class="fa-solid fa-tags fa-fw"></i>
|
15
17
|
</span>
|
@@ -33,7 +35,7 @@
|
|
33
35
|
<h3><%= post.title %></h3>
|
34
36
|
</a>
|
35
37
|
<div class="info">
|
36
|
-
<% if (post.categories && post.categories.data.length){ %>
|
38
|
+
<% if (post.categories && post.categories.data.length !== 0) { %>
|
37
39
|
<span class="category">
|
38
40
|
<a href="<%- url_for(post.categories.data[0].path) %>">
|
39
41
|
<span class="icon">
|
@@ -48,19 +50,15 @@
|
|
48
50
|
<span class="icon">
|
49
51
|
<i class="fa-solid fa-tags fa-fw"></i>
|
50
52
|
</span>
|
53
|
+
<% let prev; %>
|
51
54
|
<% post.tags.data.forEach(tag => { %>
|
52
55
|
<span class="tag">
|
53
56
|
<%
|
54
|
-
const
|
55
|
-
|
56
|
-
|
57
|
-
"color: #03a9f4",
|
58
|
-
"color: #00a596",
|
59
|
-
"color: #ff7d73",
|
60
|
-
];
|
61
|
-
let id = Math.floor(Math.random() * color.length);
|
57
|
+
const colors = theme.colors.filter(color => color !== prev);
|
58
|
+
let id = Math.floor(Math.random() * colors.length);
|
59
|
+
prev = colors[id];
|
62
60
|
%>
|
63
|
-
<a href="<%- url_for(tag.path) %>" style="<%-
|
61
|
+
<a href="<%- url_for(tag.path) %>" style="color: <%- colors[id] %>"><%= tag.name %></a>
|
64
62
|
</span>
|
65
63
|
<% }); %>
|
66
64
|
</span>
|
package/package.json
CHANGED
package/source/css/main.css
CHANGED
package/source/js/lib/crypto.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
mixins.crypto = {
|
2
2
|
data() {
|
3
|
-
return { crypto: "", cryptoStatus:
|
3
|
+
return { crypto: "", cryptoStatus: "" };
|
4
4
|
},
|
5
5
|
watch: {
|
6
6
|
crypto(value) {
|
@@ -10,20 +10,13 @@ mixins.crypto = {
|
|
10
10
|
try {
|
11
11
|
let decrypted = CryptoJS.AES.decrypt(encrypted, value).toString(CryptoJS.enc.Utf8);
|
12
12
|
if (CryptoJS.SHA256(decrypted).toString() === shasum) {
|
13
|
-
this.cryptoStatus =
|
13
|
+
this.cryptoStatus = "success";
|
14
14
|
content.innerHTML = decrypted;
|
15
15
|
this.render();
|
16
|
-
} else this.cryptoStatus =
|
16
|
+
} else this.cryptoStatus = "failure";
|
17
17
|
} catch {
|
18
|
-
this.cryptoStatus =
|
18
|
+
this.cryptoStatus = "failure";
|
19
19
|
}
|
20
20
|
},
|
21
21
|
},
|
22
|
-
computed: {
|
23
|
-
cryptoClass() {
|
24
|
-
if (this.cryptoStatus === null) return "";
|
25
|
-
if (this.cryptoStatus === true) return "success";
|
26
|
-
if (this.cryptoStatus === false) return "fail";
|
27
|
-
},
|
28
|
-
},
|
29
22
|
};
|
@@ -13,7 +13,7 @@ mixins.highlight = {
|
|
13
13
|
highlight() {
|
14
14
|
let codes = document.querySelectorAll("pre");
|
15
15
|
for (let i of codes) {
|
16
|
-
let code = i.
|
16
|
+
let code = i.textContent;
|
17
17
|
let language = [...i.classList, ...i.firstChild.classList][0] || "plaintext";
|
18
18
|
let highlighted;
|
19
19
|
try {
|