hexo-theme-stellar 1.9.0 → 1.10.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 (56) hide show
  1. package/_config.yml +47 -19
  2. package/languages/en.yml +0 -5
  3. package/languages/zh-CN.yml +0 -5
  4. package/languages/zh-TW.yml +0 -5
  5. package/layout/404.ejs +1 -1
  6. package/layout/_partial/main/footer.ejs +6 -17
  7. package/layout/_partial/main/header/index.ejs +1 -1
  8. package/layout/_partial/plugins/comments/valine/script.ejs +1 -1
  9. package/layout/_partial/scripts/index.ejs +5 -3
  10. package/layout/_partial/sidebar/index.ejs +3 -1
  11. package/layout/_partial/sidebar/widgets/ghuser.ejs +59 -0
  12. package/layout/_partial/sidebar/widgets/repo_info.ejs +28 -9
  13. package/layout/post.ejs +1 -1
  14. package/layout/wiki.ejs +1 -1
  15. package/package.json +1 -1
  16. package/scripts/tags/about.js +12 -13
  17. package/scripts/tags/friends.js +2 -3
  18. package/scripts/tags/ghcard.js +2 -2
  19. package/scripts/tags/lib/users.js +1 -2
  20. package/scripts/tags/sites.js +2 -3
  21. package/scripts/tags/timeline.js +30 -25
  22. package/source/css/_common/base.styl +2 -9
  23. package/source/css/_common/button.styl +1 -1
  24. package/source/css/_common/device.styl +2 -2
  25. package/source/css/_common/highlight.styl +4 -3
  26. package/source/css/_common/html.styl +2 -0
  27. package/source/css/_common/loading.styl +5 -0
  28. package/source/css/_common/pre.styl +6 -0
  29. package/source/css/_custom.styl +17 -1
  30. package/source/css/_defines/const.styl +1 -0
  31. package/source/css/_defines/theme.styl +1 -1
  32. package/source/css/_layout/layout.styl +2 -2
  33. package/source/css/_layout/main.styl +2 -2
  34. package/source/css/_layout/md.styl +35 -1
  35. package/source/css/_layout/partial/footer.styl +3 -7
  36. package/source/css/_layout/partial/navbar.styl +1 -1
  37. package/source/css/_layout/partial/paginator.styl +4 -0
  38. package/source/css/_layout/partial/related.styl +2 -0
  39. package/source/css/_layout/sidebar/ghuser.styl +80 -0
  40. package/source/css/_layout/sidebar/repo_info.styl +4 -1
  41. package/source/css/_layout/sidebar/sidebar.styl +2 -2
  42. package/source/css/_layout/tag-plugins/about.styl +13 -16
  43. package/source/css/_layout/tag-plugins/common.styl +1 -1
  44. package/source/css/_layout/tag-plugins/friends.styl +3 -6
  45. package/source/css/_layout/tag-plugins/inline-labels.styl +1 -0
  46. package/source/css/_layout/tag-plugins/link.styl +2 -1
  47. package/source/css/_layout/tag-plugins/note.styl +8 -0
  48. package/source/css/_layout/tag-plugins/sites.styl +2 -6
  49. package/source/css/_layout/tag-plugins/tabs.styl +5 -0
  50. package/source/css/_layout/tag-plugins/timeline.styl +85 -2
  51. package/source/css/_layout/tag-plugins/toc.styl +1 -1
  52. package/source/js/main.js +13 -15
  53. package/source/js/plugins/friends.js +1 -2
  54. package/source/js/plugins/ghinfo.js +73 -0
  55. package/source/js/plugins/sites.js +1 -1
  56. package/source/js/plugins/timeline.js +122 -0
@@ -0,0 +1,73 @@
1
+ const GitHubInfo = {
2
+ requestAPI: (url, callback, timeout) => {
3
+ let retryTimes = 5;
4
+ function request() {
5
+ return new Promise((resolve, reject) => {
6
+ let status = 0; // 0 等待 1 完成 2 超时
7
+ let timer = setTimeout(() => {
8
+ if (status === 0) {
9
+ status = 2;
10
+ timer = null;
11
+ reject('请求超时');
12
+ if (retryTimes == 0) {
13
+ timeout();
14
+ }
15
+ }
16
+ }, 5000);
17
+ fetch(url).then(function(response) {
18
+ if (status !== 2) {
19
+ clearTimeout(timer);
20
+ resolve(response);
21
+ timer = null;
22
+ status = 1;
23
+ }
24
+ if (response.ok) {
25
+ return response.json();
26
+ }
27
+ throw new Error('Network response was not ok.');
28
+ }).then(function(data) {
29
+ retryTimes = 0;
30
+ callback(data);
31
+ }).catch(function(error) {
32
+ if (retryTimes > 0) {
33
+ retryTimes -= 1;
34
+ setTimeout(() => {
35
+ request();
36
+ }, 5000);
37
+ } else {
38
+ timeout();
39
+ }
40
+ });
41
+ });
42
+ }
43
+ request();
44
+ },
45
+ layout: (cfg) => {
46
+ const el = $(cfg.el)[0];
47
+ GitHubInfo.requestAPI(cfg.api, function(data) {
48
+ const arr = data.content || data;
49
+ for (let key of Object.keys(data)) {
50
+ $(el).find("[type=text]#" + key).text(data[key]);
51
+ $(el).find("[type=link]#" + key).attr("href", data[key]);
52
+ $(el).find("[type=img]#" + key).attr("src", data[key]);
53
+ }
54
+ }, function() {
55
+ });
56
+ },
57
+ }
58
+
59
+ $(function () {
60
+ const els = document.getElementsByClassName('stellar-ghinfo-api');
61
+ for (var i = 0; i < els.length; i++) {
62
+ const el = els[i];
63
+ const api = el.getAttribute('api');
64
+ if (api == null) {
65
+ continue;
66
+ }
67
+ var cfg = new Object();
68
+ cfg.el = el;
69
+ cfg.api = api;
70
+ cfg.class = el.getAttribute('class');
71
+ GitHubInfo.layout(cfg);
72
+ }
73
+ });
@@ -69,7 +69,7 @@ const sitesjs = {
69
69
  }
