hexo-theme-stellar 1.18.0 → 1.18.2

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 (87) hide show
  1. package/README.md +2 -2
  2. package/_config.yml +32 -34
  3. package/layout/404.ejs +1 -1
  4. package/layout/_partial/cover/wiki_cover.ejs +1 -1
  5. package/layout/_partial/plugins/comments/artalk/layout.ejs +19 -0
  6. package/layout/_partial/plugins/comments/artalk/script.ejs +25 -0
  7. package/layout/_partial/plugins/comments/layout.ejs +4 -4
  8. package/layout/_partial/scripts/index.ejs +1 -1
  9. package/layout/_partial/widgets/toc.ejs +1 -1
  10. package/package.json +1 -1
  11. package/scripts/tags/index.js +32 -6
  12. package/scripts/tags/inline-labels.js +27 -27
  13. package/scripts/tags/lib/ablock.js +33 -0
  14. package/scripts/tags/lib/about.js +48 -0
  15. package/scripts/tags/lib/checkbox.js +30 -0
  16. package/scripts/tags/{copy.js → lib/copy.js} +23 -23
  17. package/scripts/tags/lib/emoji.js +40 -0
  18. package/scripts/tags/{folders.js → lib/folders.js} +22 -22
  19. package/scripts/tags/lib/folding.js +30 -0
  20. package/scripts/tags/lib/frame.js +66 -0
  21. package/scripts/tags/lib/friends.js +53 -0
  22. package/scripts/tags/{ghcard.js → lib/ghcard.js} +18 -18
  23. package/scripts/tags/{grid.js → lib/grid.js} +20 -20
  24. package/scripts/tags/{image.js → lib/image.js} +38 -38
  25. package/scripts/tags/lib/link.js +78 -0
  26. package/scripts/tags/lib/mark.js +23 -0
  27. package/scripts/tags/lib/navbar.js +57 -0
  28. package/scripts/tags/lib/note.js +35 -0
  29. package/scripts/tags/lib/poetry.js +47 -0
  30. package/scripts/tags/{quot.js → lib/quot.js} +24 -24
  31. package/scripts/tags/lib/sites.js +57 -0
  32. package/scripts/tags/lib/swiper.js +36 -0
  33. package/scripts/tags/lib/tabs.js +33 -33
  34. package/scripts/tags/{tag.js → lib/tag.js} +13 -13
  35. package/scripts/tags/lib/timeline.js +78 -0
  36. package/scripts/tags/lib/toc.js +73 -0
  37. package/source/css/_common/base.styl +2 -2
  38. package/source/css/_common/blockquote.styl +2 -2
  39. package/source/css/_common/button.styl +38 -2
  40. package/source/css/_common/highlight.styl +11 -10
  41. package/source/css/_custom.styl +17 -8
  42. package/source/css/_defines/func.styl +1 -1
  43. package/source/css/_defines/theme.styl +5 -7
  44. package/source/css/_layout/list.styl +0 -1
  45. package/source/css/_layout/md.styl +15 -13
  46. package/source/css/_layout/pages/archives.styl +1 -1
  47. package/source/css/_layout/pages/error.styl +0 -1
  48. package/source/css/_layout/partial/related.styl +8 -6
  49. package/source/css/_layout/sidebar/header.styl +1 -1
  50. package/source/css/_layout/sidebar/sidebar.styl +2 -1
  51. package/source/css/_layout/tag-plugins/checkbox.styl +3 -4
  52. package/source/css/_layout/tag-plugins/common.styl +6 -6
  53. package/source/css/_layout/tag-plugins/copy.styl +1 -1
  54. package/source/css/_layout/tag-plugins/folders.styl +9 -9
  55. package/source/css/_layout/tag-plugins/folding.styl +5 -4
  56. package/source/css/_layout/tag-plugins/grid.styl +4 -1
  57. package/source/css/_layout/tag-plugins/link.styl +1 -1
  58. package/source/css/_layout/tag-plugins/note.styl +9 -10
  59. package/source/css/_layout/tag-plugins/quot.styl +6 -6
  60. package/source/css/_layout/tag-plugins/tabs.styl +2 -2
  61. package/source/css/_layout/tag-plugins/timeline.styl +1 -5
  62. package/source/css/_layout/tag-plugins/toc.styl +1 -1
  63. package/source/css/_layout/widgets/search.styl +28 -18
  64. package/source/css/_layout/widgets/toc_wiki.styl +1 -1
  65. package/source/css/_plugins/aplayer.styl +3 -0
  66. package/source/css/_plugins/comments/artalk.styl +4 -0
  67. package/source/css/_plugins/comments/utterances.styl +1 -1
  68. package/source/css/_plugins/index.styl +4 -0
  69. package/source/css/_plugins/swiper.styl +17 -7
  70. package/source/js/main.js +30 -6
  71. package/scripts/tags/ablock.js +0 -33
  72. package/scripts/tags/about.js +0 -48
  73. package/scripts/tags/checkbox.js +0 -38
  74. package/scripts/tags/emoji.js +0 -40
  75. package/scripts/tags/folding.js +0 -30
  76. package/scripts/tags/frame.js +0 -66
  77. package/scripts/tags/friends.js +0 -53
  78. package/scripts/tags/lib/users.js +0 -22
  79. package/scripts/tags/link.js +0 -79
  80. package/scripts/tags/mark.js +0 -23
  81. package/scripts/tags/navbar.js +0 -57
  82. package/scripts/tags/note.js +0 -35
  83. package/scripts/tags/poetry.js +0 -47
  84. package/scripts/tags/sites.js +0 -57
  85. package/scripts/tags/swiper.js +0 -38
  86. package/scripts/tags/timeline.js +0 -81
  87. package/scripts/tags/toc.js +0 -72
