hexo-theme-stellar 1.25.0 → 1.26.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.
Files changed (117) hide show
  1. package/_config.yml +80 -32
  2. package/_data/icons.yml +33 -0
  3. package/_data/widgets.yml +2 -16
  4. package/languages/zh-CN.yml +1 -1
  5. package/languages/zh-TW.yml +1 -1
  6. package/layout/404.ejs +2 -2
  7. package/layout/_partial/cover/index.ejs +5 -5
  8. package/layout/_partial/cover/post_cover.ejs +1 -1
  9. package/layout/_partial/cover/wiki_cover.ejs +2 -2
  10. package/layout/_partial/head.ejs +5 -8
  11. package/layout/_partial/main/article/article_footer.ejs +7 -15
  12. package/layout/_partial/main/article/read_next.ejs +6 -6
  13. package/layout/_partial/main/article/related_posts.ejs +1 -1
  14. package/layout/_partial/main/footer.ejs +1 -1
  15. package/layout/_partial/main/navbar/article_top_area.ejs +35 -0
  16. package/layout/_partial/main/navbar/author_banner.ejs +1 -3
  17. package/layout/_partial/main/navbar/breadcrumb/blog.ejs +34 -0
  18. package/layout/_partial/main/navbar/breadcrumb/page.ejs +10 -0
  19. package/layout/_partial/main/navbar/breadcrumb/wiki.ejs +20 -0
  20. package/layout/_partial/main/navbar/dateinfo.ejs +32 -0
  21. package/layout/_partial/main/navbar/ghinfo.ejs +25 -0
  22. package/layout/_partial/main/navbar/nav_tabs_blog.ejs +3 -3
  23. package/layout/_partial/main/navbar/nav_tabs_wiki.ejs +2 -2
  24. package/layout/_partial/main/post_list/paginator.ejs +1 -1
  25. package/layout/_partial/main/post_list/post_card.ejs +3 -3
  26. package/layout/_partial/menubtn.ejs +1 -1
  27. package/layout/_partial/plugins/ai/tianli_gpt.ejs +4 -3
  28. package/layout/_partial/plugins/comments/artalk/layout.ejs +1 -1
  29. package/layout/_partial/plugins/comments/artalk/script.ejs +1 -1
  30. package/layout/_partial/plugins/comments/beaudar/layout.ejs +1 -1
  31. package/layout/_partial/plugins/comments/giscus/layout.ejs +1 -1
  32. package/layout/_partial/plugins/comments/layout.ejs +3 -3
  33. package/layout/_partial/plugins/comments/twikoo/layout.ejs +1 -1
  34. package/layout/_partial/plugins/comments/utterances/layout.ejs +1 -1
  35. package/layout/_partial/plugins/comments/waline/layout.ejs +1 -1
  36. package/layout/_partial/sidebar/index.ejs +72 -71
  37. package/layout/_partial/sidebar/logo.ejs +87 -0
  38. package/layout/_partial/sidebar/menu.ejs +23 -18
  39. package/layout/_partial/sidebar/search.ejs +42 -0
  40. package/layout/_partial/widgets/components/link.ejs +21 -0
  41. package/layout/_partial/widgets/components/linklist.ejs +27 -0
  42. package/layout/_partial/widgets/ghissues.ejs +7 -9
  43. package/layout/_partial/widgets/ghrepo.ejs +10 -12
  44. package/layout/_partial/widgets/ghuser.ejs +2 -6
  45. package/layout/_partial/widgets/linklist.ejs +17 -0
  46. package/layout/_partial/widgets/markdown.ejs +5 -2
  47. package/layout/_partial/widgets/recent.ejs +12 -8
  48. package/layout/_partial/widgets/related.ejs +13 -9
  49. package/layout/_partial/widgets/search.ejs +0 -40
  50. package/layout/_partial/widgets/tagcloud.ejs +2 -2
  51. package/layout/_partial/widgets/timeline.ejs +2 -2
  52. package/layout/_partial/widgets/toc.ejs +24 -24
  53. package/layout/archive.ejs +2 -2
  54. package/layout/categories.ejs +1 -1
  55. package/layout/index.ejs +4 -20
  56. package/layout/index_topic.ejs +1 -1
  57. package/layout/index_wiki.ejs +2 -2
  58. package/layout/layout.ejs +53 -21
  59. package/layout/page.ejs +59 -12
  60. package/layout/tags.ejs +1 -1
  61. package/package.json +2 -2
  62. package/scripts/events/lib/config.js +28 -24
  63. package/scripts/events/lib/doc_tree.js +27 -19
  64. package/scripts/events/lib/merge_posts.js +0 -1
  65. package/scripts/generators/topic.js +3 -3
  66. package/scripts/generators/wiki.js +5 -4
  67. package/scripts/helpers/category_color.js +1 -1
  68. package/scripts/helpers/icon.js +16 -0
  69. package/scripts/helpers/parse_config.js +18 -16
  70. package/scripts/helpers/scrollreveal.js +6 -6
  71. package/scripts/tags/lib/toc.js +1 -1
  72. package/source/css/_common/blur.styl +1 -8
  73. package/source/css/_common/cap.styl +1 -1
  74. package/source/css/_common/device.styl +2 -2
  75. package/source/css/_common/highlight.styl +2 -2
  76. package/source/css/_common/layout.styl +6 -0
  77. package/source/css/_common/svg.styl +3 -0
  78. package/source/css/_custom.styl +9 -2
  79. package/source/css/_defines/theme.styl +10 -0
  80. package/source/css/_layout/layout.styl +17 -4
  81. package/source/css/_layout/list.styl +5 -2
  82. package/source/css/_layout/main.styl +5 -4
  83. package/source/css/_layout/md.styl +12 -11
  84. package/source/css/_layout/partial/paginator.styl +2 -2
  85. package/source/css/_layout/sidebar/footer.styl +4 -31
  86. package/source/css/_layout/sidebar/{header.styl → logo.styl} +11 -41
  87. package/source/css/_layout/sidebar/menu.styl +53 -0
  88. package/source/css/_layout/sidebar/nav-area.styl +2 -0
  89. package/source/css/_layout/{widgets → sidebar}/search.styl +51 -50
  90. package/source/css/_layout/sidebar/sidebar.styl +21 -31
  91. package/source/css/_layout/tag-plugins/banner.styl +9 -10
  92. package/source/css/_layout/tag-plugins/okr.styl +0 -1
  93. package/source/css/_layout/tag-plugins/tabs.styl +2 -2
  94. package/source/css/_layout/tag-plugins/toc.styl +1 -1
  95. package/source/css/_layout/widgets/components.styl +49 -0
  96. package/source/css/_layout/widgets/ghrepo.styl +0 -1
  97. package/source/css/_layout/widgets/ghuser.styl +0 -23
  98. package/source/css/_layout/widgets/list.styl +28 -0
  99. package/source/css/_layout/widgets/markdown.styl +20 -0
  100. package/source/css/_layout/widgets/related.styl +36 -5
  101. package/source/css/_layout/widgets/timeline.styl +21 -2
  102. package/source/css/_layout/widgets/toc_blog.styl +1 -1
  103. package/source/css/_layout/widgets/toc_common.styl +12 -12
  104. package/source/css/_layout/widgets/toc_wiki.styl +38 -25
  105. package/source/css/_layout/widgets/widgets.styl +25 -20
  106. package/source/css/_plugins/comments/twikoo.styl +9 -9
  107. package/source/css/_plugins/scrollreveal.styl +1 -1
  108. package/source/css/_plugins/tianli_gpt.styl +12 -14
  109. package/source/js/main.js +5 -2
  110. package/source/js/plugins/copycode.js +3 -3
  111. package/layout/_partial/main/header/index.ejs +0 -3
  112. package/layout/_partial/main/navbar/breadcrumb.ejs +0 -161
  113. package/layout/_partial/sidebar/header.ejs +0 -58
  114. package/layout/post.ejs +0 -33
  115. package/layout/topic.ejs +0 -28
  116. package/layout/wiki.ejs +0 -32
  117. package/source/css/_layout/widgets/recent.styl +0 -15
