hexo-theme-shokax 0.0.2-alpha1 → 0.0.2-alpha3

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 (159) hide show
  1. package/CODE_OF_CONDUCT.md +128 -0
  2. package/CONTRIBUTING.md +56 -0
  3. package/LICENSE +28 -28
  4. package/LICENSE-shoka +21 -21
  5. package/README.md +46 -53
  6. package/README_en.MD +25 -0
  7. package/_config.yml +392 -355
  8. package/_images.yml +100 -100
  9. package/languages/README.md +19 -19
  10. package/languages/default.yml +1 -1
  11. package/languages/en.yml +151 -151
  12. package/languages/ja.yml +146 -146
  13. package/languages/zh-CN.yml +154 -154
  14. package/languages/zh-HK.yml +146 -146
  15. package/languages/zh-TW.yml +146 -146
  16. package/layout/_alternate/atom.ejs +30 -30
  17. package/layout/_alternate/json.ejs +16 -16
  18. package/layout/_alternate/rss.ejs +34 -34
  19. package/layout/_mixin/breadcrumb.pug +33 -33
  20. package/layout/_mixin/card.pug +37 -37
  21. package/layout/_mixin/comment.pug +66 -12
  22. package/layout/_mixin/postmeta.pug +30 -30
  23. package/layout/_mixin/segment.pug +32 -32
  24. package/layout/_mixin/sidebar.pug +36 -36
  25. package/layout/_mixin/widgets.pug +31 -29
  26. package/layout/_partials/footer.pug +40 -40
  27. package/layout/_partials/head/head.pug +51 -58
  28. package/layout/_partials/head/head_com.pug +17 -17
  29. package/layout/_partials/head/pwa.pug +18 -18
  30. package/layout/_partials/header.pug +18 -20
  31. package/layout/_partials/layout.pug +143 -153
  32. package/layout/_partials/loading.pug +13 -13
  33. package/layout/_partials/pagination.pug +4 -4
  34. package/layout/_partials/post/copyright.pug +20 -20
  35. package/layout/_partials/post/footer.pug +14 -14
  36. package/layout/_partials/post/nav.pug +13 -13
  37. package/layout/_partials/post/post.pug +28 -27
  38. package/layout/_partials/post/reward.pug +18 -18
  39. package/layout/_partials/sidebar/menu.pug +37 -37
  40. package/layout/_partials/sidebar/overview.pug +41 -42
  41. package/layout/_partials/third-party/baidu-analytics.pug +11 -11
  42. package/layout/_partials/third-party/clarity.pug +8 -8
  43. package/layout/archive.pug +118 -118
  44. package/layout/category.pug +63 -63
  45. package/layout/index.pug +33 -33
  46. package/layout/page.pug +56 -56
  47. package/layout/post.pug +35 -35
  48. package/layout/tag.pug +43 -43
  49. package/package.json +35 -35
  50. package/scripts/filters/locals.js +59 -59
  51. package/scripts/filters/post.js +23 -23
  52. package/scripts/generaters/archive.js +141 -141
  53. package/scripts/generaters/config.js +43 -43
  54. package/scripts/generaters/images.js +26 -26
  55. package/scripts/generaters/index.js +110 -110
  56. package/scripts/generaters/pages.js +19 -19
  57. package/scripts/generaters/script.js +89 -89
  58. package/scripts/helpers/asset.js +183 -237
  59. package/scripts/helpers/engine.js +190 -190
  60. package/scripts/helpers/list_categories.js +140 -140
  61. package/scripts/helpers/symbols_count_time.js +76 -76
  62. package/scripts/plugin/index.js +6 -6
  63. package/scripts/plugin/lib/injects-point.js +19 -19
  64. package/scripts/plugin/lib/injects.js +89 -88
  65. package/scripts/tags/links.js +86 -86
  66. package/scripts/tags/media.js +19 -19
  67. package/source/assets/algolia_logo.svg +9 -9
  68. package/source/assets/logo.svg +16 -16
  69. package/source/css/_colors.styl +207 -207
  70. package/source/css/_common/components/components.styl +6 -6
  71. package/source/css/_common/components/highlight/highlight.styl +353 -353
  72. package/source/css/_common/components/highlight/operation.styl +21 -21
  73. package/source/css/_common/components/pages/collapse.styl +119 -119
  74. package/source/css/_common/components/pages/home.styl +385 -385
  75. package/source/css/_common/components/pages/pages.styl +56 -56
  76. package/source/css/_common/components/pages/tag-cloud.styl +12 -12
  77. package/source/css/_common/components/post/breadcrumb.styl +39 -39
  78. package/source/css/_common/components/post/copyright.styl +41 -41
  79. package/source/css/_common/components/post/expand.styl +264 -264
  80. package/source/css/_common/components/post/footer.styl +11 -11
  81. package/source/css/_common/components/post/header.styl +79 -79
  82. package/source/css/_common/components/post/nav.styl +63 -63
  83. package/source/css/_common/components/post/post.styl +29 -29
  84. package/source/css/_common/components/post/reward.styl +50 -50
  85. package/source/css/_common/components/post/rtl.styl +12 -12
  86. package/source/css/_common/components/post/tags.styl +39 -39
  87. package/source/css/_common/components/tags/collapse.styl +72 -72
  88. package/source/css/_common/components/tags/container.styl +49 -49
  89. package/source/css/_common/components/tags/label.styl +12 -12
  90. package/source/css/_common/components/tags/links.styl +77 -77
  91. package/source/css/_common/components/tags/list.styl +131 -131
  92. package/source/css/_common/components/tags/note.styl +70 -70
  93. package/source/css/_common/components/tags/player.styl +361 -361
  94. package/source/css/_common/components/tags/quiz.styl +200 -200
  95. package/source/css/_common/components/tags/tabs.styl +83 -83
  96. package/source/css/_common/components/tags/tags.styl +9 -9
  97. package/source/css/_common/components/third-party/loading.styl +222 -222
  98. package/source/css/_common/components/third-party/mermaid/class.styl +90 -90
  99. package/source/css/_common/components/third-party/mermaid/flowchart.styl +72 -72
  100. package/source/css/_common/components/third-party/mermaid/gantt.styl +251 -251
  101. package/source/css/_common/components/third-party/mermaid/git.styl +7 -7
  102. package/source/css/_common/components/third-party/mermaid/mermaid.styl +37 -37
  103. package/source/css/_common/components/third-party/mermaid/pie.styl +9 -9
  104. package/source/css/_common/components/third-party/mermaid/sequence.styl +95 -95
  105. package/source/css/_common/components/third-party/mermaid/state.styl +130 -130
  106. package/source/css/_common/components/third-party/pace.styl +18 -18
  107. package/source/css/_common/components/third-party/search.styl +167 -167
  108. package/source/css/_common/components/third-party/theme.styl +151 -151
  109. package/source/css/_common/components/third-party/third-party.styl +22 -22
  110. package/source/css/_common/components/third-party/valine.styl +548 -548
  111. package/source/css/_common/components/third-party/widgets.styl +57 -57
  112. package/source/css/_common/outline/footer/footer.styl +69 -69
  113. package/source/css/_common/outline/header/brand.styl +77 -77
  114. package/source/css/_common/outline/header/header.styl +20 -20
  115. package/source/css/_common/outline/header/image.styl +79 -79
  116. package/source/css/_common/outline/header/menu.styl +117 -117
  117. package/source/css/_common/outline/header/nav.styl +81 -81
  118. package/source/css/_common/outline/header/right.styl +15 -15
  119. package/source/css/_common/outline/header/tool.styl +207 -207
  120. package/source/css/_common/outline/header/waves.styl +50 -50
  121. package/source/css/_common/outline/mobile.styl +46 -46
  122. package/source/css/_common/outline/outline.styl +78 -78
  123. package/source/css/_common/outline/sidebar/author.styl +59 -59
  124. package/source/css/_common/outline/sidebar/dimmer.styl +23 -23
  125. package/source/css/_common/outline/sidebar/menu.styl +63 -63
  126. package/source/css/_common/outline/sidebar/quick.styl +43 -43
  127. package/source/css/_common/outline/sidebar/related.styl +56 -56
  128. package/source/css/_common/outline/sidebar/sidebar.styl +75 -75
  129. package/source/css/_common/outline/sidebar/social.styl +69 -69
  130. package/source/css/_common/outline/sidebar/state.styl +37 -37
  131. package/source/css/_common/outline/sidebar/tab.styl +71 -71
  132. package/source/css/_common/outline/sidebar/toc.styl +47 -47
  133. package/source/css/_common/scaffolding/animate.styl +318 -318
  134. package/source/css/_common/scaffolding/base.styl +172 -172
  135. package/source/css/_common/scaffolding/buttons.styl +48 -48
  136. package/source/css/_common/scaffolding/divider.styl +36 -36
  137. package/source/css/_common/scaffolding/iconfont.styl +443 -443
  138. package/source/css/_common/scaffolding/normalize.styl +289 -289
  139. package/source/css/_common/scaffolding/pagination.styl +81 -81
  140. package/source/css/_common/scaffolding/ribbon.styl +38 -38
  141. package/source/css/_common/scaffolding/scaffolding.styl +14 -14
  142. package/source/css/_common/scaffolding/scrollbar.styl +37 -37
  143. package/source/css/_common/scaffolding/tables.styl +50 -50
  144. package/source/css/_common/scaffolding/tip.styl +19 -19
  145. package/source/css/_common/scaffolding/toggles.styl +59 -59
  146. package/source/css/_iconfont.styl +451 -451
  147. package/source/css/_mixins.styl +146 -146
  148. package/source/css/_variables.styl +89 -89
  149. package/source/css/app.styl +36 -38
  150. package/source/css/comment.styl +5 -5
  151. package/source/css/mermaid.styl +5 -5
  152. package/source/js/_app/components.js +330 -330
  153. package/source/js/_app/global.js +317 -317
  154. package/source/js/_app/library.js +302 -302
  155. package/source/js/_app/page.js +623 -623
  156. package/source/js/_app/player.js +748 -748
  157. package/source/js/_app/vue.js +43 -43
  158. package/layout/_partials/third-party/qweather.pug +0 -35
  159. package/source/css/plugin.styl +0 -174
