hexo-theme-shokax 0.4.5 → 0.4.6-beta2

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 (183) hide show
  1. package/CODE_OF_CONDUCT.md +128 -128
  2. package/CONTRIBUTING.md +58 -58
  3. package/LICENSE +660 -660
  4. package/LICENSE-shoka +21 -21
  5. package/README.md +99 -98
  6. package/README_en.MD +91 -90
  7. package/UsageRestrictions.md +25 -25
  8. package/_config.yml +381 -388
  9. package/_images.yml +9 -9
  10. package/eslint.config.mjs +55 -55
  11. package/index.html +231 -0
  12. package/languages/README.md +19 -19
  13. package/languages/default.yml +1 -1
  14. package/languages/en.yml +153 -153
  15. package/languages/ja.yml +153 -153
  16. package/languages/zh-CN.yml +153 -153
  17. package/languages/zh-HK.yml +153 -153
  18. package/languages/zh-TW.yml +153 -153
  19. package/layout/_alternate/atom.ejs +30 -30
  20. package/layout/_alternate/json.ejs +16 -16
  21. package/layout/_alternate/rss.ejs +34 -34
  22. package/layout/_mixin/breadcrumb.pug +33 -33
  23. package/layout/_mixin/card.pug +38 -38
  24. package/layout/_mixin/comment.pug +6 -6
  25. package/layout/_mixin/postmeta.pug +29 -29
  26. package/layout/_mixin/segment.pug +35 -35
  27. package/layout/_mixin/sidebar.pug +40 -40
  28. package/layout/_mixin/widgets.pug +28 -28
  29. package/layout/_partials/footer.pug +43 -43
  30. package/layout/_partials/head/head.pug +55 -56
  31. package/layout/_partials/head/head_com.pug +24 -24
  32. package/layout/_partials/head/pwa.pug +18 -18
  33. package/layout/_partials/header.pug +18 -18
  34. package/layout/_partials/layout.pug +140 -140
  35. package/layout/_partials/loading.pug +13 -13
  36. package/layout/_partials/pagination.pug +4 -4
  37. package/layout/_partials/post/copyright.pug +20 -20
  38. package/layout/_partials/post/footer.pug +17 -17
  39. package/layout/_partials/post/nav.pug +13 -13
  40. package/layout/_partials/post/post.pug +41 -41
  41. package/layout/_partials/post/reward.pug +18 -18
  42. package/layout/_partials/sidebar/menu.pug +37 -37
  43. package/layout/_partials/sidebar/overview.pug +42 -42
  44. package/layout/_partials/third-party/baidu-analytics.pug +11 -11
  45. package/layout/_partials/third-party/clarity.pug +8 -8
  46. package/layout/_partials/third-party/google-analytics.pug +9 -9
  47. package/layout/archive.pug +118 -118
  48. package/layout/category.pug +59 -59
  49. package/layout/index.pug +33 -33
  50. package/layout/page.pug +55 -55
  51. package/layout/post.pug +36 -36
  52. package/layout/tag.pug +43 -43
  53. package/meta.json +6431 -0
  54. package/package.json +72 -70
  55. package/scripts/helpers/engine.js +10 -0
  56. package/scripts/plugin/check.js +2 -2
  57. package/scripts/tags/links.js +4 -4
  58. package/source/assets/algolia_logo.svg +9 -9
  59. package/source/assets/logo.svg +16 -16
  60. package/source/css/_colors.styl +207 -207
  61. package/source/css/_common/components/components.styl +6 -6
  62. package/source/css/_common/components/highlight/highlight.styl +357 -357
  63. package/source/css/_common/components/highlight/operation.styl +21 -21
  64. package/source/css/_common/components/pages/collapse.styl +119 -119
  65. package/source/css/_common/components/pages/home.styl +391 -391
  66. package/source/css/_common/components/pages/pages.styl +56 -56
  67. package/source/css/_common/components/pages/tag-cloud.styl +12 -12
  68. package/source/css/_common/components/post/breadcrumb.styl +39 -39
  69. package/source/css/_common/components/post/copyright.styl +41 -41
  70. package/source/css/_common/components/post/expand.styl +263 -263
  71. package/source/css/_common/components/post/footer.styl +11 -11
  72. package/source/css/_common/components/post/header.styl +79 -79
  73. package/source/css/_common/components/post/nav.styl +64 -64
  74. package/source/css/_common/components/post/post.styl +29 -29
  75. package/source/css/_common/components/post/reward.styl +50 -50
  76. package/source/css/_common/components/post/rtl.styl +12 -12
  77. package/source/css/_common/components/post/tags.styl +39 -39
  78. package/source/css/_common/components/tags/collapse.styl +72 -72
  79. package/source/css/_common/components/tags/container.styl +49 -49
  80. package/source/css/_common/components/tags/label.styl +12 -12
  81. package/source/css/_common/components/tags/links.styl +77 -77
  82. package/source/css/_common/components/tags/list.styl +131 -131
  83. package/source/css/_common/components/tags/note.styl +70 -70
  84. package/source/css/_common/components/tags/player.styl +361 -361
  85. package/source/css/_common/components/tags/quiz.styl +200 -200
  86. package/source/css/_common/components/tags/tabs.styl +89 -89
  87. package/source/css/_common/components/tags/tags.styl +9 -9
  88. package/source/css/_common/components/third-party/loading.styl +222 -222
  89. package/source/css/_common/components/third-party/mermaid/class.styl +90 -90
  90. package/source/css/_common/components/third-party/mermaid/flowchart.styl +72 -72
  91. package/source/css/_common/components/third-party/mermaid/gantt.styl +251 -251
  92. package/source/css/_common/components/third-party/mermaid/git.styl +7 -7
  93. package/source/css/_common/components/third-party/mermaid/mermaid.styl +37 -37
  94. package/source/css/_common/components/third-party/mermaid/pie.styl +9 -9
  95. package/source/css/_common/components/third-party/mermaid/sequence.styl +95 -95
  96. package/source/css/_common/components/third-party/mermaid/state.styl +130 -130
  97. package/source/css/_common/components/third-party/pace.styl +18 -18
  98. package/source/css/_common/components/third-party/search.styl +167 -167
  99. package/source/css/_common/components/third-party/theme.styl +151 -151
  100. package/source/css/_common/components/third-party/third-party.styl +22 -22
  101. package/source/css/_common/components/third-party/widgets.styl +57 -57
  102. package/source/css/_common/outline/footer/footer.styl +67 -67
  103. package/source/css/_common/outline/header/brand.styl +77 -77
  104. package/source/css/_common/outline/header/header.styl +20 -20
  105. package/source/css/_common/outline/header/image.styl +85 -85
  106. package/source/css/_common/outline/header/menu.styl +117 -117
  107. package/source/css/_common/outline/header/nav.styl +81 -81
  108. package/source/css/_common/outline/header/right.styl +15 -15
  109. package/source/css/_common/outline/header/tool.styl +207 -207
  110. package/source/css/_common/outline/header/waves.styl +57 -57
  111. package/source/css/_common/outline/mobile.styl +46 -46
  112. package/source/css/_common/outline/outline.styl +78 -78
  113. package/source/css/_common/outline/sidebar/author.styl +59 -59
  114. package/source/css/_common/outline/sidebar/dimmer.styl +23 -23
  115. package/source/css/_common/outline/sidebar/menu.styl +63 -63
  116. package/source/css/_common/outline/sidebar/quick.styl +43 -43
  117. package/source/css/_common/outline/sidebar/related.styl +56 -56
  118. package/source/css/_common/outline/sidebar/sidebar.styl +80 -80
  119. package/source/css/_common/outline/sidebar/social.styl +69 -69
  120. package/source/css/_common/outline/sidebar/state.styl +37 -37
  121. package/source/css/_common/outline/sidebar/tab.styl +71 -71
  122. package/source/css/_common/outline/sidebar/toc.styl +47 -47
  123. package/source/css/_common/scaffolding/animate.styl +322 -322
  124. package/source/css/_common/scaffolding/base.styl +190 -190
  125. package/source/css/_common/scaffolding/buttons.styl +48 -48
  126. package/source/css/_common/scaffolding/divider.styl +36 -36
  127. package/source/css/_common/scaffolding/iconfont.styl +443 -443
  128. package/source/css/_common/scaffolding/normalize.styl +273 -273
  129. package/source/css/_common/scaffolding/pagination.styl +81 -81
  130. package/source/css/_common/scaffolding/ribbon.styl +38 -38
  131. package/source/css/_common/scaffolding/scaffolding.styl +14 -14
  132. package/source/css/_common/scaffolding/scrollbar.styl +37 -37
  133. package/source/css/_common/scaffolding/tables.styl +50 -50
  134. package/source/css/_common/scaffolding/tip.styl +19 -19
  135. package/source/css/_common/scaffolding/toggles.styl +59 -59
  136. package/source/css/_iconfont.styl +455 -455
  137. package/source/css/_mixins.styl +148 -148
  138. package/source/css/_variables.styl +89 -89
  139. package/source/css/app.styl +41 -41
  140. package/source/css/mermaid.styl +5 -5
  141. package/source/css/optimize.styl +5 -5
  142. package/source/js/_app/components/comments.js +59 -0
  143. package/source/js/_app/components/comments.ts +88 -89
  144. package/source/js/_app/components/sidebar.js +244 -0
  145. package/source/js/_app/components/sidebar.ts +239 -239
  146. package/source/js/_app/components/tcomments.js +47 -0
  147. package/source/js/_app/components/tcomments.ts +54 -54
  148. package/source/js/_app/globals/globalVars.ts +99 -99
  149. package/source/js/_app/globals/handles.js +105 -0
  150. package/source/js/_app/globals/handles.ts +124 -124
  151. package/source/js/_app/globals/themeColor.ts +63 -63
  152. package/source/js/_app/globals/thirdparty.ts +63 -63
  153. package/source/js/_app/globals/tools.ts +75 -75
  154. package/source/js/_app/library/anime.ts +110 -110
  155. package/source/js/_app/library/declare.d.ts +128 -130
  156. package/source/js/_app/library/dom.ts +28 -28
  157. package/source/js/_app/library/loadFile.js +43 -0
  158. package/source/js/_app/library/loadFile.ts +47 -50
  159. package/source/js/_app/library/proto.ts +137 -137
  160. package/source/js/_app/library/scriptPjax.ts +72 -72
  161. package/source/js/_app/library/storage.ts +12 -12
  162. package/source/js/_app/library/vue.js +52 -0
  163. package/source/js/_app/library/vue.ts +49 -49
  164. package/source/js/_app/page/common.js +45 -0
  165. package/source/js/_app/page/common.ts +43 -43
  166. package/source/js/_app/page/fancybox.js +70 -0
  167. package/source/js/_app/page/fancybox.ts +72 -72
  168. package/source/js/_app/page/post.js +253 -0
  169. package/source/js/_app/page/post.ts +266 -266
  170. package/source/js/_app/page/search.js +111 -0
  171. package/source/js/_app/page/search.ts +115 -115
  172. package/source/js/_app/page/tab.ts +60 -60
  173. package/source/js/_app/pjax/domInit.js +80 -0
  174. package/source/js/_app/pjax/domInit.ts +97 -97
  175. package/source/js/_app/pjax/refresh.js +137 -0
  176. package/source/js/_app/pjax/refresh.ts +140 -138
  177. package/source/js/_app/pjax/siteInit.js +115 -0
  178. package/source/js/_app/pjax/siteInit.ts +106 -104
  179. package/source/js/_app/player.js +777 -0
  180. package/source/js/_app/player.ts +798 -798
  181. package/toolbox/compiler.mjs +73 -0
  182. package/toolbox/hoistdep.mjs +6 -0
  183. package/toolbox/lib.mjs +43 -0