@@ -1,10 +1,10 @@
1
1
  :root
2
2
  --swiper-theme-color: $color-theme !important
3
- .swiper-container
3
+ .swiper
4
4
  width: 100%
5
5
  border-radius: 4px
6
6
  --gap-p: 2rem
7
- .swiper-container:not(.swiper-container-initialized)
7
+ .swiper:not(.swiper-initialized)
8
8
  display: none
9
9
  div.swiper-slide
10
10
  text-align: center
@@ -25,22 +25,32 @@ div.swiper-slide
25
25
  img
26
26
  border-radius: 4px
27
27
 
28
- .swiper-container[width='max'] div.swiper-slide
28
+ .swiper[width='max'] .swiper-slide
29
29
  width: 100%
30
30
 
31
- .swiper-container[width='min'] div.swiper-slide
31
+ .swiper[width='min'] .swiper-slide
32
32
  width: 25%
33
33
 
34
+ .swiper[effect='cards'] .swiper-slide
35
+ max-width: 75%
36
+
34
37
  .swiper-button-prev,.swiper-button-next
35
- padding: 1rem 0.5rem
38
+ padding: 1rem 0.25rem
36
39
  margin-top: -2rem !important
37
- border-radius: 4px
40
+ border-radius: 40px
38
41
  background: alpha(white, 0.25)
39
42
  trans1 background
40
- --swiper-theme-color: black !important
43
+ --swiper-theme-color: var(--text-p0) !important
41
44
  &:after
42
45
  font-size: 1.2rem !important
43
46
  font-weight: 700 !important
47
+ color: var(--swiper-theme-color)
44
48
  &:hover
45
49
  background: white !important
46
50
  --swiper-theme-color: $color-hover !important