@@ -1,161 +0,0 @@
1
- <%
2
- function layoutDiv() {
3
- var el = '';
4
- if (page.breadcrumb === false) {
5
- return el;
6
- }
7
- var home_title = __("btn.home");
8
- if (page.layout === "post") {
9
- var firstCat = "";
10
- if (page.categories && page.categories.length > 0) {
11
- firstCat = page.categories.data[0].name;
12
- }
13
- el += '<div class="bread-nav fs12">';
14
- el += '<div class="left">';
15
- el += '<div id="breadcrumb">';
16
- el += '<a class="cap breadcrumb" href="' + url_for(config.root) + '">' + home_title + '</a>';
17
- el += '<span class="sep"></span>';
18
- el += '<a class="cap breadcrumb" href="' + url_for(config.index_generator.path) + '">' + __("btn.blog") + '</a>';
19
- if (page.layout == "post" && page.categories && page.categories.length > 0) {
20
- el += '<span class="sep"></span>';
21
- el += list_categories(page.categories, {
22
- class: "cap breadcrumb",
23
- show_count: false,
24
- separator: ' <span class="sep"></span> ',
25
- style: "none"
26
- });
27
- }
28
- el += '</div>';
29
- // 作者
30
- var author = null
31
- if (theme.authors) {
32
- if (page.author?.length > 0 && theme.authors[page.author] != null) {
33
- author = theme.authors[page.author]
34
- } else {
35
- author = theme.default_author
36
- }
37
- }
38
- el += '<div id="post-meta">';
39
- if (author) {
40
- let link = `<a href="${url_for(author.path)}">${author.name}</a>`
41
- el += `<span class="author">${__("meta.created_author", link)}</span>`
42
- } else {
43
- el += `<span class="author">${__("meta.created")}</span>`
44
- }
45
- // 发布日期
46
- el += `
47
- <span class="created"><time datetime="${date_xml(page.date)}">${date(page.date, config.date_format)}</time></span>
48
- `;
49
- // 更新日期
50
- el += `
51
- <span class="updated">${__("symbol.comma") + __("meta.updated")}&nbsp;<time datetime="${date_xml(page.updated)}">${date(page.updated, config.date_format)}</time></span>
52
- `;
53
- el += '</div>';
54
-
55
- el += '</div>';
56
- el += '</div>';
57
- } else if (page.layout === 'topic' && page.topic?.length > 0) {
58
- el += '<div class="bread-nav fs12">';
59
- el += '<div class="left">';
60
- el += '<div id="breadcrumb">';
61
- var nodes = [];
62
- // home
63
- el += '<a class="cap breadcrumb" id="home" href="' + url_for(config.root) + '">' + home_title + '</a>';
64
- nodes.push('/');
65
- // menu_id
66
- el += '<span class="sep"></span>';
67
- let url = url_for(theme.site_tree.topic.base_dir);
68
- nodes.push(url);
69
- el += '<a class="cap breadcrumb" id="menu" href="' + url + '">' + __("btn.topic") + '</a>';
70
- // 专栏名
71
- let topicObject = theme.topic.tree[page.topic];
72
- if (topicObject != null) {
73
- let url_proj = url_for(topicObject.homepage?.path);
74
- if (nodes.includes(url_proj) === false) {
75
- el += '<span class="sep"></span>';
76
- el += '<a class="cap breadcrumb" id="proj" href="' + url_proj + '">' + (topicObject.name || topicObject.title) + '</a>';
77
- }
78
- }
79
- el += '</div>';
80
- // 更新日期
81
- el += '<div id="post-meta">';
82
- el += `
83
- <span>${__("meta.updated")}&nbsp;<time datetime="${date_xml(page.updated)}">${date(page.updated, config.date_format)}</time></span>
84
- `;
85
- el += '</div>';
86
- el += '</div>';
87
- el += '</div>';
88
- } else if (page.layout === "wiki" && page.wiki?.length > 0) {
89
- el += '<div class="bread-nav fs12">';
90
- el += '<div class="left">';
91
- el += '<div id="breadcrumb">';
92
- var nodes = [];
93
- // home
94
- el += '<a class="cap breadcrumb" id="home" href="' + url_for(config.root) + '">' + home_title + '</a>';
95
- nodes.push('/');
96
- // menu_id
97
- el += '<span class="sep"></span>';
98
- if (page.menu_id && theme.menu[page.menu_id] && md_link(theme.menu[page.menu_id])) {
99
- let url = url_for(md_link(theme.menu[page.menu_id]));
100
- nodes.push(url);
101
- el += '<a class="cap breadcrumb" id="menu" href="' + url + '">' + __(md_text(theme.menu[page.menu_id])) + '</a>';
102
- } else {
103
- let url = url_for(theme.site_tree.wiki.base_dir);
104
- nodes.push(url);
105
- el += '<a class="cap breadcrumb" id="menu" href="' + url + '">' + __("btn.wiki") + '</a>';
106
- }
107
- // 项目名
108
- let proj = theme.wiki.tree[page.wiki];
109
- if (proj != null) {
110
- let url_proj = url_for(proj.homepage?.path);
111
- if (nodes.includes(url_proj) === false) {
112
- el += '<span class="sep"></span>';
113
- el += '<a class="cap breadcrumb" id="proj" href="' + url_proj + '">' + (proj.name || proj.title) + '</a>';
114
- }
115
- }
116
- el += '</div>';
117
- // 更新日期
118
- el += '<div id="post-meta">';
119
- el += `
120
- <span>${__("meta.updated")}&nbsp;<time datetime="${date_xml(page.updated)}">${date(page.updated, config.date_format)}</time></span>
121
- `;
122
- el += '</div>';
123
- el += '</div>';
124
-
125
- const repo = page.repo || proj?.repo
126
- if (repo) {
127
- el += `
128
- <div class="right ghrepo stellar-ghinfo-api" api="${theme.api_host.ghapi}/repos/${repo}">
129
- <a class="repo-link bold" href="https://github.com/${repo}">
130
- <svg aria-hidden="true" role="img" class="color-icon-primary" viewBox="0 0 16 16" width="1em" height="1em" fill="currentColor" style="user-select:none;overflow:visible"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
131
- <span type="text">${repo}</span>
132
- </a>
133
- <a class="repo-link" href="https://github.com/${repo}/stargazers">
134
- <svg aria-hidden="true" role="img" class="color-icon-primary" viewBox="0 0 16 16" width="1em" height="1em" fill="currentColor" style="user-select:none;overflow:visible"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg>
135
- <span type="text" id="stargazers_count">0</span><span>stars</span>
136
- </a>
137
- <a class="repo-link" href="https://github.com/${repo}/forks">
138
- <svg aria-hidden="true" role="img" class="color-icon-primary" viewBox="0 0 16 16" width="1em" height="1em" fill="currentColor" style="user-select:none;overflow:visible"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg>
139
- <span type="text" id="forks_count">0</span><span>forks</span>
140
- </a>
141
- </div>
142
- `;
143
- }
144
- el += '</div>';
145
- } else if (page.title || page.seo_title) {
146
- el += `
147
- <div class="bread-nav fs12">
148
- <div class="left">
149
- <div id="breadcrumb">
150
- <a class="cap breadcrumb" href="${url_for(config.root)}">${home_title}</a>
151
- <span class="sep"></span>
152
- <a class="cap breadcrumb" href="${url_for(page.path)}">${page.title || page.seo_title}</a>
153
- </div>
154
- </div>
155
- </div>
156
- `;
157
- }
158
- return el;
159
- }
160
- %>
161
- <%- layoutDiv() %>
@@ -1,58 +0,0 @@
1
- <%
2
- var proj;
3
- if (page.layout === 'wiki' && page.wiki) {
4
- proj = theme.wiki.tree[page.wiki];
5
- }
6
- function layoutTitle(main, url, sub) {
7
- var el = '';
8
- el += '<a class="title" href="' + url_for(url || "/") + '">';
9
- el += '<div class="main" ff="title">' + main + '</div>';
10
- if (sub) {
11
- let arr = sub.split('|');
12
- if (arr.length > 1) {
13
- el += '<div class="sub normal cap">' + arr.shift().trim() + '</div>';
14
- el += '<div class="sub hover cap" style="opacity:0">' + arr.join('|') + '</div>';
15
- } else {
16
- el += '<div class="sub cap">' + sub + '</div>';
17
- }
18
- }
19
- el += '</a>';
20
- return el;
21
- }
22
-
23
- function layoutDiv() {
24
- var el = '';
25
- if (page.layout == 'wiki' && page.menu_id == 'wiki') {
26
- return el;
27
- }
28
- el += '<header class="header';
29
- if (where == 'main') {
30
- el += ' mobile-only';
31
- }
32
- el += '">';
33
-
34
- el += '<div class="logo-wrap">';
35
- if (md_text(theme.logo.avatar)) {
36
- el += '<a class="avatar" href="' + url_for(md_link(theme.logo.avatar) || "/") + '">';
37
- if (theme.style.animated_avatar.animate) {
38
- el += '<div class="bg" style="opacity:0;background-image:url(' + theme.style.animated_avatar.background + ');"></div>';
39
- }
40
- el += '<img no-lazy class="avatar" src="' + md_text(theme.logo.avatar) + '">';
41
- el += '</a>';
42
- }
43
- let main = md_text(theme.logo.title);
44
- if (main) {
45
- let url = md_link(theme.logo.title);
46
- el += layoutTitle(main, url, theme.logo.subtitle);
47
- }
48
- el += '</div>';
49
-
50
- if (where != 'main') {
51
- el += partial('menu', {where: where});
52
- }
53
- el += '</header>';
54
- return el;
55
- }
56
- %>
57
-
58
- <%- layoutDiv() %>
package/layout/post.ejs DELETED
@@ -1,33 +0,0 @@
1
- <%
2
- if (page.menu_id == undefined) {
3
- page.menu_id = 'post';
4
- }
5
- if (page.header == undefined) {
6
- page.header = 'auto';
7
- }
8
- function layoutTitle() {
9
- const title = page.h1 != null ? page.h1 : page.title;
10
- if (title && title.length > 0) {
11
- return '<h1 class="article-title"><span>' + title + '</span></h1>';
12
- } else {
13
- return '';
14
- }
15
- }
16
- let post = page;
17
- let heti = '';
18
- if (theme.plugins.heti && theme.plugins.heti.enable) {
19
- heti = ' heti';
20
- }
21
- %>
22
- <%- partial('_partial/main/navbar/breadcrumb') %>
23
- <article class='md-text content<%- heti %> <%- post.layout %><%- post.indent ? ' indent' : '' %><%- scrollreveal() %>'>
24
- <%- layoutTitle() %>
25
- <%- post.content %>
26
- <% if (theme.plugins.tianli_gpt.enable && ['all', 'post'].includes(theme.plugins.tianli_gpt.field)) { %>
27
- <%- partial('_partial/plugins/ai/tianli_gpt') %>
28
- <% } %>
29
- <%- partial('_partial/main/article/article_footer') %>
30
- </article>
31
- <%- partial('_partial/main/article/read_next') %>
32
- <%- partial('_partial/main/article/related_posts') %>
33
- <%- partial('_partial/plugins/comments/layout') %>
package/layout/topic.ejs DELETED
@@ -1,28 +0,0 @@
1
- <%
2
- if (page.menu_id == undefined) {
3
- page.menu_id = 'post'
4
- }
5
- if (page.title == undefined) {
6
- page.title = __('btn.topic')
7
- }
8
- function layoutTitle() {
9
- const title = page.h1 != null ? page.h1 : page.title;
10
- if (title && title.length > 0) {
11
- return '<h1 class="article-title"><span>' + title + '</span></h1>';
12
- } else {
13
- return '';
14
- }
15
- }
16
- %>
17
-
18
- <%- partial('_partial/main/navbar/breadcrumb') %>
19
- <article class='md-text content <%- page.layout %><%- page.indent ? ' indent' : '' %><%- scrollreveal() %>'>
20
- <%- layoutTitle() %>
21
- <%- markdown(page.content) %>
22
- <% if (theme.plugins.tianli_gpt.enable && ['all', 'topic'].includes(theme.plugins.tianli_gpt.field)) { %>
23
- <%- partial('_partial/plugins/ai/tianli_gpt') %>
24
- <% } %>
25
- <%- partial('_partial/main/article/article_footer') %>
26
- </article>
27
- <%- partial('_partial/main/article/read_next') %>
28
- <%- partial('_partial/plugins/comments/layout') %>
package/layout/wiki.ejs DELETED
@@ -1,32 +0,0 @@
1
- <%
2
- if (page.menu_id == undefined) {
3
- page.menu_id = 'wiki';
4
- }
5
- if (page.title == undefined) {
6
- if (page.tagName) {
7
- page.title = page.tagName;
8
- } else {
9
- page.title = __('btn.wiki');
10
- }
11
- }
12
- function layoutTitle() {
13
- const title = page.h1 != null ? page.h1 : page.title;
14
- if (title && title.length > 0) {
15
- return '<h1 class="article-title"><span>' + title + '</span></h1>';
16
- } else {
17
- return '';
18
- }
19
- }
20
- %>
21
-
22
- <%- partial('_partial/main/navbar/breadcrumb') %>
23
- <article class='md-text content <%- page.layout %><%- page.indent ? ' indent' : '' %><%- scrollreveal() %>'>
24
- <%- layoutTitle() %>
25
- <%- page.content %>
26
- <% if (theme.plugins.tianli_gpt.enable && ['all', 'wiki'].includes(theme.plugins.tianli_gpt.field)) { %>
27
- <%- partial('_partial/plugins/ai/tianli_gpt') %>
28
- <% } %>
29
- <%- partial('_partial/main/article/article_footer') %>
30
- </article>
31
- <%- partial('_partial/main/article/read_next') %>
32
- <%- partial('_partial/plugins/comments/layout') %>
@@ -1,15 +0,0 @@
1
- .widget-wrapper.recent .widget-body
2
- display: flex
3
- flex-direction: column
4
- align-items: flex-start
5
- margin-top: 0.25rem
6
- a
7
- line-height: 1.2
8
- font-size: $fs-13
9
- margin: 0.25rem 0
10
- .title
11
- font-size: $fs-13
12
- color: var(--text-p2)
13
- &:hover
14
- color: $color-hover
15
-