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

Sign up to get free protection for your applications and to get access to all the features.
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
+ };