51
+
52
+ .swiper-button-prev:after
53
+ transform: translateX(-1px)
54
+
55
+ .swiper-button-next:after
56
+ transform: translateX(1px)
package/source/js/main.js CHANGED
@@ -95,6 +95,13 @@ const init = {
95
95
  $("article.md-text :header").each(function (idx, node) {
96
96
  segs.push(node)
97
97
  });
98
+ // 定位到激活的目录树(不如pjax体验好)
99
+ // const widgets = document.querySelector('.widgets')
100
+ // const e1 = document.querySelector('.doc-tree-link.active')
101
+ // const offsetTop = e1.getBoundingClientRect().top - widgets.getBoundingClientRect().top - 100
102
+ // if (offsetTop > 0) {
103
+ // widgets.scrollBy({top: offsetTop, behavior: 'smooth'})
104
+ // }
98
105
  // 滚动
99
106
  $(document, window).scroll(function (e) {
100
107
  var scrollTop = $(this).scrollTop();
@@ -111,12 +118,24 @@ const init = {
111
118
  }
112
119
  }
113
120
  if (topSeg) {
114
- $(".toc#toc a.toc-link").removeClass("active")
121
+ $("#data-toc a.toc-link").removeClass("active")
115
122
  var link = "#" + topSeg.attr("id")
116
123
  if (link != '#undefined') {
117
- $('.toc#toc a.toc-link[href="' + encodeURI(link) + '"]').addClass("active")
124
+ const highlightItem = $('#data-toc a.toc-link[href="' + encodeURI(link) + '"]')
125
+ if (highlightItem.length > 0) {
126
+ highlightItem.addClass("active")
127
+ const e0 = document.querySelector('.widgets')
128
+ const e1 = document.querySelector('#data-toc a.toc-link[href="' + encodeURI(link) + '"]')
129
+ const offsetBottom = e1.getBoundingClientRect().bottom - e0.getBoundingClientRect().bottom + 100
130
+ const offsetTop = e1.getBoundingClientRect().top - e0.getBoundingClientRect().top - 80
131
+ if (offsetTop < 0) {
132
+ e0.scrollBy(0, offsetTop)
133
+ } else if (offsetBottom > 0) {
134
+ e0.scrollBy(0, offsetBottom)
135
+ }
136
+ }
118
137
  } else {
119
- $('.toc#toc a.toc-link:first').addClass("active")
138
+ $('#data-toc a.toc-link:first').addClass("active")
120
139
  }
121
140
  }
122
141
  })
@@ -124,7 +143,7 @@ const init = {
124
143
  },
