hexo-theme-shokax 0.4.6-dev5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) 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 +76 -99
  6. package/README_en.MD +75 -91
  7. package/UsageRestrictions.md +25 -25
  8. package/_config.yml +381 -381
  9. package/_images.yml +9 -9
  10. package/eslint.config.mjs +55 -55
  11. package/languages/README.md +19 -19
  12. package/languages/default.yml +1 -1
  13. package/languages/en.yml +153 -153
  14. package/languages/ja.yml +153 -153
  15. package/languages/zh-CN.yml +153 -153
  16. package/languages/zh-HK.yml +153 -153
  17. package/languages/zh-TW.yml +153 -153
  18. package/layout/_alternate/atom.ejs +30 -30
  19. package/layout/_alternate/json.ejs +16 -16
  20. package/layout/_alternate/rss.ejs +34 -34
  21. package/layout/_mixin/breadcrumb.pug +33 -33
  22. package/layout/_mixin/card.pug +38 -38
  23. package/layout/_mixin/comment.pug +6 -6
  24. package/layout/_mixin/postmeta.pug +29 -29
  25. package/layout/_mixin/segment.pug +35 -35
  26. package/layout/_mixin/sidebar.pug +40 -40
  27. package/layout/_mixin/widgets.pug +28 -28
  28. package/layout/_partials/footer.pug +43 -43
  29. package/layout/_partials/head/head.pug +55 -55
  30. package/layout/_partials/head/head_com.pug +24 -24
  31. package/layout/_partials/head/pwa.pug +18 -18
  32. package/layout/_partials/header.pug +18 -18
  33. package/layout/_partials/layout.pug +140 -140
  34. package/layout/_partials/loading.pug +13 -13
  35. package/layout/_partials/pagination.pug +4 -4
  36. package/layout/_partials/post/copyright.pug +20 -20
  37. package/layout/_partials/post/footer.pug +17 -17
  38. package/layout/_partials/post/nav.pug +13 -13
  39. package/layout/_partials/post/post.pug +41 -41
  40. package/layout/_partials/post/reward.pug +18 -18
  41. package/layout/_partials/sidebar/menu.pug +37 -37
  42. package/layout/_partials/sidebar/overview.pug +42 -42
  43. package/layout/_partials/third-party/baidu-analytics.pug +11 -11
  44. package/layout/_partials/third-party/clarity.pug +8 -8
  45. package/layout/_partials/third-party/google-analytics.pug +9 -9
  46. package/layout/archive.pug +118 -118
  47. package/layout/category.pug +59 -59
  48. package/layout/index.pug +33 -33
  49. package/layout/page.pug +55 -55
  50. package/layout/post.pug +36 -36
  51. package/layout/tag.pug +43 -43
  52. package/package.json +72 -72
  53. package/scripts/filters/locals.js +52 -0
  54. package/scripts/filters/post.js +5 -0
  55. package/scripts/generaters/archive.js +133 -0
  56. package/scripts/generaters/config.js +51 -0
  57. package/scripts/generaters/images.js +23 -0
  58. package/scripts/generaters/index.js +107 -0
  59. package/scripts/generaters/pages.js +15 -0
  60. package/scripts/generaters/script.js +156 -0
  61. package/scripts/helpers/asset.js +73 -0
  62. package/scripts/helpers/engine.js +177 -0
  63. package/scripts/helpers/list_categories.js +80 -0
  64. package/scripts/helpers/summary_ai.js +107 -0
  65. package/scripts/helpers/symbols_count_time.js +69 -0
  66. package/scripts/plugin/check.js +32 -0
  67. package/scripts/plugin/index.js +81 -0
  68. package/scripts/plugin/lib/injects-point.js +20 -0
  69. package/scripts/plugin/lib/injects.js +89 -0
  70. package/scripts/tags/links.js +44 -0
  71. package/scripts/tags/media.js +19 -0
  72. package/scripts/utils.js +13 -0
  73. package/source/assets/algolia_logo.svg +9 -9
  74. package/source/assets/logo.svg +16 -16
  75. package/source/css/_colors.styl +207 -207
  76. package/source/css/_common/components/components.styl +6 -6
  77. package/source/css/_common/components/highlight/highlight.styl +357 -357
  78. package/source/css/_common/components/highlight/operation.styl +21 -21
  79. package/source/css/_common/components/pages/collapse.styl +119 -119
  80. package/source/css/_common/components/pages/home.styl +391 -391
  81. package/source/css/_common/components/pages/pages.styl +56 -56
  82. package/source/css/_common/components/pages/tag-cloud.styl +12 -12
  83. package/source/css/_common/components/post/breadcrumb.styl +39 -39
  84. package/source/css/_common/components/post/copyright.styl +41 -41
  85. package/source/css/_common/components/post/expand.styl +263 -263
  86. package/source/css/_common/components/post/footer.styl +11 -11
  87. package/source/css/_common/components/post/header.styl +79 -79
  88. package/source/css/_common/components/post/nav.styl +64 -64
  89. package/source/css/_common/components/post/post.styl +29 -29
  90. package/source/css/_common/components/post/reward.styl +50 -50
  91. package/source/css/_common/components/post/rtl.styl +12 -12
  92. package/source/css/_common/components/post/tags.styl +39 -39
  93. package/source/css/_common/components/tags/collapse.styl +72 -72
  94. package/source/css/_common/components/tags/container.styl +49 -49
  95. package/source/css/_common/components/tags/label.styl +12 -12
  96. package/source/css/_common/components/tags/links.styl +77 -77
  97. package/source/css/_common/components/tags/list.styl +131 -131
  98. package/source/css/_common/components/tags/note.styl +70 -70
  99. package/source/css/_common/components/tags/player.styl +361 -361
  100. package/source/css/_common/components/tags/quiz.styl +200 -200
  101. package/source/css/_common/components/tags/tabs.styl +89 -89
  102. package/source/css/_common/components/tags/tags.styl +9 -9
  103. package/source/css/_common/components/third-party/loading.styl +222 -222
  104. package/source/css/_common/components/third-party/mermaid/class.styl +90 -90
  105. package/source/css/_common/components/third-party/mermaid/flowchart.styl +72 -72
  106. package/source/css/_common/components/third-party/mermaid/gantt.styl +251 -251
  107. package/source/css/_common/components/third-party/mermaid/git.styl +7 -7
  108. package/source/css/_common/components/third-party/mermaid/mermaid.styl +37 -37
  109. package/source/css/_common/components/third-party/mermaid/pie.styl +9 -9
  110. package/source/css/_common/components/third-party/mermaid/sequence.styl +95 -95
  111. package/source/css/_common/components/third-party/mermaid/state.styl +130 -130
  112. package/source/css/_common/components/third-party/pace.styl +18 -18
  113. package/source/css/_common/components/third-party/search.styl +167 -167
  114. package/source/css/_common/components/third-party/theme.styl +151 -151
  115. package/source/css/_common/components/third-party/third-party.styl +22 -22
  116. package/source/css/_common/components/third-party/widgets.styl +57 -57
  117. package/source/css/_common/outline/footer/footer.styl +67 -67
  118. package/source/css/_common/outline/header/brand.styl +77 -77
  119. package/source/css/_common/outline/header/header.styl +20 -20
  120. package/source/css/_common/outline/header/image.styl +85 -85
  121. package/source/css/_common/outline/header/menu.styl +117 -117
  122. package/source/css/_common/outline/header/nav.styl +81 -81
  123. package/source/css/_common/outline/header/right.styl +15 -15
  124. package/source/css/_common/outline/header/tool.styl +207 -207
  125. package/source/css/_common/outline/header/waves.styl +57 -57
  126. package/source/css/_common/outline/mobile.styl +46 -46
  127. package/source/css/_common/outline/outline.styl +78 -78
  128. package/source/css/_common/outline/sidebar/author.styl +59 -59
  129. package/source/css/_common/outline/sidebar/dimmer.styl +23 -23
  130. package/source/css/_common/outline/sidebar/menu.styl +63 -63
  131. package/source/css/_common/outline/sidebar/quick.styl +43 -43
  132. package/source/css/_common/outline/sidebar/related.styl +56 -56
  133. package/source/css/_common/outline/sidebar/sidebar.styl +80 -80
  134. package/source/css/_common/outline/sidebar/social.styl +69 -69
  135. package/source/css/_common/outline/sidebar/state.styl +37 -37
  136. package/source/css/_common/outline/sidebar/tab.styl +71 -71
  137. package/source/css/_common/outline/sidebar/toc.styl +47 -47
  138. package/source/css/_common/scaffolding/animate.styl +322 -322
  139. package/source/css/_common/scaffolding/base.styl +190 -190
  140. package/source/css/_common/scaffolding/buttons.styl +48 -48
  141. package/source/css/_common/scaffolding/divider.styl +36 -36
  142. package/source/css/_common/scaffolding/iconfont.styl +443 -443
  143. package/source/css/_common/scaffolding/normalize.styl +273 -273
  144. package/source/css/_common/scaffolding/pagination.styl +81 -81
  145. package/source/css/_common/scaffolding/ribbon.styl +38 -38
  146. package/source/css/_common/scaffolding/scaffolding.styl +14 -14
  147. package/source/css/_common/scaffolding/scrollbar.styl +37 -37
  148. package/source/css/_common/scaffolding/tables.styl +50 -50
  149. package/source/css/_common/scaffolding/tip.styl +19 -19
  150. package/source/css/_common/scaffolding/toggles.styl +59 -59
  151. package/source/css/_iconfont.styl +455 -455
  152. package/source/css/_mixins.styl +148 -148
  153. package/source/css/_variables.styl +89 -89
  154. package/source/css/app.styl +41 -41
  155. package/source/css/mermaid.styl +5 -5
  156. package/source/css/optimize.styl +5 -5
  157. package/source/js/_app/components/comments.ts +88 -88
  158. package/source/js/_app/components/sidebar.ts +239 -239
  159. package/source/js/_app/components/tcomments.ts +54 -54
  160. package/source/js/_app/globals/globalVars.ts +99 -99
  161. package/source/js/_app/globals/handles.ts +124 -124
  162. package/source/js/_app/globals/themeColor.ts +63 -63
  163. package/source/js/_app/globals/thirdparty.ts +63 -63
  164. package/source/js/_app/globals/tools.ts +75 -75
  165. package/source/js/_app/library/anime.ts +110 -110
  166. package/source/js/_app/library/declare.d.ts +128 -128
  167. package/source/js/_app/library/dom.ts +28 -28
  168. package/source/js/_app/library/loadFile.ts +47 -47
  169. package/source/js/_app/library/proto.ts +137 -137
  170. package/source/js/_app/library/scriptPjax.ts +72 -72
  171. package/source/js/_app/library/storage.ts +12 -12
  172. package/source/js/_app/library/vue.ts +49 -49
  173. package/source/js/_app/page/common.ts +43 -43
  174. package/source/js/_app/page/fancybox.ts +72 -72
  175. package/source/js/_app/page/post.ts +266 -266
  176. package/source/js/_app/page/search.ts +115 -115
  177. package/source/js/_app/page/tab.ts +60 -60
  178. package/source/js/_app/pjax/domInit.ts +97 -97
  179. package/source/js/_app/pjax/refresh.ts +140 -140
  180. package/source/js/_app/pjax/siteInit.ts +106 -106
  181. package/source/js/_app/player.ts +798 -798
  182. package/toolbox/compiler.mjs +10 -6
  183. package/toolbox/hoistdep.mjs +5 -5
  184. package/toolbox/lib.mjs +63 -63
  185. package/index.html +0 -231
  186. package/meta.json +0 -6431
