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,330 +1,330 @@
1
- const canvasEl = document.createElement('canvas');
2
- canvasEl.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:9999999';
3
- document.body.appendChild(canvasEl);
4
- const ctx = canvasEl.getContext('2d');
5
- const numberOfParticules = 30;
6
- let pointerX = 0;
7
- let pointerY = 0;
8
- const tap = 'click';
9
- const colors = CONFIG.fireworks;
10
- function setCanvasSize() {
11
- canvasEl.width = window.innerWidth * 2;
12
- canvasEl.height = window.innerHeight * 2;
13
- canvasEl.style.width = window.innerWidth + 'px';
14
- canvasEl.style.height = window.innerHeight + 'px';
15
- canvasEl.getContext('2d').scale(2, 2);
16
- }
17
- function updateCoords(e) {
18
- pointerX = e.clientX || (e.touches && e.touches[0].clientX);
19
- pointerY = e.clientY || (e.touches && e.touches[0].clientY);
20
- }
21
- function setParticuleDirection(p) {
22
- const angle = anime.random(0, 360) * Math.PI / 180;
23
- const value = anime.random(50, 180);
24
- const radius = [-1, 1][anime.random(0, 1)] * value;
25
- return {
26
- x: p.x + radius * Math.cos(angle),
27
- y: p.y + radius * Math.sin(angle)
28
- };
29
- }
30
- function createParticule(x, y) {
31
- const p = {
32
- x: undefined,
33
- y: undefined,
34
- color: undefined,
35
- radius: undefined,
36
- endPos: undefined,
37
- draw: undefined
38
- };
39
- p.x = x;
40
- p.y = y;
41
- p.color = colors[anime.random(0, colors.length - 1)];
42
- p.radius = anime.random(16, 32);
43
- p.endPos = setParticuleDirection(p);
44
- p.draw = function () {
45
- ctx.beginPath();
46
- ctx.arc(p.x, p.y, p.radius, 0, 2 * Math.PI, true);
47
- ctx.fillStyle = p.color;
48
- ctx.fill();
49
- };
50
- return p;
51
- }
52
- function createCircle(x, y) {
53
- const p = {
54
- x: undefined,
55
- y: undefined,
56
- color: undefined,
57
- radius: undefined,
58
- endPos: undefined,
59
- alpha: undefined,
60
- lineWidth: undefined,
61
- draw: undefined
62
- };
63
- p.x = x;
64
- p.y = y;
65
- p.color = '#FFF';
66
- p.radius = 0.1;
67
- p.alpha = 0.5;
68
- p.lineWidth = 6;
69
- p.draw = function () {
70
- ctx.globalAlpha = p.alpha;
71
- ctx.beginPath();
72
- ctx.arc(p.x, p.y, p.radius, 0, 2 * Math.PI, true);
73
- ctx.lineWidth = p.lineWidth;
74
- ctx.strokeStyle = p.color;
75
- ctx.stroke();
76
- ctx.globalAlpha = 1;
77
- };
78
- return p;
79
- }
80
- function renderParticule(anim) {
81
- for (let i = 0; i < anim.animatables.length; i++) {
82
- anim.animatables[i].target.draw();
83
- }
84
- }
85
- function animateParticules(x, y) {
86
- const circle = createCircle(x, y);
87
- const particules = [];
88
- for (let i = 0; i < numberOfParticules; i++) {
89
- particules.push(createParticule(x, y));
90
- }
91
- anime.timeline().add({
92
- targets: particules,
93
- x: function (p) {
94
- return p.endPos.x;
95
- },
96
- y: function (p) {
97
- return p.endPos.y;
98
- },
99
- radius: 0.1,
100
- duration: anime.random(1200, 1800),
101
- easing: 'easeOutExpo',
102
- update: renderParticule
103
- }).add({
104
- targets: circle,
105
- radius: anime.random(80, 160),
106
- lineWidth: 0,
107
- alpha: {
108
- value: 0,
109
- easing: 'linear',
110
- duration: anime.random(600, 800)
111
- },
112
- duration: anime.random(1200, 1800),
113
- easing: 'easeOutExpo',
114
- update: renderParticule
115
- }, 0);
116
- }
117
- const render = anime({
118
- duration: Infinity,
119
- update: function () {
120
- ctx.clearRect(0, 0, canvasEl.width, canvasEl.height);
121
- }
122
- });
123
- document.addEventListener(tap, function (e) {
124
- render.play();
125
- updateCoords(e);
126
- animateParticules(pointerX, pointerY);
127
- }, false);
128
- setCanvasSize();
129
- window.addEventListener('resize', setCanvasSize, false);
130
- const sideBarToggleHandle = function (event, force) {
131
- if (sideBar.hasClass('on')) {
132
- sideBar.removeClass('on');
133
- menuToggle.removeClass('close');
134
- if (force) {
135
- sideBar.style = '';
136
- }
137
- else {
138
- transition(sideBar, 'slideRightOut');
139
- }
140
- }
141
- else {
142
- if (force) {
143
- sideBar.style = '';
144
- }
145
- else {
146
- transition(sideBar, 'slideRightIn', function () {
147
- sideBar.addClass('on');
148
- menuToggle.addClass('close');
149
- });
150
- }
151
- }
152
- };
153
- const sideBarTab = function () {
154
- const sideBarInner = sideBar.child('.inner');
155
- const panels = sideBar.find('.panel');
156
- if (sideBar.child('.tab')) {
157
- sideBarInner.removeChild(sideBar.child('.tab'));
158
- }
159
- const list = document.createElement('ul');
160
- let active = 'active';
161
- list.className = 'tab';
162
- ['contents', 'related', 'overview'].forEach(function (item) {
163
- const element = sideBar.child('.panel.' + item);
164
- if (element.innerHTML.replace(/(^\s*)|(\s*$)/g, '').length < 1) {
165
- if (item === 'contents') {
166
- showContents.display('none');
167
- }
168
- return;
169
- }
170
- if (item === 'contents') {
171
- showContents.display('');
172
- }
173
- const tab = document.createElement('li');
174
- const span = document.createElement('span');
175
- const text = document.createTextNode(element.attr('data-title'));
176
- span.appendChild(text);
177
- tab.appendChild(span);
178
- tab.addClass(item + ' item');
179
- if (active) {
180
- element.addClass(active);
181
- tab.addClass(active);
182
- }
183
- else {
184
- element.removeClass('active');
185
- }
186
- tab.addEventListener('click', function (event) {
187
- const target = event.currentTarget;
188
- if (target.hasClass('active'))
189
- return;
190
- sideBar.find('.tab .item').forEach(function (element) {
191
- element.removeClass('active');
192
- });
193
- sideBar.find('.panel').forEach(function (element) {
194
- element.removeClass('active');
195
- });
196
- sideBar.child('.panel.' + target.className.replace(' item', '')).addClass('active');
197
- target.addClass('active');
198
- });
199
- list.appendChild(tab);
200
- active = '';
201
- });
202
- if (list.childNodes.length > 1) {
203
- sideBarInner.insertBefore(list, sideBarInner.childNodes[0]);
204
- sideBar.child('.panels').style.paddingTop = '';
205
- }
206
- else {
207
- sideBar.child('.panels').style.paddingTop = '.625rem';
208
- }
209
- };
210
- const sidebarTOC = function () {
211
- const activateNavByIndex = function (index, lock) {
212
- const target = navItems[index];
213
- if (!target)
214
- return;
215
- if (target.hasClass('current')) {
216
- return;
217
- }
218
- $dom.each('.toc .active', function (element) {
219
- element && element.removeClass('active current');
220
- });
221
- sections.forEach(function (element) {
222
- element && element.removeClass('active');
223
- });
224
- target.addClass('active current');
225
- sections[index] && sections[index].addClass('active');
226
- let parent = target.parentNode;
227
- while (!parent.matches('.contents')) {
228
- if (parent.matches('li')) {
229
- parent.addClass('active');
230
- const t = $dom(parent.child('a.toc-link').attr('href'));
231
- if (t) {
232
- t.addClass('active');
233
- }
234
- }
235
- parent = parent.parentNode;
236
- }
237
- if (getComputedStyle(sideBar).display !== 'none' && tocElement.hasClass('active')) {
238
- pageScroll(tocElement, target.offsetTop - (tocElement.offsetHeight / 4));
239
- }
240
- };
241
- const navItems = $dom.all('.contents li');
242
- if (navItems.length < 1) {
243
- return;
244
- }
245
- let sections = Array.prototype.slice.call(navItems) || [];
246
- let activeLock = null;
247
- sections = sections.map(function (element, index) {
248
- const link = element.child('a.toc-link');
249
- const anchor = $dom(decodeURI(link.attr('href')));
250
- if (!anchor)
251
- return;
252
- const alink = anchor.child('a.anchor');
253
- const anchorScroll = function (event) {
254
- event.preventDefault();
255
- const target = $dom(decodeURI(event.currentTarget.attr('href')));
256
- activeLock = index;
257
- pageScroll(target, null, function () {
258
- activateNavByIndex(index);
259
- activeLock = null;
260
- });
261
- };
262
- link.addEventListener('click', anchorScroll);
263
- alink && alink.addEventListener('click', function (event) {
264
- anchorScroll(event);
265
- clipBoard(CONFIG.hostname + '/' + LOCAL.path + event.currentTarget.attr('href'));
266
- });
267
- return anchor;
268
- });
269
- const tocElement = sideBar.child('.contents.panel');
270
- const findIndex = function (entries) {
271
- let index = 0;
272
- let entry = entries[index];
273
- if (entry.boundingClientRect.top > 0) {
274
- index = sections.indexOf(entry.target);
275
- return index === 0 ? 0 : index - 1;
276
- }
277
- for (; index < entries.length; index++) {
278
- if (entries[index].boundingClientRect.top <= 0) {
279
- entry = entries[index];
280
- }
281
- else {
282
- return sections.indexOf(entry.target);
283
- }
284
- }
285
- return sections.indexOf(entry.target);
286
- };
287
- const createIntersectionObserver = function () {
288
- if (!window.IntersectionObserver)
289
- return;
290
- const observer = new IntersectionObserver(function (entries, observe) {
291
- const index = findIndex(entries) + (diffY < 0 ? 1 : 0);
292
- if (activeLock === null) {
293
- activateNavByIndex(index);
294
- }
295
- }, {
296
- rootMargin: '0px 0px -100% 0px', threshold: 0
297
- });
298
- sections.forEach(function (element) {
299
- element && observer.observe(element);
300
- });
301
- };
302
- createIntersectionObserver();
303
- };
304
- const backToTopHandle = function () {
305
- pageScroll(0);
306
- };
307
- const goToBottomHandle = function () {
308
- pageScroll(parseInt(String(Container.changeOrGetHeight())));
309
- };
310
- const goToCommentHandle = function () {
311
- pageScroll($dom('#comments'));
312
- };
313
- const menuActive = function () {
314
- $dom.each('.menu .item:not(.title)', function (element) {
315
- const target = element.child('a[href]');
316
- const parentItem = element.parentNode.parentNode;
317
- if (!target)
318
- return;
319
- const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', '');
320
- const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname);
321
- const active = target.hostname === location.hostname && (isSamePath || isSubPath);
322
- element.toggleClass('active', active);
323
- if (element.parentNode.child('.active') && parentItem.hasClass('dropdown')) {
324
- parentItem.removeClass('active').addClass('expand');
325
- }
326
- else {
327
- parentItem.removeClass('expand');
328
- }
329
- });
330
- };
1
+ const canvasEl = document.createElement('canvas');
2
+ canvasEl.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:9999999';
3
+ document.body.appendChild(canvasEl);
4
+ const ctx = canvasEl.getContext('2d');
5
+ const numberOfParticules = 30;
6
+ let pointerX = 0;
7
+ let pointerY = 0;
8
+ const tap = 'click';
9
+ const colors = CONFIG.fireworks;
10
+ function setCanvasSize() {
11
+ canvasEl.width = window.innerWidth * 2;
12
+ canvasEl.height = window.innerHeight * 2;
13
+ canvasEl.style.width = window.innerWidth + 'px';
14
+ canvasEl.style.height = window.innerHeight + 'px';
15
+ canvasEl.getContext('2d').scale(2, 2);
16
+ }
17
+ function updateCoords(e) {
18
+ pointerX = e.clientX || (e.touches && e.touches[0].clientX);
19
+ pointerY = e.clientY || (e.touches && e.touches[0].clientY);
20
+ }
21
+ function setParticuleDirection(p) {
22
+ const angle = anime.random(0, 360) * Math.PI / 180;
23
+ const value = anime.random(50, 180);
24
+ const radius = [-1, 1][anime.random(0, 1)] * value;
25
+ return {
26
+ x: p.x + radius * Math.cos(angle),
27
+ y: p.y + radius * Math.sin(angle)
28
+ };
29
+ }
30
+ function createParticule(x, y) {
31
+ const p = {
32
+ x: undefined,
33
+ y: undefined,
34
+ color: undefined,
35
+ radius: undefined,
36
+ endPos: undefined,
37
+ draw: undefined
38
+ };
39
+ p.x = x;
40
+ p.y = y;
41
+ p.color = colors[anime.random(0, colors.length - 1)];
42
+ p.radius = anime.random(16, 32);
43
+ p.endPos = setParticuleDirection(p);
44
+ p.draw = function () {
45
+ ctx.beginPath();
46
+ ctx.arc(p.x, p.y, p.radius, 0, 2 * Math.PI, true);
47
+ ctx.fillStyle = p.color;
48
+ ctx.fill();
49
+ };
50
+ return p;
51
+ }
52
+ function createCircle(x, y) {
53
+ const p = {
54
+ x: undefined,
55
+ y: undefined,
56
+ color: undefined,
57
+ radius: undefined,
58
+ endPos: undefined,
59
+ alpha: undefined,
60
+ lineWidth: undefined,
61
+ draw: undefined
62
+ };
63
+ p.x = x;
64
+ p.y = y;
65
+ p.color = '#FFF';
66
+ p.radius = 0.1;
67
+ p.alpha = 0.5;
68
+ p.lineWidth = 6;
69
+ p.draw = function () {
70
+ ctx.globalAlpha = p.alpha;
71
+ ctx.beginPath();
72
+ ctx.arc(p.x, p.y, p.radius, 0, 2 * Math.PI, true);
73
+ ctx.lineWidth = p.lineWidth;
74
+ ctx.strokeStyle = p.color;
75
+ ctx.stroke();
76
+ ctx.globalAlpha = 1;
77
+ };
78
+ return p;
79
+ }
80
+ function renderParticule(anim) {
81
+ for (let i = 0; i < anim.animatables.length; i++) {
82
+ anim.animatables[i].target.draw();
83
+ }
84
+ }
85
+ function animateParticules(x, y) {
86
+ const circle = createCircle(x, y);
87
+ const particules = [];
88
+ for (let i = 0; i < numberOfParticules; i++) {
89
+ particules.push(createParticule(x, y));
90
+ }
91
+ anime.timeline().add({
92
+ targets: particules,
93
+ x: function (p) {
94
+ return p.endPos.x;
95
+ },
96
+ y: function (p) {
97
+ return p.endPos.y;
98
+ },
99
+ radius: 0.1,
100
+ duration: anime.random(1200, 1800),
101
+ easing: 'easeOutExpo',
102
+ update: renderParticule
103
+ }).add({
104
+ targets: circle,
105
+ radius: anime.random(80, 160),
106
+ lineWidth: 0,
107
+ alpha: {
108
+ value: 0,
109
+ easing: 'linear',
110
+ duration: anime.random(600, 800)
111
+ },
112
+ duration: anime.random(1200, 1800),
113
+ easing: 'easeOutExpo',
114
+ update: renderParticule
115
+ }, 0);
116
+ }
117
+ const render = anime({
118
+ duration: Infinity,
119
+ update: function () {
120
+ ctx.clearRect(0, 0, canvasEl.width, canvasEl.height);
121
+ }
122
+ });
123
+ document.addEventListener(tap, function (e) {
124
+ render.play();
125
+ updateCoords(e);
126
+ animateParticules(pointerX, pointerY);
127
+ }, false);
128
+ setCanvasSize();
129
+ window.addEventListener('resize', setCanvasSize, false);
130
+ const sideBarToggleHandle = function (event, force) {
131
+ if (sideBar.hasClass('on')) {
132
+ sideBar.removeClass('on');
133
+ menuToggle.removeClass('close');
134
+ if (force) {
135
+ sideBar.style = '';
136
+ }
137
+ else {
138
+ transition(sideBar, 'slideRightOut');
139
+ }
140
+ }
141
+ else {
142
+ if (force) {
143
+ sideBar.style = '';
144
+ }
145
+ else {
146
+ transition(sideBar, 'slideRightIn', function () {
147
+ sideBar.addClass('on');
148
+ menuToggle.addClass('close');
149
+ });
150
+ }
151
+ }
152
+ };
153
+ const sideBarTab = function () {
154
+ const sideBarInner = sideBar.child('.inner');
155
+ const panels = sideBar.find('.panel');
156
+ if (sideBar.child('.tab')) {
157
+ sideBarInner.removeChild(sideBar.child('.tab'));
158
+ }
159
+ const list = document.createElement('ul');
160
+ let active = 'active';
161
+ list.className = 'tab';
162
+ ['contents', 'related', 'overview'].forEach(function (item) {
163
+ const element = sideBar.child('.panel.' + item);
164
+ if (element.innerHTML.replace(/(^\s*)|(\s*$)/g, '').length < 1) {
165
+ if (item === 'contents') {
166
+ showContents.display('none');
167
+ }
168
+ return;
169
+ }
170
+ if (item === 'contents') {
171
+ showContents.display('');
172
+ }
173
+ const tab = document.createElement('li');
174
+ const span = document.createElement('span');
175
+ const text = document.createTextNode(element.attr('data-title'));
176
+ span.appendChild(text);
177
+ tab.appendChild(span);
178
+ tab.addClass(item + ' item');
179
+ if (active) {
180
+ element.addClass(active);
181
+ tab.addClass(active);
182
+ }
183
+ else {
184
+ element.removeClass('active');
185
+ }
186
+ tab.addEventListener('click', function (event) {
187
+ const target = event.currentTarget;
188
+ if (target.hasClass('active'))
189
+ return;
190
+ sideBar.find('.tab .item').forEach(function (element) {
191
+ element.removeClass('active');
192
+ });
193
+ sideBar.find('.panel').forEach(function (element) {
194
+ element.removeClass('active');
195
+ });
196
+ sideBar.child('.panel.' + target.className.replace(' item', '')).addClass('active');
197
+ target.addClass('active');
198
+ });
199
+ list.appendChild(tab);
200
+ active = '';
201
+ });
202
+ if (list.childNodes.length > 1) {
203
+ sideBarInner.insertBefore(list, sideBarInner.childNodes[0]);
204
+ sideBar.child('.panels').style.paddingTop = '';
205
+ }
206
+ else {
207
+ sideBar.child('.panels').style.paddingTop = '.625rem';
208
+ }
209
+ };
210
+ const sidebarTOC = function () {
211
+ const activateNavByIndex = function (index, lock) {
212
+ const target = navItems[index];
213
+ if (!target)
214
+ return;
215
+ if (target.hasClass('current')) {
216
+ return;
217
+ }
218
+ $dom.each('.toc .active', function (element) {
219
+ element && element.removeClass('active current');
220
+ });
221
+ sections.forEach(function (element) {
222
+ element && element.removeClass('active');
223
+ });
224
+ target.addClass('active current');
225
+ sections[index] && sections[index].addClass('active');
226
+ let parent = target.parentNode;
227
+ while (!parent.matches('.contents')) {
228
+ if (parent.matches('li')) {
229
+ parent.addClass('active');
230
+ const t = $dom(parent.child('a.toc-link').attr('href'));
231
+ if (t) {
232
+ t.addClass('active');
233
+ }
234
+ }
235
+ parent = parent.parentNode;
236
+ }
237
+ if (getComputedStyle(sideBar).display !== 'none' && tocElement.hasClass('active')) {
238
+ pageScroll(tocElement, target.offsetTop - (tocElement.offsetHeight / 4));
239
+ }
240
+ };
241
+ const navItems = $dom.all('.contents li');
242
+ if (navItems.length < 1) {
243
+ return;
244
+ }
245
+ let sections = Array.prototype.slice.call(navItems) || [];
246
+ let activeLock = null;
247
+ sections = sections.map(function (element, index) {
248
+ const link = element.child('a.toc-link');
249
+ const anchor = $dom(decodeURI(link.attr('href')));
250
+ if (!anchor)
251
+ return;
252
+ const alink = anchor.child('a.anchor');
253
+ const anchorScroll = function (event) {
254
+ event.preventDefault();
255
+ const target = $dom(decodeURI(event.currentTarget.attr('href')));
256
+ activeLock = index;
257
+ pageScroll(target, null, function () {
258
+ activateNavByIndex(index);
259
+ activeLock = null;
260
+ });
261
+ };
262
+ link.addEventListener('click', anchorScroll);
263
+ alink && alink.addEventListener('click', function (event) {
264
+ anchorScroll(event);
265
+ clipBoard(CONFIG.hostname + '/' + LOCAL.path + event.currentTarget.attr('href'));
266
+ });
267
+ return anchor;
268
+ });
269
+ const tocElement = sideBar.child('.contents.panel');
270
+ const findIndex = function (entries) {
271
+ let index = 0;
272
+ let entry = entries[index];
273
+ if (entry.boundingClientRect.top > 0) {
274
+ index = sections.indexOf(entry.target);
275
+ return index === 0 ? 0 : index - 1;
276
+ }
277
+ for (; index < entries.length; index++) {
278
+ if (entries[index].boundingClientRect.top <= 0) {
279
+ entry = entries[index];
280
+ }
281
+ else {
282
+ return sections.indexOf(entry.target);
283
+ }
284
+ }
285
+ return sections.indexOf(entry.target);
286
+ };
287
+ const createIntersectionObserver = function () {
288
+ if (!window.IntersectionObserver)
289
+ return;
290
+ const observer = new IntersectionObserver(function (entries, observe) {
291
+ const index = findIndex(entries) + (diffY < 0 ? 1 : 0);
292
+ if (activeLock === null) {
293
+ activateNavByIndex(index);
294
+ }
295
+ }, {
296
+ rootMargin: '0px 0px -100% 0px', threshold: 0
297
+ });
298
+ sections.forEach(function (element) {
299
+ element && observer.observe(element);
300
+ });
301
+ };
302
+ createIntersectionObserver();
303
+ };
304
+ const backToTopHandle = function () {
305
+ pageScroll(0);
306
+ };
307
+ const goToBottomHandle = function () {
308
+ pageScroll(parseInt(String(Container.changeOrGetHeight())));
309
+ };
310
+ const goToCommentHandle = function () {
311
+ pageScroll($dom('#comments'));
312
+ };
313
+ const menuActive = function () {
314
+ $dom.each('.menu .item:not(.title)', function (element) {
315
+ const target = element.child('a[href]');
316
+ const parentItem = element.parentNode.parentNode;
317
+ if (!target)
318
+ return;
319
+ const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', '');
320
+ const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname);
321
+ const active = target.hostname === location.hostname && (isSamePath || isSubPath);
322
+ element.toggleClass('active', active);
323
+ if (element.parentNode.child('.active') && parentItem.hasClass('dropdown')) {
324
+ parentItem.removeClass('active').addClass('expand');
325
+ }
326
+ else {
327
+ parentItem.removeClass('expand');
328
+ }
329
+ });
330
+ };