hexo-theme-shokax 0.5.0-dev-815e373 → 0.5.0-dev-31f9f21

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -9,6 +9,7 @@
9
9
  - 引入新的 Inject 类技术 (长期)
10
10
  - 引入新的工作流程
11
11
  - 引入 CI 自动测试
12
+ - 重构 player (暂时移除)
12
13
  - 优化 menu 配置格式
13
14
  - 优化和异步化 Smart Bundle 技术
14
15
  - 优化 CSS 结构和加载
package/_config.yml CHANGED
@@ -374,7 +374,6 @@ vendors:
374
374
  source: cdnjs
375
375
  url: jquery/3.5.1/jquery.min.js
376
376
  sri: "sha384-ZvpUoO/+PpLXR1lu4jmpXWu80pZlYUAfxl5NsBMWOEPSjUn/6Z/hRTt8+pR6L4N2"
377
- async_js:
378
377
  fancybox:
379
378
  source: cdnjs
380
379
  url: fancybox/3.5.7/jquery.fancybox.min.js
@@ -383,6 +382,7 @@ vendors:
383
382
  source: cdnjs
384
383
  url: justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js
385
384
  sri: "sha384-TOxsBplaL96/QDWPIUg+ye3v89qSE3s22XNtJMmCeZEep3cVDmXy1zEfZvVv+y2m"
385
+ async_js:
386
386
  copy_tex:
387
387
  source: cdnjs
388
388
  url: KaTeX/0.16.9/contrib/copy-tex.min.js
package/_images.yml CHANGED
@@ -1,9 +1,2 @@
1
1
  # 此images已失效,见https://github.com/theme-shoka-x/hexo-theme-shokaX/issues/6
2
- - 6833939bly1giciryrr3rj20zk0m8nhk.jpg
3
- - 6833939bly1gicis081o9j20zk0m8dmr.jpg
4
- - 6833939bly1gicis3attqj20zk0m8k7l.jpg
5
- - 6833939bly1giciszlczyj20zk0m816d.jpg
6
- - 6833939bly1gicit31ffoj20zk0m8naf.jpg
7
- - 6833939bly1gicit4jrvuj20zk0m8785.jpg
8
- - 6833939bly1gicitcxhpij20zk0m8hdt.jpg
9
2
 
@@ -45,6 +45,11 @@ if fontConfig
45
45
  != preloadjs()
46
46
  != load_async_css()
47
47
 
48
+ // 临时处理
49
+ link(rel="stylesheet" media="none" onload="this.media='all'" href="https://s4.zstatic.net/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css")
50
+ link(rel="stylesheet" media="none" onload="this.media='all'" href="https://s4.zstatic.net/ajax/libs/justifiedGallery/3.8.1/css/justifiedGallery.min.css")
51
+ //link(rel="stylesheet" media="none" onload="this.media='all'" href="https://s4.zstatic.net/ajax/libs/KaTeX/0.16.9/katex.min.css")
52
+ != _css('mermaid.css')
48
53
  if theme.experiments.cloudflarePatch
49
54
  != _js('cf-patch.js')
50
55
 
@@ -2,7 +2,7 @@
2
2
  - var timeNow = new Date().getTime()
3
3
  if theme.pwa.enable
4
4
  - var sworker = theme.pwa.serviceworker
