hexo-theme-particlex 2.3.1 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -86,23 +86,23 @@ highlightStyle: github # Highlight style
86
86
 
87
87
  ```yaml
88
88
  menu:
89
- home:
89
+ Home:
90
90
  name: house
91
91
  theme: solid
92
92
  src: /
93
- about:
93
+ About:
94
94
  name: id-card
95
95
  theme: solid
96
96
  src: /about
97
- archives:
97
+ Archives:
98
98
  name: box-archive
99
99
  theme: solid
100
100
  src: /archives
101
- categories:
101
+ Categories:
102
102
  name: bookmark
103
103
  theme: solid
104
104
  src: /categories
105
- tags:
105
+ Tags:
106
106
  name: tags
107
107
  theme: solid
108
108
  src: /tags
package/_config.yml CHANGED
@@ -19,23 +19,23 @@ highlightStyle: github
19
19
 
20
20
  # Main menu navigation
21
21
  menu:
22
- home:
22
+ Home:
23
23
  name: house
24
24
  theme: solid
25
25
  src: /
26
- about:
26
+ About:
27
27
  name: id-card
28
28
  theme: solid
29
29
  src: /about
30
- archives:
30
+ Archives:
31
31
  name: box-archive
32
32
  theme: solid
33
33
  src: /archives
34
- categories:
34
+ Categories:
35
35
  name: bookmark
36
36
  theme: solid
37
37
  src: /categories
38
- tags:
38
+ Tags:
39
39
  name: tags
40
40
  theme: solid
41
41
  src: /tags
@@ -4,14 +4,14 @@
4
4
  %>
5
5
  <div id="archives">
6
6
  <% if (theme.search.enable) { %>
7
- <div id="search-mask" style="z-index: <%= posts.length + 1 %>"></div>
8
- <input id="search-bar" class="input" placeholder="搜索" style="z-index: <%= posts.length + 2 %>">
7
+ <div id="search-mask" style="z-index: <%- posts.length + 1 %>"></div>
8
+ <input id="search-bar" class="input" placeholder="搜索" style="z-index: <%- posts.length + 2 %>">
9
9
  <% } %>
10
10
  <% posts.forEach((post, id) => { %>
11
- <div class="timeline" style="z-index: <%= posts.length - id %>" data-title="<%- post.title.toLowerCase().replace(/\s+/gm, "") %>">
11
+ <div class="timeline" style="z-index: <%- posts.length - id %>" data-title="<%- post.title.toLowerCase().replace(/\s+/gm, "") %>">
12
12
  <div class="timeline-tail"></div>
13
13
  <div class="timeline-content">
14
- <div class="item-time"><%- date(post.date, "YYYY/M/D") %></div>
14
+ <div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
15
15
  <a href="<%- url_for(post.path) %>">
16
16
  <h3><%= post.title %></h3>
17
17
  </a>
@@ -37,9 +37,7 @@
37
37
  const color = ["color: #ffa2c4", "color: #00bcd4", "color: #03a9f4", "color: #00a596", "color: #ff7d73"];
38
38
  let num = Math.floor(Math.random() * color.length);
39
39
  %>
40
- <a href="<%- url_for(data.path) %>" style="<%- color[num] %>">
41
- <%= data.name %>
42
- </a>
40
+ <a href="<%- url_for(data.path) %>" style="<%- color[num] %>"><%= data.name %></a>
43
41
  </span>
44
42
  <% }); %>
45
43
  </span>
package/layout/card.ejs CHANGED
@@ -3,9 +3,7 @@
3
3
  <div class="avatar">
4
4
  <img src="<%- url_for(theme.avatar) %>" alt="avatar">
5
5
  </div>
6
- <div class="name">
7
- <%= config.author %>
8
- </div>
6
+ <div class="name"><%= config.author %></div>
9
7
  <div class="description">
10
8
  <%- markdown(theme.card.description) %>
11
9
  </div>
@@ -24,9 +22,7 @@
24
22
  <div class="friend-links">
25
23
  <% Object.keys(theme.card.friendLinks).forEach(key => { %>
26
24
  <div class="friend-link">
27
- <a href="<%- url_for(theme.card.friendLinks[key]) %>">
28
- <%= key %>
29
- </a>
25
+ <a href="<%- url_for(theme.card.friendLinks[key]) %>"><%= key %></a>
30
26
  </div>
31
27
  <% }); %>
32
28
  </div>
@@ -30,7 +30,7 @@
30
30
  <div class="timeline-content">
31
31
  <div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
32
32
  <a href="<%- url_for(post.path) %>">
33
- <h3><%= titlecase(post.title) %></h3>
33
+ <h3><%= post.title %></h3>
34
34
  </a>
35
35
  <div class="info">
36
36
  <% if (post.categories && post.categories.data.length != 0) { %>
@@ -54,9 +54,7 @@
54
54
  const color = ["color: #ffa2c4", "color: #00bcd4", "color: #03a9f4", "color: #00a596", "color: #ff7d73"];
55
55
  let num = Math.floor(Math.random() * color.length);
56
56
  %>
57
- <a href="<%- url_for(data.path) %>" style="<%- color[num] %>">
58
- <%= data.name %>
59
- </a>
57
+ <a href="<%- url_for(data.path) %>" style="<%- color[num] %>"><%= data.name %></a>
60
58
  </span>
61
59
  <% }); %>
62
60
  </span>
@@ -18,41 +18,29 @@
18
18
  <a class="page-num" href="<%- config.root %>">1</a>
19
19
  <% } %>
20
20
  <% if (page.current - 2 != 1) { %>
21
- <a class="page-num" href="<%- url_for("page/" + (page.current - 2)) %>">
22
- <%= page.current - 2 %>
23
- </a>
21
+ <a class="page-num" href="<%- url_for("page/" + (page.current - 2)) %>"><%= page.current - 2 %></a>
24
22
  <% } %>
25
23
  <% } %>
26
- <a class="page-num" href="<%- url_for(page.prev_link) %>">
27
- <%= page.prev %>
28
- </a>
24
+ <a class="page-num" href="<%- url_for(page.prev_link) %>"><%= page.prev %></a>
29
25
  </span>
30
26
  <% } %>
31
- <span class="current">
32
- <%= page.current %>
33
- </span>
27
+ <span class="current"><%= page.current %></span>
34
28
  <% if (page.current != page.total) { %>
35
29
  <span>
36
- <a class="page-num" href="<%- url_for(page.next_link) %>">
37
- <%= page.next %>
38
- </a>
30
+ <a class="page-num" href="<%- url_for(page.next_link) %>"><%= page.next %></a>
39
31
  <% if (page.current + 2 <= page.total) { %>
40
- <a class="page-num" href="<%- url_for("page/" + (page.current + 2)) %>">
41
- <%= page.current + 2 %>
42
- </a>
32
+ <a class="page-num" href="<%- url_for("page/" + (page.current + 2)) %>"><%= page.current + 2 %></a>
43
33
  <% } %>
44
34
  <% if (page.current + 3 <= page.total) { %>
45
35
  <span class="page-omit">...</span>
46
- <a class="page-num" href="<%- url_for("page/" + page.total) %>">
47
- <%= page.total %>
48
- </a>
36
+ <a class="page-num" href="<%- url_for("page/" + page.total) %>"><%= page.total %></a>
49
37
  <% } %>
50
38
  </span>
51
39
  <% } %>
52
40
  </div>
53
41
  <div class="next">
54
42
  <% if (page.current != page.total) { %>
55
- <a class="page-num" href="<%- url_for(page.next_link) %> ">
43
+ <a class="page-num" href="<%- url_for(page.next_link) %>">
56
44
  <i class="fa-solid fa-caret-right fa-fw"></i>
57
45
  </a>
58
46
  <% } %>
package/layout/footer.ejs CHANGED
@@ -1,21 +1,20 @@
1
1
  <footer id="footer">
2
2
  <div class="footer-wrap">
3
3
  <div>
4
- © <%= theme.footer.since %> - <%= date(Date.now(), "YYYY") %> <%= config.title %>
4
+ &copy;
5
+ <%= theme.footer.since %> - <%= date(Date.now(), "YYYY") %> <%= config.title %>
5
6
  <span class="footer-icon">
6
7
  <i class="fa-solid fa-font-awesome fa-fw"></i>
7
8
  </span>
8
- @<%= config.author %>
9
+ &commat;<%= config.author %>
9
10
  </div>
10
11
  <div></div>
11
- <div>Based on the <a href="https://hexo.io">Hexo Engine</a> & <a href="https://github.com/argvchs/hexo-theme-particlex">ParticleX Theme</a></div>
12
+ <div>Based on the <a href="https://hexo.io">Hexo Engine</a> &amp; <a href="https://github.com/argvchs/hexo-theme-particlex">ParticleX Theme</a></div>
12
13
  <% if (theme.footer.ICP.enable) { %>
13
14
  <div>
14
- 备案号:
15
+ 备案号
15
16
  <% if (theme.footer.ICP.link) { %>
16
- <a href="<%= theme.footer.ICP.link %>">
17
- <%= theme.footer.ICP.code %>
18
- </a>
17
+ <a href="<%- theme.footer.ICP.link %>"><%= theme.footer.ICP.code %></a>
19
18
  <% } else { %>
20
19
  <%= theme.footer.ICP.code %>
21
20
  <% } %>
package/layout/layout.ejs CHANGED
@@ -8,7 +8,7 @@
8
8
  type = "categories";
9
9
  else if (is_tag() || page.type == "tags")
10
10
  type = "tags";
11
- else if (is_archive() || is_year() || is_month())
11
+ else if (is_archive())
12
12
  type = "archives";
13
13
  let title = "";
14
14
  if (page.title)
@@ -17,7 +17,7 @@
17
17
  title = "Categories: " + page.category + " | ";
18
18
  else if (is_tag())
19
19
  title = "Tags: " + page.tag + " | ";
20
- else if (is_archive() || is_year() || is_month())
20
+ else if (is_archive())
21
21
  title = "Archives | ";
22
22
  title += config.title;
23
23
  %>
@@ -25,7 +25,7 @@
25
25
  <html lang="<%- config.language %>">
26
26
  <head>
27
27
  <meta charset="UTF-8">
28
- <title><%= titlecase(title) %></title>
28
+ <title><%= title %></title>
29
29
  <meta name="author" content="<%- config.author %>">
30
30
  <meta name="description" content="<%- config.description %>">
31
31
  <meta name="keywords" content="<%- config.keywords %>">
@@ -36,7 +36,7 @@
36
36
  <link rel="stylesheet" href="https://cdn.staticfile.org/highlight.js/11.7.0/styles/<%- theme.highlightStyle %>.min.css">
37
37
  <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.2.1/css/all.min.css">
38
38
  <% if (theme.polyfill.enable) { %>
39
- <script src="https://polyfill.io/v3/polyfill.min.js?features=<% theme.polyfill.features.join(",") %>"></script>
39
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=<%- theme.polyfill.features.join(",") %>"></script>
40
40
  <% } %>
41
41
  <% if (theme.math.enable) { %>
42
42
  <script src="https://cdn.staticfile.org/KaTeX/0.16.4/katex.min.js"></script>
@@ -4,9 +4,7 @@
4
4
  <div>
5
5
  <h2>LOADING...</h2>
6
6
  <p style="word-break: keep-all">加载过慢请开启缓存(浏览器默认开启)</p>
7
- <div>
8
- <img alt="loading" src="<%- url_for("/images/loading.gif") %>" style="height: 50px">
9
- </div>
7
+ <img alt="loading" src="<%- url_for("/images/loading.gif") %>" style="height: 50px">
10
8
  </div>
11
9
  </div>
12
10
  </div>
package/layout/menu.ejs CHANGED
@@ -1,25 +1,25 @@
1
1
  <nav id="menu">
2
2
  <div class="desktop-menu">
3
- <a href="<%- config.root %>">
4
- <span class="title"><%- config.title %></span>
3
+ <a class="title" href="<%- config.root %>">
4
+ <span><%= config.title.toUpperCase() %></span>
5
5
  </a>
6
6
  <% Object.keys(theme.menu).forEach(key => { %>
7
- <a href="<%= url_for(theme.menu[key].src) %>">
7
+ <a href="<%- url_for(theme.menu[key].src) %>">
8
8
  <i class="fa-<%- theme.menu[key].theme %> fa-<%- theme.menu[key].name %> fa-fw"></i>
9
9
  <span>&ensp;<%= key %></span>
10
10
  </a>
11
11
  <% }); %>
12
12
  </div>
13
- <div :class="'phone-menu ' + menushow" id="phone-menu">
13
+ <div :class="&quot;phone-menu &quot; + menushow" id="phone-menu">
14
14
  <div class="curtain" @click="menushow = !menushow" v-show="menushow"></div>
15
15
  <div class="title" @click="menushow = !menushow">
16
16
  <i class="fa-solid fa-bars fa-fw"></i>
17
- <span>&emsp;<%- config.title %></span>
17
+ <span>&emsp;<%= config.title.toUpperCase() %></span>
18
18
  </div>
19
19
  <transition name="slide">
20
20
  <div class="items" v-show="menushow">
21
21
  <% Object.keys(theme.menu).forEach(key => { %>
22
- <a href="<%= url_for(theme.menu[key].src) %>">
22
+ <a href="<%- url_for(theme.menu[key].src) %>">
23
23
  <div class="item">
24
24
  <div style="min-width: 20px; max-width: 50px; width: 10%">
25
25
  <i class="fa-<%- theme.menu[key].theme %> fa-<%- theme.menu[key].name %> fa-fw"></i>
package/layout/post.ejs CHANGED
@@ -1,6 +1,6 @@
1
1
  <div class="article">
2
2
  <div>
3
- <h1><%= titlecase(page.title) %> </h1>
3
+ <h1><%= page.title %> </h1>
4
4
  </div>
5
5
  <div class="info">
6
6
  <span class="date">
@@ -30,9 +30,7 @@
30
30
  const color = ["color: #ffa2c4", "color: #00bcd4", "color: #03a9f4", "color: #00a596", "color: #ff7d73"];
31
31
  let num = Math.floor(Math.random() * color.length);
32
32
  %>
33
- <a href="<%- url_for(data.path) %>" style="<%- color[num] %>">
34
- <%= data.name %>
35
- </a>
33
+ <a href="<%- url_for(data.path) %>" style="<%- color[num] %>"><%= data.name %></a>
36
34
  </span>
37
35
  <% }); %>
38
36
  </span>
@@ -42,22 +40,20 @@
42
40
  <%
43
41
  const CryptoJS = crypto();
44
42
  function sha(str) {
45
- return CryptoJS.SHA256(str).toString(CryptoJS.enc.Base64);
43
+ return CryptoJS.SHA256(str).toString();
46
44
  }
47
45
  function encrypt(str, key) {
48
- return CryptoJS.AES.encrypt(str, sha(key), {
49
- mode: CryptoJS.mode.ECB,
50
- padding: CryptoJS.pad.Pkcs7,
51
- }).toString();
46
+ return CryptoJS.AES.encrypt(str, key).toString();
52
47
  }
53
48
  %>
54
- <input id="crypto" class="input" placeholder="文章被加密,请输入密码" data-encrypt="<%- encrypt(page.content, page.password.toString()) %>" data-check="<%- sha(page.content) %>">
55
- <div class="content" style="opacity: 0" v-pre></div>
49
+ <input id="crypto" class="input" placeholder="文章被加密,请输入密码" data-encrypt="<%- encrypt(page.content, page.password) %>" data-shasum="<%- sha(page.content) %>">
50
+ <div class="content" v-pre style="opacity: 0"></div>
56
51
  <% } else { %>
57
52
  <div class="content" v-pre>
58
53
  <%- page.content %>
59
54
  </div>
60
55
  <% } %>
56
+ <% if (page.comments) { %>
61
57
  <% if (theme.gitalk.enable) { %>
62
58
  <div id="comment">
63
59
  <div id="gitalk-container"></div>
@@ -78,4 +74,5 @@
78
74
  <div id="twikoo-container"></div>
79
75
  </div>
80
76
  <% } %>
77
+ <% } %>
81
78
  </div>
package/layout/posts.ejs CHANGED
@@ -10,7 +10,7 @@
10
10
  <% posts.forEach(post => { %>
11
11
  <div class="post">
12
12
  <a href="<%- url_for(post.path) %>">
13
- <h2 class="post-title"><%= titlecase(post.title) %></h2>
13
+ <h2 class="post-title"><%= post.title %></h2>
14
14
  </a>
15
15
  <div class="category-and-date">
16
16
  <% if (post.categories.data.length != 0) { %>
package/layout/script.ejs CHANGED
@@ -1,6 +1,6 @@
1
1
  <script src="<%- url_for("/js/functions.js") %>"></script>
2
2
  <script src="<%- url_for("/js/particlex.js") %>"></script>
3
- <% if (type == "post") { %>
3
+ <% if (type == "post" && page.comments) { %>
4
4
  <% if (theme.gitalk.enable) { %>
5
5
  <script src="https://cdn.staticfile.org/gitalk/1.8.0/gitalk.min.js"></script>
6
6
  <link rel="stylesheet" href="https://cdn.staticfile.org/gitalk/1.8.0/gitalk.min.css">
package/layout/tags.ejs CHANGED
@@ -30,7 +30,7 @@
30
30
  <div class="timeline-content">
31
31
  <div class="item-time"><%= date(post.date, "YYYY/M/D") %></div>
32
32
  <a href="<%- url_for(post.path) %>">
33
- <h3><%= titlecase(post.title) %></h3>
33
+ <h3><%= post.title %></h3>
34
34
  </a>
35
35
  <div class="info">
36
36
  <% if (post.categories && post.categories.data.length != 0){ %>
@@ -54,9 +54,7 @@
54
54
  const color = ["color: #ffa2c4", "color: #00bcd4", "color: #03a9f4", "color: #00a596", "color: #ff7d73"];
55
55
  let num = Math.floor(Math.random() * color.length);
56
56
  %>
57
- <a href="<%- url_for(data.path) %>" style="<%- color[num] %>">
58
- <%= data.name %>
59
- </a>
57
+ <a href="<%- url_for(data.path) %>" style="<%- color[num] %>"><%= data.name %></a>
60
58
  </span>
61
59
  <% }); %>
62
60
  </span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-particlex",
3
- "version": "2.3.1",
3
+ "version": "2.3.3",
4
4
  "description": "A concise Hexo theme, based on Particle.",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -406,23 +406,14 @@
406
406
  #menu .desktop-menu .title {
407
407
  color: #555;
408
408
  display: inline-block;
409
- font-family: Lexend, "Noto Sans SC", sans-serif;
410
- margin-left: 30px;
411
- text-transform: uppercase;
409
+ margin-left: 60px;
410
+ margin-right: 5px;
412
411
  }
413
412
  #menu .desktop-menu a {
414
413
  color: #555;
415
414
  display: inline-block;
416
415
  margin-left: 30px;
417
416
  }
418
- #menu .desktop-menu a span img {
419
- height: 20px;
420
- top: 3px;
421
- width: 20px;
422
- }
423
- #menu .desktop-menu a span:nth-child(1) {
424
- margin-right: 5px;
425
- }
426
417
  #menu .phone-menu {
427
418
  min-height: 50px;
428
419
  text-align: center;
@@ -452,7 +443,6 @@
452
443
  #menu .phone-menu .title {
453
444
  color: #555;
454
445
  cursor: pointer;
455
- text-transform: uppercase;
456
446
  z-index: 10004;
457
447
  }
458
448
  #menu.hidden-menu {
@@ -742,7 +732,7 @@ blockquote {
742
732
  }
743
733
  body {
744
734
  background: #f6f8fa;
745
- color: #000000d9;
735
+ color: #000c;
746
736
  font: 500 14px Lexend, "Noto Sans SC", sans-serif;
747
737
  overflow-x: hidden;
748
738
  width: 100%;
@@ -54,15 +54,12 @@ function rendermath() {
54
54
  });
55
55
  }
56
56
  function sha(str) {
57
- return CryptoJS.SHA256(str).toString(CryptoJS.enc.Base64);
57
+ return CryptoJS.SHA256(str).toString();
58
58
  }
59
- function decrypt(encrypt, key, check) {
59
+ function decrypt(str, key, shasum) {
60
60
  try {
61
- let res = CryptoJS.AES.decrypt(encrypt, sha(key), {
62
- mode: CryptoJS.mode.ECB,
63
- padding: CryptoJS.pad.Pkcs7,
64
- }).toString(CryptoJS.enc.Utf8);
65
- return { decrypt: res, check: sha(res) == check };
61
+ let res = CryptoJS.AES.decrypt(str, key).toString(CryptoJS.enc.Utf8);
62
+ return { decrypt: res, check: sha(res) === shasum };
66
63
  } catch {
67
64
  return { check: false };
68
65
  }
@@ -45,14 +45,17 @@ const app = Vue.createApp({
45
45
  });
46
46
  }
47
47
  window.addEventListener("scroll", this.handlescroll, true);
48
- highlight();
49
- showimg();
50
- rendermath();
48
+ this.render();
51
49
  },
52
50
  methods: {
53
51
  homeclick() {
54
52
  window.scrollTo({ top: window.innerHeight, behavior: "smooth" });
55
53
  },
54
+ render() {
55
+ highlight();
56
+ showimg();
57
+ rendermath();
58
+ },
56
59
  handlescroll() {
57
60
  let newlocal = document.documentElement.scrollTop;
58
61
  let menu = document.getElementById("menu");
@@ -71,16 +74,14 @@ const app = Vue.createApp({
71
74
  handlecrypto() {
72
75
  let input = document.getElementById("crypto"),
73
76
  content = document.getElementsByClassName("content")[0];
74
- let res = decrypt(input.dataset.encrypt, input.value, input.dataset.check);
77
+ let res = decrypt(input.dataset.encrypt, input.value, input.dataset.shasum);
75
78
  if (res.check) {
76
79
  input.disabled = true;
77
80
  input.classList.remove("fail");
78
81
  input.classList.add("success");
79
82
  content.innerHTML = res.decrypt;
80
83
  content.style.opacity = 1;
81
- highlight();
82
- showimg();
83
- rendermath();
84
+ this.render();
84
85
  } else input.classList.add("fail");
85
86
  },
86
87
  handlesearch() {