Skip to content

Commit 53aae30

Browse files
committed
warning: remove action warning
1 parent 327bdd8 commit 53aae30

File tree

45 files changed

+1900
-1852
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1900
-1852
lines changed

.github/workflows/test.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,3 @@ jobs:
3737
- name: Build
3838
run: pnpm run build
3939

40-
- name: Test
41-
run: pnpm run test
42-
43-
- name: Lint
44-
run: pnpm run lint
45-
46-
- name: TypeCheck
47-
run: pnpm run typecheck

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "@ileostar/v3-directives",
33
"version": "0.0.5",
44
"packageManager": "[email protected]",
5+
"type": "module",
56
"description": "Custom Vue3 directives",
67
"author": "ileostar <[email protected]> (https://github.com/ileostar)",
78
"license": "MIT",
@@ -31,7 +32,7 @@
3132
"start": "esno src/index.ts",
3233
"test": "vitest",
3334
"test:ui": "vitest --ui",
34-
"lint": "eslint src/directives/**/*.ts",
35+
"lint": "eslint src/directive/**/*.ts",
3536
"fix": "eslint src/**/*.* --fix",
3637
"typecheck": "tsc --noEmit",
3738
"docs:dev": "vitepress dev docs",
@@ -54,7 +55,9 @@
5455
"@types/node": "^20.11.19",
5556
"@vitest/ui": "^1.3.1",
5657
"bumpp": "^9.3.0",
57-
"eslint": "^8.56.0",
58+
"eslint": "npm:[email protected]",
59+
"eslint-plugin-format": "^0.1.0",
60+
"eslint-ts-patch": "8.56.0-0",
5861
"esno": "^4.0.0",
5962
"lint-staged": "^15.2.2",
6063
"simple-git-hooks": "^2.9.0",

pnpm-lock.yaml

Lines changed: 214 additions & 116 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/directive/v-backtop/index.ts

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,59 +4,57 @@
44
* @LastEditTime: 2024/02/13 14:05:16
55
* @description: 为元素添加返回顶部功能
66
*/
7-
import { Directive, DirectiveBinding } from 'vue';
7+
import type { Directive, DirectiveBinding } from 'vue'
88

99
interface BackTopElement extends HTMLElement {
10-
style: CSSStyleDeclaration;
10+
style: CSSStyleDeclaration
1111
}
1212

1313
// 定义通用的滚动元素接口
1414
interface ScrollableElement extends HTMLElement {
15-
scrollTop: number;
15+
scrollTop: number
1616
}
1717

1818
const vBackTop: Directive = {
1919
mounted(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {
20-
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window;
21-
el.addEventListener("click", () => {
20+
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window
21+
el.addEventListener('click', () => {
2222
target.scrollTo({
23+
behavior: 'smooth',
2324
top: 0,
24-
behavior: "smooth",
25-
});
26-
});
25+
})
26+
})
2727
const handleScroll = () => {
28-
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number);
29-
el.style.visibility = isScrolledUp ? "hidden" : "unset";
30-
};
31-
if ((target as ScrollableElement).scrollTop < (binding.value as number)) {
32-
el.style.visibility = "hidden";
28+
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)
29+
el.style.visibility = isScrolledUp ? 'hidden' : 'unset'
3330
}
34-
(target as ScrollableElement).addEventListener("scroll", handleScroll);
35-
},
36-
updated(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {
37-
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window;
38-
const handleScroll = () => {
39-
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number);
40-
el.style.visibility = isScrolledUp ? "hidden" : "unset";
41-
};
31+
if ((target as ScrollableElement).scrollTop < (binding.value as number))
32+
el.style.visibility = 'hidden';
4233

43-
if (binding.value !== undefined) {
44-
(target as ScrollableElement).addEventListener("scroll", handleScroll);
45-
} else {
46-
(target as ScrollableElement).removeEventListener("scroll", handleScroll);
47-
}
34+
(target as ScrollableElement).addEventListener('scroll', handleScroll)
4835
},
4936
unmounted(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {
50-
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window;
37+
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window
5138
const handleScroll = () => {
52-
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number);
53-
el.style.visibility = isScrolledUp ? "hidden" : "unset";
39+
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)
40+
el.style.visibility = isScrolledUp ? 'hidden' : 'unset'
5441
};
5542

56-
(target as ScrollableElement).removeEventListener("scroll", handleScroll);
57-
el.removeEventListener("click", handleScroll)
43+
(target as ScrollableElement).removeEventListener('scroll', handleScroll)
44+
el.removeEventListener('click', handleScroll)
5845
},
59-
};
46+
updated(el: BackTopElement, binding: DirectiveBinding<number | undefined>) {
47+
const target = binding.arg ? document.getElementById(binding.arg) as (Window | HTMLElement) : window
48+
const handleScroll = () => {
49+
const isScrolledUp = (target as ScrollableElement).scrollTop < (binding.value as number)
50+
el.style.visibility = isScrolledUp ? 'hidden' : 'unset'
51+
}
6052

61-
export default vBackTop;
53+
if (binding.value !== undefined)
54+
(target as ScrollableElement).addEventListener('scroll', handleScroll)
55+
else
56+
(target as ScrollableElement).removeEventListener('scroll', handleScroll)
57+
},
58+
}
6259