5
- script(data-pjax async).
5
+ script(async).
6
6
  if ('serviceWorker' in navigator) {
7
7
  navigator.serviceWorker.register("/#{sworker}?time=#{timeNow}").then(async (reg) => {
8
8
  if (window.localStorage.getItem('install') !== 'true') {
@@ -134,6 +134,8 @@ html(lang=page.language?page.language:config.language, style=theme.grayMode ? 'f
134
134
 
135
135
  != vendor_js('pace')
136
136
  != vendor_js('jquery')
137
+ != vendor_js('justifiedGallery')
138
+ != vendor_js('fancybox')
137
139
 
138
140
  if theme.polyfill.enable
139
141
  script(src=`https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=4.8.0&features=${theme.polyfill.features}` defer)
@@ -1,6 +1,6 @@
1
1
  - var hmSrc = `https://hm.baidu.com/hm.js?${ theme.visitor.baiduAnalytics }`
2
2
  if theme.visitor.baiduAnalytics
3
- script(data-pjax=true).
3
+ script.
4
4
  var _hmt = _hmt || [];
5
5
  (function () {
6
6
  const hm = document.createElement("script");
@@ -1,7 +1,7 @@
1
1
  - var googleId = theme.visitor.googleAnalytics
2
2
  if googleId
3
3
  script(async, src=`https://www.googletagmanager.com/gtag/js?id=${ googleId }`)
4
- script(data-pjax=true).
4
+ script.
5
5
  window.dataLayer = window.dataLayer || [];
6
6
  function gtag() {
7
7
  dataLayer.push(arguments);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-shokax",
3
- "version": "0.5.0-dev-815e373",
3
+ "version": "0.5.0-dev-31f9f21",
4
4
  "description": "a hexo theme based on shoka",
5
5
  "main": "index.js",
6
6
  "repository": "https://github.com/theme-shoka-x/hexo-theme-shokaX",
@@ -13,23 +13,23 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  "@types/fancybox": "^3.5.7",
16
- "@types/jquery": "^3.5.30",
16
+ "@types/jquery": "^3.5.32",
17
17
  "@types/js-yaml": "^4.0.9",
18
18
  "@types/katex": "^0.16.7",
19
- "@types/node": "^22.5.5",
19
+ "@types/node": "^22.8.6",
20
20
  "@types/quicklink": "^2.3.4",
21
- "@typescript-eslint/eslint-plugin": "^8.6.0",
22
- "@typescript-eslint/parser": "^8.6.0",
23
- "eslint": "^9.11.0",
21
+ "@typescript-eslint/eslint-plugin": "^8.12.2",
22
+ "@typescript-eslint/parser": "^8.12.2",
23
+ "eslint": "^9.13.0",
24
24
  "eslint-config-standard": "~17",
25
- "eslint-plugin-vue": "^9.28.0",
25
+ "eslint-plugin-vue": "^9.30.0",
26
26
  "glob": "^11.0.0",
27
- "typescript": "^5.6.2"
27
+ "typescript": "^5.6.3"
28
28
  },
29
29
  "dependencies": {
30
- "@algolia/client-search": "^5.5.3",
30
+ "@algolia/client-search": "^5.12.0",
31
31
  "@waline/client": "^3.3.2",
32
- "algoliasearch": "5.10.2",
32
+ "algoliasearch": "5.12.0",
33
33
  "esbuild": "^0.24.0",
34
34
  "hexo": "^7.3.0",
35
35
  "hexo-algoliasearch": "^2.0.1",
@@ -38,18 +38,17 @@
38
38
  "hexo-pagination": "^4.0.0",
39
39
  "hexo-renderer-pug": "^3.0.0",
40
40
  "hexo-util": "^3.3.0",
41
- "instantsearch.js": "^4.74.1",
41
+ "instantsearch.js": "^4.75.3",
42
42
  "js-yaml": "^4.1.0",
43
43
  "katex": "^0.16.11",
44
44
  "mouse-firework": "^0.0.6",
45
45
  "quicklink": "^2.3.0",
46
46
  "theme-shokax-anime": "^0.0.7",
47
- "theme-shokax-pjax": "^0.0.3",
48
47
  "twikoo": "^1.6.39",
49
48
  "unlazy": "^0.11.3"
50
49
  },
51
50
  "engines": {
52
- "node": ">=18.0.0"
51
+ "node": ">=20.0.0"
53
52
  },
54
53
  "engineStrict": true,
55
54
  "pnpm": {
@@ -1,6 +1,8 @@
1
1
  import { CONFIG } from '../globals/globalVars'
2
2
  import { init, RecentComments } from '@waline/client'
3
+ // @ts-ignore
3
4
  import { pageviewCount } from '@waline/client/pageview'
5
+ // @ts-ignore
4
6
  await import('@waline/client/style')
5
7
 
6
8
  export const walineComment = function () {
@@ -74,7 +76,6 @@ export const walineRecentComments = async function () {
74
76
  commentTime.className = 'breadcrumb'
75
77
  commentTime.innerText = `${item.nick} @ ${item.time}`
76
78
  commentLink.href = root + item.href
77
- commentLink['data-pjax-state'] = 'data-pjax-state'
78
79
  commentEl.className = 'item'
79
80
 
80
81
  commentText.appendChild(document.createElement('br'))
@@ -40,7 +40,6 @@ export const twikooRecentComments = async function () {
40
40
  commentTime.className = 'breadcrumb'
41
41
  commentTime.innerText = `${item.nick} @ ${item.time}`
42
42
  commentLink.href = root + item.href
43
- commentLink['data-pjax-state'] = 'data-pjax-state'
44
43
  commentEl.className = 'item'
45
44
 
46
45
  commentText.appendChild(document.createElement('br'))
@@ -1,5 +1,3 @@
1
- import { $dom } from '../library/dom'
2
- import Pjax from 'theme-shokax-pjax'
3
1
  import initProto from '../library/proto'
4
2
 
5
3
  export const CONFIG = shokax_CONFIG
@@ -29,7 +27,6 @@ export let oWinHeight = window.innerHeight
29
27
  export let oWinWidth = window.innerWidth
30
28
  export let LOCAL_HASH = 0
31
29
  export let LOCAL_URL = window.location.href
32
- export let pjax:Pjax
33
30
 
34
31
  export function setSiteNavHeight (value:number):void {
35
32
  siteNavHeight = value
@@ -66,10 +63,6 @@ export function setLocalUrl (value:string):void {
66
63
  LOCAL_URL = value
67
64
  }
68
65
 
69
- export function setPjax (value:Pjax):void {
70
- pjax = value
71
- }
72
-
73
66
  export function setOriginTitle (value:string):void {
74
67
  originTitle = value
75
68
  }
@@ -1,76 +1,66 @@
1
1
  import { $dom } from '../library/dom'
2
- import { vendorCss, vendorJs } from '../library/loadFile'
3
2
  import { insertAfter } from '../library/proto'
4
3
 
5
4
  // TODO 使用PhotoSwipe替换Fancybox
6
5
  export const postFancybox = (p:string) => {
7
6
  if (document.querySelector(p + ' .md img')) {
8
- vendorCss('fancybox')
9
- vendorCss('justifiedGallery')
10
- vendorJs('jquery', ()=>{
11
- vendorJs('justifiedGallery',()=>{
12
- vendorJs('fancybox', () => {
13
- const q = jQuery.noConflict()
7
+ const q = jQuery.noConflict()
14
8
 
15
- $dom.each(p + ' p.gallery', (element) => {
16
- const box = document.createElement('div')
17
- box.className = 'gallery'
18
- box.setAttribute('data-height', String(element.getAttribute('data-height') || 220))
9
+ $dom.each(p + ' p.gallery', (element) => {
10
+ const box = document.createElement('div')
11
+ box.className = 'gallery'
12
+ box.setAttribute('data-height', String(element.getAttribute('data-height') || 220))
19
13
 
20
- box.innerHTML = element.innerHTML.replace(/<br>/g, '')
14
+ box.innerHTML = element.innerHTML.replace(/<br>/g, '')
21
15
 
22
- element.parentNode.insertBefore(box, element)
23
- element.remove()
24
- })
25
-
26
- $dom.each(p + ' .md img:not(.emoji):not(.vemoji)', (element) => {
27
- const $image = q(element)
28
- const imageLink = $image.attr('data-src') || $image.attr('src') // 替换
29
- const $imageWrapLink = $image.wrap('<a class="fancybox" href="' + imageLink + '" itemscope itemtype="https://schema.org/ImageObject" itemprop="url"></a>').parent('a')
30
- let info; let captionClass = 'image-info'
31
- if (!$image.is('a img')) {
32
- $image.data('safe-src', imageLink)
33
- if (!$image.is('.gallery img')) {
34
- $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default')
35
- } else {
36
- captionClass = 'jg-caption'
37
- }
38
- }
39
- if ((info = element.getAttribute('title'))) {
40
- $imageWrapLink.attr('data-caption', info)
41
- const para = document.createElement('span')
42
- const txt = document.createTextNode(info)
43
- para.appendChild(txt)
44
- para.addClass(captionClass)
45
- insertAfter(element, para)
46
- }
47
- })
16
+ element.parentNode.insertBefore(box, element)
17
+ element.remove()
18
+ })
48
19
 
49
- $dom.each(p + ' div.gallery', (el, i) => {
50
- // @ts-ignore
51
- q(el).justifiedGallery({
52
- rowHeight: q(el).data('height') || 120,
53
- rel: 'gallery-' + i
54
- }).on('jg.complete', function () {
55
- q(this).find('a').each((k, ele) => {
56
- ele.setAttribute('data-fancybox', 'gallery-' + i)
57
- })
58
- })
59
- })
20
+ $dom.each(p + ' .md img:not(.emoji):not(.vemoji)', (element) => {
21
+ const $image = q(element)
22
+ const imageLink = $image.attr('data-src') || $image.attr('src') // 替换
23
+ const $imageWrapLink = $image.wrap('<a class="fancybox" href="' + imageLink + '" itemscope itemtype="https://schema.org/ImageObject" itemprop="url"></a>').parent('a')
24
+ let info; let captionClass = 'image-info'
25
+ if (!$image.is('a img')) {
26
+ $image.data('safe-src', imageLink)
27
+ if (!$image.is('.gallery img')) {
28
+ $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default')
29
+ } else {
30
+ captionClass = 'jg-caption'
31
+ }
32
+ }
33
+ if ((info = element.getAttribute('title'))) {
34
+ $imageWrapLink.attr('data-caption', info)
35
+ const para = document.createElement('span')
36
+ const txt = document.createTextNode(info)
37
+ para.appendChild(txt)
38
+ para.addClass(captionClass)
39
+ insertAfter(element, para)
40
+ }
41
+ })
60
42
 
61
- q.fancybox.defaults.hash = false
62
- q(p + ' .fancybox').fancybox({
63
- loop: true,
64
- // @ts-ignore
65
- helpers: {
66
- overlay: {
67
- locked: false
68
- }
69
- }
70
- })
71
- // @ts-ignore
72
- }, window.jQuery)
43
+ $dom.each(p + ' div.gallery', (el, i) => {
44
+ // @ts-ignore
45
+ q(el).justifiedGallery({
46
+ rowHeight: q(el).data('height') || 120,
47
+ rel: 'gallery-' + i
48
+ }).on('jg.complete', function () {
49
+ q(this).find('a').each((k, ele) => {
50
+ ele.setAttribute('data-fancybox', 'gallery-' + i)
51
+ })
73
52
  })
74
53
  })
54
+
55
+ q.fancybox.defaults.hash = false
56
+ q(p + ' .fancybox').fancybox({
57
+ loop: true,
58
+ // @ts-ignore
59
+ helpers: {
60
+ overlay: {
61
+ locked: false
62
+ }
63
+ }
64
+ })
75
65
  }
76
66
  }
@@ -231,15 +231,15 @@ export const postBeauty = () => {
231
231
  element.className = ['primary', 'success', 'info', 'warning', 'danger'][Math.floor(Math.random() * 5)]
232
232
  })
233
233
 
234
- if (__shokax_player__) {
235
- $dom.each('.md div.player', (element) => {
236
- mediaPlayer(element, {
237
- type: element.getAttribute('data-type'),
238
- mode: 'order',
239
- btns: []
240
- }).player.load(JSON.parse(element.getAttribute('data-src'))).fetch()
241
- })
242
- }
234
+ // if (__shokax_player__) {
235
+ // $dom.each('.md div.player', (element) => {
236
+ // mediaPlayer(element, {
237
+ // type: element.getAttribute('data-type'),
238
+ // mode: 'order',
239
+ // btns: []
240
+ // }).player.load(JSON.parse(element.getAttribute('data-src'))).fetch()
241
+ // })
242
+ // }
243
243
 
244
244
  const angleDown = document.querySelectorAll('.show-btn .i-angle-down')
245
245
  if (angleDown.length) {
@@ -5,7 +5,7 @@ import type { HitHighlightResult } from 'instantsearch.js/es/types/results'
5
5
  import instantsearch from 'instantsearch.js'
6
6
  import { liteClient as algoliasearch } from 'algoliasearch/lite'
7
7
 
8
- export function algoliaSearch (pjax) {
8
+ export function algoliaSearch () {
9
9
  const search = instantsearch({
10
10
  indexName: CONFIG.search.indexName,
11
11
  searchClient: algoliasearch(CONFIG.search.appID, CONFIG.search.apiKey),
@@ -18,10 +18,6 @@ export function algoliaSearch (pjax) {
18
18
  }
19
19
  })
20
20
 
21
- search.on('render', () => {
22
- pjax.refresh(document.getElementById("search-hits"))
23
- })
24
-
25
21
  // Registering Widgets
26
22
  search.addWidgets([
27
23
  configure({
@@ -105,7 +101,7 @@ export function algoliaSearch (pjax) {
105
101
  }
106
102
  })
107
103
  document.querySelector('.close-btn').addEventListener('click', onPopupClose)
108
- window.addEventListener('pjax:success', onPopupClose)
104
+ // window.addEventListener('pjax:success', onPopupClose)
109
105
  window.addEventListener('keyup', (event) => {
110
106
  if (event.key === 'Escape') {
111
107
  onPopupClose()
@@ -45,13 +45,13 @@ export default function domInit () {
45
45
  goToComment.addEventListener('click', goToCommentHandle)
46
46
  showContents.addEventListener('click', sideBarToggleHandle)
47
47
 
48
- if (__shokax_player__) {
49
- mediaPlayer(toolPlayer)
50
-
51
- document.querySelector('main').addEventListener('click', () => {
52
- toolPlayer.player.mini()
53
- })
54
- }
48
+ // if (__shokax_player__) {
49
+ // mediaPlayer(toolPlayer)
50
+ //
51
+ // document.querySelector('main').addEventListener('click', () => {
52
+ // toolPlayer.player.mini()
53
+ // })
54
+ // }
55
55
 
56
56
  const createIntersectionObserver = () => {
57
57
  // waves在视口外时停止动画
@@ -1,47 +1,23 @@
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
6
  toolPlayer
14
7
  } from '../globals/globalVars'
15
- import { pagePosition, positionInit } from '../globals/tools'
8
+ import { positionInit } from '../globals/tools'
16
9
  import { menuActive, sideBarTab, sidebarTOC } from '../components/sidebar'
17
10
  import { Loader, isOutime } from '../globals/thirdparty'
18
11
  import { tabFormat } from '../page/tab'
19
12
  import { lazyLoad } from 'unlazy'
20
13
 
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
-
36
14
  export const siteRefresh = async (reload) => {
37
15
  setLocalHash(0)
38
16
  setLocalUrl(window.location.href)
39
17
 
40
- vendorCss('katex');
41
- // await import('katex/dist/katex.min.css')
42
- // vendorJs('copy_tex')
18
+ // @ts-ignore
19
+ await import('katex/dist/katex.min.css')
43
20
  await import('katex/dist/contrib/copy-tex.mjs')
44
- vendorCss('mermaid')
45
21
 
46
22
  // 懒加载背景图
47
23
  const lazyBg = new IntersectionObserver(function (entries, observer) {
@@ -61,10 +37,6 @@ export const siteRefresh = async (reload) => {
61
37
  lazyBg.observe(el)
62
38
  })
63
39
 
64
- if (reload !== 1) {
65
- $dom.each('script[data-pjax]', pjaxScript)
66
- }
67
-
68
40
  setOriginTitle(document.title)
69
41
 
70
42
  resizeHandle()
@@ -1,11 +1,10 @@
1
1
  import domInit from './domInit'
2
- import { pjaxReload, siteRefresh } from './refresh'
2
+ import { siteRefresh } from './refresh'
3
3
  import { cloudflareInit } from '../components/cloudflare'
4
- import { BODY, CONFIG, pjax, setPjax, setSiteSearch, siteSearch } from '../globals/globalVars'
4
+ import { BODY, CONFIG, setSiteSearch, siteSearch } from '../globals/globalVars'
5
5
  import { autoDarkmode, themeColorListener } from '../globals/themeColor'
6
6
  import { resizeHandle, scrollHandle, visibilityListener } from '../globals/handles'
7
7
  import { pagePosition } from '../globals/tools'
8
- import Pjax from 'theme-shokax-pjax'
9
8
  import { initVue } from '../library/vue'
10
9
  import { $dom } from '../library/dom'
11
10
  import { createChild } from '../library/proto'
@@ -15,18 +14,6 @@ const siteInit = async () => {
15
14
  initVue()
16
15
  domInit()
17
16
 
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
17
  CONFIG.quicklink.ignores = LOCAL.ignores
31
18
  import('quicklink').then(({listen}) => {
32
19
  listen(CONFIG.quicklink)
@@ -53,7 +40,7 @@ const siteInit = async () => {
53
40
  }
54
41
 
55
42
  import('../page/search').then(({algoliaSearch}) => {
56
- algoliaSearch(pjax)
43
+ algoliaSearch()
57
44
  })
58
45
 
59
46
  // Handle and trigger popup window
@@ -83,13 +70,13 @@ const siteInit = async () => {
83
70
  passive: true
84
71
  })
85
72
 
86
- window.addEventListener('pjax:send', pjaxReload, {
87
- passive: true
88
- })
73
+ // window.addEventListener('pjax:send', pjaxReload, {
74
+ // passive: true
75
+ // })
89
76
 
90
- window.addEventListener('pjax:success', siteRefresh, {
91
- passive: true
92
- }) // 默认会传入一个event参数
77
+ // window.addEventListener('pjax:success', siteRefresh, {
78
+ // passive: true
79
+ // }) // 默认会传入一个event参数
93
80
 
94
81
  window.addEventListener('beforeunload', () => {
95
82
  pagePosition()
@@ -1,3 +1,5 @@
1
+ // 临时性弃用,等待重构
2
+
1
3
  import { CONFIG, originTitle } from './globals/globalVars'
2
4
  import { showtip } from './globals/tools'
3
5
  import { pageScroll } from './library/anime'
@@ -1,47 +0,0 @@
1
- import { getScript } from './scriptPjax'
2
- import { CONFIG } from '../globals/globalVars'
3
- import { createChild } from './proto'
4
-
5
- /**
6
- * 用途是根据不同的资源名称和类型生成相应的资源 URL。
7
- */
8
- const assetUrl = (asset: string, type: string): string => {
9
- const str = CONFIG[asset][type].url as string
10
- if (str.startsWith('https')) {
11
- return str
12
- }
13
- if (str.startsWith('http')) {
14
- console.warn(`Upgrade vendor ${asset}/${type} to HTTPS, Please use HTTPS url instead of HTTP url.`)
15
- return str.replace('http', 'https')
16
- }
17
- return `/${str}`
18
- }
19
-
20
- export const vendorJs = (type: string, callback?: Function, condition?: string) => {
21
- if (LOCAL[type]) {
22
- getScript(assetUrl('js', type),CONFIG['js'][type].sri, callback || function () {
23
- window[type] = true
24
- }, condition || window[type])
25
- }
26
- }
27
-
28
- export const vendorCss = (type: string, condition?: string): void => {
29
- if (window['css' + type]) {
30
- return
31
- }
32
-
33
- if (LOCAL[type]) {
34
- const attr:any = {
35
- rel: 'stylesheet',
36
- href: assetUrl('css', type),
37
- }
38
- const vendor = CONFIG['css'][type] as vendorUrl
39
- if (!vendor.local) {
40
- attr.integrity = vendor.sri
41
- attr.crossOrigin = 'anonymous'
42
- }
43
- createChild(document.head, 'link', attr)
44
-
45
- window['css' + type] = true
46
- }
47
- }
@@ -1,56 +0,0 @@
1
- export const getScript = (url: string,sri: string, callback?: Function, condition?: string): void => {
2
- // url: 脚本文件的URL地址
3
- // callback: 当脚本加载完成时要执行的回调函数
4
- // condition: 可选的条件参数,如果存在,则执行callback
5
- if (condition) {
6
- // 如果条件存在,则执行回调函数
7
- callback()
8
- } else {
9
- let script = document.createElement('script')
10
-
11
- // @ts-ignore
12
- script.onload = function (_, isAbort: boolean) {
13
- // _: 事件对象
14
- // isAbort: 是否中止
15
- // @ts-ignore
16
- if (isAbort || !script.readyState) {
17
- console.log('abort!')
18
- script.onload = null
19
- script = undefined
20
- if (!isAbort && callback) setTimeout(callback, 0)
21
- }
22
- }
23
- script.src = url
24
- script.integrity = sri
25
- script.crossOrigin = 'anonymous'
26
- document.head.appendChild(script)
27
- }
28
- }
29
-
30
- export const pjaxScript = (element: HTMLScriptElement) => {
31
- const { text, parentNode, id, className, type, src, dataset } = element
32
- const code = text || element.textContent || element.innerHTML || ''
33
- parentNode.removeChild(element)
34
- const script = document.createElement('script')
35
- if (id) {
36
- script.id = id
37
- }
38
- if (className) {
39
- script.className = className
40
- }
41
- if (type) {
42
- script.type = type
43
- }
44
- if (src) {
45
- // Force synchronous loading of peripheral JS.
46
- script.src = src
47
- script.async = false
48
- }
49
- if (dataset.pjax !== undefined) {
50
- script.dataset.pjax = ''
51
- }
52
- if (code !== '') {
53
- script.appendChild(document.createTextNode(code))
54
- }
55
- parentNode.appendChild(script)
56
- }