hexo-theme-shokax 0.4.25 → 0.5.0-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 (68) hide show
  1. package/README.md +19 -31
  2. package/UsageRestrictions.md +2 -2
  3. package/_config.yml +11 -25
  4. package/_images.yml +0 -7
  5. package/eslint.config.mjs +4 -5
  6. package/layout/_mixin/card.pug +1 -2
  7. package/layout/_mixin/comment.pug +0 -1
  8. package/layout/_mixin/segment.pug +1 -1
  9. package/layout/_partials/footer.pug +1 -4
  10. package/layout/_partials/head/head.pug +0 -8
  11. package/layout/_partials/head/pwa.pug +1 -1
  12. package/layout/_partials/header.pug +0 -1
  13. package/layout/_partials/layout.pug +4 -14
  14. package/layout/_partials/post/footer.pug +0 -2
  15. package/layout/_partials/post/post.pug +1 -2
  16. package/layout/_partials/post/reward.pug +1 -1
  17. package/layout/_partials/sidebar/overview.pug +0 -2
  18. package/layout/_partials/third-party/baidu-analytics.pug +1 -1
  19. package/layout/_partials/third-party/google-analytics.pug +1 -1
  20. package/layout/archive.pug +3 -0
  21. package/layout/category.pug +3 -0
  22. package/layout/index.pug +3 -0
  23. package/layout/page.pug +7 -0
  24. package/layout/post.pug +8 -0
  25. package/layout/tag.pug +3 -0
  26. package/package.json +9 -10
  27. package/scripts/filters/post.js +1 -1
  28. package/scripts/generaters/config.js +12 -7
  29. package/scripts/generaters/images.js +9 -8
  30. package/scripts/generaters/index.js +57 -44
  31. package/scripts/generaters/script.js +18 -33
  32. package/scripts/helpers/engine.js +2 -7
  33. package/scripts/plugin/index.js +32 -69
  34. package/scripts/tags/media.js +1 -1
  35. package/source/css/app.styl +0 -13
  36. package/source/css/page.styl +3 -0
  37. package/source/css/post.styl +5 -0
  38. package/source/css/scaffolding.styl +5 -0
  39. package/source/js/_app/components/comments.ts +2 -3
  40. package/source/js/_app/components/sidebar.ts +35 -35
  41. package/source/js/_app/components/tcomments.ts +0 -1
  42. package/source/js/_app/globals/globalVars.ts +0 -15
  43. package/source/js/_app/globals/handles.ts +9 -9
  44. package/source/js/_app/globals/themeColor.ts +5 -6
  45. package/source/js/_app/globals/thirdparty.ts +2 -2
  46. package/source/js/_app/globals/tools.ts +4 -6
  47. package/source/js/_app/library/anime.ts +30 -19
  48. package/source/js/_app/library/declare.d.ts +0 -5
  49. package/source/js/_app/library/proto.ts +0 -67
  50. package/source/js/_app/library/vue.ts +7 -7
  51. package/source/js/_app/page/common.ts +8 -10
  52. package/source/js/_app/page/fancybox.ts +6 -8
  53. package/source/js/_app/page/post.ts +42 -54
  54. package/source/js/_app/page/search.ts +1 -6
  55. package/source/js/_app/page/tab.ts +8 -9
  56. package/source/js/_app/pjax/domInit.ts +19 -14
  57. package/source/js/_app/pjax/refresh.ts +8 -36
  58. package/source/js/_app/pjax/siteInit.ts +13 -42
  59. package/source/js/_app/player.ts +14 -798
  60. package/toolbox/compiler.mjs +20 -48
  61. package/toolbox/dev-version.mjs +14 -0
  62. package/README_en.MD +0 -71
  63. package/scripts/plugin/lib/injects-point.js +0 -41
  64. package/scripts/plugin/lib/injects.js +0 -105
  65. package/source/js/_app/library/dom.ts +0 -28
  66. package/source/js/_app/library/loadFile.ts +0 -47
  67. package/source/js/_app/library/scriptPjax.ts +0 -56
  68. package/source/js/_app/library/storage.ts +0 -12