125
144
  sidebar: () => {
126
145
  stellar.jQuery(() => {
127
- $(".toc#toc a.toc-link").click(function (e) {
146
+ $("#data-toc a.toc-link").click(function (e) {
128
147
  l_body.classList.remove("sidebar");
129
148
  });
130
149
  })
@@ -144,7 +163,7 @@ const init = {
144
163
  */
145
164
  registerTabsTag: function () {
146
165
  // Binding `nav-tabs` & `tab-content` by real time permalink changing.
147
- document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(element => {
166
+ document.querySelectorAll('.tabs .nav-tabs .tab').forEach(element => {
148
167
  element.addEventListener('click', event => {
149
168
  event.preventDefault();
150
169
  // Prevent selected tab to select again.
@@ -241,10 +260,12 @@ if (stellar.plugins.swiper) {
241
260
  if (swiper_api != undefined) {
242
261
  stellar.loadCSS(stellar.plugins.swiper.css);
243
262
  stellar.loadScript(stellar.plugins.swiper.js, { defer: true }).then(function () {
244
- var swiper = new Swiper('.swiper-container', {
263
+ const effect = swiper_api.getAttribute('effect') || '';
264
+ var swiper = new Swiper('.swiper#swiper-api', {
245
265
  slidesPerView: 'auto',
246
266
  spaceBetween: 8,
247
267
  centeredSlides: true,
268
+ effect: effect,
248
269
  loop: true,
249
270
  pagination: {
250
271
  el: '.swiper-pagination',
@@ -307,6 +328,9 @@ if (stellar.search.service) {
307
328
  stellar.jQuery(() => {
308
329
  stellar.loadScript('/js/search/local-search.js', { defer: true }).then(function () {
309
330
  var $inputArea = $("input#search-input");
331
+ if ($inputArea.length == 0) {
332
+ return;
333
+ }
310
334
  var $resultArea = document.querySelector("div#search-result");
311
335
  $inputArea.focus(function() {
312
336
  var path = stellar.search[stellar.search.service]?.path || '/search.json';
@@ -1,33 +0,0 @@
1
- /**
2
- * ablock.js v1.0 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% ablock [color:color] [child:codeblock/tabs] title %}
6
- * body
7
- * {% endablock %}
8
- */
9
-
10
- 'use strict';
11
-
12
- hexo.extend.tag.register('ablock', function(args, content) {
13
- args = hexo.args.map(args, ['color', 'child'], ['title']);
14
- const { title } = args;
15
- if (args.color == null) {
16
- args.color = hexo.theme.config.tag_plugins.note.default_color
17
- }
18
- var el = '';
19
- // header
20
- el += '<div class="tag-plugin note"';
21
- el += ' ' + hexo.args.joinTags(args, ['color', 'child']).join(' ');
22
- el += '>';
23
- // title
24
- if (title && title.length > 0) {
25
- el += '<div class="title"><strong>' + title + '</strong></div>';
26
- }
27
- // content
28
- el += '<div class="body">';
29
- el += hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n').join('');
30
- el += '</div></div>';
31
-
32
- return el;
33
- }, {ends: true});
@@ -1,48 +0,0 @@
1
- /**
2
- * about.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% about [avatar:xxx] [height:80px] %}
6
- * title / body
7
- * {% endabout %}
8
- */
9
-
10
- 'use strict';
11
- const url_for = require('hexo-util').url_for.bind(hexo);
12
-
13
- hexo.extend.tag.register('about', function(args, content) {
14
- args = hexo.args.map(args, ['avatar', 'height', 'border', 'back']);
15
- var rows = hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n');
16
- var el = '';
17
- // wrapper
18
- el += '<div class="tag-plugin about">';
19
- if (args.back) {
20
- el += '<a class="nav-back cap" href="' + url_for(hexo.config.root) + '">';
21
- el += '<svg aria-hidden="true" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path></svg>';
22
- el += '</a>';
23
- }
24
- // avatar
25
- var avatar_url = args.avatar;
26
- if (avatar_url) {
27
- el += '<div class="about-header">';
28
- el += '<div class="avatar">';
29
- el += '<img src="' + avatar_url + '"';
30
- if (args.border && args.border.length > 0) {
31
- el += ' style="border-radius:' + args.border + '"';
32
- }
33
- if (args.height && args.height.length > 0) {
34
- el += ' height="' + args.height + '"';
35
- }
36
- el += '/>';
37
- el += '</div>';
38
- el += '</div>';
39
- }
40
-
41
- // content
42
- el += '<div class="about-body fs14">';
43
- el += rows.join('');
44
- el += '</div>';
45
-
46
- el += '</div>';
47
- return el;
48
- }, {ends: true});
@@ -1,38 +0,0 @@
1
- /**
2
- * checkbox.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * radio.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
4
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
5
- *
6
- * {% checkbox [checked:false] [color:cyan] [symbol:plus/minus/times] text %}
7
- * {% radio [checked:false] [color:cyan] text %}
8
- */
9
-
10
- 'use strict';
11
-
12
- function layoutDiv(args, type) {
13
- args = hexo.args.map(args, ['color', 'checked', 'symbol'], ['text']);
14
- var el = '';
15
- // div
16
- el += '<div class="tag-plugin checkbox"';
17
- el += ' ' + hexo.args.joinTags(args, ['color', 'symbol']).join(' ');
18
- el += '>';
19
- // input
20
- el += '<input type="' + type + '"';
21
- if (args.checked == 'true') {
22
- el += ' checked="true"';
23
- }
24
- el += '/>';
25
- // text
26
- el += '<span>' + args.text + '</span>';
27
- // div
28
- el += '</div>';
29
- return el;
30
- }
31
-
32
- hexo.extend.tag.register('checkbox', function(args) {
33
- return layoutDiv(args, 'checkbox');
34
- });
35
-
36
- hexo.extend.tag.register('radio', function(args) {
37
- return layoutDiv(args, 'radio');
38
- });
@@ -1,40 +0,0 @@
1
- /**
2
- * emoji.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% emoji [source] name [height:1.75em] %}
6
- *
7
- */
8
-
9
- 'use strict';
10
-
11
- hexo.extend.tag.register('emoji', function(args) {
12
- const config = hexo.theme.config.tag_plugins.emoji;
13
- args = hexo.args.map(args, ['height'], ['source', 'name']);
14
- var el = '';
15
- if (args.source == undefined) {
16
- return el;
17
- }
18
- el += '<span class="tag-plugin emoji">';
19
- if (args.name == undefined) {
20
- // 省略了 source
21
- for (let id in config) {
22
- if (config[id]) {
23
- args.name = args.source;
24
- args.source = id;
25
- break;
26
- }
27
- }
28
- }
29
- if (config[args.source] && args.name) {
30
- let url = config[args.source].replace('%s', args.name);
31
- el += '<img no-lazy="" class="inline"';
32
- el += ' src="' + url + '"';
33
- if (args.height) {
34
- el += ' style="height:' + args.height + '"';
35
- }
36
- el += '/>';
37
- }
38
- el += '</span>';
39
- return el;
40
- });
@@ -1,30 +0,0 @@
1
- /**
2
- * folding.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% folding [color:yellow] [child:codeblock] [open:false] title %}
6
- * body
7
- * {% endtable %}
8
- */
9
-
10
- 'use strict';
11
-
12
- hexo.extend.tag.register('folding', function(args, content) {
13
- args = hexo.args.map(args, ['color', 'child', 'open'], ['title']);
14
- var el = '';
15
- // header
16
- el += '<details class="tag-plugin folding"';
17
- el += ' ' + hexo.args.joinTags(args, ['color', 'child']).join(' ');
18
- if (args.open && args.open == 'true') {
19
- el += ' open';
20
- }
21
- el += '>';
22
- // summary
23
- el += '<summary><span>' + (args.title || '') + '</span></summary>';
24
- // content
25
- el += '<div class="body">';
26
- el += hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n').join('');
27
- el += '</div></details>';
28
-
29
- return el;
30
- }, {ends: true});
@@ -1,66 +0,0 @@
1
- /**
2
- * frame.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% frame iphone11 [img:src] [video:url] [focus:top/bottom] [alt] %}
6
- */
7
-
8
- 'use strict';
9
-
10
- hexo.extend.tag.register('frame', function(args) {
11
- args = hexo.args.map(args, ['focus', 'img', 'video'], ['device', 'alt']);
12
- const img = args.img || '';
13
- const video = args.video || '';
14
- const device = args.device || '';
15
- const focus = args.focus || '';
16
- const alt = args.alt || '';
17
- if ((img.length == 0 && video.length == 0) || device.length == 0) {
18
- return;
19
- }
20
- var el = '';
21
- function imgTag(url, alt) {
22
- let i = '';
23
- i += '<img class="img" src="' + url + '"';
24
- if (alt.length > 0) {
25
- i += ' alt="' + alt + '"';
26
- }
27
- i += '/>';
28
- return i;
29
- }
30
- if (video.length > 0) {
31
- el += '<div class="tag-plugin video-wrap">';
32
- el += '<div class="frame-wrap" id="' + device + '"';
33
- if (focus.length > 0) {
34
- el += 'focus="' + focus + '">';
35
- } else {
36
- el += '>';
37
- }
38
- el += '<video';
39
- if (img.length > 0) {
40
- el += ' poster="' + img + '"';
41
- }
42
- el += ' playsinline="" muted="" loop="" autoplay="" preload="metadata">';
43
- el += '<source src="' + video + '" type="video/mp4">';
44
- el += '</video>';
45
-
46
- el += '<div class="frame"></div>';
47
- el += '</div>';
48
- el += '</div>';
49
- } else if (img.length > 0) {
50
- el += '<div class="tag-plugin img-wrap">';
51
- el += '<div class="frame-wrap" id="' + device + '"';
52
- if (focus.length > 0) {
53
- el += 'focus="' + focus + '">';
54
- } else {
55
- el += '>';
56
- }
57
- el += imgTag(img, alt);
58
- el += '<div class="frame"></div>';
59
- el += '</div>';
60
- if (alt.length > 0) {
61
- el += '<span class="image-caption">' + alt + '</span>';
62
- }
63
- el += '</div>';
64
- }
65
- return el;
66
- });
@@ -1,53 +0,0 @@
1
- /**
2
- * friends.js v2 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% friends [group] [repo:owner/repo] [api:http] %}
6
- */
7
-
8
- 'use strict';
9
-
10
- hexo.extend.tag.register('friends', function(args) {
11
- args = hexo.args.map(args, ['repo', 'api'], ['group']);
12
- var links = hexo.locals.get('data').links;
13
- if (links == undefined) {
14
- links = {};
15
- }
16
- var api;
17
- if (args.api) {
18
- api = args.api;
19
- } else if (args.repo) {
20
- api = 'https://api.vlts.cc/output_data/v2/' + args.repo;
21
- }
22
-
23
- var el = '<div class="tag-plugin users-wrap">';
24
- if (api) {
25
- el += '<div class="stellar-friends-api"';
26
- el += ' api="' + api + '"';
27
- el += '>';
28
- el += '<div class="group-body"></div>';
29
- el += '</div>';
30
- } else if (args.group) {
31
- function cell(item) {
32
- if (item.url && item.title) {
33
- var cell = '<div class="user-card">';
34
- cell += '<a class="card-link" target="_blank" rel="external nofollow noopener noreferrer" href="' + item.url + '">';
35
- cell += '<img src="' + (item.avatar || hexo.theme.config.default.avatar) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + hexo.theme.config.default.avatar + '&quot;;"/>';
36
- cell += '<div class="name"><span>' + item.title + '</span></div>';
37
- cell += '</a></div>'
38
- return cell;
39
- } else {
40
- return '';
41
- }
42
- }
43
- el += '<div class="group-body">';
44
- const items = links[args.group] || [];
45
- items.forEach((item, i) => {
46
- el += cell(item);
47
- });
48
- el += '</div>';
49
- }
50
-
51
- el += '</div>';
52
- return el;
53
- });
@@ -1,22 +0,0 @@
1
- /**
2
- * users.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% users api:https://api.github.com/repos/xaoxuu/hexo-theme-stellar/contributors %}
6
- */
7
-
8
- 'use strict';
9
-
10
- module.exports = ctx => function(args) {
11
- args = ctx.args.map(args, ['api']);
12
- var el = '<div class="tag-plugin users-wrap">';
13
-
14
- el += '<div class="stellar-friends-api"';
15
- el += ' api="' + args.api + '"';
16
- el += '>';
17
- el += '<div class="group-body"></div>';
18
- el += '</div>';
19
-
20
- el += '</div>';
21
- return el;
22
- };
@@ -1,79 +0,0 @@
1
- /**
2
- * link.js v1.1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% link url [title] [desc:true/false] [icon:src] %}
6
- */
7
-
8
- 'use strict';
9
-
10
- const full_url_for = require('hexo-util').full_url_for.bind(hexo);
11
-
12
- hexo.extend.tag.register('link', function(args) {
13
- args = hexo.args.map(args, ['icon', 'desc'], ['url', 'title']);
14
- var autofill = [];
15
- if (!args.title) {
16
- autofill.push('title');
17
- }
18
- if (!args.icon) {
19
- autofill.push('icon');
20
- }
21
- if (args.desc) {
22
- autofill.push('desc');
23
- }
24
- var el = '';
25
- el += '<div class="tag-plugin link dis-select">';
26
- el += '<a class="link-card' + (args.desc ? ' rich' : ' plain') + '" title="' + (args.title || '') + '" href="' + args.url + '"';
27
- if (args.url.includes('://')) {
28
- el += ' target="_blank" rel="external nofollow noopener noreferrer"';
29
- }
30
- el += ' cardlink';
31
- el += ' autofill="';
32
- el += autofill.join(',');
33
- el += '"';
34
- el += '>';
35
-
36
- function loadIcon() {
37
- var el = '';
38
- if (hexo.theme.config.plugins.lazyload && hexo.theme.config.plugins.lazyload.enable) {
39
- el += '<div class="lazy img" data-bg="' + (args.icon || hexo.theme.config.default.link) + '"></div>';
40
- } else {
41
- el += '<div class="lazy img" style="background-image:url(&quot;' + (args.icon || hexo.theme.config.default.link) + '&quot;)"></div>';
42
- }
43
- return el;
44
- }
45
- function loadTitle() {
46
- return '<span class="title">' + (args.title || args.url) + '</span>';
47
- }
48
- function loadDesc() {
49
- return '<span class="cap desc fs12"></span>';
50
- }
51
- function loadLink() {
52
- return '<span class="cap link fs12">' + full_url_for(args.url) + '</span>';
53
- }
54
-
55
- if (args.desc) {
56
- // top
57
- el += '<div class="top">';
58
- el += loadIcon() + loadLink();
59
- el += '</div>';
60
- // bottom
61
- el += '<div class="bottom">';
62
- el += loadTitle() + loadDesc();
63
- el += '</div>';
64
- } else {
65
- // left
66
- el += '<div class="left">';
67
- el += loadTitle() + loadLink();
68
- el += '</div>';
69
- // right
70
- el += '<div class="right">';
71
- el += loadIcon();
72
- el += '</div>';
73
- }
74
-
75
- // end
76
- el += '</a></div>';
77
-
78
- return el;
79
- });
@@ -1,23 +0,0 @@
1
- /**
2
- * mark.js v1.0 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% mark text [color:color] %}
6
- *
7
- */
8
-
9
- 'use strict';
10
-
11
- hexo.extend.tag.register('mark', function(args) {
12
- args = hexo.args.map(args, ['color'], ['text']);
13
- if (args.color == null) {
14
- args.color = hexo.theme.config.tag_plugins.mark.default_color
15
- }
16
- var el = '';
17
- el += '<mark class="tag-plugin mark"';
18
- el += ' ' + hexo.args.joinTags(args, ['color']).join(' ');
19
- el += '>';
20
- el += args.text;
21
- el += '</mark>';
22
- return el;
23
- });
@@ -1,57 +0,0 @@
1
- /**
2
- * navbar.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% navbar [markdown link] ... %}
6
- *
7
- * example:
8
- * {% navbar active:1 [Home](/) [About](/about/) [Comments](#comments) %}
9
- */
10
-
11
- 'use strict';
12
-
13
- hexo.extend.tag.register('navbar', function(args) {
14
- if (args.length == 0) {
15
- return;
16
- }
17
- args = hexo.args.map(args, ['active'], ['links']);
18
- if (args.links) {
19
- args.links = args.links.split(' ');
20
- }
21
- var el = '<div class="tag-plugin navbar"><nav class="cap">';
22
- function layoutItem(a, i) {
23
- var text = '';
24
- var href = '';
25
- var el = '<a';
26
- if ((i+1).toString() === args.active) {
27
- el += ' class="active"';
28
- }
29
- if (a.includes('](')) {
30
- // markdown
31
- let tmp = a.split('](');
32
- if (tmp.length > 1) {
33
- text = tmp[0];
34
- if (text.length > 1) {
35
- text = text.substring(1, text.length);
36
- }
37
- href = tmp[1];
38
- if (href.length > 1) {
39
- href = href.substring(0, href.length-1);
40
- }
41
- el += ' href="' + href + '"';
42
- }
43
- } else {
44
- el += ' href="#' + a + '"';
45
- text = a;
46
- }
47
- el += '>';
48
- el += text;
49
- el += '</a>';
50
- return el;
51
- }
52
- (args.links || []).forEach((item, i) => {
53
- el += layoutItem(item, i);
54
- });
55
- el += '</nav></div>';
56
- return el;
57
- });
@@ -1,35 +0,0 @@
1
- /**
2
- * note.js v1.1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
- * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
- *
5
- * {% note [color:color] [title] content %}
6
- */
7
-
8
- 'use strict';
9
-
10
- hexo.extend.tag.register('note', function(args) {
11
- args = hexo.args.map(args, ['color'], ['title', 'content']);
12
- if (args.content == undefined || args.content.length <= 0) {
13
- args.content = args.title;
14
- args.title = '';
15
- }
16
- const { title } = args;
17
- if (args.color == null) {
18
- args.color = hexo.theme.config.tag_plugins.note.default_color
19
- }
20
- var el = '';
21
- // header
22
- el += '<div class="tag-plugin note"';
23
- el += ' ' + hexo.args.joinTags(args, ['color', 'child']).join(' ');
24
- el += '>';
25
- // title
26
- if (title && title.length > 0) {
27
- el += '<div class="title">' + title + '</div>';
28
- }
29
- // content
30
- el += '<div class="body">';
31
- el += hexo.render.renderSync({text: args.content, engine: 'markdown'}).split('\n').join('');
32
- el += '</div></div>';
33
-
34
- return el;
35
- });