@@ -1,317 +1,317 @@
1
- const statics = CONFIG.statics.indexOf('//') > 0 ? CONFIG.statics : CONFIG.root;
2
- const scrollAction = { x: undefined, y: undefined };
3
- let diffY = 0;
4
- let originTitle, titleTime;
5
- const BODY = document.getElementsByTagName('body')[0];
6
- const HTML = document.documentElement;
7
- const Container = $dom('#container');
8
- const loadCat = $dom('#loading');
9
- const siteNav = $dom('#nav');
10
- const siteHeader = $dom('#header');
11
- const menuToggle = siteNav.child('.toggle');
12
- const quickBtn = $dom('#quick');
13
- const sideBar = $dom('#sidebar');
14
- const siteBrand = $dom('#brand');
15
- let toolBtn = $dom('#tool');
16
- let toolPlayer;
17
- let backToTop;
18
- let goToComment;
19
- let showContents;
20
- let siteSearch = $dom('#search');
21
- let siteNavHeight, headerHightInner, headerHight;
22
- let oWinHeight = window.innerHeight;
23
- let oWinWidth = window.innerWidth;
24
- let LOCAL_HASH = 0;
25
- let LOCAL_URL = window.location.href;
26
- let pjax;
27
- const changeTheme = function (type) {
28
- const btn = $dom('.theme .ic');
29
- if (type === 'dark') {
30
- HTML.attr('data-theme', type);
31
- btn.removeClass('i-sun');
32
- btn.addClass('i-moon');
33
- }
34
- else {
35
- HTML.attr('data-theme', null);
36
- btn.removeClass('i-moon');
37
- btn.addClass('i-sun');
38
- }
39
- };
40
- const autoDarkmode = function () {
41
- if (CONFIG.auto_dark.enable) {
42
- if (new Date().getHours() >= CONFIG.auto_dark.start || new Date().getHours() <= CONFIG.auto_dark.end) {
43
- changeTheme('dark');
44
- }
45
- else {
46
- if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
47
- changeTheme('dark');
48
- }
49
- else {
50
- changeTheme();
51
- }
52
- }
53
- }
54
- };
55
- const lazyload = lozad('img, [data-background-image]', {
56
- loaded: function (el) {
57
- el.addClass('lozaded');
58
- }
59
- });
60
- const Loader = {
61
- timer: null,
62
- lock: false,
63
- show: function () {
64
- clearTimeout(this.timer);
65
- document.body.removeClass('loaded');
66
- loadCat.attr('style', 'display:block');
67
- Loader.lock = false;
68
- },
69
- hide: function (sec) {
70
- if (!CONFIG.loader.start) {
71
- sec = -1;
72
- }
73
- this.timer = setTimeout(this.vanish, sec || 3000);
74
- },
75
- vanish: function () {
76
- if (Loader.lock) {
77
- return;
78
- }
79
- if (CONFIG.loader.start) {
80
- transition(loadCat, 0);
81
- }
82
- document.body.addClass('loaded');
83
- Loader.lock = true;
84
- }
85
- };
86
- const changeMetaTheme = function (color) {
87
- if (HTML.attr('data-theme') === 'dark') {
88
- color = '#222';
89
- }
90
- $dom('meta[name="theme-color"]').attr('content', color);
91
- };
92
- const themeColorListener = function () {
93
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function (mediaQueryList) {
94
- if (mediaQueryList.matches) {
95
- changeTheme('dark');
96
- }
97
- else {
98
- changeTheme();
99
- }
100
- });
101
- const t = $storage.get('theme');
102
- if (t) {
103
- changeTheme(t);
104
- }
105
- else {
106
- if (CONFIG.darkmode) {
107
- changeTheme('dark');
108
- }
109
- }
110
- };
111
- const visibilityListener = function () {
112
- let iconNode = $dom('[rel="icon"]');
113
- document.addEventListener('visibilitychange', function () {
114
- switch (document.visibilityState) {
115
- case 'hidden':
116
- iconNode.attr('href', statics + CONFIG.favicon.hidden);
117
- document.title = LOCAL.favicon.hide;
118
- if (CONFIG.loader.switch) {
119
- Loader.show();
120
- }
121
- clearTimeout(titleTime);
122
- break;
123
- case 'visible':
124
- iconNode.attr('href', statics + CONFIG.favicon.normal);
125
- document.title = LOCAL.favicon.show;
126
- if (CONFIG.loader.switch) {
127
- Loader.hide(1000);
128
- }
129
- titleTime = setTimeout(function () {
130
- document.title = originTitle;
131
- }, 2000);
132
- break;
133
- }
134
- });
135
- };
136
- const showtip = function (msg) {
137
- if (!msg) {
138
- return;
139
- }
140
- const tipbox = BODY.createChild('div', {
141
- innerHTML: msg,
142
- className: 'tip'
143
- });
144
- setTimeout(function () {
145
- tipbox.addClass('hide');
146
- setTimeout(function () {
147
- BODY.removeChild(tipbox);
148
- }, 300);
149
- }, 3000);
150
- };
151
- const resizeHandle = function (event) {
152
- siteNavHeight = siteNav.changeOrGetHeight();
153
- headerHightInner = siteHeader.changeOrGetHeight();
154
- headerHight = headerHightInner + $dom('#waves').changeOrGetHeight();
155
- if (oWinWidth !== window.innerWidth) {
156
- sideBarToggleHandle(null, 1);
157
- }
158
- oWinHeight = window.innerHeight;
159
- oWinWidth = window.innerWidth;
160
- sideBar.child('.panels').changeOrGetHeight(oWinHeight + 'px');
161
- };
162
- const scrollHandle = function (event) {
163
- const winHeight = window.innerHeight;
164
- const docHeight = getDocHeight();
165
- const contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : document.body.scrollHeight - winHeight;
166
- const SHOW = window.scrollY > headerHightInner;
167
- const startScroll = window.scrollY > 0;
168
- if (SHOW) {
169
- changeMetaTheme('#FFF');
170
- }
171
- else {
172
- changeMetaTheme('#222');
173
- }
174
- siteNav.toggleClass('show', SHOW);
175
- toolBtn.toggleClass('affix', startScroll);
176
- siteBrand.toggleClass('affix', startScroll);
177
- sideBar.toggleClass('affix', window.scrollY > headerHight && document.body.offsetWidth > 991);
178
- if (typeof scrollAction.y === 'undefined') {
179
- scrollAction.y = window.scrollY;
180
- }
181
- diffY = scrollAction.y - window.scrollY;
182
- if (diffY < 0) {
183
- siteNav.removeClass('up');
184
- siteNav.toggleClass('down', SHOW);
185
- }
186
- else if (diffY > 0) {
187
- siteNav.removeClass('down');
188
- siteNav.toggleClass('up', SHOW);
189
- }
190
- else {
191
- }
192
- scrollAction.y = window.scrollY;
193
- const scrollPercent = Math.round(Math.min(100 * window.scrollY / contentVisibilityHeight, 100)) + '%';
194
- backToTop.child('span').innerText = scrollPercent;
195
- $dom('.percent').changeOrGetWidth(scrollPercent);
196
- };
197
- const pagePosition = function () {
198
- if (CONFIG.auto_scroll) {
199
- $storage.set(LOCAL_URL, String(scrollAction.y));
200
- }
201
- };
202
- const positionInit = function (comment) {
203
- const anchor = window.location.hash;
204
- let target = null;
205
- if (LOCAL_HASH) {
206
- $storage.del(LOCAL_URL);
207
- return;
208
- }
209
- if (anchor) {
210
- target = $dom(decodeURI(anchor));
211
- }
212
- else {
213
- target = CONFIG.auto_scroll ? parseInt($storage.get(LOCAL_URL)) : 0;
214
- }
215
- if (target) {
216
- pageScroll(target);
217
- LOCAL_HASH = 1;
218
- }
219
- if (comment && anchor && !LOCAL_HASH) {
220
- pageScroll(target);
221
- LOCAL_HASH = 1;
222
- }
223
- };
224
- const clipBoard = function (str, callback) {
225
- if (navigator.clipboard && window.isSecureContext) {
226
- navigator.clipboard.writeText(str).then(() => {
227
- callback && callback(true);
228
- }, () => {
229
- callback && callback(false);
230
- });
231
- }
232
- else {
233
- const ta = BODY.createChild('textarea', {
234
- style: {
235
- top: window.scrollY + 'px',
236
- position: 'absolute',
237
- opacity: '0'
238
- },
239
- readOnly: true,
240
- value: str
241
- });
242
- const selection = document.getSelection();
243
- const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
244
- ta.select();
245
- ta.setSelectionRange(0, str.length);
246
- ta.readOnly = false;
247
- const result = document.execCommand('copy');
248
- callback && callback(result);
249
- ta.blur();
250
- if (selected) {
251
- selection.removeAllRanges();
252
- selection.addRange(selected);
253
- }
254
- BODY.removeChild(ta);
255
- }
256
- };
257
- const isOutime = function () {
258
- let updateTime;
259
- if (CONFIG.outime.enable && LOCAL.outime) {
260
- const times = document.getElementsByTagName('time');
261
- if (times.length === 0) {
262
- return;
263
- }
264
- const posts = document.getElementsByClassName('body md');
265
- if (posts.length === 0) {
266
- return;
267
- }
268
- const now = Date.now();
269
- const pubTime = new Date(times[0].dateTime);
270
- if (times.length === 1) {
271
- updateTime = pubTime;
272
- }
273
- else {
274
- updateTime = new Date(times[1].dateTime);
275
- }
276
- const interval = parseInt(String(now - updateTime));
277
- const days = parseInt(String(CONFIG.outime.days)) || 30;
278
- if (interval > (days * 86400000)) {
279
- const publish = parseInt(String((now - pubTime) / 86400000));
280
- const updated = parseInt(String(interval / 86400000));
281
- const template = LOCAL.template.replace('{{publish}}', String(publish)).replace('{{updated}}', String(updated));
282
- posts[0].insertAdjacentHTML('afterbegin', template);
283
- }
284
- }
285
- };
286
- const clickMenu = function () {
287
- const menuElement = $dom('#clickMenu');
288
- window.oncontextmenu = function (event) {
289
- if (event.ctrlKey) {
290
- return;
291
- }
292
- event.preventDefault();
293
- let x = event.offsetX;
294
- let y = event.offsetY;
295
- let winWidth = window.innerWidth;
296
- let winHeight = window.innerHeight;
297
- let menuWidth = menuElement.offsetWidth;
298
- let menuHeight = menuElement.offsetHeight;
299
- x = winWidth - menuWidth >= x ? x : winWidth - menuWidth;
300
- y = winHeight - menuHeight >= y ? y : winHeight - menuHeight;
301
- menuElement.style.top = y + 'px';
302
- menuElement.style.left = x + 'px';
303
- menuElement.classList.add('active');
304
- $dom.each(".clickSubmenu", (submenu) => {
305
- if (x > (winWidth - menuWidth - submenu.offsetWidth)) {
306
- submenu.style.left = '-200px';
307
- }
308
- else {
309
- submenu.style.left = '';
310
- submenu.style.right = '-200px';
311
- }
312
- });
313
- };
314
- window.addEventListener('click', function () {
315
- menuElement.classList.remove('active');
316
- });
317
- };
1
+ const statics = CONFIG.statics.indexOf('//') > 0 ? CONFIG.statics : CONFIG.root;
2
+ const scrollAction = { x: undefined, y: undefined };
3
+ let diffY = 0;
4
+ let originTitle, titleTime;
5
+ const BODY = document.getElementsByTagName('body')[0];
6
+ const HTML = document.documentElement;
7
+ const Container = $dom('#container');
8
+ const loadCat = $dom('#loading');
9
+ const siteNav = $dom('#nav');
10
+ const siteHeader = $dom('#header');
11
+ const menuToggle = siteNav.child('.toggle');
12
+ const quickBtn = $dom('#quick');
13
+ const sideBar = $dom('#sidebar');
14
+ const siteBrand = $dom('#brand');
15
+ let toolBtn = $dom('#tool');
16
+ let toolPlayer;
17
+ let backToTop;
18
+ let goToComment;
19
+ let showContents;
20
+ let siteSearch = $dom('#search');
21
+ let siteNavHeight, headerHightInner, headerHight;
22
+ let oWinHeight = window.innerHeight;
23
+ let oWinWidth = window.innerWidth;
24
+ let LOCAL_HASH = 0;
25
+ let LOCAL_URL = window.location.href;
26
+ let pjax;
27
+ const changeTheme = function (type) {
28
+ const btn = $dom('.theme .ic');
29
+ if (type === 'dark') {
30
+ HTML.attr('data-theme', type);
31
+ btn.removeClass('i-sun');
32
+ btn.addClass('i-moon');
33
+ }
34
+ else {
35
+ HTML.attr('data-theme', null);
36
+ btn.removeClass('i-moon');
37
+ btn.addClass('i-sun');
38
+ }
39
+ };
40
+ const autoDarkmode = function () {
41
+ if (CONFIG.auto_dark.enable) {
42
+ if (new Date().getHours() >= CONFIG.auto_dark.start || new Date().getHours() <= CONFIG.auto_dark.end) {
43
+ changeTheme('dark');
44
+ }
45
+ else {
46
+ if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
47
+ changeTheme('dark');
48
+ }
49
+ else {
50
+ changeTheme();
51
+ }
52
+ }
53
+ }
54
+ };
55
+ const lazyload = lozad('img, [data-background-image]', {
56
+ loaded: function (el) {
57
+ el.addClass('lozaded');
58
+ }
59
+ });
60
+ const Loader = {
61
+ timer: null,
62
+ lock: false,
63
+ show: function () {
64
+ clearTimeout(this.timer);
65
+ document.body.removeClass('loaded');
66
+ loadCat.attr('style', 'display:block');
67
+ Loader.lock = false;
68
+ },
69
+ hide: function (sec) {
70
+ if (!CONFIG.loader.start) {
71
+ sec = -1;
72
+ }
73
+ this.timer = setTimeout(this.vanish, sec || 3000);
74
+ },
75
+ vanish: function () {
76
+ if (Loader.lock) {
77
+ return;
78
+ }
79
+ if (CONFIG.loader.start) {
80
+ transition(loadCat, 0);
81
+ }
82
+ document.body.addClass('loaded');
83
+ Loader.lock = true;
84
+ }
85
+ };
86
+ const changeMetaTheme = function (color) {
87
+ if (HTML.attr('data-theme') === 'dark') {
88
+ color = '#222';
89
+ }
90
+ $dom('meta[name="theme-color"]').attr('content', color);
91
+ };
92
+ const themeColorListener = function () {
93
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function (mediaQueryList) {
94
+ if (mediaQueryList.matches) {
95
+ changeTheme('dark');
96
+ }
97
+ else {
98
+ changeTheme();
99
+ }
100
+ });
101
+ const t = $storage.get('theme');
102
+ if (t) {
103
+ changeTheme(t);
104
+ }
105
+ else {
106
+ if (CONFIG.darkmode) {
107
+ changeTheme('dark');
108
+ }
109
+ }
110
+ };
111
+ const visibilityListener = function () {
112
+ let iconNode = $dom('[rel="icon"]');
113
+ document.addEventListener('visibilitychange', function () {
114
+ switch (document.visibilityState) {
115
+ case 'hidden':
116
+ iconNode.attr('href', statics + CONFIG.favicon.hidden);
117
+ document.title = LOCAL.favicon.hide;
118
+ if (CONFIG.loader.switch) {
119
+ Loader.show();
120
+ }
121
+ clearTimeout(titleTime);
122
+ break;
123
+ case 'visible':
124
+ iconNode.attr('href', statics + CONFIG.favicon.normal);
125
+ document.title = LOCAL.favicon.show;
126
+ if (CONFIG.loader.switch) {
127
+ Loader.hide(1000);
128
+ }
129
+ titleTime = setTimeout(function () {
130
+ document.title = originTitle;
131
+ }, 2000);
132
+ break;
133
+ }
134
+ });
135
+ };
136
+ const showtip = function (msg) {
137
+ if (!msg) {
138
+ return;
139
+ }
140
+ const tipbox = BODY.createChild('div', {
141
+ innerHTML: msg,
142
+ className: 'tip'
143
+ });
144
+ setTimeout(function () {
145
+ tipbox.addClass('hide');
146
+ setTimeout(function () {
147
+ BODY.removeChild(tipbox);
148
+ }, 300);
149
+ }, 3000);
150
+ };
151
+ const resizeHandle = function (event) {
152
+ siteNavHeight = siteNav.changeOrGetHeight();
153
+ headerHightInner = siteHeader.changeOrGetHeight();
154
+ headerHight = headerHightInner + $dom('#waves').changeOrGetHeight();
155
+ if (oWinWidth !== window.innerWidth) {
156
+ sideBarToggleHandle(null, 1);
157
+ }
158
+ oWinHeight = window.innerHeight;
159
+ oWinWidth = window.innerWidth;
160
+ sideBar.child('.panels').changeOrGetHeight(oWinHeight + 'px');
161
+ };
162
+ const scrollHandle = function (event) {
163
+ const winHeight = window.innerHeight;
164
+ const docHeight = getDocHeight();
165
+ const contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : document.body.scrollHeight - winHeight;
166
+ const SHOW = window.scrollY > headerHightInner;
167
+ const startScroll = window.scrollY > 0;
168
+ if (SHOW) {
169
+ changeMetaTheme('#FFF');
170
+ }
171
+ else {
172
+ changeMetaTheme('#222');
173
+ }
174
+ siteNav.toggleClass('show', SHOW);
175
+ toolBtn.toggleClass('affix', startScroll);
176
+ siteBrand.toggleClass('affix', startScroll);
177
+ sideBar.toggleClass('affix', window.scrollY > headerHight && document.body.offsetWidth > 991);
178
+ if (typeof scrollAction.y === 'undefined') {
179
+ scrollAction.y = window.scrollY;
180
+ }
181
+ diffY = scrollAction.y - window.scrollY;
182
+ if (diffY < 0) {
183
+ siteNav.removeClass('up');
184
+ siteNav.toggleClass('down', SHOW);
185
+ }
186
+ else if (diffY > 0) {
187
+ siteNav.removeClass('down');
188
+ siteNav.toggleClass('up', SHOW);
189
+ }
190
+ else {
191
+ }
192
+ scrollAction.y = window.scrollY;
193
+ const scrollPercent = Math.round(Math.min(100 * window.scrollY / contentVisibilityHeight, 100)) + '%';
194
+ backToTop.child('span').innerText = scrollPercent;
195
+ $dom('.percent').changeOrGetWidth(scrollPercent);
196
+ };
197
+ const pagePosition = function () {
198
+ if (CONFIG.auto_scroll) {
199
+ $storage.set(LOCAL_URL, String(scrollAction.y));
200
+ }
201
+ };
202
+ const positionInit = function (comment) {
203
+ const anchor = window.location.hash;
204
+ let target = null;
205
+ if (LOCAL_HASH) {
206
+ $storage.del(LOCAL_URL);
207
+ return;
208
+ }
209
+ if (anchor) {
210
+ target = $dom(decodeURI(anchor));
211
+ }
212
+ else {
213
+ target = CONFIG.auto_scroll ? parseInt($storage.get(LOCAL_URL)) : 0;
214
+ }
215
+ if (target) {
216
+ pageScroll(target);
217
+ LOCAL_HASH = 1;
218
+ }
219
+ if (comment && anchor && !LOCAL_HASH) {
220
+ pageScroll(target);
221
+ LOCAL_HASH = 1;
222
+ }
223
+ };
224
+ const clipBoard = function (str, callback) {
225
+ if (navigator.clipboard && window.isSecureContext) {
226
+ navigator.clipboard.writeText(str).then(() => {
227
+ callback && callback(true);
228
+ }, () => {
229
+ callback && callback(false);
230
+ });
231
+ }
232
+ else {
233
+ const ta = BODY.createChild('textarea', {
234
+ style: {
235
+ top: window.scrollY + 'px',
236
+ position: 'absolute',
237
+ opacity: '0'
238
+ },
239
+ readOnly: true,
240
+ value: str
241
+ });
242
+ const selection = document.getSelection();
243
+ const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
244
+ ta.select();
245
+ ta.setSelectionRange(0, str.length);
246
+ ta.readOnly = false;
247
+ const result = document.execCommand('copy');
248
+ callback && callback(result);
249
+ ta.blur();
250
+ if (selected) {
251
+ selection.removeAllRanges();
252
+ selection.addRange(selected);
253
+ }
254
+ BODY.removeChild(ta);
255
+ }
256
+ };
257
+ const isOutime = function () {
258
+ let updateTime;
259
+ if (CONFIG.outime.enable && LOCAL.outime) {
260
+ const times = document.getElementsByTagName('time');
261
+ if (times.length === 0) {
262
+ return;
263
+ }
264
+ const posts = document.getElementsByClassName('body md');
265
+ if (posts.length === 0) {
266
+ return;
267
+ }
268
+ const now = Date.now();
269
+ const pubTime = new Date(times[0].dateTime);
270
+ if (times.length === 1) {
271
+ updateTime = pubTime;
272
+ }
273
+ else {
274
+ updateTime = new Date(times[1].dateTime);
275
+ }
276
+ const interval = parseInt(String(now - updateTime));
277
+ const days = parseInt(String(CONFIG.outime.days)) || 30;
278
+ if (interval > (days * 86400000)) {
279
+ const publish = parseInt(String((now - pubTime) / 86400000));
280
+ const updated = parseInt(String(interval / 86400000));
281
+ const template = LOCAL.template.replace('{{publish}}', String(publish)).replace('{{updated}}', String(updated));
282
+ posts[0].insertAdjacentHTML('afterbegin', template);
283
+ }
284
+ }
285
+ };
286
+ const clickMenu = function () {
287
+ const menuElement = $dom('#clickMenu');
288
+ window.oncontextmenu = function (event) {
289
+ if (event.ctrlKey) {
290
+ return;
291
+ }
292
+ event.preventDefault();
293
+ let x = event.offsetX;
294
+ let y = event.offsetY;
295
+ let winWidth = window.innerWidth;
296
+ let winHeight = window.innerHeight;
297
+ let menuWidth = menuElement.offsetWidth;
298
+ let menuHeight = menuElement.offsetHeight;
299
+ x = winWidth - menuWidth >= x ? x : winWidth - menuWidth;
300
+ y = winHeight - menuHeight >= y ? y : winHeight - menuHeight;
301
+ menuElement.style.top = y + 'px';
302
+ menuElement.style.left = x + 'px';
303
+ menuElement.classList.add('active');
304
+ $dom.each(".clickSubmenu", (submenu) => {
305
+ if (x > (winWidth - menuWidth - submenu.offsetWidth)) {
306
+ submenu.style.left = '-200px';
307
+ }
308
+ else {
309
+ submenu.style.left = '';
310
+ submenu.style.right = '-200px';
311
+ }
312
+ });
313
+ };
314
+ window.addEventListener('click', function () {
315
+ menuElement.classList.remove('active');
316
+ });
317
+ };