@@ -1,11 +1,10 @@
1
1
  import { pageScroll } from '../library/anime'
2
- import { $dom } from '../library/dom'
3
2
  import { createChild } from '../library/proto'
4
3
 
5
4
  export const tabFormat = () => {
6
5
  // tab
7
6
  let first_tab:boolean
8
- $dom.each('div.tab', (element) => {
7
+ document.querySelectorAll('div.tab').forEach((element) => {
9
8
  if (element.getAttribute('data-ready')) { return }
10
9
 
11
10
  const id = element.getAttribute('data-id')
@@ -41,17 +40,17 @@ export const tabFormat = () => {
41
40
  })
42
41
 
43
42
  if (first_tab) {
44
- li.addClass('active')
45
- element.addClass('active')
43
+ li.classList.add('active')
44
+ element.classList.add('active')
46
45
  }
47
46
 
48
47
  li.addEventListener('click', (event) => {
49
- const target = event.currentTarget
50
- box.find('.active').forEach((el) => {
51
- el.removeClass('active')
48
+ const target = event.currentTarget as HTMLElement
49
+ box.querySelectorAll('.active').forEach((el) => {
50
+ el.classList.remove('active')
52
51
  })
53
- element.addClass('active')
54
- target.addClass('active')
52
+ element.classList.add('active')
53
+ target.classList.add('active')
55
54
  })
56
55
 
57
56
  box.appendChild(element)
@@ -5,20 +5,17 @@ import {
5
5
  loadCat,
6
6
  menuToggle,
7
7
  quickBtn, setBackToTop, setGoToComment, setShowContents, setToolBtn,
8
- setToolPlayer,
9
8
  showContents,
10
9
  siteHeader,
11
10
  siteNav,
12
- toolBtn,
13
- toolPlayer
11
+ toolBtn
14
12
  } from '../globals/globalVars'
15
13
  import { Loader } from '../globals/thirdparty'
16
- import { $dom } from '../library/dom'
17
- import { mediaPlayer } from '../player'
18
14
  import { createChild } from '../library/proto'
15
+ import { initAudioPlayer } from '../player'
19
16
 
20
- export default function domInit () {
21
- $dom.each('.overview .menu > .item', (el) => {
17
+ export default async function domInit () {
18
+ document.querySelectorAll('.overview .menu > .item').forEach((el) => {
22
19
  siteNav.querySelector('.menu').appendChild(el.cloneNode(true))
23
20
  })
24
21
 
@@ -32,11 +29,22 @@ export default function domInit () {
32
29
  if (!toolBtn) {
33
30
  setToolBtn(createChild(siteHeader, 'div', {
34
31
  id: 'tool',
35
- innerHTML: '<div class="item player"></div><div class="item contents"><i class="ic i-list-ol"></i></div><div class="item chat"><i class="ic i-comments"></i></div><div class="item back-to-top"><i class="ic i-arrow-up"></i><span>0%</span></div>'
32
+ innerHTML: `<div class="item player">
33
+ ${__shokax_player__ ? '<div class="play-pause btn" id="playBtn"></div><div class="music btn btn" id="showBtn"></div>' : ''}
34
+ </div>
35
+ <div class="item contents">
36
+ <i class="ic i-list-ol"></i>
37
+ </div>
38
+ <div class="item chat">
39
+ <i class="ic i-comments"></i>
40
+ </div>
41
+ <div class="item back-to-top">
42
+ <i class="ic i-arrow-up"></i>
43
+ <span>0%</span>
44
+ </div>`
36
45
  }))
37
46
  }
38
47
 
39
- setToolPlayer(toolBtn.querySelector('.player'))
40
48
  setBackToTop(toolBtn.querySelector('.back-to-top'))
41
49
  setGoToComment(toolBtn.querySelector('.chat'))
42
50
  setShowContents(toolBtn.querySelector('.contents'))
@@ -46,12 +54,9 @@ export default function domInit () {
46
54
  showContents.addEventListener('click', sideBarToggleHandle)
47
55
 
48
56
  if (__shokax_player__) {
49
- mediaPlayer(toolPlayer)
50
-
51
- document.querySelector('main').addEventListener('click', () => {
52
- toolPlayer.player.mini()
53
- })
57
+ await initAudioPlayer()
54
58
  }
59
+
55
60
 
56
61
  const createIntersectionObserver = () => {
57
62
  // waves在视口外时停止动画
@@ -1,37 +1,13 @@
1
- import { $dom } from '../library/dom'
2
1
  import { cardActive } from '../page/common'
3
- import { pageScroll, transition } from '../library/anime'
4
- import { vendorCss, vendorJs } from '../library/loadFile'
5
- import { pjaxScript } from '../library/scriptPjax'
6
2
  import { resizeHandle } from '../globals/handles'
7
3
  import {
8
4
  CONFIG,
9
- loadCat,
10
- menuToggle,
11
5
  setLocalHash, setLocalUrl, setOriginTitle,
12
- sideBar,
13
- toolPlayer
14
6
  } from '../globals/globalVars'
15
- import { pagePosition, positionInit } from '../globals/tools'
7
+ import { positionInit } from '../globals/tools'
16
8
  import { menuActive, sideBarTab, sidebarTOC } from '../components/sidebar'
17
9
  import { Loader, isOutime } from '../globals/thirdparty'
18
10
  import { tabFormat } from '../page/tab'
19
- import { lazyLoad } from 'unlazy'
20
-
21
- export const pjaxReload = () => {
22
- pagePosition()
23
-
24
- if (sideBar.hasClass('on')) {
25
- transition(sideBar, 0, () => {
26
- sideBar.removeClass('on')
27
- menuToggle.removeClass('close')
28
- }) // 'transition.slideRightOut'
29
- }
30
- const mainNode = document.getElementById('main')
31
- mainNode.innerHTML = ''
32
- mainNode.appendChild(loadCat.lastChild.cloneNode(true))
33
- pageScroll(0)
34
- }
35
11
 
36
12
  export const siteRefresh = async (reload) => {
37
13
  if (__shokax_antiFakeWebsite__) {
@@ -45,9 +21,9 @@ export const siteRefresh = async (reload) => {
45
21
  setLocalHash(0)
46
22
  setLocalUrl(window.location.href)
47
23
 
48
- vendorCss('katex');
24
+ // @ts-ignore
25
+ // await import('katex/dist/katex.min.css')
49
26
  await import('katex/dist/contrib/copy-tex.mjs')
50
- vendorCss('mermaid')
51
27
 
52
28
  // 懒加载背景图
53
29
  const lazyBg = new IntersectionObserver(function (entries, observer) {
@@ -67,10 +43,6 @@ export const siteRefresh = async (reload) => {
67
43
  lazyBg.observe(el)
68
44
  })
69
45
 
70
- if (reload !== 1) {
71
- $dom.each('script[data-pjax]', pjaxScript)
72
- }
73
-
74
46
  setOriginTitle(document.title)
75
47
 
76
48
  resizeHandle()
@@ -111,8 +83,6 @@ export const siteRefresh = async (reload) => {
111
83
  comment.observe(cpel)
112
84
  }
113
85
 
114
- lazyLoad()
115
-
116
86
  if (__shokax_waline__) {
117
87
  import('../components/comments').then(async ({walineRecentComments}) => {
118
88
  await walineRecentComments()
@@ -129,10 +99,12 @@ export const siteRefresh = async (reload) => {
129
99
  tabFormat()
130
100
  }
131
101
 
132
- if (__shokax_player__) {
133
- toolPlayer.player.load(LOCAL.audio || CONFIG.audio || {})
102
+ if (sessionStorage.getItem('loaded') === 'true') {
103
+ Loader.hide(30)
104
+ } else {
105
+ sessionStorage.setItem('loaded', 'true')
106
+ Loader.hide(500)
134
107
  }
135
- Loader.hide(100)
136
108
 
137
109
  setTimeout(() => {
138
110
  positionInit()
@@ -1,37 +1,18 @@
1
1
  import domInit from './domInit'
2
- import { pjaxReload, siteRefresh } from './refresh'
3
- import { cloudflareInit } from '../components/cloudflare'
4
- import { BODY, CONFIG, pjax, setPjax, setSiteSearch, siteSearch } from '../globals/globalVars'
5
- import { autoDarkmode, themeColorListener } from '../globals/themeColor'
6
- import { resizeHandle, scrollHandle, visibilityListener } from '../globals/handles'
7
- import { pagePosition } from '../globals/tools'
8
- import Pjax from 'theme-shokax-pjax'
9
- import { initVue } from '../library/vue'
10
- import { $dom } from '../library/dom'
11
- import { createChild } from '../library/proto'
12
- import { transition } from '../library/anime'
2
+ import {siteRefresh} from './refresh'
3
+ import {cloudflareInit} from '../components/cloudflare'
4
+ import {BODY, CONFIG, setSiteSearch, siteSearch} from '../globals/globalVars'
5
+ import {autoDarkmode, themeColorListener} from '../globals/themeColor'
6
+ import {resizeHandle, scrollHandle, visibilityListener} from '../globals/handles'
7
+ import {pagePosition} from '../globals/tools'
8
+ import {initVue} from '../library/vue'
9
+ import {createChild} from '../library/proto'
10
+ import {transition} from '../library/anime'
13
11
 
14
12
  const siteInit = async () => {
15
13
  initVue()
16
14
  domInit()
17
15
 
18
- setPjax(new Pjax({
19
- selectors: [
20
- 'head title',
21
- '.languages',
22
- '.twikoo',
23
- '.pjax',
24
- '.leancloud-recent-comment',
25
- 'script[data-config]'
26
- ],
27
- cacheBust: false
28
- }))
29
-
30
- CONFIG.quicklink.ignores = LOCAL.ignores
31
- import('quicklink').then(({listen}) => {
32
- listen(CONFIG.quicklink)
33
- })
34
-
35
16
  autoDarkmode()
36
17
 
37
18
  if (__shokax_VL__) {
@@ -53,19 +34,16 @@ const siteInit = async () => {
53
34
  }
54
35
 
55
36
  import('../page/search').then(({algoliaSearch}) => {
56
- algoliaSearch(pjax)
37
+ algoliaSearch()
57
38
  })
58
39
 
59
40
  // Handle and trigger popup window
60
- // TODO search 只有一个,不需要 each
61
- $dom.each('.search', (element) => {
62
- element.addEventListener('click', () => {
41
+ document.querySelector('.search').addEventListener('click', () => {
63
42
  document.body.style.overflow = 'hidden'
64
43
  transition(siteSearch, 'shrinkIn', () => {
65
44
  (document.querySelector('.search-input') as HTMLInputElement).focus()
66
45
  }) // transition.shrinkIn
67
46
  })
68
- })
69
47
  }, {once: true, capture: true})
70
48
  }
71
49
 
@@ -83,18 +61,11 @@ const siteInit = async () => {
83
61
  passive: true
84
62
  })
85
63
 
86
- window.addEventListener('pjax:send', pjaxReload, {
87
- passive: true
88
- })
89
-
90
- window.addEventListener('pjax:success', siteRefresh, {
91
- passive: true
92
- }) // 默认会传入一个event参数
93
-
94
- window.addEventListener('beforeunload', () => {
64
+ window.addEventListener('visibilitychange', () => {
95
65
  pagePosition()
96
66
  })
97
67
  await siteRefresh(1)
68
+ // TODO 修复内页跳转后重复出现加载动画的问题
98
69
  }
99
70
 
100
71
  cloudflareInit()