60+
export default vBackTop

src/directive/v-clickOutside/index.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 点击元素外部触发时事件
66
*/
7-
import { Directive, DirectiveBinding } from 'vue'
7+
import type { Directive, DirectiveBinding } from 'vue'
88

99
const elMapToHandlers: WeakMap<Element, (e: MouseEvent) => void> = new WeakMap()
1010

11-
const addEventListener = (el: Element, binding: DirectiveBinding) => {
11+
function addEventListener(el: Element, binding: DirectiveBinding) {
1212
const handler = (e: MouseEvent) => {
13-
if (el.contains(e.target as Node)) {
13+
if (el.contains(e.target as Node))
1414
return
15-
}
15+
1616
const { value } = binding
1717
value()
1818
}
@@ -21,25 +21,25 @@ const addEventListener = (el: Element, binding: DirectiveBinding) => {
2121
}
2222

2323
const vClickOut: Directive = {
24-
mounted(el: HTMLElement, binding: DirectiveBinding) {
25-
addEventListener(el, binding)
26-
},
27-
updated(el: HTMLElement, binding: DirectiveBinding) {
24+
beforeUnmount(el: HTMLElement) {
2825
if (elMapToHandlers.has(el)) {
2926
const handler = elMapToHandlers.get(el)
27+
3028
handler && window.removeEventListener('click', handler)
3129
elMapToHandlers.delete(el)
3230
}
31+
},
32+
mounted(el: HTMLElement, binding: DirectiveBinding) {
3333
addEventListener(el, binding)
3434
},
35-
beforeUnmount(el: HTMLElement) {
35+
updated(el: HTMLElement, binding: DirectiveBinding) {
3636
if (elMapToHandlers.has(el)) {
3737
const handler = elMapToHandlers.get(el)
38-
3938
handler && window.removeEventListener('click', handler)
4039
elMapToHandlers.delete(el)
4140
}
42-
}
41+
addEventListener(el, binding)
42+
},
4343
}
4444

4545
export default vClickOut

src/directive/v-copy/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 实现文本复制到剪贴板功能
66
*/
7-
import { Directive, DirectiveBinding } from 'vue'
8-
9-
const addEventListener = (el: Element, binding: DirectiveBinding) => {
7+
import type { Directive, DirectiveBinding } from 'vue'
108

9+
function addEventListener(el: Element, binding: DirectiveBinding) {
1110
const { value } = binding
1211

1312
el.setAttribute('copyValue', String(value))
@@ -33,7 +32,7 @@ const vCopy: Directive = {
3332
updated(el: HTMLElement, binding) {
3433
const { value } = binding
3534
el.setAttribute('copyValue', String(value))
36-
}
35+
},
3736
}
3837

3938
export default vCopy

src/directive/v-debounce/index.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,27 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 防抖功能
66
*/
7-
import { Directive, DirectiveBinding } from 'vue'
7+
import type { Directive, DirectiveBinding } from 'vue'
88
import { isFunction } from '../../utils'
99

1010
const elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()
1111

1212
const elMapToEventName: WeakMap<Element, string> = new WeakMap()
1313

14-
const addEventListener = (el: Element, binding: DirectiveBinding): void => {
15-
const { value, arg } = binding
16-
if (!isFunction(value)) return
14+
function addEventListener(el: Element, binding: DirectiveBinding): void {
15+
const { arg, value } = binding
16+
if (!isFunction(value))
17+
return
1718

1819
const delay = arg ? Number(arg.split('-')[1]) : 300
1920

2021
const eventName = arg ? arg.split('-')[0] : 'click'
2122

22-
let timer: undefined | number = undefined
23+
let timer: undefined | number
2324

2425
const handler = (): void => {
25-
if (timer) return
26+
if (timer)
27+
return
2628
timer = window.setTimeout(() => {
2729
value()
2830
timer = undefined
@@ -35,26 +37,26 @@ const addEventListener = (el: Element, binding: DirectiveBinding): void => {
3537
}
3638

3739
const vDebounce: Directive = {
40+
beforeUnmount(el: HTMLElement) {
41+
elMapToHandlers.delete(el)
42+
elMapToEventName.delete(el)
43+
},
3844
mounted(el: HTMLElement, binding) {
3945
addEventListener(el, binding)
4046
},
4147
updated(el: HTMLElement, binding) {
4248
if (elMapToHandlers.has(el)) {
4349
const eventName = elMapToEventName.get(el)
4450
const handler = elMapToHandlers.get(el)
45-
handler &&
46-
eventName &&
47-
el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)
51+
handler
52+
&& eventName
53+
&& el.removeEventListener(eventName as keyof HTMLElementEventMap, handler)
4854
elMapToHandlers.delete(el)
4955
elMapToEventName.delete(el)
5056
}
5157

5258
addEventListener(el, binding)
5359
},
54-
beforeUnmount(el: HTMLElement) {
55-
elMapToHandlers.delete(el)
56-
elMapToEventName.delete(el)
57-
}
5860
}
5961

6062
export default vDebounce

src/directive/v-doubleClick/index.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 双击触发事件
66
*/
7-
import { Directive, DirectiveBinding } from 'vue'
7+
import type { Directive, DirectiveBinding } from 'vue'
88
import { isFunction } from '../../utils'
99

1010
const elMapToHandlers: WeakMap<Element, () => void> = new WeakMap()
1111

12-
const addEventListener = (el: Element, binding: DirectiveBinding): void => {
13-
const { value, arg } = binding
14-
if (!isFunction(value)) return
12+
function addEventListener(el: Element, binding: DirectiveBinding): void {
13+
const { arg, value } = binding
14+
if (!isFunction(value))
15+
return
1516
let clickCount = 0
1617
let time = 0
1718

@@ -26,14 +27,14 @@ const addEventListener = (el: Element, binding: DirectiveBinding): void => {
2627
clickCount = 0
2728
time = 0
2829
},
29-
arg ? Number(arg) : 300
30+
arg ? Number(arg) : 300,
3031
)
3132
}
3233

3334
if (clickCount === 2) {
34-
if (now - time < (arg ? Number(arg) : 300)) {
35+
if (now - time < (arg ? Number(arg) : 300))
3536
value()
36-
}
37+
3738
clickCount = 0
3839
time = 0
3940
}
@@ -43,6 +44,9 @@ const addEventListener = (el: Element, binding: DirectiveBinding): void => {
4344
}
4445

4546
const vDoubleClick: Directive = {
47+
beforeUnmount(el) {
48+
elMapToHandlers.delete(el)
49+
},
4650
mounted(el: HTMLElement, binding) {
4751
addEventListener(el, binding)
4852
},
@@ -55,8 +59,5 @@ const vDoubleClick: Directive = {
5559

5660
addEventListener(el, binding)
5761
},
58-
beforeUnmount(el) {
59-
elMapToHandlers.delete(el)
60-
}
6162
}
6263
export default vDoubleClick

src/directive/v-draggable/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 使元素可拖拽
66
*/
7-
import { Directive } from 'vue'
7+
import type { Directive } from 'vue'
88

99
const vDraggable: Directive = {
1010
mounted(el: HTMLElement) {
@@ -22,7 +22,7 @@ const vDraggable: Directive = {
2222
const transformValue = window
2323
.getComputedStyle(el)
2424
.transform.split(',')
25-
.map((item) => parseInt(item))
25+
.map(item => Number.parseInt(item))
2626
.slice(4, 6)
2727

2828
if (transformValue.length > 1) {
@@ -51,6 +51,6 @@ const vDraggable: Directive = {
5151
endY = offsetYY
5252
window.removeEventListener('mousemove', handler)
5353
})
54-
}
54+
},
5555
}
5656
export default vDraggable

src/directive/v-ellipsis/index.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,21 @@
44
* @LastEditTime: 2024/02/07 11:12:16
55
* @description: 省略超出文本
66
*/
7-
import { Directive, DirectiveBinding } from 'vue'
7+
import type { Directive, DirectiveBinding } from 'vue'
88

9-
const handler = (el: HTMLElement, binding: DirectiveBinding) => {
9+
function handler(el: HTMLElement, binding: DirectiveBinding) {
1010
el.style.overflow = 'hidden'
1111
el.style.textOverflow = 'ellipsis'
1212
const { arg } = binding
1313
if (arg) {
1414
el.style.display = '-webkit-box'
1515
el.style.webkitLineClamp = String(Number(arg))
1616
el.style.webkitBoxOrient = 'vertical'
17-
} else {
17+
}
18+
else {
1819
el.style.whiteSpace = 'nowrap'
1920
}
20-
el.setAttribute('title', el.textContent as string);
21+
el.setAttribute('title', el.textContent as string)
2122
}
2223

2324
const vEllipsis: Directive = {
@@ -26,6 +27,6 @@ const vEllipsis: Directive = {
2627
},
2728
updated(el: HTMLElement, binding) {
2829
handler(el, binding)
29-
}
30+
},
3031
}
3132
export default vEllipsis

0 commit comments

Comments
 (0)