hexo-theme-shokax 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/_config.yml +26 -5
  2. package/package.json +8 -7
  3. package/scripts/filters/locals.js +6 -0
  4. package/scripts/filters/post.js +2 -0
  5. package/scripts/generaters/archive.js +13 -1
  6. package/scripts/generaters/config.js +4 -1
  7. package/scripts/generaters/images.js +2 -0
  8. package/scripts/generaters/index.js +2 -0
  9. package/scripts/generaters/pages.js +0 -2
  10. package/scripts/generaters/script.js +34 -9
  11. package/scripts/helpers/asset.js +16 -7
  12. package/scripts/helpers/engine.js +24 -1
  13. package/scripts/helpers/list_categories.js +4 -0
  14. package/scripts/helpers/summary_ai.js +4 -0
  15. package/scripts/helpers/symbols_count_time.js +14 -8
  16. package/scripts/plugin/check.js +5 -3
  17. package/scripts/plugin/index.js +36 -9
  18. package/scripts/plugin/lib/injects.js +15 -0
  19. package/scripts/tags/media.js +1 -0
  20. package/source/js/_app/components/sidebar.js +54 -56
  21. package/source/js/_app/fireworks.js +6 -137
  22. package/source/js/_app/globals/globalVars.js +80 -96
  23. package/source/js/_app/globals/handles.js +81 -60
  24. package/source/js/_app/globals/themeColor.js +30 -26
  25. package/source/js/_app/globals/thirdparty.js +25 -24
  26. package/source/js/_app/globals/tools.js +36 -30
  27. package/source/js/_app/library/anime.js +30 -15
  28. package/source/js/_app/library/dom.js +12 -5
  29. package/source/js/_app/library/loadFile.js +7 -9
  30. package/source/js/_app/library/proto.js +59 -7
  31. package/source/js/_app/library/scriptPjax.js +14 -9
  32. package/source/js/_app/library/storage.js +2 -4
  33. package/source/js/_app/library/vue.js +16 -19
  34. package/source/js/_app/page/comment.js +10 -11
  35. package/source/js/_app/page/common.js +8 -12
  36. package/source/js/_app/page/fancybox.js +13 -14
  37. package/source/js/_app/page/post.js +43 -45
  38. package/source/js/_app/page/search.js +20 -20
  39. package/source/js/_app/page/tab.js +7 -10
  40. package/source/js/_app/pjax/domInit.js +29 -29
  41. package/source/js/_app/pjax/refresh.js +45 -50
  42. package/source/js/_app/pjax/siteInit.js +27 -31
  43. package/source/js/_app/player.js +44 -27
  44. package/test/dom.test.js +0 -86