@@ -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
+ }
@@ -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
+ }
@@ -1,43 +1,43 @@
1
- import { $dom } from '../library/dom'
2
-
3
- export const cardActive = () => {
4
- if (!document.querySelector('.index.wrap')) { return }
5
- const io = new IntersectionObserver((entries) => {
6
- entries.forEach((article) => {
7
- if (article.target.hasClass('show')) {
8
- io.unobserve(article.target)
9
- } else {
10
- if (article.isIntersecting || article.intersectionRatio > 0) {
11
- article.target.addClass('show')
12
- io.unobserve(article.target)
13
- }
14
- }
15
- })
16
- }, {
17
- root: null,
18
- threshold: [0.3]
19
- })
20
-
21
- $dom.each('.index.wrap article.item, .index.wrap section.item', (article) => {
22
- io.observe(article)
23
- })
24
-
25
- document.querySelector('.index.wrap .item:first-child').addClass('show')
26
-
27
- $dom.each('.cards .item', (element) => {
28
- ['mouseenter', 'touchstart'].forEach((item) => {
29
- element.addEventListener(item, () => {
30
- const cardEle = document.querySelector('.cards .item.active')
31
- if (cardEle) {
32
- cardEle.removeClass('active')
33
- }
34
- element.addClass('active')
35
- }, { passive: true })
36
- });
37
- ['mouseleave'].forEach((item) => {
38
- element.addEventListener(item, () => {
39
- element.removeClass('active')
40
- }, { passive: true })
41
- })
42
- })
43
- }
1
+ import { $dom } from '../library/dom'
2
+
3
+ export const cardActive = () => {
4
+ if (!document.querySelector('.index.wrap')) { return }
5
+ const io = new IntersectionObserver((entries) => {
6
+ entries.forEach((article) => {
7
+ if (article.target.hasClass('show')) {
8
+ io.unobserve(article.target)
9
+ } else {
10
+ if (article.isIntersecting || article.intersectionRatio > 0) {
11
+ article.target.addClass('show')
12
+ io.unobserve(article.target)
13
+ }
14
+ }
15
+ })
16
+ }, {
17
+ root: null,
18
+ threshold: [0.3]
19
+ })
20
+
21
+ $dom.each('.index.wrap article.item, .index.wrap section.item', (article) => {
22
+ io.observe(article)
23
+ })
24
+
25
+ document.querySelector('.index.wrap .item:first-child').addClass('show')
26
+
27
+ $dom.each('.cards .item', (element) => {
28
+ ['mouseenter', 'touchstart'].forEach((item) => {
29
+ element.addEventListener(item, () => {
30
+ const cardEle = document.querySelector('.cards .item.active')
31
+ if (cardEle) {
32
+ cardEle.removeClass('active')
33
+ }
34
+ element.addClass('active')
35
+ }, { passive: true })
36
+ });
37
+ ['mouseleave'].forEach((item) => {
38
+ element.addEventListener(item, () => {
39
+ element.removeClass('active')
40
+ }, { passive: true })
41
+ })
42
+ })
43
+ }
@@ -1,72 +1,72 @@
1
- import { $dom } from '../library/dom'
2
- import { vendorCss, vendorJs } from '../library/loadFile'
3
- import { insertAfter } from '../library/proto'
4
-
5
- // TODO 使用PhotoSwipe替换Fancybox
6
- export const postFancybox = (p:string) => {
7
- if (document.querySelector(p + ' .md img')) {
8
- vendorCss('fancybox')
9
- vendorCss('justifiedGallery')
10
- vendorJs('fancybox', () => {
11
- const q = jQuery.noConflict()
12
-
13
- $dom.each(p + ' p.gallery', (element) => {
14
- const box = document.createElement('div')
15
- box.className = 'gallery'
16
- box.setAttribute('data-height', String(element.getAttribute('data-height') || 220))
17
-
18
- box.innerHTML = element.innerHTML.replace(/<br>/g, '')
19
-
20
- element.parentNode.insertBefore(box, element)
21
- element.remove()
22
- })
23
-
24
- $dom.each(p + ' .md img:not(.emoji):not(.vemoji)', (element) => {
25
- const $image = q(element)
26
- const imageLink = $image.attr('data-src') || $image.attr('src') // 替换
27
- const $imageWrapLink = $image.wrap('<a class="fancybox" href="' + imageLink + '" itemscope itemtype="https://schema.org/ImageObject" itemprop="url"></a>').parent('a')
28
- let info; let captionClass = 'image-info'
29
- if (!$image.is('a img')) {
30
- $image.data('safe-src', imageLink)
31
- if (!$image.is('.gallery img')) {
32
- $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default')
33
- } else {
34
- captionClass = 'jg-caption'
35
- }
36
- }
37
- if ((info = element.getAttribute('title'))) {
38
- $imageWrapLink.attr('data-caption', info)
39
- const para = document.createElement('span')
40
- const txt = document.createTextNode(info)
41
- para.appendChild(txt)
42
- para.addClass(captionClass)
43
- insertAfter(element, para)
44
- }
45
- })
46
-
47
- $dom.each(p + ' div.gallery', (el, i) => {
48
- // @ts-ignore
49
- q(el).justifiedGallery({
50
- rowHeight: q(el).data('height') || 120,
51
- rel: 'gallery-' + i
52
- }).on('jg.complete', function () {
53
- q(this).find('a').each((k, ele) => {
54
- ele.setAttribute('data-fancybox', 'gallery-' + i)
55
- })
56
- })
57
- })
58
-
59
- q.fancybox.defaults.hash = false
60
- q(p + ' .fancybox').fancybox({
61
- loop: true,
62
- // @ts-ignore
63
- helpers: {
64
- overlay: {
65
- locked: false
66
- }
67
- }
68
- })
69
- // @ts-ignore
70
- }, window.jQuery)
71
- }
72
- }
1
+ import { $dom } from '../library/dom'
2
+ import { vendorCss, vendorJs } from '../library/loadFile'
3
+ import { insertAfter } from '../library/proto'
4
+
5
+ // TODO 使用PhotoSwipe替换Fancybox
6
+ export const postFancybox = (p:string) => {
7
+ if (document.querySelector(p + ' .md img')) {
8
+ vendorCss('fancybox')
9
+ vendorCss('justifiedGallery')
10
+ vendorJs('fancybox', () => {
11
+ const q = jQuery.noConflict()
12
+
13
+ $dom.each(p + ' p.gallery', (element) => {
14
+ const box = document.createElement('div')
15
+ box.className = 'gallery'
16
+ box.setAttribute('data-height', String(element.getAttribute('data-height') || 220))
17
+
18
+ box.innerHTML = element.innerHTML.replace(/<br>/g, '')
19
+
20
+ element.parentNode.insertBefore(box, element)
21
+ element.remove()
22
+ })
23
+
24
+ $dom.each(p + ' .md img:not(.emoji):not(.vemoji)', (element) => {
25
+ const $image = q(element)
26
+ const imageLink = $image.attr('data-src') || $image.attr('src') // 替换
27
+ const $imageWrapLink = $image.wrap('<a class="fancybox" href="' + imageLink + '" itemscope itemtype="https://schema.org/ImageObject" itemprop="url"></a>').parent('a')
28
+ let info; let captionClass = 'image-info'
29
+ if (!$image.is('a img')) {
30
+ $image.data('safe-src', imageLink)
31
+ if (!$image.is('.gallery img')) {
32
+ $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default')
33
+ } else {
34
+ captionClass = 'jg-caption'
35
+ }
36
+ }
37
+ if ((info = element.getAttribute('title'))) {
38
+ $imageWrapLink.attr('data-caption', info)
39
+ const para = document.createElement('span')
40
+ const txt = document.createTextNode(info)
41
+ para.appendChild(txt)
42
+ para.addClass(captionClass)
43
+ insertAfter(element, para)
44
+ }
45
+ })
46
+
47
+ $dom.each(p + ' div.gallery', (el, i) => {
48
+ // @ts-ignore
49
+ q(el).justifiedGallery({
50
+ rowHeight: q(el).data('height') || 120,
51
+ rel: 'gallery-' + i
52
+ }).on('jg.complete', function () {
53
+ q(this).find('a').each((k, ele) => {
54
+ ele.setAttribute('data-fancybox', 'gallery-' + i)
55
+ })
56
+ })
57
+ })
58
+
59
+ q.fancybox.defaults.hash = false
60
+ q(p + ' .fancybox').fancybox({
61
+ loop: true,
62
+ // @ts-ignore
63
+ helpers: {
64
+ overlay: {
65
+ locked: false
66
+ }
67
+ }
68
+ })
69
+ // @ts-ignore
70
+ }, window.jQuery)
71
+ }
72
+ }