@@ -1,239 +1,239 @@
1
- /* 边栏分区 */
2
-
3
- import { CONFIG, Container, diffY, menuToggle, showContents, sideBar } from '../globals/globalVars'
4
- import { clipBoard } from '../globals/tools'
5
- import { pageScroll, transition } from '../library/anime'
6
- import { $dom } from '../library/dom'
7
- import initProto, { getHeight, setDisplay } from '../library/proto'
8
-
9
- initProto()
10
- export const sideBarToggleHandle = (event:Event, force?:number) => {
11
- if (sideBar.hasClass('on')) {
12
- sideBar.removeClass('on')
13
- menuToggle.removeClass('close')
14
- if (force) {
15
- // @ts-ignore
16
- // noinspection JSConstantReassignment
17
- sideBar.style = ''
18
- } else {
19
- transition(sideBar, 'slideRightOut')
20
- }
21
- } else {
22
- if (force) {
23
- // @ts-ignore
24
- // noinspection JSConstantReassignment
25
- sideBar.style = ''
26
- } else {
27
- transition(sideBar, 'slideRightIn', () => {
28
- sideBar.addClass('on')
29
- menuToggle.addClass('close')
30
- })
31
- }
32
- }
33
- }
34
-
35
- export const sideBarTab = () => {
36
- const sideBarInner = sideBar.querySelector('.inner')
37
-
38
- if (sideBar.querySelector('.tab')) {
39
- sideBarInner.removeChild(sideBar.querySelector('.tab'))
40
- }
41
-
42
- const list = document.createElement('ul'); let active = 'active'
43
- list.className = 'tab';
44
-
45
- ['contents', 'related', 'overview'].forEach((item) => {
46
- const element = sideBar.querySelector('.panel.' + item)
47
-
48
- if (element.innerHTML.trim().length < 1) {
49
- if (item === 'contents') {
50
- setDisplay(showContents, 'none')
51
- }
52
- return
53
- }
54
-
55
- if (item === 'contents') {
56
- setDisplay(showContents, '')
57
- }
58
-
59
- const tab = document.createElement('li')
60
- const span = document.createElement('span')
61
- const text = document.createTextNode(element.getAttribute('data-title'))
62
- span.appendChild(text)
63
- tab.appendChild(span)
64
- tab.addClass(item + ' item')
65
-
66
- if (active) {
67
- element.addClass(active)
68
- tab.addClass(active)
69
- } else {
70
- element.removeClass('active')
71
- }
72
- tab.addEventListener('click', (event) => {
73
- const target = event.currentTarget as HTMLElement
74
- if (target.hasClass('active')) return
75
-
76
- sideBar.find('.tab .item').forEach((element) => {
77
- element.removeClass('active')
78
- })
79
-
80
- sideBar.find('.panel').forEach((element) => {
81
- element.removeClass('active')
82
- })
83
-
84
- sideBar.querySelector('.panel.' + target.className.replace(' item', '')).addClass('active')
85
-
86
- target.addClass('active')
87
- })
88
-
89
- list.appendChild(tab)
90
- active = ''
91
- })
92
-
93
- if (list.childNodes.length > 1) {
94
- sideBarInner.insertBefore(list, sideBarInner.childNodes[0]);
95
- (sideBar.querySelector('.panels') as HTMLElement).style.paddingTop = ''
96
- } else {
97
- (sideBar.querySelector('.panels') as HTMLElement).style.paddingTop = '.625rem'
98
- }
99
- }
100
-
101
- export const sidebarTOC = () => {
102
- const activateNavByIndex = (index:number): void => {
103
- const target = navItems[index]
104
-
105
- if (!target) return
106
-
107
- if (target.hasClass('current')) {
108
- return
109
- }
110
-
111
- $dom.each('.toc .active', (element) => {
112
- element && element.removeClass('active current')
113
- })
114
-
115
- sections.forEach((element) => {
116
- element && element.removeClass('active')
117
- })
118
-
119
- target.addClass('active current')
120
- sections[index] && sections[index].addClass('active')
121
-
122
- let parent = <Element> target.parentNode
123
-
124
- while (!parent.matches('.contents')) {
125
- if (parent.matches('li')) {
126
- parent.addClass('active')
127
- const t = document.querySelector(parent.querySelector('a.toc-link').getAttribute('href'))
128
- if (t) {
129
- t.addClass('active')
130
- }
131
- }
132
- parent = <Element> parent.parentNode
133
- }
134
- // Scrolling to center active TOC element if TOC content is taller than viewport.
135
- if (getComputedStyle(sideBar).display !== 'none' && tocElement.hasClass('active')) {
136
- pageScroll((tocElement as HTMLElement), target.offsetTop - ((tocElement as HTMLElement).offsetHeight / 4))
137
- }
138
- }
139
- const navItems = $dom.all('.contents li')
140
-
141
- if (navItems.length < 1) {
142
- return
143
- }
144
-
145
- let sections = [...navItems] as HTMLElement[]
146
- let activeLock = null
147
-
148
- sections = sections.map((element, index) => {
149
- const link = element.querySelector('a.toc-link')
150
- const anchor = document.querySelector(decodeURI(link.getAttribute('href')))
151
- if (!anchor) return null
152
- const alink = anchor.querySelector('a.anchor')
153
-
154
- const anchorScroll = (event:MouseEvent) => {
155
- event.preventDefault()
156
- const target = document.querySelector(decodeURI((event.currentTarget as HTMLElement).getAttribute('href')))
157
-
158
- activeLock = index
159
- pageScroll((target as HTMLElement), null, () => {
160
- activateNavByIndex(index)
161
- activeLock = null
162
- })
163
- }
164
-
165
- // TOC item animation navigate.
166
- link.addEventListener('click', anchorScroll)
167
- alink && alink.addEventListener('click', (event) => {
168
- anchorScroll(<MouseEvent>event)
169
- clipBoard(CONFIG.hostname + '/' + LOCAL.path + (event.currentTarget as HTMLElement).getAttribute('href'))
170
- })
171
- return (anchor as HTMLElement)
172
- })
173
-
174
- const tocElement = sideBar.querySelector('.contents.panel')
175
-
176
- const findIndex = (entries: IntersectionObserverEntry[]) => {
177
- let index = 0
178
- let entry = entries[index]
179
-
180
- if (entry.boundingClientRect.top > 0) {
181
- index = sections.indexOf(entry.target as HTMLElement)
182
- return index === 0 ? 0 : index - 1
183
- }
184
- for (; index < entries.length; index++) {
185
- if (entries[index].boundingClientRect.top <= 0) {
186
- entry = entries[index]
187
- } else {
188
- return sections.indexOf(entry.target as HTMLElement)
189
- }
190
- }
191
- return sections.indexOf(entry.target as HTMLElement)
192
- }
193
-
194
- const createIntersectionObserver = () => {
195
- const observer = new IntersectionObserver((entries) => {
196
- const index = findIndex(entries) + (diffY < 0 ? 1 : 0)
197
- if (activeLock === null) {
198
- activateNavByIndex(index)
199
- }
200
- }, {
201
- rootMargin: '0px 0px -100% 0px', threshold: 0
202
- })
203
-
204
- sections.forEach((element) => {
205
- element && observer.observe(element)
206
- })
207
- }
208
-
209
- createIntersectionObserver()
210
- }
211
-
212
- export const backToTopHandle = () => {
213
- pageScroll(0)
214
- }
215
-
216
- export const goToBottomHandle = () => {
217
- pageScroll(parseInt(String(getHeight(Container))))
218
- }
219
-
220
- export const goToCommentHandle = () => {
221
- pageScroll(document.getElementById('comments'))
222
- }
223
-
224
- export const menuActive = () => {
225
- $dom.each('.menu .item:not(.title)', (element) => {
226
- const target = <HTMLAnchorElement> element.querySelector('a[href]')
227
- const parentItem = element.parentNode.parentNode
228
- if (!target) return
229
- const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', '')
230
- const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname)
231
- const active = !target.onclick && target.hostname === location.hostname && (isSamePath || isSubPath)
232
- element.toggleClass('active', active)
233
- if (element.parentNode.querySelector('.active') && parentItem.hasClass('dropdown')) {
234
- parentItem.removeClass('active').addClass('expand')
235
- } else {
236
- parentItem.removeClass('expand')
237
- }
238
- })
239
- }
1
+ /* 边栏分区 */
2
+
3
+ import { CONFIG, Container, diffY, menuToggle, showContents, sideBar } from '../globals/globalVars'
4
+ import { clipBoard } from '../globals/tools'
5
+ import { pageScroll, transition } from '../library/anime'
6
+ import { $dom } from '../library/dom'
7
+ import initProto, { getHeight, setDisplay } from '../library/proto'
8
+
9
+ initProto()
10
+ export const sideBarToggleHandle = (event:Event, force?:number) => {
11
+ if (sideBar.hasClass('on')) {
12
+ sideBar.removeClass('on')
13
+ menuToggle.removeClass('close')
14
+ if (force) {
15
+ // @ts-ignore
16
+ // noinspection JSConstantReassignment
17
+ sideBar.style = ''
18
+ } else {
19
+ transition(sideBar, 'slideRightOut')
20
+ }
21
+ } else {
22
+ if (force) {
23
+ // @ts-ignore
24
+ // noinspection JSConstantReassignment
25
+ sideBar.style = ''
26
+ } else {
27
+ transition(sideBar, 'slideRightIn', () => {
28
+ sideBar.addClass('on')
29
+ menuToggle.addClass('close')
30
+ })
31
+ }
32
+ }
33
+ }
34
+
35
+ export const sideBarTab = () => {
36
+ const sideBarInner = sideBar.querySelector('.inner')
37
+
38
+ if (sideBar.querySelector('.tab')) {
39
+ sideBarInner.removeChild(sideBar.querySelector('.tab'))
40
+ }
41
+
42
+ const list = document.createElement('ul'); let active = 'active'
43
+ list.className = 'tab';
44
+
45
+ ['contents', 'related', 'overview'].forEach((item) => {
46
+ const element = sideBar.querySelector('.panel.' + item)
47
+
48
+ if (element.innerHTML.trim().length < 1) {
49
+ if (item === 'contents') {
50
+ setDisplay(showContents, 'none')
51
+ }
52
+ return
53
+ }
54
+
55
+ if (item === 'contents') {
56
+ setDisplay(showContents, '')
57
+ }
58
+
59
+ const tab = document.createElement('li')
60
+ const span = document.createElement('span')
61
+ const text = document.createTextNode(element.getAttribute('data-title'))
62
+ span.appendChild(text)
63
+ tab.appendChild(span)
64
+ tab.addClass(item + ' item')
65
+
66
+ if (active) {
67
+ element.addClass(active)
68
+ tab.addClass(active)
69
+ } else {
70
+ element.removeClass('active')
71
+ }
72
+ tab.addEventListener('click', (event) => {
73
+ const target = event.currentTarget as HTMLElement
74
+ if (target.hasClass('active')) return
75
+
76
+ sideBar.find('.tab .item').forEach((element) => {
77
+ element.removeClass('active')
78
+ })
79
+
80
+ sideBar.find('.panel').forEach((element) => {
81
+ element.removeClass('active')
82
+ })
83
+
84
+ sideBar.querySelector('.panel.' + target.className.replace(' item', '')).addClass('active')
85
+
86
+ target.addClass('active')
87
+ })
88
+
89
+ list.appendChild(tab)
90
+ active = ''
91
+ })
92
+
93
+ if (list.childNodes.length > 1) {
94
+ sideBarInner.insertBefore(list, sideBarInner.childNodes[0]);
95
+ (sideBar.querySelector('.panels') as HTMLElement).style.paddingTop = ''
96
+ } else {
97
+ (sideBar.querySelector('.panels') as HTMLElement).style.paddingTop = '.625rem'
98
+ }
99
+ }
100
+
101
+ export const sidebarTOC = () => {
102
+ const activateNavByIndex = (index:number): void => {
103
+ const target = navItems[index]
104
+
105
+ if (!target) return
106
+
107
+ if (target.hasClass('current')) {
108
+ return
109
+ }
110
+
111
+ $dom.each('.toc .active', (element) => {
112
+ element && element.removeClass('active current')
113
+ })
114
+
115
+ sections.forEach((element) => {
116
+ element && element.removeClass('active')
117
+ })
118
+
119
+ target.addClass('active current')
120
+ sections[index] && sections[index].addClass('active')
121
+
122
+ let parent = <Element> target.parentNode
123
+
124
+ while (!parent.matches('.contents')) {
125
+ if (parent.matches('li')) {
126
+ parent.addClass('active')
127
+ const t = document.querySelector(parent.querySelector('a.toc-link').getAttribute('href'))
128
+ if (t) {
129
+ t.addClass('active')
130
+ }
131
+ }
132
+ parent = <Element> parent.parentNode
133
+ }
134
+ // Scrolling to center active TOC element if TOC content is taller than viewport.
135
+ if (getComputedStyle(sideBar).display !== 'none' && tocElement.hasClass('active')) {
136
+ pageScroll((tocElement as HTMLElement), target.offsetTop - ((tocElement as HTMLElement).offsetHeight / 4))
137
+ }
138
+ }
139
+ const navItems = $dom.all('.contents li')
140
+
141
+ if (navItems.length < 1) {
142
+ return
143
+ }
144
+
145
+ let sections = [...navItems] as HTMLElement[]
146
+ let activeLock = null
147
+
148
+ sections = sections.map((element, index) => {
149
+ const link = element.querySelector('a.toc-link')
150
+ const anchor = document.querySelector(decodeURI(link.getAttribute('href')))
151
+ if (!anchor) return null
152
+ const alink = anchor.querySelector('a.anchor')
153
+
154
+ const anchorScroll = (event:MouseEvent) => {
155
+ event.preventDefault()
156
+ const target = document.querySelector(decodeURI((event.currentTarget as HTMLElement).getAttribute('href')))
157
+
158
+ activeLock = index
159
+ pageScroll((target as HTMLElement), null, () => {
160
+ activateNavByIndex(index)
161
+ activeLock = null
162
+ })
163
+ }
164
+
165
+ // TOC item animation navigate.
166
+ link.addEventListener('click', anchorScroll)
167
+ alink && alink.addEventListener('click', (event) => {
168
+ anchorScroll(<MouseEvent>event)
169
+ clipBoard(CONFIG.hostname + '/' + LOCAL.path + (event.currentTarget as HTMLElement).getAttribute('href'))
170
+ })
171
+ return (anchor as HTMLElement)
172
+ })
173
+
174
+ const tocElement = sideBar.querySelector('.contents.panel')
175
+
176
+ const findIndex = (entries: IntersectionObserverEntry[]) => {
177
+ let index = 0
178
+ let entry = entries[index]
179
+
180
+ if (entry.boundingClientRect.top > 0) {
181
+ index = sections.indexOf(entry.target as HTMLElement)
182
+ return index === 0 ? 0 : index - 1
183
+ }
184
+ for (; index < entries.length; index++) {
185
+ if (entries[index].boundingClientRect.top <= 0) {
186
+ entry = entries[index]
187
+ } else {
188
+ return sections.indexOf(entry.target as HTMLElement)
189
+ }
190
+ }
191
+ return sections.indexOf(entry.target as HTMLElement)
192
+ }
193
+
194
+ const createIntersectionObserver = () => {
195
+ const observer = new IntersectionObserver((entries) => {
196
+ const index = findIndex(entries) + (diffY < 0 ? 1 : 0)
197
+ if (activeLock === null) {
198
+ activateNavByIndex(index)
199
+ }
200
+ }, {
201
+ rootMargin: '0px 0px -100% 0px', threshold: 0
202
+ })
203
+
204
+ sections.forEach((element) => {
205
+ element && observer.observe(element)
206
+ })
207
+ }
208
+
209
+ createIntersectionObserver()
210
+ }
211
+
212
+ export const backToTopHandle = () => {
213
+ pageScroll(0)
214
+ }
215
+
216
+ export const goToBottomHandle = () => {
217
+ pageScroll(parseInt(String(getHeight(Container))))
218
+ }
219
+
220
+ export const goToCommentHandle = () => {
221
+ pageScroll(document.getElementById('comments'))
222
+ }
223
+
224
+ export const menuActive = () => {
225
+ $dom.each('.menu .item:not(.title)', (element) => {
226
+ const target = <HTMLAnchorElement> element.querySelector('a[href]')
227
+ const parentItem = element.parentNode.parentNode
228
+ if (!target) return
229
+ const isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', '')
230
+ const isSubPath = !CONFIG.root.startsWith(target.pathname) && location.pathname.startsWith(target.pathname)
231
+ const active = !target.onclick && target.hostname === location.hostname && (isSamePath || isSubPath)
232
+ element.toggleClass('active', active)
233
+ if (element.parentNode.querySelector('.active') && parentItem.hasClass('dropdown')) {
234
+ parentItem.removeClass('active').addClass('expand')
235
+ } else {
236
+ parentItem.removeClass('expand')
237
+ }
238
+ })
239
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.twikooRecentComments = exports.twikooComment = void 0;
7
+ const twikoo_1 = __importDefault(require("twikoo"));
8
+ const globalVars_1 = require("../globals/globalVars");
9
+ const vue_1 = require("vue");
10
+ const twikooComment = function () {
11
+ twikoo_1.default.init({
12
+ envId: globalVars_1.CONFIG.twikoo.envId,
13
+ el: '#comments',
14
+ region: globalVars_1.CONFIG.twikoo.region
15
+ });
16
+ };
17
+ exports.twikooComment = twikooComment;
18
+ const twikooRecentComments = async function () {
19
+ let comments = [];
20
+ const root = shokax_siteURL.replace(/^(https?:\/\/)?[^/]*/, '');
21
+ const res = await twikoo_1.default.getRecentComments({
22
+ envId: globalVars_1.CONFIG.twikoo.envId,
23
+ pageSize: 10
24
+ });
25
+ res.forEach(function (item) {
26
+ let cText = item.commentText;
27
+ if (item.commentText.length > 50) {
28
+ cText = item.commentText.substring(0, 50) + '...';
29
+ }
30
+ const siteLink = item.url + '#' + item.id;
31
+ comments.push({
32
+ href: siteLink,
33
+ nick: item.nick,
34
+ time: item.relativeTime,
35
+ text: cText
36
+ });
37
+ });
38
+ (0, vue_1.createApp)({
39
+ data() {
40
+ return {
41
+ coms: comments,
42
+ root
43
+ };
44
+ }
45
+ }).mount('#new-comment');
46
+ };
47
+ exports.twikooRecentComments = twikooRecentComments;
@@ -1,54 +1,54 @@
1
- import * as twikoo from 'twikoo'
2
- import { CONFIG } from '../globals/globalVars'
3
-
4
- export const twikooComment = function () {
5
- twikoo.init({
6
- envId: CONFIG.twikoo.envId,
7
- el: '#comments',
8
- region: CONFIG.twikoo.region
9
- })
10
- }
11
-
12
- export const twikooRecentComments = async function () {
13
- let comments = []
14
- const root = shokax_siteURL.replace(/^(https?:\/\/)?[^/]*/, '')
15
- const res = await twikoo.getRecentComments({
16
- envId: CONFIG.twikoo.envId,
17
- pageSize: 10
18
- })
19
- res.forEach(function (item) {
20
- let cText = item.commentText
21
- if (item.commentText.length > 50) {
22
- cText = item.commentText.substring(0, 50) + '...'
23
- }
24
- const siteLink = item.url + '#' + item.id
25
- comments.push({
26
- href: siteLink,
27
- nick: item.nick,
28
- time: item.relativeTime,
29
- text: cText
30
- })
31
- })
32
- const newComments = new DocumentFragment()
33
- comments.forEach(function (item) {
34
- const commentEl = document.createElement('li')
35
- const commentLink = document.createElement('a')
36
- const commentTime = document.createElement('span')
37
- const commentText = document.createElement('span')
38
-
39
- commentText.innerText = item.text
40
- commentTime.className = 'breadcrumb'
41
- commentTime.innerText = `${item.nick} @ ${item.time}`
42
- commentLink.href = root + item.href
43
- commentLink['data-pjax-state'] = 'data-pjax-state'
44
- commentEl.className = 'item'
45
-
46
- commentText.appendChild(document.createElement('br'))
47
- commentLink.appendChild(commentTime)
48
- commentLink.appendChild(commentText)
49
- commentEl.appendChild(commentLink)
50
- newComments.appendChild(commentEl)
51
- })
52
-
53
- document.getElementById('new-comment').appendChild(newComments)
54
- }
1
+ import * as twikoo from 'twikoo'
2
+ import { CONFIG } from '../globals/globalVars'
3
+
4
+ export const twikooComment = function () {
5
+ twikoo.init({
6
+ envId: CONFIG.twikoo.envId,
7
+ el: '#comments',
8
+ region: CONFIG.twikoo.region
9
+ })
10
+ }
11
+
12
+ export const twikooRecentComments = async function () {
13
+ let comments = []
14
+ const root = shokax_siteURL.replace(/^(https?:\/\/)?[^/]*/, '')
15
+ const res = await twikoo.getRecentComments({
16
+ envId: CONFIG.twikoo.envId,
17
+ pageSize: 10
18
+ })
19
+ res.forEach(function (item) {
20
+ let cText = item.commentText
21
+ if (item.commentText.length > 50) {
22
+ cText = item.commentText.substring(0, 50) + '...'
23
+ }
24
+ const siteLink = item.url + '#' + item.id
25
+ comments.push({
26
+ href: siteLink,
27
+ nick: item.nick,
28
+ time: item.relativeTime,
29
+ text: cText
30
+ })
31
+ })
32
+ const newComments = new DocumentFragment()
33
+ comments.forEach(function (item) {
34
+ const commentEl = document.createElement('li')
35
+ const commentLink = document.createElement('a')
36
+ const commentTime = document.createElement('span')
37
+ const commentText = document.createElement('span')
38
+
39
+ commentText.innerText = item.text
40
+ commentTime.className = 'breadcrumb'
41
+ commentTime.innerText = `${item.nick} @ ${item.time}`
42
+ commentLink.href = root + item.href
43
+ commentLink['data-pjax-state'] = 'data-pjax-state'
44
+ commentEl.className = 'item'
45
+
46
+ commentText.appendChild(document.createElement('br'))
47
+ commentLink.appendChild(commentTime)
48
+ commentLink.appendChild(commentText)
49
+ commentEl.appendChild(commentLink)
50
+ newComments.appendChild(commentEl)
51
+ })
52
+
53
+ document.getElementById('new-comment').appendChild(newComments)
54
+ }