@@ -1,65 +1,71 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clipBoard = exports.positionInit = exports.pagePosition = exports.showtip = void 0;
4
- const anime_1 = require("../library/anime");
5
- const dom_1 = require("../library/dom");
6
- const storage_1 = require("../library/storage");
7
- const globalVars_1 = require("./globalVars");
8
- const showtip = (msg) => {
1
+ import { pageScroll } from '../library/anime';
2
+ import { $dom } from '../library/dom';
3
+ import { $storage } from '../library/storage';
4
+ import { BODY, LOCAL_HASH, LOCAL_URL, scrollAction, setLocalHash } from './globalVars';
5
+ // 显示提示(现阶段用于版权及复制结果提示)
6
+ export const showtip = (msg) => {
9
7
  if (!msg) {
10
8
  return;
11
9
  }
12
- const tipbox = globalVars_1.BODY.createChild('div', {
10
+ const tipbox = BODY.createChild('div', {
13
11
  innerHTML: msg,
14
12
  className: 'tip'
15
13
  });
16
14
  setTimeout(() => {
17
15
  tipbox.addClass('hide');
18
16
  setTimeout(() => {
19
- globalVars_1.BODY.removeChild(tipbox);
17
+ BODY.removeChild(tipbox);
20
18
  }, 300);
21
19
  }, 3000);
22
20
  };
23
- exports.showtip = showtip;
24
- const pagePosition = () => {
21
+ export const pagePosition = () => {
22
+ // 判断配置项是否开启了自动记录滚动位置
25
23
  if (CONFIG.auto_scroll) {
26
- storage_1.$storage.set(globalVars_1.LOCAL_URL, String(globalVars_1.scrollAction.y));
24
+ // 将当前页面的滚动位置存入本地缓存
25
+ $storage.set(LOCAL_URL, String(scrollAction.y));
27
26
  }
28
27
  };
29
- exports.pagePosition = pagePosition;
30
- const positionInit = (comment) => {
28
+ export const positionInit = (comment) => {
29
+ // 获取页面锚点
31
30
  const anchor = window.location.hash;
32
31
  let target = null;
33
- if (globalVars_1.LOCAL_HASH) {
34
- storage_1.$storage.del(globalVars_1.LOCAL_URL);
32
+ if (LOCAL_HASH) {
33
+ $storage.del(LOCAL_URL);
35
34
  return;
36
35
  }
37
36
  if (anchor) {
38
- target = (0, dom_1.$dom)(decodeURI(anchor));
37
+ target = $dom(decodeURI(anchor));
39
38
  }
40
39
  else {
41
- target = CONFIG.auto_scroll ? parseInt(storage_1.$storage.get(globalVars_1.LOCAL_URL)) : 0;
40
+ target = CONFIG.auto_scroll ? parseInt($storage.get(LOCAL_URL)) : 0;
42
41
  }
43
42
  if (target) {
44
- (0, anime_1.pageScroll)(target);
45
- (0, globalVars_1.setLocalHash)(1);
43
+ pageScroll(target);
44
+ setLocalHash(1);
46
45
  }
47
- if (comment && anchor && !globalVars_1.LOCAL_HASH) {
48
- (0, anime_1.pageScroll)(target);
49
- (0, globalVars_1.setLocalHash)(1);
46
+ if (comment && anchor && !LOCAL_HASH) {
47
+ pageScroll(target);
48
+ setLocalHash(1);
50
49
  }
51
50
  };
52
- exports.positionInit = positionInit;
53
- const clipBoard = (str, callback) => {
51
+ /*
52
+ 这段代码是用来复制文本的。它使用了浏览器的 Clipboard API,如果浏览器支持该 API 并且当前页面是安全协议 (https)
53
+ 它将使用 Clipboard API 将文本复制到剪贴板。如果不支持,它会创建一个隐藏的文本区域并使用 document.execCommand('copy') 将文本复制到剪贴板。
54
+ 最后,它会回调传入的函数并传入一个布尔值表示是否成功复制。
55
+ */
56
+ export const clipBoard = (str, callback) => {
54
57
  if (navigator.clipboard && window.isSecureContext) {
55
58
  navigator.clipboard.writeText(str).then(() => {
59
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
56
60
  callback && callback(true);
57
61
  }, () => {
62
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
58
63
  callback && callback(false);
59
64
  });
60
65
  }
61
66
  else {
62
- const ta = globalVars_1.BODY.createChild('textarea', {
67
+ // TODO 根据caniuse,需要此polyfill的设备不足5%,应考虑删除
68
+ const ta = BODY.createChild('textarea', {
63
69
  style: {
64
70
  top: window.scrollY + 'px',
65
71
  position: 'absolute',
@@ -74,13 +80,13 @@ const clipBoard = (str, callback) => {
74
80
  ta.setSelectionRange(0, str.length);
75
81
  ta.readOnly = false;
76
82
  const result = document.execCommand('copy');
83
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
77
84
  callback && callback(result);
78
- ta.blur();
85
+ ta.blur(); // For iOS
79
86
  if (selected) {
80
87
  selection.removeAllRanges();
81
88
  selection.addRange(selected);
82
89
  }
83
- globalVars_1.BODY.removeChild(ta);
90
+ BODY.removeChild(ta);
84
91
  }
85
92
  };
86
- exports.clipBoard = clipBoard;
@@ -1,12 +1,16 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.pageScroll = exports.transition = void 0;
7
- const theme_shokax_anime_1 = __importDefault(require("theme-shokax-anime"));
8
- const globalVars_1 = require("../globals/globalVars");
9
- const transition = (target, type, complete, begin) => {
1
+ import anime from 'theme-shokax-anime';
2
+ import { siteNavHeight } from '../globals/globalVars';
3
+ /**
4
+ * 参数 动画效果
5
+ * 0 元素逐渐消失
6
+ * 1 元素逐渐出现
7
+ * bounceUpIn 元素从下方弹跳出现
8
+ * shrinkIn 元素从放大到正常大小出现
9
+ * slideRightIn 元素从右侧滑入
10
+ * slideRightOut 元素向右侧滑出
11
+ * TODO 函数功能过于复杂,需要拆分
12
+ */
13
+ export const transition = (target, type, complete, begin) => {
10
14
  let animation;
11
15
  let display = 'none';
12
16
  switch (type) {
@@ -63,32 +67,43 @@ const transition = (target, type, complete, begin) => {
63
67
  break;
64
68
  default:
65
69
  animation = type;
70
+ // @ts-ignore
66
71
  display = type.display;
67
72
  break;
68
73
  }
69
- (0, theme_shokax_anime_1.default)(Object.assign({
74
+ anime(Object.assign({
70
75
  targets: target,
71
76
  duration: 200,
72
77
  easing: 'linear',
73
78
  begin() {
79
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
74
80
  begin && begin();
75
81
  },
76
82
  complete() {
77
83
  target.display(display);
84
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
78
85
  complete && complete();
79
86
  }
80
87
  }, animation)).play();
81
88
  };
82
- exports.transition = transition;
83
- const pageScroll = (target, offset, complete) => {
84
- (0, theme_shokax_anime_1.default)({
89
+ export const pageScroll = (target, offset, complete) => {
90
+ // target: 滚动到的目标元素或坐标(number)
91
+ // offset: 可选的偏移量
92
+ // complete: 可选的回调函数,在动画完成时调用
93
+ anime({
94
+ // 动画目标
85
95
  targets: typeof offset === 'number' && typeof target !== 'number' ? target.parentNode : document.scrollingElement,
96
+ // 动画持续时间
86
97
  duration: 500,
98
+ // 动画缓动函数
87
99
  easing: 'easeInOutQuad',
88
- scrollTop: offset || (typeof target === 'number' ? target : (target ? target.getTop() + document.documentElement.scrollTop - globalVars_1.siteNavHeight : 0)),
100
+ // 如果 offset 存在,则滚动到 offset,如果 target 是数字,则滚动到 target,如果 target DOM 元素,则滚动到下述表达式
101
+ scrollTop: offset || (typeof target === 'number' ? target : (target ? target.getTop() + document.documentElement.scrollTop - siteNavHeight : 0)),
102
+ // 完成回调函数
89
103
  complete() {
104
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
90
105
  complete && complete();
91
106
  }
92
107
  }).play();
108
+ // 调用 anime.js 函数,并传入参数
93
109
  };
94
- exports.pageScroll = pageScroll;
@@ -1,21 +1,27 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDocHeight = exports.$dom = void 0;
4
1
  const getDocHeight = () => $dom('main > .inner').offsetHeight;
5
- exports.getDocHeight = getDocHeight;
2
+ /**
3
+ * 获取一个dom选择器对应的元素
4
+ */
6
5
  const $dom = (selector, element = document) => {
6
+ // 在测试环境中这能优化0.01-0.02ms左右
7
7
  if (selector[0] === '#') {
8
8
  return element.getElementById(selector.substring(1));
9
9
  }
10
10
  return element.querySelector(selector);
11
11
  };
12
- exports.$dom = $dom;
12
+ /**
13
+ * 获取具有此选择器的所有dom节点
14
+ */
13
15
  $dom.all = (selector, element = document) => {
14
16
  return element.querySelectorAll(selector);
15
17
  };
18
+ /**
19
+ * 获取具有此选择器的所有dom节点,并依次执行callback函数
20
+ */
16
21
  $dom.each = (selector, callback, element) => {
17
22
  $dom.all(selector, element).forEach(callback);
18
23
  };
24
+ // TODO 异步化意义不明确,代码实现存在问题
19
25
  $dom.asyncify = async (selector, element = document) => {
20
26
  if (selector[0] === '#') {
21
27
  return element.getElementById(selector.substring(1));
@@ -25,3 +31,4 @@ $dom.asyncify = async (selector, element = document) => {
25
31
  $dom.asyncifyEach = (selector, callback, element) => {
26
32
  $dom.all(selector, element).forEach(callback);
27
33
  };
34
+ export { $dom, getDocHeight };
@@ -1,7 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.vendorCss = exports.vendorJs = void 0;
4
- const scriptPjax_1 = require("./scriptPjax");
1
+ import { getScript } from './scriptPjax';
2
+ /**
3
+ * 用途是根据不同的资源名称和类型生成相应的资源 URL。
4
+ */
5
5
  const assetUrl = (asset, type) => {
6
6
  const str = CONFIG[asset][type];
7
7
  if (str.includes('gh') || str.includes('combine')) {
@@ -15,15 +15,14 @@ const assetUrl = (asset, type) => {
15
15
  }
16
16
  return `/${str}`;
17
17
  };
18
- const vendorJs = (type, callback, condition) => {
18
+ export const vendorJs = (type, callback, condition) => {
19
19
  if (LOCAL[type]) {
20
- (0, scriptPjax_1.getScript)(assetUrl('js', type), callback || function () {
20
+ getScript(assetUrl('js', type), callback || function () {
21
21
  window[type] = true;
22
22
  }, condition || window[type]);
23
23
  }
24
24
  };
25
- exports.vendorJs = vendorJs;
26
- const vendorCss = (type, condition) => {
25
+ export const vendorCss = (type, condition) => {
27
26
  if (window['css' + type]) {
28
27
  return;
29
28
  }
@@ -35,4 +34,3 @@ const vendorCss = (type, condition) => {
35
34
  window['css' + type] = true;
36
35
  }
37
36
  };
38
- exports.vendorCss = vendorCss;
@@ -1,8 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const dom_1 = require("./dom");
4
- function initProto() {
1
+ import { $dom } from './dom';
2
+ export default function initProto() {
5
3
  Object.assign(HTMLElement.prototype, {
4
+ /**
5
+ * 创建一个子节点并放置
6
+ */
6
7
  createChild(tag, obj, positon) {
7
8
  const child = document.createElement(tag);
8
9
  Object.assign(child, obj);
@@ -19,6 +20,10 @@ function initProto() {
19
20
  }
20
21
  return child;
21
22
  },
23
+ /**
24
+ * 此方法使用`<div>`包装一个 DOM 元素
25
+ * @param obj 需要被包装的对象
26
+ */
22
27
  wrapObject(obj) {
23
28
  const box = document.createElement('div');
24
29
  Object.assign(box, obj);
@@ -28,12 +33,18 @@ function initProto() {
28
33
  },
29
34
  changeOrGetHeight(h) {
30
35
  if (h) {
36
+ // TODO 0rem是期望的值吗?
31
37
  this.style.height = typeof h === 'number' ? h + 'rem' : h;
32
38
  }
33
39
  return this.getBoundingClientRect().height;
34
40
  },
41
+ /**
42
+ 此函数将元素的宽度设置为指定值,如果未提供值,则返回元素的宽度.<br />
43
+ 宽度可以作为数字提供(假定它以`rem`为单位).作为字符串提供则直接设置为元素宽度
44
+ */
35
45
  changeOrGetWidth(w) {
36
46
  if (w) {
47
+ // TODO 0rem是期望的值吗?
37
48
  this.style.width = typeof w === 'number' ? w + 'rem' : w;
38
49
  }
39
50
  return this.getBoundingClientRect().width;
@@ -44,6 +55,12 @@ function initProto() {
44
55
  left() {
45
56
  return this.getBoundingClientRect().left;
46
57
  },
58
+ /**
59
+ * 该函数接受两个参数:`type`字符串和 `value`字符串的可选参数。该函数具有基于参数值的三个主要逻辑分支。 <br />
60
+ * 1. `value`如果是`null`,则该函数从当前上下文中删除具有`type`函数名称的属性。 <br />
61
+ * 2. `value`如果为真,则该函数将使用`type`参数指定的名称将属性设置为当前上下文中`value`参数的值。然后,该函数返回当前上下文。 <br />
62
+ * 3. `value`如果不是真,则该函数返回属性的值,该值具有当前上下文中的参数指定的名称。
63
+ */
47
64
  attr(type, value) {
48
65
  if (value === null) {
49
66
  return this.removeAttribute(type);
@@ -56,6 +73,9 @@ function initProto() {
56
73
  return this.getAttribute(type);
57
74
  }
58
75
  },
76
+ /**
77
+ * 将此节点插入父节点的下一个节点之前
78
+ */
59
79
  insertAfter(element) {
60
80
  const parent = this.parentNode;
61
81
  if (parent.lastChild === this) {
@@ -65,6 +85,10 @@ function initProto() {
65
85
  parent.insertBefore(element, this.nextSibling);
66
86
  }
67
87
  },
88
+ /**
89
+ * 当d为空时返回此节点的CSSStyle display属性 <br />
90
+ * 反之,将d设置为此节点的CSSStyle display属性
91
+ */
68
92
  display(d) {
69
93
  if (d == null) {
70
94
  return this.style.display;
@@ -74,12 +98,25 @@ function initProto() {
74
98
  return this;
75
99
  }
76
100
  },
101
+ /**
102
+ * 找到此节点第一个符合selector选择器的子节点
103
+ */
77
104
  child(selector) {
78
- return (0, dom_1.$dom)(selector, this);
105
+ return $dom(selector, this);
79
106
  },
107
+ /**
108
+ * 找到此节点所有符合selector选择器的子节点
109
+ */
80
110
  find(selector) {
81
- return dom_1.$dom.all(selector, this);
111
+ return $dom.all(selector, this);
82
112
  },
113
+ /**
114
+ * 这个方法接受三个参数:
115
+ * type 表示操作类型('add'、'remove'、'toggle'),
116
+ * className 是一个或多个要操作的类名,
117
+ * display 是一个可选的布尔值,用于在执行切换操作时指定类名是否应显示或隐藏。
118
+ * 该方法会根据操作类型执行相应的类名操作。
119
+ */
83
120
  _class(type, className, display) {
84
121
  const classNames = className.indexOf(' ') ? className.split(' ') : [className];
85
122
  classNames.forEach((name) => {
@@ -91,21 +128,36 @@ function initProto() {
91
128
  }
92
129
  });
93
130
  },
131
+ /**
132
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'add',然后执行添加类名的操作。
133
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
134
+ */
94
135
  addClass(className) {
95
136
  this._class('add', className);
96
137
  return this;
97
138
  },
139
+ /**
140
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'remove',然后执行移除类名的操作。
141
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
142
+ */
98
143
  removeClass(className) {
99
144
  this._class('remove', className);
100
145
  return this;
101
146
  },
147
+ /**
148
+ * 这个方法是对 _class 方法的封装,调用时会将操作类型设为 'toggle',然后执行切换类名的操作。
149
+ * 如果提供了 display 参数,它将根据布尔值决定是否显示或隐藏类名。
150
+ * 最后,它返回当前的 EventTarget,通常是 DOM 元素本身,以支持链式调用。
151
+ */
102
152
  toggleClass(className, display) {
103
153
  this._class('toggle', className, display);
104
154
  return this;
105
155
  },
156
+ /**
157
+ * 这个方法返回一个布尔值,表示元素是否包含指定的类名。
158
+ */
106
159
  hasClass(className) {
107
160
  return this.classList.contains(className);
108
161
  }
109
162
  });
110
163
  }
111
- exports.default = initProto;
@@ -1,7 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pjaxScript = exports.getScript = exports.cloudflareInit = void 0;
4
- function cloudflareInit() {
1
+ // rocket-loader & Auto minify(cloudflare) 补丁
2
+ // cloudflare 的上述功能会导致DOMContentLoaded事件无法触发,此补丁会将DOMContentLoaded重定向为load事件
3
+ export function cloudflareInit() {
5
4
  let inCloudFlare = true;
6
5
  window.addEventListener('DOMContentLoaded', function () {
7
6
  inCloudFlare = false;
@@ -15,14 +14,21 @@ function cloudflareInit() {
15
14
  });
16
15
  }
17
16
  }
18
- exports.cloudflareInit = cloudflareInit;
19
- const getScript = (url, callback, condition) => {
17
+ export const getScript = (url, callback, condition) => {
18
+ // url: 脚本文件的URL地址
19
+ // callback: 当脚本加载完成时要执行的回调函数
20
+ // condition: 可选的条件参数,如果存在,则执行callback
20
21
  if (condition) {
22
+ // 如果条件存在,则执行回调函数
21
23
  callback();
22
24
  }
23
25
  else {
24
26
  let script = document.createElement('script');
27
+ // @ts-ignore
25
28
  script.onload = function (_, isAbort) {
29
+ // _: 事件对象
30
+ // isAbort: 是否中止
31
+ // @ts-ignore
26
32
  if (isAbort || !script.readyState) {
27
33
  console.log('abort!');
28
34
  script.onload = null;
@@ -35,8 +41,7 @@ const getScript = (url, callback, condition) => {
35
41
  document.head.appendChild(script);
36
42
  }
37
43
  };
38
- exports.getScript = getScript;
39
- const pjaxScript = (element) => {
44
+ export const pjaxScript = (element) => {
40
45
  const { text, parentNode, id, className, type, src, dataset } = element;
41
46
  const code = text || element.textContent || element.innerHTML || '';
42
47
  parentNode.removeChild(element);
@@ -51,6 +56,7 @@ const pjaxScript = (element) => {
51
56
  script.type = type;
52
57
  }
53
58
  if (src) {
59
+ // Force synchronous loading of peripheral JS.
54
60
  script.src = src;
55
61
  script.async = false;
56
62
  }
@@ -62,4 +68,3 @@ const pjaxScript = (element) => {
62
68
  }
63
69
  parentNode.appendChild(script);
64
70
  };
65
- exports.pjaxScript = pjaxScript;
@@ -1,7 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.$storage = void 0;
4
- exports.$storage = {
1
+ // Html5LocalStorage的一个API
2
+ export const $storage = {
5
3
  set(key, value) {
6
4
  localStorage.setItem(key, value);
7
5
  },
@@ -1,12 +1,9 @@
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
- function initVue() {
1
+ import { $storage } from './storage';
2
+ import { transition } from './anime';
3
+ import { $dom } from './dom';
4
+ import { BODY } from '../globals/globalVars';
5
+ import { changeTheme } from '../globals/themeColor';
6
+ export function initVue() {
10
7
  Vue.createApp({
11
8
  data() {
12
9
  return {};
@@ -14,24 +11,25 @@ function initVue() {
14
11
  methods: {
15
12
  changeThemeByBtn() {
16
13
  let c;
17
- const btn = (0, dom_1.$dom)('.theme').child('.ic');
18
- const neko = globalVars_1.BODY.createChild('div', {
14
+ const btn = $dom('.theme').child('.ic');
15
+ const neko = BODY.createChild('div', {
19
16
  id: 'neko',
20
17
  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>'
21
18
  });
22
19
  const hideNeko = () => {
23
- (0, anime_1.transition)(neko, {
20
+ transition(neko, {
21
+ // @ts-ignore
24
22
  delay: 2500,
25
23
  opacity: 0
26
24
  }, () => {
27
- globalVars_1.BODY.removeChild(neko);
25
+ BODY.removeChild(neko);
28
26
  });
29
27
  };
30
28
  if (btn.hasClass('i-sun')) {
31
29
  c = () => {
32
30
  neko.addClass('dark');
33
- (0, themeColor_1.changeTheme)('dark');
34
- storage_1.$storage.set('theme', 'dark');
31
+ changeTheme('dark');
32
+ $storage.set('theme', 'dark');
35
33
  hideNeko();
36
34
  };
37
35
  }
@@ -39,12 +37,12 @@ function initVue() {
39
37
  neko.addClass('dark');
40
38
  c = () => {
41
39
  neko.removeClass('dark');
42
- (0, themeColor_1.changeTheme)();
43
- storage_1.$storage.set('theme', 'light');
40
+ changeTheme();
41
+ $storage.set('theme', 'light');
44
42
  hideNeko();
45
43
  };
46
44
  }
47
- (0, anime_1.transition)(neko, 1, () => {
45
+ transition(neko, 1, () => {
48
46
  setTimeout(c, 210);
49
47
  }, () => {
50
48
  neko.display('block');
@@ -53,4 +51,3 @@ function initVue() {
53
51
  }
54
52
  }).mount('#rightNav');
55
53
  }
56
- exports.initVue = initVue;
@@ -1,24 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const dom_1 = require("../library/dom");
4
- const anime_1 = require("../library/anime");
5
- const globalVars_1 = require("../globals/globalVars");
6
- function loadComments() {
7
- const element = (0, dom_1.$dom)('#comments');
1
+ import { $dom } from '../library/dom';
2
+ import { transition } from '../library/anime';
3
+ import { goToComment } from '../globals/globalVars';
4
+ // TODO 此函数在twikoo下可能不适用
5
+ export default function loadComments() {
6
+ const element = $dom('#comments');
8
7
  if (!element) {
9
- globalVars_1.goToComment.display('none');
8
+ goToComment.display('none');
10
9
  return;
11
10
  }
12
11
  else {
13
- globalVars_1.goToComment.display('');
12
+ goToComment.display('');
14
13
  }
15
14
  const io = new IntersectionObserver((entries, observer) => {
16
15
  const entry = entries[0];
16
+ // vendorCss('valine')
17
17
  if (entry.isIntersecting || entry.intersectionRatio > 0) {
18
- (0, anime_1.transition)((0, dom_1.$dom)('#comments'), 'bounceUpIn');
18
+ transition($dom('#comments'), 'bounceUpIn');
19
19
  observer.disconnect();
20
20
  }
21
21
  });
22
22
  io.observe(element);
23
23
  }
24
- exports.default = loadComments;
@@ -1,9 +1,6 @@
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')) {
1
+ import { $dom } from '../library/dom';
2
+ export const cardActive = () => {
3
+ if (!$dom('.index.wrap')) {
7
4
  return;
8
5
  }
9
6
  const io = new IntersectionObserver((entries) => {
@@ -22,15 +19,15 @@ const cardActive = () => {
22
19
  root: null,
23
20
  threshold: [0.3]
24
21
  });
25
- dom_1.$dom.each('.index.wrap article.item, .index.wrap section.item', (article) => {
22
+ $dom.each('.index.wrap article.item, .index.wrap section.item', (article) => {
26
23
  io.observe(article);
27
24
  });
28
- (0, dom_1.$dom)('.index.wrap .item:first-child').addClass('show');
29
- dom_1.$dom.each('.cards .item', (element) => {
25
+ $dom('.index.wrap .item:first-child').addClass('show');
26
+ $dom.each('.cards .item', (element) => {
30
27
  ['mouseenter', 'touchstart'].forEach((item) => {
31
28
  element.addEventListener(item, () => {
32
- if ((0, dom_1.$dom)('.cards .item.active')) {
33
- (0, dom_1.$dom)('.cards .item.active').removeClass('active');
29
+ if ($dom('.cards .item.active')) {
30
+ $dom('.cards .item.active').removeClass('active');
34
31
  }
35
32
  element.addClass('active');
36
33
  }, { passive: true });
@@ -42,4 +39,3 @@ const cardActive = () => {
42
39
  });
43
40
  });
44
41
  };
45
- exports.cardActive = cardActive;