70
70
 
71
71
  $(function () {
72
- const els = document.getElementsByClassName('sitesjs-wrap');
72
+ const els = document.getElementsByClassName('stellar-sites-api');
73
73
  for (var i = 0; i < els.length; i++) {
74
74
  const el = els[i];
75
75
  const api = el.getAttribute('api');
@@ -0,0 +1,122 @@
1
+ const StellarTimeline = {
2
+ reactions: {
3
+ '+1': '👍',
4
+ '-1': '👎',
5
+ 'laugh': '😀',
6
+ 'hooray': '🎉',
7
+ 'confused': '😕',
8
+ 'heart': '❤️',
9
+ 'rocket': '🚀',
10
+ 'eyes': '👀'
11
+ },
12
+ requestAPI: (url, callback, timeout) => {
13
+ let retryTimes = 5;
14
+ function request() {
15
+ return new Promise((resolve, reject) => {
16
+ let status = 0; // 0 等待 1 完成 2 超时
17
+ let timer = setTimeout(() => {
18
+ if (status === 0) {
19
+ status = 2;
20
+ timer = null;
21
+ reject('请求超时');
22
+ if (retryTimes == 0) {
23
+ timeout();
24
+ }
25
+ }
26
+ }, 5000);
27
+ fetch(url).then(function(response) {
28
+ if (status !== 2) {
29
+ clearTimeout(timer);
30
+ resolve(response);
31
+ timer = null;
32
+ status = 1;
33
+ }
34
+ if (response.ok) {
35
+ return response.json();
36
+ }
37
+ throw new Error('Network response was not ok.');
38
+ }).then(function(data) {
39
+ retryTimes = 0;
40
+ callback(data);
41
+ }).catch(function(error) {
42
+ if (retryTimes > 0) {
43
+ retryTimes -= 1;
44
+ setTimeout(() => {
45
+ request();
46
+ }, 5000);
47
+ } else {
48
+ timeout();
49
+ }
50
+ });
51
+ });
52
+ }
53
+ request();
54
+ },
55
+ layoutDiv: (cfg) => {
56
+ const el = $(cfg.el)[0];
57
+ $(el).append('<div class="loading-wrap"><svg class="loading" style="vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2709"><path d="M832 512c0-176-144-320-320-320V128c211.2 0 384 172.8 384 384h-64zM192 512c0 176 144 320 320 320v64C300.8 896 128 723.2 128 512h64z" p-id="2710"></path></svg><p></p></div>');
58
+ StellarTimeline.requestAPI(cfg.api, function(data) {
59
+ $(el).find('.loading-wrap').remove();
60
+ const arr = data.content || data;
61
+ arr.forEach((item, i) => {
62
+ if (item.labels.length > 0) {
63
+ var cell = '<div class="timenode" index="' + i + '">';
64
+ cell += '<div class="header">';
65
+ let date = new Date(item.created_at);
66
+ cell += '<p>' + date.toString().replace(/\sGMT([^.]*)/i, "") + '</p>';
67
+ cell += '</div>';
68
+ cell += '<div class="body">';
69
+ cell += '<p class="title">' + item.title + '</p>';
70
+ cell += marked.parse(item.body);
71
+ cell += '<div class="footer">';
72
+ cell += '<div class="flex labels">';
73
+ item.labels.forEach((label, i) => {
74
+ cell += '<div class="item label ' + label.name + '" style="background:#' + label.color + '12;border-color:#' + label.color + '22">';
75
+ cell += '<span>' + label.name + '</span>';
76
+ cell += '</div>';
77
+ });
78
+ cell += '</div>';
79
+ cell += '<div class="flex reactions">';
80
+ if (item.reactions.total_count > 0) {
81
+ for (let key of Object.keys(StellarTimeline.reactions)) {
82
+ let num = item.reactions[key];
83
+ if (num > 0) {
84
+ cell += '<div class="item reaction ' + key + '">';
85
+ cell += '<span class="key ' + key + '">' + StellarTimeline.reactions[key] + '</span>';
86
+ cell += '<span class="value ' + key + '">' + item.reactions[key] + '</span>';
87
+ cell += '</div>';
88
+ }
89
+ }
90
+ }
91
+ cell += '<a class="item comments" href="' + item.html_url + '" target="_blank" rel="external nofollow noopener noreferrer">';
92
+ cell += '<span class="key comments">💬</span>';
93
+ cell += '<span class="value comments">' + item.comments + '</span>';
94
+ cell += '</a>';
95
+ cell += '</div>';
96
+ cell += '</div>';
97
+ cell += '</div>';
98
+ cell += '</div>';
99
+ $(el).append(cell);
100
+ }
101
+ });
102
+ }, function() {
103
+ $(el).find('.loading-wrap svg').remove();
104
+ $(el).find('.loading-wrap p').text('加载失败,请稍后重试。');
105
+ });
106
+ },
107
+ }
108
+
109
+ $(function () {
110
+ const els = document.getElementsByClassName('stellar-timeline-api');
111
+ for (var i = 0; i < els.length; i++) {
112
+ const el = els[i];
113
+ const api = el.getAttribute('api');
114
+ if (api == null) {
115
+ continue;
116
+ }
117
+ var obj = new Object();
118
+ obj.el = el;
119
+ obj.api = api;
120
+ StellarTimeline.layoutDiv(obj);
121
+ }
122
+ });