@polyv/utils-dom 3.0.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.
@@ -0,0 +1,27 @@
1
+ import { DOMWrapMember } from './types';
2
+ import { EventWrap } from './event-wrap';
3
+ /**
4
+ * Get first set all 操作中,设置值的函数。
5
+ */
6
+ export interface IValueFunction<T> {
7
+ (this: DOMWrapMember, node: DOMWrapMember, value: T, index: number): T;
8
+ }
9
+ /**
10
+ * 事件监听回调函数。
11
+ */
12
+ export interface IEventHandler {
13
+ (this: EventTarget, evt: EventWrap): unknown;
14
+ }
15
+ /**
16
+ * 表示元素在页面中的位置。
17
+ */
18
+ export interface IPosition {
19
+ /**
20
+ * 与页面上边界的距离。
21
+ */
22
+ top: number;
23
+ /**
24
+ * 与页面左边界的距离。
25
+ */
26
+ left: number;
27
+ }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * 为 DOM 节点提供数据空间。
3
+ * @packageDocumentation
4
+ * @internal
5
+ */
6
+ /**
7
+ * 数据空间复制回调原型。
8
+ */
9
+ interface ICloneCallback {
10
+ (this: DataSpace, target: unknown, source: unknown): void;
11
+ }
12
+ /**
13
+ * 数据空间类选项。
14
+ */
15
+ export interface IDataSpaceOptions {
16
+ /**
17
+ * 是否可被复制。
18
+ */
19
+ cloneable?: boolean;
20
+ /**
21
+ * 复制时的回调。
22
+ */
23
+ onClone?: ICloneCallback;
24
+ }
25
+ /**
26
+ * 数据空间类。
27
+ */
28
+ export declare class DataSpace {
29
+ /**
30
+ * 内部存储空间。
31
+ */
32
+ protected readonly _space: {
33
+ [key: string]: {
34
+ [key: string]: unknown;
35
+ };
36
+ };
37
+ /**
38
+ * 是否可被复制。
39
+ */
40
+ protected readonly _cloneable: boolean;
41
+ /**
42
+ * 克隆时的回调。
43
+ */
44
+ protected readonly _onClone: ICloneCallback | undefined;
45
+ /**
46
+ * 构造函数。
47
+ * @param options 选项。
48
+ */
49
+ constructor(options?: IDataSpaceOptions);
50
+ /**
51
+ * 返回指定对象的数据空间。
52
+ * @param obj 指定对象。
53
+ * @returns 指定对象的数据空间。
54
+ */
55
+ protected findSpace(obj: unknown): {
56
+ [key: string]: unknown;
57
+ } | undefined;
58
+ /**
59
+ * 获取指定对象的所有数据项名。
60
+ * @param obj 指定对象。
61
+ * @returns 指定对象的所有数据项名。
62
+ */
63
+ keys(obj: unknown): string[];
64
+ /**
65
+ * 获取指定对象特定数据项的值。
66
+ * @param obj 指定对象。
67
+ * @param key 数据项的键。
68
+ * @returns 数据项的值。
69
+ */
70
+ getData(obj: unknown, key: string): unknown;
71
+ /**
72
+ * 设置指定对象特定数据项的值。
73
+ * @param obj 指定对象。
74
+ * @param key 数据项的键。
75
+ * @param value 数据项的值。
76
+ */
77
+ setData(obj: unknown, key: string, value: unknown): void;
78
+ /**
79
+ * 清理指定对象的数据空间。
80
+ * @param obj 指定对象。
81
+ */
82
+ clearData(obj: unknown): void;
83
+ /**
84
+ * 删除指定对象特定数据项。
85
+ * @param obj 指定对象。
86
+ * @param key 数据项的键。
87
+ */
88
+ removeData(obj: unknown, key: string): void;
89
+ /**
90
+ * 把源对象的数据项复制到目标对象。
91
+ * @param target 源对象。
92
+ * @param source 目标对象。
93
+ */
94
+ cloneData(target: unknown, source: unknown): void;
95
+ }
96
+ export {};
@@ -0,0 +1,35 @@
1
+ import { DOMWrapMember } from '../types';
2
+ /**
3
+ * 获取指定节点特性值。
4
+ * @param node 指定节点。
5
+ * @param name 特性名。
6
+ * @returns 特性值。
7
+ */
8
+ export declare function getProp(node: DOMWrapMember, name: string): unknown;
9
+ /**
10
+ * 设置指定节点特性值。
11
+ * @param element 指定节点。
12
+ * @param name 特性名。
13
+ * @param value 特性值。
14
+ */
15
+ export declare function setProp(node: DOMWrapMember, name: string, value: unknown): void;
16
+ /**
17
+ * 获取指定节点的属性值。
18
+ * @param node 指定节点。
19
+ * @param name 属性名。
20
+ * @returns 属性值。
21
+ */
22
+ export declare function getAttr(node: DOMWrapMember, name: string): string;
23
+ /**
24
+ * 移除指定节点的属性。
25
+ * @param nodes 指定节点。
26
+ * @param names 属性名。
27
+ */
28
+ export declare function removeAttr(nodes: ArrayLike<DOMWrapMember>, names: string | string[]): void;
29
+ /**
30
+ * 设置指定节点的属性值。
31
+ * @param node 指定节点。
32
+ * @param name 属性名。
33
+ * @param value 属性值。
34
+ */
35
+ export declare function setAttr(node: DOMWrapMember, name: string, value: string | boolean): void;
@@ -0,0 +1,77 @@
1
+ import { DOMWrapMember } from '../types';
2
+ import { IValueFunction } from '../interfaces';
3
+ /**
4
+ * 检查指定对象是否 window 对象。
5
+ * @param obj 指定对象。
6
+ * @returns `obj` 是否 window 对象。
7
+ */
8
+ export declare function isWindow(obj: any): obj is Window;
9
+ /**
10
+ * 检查指定对象是否 DOM 节点。
11
+ * @param obj 指定对象。
12
+ * @returns `obj` 是否 DOM 节点。
13
+ */
14
+ export declare function isNode(obj: any): obj is Node;
15
+ /**
16
+ * 检查指定对象是否 Document 节点。
17
+ * @param obj 指定对象。
18
+ * @returns `obj` 是否 Document 节点。
19
+ */
20
+ export declare function isDocument(obj: any): obj is Document;
21
+ /**
22
+ * 检查指定对象是否 HTML 元素节点。
23
+ * @param obj 指定对象。
24
+ * @returns `obj` 是否 HTML 元素节点。
25
+ */
26
+ export declare function isHTMLElement(obj: any): obj is HTMLElement;
27
+ /**
28
+ * 获取节点所在的 window。
29
+ * @param node 节点。
30
+ * @returns 节点所在的 window。如果不存在,则返回 null。
31
+ */
32
+ export declare function getWindow(node: DOMWrapMember | null | undefined): Window | null;
33
+ /**
34
+ * 把指定字符串以一个或多个空格为分隔符分割为数组。
35
+ * @param str 指定字符串(如果传入数组,则不执行分割)。
36
+ * @returns 字符串数组。
37
+ */
38
+ export declare function splitBySpace(str: string | string[] | null | undefined): string[];
39
+ /**
40
+ * 指定数组中的节点为 HTML 元素时才执行指定函数。
41
+ * @param nodes 指定节点数组。
42
+ * @param fn 指定函数。
43
+ */
44
+ export declare function ifIsHTMLElement(nodes: ArrayLike<DOMWrapMember>, fn: (elem: HTMLElement) => void): void;
45
+ /**
46
+ * 指定节点为 HTML 元素时才执行指定函数。
47
+ * @param node 指定节点。
48
+ * @param fn 指定函数。
49
+ * @returns 指定函数的返回值。
50
+ */
51
+ export declare function ifIsHTMLElement(node: DOMWrapMember, fn: (elem: HTMLElement) => unknown): unknown;
52
+ /**
53
+ * Get First Set All 访问器接口定义。
54
+ */
55
+ interface IAccessor<T> {
56
+ get: (this: ArrayLike<DOMWrapMember>, node: DOMWrapMember, key: string) => T;
57
+ set: (this: ArrayLike<DOMWrapMember>, node: DOMWrapMember, key: string, value: T) => void;
58
+ }
59
+ /**
60
+ * Get First Set All 机制的核心函数。
61
+ * @param nodes 被访问节点。
62
+ * @param key 键名或键值对。为键值对时,则对每一对键值递归调用本函数。
63
+ * @param value 值。如果为 undefined,则为 get first 操作,否则为 set all 操作。
64
+ * @param isExec 当 value 为函数时,是否执行函数并以函数返回值作为最终值。
65
+ * @param accessor 访问器。
66
+ * @returns Get first 操作返回第一个节点键名对应的值;Set all 操作返回被访问节点。
67
+ */
68
+ export declare function access<T>(nodes: ArrayLike<DOMWrapMember>, key: string | {
69
+ [key: string]: T | IValueFunction<T>;
70
+ }, value: any, isExec: boolean | undefined, accessor: IAccessor<T>): any;
71
+ /**
72
+ * 对指定节点数组进行排序,并过滤重复节点。
73
+ * @param nodes 指定节点数组。
74
+ * @returns 有序且无重复节点的节点数组。
75
+ */
76
+ export declare function uniqueSort<T>(nodes: T[]): T[];
77
+ export {};
@@ -0,0 +1,26 @@
1
+ import { DOMWrapMember } from '../types';
2
+ /**
3
+ * 判断指定节点是否包含指定样式类。
4
+ * @param node 指定节点。
5
+ * @param className 样式类。
6
+ * @returns 指定节点是否包含指定样式类。
7
+ */
8
+ export declare function hasClass(node: DOMWrapMember, className: string): boolean;
9
+ /**
10
+ * 给指定节点添加样式类。
11
+ * @param nodes 指定节点。
12
+ * @param classNames 样式类。
13
+ */
14
+ export declare function addClass(nodes: ArrayLike<DOMWrapMember>, classNames: string | string[]): void;
15
+ /**
16
+ * 移除指定节点样式类。
17
+ * @param nodes 指定节点。
18
+ * @param classNames 样式类。不传时移除所有样式类。
19
+ */
20
+ export declare function removeClass(nodes: ArrayLike<DOMWrapMember>, classNames?: string | string[]): void;
21
+ /**
22
+ * 如果指定节点包含指定样式类,则移除;如果指定节点不包含指定样式类,则添加。
23
+ * @param nodes 指定节点。
24
+ * @param classNames 样式类。
25
+ */
26
+ export declare function toggleClass(nodes: ArrayLike<DOMWrapMember>, classNames: string | string[]): void;
@@ -0,0 +1,43 @@
1
+ import { DataSpace, IDataSpaceOptions } from './data-space';
2
+ /**
3
+ * 创建数据空间。
4
+ * @param options 空间配置。
5
+ * @returns 数据空间对象。
6
+ */
7
+ export declare function createDataSpace(options?: Readonly<IDataSpaceOptions>): DataSpace;
8
+ /**
9
+ * 清空指定对象在所有数据空间的数据。
10
+ * @param obj 指定对象。
11
+ */
12
+ export declare function clearAll(obj: unknown): void;
13
+ /**
14
+ * 克隆指定对象在所有数据空间的数据。
15
+ * @param target 目标对象。
16
+ * @param source 源对象。
17
+ */
18
+ export declare function cloneAll(target: unknown, source: unknown): void;
19
+ /**
20
+ * 获取指定对象的自定义数据项值。
21
+ * @param obj 指定对象。
22
+ * @param key 数据项名。
23
+ * @returns 数据项值。
24
+ */
25
+ export declare function getData(obj: unknown, key: string): unknown;
26
+ /**
27
+ * 设置指定对象的自定义数据项。
28
+ * @param elem 指定对象。
29
+ * @param key 数据项名。
30
+ * @param value 数据项值。
31
+ */
32
+ export declare function setData(obj: unknown, key: string, value: unknown): void;
33
+ /**
34
+ * 移除指定对象的自定义数据项。
35
+ * @param list 指定对象的数组。
36
+ * @param keys 数据项名。
37
+ */
38
+ export declare function removeData(list: ArrayLike<unknown>, keys: string | string[]): void;
39
+ /**
40
+ * 移除指定对象的所有自定义数据项。
41
+ * @param list 指定对象的数组。
42
+ */
43
+ export declare function clearData(list: ArrayLike<unknown>): void;
@@ -0,0 +1,24 @@
1
+ import { DOMWrapMember } from '../types';
2
+ import { IEventHandler } from '../interfaces';
3
+ /**
4
+ * 给指定节点的指定事件注册监听函数。
5
+ * @param nodes 指定节点。
6
+ * @param types 事件类型。
7
+ * @param selector 代理元素的选择器。
8
+ * @param handler 回调函数。
9
+ */
10
+ export declare function onEvent(nodes: ArrayLike<DOMWrapMember>, types: string | string[], selector: string, handler?: IEventHandler): void;
11
+ /**
12
+ * 给指定节点移除指定事件的监听函数。
13
+ * @param nodes 指定节点。
14
+ * @param types 事件类型。
15
+ * @param selector 代理元素的选择器。
16
+ * @param handler 回调函数。
17
+ */
18
+ export declare function offEvent(nodes: ArrayLike<DOMWrapMember>, types?: string | string[], selector?: string, handler?: IEventHandler): void;
19
+ /**
20
+ * 触发指定节点的事件。
21
+ * @param nodes 指定节点。
22
+ * @param type 事件类型。
23
+ */
24
+ export declare function triggerEvent(nodes: ArrayLike<DOMWrapMember>, type: string): void;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 维护 DOM 节点的唯一 id。
3
+ * @packageDocumentation
4
+ * @internal
5
+ */
6
+ /**
7
+ * 获取指定元素的唯一 id。
8
+ * @param obj 指定元素。
9
+ * @param doNotSet 不存在唯一 id 时,是否不进行设置。
10
+ * @returns 唯一 id。
11
+ */
12
+ export declare function getId(obj: any, doNotSet?: boolean): number | undefined;
13
+ /**
14
+ * 移除指定元素的唯一 id。
15
+ * @param obj 指定元素。
16
+ */
17
+ export declare function removeId(obj: unknown): void;
@@ -0,0 +1,35 @@
1
+ import { DOMWrapMember, InsertTarget } from '../types';
2
+ /**
3
+ * 根据HTML创建节点。
4
+ * @param html HTML代码。
5
+ * @param ownerDocument 所属文档对象,默认为当前文档对象。
6
+ * @return 节点数组。
7
+ */
8
+ export declare function htmlToNodes(html: string, ownerDocument: Document | undefined | null): Node[];
9
+ /**
10
+ * 复制节点。
11
+ * @param elem 被复制节点。
12
+ * @param withData 是否复制节点数据。
13
+ * @param deepWithData 是否复制所有后代节点的数据。
14
+ * @returns 节点的副本。
15
+ */
16
+ export declare function cloneNode(node: Node, withData?: boolean, deepWithData?: boolean): Node;
17
+ export declare function insertToRefs(target: InsertTarget, refs: ArrayLike<DOMWrapMember>, howToInsert: (target: Node, ref: Node) => void, condition?: (node: Node) => boolean): void;
18
+ export declare function insertRefsTo(target: InsertTarget, refs: ArrayLike<DOMWrapMember>, howToInsert: (target: Node, ref: Node) => void, condition?: (node: Node) => boolean): Node[];
19
+ export declare function hasParent(node: Node): boolean;
20
+ export declare function canHasChild(node: Node): boolean;
21
+ export declare function appendChild(target: Node, parent: Node): void;
22
+ export declare function prependChild(target: Node, parent: Node): void;
23
+ export declare function insertBefore(target: Node, ref: Node): void;
24
+ export declare function insertAfter(target: Node, ref: Node): void;
25
+ export declare function replaceWith(target: Node, ref: Node): void;
26
+ /**
27
+ * 把指定节点从文档中移除,并清理所有相关数据。
28
+ * @param nodes 指定节点。
29
+ */
30
+ export declare function removeNodes(nodes: ArrayLike<DOMWrapMember>): void;
31
+ /**
32
+ * 移除指定节点的所有后代节点,并清理后代节点的相关数据。
33
+ * @param nodes 指定节点。
34
+ */
35
+ export declare function removeDescendantNodes(nodes: ArrayLike<DOMWrapMember>): void;
@@ -0,0 +1,8 @@
1
+ import { DOMWrapMember } from '../types';
2
+ import { IPosition } from '../interfaces';
3
+ /**
4
+ * 获取指定节点相对于 document 的位置。
5
+ * @param node 指定节点。
6
+ * @returns 指定节点相对于 document 的位置。
7
+ */
8
+ export declare function getOffset(node: DOMWrapMember): IPosition;
@@ -0,0 +1,16 @@
1
+ import { DOMWrapMember } from '../types';
2
+ export type ScrollDistanceType = 'scrollTop' | 'scrollLeft';
3
+ /**
4
+ * 获取指定节点的滚动距离。
5
+ * @param node 指定节点。
6
+ * @param type 滚动距离类型。
7
+ * @returns 滚动距离。
8
+ */
9
+ export declare function getScroll(node: DOMWrapMember | null, type: string): number;
10
+ /**
11
+ * 设置指定节点的滚动距离。
12
+ * @param node 指定节点。
13
+ * @param type 滚动距离类型。
14
+ * @param value 滚动距离。
15
+ */
16
+ export declare function setScroll(node: DOMWrapMember, type: string, value: number): void;
@@ -0,0 +1,11 @@
1
+ import { DOMWrapMember } from '../types';
2
+ /**
3
+ * 计算指定节点尺寸。
4
+ * @param elem 指定节点。
5
+ * @param which 尺寸维度。
6
+ * @param includePadding 是否包含 padding。
7
+ * @param includeBorder 是否包含 border。
8
+ * @param includeMargin 是否包含 margin。
9
+ * @returns 尺寸(px)。
10
+ */
11
+ export declare function computeSize(elem: DOMWrapMember, which: 'Width' | 'Height', includePadding?: boolean, includeBorder?: boolean, includeMargin?: boolean): number;
@@ -0,0 +1,25 @@
1
+ import { DOMWrapMember } from '../types';
2
+ /**
3
+ * 获取指定节点的样式属性值。
4
+ * @param node 指定节点。
5
+ * @param name 样式属性名。
6
+ * @returns 样式属性值。
7
+ */
8
+ export declare function getStyle(node: DOMWrapMember, name: string): string;
9
+ /**
10
+ * 设置指定节点的样式属性值。
11
+ * @param node 指定节点。
12
+ * @param name 样式属性名。
13
+ * @param value 样式属性值。
14
+ */
15
+ export declare function setStyle(node: DOMWrapMember, name: string, value: string | number): void;
16
+ /**
17
+ * 显示指定节点。
18
+ * @param nodes 指定节点。
19
+ */
20
+ export declare function show(nodes: ArrayLike<DOMWrapMember>): void;
21
+ /**
22
+ * 隐藏指定节点。
23
+ * @param node 指定节点。
24
+ */
25
+ export declare function hide(nodes: ArrayLike<DOMWrapMember>): void;
@@ -0,0 +1,46 @@
1
+ import { DOMWrapMember, TraversalUntil } from '../types';
2
+ /**
3
+ * 生成由上下文节点及其所有后代节点组成的数组。
4
+ * @param ctx 上下文节点。
5
+ * @returns 由上下文节点及其所有后代节点组成的数组。
6
+ */
7
+ export declare function selfAndDescendants(ctx: Node): Array<Node>;
8
+ type DOMPosition = 'nextElementSibling' | 'previousElementSibling' | 'parentNode' | 'firstElementChild';
9
+ /**
10
+ * 按照上下文元素的相对位置查找元素,直到遇到符合特定规则的元素为止。
11
+ * @param ctxNodes 上下文节点。
12
+ * @param position 相对位置。
13
+ * @param until 截止选择器或截止元素。
14
+ * @param filter 过滤选择器。不为空时仅返回符合选择器规则的元素。
15
+ */
16
+ export declare function findElementsUntil(ctxNodes: ArrayLike<DOMWrapMember>, position: DOMPosition, until?: TraversalUntil, filter?: string): HTMLElement[];
17
+ /**
18
+ * 按照上下文元素的相对位置查找节点。
19
+ * @param ctxNodes 上下文元素。
20
+ * @param position 相对位置。
21
+ * @param filter 过滤选择器。不为空时仅返回符合选择器规则的元素。
22
+ * @param onlyFirst 是否只查找每个上下文元素的第一个相对位置元素。
23
+ * @returns 查找结果。
24
+ */
25
+ export declare function findElements(ctxNodes: ArrayLike<DOMWrapMember>, position: DOMPosition, filter?: string, onlyFirst?: boolean): HTMLElement[];
26
+ /**
27
+ * 获取指定上下文节点的子节点。
28
+ * @param ctxNodes 上下文节点。
29
+ * @param selector 选择器。不为空时仅返回符合选择器规则的子节点。
30
+ * @returns 子节点数组。
31
+ */
32
+ export declare function getChildren(ctxNodes: ArrayLike<DOMWrapMember>, selector?: string): HTMLElement[];
33
+ /**
34
+ * 获取指定上下文元素的所有同级元素。
35
+ * @param ctxNodes 上下文元素。
36
+ * @param selector 选择器。不为空时仅返回符合选择器规则的同级元素。
37
+ * @returns 同级元素数组。
38
+ */
39
+ export declare function getSiblings(ctxNodes: ArrayLike<DOMWrapMember>, selector?: string): HTMLElement[];
40
+ /**
41
+ * 获取指定节点在同级元素中的序号。
42
+ * @param node 指定元素。
43
+ * @returns 位置序号。
44
+ */
45
+ export declare function getIndex(node: DOMWrapMember): number;
46
+ export {};
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@polyv/utils-dom",
3
+ "version": "3.0.0",
4
+ "description": "DOM utilities for Polyv frontend development.",
5
+ "type": "module",
6
+ "main": "./index.js",
7
+ "module": "./index.js",
8
+ "types": "./index.d.ts",
9
+ "miniprogram": "./",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./index.d.ts",
13
+ "import": "./index.js",
14
+ "require": "./index.cjs"
15
+ }
16
+ },
17
+ "sideEffects": false,
18
+ "dependencies": {
19
+ "@polyv/utils-array": "3.0.0",
20
+ "@polyv/utils-object": "3.0.0"
21
+ }
22
+ }
package/selector.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 原生选择器接口的封装。
3
+ * @packageDocumentation
4
+ */
5
+ /**
6
+ * 通过选择器和上下文匹配元素(querySelectorAll 的打补丁版)。
7
+ * @param selector 选择器。
8
+ * @param context 上下文。
9
+ * @returns 匹配到的元素。
10
+ */
11
+ export declare function querySelectorAll(selector: string, context?: HTMLElement | Document): ArrayLike<HTMLElement>;
12
+ /**
13
+ * 检查指定节点能否匹配指定选择器。
14
+ * @param node 指定节点。
15
+ * @param selector 指定选择器。
16
+ * @returns 指定节点能否匹配指定选择器。
17
+ */
18
+ export declare function matchesSelector(node: Node, selector: string): boolean;
package/types.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 类型声明。
3
+ * @packageDocumentation
4
+ */
5
+ /**
6
+ * 节点 或 Window。
7
+ */
8
+ export type DOMWrapMember = Node | Window;
9
+ /**
10
+ * 遍历 DOM 元素时的截止元素,或截止元素的选择
11
+ */
12
+ export type TraversalUntil = string | HTMLElement | Array<HTMLElement>;
13
+ /**
14
+ * 插入 DOM 节点时可接受的目标类型。
15
+ */
16
+ export type InsertTarget = string | DOMWrapMember | ArrayLike<DOMWrapMember>;