hexo-theme-shokax 0.4.5 → 0.4.6-beta1

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 +40 -0
@@ -1,137 +1,137 @@
1
- import { $dom } from './dom'
2
-
3
- export const insertAfter = function (el: Element, element: HTMLElement): void {
4
- const parent = el.parentNode
5
- if (parent.lastChild === el) {
6
- parent.appendChild(element)
7
- } else {
8
- parent.insertBefore(element, el.nextSibling)
9
- }
10
- }
11
-
12
- /**
13
- * 创建一个子节点并放置
14
- */
15
- export const createChild = function (parent: Element, tag: string, obj: object, positon?: string): HTMLElement {
16
- const child = document.createElement(tag)
17
- Object.assign(child, obj)
18
- switch (positon) {
19
- case 'after':
20
- insertAfter(parent, child)
21
- break
22
- case 'replace':
23
- parent.innerHTML = ''
24
- parent.appendChild(child)
25
- break
26
- default:
27
- parent.appendChild(child)
28
- }
29
- return child
30
- }
31
-
32
- /**
33
- * 此方法使用`<div>`包装一个 DOM 元素
34
- * @param parent
35
- * @param obj 需要被包装的对象
36
- */
37
- export const wrapObject = function (parent: HTMLElement, obj: any): void {
38
- const box = document.createElement('div')
39
- Object.assign(box, obj)
40
- parent.parentNode.insertBefore(box, parent)
41
- parent.parentNode.removeChild(parent)
42
- box.appendChild(parent)
43
- }
44
-
45
- export const getHeight = function (el: HTMLElement): number {
46
- return el.getBoundingClientRect().height
47
- }
48
-
49
- export const setWidth = function (el: HTMLElement, w: number|string): void {
50
- el.style.width = typeof w === 'number' ? w + 'rem' : w
51
- }
52
-
53
- export const getWidth = function (el: HTMLElement): number {
54
- return el.getBoundingClientRect().width
55
- }
56
-
57
- export const getTop = function (el: HTMLElement): number {
58
- return el.getBoundingClientRect().top
59
- }
60
-
61
- export const getLeft = function (el: HTMLElement): number {
62
- return el.getBoundingClientRect().left
63
- }
64
-
65
- export const getDisplay = function (el: HTMLElement): string {
66
- return el.style.display
67
- }
68
-
69
- export const setDisplay = function (el: HTMLElement, d: string): HTMLElement {
70
- el.style.display = d
71
- return el
72
- }
73
-
74
- export default function initProto () {
75
- Object.assign(HTMLElement.prototype, {
76
- /**
77
- * 找到此节点所有符合selector选择器的子节点
78
- * @deprecated Will be removed in the v0.5
79
- */
80
- find (selector: string): NodeListOf<HTMLElement> {
81
- return $dom.all(selector, this)
82
- },
83
- /**
84
- * 这个方法接受三个参数:
85
- * type 表示操作类型('add'、'remove'、'toggle'),
86
- * className 是一个或多个要操作的类名,
87
- * display 是一个可选的布尔值,用于在执行切换操作时指定类名是否应显示或隐藏。
88
- * 该方法会根据操作类型执行相应的类名操作。
89
- * @deprecated Will be removed in the v0.5
90
- */
91
- _class (type: string, className: string, display?: boolean): void {
92
- const classNames = className.indexOf(' ') ? className.split(' ') : [className]
93
- classNames.forEach((name) => {
94
- if (type === 'toggle') {
95
- this.classList.toggle(name, display)
96
- } else {
97
- this.classList[type](name)
98
- }
99
- })
100
- },
101
- /**
102
- * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'add',然后执行添加类名的操作。
103
- * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
104
- * @deprecated Will be removed in the v0.5
105
- */
106
- addClass (className: string): EventTarget {
107
- this._class('add', className)
108
- return this
109
- },
110
- /**
111
- * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'remove',然后执行移除类名的操作。
112
- * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
113
- * @deprecated Will be removed in the v0.5
114
- */
115
- removeClass (className: string): EventTarget {
116
- this._class('remove', className)
117
- return this
118
- },
119
- /**
120
- * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'toggle',然后执行切换类名的操作。
121
- * 如果提供了 display 参数,它将根据布尔值决定是否显示或隐藏类名。
122
- * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
123
- * @deprecated Will be removed in the v0.5
124
- */
125
- toggleClass (className: string, display?: boolean): EventTarget {
126
- this._class('toggle', className, display)
127
- return this
128
- },
129
- /**
130
- * 这个方法返回一个布尔值,表示元素是否包含指定的类名。
131
- * @deprecated Will be removed in the v0.5
132
- */
133
- hasClass (className: string): boolean {
134
- return this.classList.contains(className)
135
- }
136
- })
137
- }
1
+ import { $dom } from './dom'
2
+
3
+ export const insertAfter = function (el: Element, element: HTMLElement): void {
4
+ const parent = el.parentNode
5
+ if (parent.lastChild === el) {
6
+ parent.appendChild(element)
7
+ } else {
8
+ parent.insertBefore(element, el.nextSibling)
9
+ }
10
+ }
11
+
12
+ /**
13
+ * 创建一个子节点并放置
14
+ */
15
+ export const createChild = function (parent: Element, tag: string, obj: object, positon?: string): HTMLElement {
16
+ const child = document.createElement(tag)
17
+ Object.assign(child, obj)
18
+ switch (positon) {
19
+ case 'after':
20
+ insertAfter(parent, child)
21
+ break
22
+ case 'replace':
23
+ parent.innerHTML = ''
24
+ parent.appendChild(child)
25
+ break
26
+ default:
27
+ parent.appendChild(child)
28
+ }
29
+ return child
30
+ }
31
+
32
+ /**
33
+ * 此方法使用`<div>`包装一个 DOM 元素
34
+ * @param parent
35
+ * @param obj 需要被包装的对象
36
+ */
37
+ export const wrapObject = function (parent: HTMLElement, obj: any): void {
38
+ const box = document.createElement('div')
39
+ Object.assign(box, obj)
40
+ parent.parentNode.insertBefore(box, parent)
41
+ parent.parentNode.removeChild(parent)
42
+ box.appendChild(parent)
43
+ }
44
+
45
+ export const getHeight = function (el: HTMLElement): number {
46
+ return el.getBoundingClientRect().height
47
+ }
48
+
49
+ export const setWidth = function (el: HTMLElement, w: number|string): void {
50
+ el.style.width = typeof w === 'number' ? w + 'rem' : w
51
+ }
52
+
53
+ export const getWidth = function (el: HTMLElement): number {
54
+ return el.getBoundingClientRect().width
55
+ }
56
+
57
+ export const getTop = function (el: HTMLElement): number {
58
+ return el.getBoundingClientRect().top
59
+ }
60
+
61
+ export const getLeft = function (el: HTMLElement): number {
62
+ return el.getBoundingClientRect().left
63
+ }
64
+
65
+ export const getDisplay = function (el: HTMLElement): string {
66
+ return el.style.display
67
+ }
68
+
69
+ export const setDisplay = function (el: HTMLElement, d: string): HTMLElement {
70
+ el.style.display = d
71
+ return el
72
+ }
73
+
74
+ export default function initProto () {
75
+ Object.assign(HTMLElement.prototype, {
76
+ /**
77
+ * 找到此节点所有符合selector选择器的子节点
78
+ * @deprecated Will be removed in the v0.5
79
+ */
80
+ find (selector: string): NodeListOf<HTMLElement> {
81
+ return $dom.all(selector, this)
82
+ },
83
+ /**
84
+ * 这个方法接受三个参数:
85
+ * type 表示操作类型('add'、'remove'、'toggle'),
86
+ * className 是一个或多个要操作的类名,
87
+ * display 是一个可选的布尔值,用于在执行切换操作时指定类名是否应显示或隐藏。
88
+ * 该方法会根据操作类型执行相应的类名操作。
89
+ * @deprecated Will be removed in the v0.5
90
+ */
91
+ _class (type: string, className: string, display?: boolean): void {
92
+ const classNames = className.indexOf(' ') ? className.split(' ') : [className]
93
+ classNames.forEach((name) => {
94
+ if (type === 'toggle') {
95
+ this.classList.toggle(name, display)
96
+ } else {
97
+ this.classList[type](name)
98
+ }
99
+ })
100
+ },
101
+ /**
102
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'add',然后执行添加类名的操作。
103
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
104
+ * @deprecated Will be removed in the v0.5
105
+ */
106
+ addClass (className: string): EventTarget {
107
+ this._class('add', className)
108
+ return this
109
+ },
110
+ /**
111
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'remove',然后执行移除类名的操作。
112
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
113
+ * @deprecated Will be removed in the v0.5
114
+ */
115
+ removeClass (className: string): EventTarget {
116
+ this._class('remove', className)
117
+ return this
118
+ },
119
+ /**
120
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'toggle',然后执行切换类名的操作。
121
+ * 如果提供了 display 参数,它将根据布尔值决定是否显示或隐藏类名。
122
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
123
+ * @deprecated Will be removed in the v0.5
124
+ */
125
+ toggleClass (className: string, display?: boolean): EventTarget {
126
+ this._class('toggle', className, display)
127
+ return this
128
+ },
129
+ /**
130
+ * 这个方法返回一个布尔值,表示元素是否包含指定的类名。
131
+ * @deprecated Will be removed in the v0.5
132
+ */
133
+ hasClass (className: string): boolean {
134
+ return this.classList.contains(className)
135
+ }
136
+ })
137
+ }
@@ -1,72 +1,72 @@
1
- // rocket-loader & Auto minify(cloudflare) 补丁
2
- // cloudflare 的上述功能会导致DOMContentLoaded事件无法触发,此补丁会将DOMContentLoaded重定向为load事件
3
- export function cloudflareInit () {
4
- let inCloudFlare = true
5
- window.addEventListener('DOMContentLoaded', function () {
6
- inCloudFlare = false
7
- })
8
-
9
- if (document.readyState === 'loading') {
10
- window.addEventListener('load', function () {
11
- if (inCloudFlare) {
12
- window.dispatchEvent(new Event('DOMContentLoaded'))
13
- console.log('%c ☁️cloudflare patch ' + '%c running(rocket & minify)', 'color: white; background: #ff8c00; padding: 5px 3px;', 'padding: 4px;border:1px solid #ff8c00')
14
- }
15
- })
16
- }
17
- }
18
-
19
- export const getScript = (url: string, callback?: Function, condition?: string): void => {
20
- // url: 脚本文件的URL地址
21
- // callback: 当脚本加载完成时要执行的回调函数
22
- // condition: 可选的条件参数,如果存在,则执行callback
23
- if (condition) {
24
- // 如果条件存在,则执行回调函数
25
- callback()
26
- } else {
27
- let script = document.createElement('script')
28
-
29
- // @ts-ignore
30
- script.onload = function (_, isAbort: boolean) {
31
- // _: 事件对象
32
- // isAbort: 是否中止
33
- // @ts-ignore
34
- if (isAbort || !script.readyState) {
35
- console.log('abort!')
36
- script.onload = null
37
- script = undefined
38
- if (!isAbort && callback) setTimeout(callback, 0)
39
- }
40
- }
41
- script.src = url
42
- document.head.appendChild(script)
43
- }
44
- }
45
-
46
- export const pjaxScript = (element: HTMLScriptElement) => {
47
- const { text, parentNode, id, className, type, src, dataset } = element
48
- const code = text || element.textContent || element.innerHTML || ''
49
- parentNode.removeChild(element)
50
- const script = document.createElement('script')
51
- if (id) {
52
- script.id = id
53
- }
54
- if (className) {
55
- script.className = className
56
- }
57
- if (type) {
58
- script.type = type
59
- }
60
- if (src) {
61
- // Force synchronous loading of peripheral JS.
62
- script.src = src
63
- script.async = false
64
- }
65
- if (dataset.pjax !== undefined) {
66
- script.dataset.pjax = ''
67
- }
68
- if (code !== '') {
69
- script.appendChild(document.createTextNode(code))
70
- }
71
- parentNode.appendChild(script)
72
- }
1
+ // rocket-loader & Auto minify(cloudflare) 补丁
2
+ // cloudflare 的上述功能会导致DOMContentLoaded事件无法触发,此补丁会将DOMContentLoaded重定向为load事件
3
+ export function cloudflareInit () {
4
+ let inCloudFlare = true
5
+ window.addEventListener('DOMContentLoaded', function () {
6
+ inCloudFlare = false
7
+ })
8
+
9
+ if (document.readyState === 'loading') {
10
+ window.addEventListener('load', function () {
11
+ if (inCloudFlare) {
12
+ window.dispatchEvent(new Event('DOMContentLoaded'))
13
+ console.log('%c ☁️cloudflare patch ' + '%c running(rocket & minify)', 'color: white; background: #ff8c00; padding: 5px 3px;', 'padding: 4px;border:1px solid #ff8c00')
14
+ }
15
+ })
16
+ }
17
+ }
18
+
19
+ export const getScript = (url: string, callback?: Function, condition?: string): void => {
20
+ // url: 脚本文件的URL地址
21
+ // callback: 当脚本加载完成时要执行的回调函数
22
+ // condition: 可选的条件参数,如果存在,则执行callback
23
+ if (condition) {
24
+ // 如果条件存在,则执行回调函数
25
+ callback()
26
+ } else {
27
+ let script = document.createElement('script')
28
+
29
+ // @ts-ignore
30
+ script.onload = function (_, isAbort: boolean) {
31
+ // _: 事件对象
32
+ // isAbort: 是否中止
33
+ // @ts-ignore
34
+ if (isAbort || !script.readyState) {
35
+ console.log('abort!')
36
+ script.onload = null
37
+ script = undefined
38
+ if (!isAbort && callback) setTimeout(callback, 0)
39
+ }
40
+ }
41
+ script.src = url
42
+ document.head.appendChild(script)
43
+ }
44
+ }
45
+
46
+ export const pjaxScript = (element: HTMLScriptElement) => {
47
+ const { text, parentNode, id, className, type, src, dataset } = element
48
+ const code = text || element.textContent || element.innerHTML || ''
49
+ parentNode.removeChild(element)
50
+ const script = document.createElement('script')
51
+ if (id) {
52
+ script.id = id
53
+ }
54
+ if (className) {
55
+ script.className = className
56
+ }
57
+ if (type) {
58
+ script.type = type
59
+ }
60
+ if (src) {
61
+ // Force synchronous loading of peripheral JS.
62
+ script.src = src
63
+ script.async = false
64
+ }
65
+ if (dataset.pjax !== undefined) {
66
+ script.dataset.pjax = ''
67
+ }
68
+ if (code !== '') {
69
+ script.appendChild(document.createTextNode(code))
70
+ }
71
+ parentNode.appendChild(script)
72
+ }
@@ -1,12 +1,12 @@
1
- // Html5LocalStorage的一个API
2
- export const $storage = {
3
- set (key: string, value: string): void {
4
- localStorage.setItem(key, value)
5
- },
6
- get (key: string): string {
7
- return localStorage.getItem(key)
8
- },
9
- del (key: string): void {
10
- localStorage.removeItem(key)
11
- }
12
- }
1
+ // Html5LocalStorage的一个API
2
+ export const $storage = {
3
+ set (key: string, value: string): void {
4
+ localStorage.setItem(key, value)
5
+ },
6
+ get (key: string): string {
7
+ return localStorage.getItem(key)
8
+ },
9
+ del (key: string): void {
10
+ localStorage.removeItem(key)
11
+ }
12
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initVue = void 0;
4
+ const storage_1 = require("./storage");
5
+ const anime_1 = require("./anime");
6
+ const dom_1 = require("./dom");
7
+ const globalVars_1 = require("../globals/globalVars");
8
+ const themeColor_1 = require("../globals/themeColor");
9
+ const proto_1 = require("./proto");
10
+ function initVue() {
11
+ function changeThemeByBtn() {
12
+ let c;
13
+ const btn = (0, proto_1.child)((0, dom_1.$dom)('.theme'), '.ic');
14
+ const neko = (0, proto_1.createChild)(globalVars_1.BODY, 'div', {
15
+ id: 'neko',
16
+ innerHTML: '<div class="planet"><div class="sun"></div><div class="moon"></div></div><div class="body"><div class="face"><section class="eyes left"><span class="pupil"></span></section><section class="eyes right"><span class="pupil"></span></section><span class="nose"></span></div></div>'
17
+ });
18
+ const hideNeko = () => {
19
+ (0, anime_1.transition)(neko, {
20
+ // @ts-ignore
21
+ delay: 2500,
22
+ opacity: 0
23
+ }, () => {
24
+ globalVars_1.BODY.removeChild(neko);
25
+ });
26
+ };
27
+ if (btn.hasClass('i-sun')) {
28
+ c = () => {
29
+ neko.addClass('dark');
30
+ (0, themeColor_1.changeTheme)('dark');
31
+ storage_1.$storage.set('theme', 'dark');
32
+ hideNeko();
33
+ };
34
+ }
35
+ else {
36
+ neko.addClass('dark');
37
+ c = () => {
38
+ neko.removeClass('dark');
39
+ (0, themeColor_1.changeTheme)();
40
+ storage_1.$storage.set('theme', 'light');
41
+ hideNeko();
42
+ };
43
+ }
44
+ (0, anime_1.transition)(neko, 1, () => {
45
+ setTimeout(c, 210);
46
+ }, () => {
47
+ (0, proto_1.setDisplay)(neko, 'block');
48
+ });
49
+ }
50
+ (0, proto_1.child)((0, dom_1.$dom)('#rightNav'), '.theme .ic').addEventListener('click', changeThemeByBtn);
51
+ }
52
+ exports.initVue = initVue;
@@ -1,49 +1,49 @@
1
- import { $storage } from './storage'
2
- import { transition } from './anime'
3
- import { BODY } from '../globals/globalVars'
4
- import { changeTheme } from '../globals/themeColor'
5
- import { createChild, setDisplay } from './proto'
6
- export function initVue () {
7
- function changeThemeByBtn () {
8
- let c: { (): void; (): void; (): void }
9
- const btn = document.querySelector('.theme').querySelector('.ic')
10
-
11
- const neko = createChild(BODY, 'div', {
12
- id: 'neko',
13
- innerHTML: '<div class="planet"><div class="sun"></div><div class="moon"></div></div><div class="body"><div class="face"><section class="eyes left"><span class="pupil"></span></section><section class="eyes right"><span class="pupil"></span></section><span class="nose"></span></div></div>'
14
- })
15
-
16
- const hideNeko = () => {
17
- transition(neko, {
18
- // @ts-ignore
19
- delay: 2500,
20
- opacity: 0
21
- }, () => {
22
- BODY.removeChild(neko)
23
- })
24
- }
25
-
26
- if (btn.hasClass('i-sun')) {
27
- c = () => {
28
- neko.addClass('dark')
29
- changeTheme('dark')
30
- $storage.set('theme', 'dark')
31
- hideNeko()
32
- }
33
- } else {
34
- neko.addClass('dark')
35
- c = () => {
36
- neko.removeClass('dark')
37
- changeTheme()
38
- $storage.set('theme', 'light')
39
- hideNeko()
40
- }
41
- }
42
- transition(neko, 1, () => {
43
- setTimeout(c, 210)
44
- }, () => {
45
- setDisplay(neko, 'block')
46
- })
47
- }
48
- document.getElementById('rightNav').querySelector('.theme .ic').addEventListener('click', changeThemeByBtn)
49
- }
1
+ import { $storage } from './storage'
2
+ import { transition } from './anime'
3
+ import { BODY } from '../globals/globalVars'
4
+ import { changeTheme } from '../globals/themeColor'
5
+ import { createChild, setDisplay } from './proto'
6
+ export function initVue () {
7
+ function changeThemeByBtn () {
8
+ let c: { (): void; (): void; (): void }
9
+ const btn = document.querySelector('.theme').querySelector('.ic')
10
+
11
+ const neko = createChild(BODY, 'div', {
12
+ id: 'neko',
13
+ innerHTML: '<div class="planet"><div class="sun"></div><div class="moon"></div></div><div class="body"><div class="face"><section class="eyes left"><span class="pupil"></span></section><section class="eyes right"><span class="pupil"></span></section><span class="nose"></span></div></div>'
14
+ })
15
+
16
+ const hideNeko = () => {
17
+ transition(neko, {
18
+ // @ts-ignore
19
+ delay: 2500,
20
+ opacity: 0
21
+ }, () => {
22
+ BODY.removeChild(neko)
23
+ })
24
+ }
25
+
26
+ if (btn.hasClass('i-sun')) {
27
+ c = () => {
28
+ neko.addClass('dark')
29
+ changeTheme('dark')
30
+ $storage.set('theme', 'dark')
31
+ hideNeko()
32
+ }
33
+ } else {
34
+ neko.addClass('dark')
35
+ c = () => {
36
+ neko.removeClass('dark')
37
+ changeTheme()
38
+ $storage.set('theme', 'light')
39
+ hideNeko()
40
+ }
41
+ }
42
+ transition(neko, 1, () => {
43
+ setTimeout(c, 210)
44
+ }, () => {
45
+ setDisplay(neko, 'block')
46
+ })
47
+ }
48
+ document.getElementById('rightNav').querySelector('.theme .ic').addEventListener('click', changeThemeByBtn)
49
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cardActive = void 0;
4
+ const dom_1 = require("../library/dom");
5
+ const cardActive = () => {
6
+ if (!(0, dom_1.$dom)('.index.wrap')) {
7
+ return;
8
+ }
9
+ const io = new IntersectionObserver((entries) => {
10
+ entries.forEach((article) => {
11
+ if (article.target.hasClass('show')) {
12
+ io.unobserve(article.target);
13
+ }
14
+ else {
15
+ if (article.isIntersecting || article.intersectionRatio > 0) {
16
+ article.target.addClass('show');
17
+ io.unobserve(article.target);
18
+ }
19
+ }
20
+ });
21
+ }, {
22
+ root: null,
23
+ threshold: [0.3]
24
+ });
25
+ dom_1.$dom.each('.index.wrap article.item, .index.wrap section.item', (article) => {
26
+ io.observe(article);
27
+ });
28
+ (0, dom_1.$dom)('.index.wrap .item:first-child').addClass('show');
29
+ dom_1.$dom.each('.cards .item', (element) => {
30
+ ['mouseenter', 'touchstart'].forEach((item) => {
31
+ element.addEventListener(item, () => {
32
+ if ((0, dom_1.$dom)('.cards .item.active')) {
33
+ (0, dom_1.$dom)('.cards .item.active').removeClass('active');
34
+ }
35
+ element.addClass('active');
36
+ }, { passive: true });
37
+ });
38
+ ['mouseleave'].forEach((item) => {
39
+ element.addEventListener(item, () => {
40
+ element.removeClass('active');
41
+ }, { passive: true });
42
+ });
43
+ });
44
+ };
45
+ exports.cardActive = cardActive;