@whitesev/domutils 1.4.8 → 1.5.1
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/dist/index.amd.js +62 -13
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +62 -13
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +62 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +62 -13
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +62 -13
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +62 -13
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtilsCommonUtils.d.ts +10 -0
- package/dist/types/src/types/DOMUtilsEvent.d.ts +1 -0
- package/package.json +1 -1
- package/src/DOMUtils.ts +31 -11
- package/src/DOMUtilsCommonUtils.ts +24 -0
- package/src/types/DOMUtilsEvent.d.ts +1 -0
|
@@ -7,6 +7,16 @@ declare const DOMUtilsCommonUtils: {
|
|
|
7
7
|
* @param element
|
|
8
8
|
*/
|
|
9
9
|
isShow(element: HTMLElement): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* 获取安全的html
|
|
12
|
+
*/
|
|
13
|
+
getSafeHTML(text: string): any;
|
|
14
|
+
/**
|
|
15
|
+
* 在CSP策略下设置innerHTML
|
|
16
|
+
* @param $el 元素
|
|
17
|
+
* @param text 文本
|
|
18
|
+
*/
|
|
19
|
+
setSafeHTML($el: HTMLElement, text: string): void;
|
|
10
20
|
/**
|
|
11
21
|
* 用于显示元素并获取它的高度宽度等其它属性
|
|
12
22
|
* @param element
|
|
@@ -17,6 +17,7 @@ export type DOMUtilsCreateElementAttributesMap = {
|
|
|
17
17
|
|
|
18
18
|
export interface DOMUtils_MouseEvent {
|
|
19
19
|
click: MouseEvent | PointerEvent;
|
|
20
|
+
auxclick: PointerEvent;
|
|
20
21
|
contextmenu: MouseEvent | PointerEvent;
|
|
21
22
|
dblclick: MouseEvent | PointerEvent;
|
|
22
23
|
mousedown: MouseEvent | PointerEvent;
|
package/package.json
CHANGED
package/src/DOMUtils.ts
CHANGED
|
@@ -20,7 +20,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
20
20
|
super(option);
|
|
21
21
|
}
|
|
22
22
|
/** 版本号 */
|
|
23
|
-
version = "
|
|
23
|
+
version = "2025.3.2";
|
|
24
24
|
/**
|
|
25
25
|
* 获取元素的属性值
|
|
26
26
|
* @param element 目标元素
|
|
@@ -112,7 +112,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
112
112
|
let DOMUtilsContext = this;
|
|
113
113
|
let tempElement = DOMUtilsContext.windowApi.document.createElement(tagName);
|
|
114
114
|
if (typeof property === "string") {
|
|
115
|
-
tempElement
|
|
115
|
+
DOMUtilsContext.html(tempElement, property);
|
|
116
116
|
return tempElement;
|
|
117
117
|
}
|
|
118
118
|
if (property == null) {
|
|
@@ -123,6 +123,10 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
123
123
|
}
|
|
124
124
|
Object.keys(property).forEach((key) => {
|
|
125
125
|
let value = property[key];
|
|
126
|
+
if (key === "innerHTML") {
|
|
127
|
+
DOMUtilsContext.html(tempElement, value);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
126
130
|
(tempElement as any)[key] = value;
|
|
127
131
|
});
|
|
128
132
|
Object.keys(attributes).forEach((key) => {
|
|
@@ -424,7 +428,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
424
428
|
html = html.innerHTML;
|
|
425
429
|
}
|
|
426
430
|
if ("innerHTML" in element) {
|
|
427
|
-
element
|
|
431
|
+
DOMUtilsCommonUtils.setSafeHTML(element, html);
|
|
428
432
|
}
|
|
429
433
|
}
|
|
430
434
|
}
|
|
@@ -627,7 +631,11 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
627
631
|
if (propValue == null) {
|
|
628
632
|
return Reflect.get(element, propName);
|
|
629
633
|
} else {
|
|
630
|
-
|
|
634
|
+
if (element instanceof Element && propName === "innerHTML") {
|
|
635
|
+
DOMUtilsContext.html(element, propValue);
|
|
636
|
+
} else {
|
|
637
|
+
Reflect.set(element, propName, propValue);
|
|
638
|
+
}
|
|
631
639
|
}
|
|
632
640
|
}
|
|
633
641
|
/**
|
|
@@ -859,7 +867,10 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
859
867
|
}
|
|
860
868
|
function elementAppendChild(ele: HTMLElement, text: HTMLElement | string) {
|
|
861
869
|
if (typeof content === "string") {
|
|
862
|
-
ele.insertAdjacentHTML(
|
|
870
|
+
ele.insertAdjacentHTML(
|
|
871
|
+
"beforeend",
|
|
872
|
+
DOMUtilsCommonUtils.getSafeHTML(text as string)
|
|
873
|
+
);
|
|
863
874
|
} else {
|
|
864
875
|
ele.appendChild(text as HTMLElement);
|
|
865
876
|
}
|
|
@@ -904,7 +915,10 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
904
915
|
return;
|
|
905
916
|
}
|
|
906
917
|
if (typeof content === "string") {
|
|
907
|
-
element.insertAdjacentHTML(
|
|
918
|
+
element.insertAdjacentHTML(
|
|
919
|
+
"afterbegin",
|
|
920
|
+
DOMUtilsCommonUtils.getSafeHTML(content)
|
|
921
|
+
);
|
|
908
922
|
} else {
|
|
909
923
|
let $firstChild = element.firstChild;
|
|
910
924
|
if ($firstChild == null) {
|
|
@@ -939,7 +953,10 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
939
953
|
return;
|
|
940
954
|
}
|
|
941
955
|
if (typeof content === "string") {
|
|
942
|
-
element.insertAdjacentHTML(
|
|
956
|
+
element.insertAdjacentHTML(
|
|
957
|
+
"afterend",
|
|
958
|
+
DOMUtilsCommonUtils.getSafeHTML(content)
|
|
959
|
+
);
|
|
943
960
|
} else {
|
|
944
961
|
let $parent = element.parentElement;
|
|
945
962
|
let $nextSlibling = element.nextSibling;
|
|
@@ -976,7 +993,10 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
976
993
|
return;
|
|
977
994
|
}
|
|
978
995
|
if (typeof content === "string") {
|
|
979
|
-
element.insertAdjacentHTML(
|
|
996
|
+
element.insertAdjacentHTML(
|
|
997
|
+
"beforebegin",
|
|
998
|
+
DOMUtilsCommonUtils.getSafeHTML(content)
|
|
999
|
+
);
|
|
980
1000
|
} else {
|
|
981
1001
|
let $parent = element.parentElement;
|
|
982
1002
|
if (!$parent) {
|
|
@@ -1034,7 +1054,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1034
1054
|
});
|
|
1035
1055
|
return;
|
|
1036
1056
|
}
|
|
1037
|
-
element
|
|
1057
|
+
DOMUtilsContext.html(element, "");
|
|
1038
1058
|
}
|
|
1039
1059
|
/**
|
|
1040
1060
|
* 获取元素相对于文档的偏移坐标(加上文档的滚动条)
|
|
@@ -1476,7 +1496,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1476
1496
|
element = element as HTMLElement;
|
|
1477
1497
|
// 创建一个新的div元素,并将wrapperHTML作为其innerHTML
|
|
1478
1498
|
let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
|
|
1479
|
-
wrapper
|
|
1499
|
+
DOMUtilsContext.html(wrapper, wrapperHTML);
|
|
1480
1500
|
|
|
1481
1501
|
let wrapperFirstChild = wrapper.firstChild as HTMLElement;
|
|
1482
1502
|
// 将要包裹的元素插入目标元素前面
|
|
@@ -1663,7 +1683,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1663
1683
|
}
|
|
1664
1684
|
function parseHTMLByCreateDom() {
|
|
1665
1685
|
let tempDIV = DOMUtilsContext.windowApi.document.createElement("div");
|
|
1666
|
-
tempDIV
|
|
1686
|
+
DOMUtilsContext.html(tempDIV, html);
|
|
1667
1687
|
if (isComplete) {
|
|
1668
1688
|
return tempDIV;
|
|
1669
1689
|
} else {
|
|
@@ -14,6 +14,30 @@ const DOMUtilsCommonUtils = {
|
|
|
14
14
|
isShow(element: HTMLElement) {
|
|
15
15
|
return Boolean(element.getClientRects().length);
|
|
16
16
|
},
|
|
17
|
+
/**
|
|
18
|
+
* 获取安全的html
|
|
19
|
+
*/
|
|
20
|
+
getSafeHTML(text: string) {
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
if (globalThis.trustedTypes) {
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
const policy = globalThis.trustedTypes.createPolicy("safe-innerHTML", {
|
|
25
|
+
createHTML: (html: string) => html,
|
|
26
|
+
});
|
|
27
|
+
return policy.createHTML(text);
|
|
28
|
+
} else {
|
|
29
|
+
return text;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* 在CSP策略下设置innerHTML
|
|
34
|
+
* @param $el 元素
|
|
35
|
+
* @param text 文本
|
|
36
|
+
*/
|
|
37
|
+
setSafeHTML($el: HTMLElement, text: string) {
|
|
38
|
+
// 创建 TrustedHTML 策略(需 CSP 允许)
|
|
39
|
+
$el.innerHTML = this.getSafeHTML(text);
|
|
40
|
+
},
|
|
17
41
|
/**
|
|
18
42
|
* 用于显示元素并获取它的高度宽度等其它属性
|
|
19
43
|
* @param element
|
|
@@ -17,6 +17,7 @@ export type DOMUtilsCreateElementAttributesMap = {
|
|
|
17
17
|
|
|
18
18
|
export interface DOMUtils_MouseEvent {
|
|
19
19
|
click: MouseEvent | PointerEvent;
|
|
20
|
+
auxclick: PointerEvent;
|
|
20
21
|
contextmenu: MouseEvent | PointerEvent;
|
|
21
22
|
dblclick: MouseEvent | PointerEvent;
|
|
22
23
|
mousedown: MouseEvent | PointerEvent;
|