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.
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +58 -58
- package/LICENSE +660 -660
- package/LICENSE-shoka +21 -21
- package/README.md +99 -98
- package/README_en.MD +91 -90
- package/UsageRestrictions.md +25 -25
- package/_config.yml +381 -388
- package/_images.yml +9 -9
- package/eslint.config.mjs +55 -55
- package/index.html +231 -0
- package/languages/README.md +19 -19
- package/languages/default.yml +1 -1
- package/languages/en.yml +153 -153
- package/languages/ja.yml +153 -153
- package/languages/zh-CN.yml +153 -153
- package/languages/zh-HK.yml +153 -153
- package/languages/zh-TW.yml +153 -153
- package/layout/_alternate/atom.ejs +30 -30
- package/layout/_alternate/json.ejs +16 -16
- package/layout/_alternate/rss.ejs +34 -34
- package/layout/_mixin/breadcrumb.pug +33 -33
- package/layout/_mixin/card.pug +38 -38
- package/layout/_mixin/comment.pug +6 -6
- package/layout/_mixin/postmeta.pug +29 -29
- package/layout/_mixin/segment.pug +35 -35
- package/layout/_mixin/sidebar.pug +40 -40
- package/layout/_mixin/widgets.pug +28 -28
- package/layout/_partials/footer.pug +43 -43
- package/layout/_partials/head/head.pug +55 -56
- package/layout/_partials/head/head_com.pug +24 -24
- package/layout/_partials/head/pwa.pug +18 -18
- package/layout/_partials/header.pug +18 -18
- package/layout/_partials/layout.pug +140 -140
- package/layout/_partials/loading.pug +13 -13
- package/layout/_partials/pagination.pug +4 -4
- package/layout/_partials/post/copyright.pug +20 -20
- package/layout/_partials/post/footer.pug +17 -17
- package/layout/_partials/post/nav.pug +13 -13
- package/layout/_partials/post/post.pug +41 -41
- package/layout/_partials/post/reward.pug +18 -18
- package/layout/_partials/sidebar/menu.pug +37 -37
- package/layout/_partials/sidebar/overview.pug +42 -42
- package/layout/_partials/third-party/baidu-analytics.pug +11 -11
- package/layout/_partials/third-party/clarity.pug +8 -8
- package/layout/_partials/third-party/google-analytics.pug +9 -9
- package/layout/archive.pug +118 -118
- package/layout/category.pug +59 -59
- package/layout/index.pug +33 -33
- package/layout/page.pug +55 -55
- package/layout/post.pug +36 -36
- package/layout/tag.pug +43 -43
- package/meta.json +6431 -0
- package/package.json +72 -70
- package/scripts/helpers/engine.js +10 -0
- package/scripts/plugin/check.js +2 -2
- package/scripts/tags/links.js +4 -4
- package/source/assets/algolia_logo.svg +9 -9
- package/source/assets/logo.svg +16 -16
- package/source/css/_colors.styl +207 -207
- package/source/css/_common/components/components.styl +6 -6
- package/source/css/_common/components/highlight/highlight.styl +357 -357
- package/source/css/_common/components/highlight/operation.styl +21 -21
- package/source/css/_common/components/pages/collapse.styl +119 -119
- package/source/css/_common/components/pages/home.styl +391 -391
- package/source/css/_common/components/pages/pages.styl +56 -56
- package/source/css/_common/components/pages/tag-cloud.styl +12 -12
- package/source/css/_common/components/post/breadcrumb.styl +39 -39
- package/source/css/_common/components/post/copyright.styl +41 -41
- package/source/css/_common/components/post/expand.styl +263 -263
- package/source/css/_common/components/post/footer.styl +11 -11
- package/source/css/_common/components/post/header.styl +79 -79
- package/source/css/_common/components/post/nav.styl +64 -64
- package/source/css/_common/components/post/post.styl +29 -29
- package/source/css/_common/components/post/reward.styl +50 -50
- package/source/css/_common/components/post/rtl.styl +12 -12
- package/source/css/_common/components/post/tags.styl +39 -39
- package/source/css/_common/components/tags/collapse.styl +72 -72
- package/source/css/_common/components/tags/container.styl +49 -49
- package/source/css/_common/components/tags/label.styl +12 -12
- package/source/css/_common/components/tags/links.styl +77 -77
- package/source/css/_common/components/tags/list.styl +131 -131
- package/source/css/_common/components/tags/note.styl +70 -70
- package/source/css/_common/components/tags/player.styl +361 -361
- package/source/css/_common/components/tags/quiz.styl +200 -200
- package/source/css/_common/components/tags/tabs.styl +89 -89
- package/source/css/_common/components/tags/tags.styl +9 -9
- package/source/css/_common/components/third-party/loading.styl +222 -222
- package/source/css/_common/components/third-party/mermaid/class.styl +90 -90
- package/source/css/_common/components/third-party/mermaid/flowchart.styl +72 -72
- package/source/css/_common/components/third-party/mermaid/gantt.styl +251 -251
- package/source/css/_common/components/third-party/mermaid/git.styl +7 -7
- package/source/css/_common/components/third-party/mermaid/mermaid.styl +37 -37
- package/source/css/_common/components/third-party/mermaid/pie.styl +9 -9
- package/source/css/_common/components/third-party/mermaid/sequence.styl +95 -95
- package/source/css/_common/components/third-party/mermaid/state.styl +130 -130
- package/source/css/_common/components/third-party/pace.styl +18 -18
- package/source/css/_common/components/third-party/search.styl +167 -167
- package/source/css/_common/components/third-party/theme.styl +151 -151
- package/source/css/_common/components/third-party/third-party.styl +22 -22
- package/source/css/_common/components/third-party/widgets.styl +57 -57
- package/source/css/_common/outline/footer/footer.styl +67 -67
- package/source/css/_common/outline/header/brand.styl +77 -77
- package/source/css/_common/outline/header/header.styl +20 -20
- package/source/css/_common/outline/header/image.styl +85 -85
- package/source/css/_common/outline/header/menu.styl +117 -117
- package/source/css/_common/outline/header/nav.styl +81 -81
- package/source/css/_common/outline/header/right.styl +15 -15
- package/source/css/_common/outline/header/tool.styl +207 -207
- package/source/css/_common/outline/header/waves.styl +57 -57
- package/source/css/_common/outline/mobile.styl +46 -46
- package/source/css/_common/outline/outline.styl +78 -78
- package/source/css/_common/outline/sidebar/author.styl +59 -59
- package/source/css/_common/outline/sidebar/dimmer.styl +23 -23
- package/source/css/_common/outline/sidebar/menu.styl +63 -63
- package/source/css/_common/outline/sidebar/quick.styl +43 -43
- package/source/css/_common/outline/sidebar/related.styl +56 -56
- package/source/css/_common/outline/sidebar/sidebar.styl +80 -80
- package/source/css/_common/outline/sidebar/social.styl +69 -69
- package/source/css/_common/outline/sidebar/state.styl +37 -37
- package/source/css/_common/outline/sidebar/tab.styl +71 -71
- package/source/css/_common/outline/sidebar/toc.styl +47 -47
- package/source/css/_common/scaffolding/animate.styl +322 -322
- package/source/css/_common/scaffolding/base.styl +190 -190
- package/source/css/_common/scaffolding/buttons.styl +48 -48
- package/source/css/_common/scaffolding/divider.styl +36 -36
- package/source/css/_common/scaffolding/iconfont.styl +443 -443
- package/source/css/_common/scaffolding/normalize.styl +273 -273
- package/source/css/_common/scaffolding/pagination.styl +81 -81
- package/source/css/_common/scaffolding/ribbon.styl +38 -38
- package/source/css/_common/scaffolding/scaffolding.styl +14 -14
- package/source/css/_common/scaffolding/scrollbar.styl +37 -37
- package/source/css/_common/scaffolding/tables.styl +50 -50
- package/source/css/_common/scaffolding/tip.styl +19 -19
- package/source/css/_common/scaffolding/toggles.styl +59 -59
- package/source/css/_iconfont.styl +455 -455
- package/source/css/_mixins.styl +148 -148
- package/source/css/_variables.styl +89 -89
- package/source/css/app.styl +41 -41
- package/source/css/mermaid.styl +5 -5
- package/source/css/optimize.styl +5 -5
- package/source/js/_app/components/comments.js +59 -0
- package/source/js/_app/components/comments.ts +88 -89
- package/source/js/_app/components/sidebar.js +244 -0
- package/source/js/_app/components/sidebar.ts +239 -239
- package/source/js/_app/components/tcomments.js +47 -0
- package/source/js/_app/components/tcomments.ts +54 -54
- package/source/js/_app/globals/globalVars.ts +99 -99
- package/source/js/_app/globals/handles.js +105 -0
- package/source/js/_app/globals/handles.ts +124 -124
- package/source/js/_app/globals/themeColor.ts +63 -63
- package/source/js/_app/globals/thirdparty.ts +63 -63
- package/source/js/_app/globals/tools.ts +75 -75
- package/source/js/_app/library/anime.ts +110 -110
- package/source/js/_app/library/declare.d.ts +128 -130
- package/source/js/_app/library/dom.ts +28 -28
- package/source/js/_app/library/loadFile.js +43 -0
- package/source/js/_app/library/loadFile.ts +47 -50
- package/source/js/_app/library/proto.ts +137 -137
- package/source/js/_app/library/scriptPjax.ts +72 -72
- package/source/js/_app/library/storage.ts +12 -12
- package/source/js/_app/library/vue.js +52 -0
- package/source/js/_app/library/vue.ts +49 -49
- package/source/js/_app/page/common.js +45 -0
- package/source/js/_app/page/common.ts +43 -43
- package/source/js/_app/page/fancybox.js +70 -0
- package/source/js/_app/page/fancybox.ts +72 -72
- package/source/js/_app/page/post.js +253 -0
- package/source/js/_app/page/post.ts +266 -266
- package/source/js/_app/page/search.js +111 -0
- package/source/js/_app/page/search.ts +115 -115
- package/source/js/_app/page/tab.ts +60 -60
- package/source/js/_app/pjax/domInit.js +80 -0
- package/source/js/_app/pjax/domInit.ts +97 -97
- package/source/js/_app/pjax/refresh.js +137 -0
- package/source/js/_app/pjax/refresh.ts +140 -138
- package/source/js/_app/pjax/siteInit.js +115 -0
- package/source/js/_app/pjax/siteInit.ts +106 -104
- package/source/js/_app/player.js +777 -0
- package/source/js/_app/player.ts +798 -798
- package/toolbox/compiler.mjs +73 -0
- package/toolbox/hoistdep.mjs +6 -0
- 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;
|