lyb-js 1.4.2 → 1.6.0
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.
- package/Browser/LibJsCopy.d.ts +5 -0
- package/Browser/LibJsCopy.js +22 -0
- package/Misc/LibJsClassObservable.d.ts +51 -0
- package/Misc/LibJsClassObservable.js +93 -0
- package/Misc/LibJsEmitter.d.ts +2 -2
- package/Misc/LibJsEmitter.js +2 -2
- package/README.md +62 -2
- package/libJs.d.ts +18 -8
- package/libJs.js +16 -5
- package/lyb.js +117 -6
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const fallbackCopy = (text) => {
|
|
2
|
+
const textarea = document.createElement("textarea");
|
|
3
|
+
textarea.value = text;
|
|
4
|
+
textarea.style.position = "fixed";
|
|
5
|
+
textarea.style.opacity = "0";
|
|
6
|
+
document.body.appendChild(textarea);
|
|
7
|
+
textarea.select();
|
|
8
|
+
document.execCommand("copy");
|
|
9
|
+
document.body.removeChild(textarea);
|
|
10
|
+
};
|
|
11
|
+
/** @description 复制文本到剪贴板
|
|
12
|
+
* @param text 要复制的文本
|
|
13
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsCopy-复制文本到剪贴板
|
|
14
|
+
*/
|
|
15
|
+
export const libJsCopy = (text) => {
|
|
16
|
+
if (navigator.clipboard) {
|
|
17
|
+
navigator.clipboard.writeText(text).catch(() => fallbackCopy(text));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
fallbackCopy(text);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** @description 类属性监听器
|
|
2
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsClassObservable-类属性监听器
|
|
3
|
+
*/
|
|
4
|
+
export declare class LibJsClassObservable<T extends Record<string, any>> {
|
|
5
|
+
/** 可监听的对象 */
|
|
6
|
+
private data;
|
|
7
|
+
/** 监听器 */
|
|
8
|
+
private listeners;
|
|
9
|
+
/** 监听函数索引ID */
|
|
10
|
+
private index;
|
|
11
|
+
/**
|
|
12
|
+
* @param initialData 监听的数据
|
|
13
|
+
*/
|
|
14
|
+
constructor(initialData: T);
|
|
15
|
+
/** @description 获取值、
|
|
16
|
+
* @param key 要获取的键
|
|
17
|
+
* @returns 对应的值
|
|
18
|
+
*/
|
|
19
|
+
getValue<K extends keyof T>(key: K): T[K];
|
|
20
|
+
/** @description 设置值
|
|
21
|
+
* @param key 要设置的键
|
|
22
|
+
* @param value 要设置的值
|
|
23
|
+
* @param immediately 是否立即通知监听器
|
|
24
|
+
* @returns 设置后的值
|
|
25
|
+
*/
|
|
26
|
+
setValue<K extends keyof T, V extends T[K]>(key: K, value: V, immediately?: boolean): V;
|
|
27
|
+
/** @description 监听值
|
|
28
|
+
* @param key 要监听的键
|
|
29
|
+
* @param callback 回调函数
|
|
30
|
+
* @param immediately 是否立即触发一次回调函数
|
|
31
|
+
* @returns 取消监听的函数
|
|
32
|
+
*/
|
|
33
|
+
onValue<K extends keyof T>(key: K, callback: (newValue: T[K], oldValue: T[K]) => void, immediately?: boolean): () => void;
|
|
34
|
+
/** @description 触发某个键名的所有回调函数,适用于同时监听了多个值的场景,用于切换要显示的值,或者延迟在特定时机通知监听器
|
|
35
|
+
* @param key 要触发的键名
|
|
36
|
+
* @returns 触发的键值
|
|
37
|
+
*/
|
|
38
|
+
updateFake<K extends keyof T>(key: K): T[K];
|
|
39
|
+
/** @description 数字类型的键值累加或累减
|
|
40
|
+
* @param key 要累加或累减的键
|
|
41
|
+
* @param type 要累加还是要累减
|
|
42
|
+
* @param value 要累加或累减的值
|
|
43
|
+
* @param immediately 是否立即通知监听器
|
|
44
|
+
*/
|
|
45
|
+
setNumberValue<K extends keyof T>(key: K, type: "add" | "sub", value?: number, immediately?: boolean): number;
|
|
46
|
+
/** @description 针对布尔类型的键值取反
|
|
47
|
+
* @param key 要取反的键
|
|
48
|
+
* @param immediately 是否立即通知监听器
|
|
49
|
+
*/
|
|
50
|
+
setBooleanValue<K extends keyof T>(key: K, immediately?: boolean): boolean;
|
|
51
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { libJsDecimal } from "../Math/LibJsDecimal";
|
|
2
|
+
/** @description 类属性监听器
|
|
3
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsClassObservable-类属性监听器
|
|
4
|
+
*/
|
|
5
|
+
export class LibJsClassObservable {
|
|
6
|
+
/**
|
|
7
|
+
* @param initialData 监听的数据
|
|
8
|
+
*/
|
|
9
|
+
constructor(initialData) {
|
|
10
|
+
/** 监听器 */
|
|
11
|
+
this.listeners = new Map();
|
|
12
|
+
/** 监听函数索引ID */
|
|
13
|
+
this.index = 0;
|
|
14
|
+
this.data = Object.assign({}, initialData);
|
|
15
|
+
}
|
|
16
|
+
/** @description 获取值、
|
|
17
|
+
* @param key 要获取的键
|
|
18
|
+
* @returns 对应的值
|
|
19
|
+
*/
|
|
20
|
+
getValue(key) {
|
|
21
|
+
return this.data[key];
|
|
22
|
+
}
|
|
23
|
+
/** @description 设置值
|
|
24
|
+
* @param key 要设置的键
|
|
25
|
+
* @param value 要设置的值
|
|
26
|
+
* @param immediately 是否立即通知监听器
|
|
27
|
+
* @returns 设置后的值
|
|
28
|
+
*/
|
|
29
|
+
setValue(key, value, immediately = true) {
|
|
30
|
+
var _a;
|
|
31
|
+
const oldValue = this.data[key];
|
|
32
|
+
if (oldValue === value)
|
|
33
|
+
return value;
|
|
34
|
+
this.data[key] = value;
|
|
35
|
+
immediately &&
|
|
36
|
+
((_a = this.listeners.get(key)) === null || _a === void 0 ? void 0 : _a.forEach((fn) => fn(value, oldValue)));
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
/** @description 监听值
|
|
40
|
+
* @param key 要监听的键
|
|
41
|
+
* @param callback 回调函数
|
|
42
|
+
* @param immediately 是否立即触发一次回调函数
|
|
43
|
+
* @returns 取消监听的函数
|
|
44
|
+
*/
|
|
45
|
+
onValue(key, callback, immediately = true) {
|
|
46
|
+
const id = this.index++;
|
|
47
|
+
if (!this.listeners.has(key)) {
|
|
48
|
+
this.listeners.set(key, new Map());
|
|
49
|
+
}
|
|
50
|
+
this.listeners.get(key).set(id, callback);
|
|
51
|
+
immediately && callback(this.data[key], this.data[key]);
|
|
52
|
+
return () => {
|
|
53
|
+
this.listeners.get(key).delete(id);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** @description 触发某个键名的所有回调函数,适用于同时监听了多个值的场景,用于切换要显示的值,或者延迟在特定时机通知监听器
|
|
57
|
+
* @param key 要触发的键名
|
|
58
|
+
* @returns 触发的键值
|
|
59
|
+
*/
|
|
60
|
+
updateFake(key) {
|
|
61
|
+
var _a;
|
|
62
|
+
const value = this.data[key];
|
|
63
|
+
(_a = this.listeners.get(key)) === null || _a === void 0 ? void 0 : _a.forEach((fn) => fn(value, value));
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
/** @description 数字类型的键值累加或累减
|
|
67
|
+
* @param key 要累加或累减的键
|
|
68
|
+
* @param type 要累加还是要累减
|
|
69
|
+
* @param value 要累加或累减的值
|
|
70
|
+
* @param immediately 是否立即通知监听器
|
|
71
|
+
*/
|
|
72
|
+
setNumberValue(key, type, value = 1, immediately = true) {
|
|
73
|
+
let v;
|
|
74
|
+
if (type === "add") {
|
|
75
|
+
v = libJsDecimal(this.data[key], value, "+");
|
|
76
|
+
this.setValue(key, v, immediately);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
v = libJsDecimal(this.data[key], value, "-");
|
|
80
|
+
this.setValue(key, v, immediately);
|
|
81
|
+
}
|
|
82
|
+
return v;
|
|
83
|
+
}
|
|
84
|
+
/** @description 针对布尔类型的键值取反
|
|
85
|
+
* @param key 要取反的键
|
|
86
|
+
* @param immediately 是否立即通知监听器
|
|
87
|
+
*/
|
|
88
|
+
setBooleanValue(key, immediately = true) {
|
|
89
|
+
const v = !this.data[key];
|
|
90
|
+
this.setValue(key, v, immediately);
|
|
91
|
+
return v;
|
|
92
|
+
}
|
|
93
|
+
}
|
package/Misc/LibJsEmitter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** @description
|
|
2
|
-
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter
|
|
1
|
+
/** @description 事件发射器
|
|
2
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件发射器
|
|
3
3
|
*/
|
|
4
4
|
export declare const LibJsEmitter: <T extends Record<string, any>>() => {
|
|
5
5
|
on: <K extends keyof T>(event: K, listener: T[K] extends any[] ? (...args: T[K]) => void : (arg: T[K]) => void) => void;
|
package/Misc/LibJsEmitter.js
CHANGED
package/README.md
CHANGED
|
@@ -81,6 +81,8 @@ console.log(t); //"string"
|
|
|
81
81
|
|
|
82
82
|
\- [LibJsObjToUrlParams-对象转Url参数](#LibJsObjToUrlParams-对象转Url参数)
|
|
83
83
|
|
|
84
|
+
\- [LibJsCopy-复制文本到剪贴板](#LibJsCopy-复制文本到剪贴板)
|
|
85
|
+
|
|
84
86
|
|
|
85
87
|
### Data-数据
|
|
86
88
|
|
|
@@ -145,7 +147,9 @@ console.log(t); //"string"
|
|
|
145
147
|
|
|
146
148
|
\- [LibJsNumberStepper-数字步进器](#LibJsNumberStepper-数字步进器)
|
|
147
149
|
|
|
148
|
-
\- [LibJsEmitter
|
|
150
|
+
\- [LibJsEmitter-事件发射器](#LibJsEmitter-事件发射器)
|
|
151
|
+
|
|
152
|
+
\- [LibJsClassObservable-类属性监听器](#LibJsClassObservable-类属性监听器)
|
|
149
153
|
|
|
150
154
|
|
|
151
155
|
### Random-随机
|
|
@@ -262,6 +266,14 @@ libJsObjToParams({ name: "John", age: 30, active: true });
|
|
|
262
266
|
// "name=John&age=30&active=true"
|
|
263
267
|
```
|
|
264
268
|
|
|
269
|
+
### LibJsCopy-复制文本到剪贴板
|
|
270
|
+
|
|
271
|
+
> 内部做了兼容
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
libJsCopy("Hello World!")
|
|
275
|
+
```
|
|
276
|
+
|
|
265
277
|
## Data-数据
|
|
266
278
|
|
|
267
279
|
### LibJsChunkArray-数组拆分
|
|
@@ -565,7 +577,7 @@ stepper.updateIndex(5); // 更新索引为5
|
|
|
565
577
|
stepper.down("sub"); // 索引减1
|
|
566
578
|
```
|
|
567
579
|
|
|
568
|
-
### LibJsEmitter
|
|
580
|
+
### LibJsEmitter-事件发射器
|
|
569
581
|
|
|
570
582
|
> 发布-订阅模式
|
|
571
583
|
|
|
@@ -592,6 +604,54 @@ $bus.off("play");
|
|
|
592
604
|
$bus.off("stop");
|
|
593
605
|
```
|
|
594
606
|
|
|
607
|
+
### LibJsClassObservable-类属性监听器
|
|
608
|
+
|
|
609
|
+
> 监听`class`的属性值更改
|
|
610
|
+
|
|
611
|
+
```ts
|
|
612
|
+
import { LibJsClassObservable } from "@/utils/LibJsClassObservable";
|
|
613
|
+
|
|
614
|
+
interface Static {
|
|
615
|
+
/** 用户ID */
|
|
616
|
+
userID: number;
|
|
617
|
+
/** 是否为学生 */
|
|
618
|
+
sdutent: boolean;
|
|
619
|
+
/** 年龄 */
|
|
620
|
+
age: number;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/** @description 静态数据 */
|
|
624
|
+
export class DataStore extends LibJsClassObservable<Static> {
|
|
625
|
+
constructor() {
|
|
626
|
+
super({
|
|
627
|
+
userID: 0,
|
|
628
|
+
sdutent: true,
|
|
629
|
+
age: 18,
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
const dataStore = new DataStore()
|
|
635
|
+
|
|
636
|
+
//获取
|
|
637
|
+
const userID = dataStore.getValue("userID"); //0
|
|
638
|
+
|
|
639
|
+
//更改
|
|
640
|
+
const userID = dataStore.setValue("userID", 1); //1
|
|
641
|
+
|
|
642
|
+
//Boolean 类型取反
|
|
643
|
+
const stdutent = dataStore.setBooleanValue("sdutent"); //false
|
|
644
|
+
|
|
645
|
+
//数字类型累加
|
|
646
|
+
const stdutent = dataStore.setNumberValue("age"); //19
|
|
647
|
+
|
|
648
|
+
//手动触发指定属性监听的所有回调,配合 setValue 第三参数为false,即不自动触发监听的时候,可手动触发
|
|
649
|
+
dataStore.setValue("userID", 3, false);
|
|
650
|
+
setTimeout(()=>{
|
|
651
|
+
dataStore.updateFake("userID");
|
|
652
|
+
}, 1000)
|
|
653
|
+
```
|
|
654
|
+
|
|
595
655
|
## Random-随机
|
|
596
656
|
|
|
597
657
|
### LibJsProbabilityResult-概率触发
|
package/libJs.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LibJsNumberStepper } from "./Misc/LibJsNumberStepper";
|
|
2
|
+
import { LibJsClassObservable } from "./Misc/LibJsClassObservable";
|
|
2
3
|
/** @description 基础方法 */
|
|
3
4
|
export declare const Base: {
|
|
4
5
|
/**
|
|
@@ -56,6 +57,11 @@ export declare const Browser: {
|
|
|
56
57
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsObjToUrlParams-对象转Url参数
|
|
57
58
|
*/
|
|
58
59
|
libJsObjToUrlParams: (params: Record<string, string | number | boolean>) => string;
|
|
60
|
+
/** @description 复制文本到剪贴板
|
|
61
|
+
* @param text 要复制的文本
|
|
62
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#libJsCopy-复制文本到剪贴板
|
|
63
|
+
*/
|
|
64
|
+
libJsCopy: (text: string) => void;
|
|
59
65
|
};
|
|
60
66
|
/** @description 数据相关方法 */
|
|
61
67
|
export declare const Data: {
|
|
@@ -243,14 +249,6 @@ export declare const Misc: {
|
|
|
243
249
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNumberStepper-数字步进器
|
|
244
250
|
*/
|
|
245
251
|
LibJsNumberStepper: typeof LibJsNumberStepper;
|
|
246
|
-
/** @description 事件管理器
|
|
247
|
-
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件管理器
|
|
248
|
-
*/
|
|
249
|
-
LibJsEmitter: <T extends Record<string, any>>() => {
|
|
250
|
-
on: <K extends keyof T>(event: K, listener: T[K] extends any[] ? (...args: T[K]) => void : (arg: T[K]) => void) => void;
|
|
251
|
-
emit: <K extends keyof T>(event: K, ...args: T[K] extends any[] ? T[K] : [T[K]]) => void;
|
|
252
|
-
off: <K extends keyof T>(event: K, listener?: T[K] extends any[] ? (...args: T[K]) => void : (arg: T[K]) => void) => void;
|
|
253
|
-
};
|
|
254
252
|
/** @description 线性插值
|
|
255
253
|
* @param start 当 value = 0 时,返回 start
|
|
256
254
|
* @param end 当 value = 1 时,返回 end
|
|
@@ -265,6 +263,18 @@ export declare const Misc: {
|
|
|
265
263
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNormalizeInRange-范围归一化
|
|
266
264
|
*/
|
|
267
265
|
LibJsNormalizeInRange: (start: number, end: number, value: number) => number;
|
|
266
|
+
/** @description 事件发射器
|
|
267
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件发射器
|
|
268
|
+
*/
|
|
269
|
+
LibJsEmitter: <T extends Record<string, any>>() => {
|
|
270
|
+
on: <K extends keyof T>(event: K, listener: T[K] extends any[] ? (...args: T[K]) => void : (arg: T[K]) => void) => void;
|
|
271
|
+
emit: <K extends keyof T>(event: K, ...args: T[K] extends any[] ? T[K] : [T[K]]) => void;
|
|
272
|
+
off: <K extends keyof T>(event: K, listener?: T[K] extends any[] ? (...args: T[K]) => void : (arg: T[K]) => void) => void;
|
|
273
|
+
};
|
|
274
|
+
/** @description 类属性监听器
|
|
275
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsClassObservable-类属性监听器
|
|
276
|
+
*/
|
|
277
|
+
LibJsClassObservable: typeof LibJsClassObservable;
|
|
268
278
|
};
|
|
269
279
|
/** @description 随机相关方法 */
|
|
270
280
|
export declare const Random: {
|
package/libJs.js
CHANGED
|
@@ -39,7 +39,9 @@ import { libJsSecondsFormatterChinese } from "./Formatter/LibJsSecondsFormatterC
|
|
|
39
39
|
import { libJsCalculateExpression } from "./Math/LibJsCalculateExpression";
|
|
40
40
|
import { LibJsEmitter } from "./Misc/LibJsEmitter";
|
|
41
41
|
import { LibJsLerp } from "./Math/LibJsLerp";
|
|
42
|
-
import { LibJsNormalizeInRange } from
|
|
42
|
+
import { LibJsNormalizeInRange } from "./Math/LibJsNormalizeInRange";
|
|
43
|
+
import { LibJsClassObservable } from "./Misc/LibJsClassObservable";
|
|
44
|
+
import { libJsCopy } from "./Browser/LibJsCopy";
|
|
43
45
|
/** @description 基础方法 */
|
|
44
46
|
export const Base = {
|
|
45
47
|
/**
|
|
@@ -94,6 +96,11 @@ export const Browser = {
|
|
|
94
96
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsObjToUrlParams-对象转Url参数
|
|
95
97
|
*/
|
|
96
98
|
libJsObjToUrlParams,
|
|
99
|
+
/** @description 复制文本到剪贴板
|
|
100
|
+
* @param text 要复制的文本
|
|
101
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#libJsCopy-复制文本到剪贴板
|
|
102
|
+
*/
|
|
103
|
+
libJsCopy,
|
|
97
104
|
};
|
|
98
105
|
/** @description 数据相关方法 */
|
|
99
106
|
export const Data = {
|
|
@@ -258,10 +265,6 @@ export const Misc = {
|
|
|
258
265
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNumberStepper-数字步进器
|
|
259
266
|
*/
|
|
260
267
|
LibJsNumberStepper,
|
|
261
|
-
/** @description 事件管理器
|
|
262
|
-
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件管理器
|
|
263
|
-
*/
|
|
264
|
-
LibJsEmitter,
|
|
265
268
|
/** @description 线性插值
|
|
266
269
|
* @param start 当 value = 0 时,返回 start
|
|
267
270
|
* @param end 当 value = 1 时,返回 end
|
|
@@ -276,6 +279,14 @@ export const Misc = {
|
|
|
276
279
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNormalizeInRange-范围归一化
|
|
277
280
|
*/
|
|
278
281
|
LibJsNormalizeInRange,
|
|
282
|
+
/** @description 事件发射器
|
|
283
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件发射器
|
|
284
|
+
*/
|
|
285
|
+
LibJsEmitter,
|
|
286
|
+
/** @description 类属性监听器
|
|
287
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsClassObservable-类属性监听器
|
|
288
|
+
*/
|
|
289
|
+
LibJsClassObservable,
|
|
279
290
|
};
|
|
280
291
|
/** @description 随机相关方法 */
|
|
281
292
|
export const Random = {
|
package/lyb.js
CHANGED
|
@@ -3405,6 +3405,108 @@ ${log3.label}:`, log3.value];
|
|
|
3405
3405
|
const LibJsNormalizeInRange = (start, end, value) => {
|
|
3406
3406
|
return Math.max(0, Math.min((start - value) / (start - end), 1));
|
|
3407
3407
|
};
|
|
3408
|
+
class LibJsClassObservable {
|
|
3409
|
+
/**
|
|
3410
|
+
* @param initialData 监听的数据
|
|
3411
|
+
*/
|
|
3412
|
+
constructor(initialData) {
|
|
3413
|
+
this.listeners = /* @__PURE__ */ new Map();
|
|
3414
|
+
this.index = 0;
|
|
3415
|
+
this.data = { ...initialData };
|
|
3416
|
+
}
|
|
3417
|
+
/** @description 获取值、
|
|
3418
|
+
* @param key 要获取的键
|
|
3419
|
+
* @returns 对应的值
|
|
3420
|
+
*/
|
|
3421
|
+
getValue(key) {
|
|
3422
|
+
return this.data[key];
|
|
3423
|
+
}
|
|
3424
|
+
/** @description 设置值
|
|
3425
|
+
* @param key 要设置的键
|
|
3426
|
+
* @param value 要设置的值
|
|
3427
|
+
* @param immediately 是否立即通知监听器
|
|
3428
|
+
* @returns 设置后的值
|
|
3429
|
+
*/
|
|
3430
|
+
setValue(key, value, immediately = true) {
|
|
3431
|
+
var _a;
|
|
3432
|
+
const oldValue = this.data[key];
|
|
3433
|
+
if (oldValue === value)
|
|
3434
|
+
return value;
|
|
3435
|
+
this.data[key] = value;
|
|
3436
|
+
immediately && ((_a = this.listeners.get(key)) == null ? void 0 : _a.forEach((fn) => fn(value, oldValue)));
|
|
3437
|
+
return value;
|
|
3438
|
+
}
|
|
3439
|
+
/** @description 监听值
|
|
3440
|
+
* @param key 要监听的键
|
|
3441
|
+
* @param callback 回调函数
|
|
3442
|
+
* @param immediately 是否立即触发一次回调函数
|
|
3443
|
+
* @returns 取消监听的函数
|
|
3444
|
+
*/
|
|
3445
|
+
onValue(key, callback, immediately = true) {
|
|
3446
|
+
const id = this.index++;
|
|
3447
|
+
if (!this.listeners.has(key)) {
|
|
3448
|
+
this.listeners.set(key, /* @__PURE__ */ new Map());
|
|
3449
|
+
}
|
|
3450
|
+
this.listeners.get(key).set(id, callback);
|
|
3451
|
+
immediately && callback(this.data[key], this.data[key]);
|
|
3452
|
+
return () => {
|
|
3453
|
+
this.listeners.get(key).delete(id);
|
|
3454
|
+
};
|
|
3455
|
+
}
|
|
3456
|
+
/** @description 触发某个键名的所有回调函数,适用于同时监听了多个值的场景,用于切换要显示的值,或者延迟在特定时机通知监听器
|
|
3457
|
+
* @param key 要触发的键名
|
|
3458
|
+
* @returns 触发的键值
|
|
3459
|
+
*/
|
|
3460
|
+
updateFake(key) {
|
|
3461
|
+
var _a;
|
|
3462
|
+
const value = this.data[key];
|
|
3463
|
+
(_a = this.listeners.get(key)) == null ? void 0 : _a.forEach((fn) => fn(value, value));
|
|
3464
|
+
return value;
|
|
3465
|
+
}
|
|
3466
|
+
/** @description 数字类型的键值累加或累减
|
|
3467
|
+
* @param key 要累加或累减的键
|
|
3468
|
+
* @param type 要累加还是要累减
|
|
3469
|
+
* @param value 要累加或累减的值
|
|
3470
|
+
* @param immediately 是否立即通知监听器
|
|
3471
|
+
*/
|
|
3472
|
+
setNumberValue(key, type, value = 1, immediately = true) {
|
|
3473
|
+
let v;
|
|
3474
|
+
if (type === "add") {
|
|
3475
|
+
v = libJsDecimal(this.data[key], value, "+");
|
|
3476
|
+
this.setValue(key, v, immediately);
|
|
3477
|
+
} else {
|
|
3478
|
+
v = libJsDecimal(this.data[key], value, "-");
|
|
3479
|
+
this.setValue(key, v, immediately);
|
|
3480
|
+
}
|
|
3481
|
+
return v;
|
|
3482
|
+
}
|
|
3483
|
+
/** @description 针对布尔类型的键值取反
|
|
3484
|
+
* @param key 要取反的键
|
|
3485
|
+
* @param immediately 是否立即通知监听器
|
|
3486
|
+
*/
|
|
3487
|
+
setBooleanValue(key, immediately = true) {
|
|
3488
|
+
const v = !this.data[key];
|
|
3489
|
+
this.setValue(key, v, immediately);
|
|
3490
|
+
return v;
|
|
3491
|
+
}
|
|
3492
|
+
}
|
|
3493
|
+
const fallbackCopy = (text) => {
|
|
3494
|
+
const textarea = document.createElement("textarea");
|
|
3495
|
+
textarea.value = text;
|
|
3496
|
+
textarea.style.position = "fixed";
|
|
3497
|
+
textarea.style.opacity = "0";
|
|
3498
|
+
document.body.appendChild(textarea);
|
|
3499
|
+
textarea.select();
|
|
3500
|
+
document.execCommand("copy");
|
|
3501
|
+
document.body.removeChild(textarea);
|
|
3502
|
+
};
|
|
3503
|
+
const libJsCopy = (text) => {
|
|
3504
|
+
if (navigator.clipboard) {
|
|
3505
|
+
navigator.clipboard.writeText(text).catch(() => fallbackCopy(text));
|
|
3506
|
+
} else {
|
|
3507
|
+
fallbackCopy(text);
|
|
3508
|
+
}
|
|
3509
|
+
};
|
|
3408
3510
|
const Base = {
|
|
3409
3511
|
/**
|
|
3410
3512
|
* @description 返回数据类型
|
|
@@ -3456,7 +3558,12 @@ ${log3.label}:`, log3.value];
|
|
|
3456
3558
|
* @param params 对象参数
|
|
3457
3559
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsObjToUrlParams-对象转Url参数
|
|
3458
3560
|
*/
|
|
3459
|
-
libJsObjToUrlParams
|
|
3561
|
+
libJsObjToUrlParams,
|
|
3562
|
+
/** @description 复制文本到剪贴板
|
|
3563
|
+
* @param text 要复制的文本
|
|
3564
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#libJsCopy-复制文本到剪贴板
|
|
3565
|
+
*/
|
|
3566
|
+
libJsCopy
|
|
3460
3567
|
};
|
|
3461
3568
|
const Data = {
|
|
3462
3569
|
/**
|
|
@@ -3616,10 +3723,6 @@ ${log3.label}:`, log3.value];
|
|
|
3616
3723
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNumberStepper-数字步进器
|
|
3617
3724
|
*/
|
|
3618
3725
|
LibJsNumberStepper,
|
|
3619
|
-
/** @description 事件管理器
|
|
3620
|
-
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件管理器
|
|
3621
|
-
*/
|
|
3622
|
-
LibJsEmitter,
|
|
3623
3726
|
/** @description 线性插值
|
|
3624
3727
|
* @param start 当 value = 0 时,返回 start
|
|
3625
3728
|
* @param end 当 value = 1 时,返回 end
|
|
@@ -3633,7 +3736,15 @@ ${log3.label}:`, log3.value];
|
|
|
3633
3736
|
* @param value 动态值
|
|
3634
3737
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNormalizeInRange-范围归一化
|
|
3635
3738
|
*/
|
|
3636
|
-
LibJsNormalizeInRange
|
|
3739
|
+
LibJsNormalizeInRange,
|
|
3740
|
+
/** @description 事件发射器
|
|
3741
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsEmitter-事件发射器
|
|
3742
|
+
*/
|
|
3743
|
+
LibJsEmitter,
|
|
3744
|
+
/** @description 类属性监听器
|
|
3745
|
+
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsClassObservable-类属性监听器
|
|
3746
|
+
*/
|
|
3747
|
+
LibJsClassObservable
|
|
3637
3748
|
};
|
|
3638
3749
|
const Random = {
|
|
3639
3750
|
/** @description 百分比概率结果
|