@whitesev/pops 3.3.3 → 3.3.5
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 +93 -34
- package/dist/index.amd.js.map +1 -1
- package/dist/index.amd.min.js +1 -1
- package/dist/index.amd.min.js.map +1 -1
- package/dist/index.cjs.js +93 -34
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.esm.js +93 -34
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/index.iife.js +93 -34
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +1 -1
- package/dist/index.iife.min.js.map +1 -1
- package/dist/index.system.js +93 -34
- package/dist/index.system.js.map +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/index.system.min.js.map +1 -1
- package/dist/index.umd.js +93 -34
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/dist/types/src/Pops.d.ts +11 -10
- package/dist/types/src/components/folder/types/index.d.ts +18 -13
- package/dist/types/src/components/tooltip/index.d.ts +1 -1
- package/dist/types/src/config/GlobalConfig.d.ts +1 -0
- package/dist/types/src/handler/PopsHandler.d.ts +2 -5
- package/dist/types/src/types/components.d.ts +7 -0
- package/package.json +1 -1
- package/src/components/alert/defaultConfig.ts +1 -0
- package/src/components/confirm/defaultConfig.ts +1 -0
- package/src/components/drawer/defaultConfig.ts +1 -0
- package/src/components/folder/defaultConfig.ts +1 -0
- package/src/components/folder/index.ts +58 -33
- package/src/components/folder/types/index.ts +29 -19
- package/src/components/iframe/defaultConfig.ts +1 -0
- package/src/components/loading/defaultConfig.ts +1 -0
- package/src/components/panel/defaultConfig.ts +1 -0
- package/src/components/prompt/defaultConfig.ts +1 -0
- package/src/handler/PopsHandler.ts +34 -10
- package/src/types/components.d.ts +7 -0
package/dist/types/src/Pops.d.ts
CHANGED
|
@@ -37,16 +37,16 @@ declare class Pops {
|
|
|
37
37
|
};
|
|
38
38
|
/** icon图标的svg代码 */
|
|
39
39
|
iconSVG: {
|
|
40
|
-
loading: string;
|
|
41
40
|
min: string;
|
|
42
|
-
max: string;
|
|
43
|
-
search: string;
|
|
44
41
|
mise: string;
|
|
42
|
+
max: string;
|
|
45
43
|
close: string;
|
|
46
44
|
edit: string;
|
|
47
45
|
share: string;
|
|
48
46
|
delete: string;
|
|
47
|
+
search: string;
|
|
49
48
|
upload: string;
|
|
49
|
+
loading: string;
|
|
50
50
|
next: string;
|
|
51
51
|
prev: string;
|
|
52
52
|
eleme: string;
|
|
@@ -72,14 +72,14 @@ declare class Pops {
|
|
|
72
72
|
};
|
|
73
73
|
/** 存储已创建的元素 */
|
|
74
74
|
instData: {
|
|
75
|
-
iframe: import("./types/inst").PopsInstGeneralConfig[];
|
|
76
|
-
folder: import("./types/inst").PopsInstGeneralConfig[];
|
|
77
75
|
loading: import("./types/inst").PopsInstGeneralConfig[];
|
|
78
76
|
alert: import("./types/inst").PopsInstGeneralConfig[];
|
|
79
77
|
confirm: import("./types/inst").PopsInstGeneralConfig[];
|
|
80
78
|
prompt: import("./types/inst").PopsInstGeneralConfig[];
|
|
79
|
+
iframe: import("./types/inst").PopsInstGeneralConfig[];
|
|
81
80
|
tooltip: import("./types/inst").PopsInstGeneralConfig[];
|
|
82
81
|
drawer: import("./types/inst").PopsInstGeneralConfig[];
|
|
82
|
+
folder: import("./types/inst").PopsInstGeneralConfig[];
|
|
83
83
|
panel: import("./types/inst").PopsInstGeneralConfig[];
|
|
84
84
|
rightClickMenu: import("./types/inst").PopsInstGeneralConfig[];
|
|
85
85
|
};
|
|
@@ -726,6 +726,7 @@ declare class Pops {
|
|
|
726
726
|
forbiddenScroll?: boolean | undefined;
|
|
727
727
|
lightStyle?: string | undefined;
|
|
728
728
|
darkStyle?: string | undefined;
|
|
729
|
+
stopKeyDownEventPropagation?: boolean | undefined;
|
|
729
730
|
beforeAppendToPageCallBack?: void;
|
|
730
731
|
drag?: boolean | undefined;
|
|
731
732
|
dragLimit?: boolean | undefined;
|
|
@@ -788,16 +789,16 @@ declare class Pops {
|
|
|
788
789
|
showArrow: boolean;
|
|
789
790
|
arrowDistance: number;
|
|
790
791
|
otherDistance: number;
|
|
791
|
-
useShadowRoot: boolean;
|
|
792
|
-
only: boolean;
|
|
793
792
|
zIndex: IFunction<number>;
|
|
794
793
|
style: string | null;
|
|
794
|
+
useShadowRoot: boolean;
|
|
795
|
+
only: boolean;
|
|
795
796
|
lightStyle: string | null;
|
|
796
797
|
darkStyle: string | null;
|
|
797
798
|
beforeAppendToPageCallBack: ($shadowRoot: ShadowRoot | HTMLElement, $shadowContainer: HTMLDivElement) => void;
|
|
798
799
|
};
|
|
799
800
|
$shadowContainer: HTMLDivElement;
|
|
800
|
-
$shadowRoot:
|
|
801
|
+
$shadowRoot: ShadowRoot | HTMLElement;
|
|
801
802
|
toolTip: import("./components/tooltip").ToolTip;
|
|
802
803
|
};
|
|
803
804
|
/**
|
|
@@ -817,9 +818,9 @@ declare class Pops {
|
|
|
817
818
|
panel: (config: PopsPanelConfig) => {
|
|
818
819
|
addEventListener: <K extends keyof import("./components/panel/types").PopsPanelEventType>(event: K, listener: (evt: CustomEvent<import("./components/panel/types").PopsPanelEventType[K]>) => void, options?: boolean | EventListenerOptions) => void;
|
|
819
820
|
removeEventListener: <K extends keyof import("./components/panel/types").PopsPanelEventType>(event: K, listener: (evt: CustomEvent<import("./components/panel/types").PopsPanelEventType[K]>) => void, options?: boolean | EventListenerOptions) => void;
|
|
820
|
-
mode: import("./types/main").PopsType;
|
|
821
821
|
close: () => Promise<void>;
|
|
822
822
|
hide: () => Promise<void>;
|
|
823
|
+
mode: import("./types/main").PopsType;
|
|
823
824
|
show: ($parent?: HTMLElement | Document | ShadowRoot) => Promise<void>;
|
|
824
825
|
$shadowContainer: HTMLDivElement;
|
|
825
826
|
$shadowRoot: ShadowRoot | HTMLElement;
|
|
@@ -907,7 +908,7 @@ declare class Pops {
|
|
|
907
908
|
* searchSuggestion.setAllEvent();
|
|
908
909
|
*/
|
|
909
910
|
searchSuggestion: <T = any>(config: PopsSearchSuggestionConfig<T>) => {
|
|
910
|
-
selfDocument:
|
|
911
|
+
selfDocument: ShadowRoot | Document | (ShadowRoot | Document)[];
|
|
911
912
|
$el: {
|
|
912
913
|
root: HTMLElement;
|
|
913
914
|
$dropdownWrapper: HTMLElement;
|
|
@@ -4,18 +4,11 @@ import type { PopsTitleConfig, PopsDragConfig, PopsGeneralConfig, PopsMoreButton
|
|
|
4
4
|
*/
|
|
5
5
|
export type PopsFolderDownloadOption = {
|
|
6
6
|
/**
|
|
7
|
-
* 是否点击后自动触发下载
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* 触发下载后会根据提供的url链接进行下载
|
|
15
|
-
*/
|
|
16
|
-
url: string;
|
|
17
|
-
/**
|
|
18
|
-
* 下载方式
|
|
8
|
+
* 前置条件:url不为空
|
|
9
|
+
*
|
|
10
|
+
* 下载方式,不传入就不下载(不做任何处理)
|
|
11
|
+
*
|
|
19
12
|
*
|
|
20
13
|
* + `a`: 使用`a标签`进行下载
|
|
21
14
|
* + `aBlank`: 使用`a标签`进行下载(添加属性`target="_blank"`)
|
|
@@ -26,6 +19,10 @@ export type PopsFolderDownloadOption = {
|
|
|
26
19
|
* @default "aBlank"
|
|
27
20
|
*/
|
|
28
21
|
mode?: "a" | "aBlank" | "iframe" | "open" | "openBlank";
|
|
22
|
+
/**
|
|
23
|
+
* 触发下载后会根据提供的url链接进行下载
|
|
24
|
+
*/
|
|
25
|
+
url: string;
|
|
29
26
|
};
|
|
30
27
|
/**
|
|
31
28
|
* pops.folder的folder配置信息
|
|
@@ -85,14 +82,22 @@ export interface PopsFolderDataConfig {
|
|
|
85
82
|
* 层级
|
|
86
83
|
*/
|
|
87
84
|
index: number;
|
|
85
|
+
/**
|
|
86
|
+
* 列表项的点击事件回调
|
|
87
|
+
*
|
|
88
|
+
* 如果是配置项,则自动根据配置项来创建下载事件,也可以自定义函数
|
|
89
|
+
*
|
|
90
|
+
* 如果是自定义函数的话,根据返回值来判断,如果为空则什么都不做
|
|
91
|
+
*/
|
|
92
|
+
clickEvent?: ((
|
|
88
93
|
/**
|
|
89
94
|
* 点击事件
|
|
90
95
|
*/
|
|
91
|
-
|
|
96
|
+
event: MouseEvent | PointerEvent,
|
|
92
97
|
/**
|
|
93
98
|
* 当前层级的文件|文件夹信息配置
|
|
94
99
|
*/
|
|
95
|
-
config: PopsFolderDataConfig) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void
|
|
100
|
+
config: PopsFolderDataConfig) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void>) | PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void;
|
|
96
101
|
}
|
|
97
102
|
/**
|
|
98
103
|
* pops.folder
|
|
@@ -213,7 +213,7 @@ export declare const PopsTooltip: {
|
|
|
213
213
|
beforeAppendToPageCallBack: ($shadowRoot: ShadowRoot | HTMLElement, $shadowContainer: HTMLDivElement) => void;
|
|
214
214
|
};
|
|
215
215
|
$shadowContainer: HTMLDivElement;
|
|
216
|
-
$shadowRoot:
|
|
216
|
+
$shadowRoot: HTMLElement | ShadowRoot;
|
|
217
217
|
toolTip: ToolTip;
|
|
218
218
|
};
|
|
219
219
|
};
|
|
@@ -27,6 +27,7 @@ export declare const GlobalConfig: {
|
|
|
27
27
|
forbiddenScroll?: boolean | undefined;
|
|
28
28
|
lightStyle?: string | undefined;
|
|
29
29
|
darkStyle?: string | undefined;
|
|
30
|
+
stopKeyDownEventPropagation?: boolean | undefined;
|
|
30
31
|
beforeAppendToPageCallBack?: void;
|
|
31
32
|
drag?: boolean | undefined;
|
|
32
33
|
dragLimit?: boolean | undefined;
|
|
@@ -14,12 +14,9 @@ export declare const PopsHandler: {
|
|
|
14
14
|
/**
|
|
15
15
|
* 创建shadow
|
|
16
16
|
*/
|
|
17
|
-
handlerShadow(config: Pick<PopsGeneralConfig, "useShadowRoot">): {
|
|
17
|
+
handlerShadow(config: Pick<PopsGeneralConfig, "useShadowRoot" | "stopKeyDownEventPropagation">): {
|
|
18
18
|
$shadowContainer: HTMLDivElement;
|
|
19
|
-
$shadowRoot: ShadowRoot;
|
|
20
|
-
} | {
|
|
21
|
-
$shadowContainer: HTMLDivElement;
|
|
22
|
-
$shadowRoot: HTMLDivElement;
|
|
19
|
+
$shadowRoot: HTMLElement | ShadowRoot;
|
|
23
20
|
};
|
|
24
21
|
/**
|
|
25
22
|
* 处理初始化
|
|
@@ -214,6 +214,13 @@ export interface PopsGeneralConfig {
|
|
|
214
214
|
* 传入的css都在dark内
|
|
215
215
|
*/
|
|
216
216
|
darkStyle?: string | null;
|
|
217
|
+
/**
|
|
218
|
+
* (可选)是否阻止`keydown`事件传播
|
|
219
|
+
*
|
|
220
|
+
* 主要是阻止当`keydown`触发来源为输入框时,即在输入框内按下按键不会触发页面的快捷键
|
|
221
|
+
* @default true
|
|
222
|
+
*/
|
|
223
|
+
stopKeyDownEventPropagation?: boolean;
|
|
217
224
|
/**
|
|
218
225
|
* 在元素添加到页面前的事件
|
|
219
226
|
* @param $shadowRoot 根元素
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@ import { popsUtils } from "../../utils/PopsUtils";
|
|
|
10
10
|
import { PopsLoading } from "../loading";
|
|
11
11
|
import { PopsFolderDefaultConfig } from "./defaultConfig";
|
|
12
12
|
import { Folder_ICON } from "./folderIcon";
|
|
13
|
-
import type {
|
|
13
|
+
import type { PopsFolderConfig, PopsFolderDataConfig, PopsFolderDownloadOption } from "./types";
|
|
14
14
|
|
|
15
15
|
export const PopsFolder = {
|
|
16
16
|
init(__config__: PopsFolderConfig) {
|
|
@@ -517,10 +517,13 @@ export const PopsFolder = {
|
|
|
517
517
|
);
|
|
518
518
|
// 存储原来的值
|
|
519
519
|
Reflect.set($fileName, "__value__", folderData);
|
|
520
|
-
Reflect.set($folder, "
|
|
520
|
+
Reflect.set($folder, "__value__", folderData);
|
|
521
521
|
$folder.appendChild($fileName);
|
|
522
522
|
return {
|
|
523
523
|
folderElement: $folder,
|
|
524
|
+
/**
|
|
525
|
+
* 超链接标签的容器
|
|
526
|
+
*/
|
|
524
527
|
fileNameElement: $fileName,
|
|
525
528
|
};
|
|
526
529
|
}
|
|
@@ -619,8 +622,16 @@ export const PopsFolder = {
|
|
|
619
622
|
},
|
|
620
623
|
addIndexCSS: false,
|
|
621
624
|
});
|
|
625
|
+
let childConfig: PopsFolderDataConfig[] | undefined;
|
|
622
626
|
if (typeof dataConfig.clickEvent === "function") {
|
|
623
|
-
const
|
|
627
|
+
const result = await dataConfig.clickEvent(clickEvent, dataConfig);
|
|
628
|
+
if (Array.isArray(result)) {
|
|
629
|
+
childConfig = result;
|
|
630
|
+
}
|
|
631
|
+
} else if (Array.isArray(dataConfig.clickEvent)) {
|
|
632
|
+
childConfig = dataConfig.clickEvent;
|
|
633
|
+
}
|
|
634
|
+
if (childConfig) {
|
|
624
635
|
// 添加顶部导航的箭头
|
|
625
636
|
folderFileListBreadcrumbPrimaryElement.appendChild(this.createHeaderArrowIcon());
|
|
626
637
|
// 添加顶部导航的链接文字
|
|
@@ -637,54 +648,63 @@ export const PopsFolder = {
|
|
|
637
648
|
}
|
|
638
649
|
loadingMask.close();
|
|
639
650
|
}
|
|
651
|
+
/**
|
|
652
|
+
* 更新文件的显示的链接信息
|
|
653
|
+
*
|
|
654
|
+
* 这里主要用于鼠标中键或者右键触发,左键触发方式会根据mode进行处理
|
|
655
|
+
* @returns 更新的文件的下载链接
|
|
656
|
+
*/
|
|
657
|
+
updateFileLink($row: HTMLElement, downloadInfo: PopsFolderDownloadOption) {
|
|
658
|
+
const downloadUrl = typeof downloadInfo?.url === "string" ? downloadInfo.url.trim() : "";
|
|
659
|
+
if (downloadUrl !== "" && downloadUrl !== "null" && downloadUrl !== "undefined") {
|
|
660
|
+
const $link = $row.querySelector("a")!;
|
|
661
|
+
$link.setAttribute("href", downloadUrl);
|
|
662
|
+
return downloadUrl;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
640
665
|
/**
|
|
641
666
|
* 文件的点击事件 - 下载文件
|
|
642
|
-
* @param
|
|
667
|
+
* @param evt 点击事件
|
|
668
|
+
* @param $row 列表项
|
|
643
669
|
* @param dataConfig
|
|
644
670
|
*/
|
|
645
|
-
async
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
const $link = $row.querySelector("a")!;
|
|
671
|
+
async onFileClick(evt: MouseEvent | PointerEvent, $row: HTMLElement, dataConfig: PopsFolderDataConfig) {
|
|
672
|
+
let downloadInfo: PopsFolderDownloadOption | undefined;
|
|
649
673
|
if (typeof dataConfig.clickEvent === "function") {
|
|
650
|
-
const
|
|
651
|
-
if (
|
|
652
|
-
downloadInfo
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
)
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
674
|
+
const result = await dataConfig.clickEvent(evt, dataConfig);
|
|
675
|
+
if (typeof result === "object" && result != null && !Array.isArray(result)) {
|
|
676
|
+
downloadInfo = result;
|
|
677
|
+
}
|
|
678
|
+
} else if (
|
|
679
|
+
typeof dataConfig.clickEvent === "object" &&
|
|
680
|
+
dataConfig.clickEvent != null &&
|
|
681
|
+
!Array.isArray(dataConfig.clickEvent)
|
|
682
|
+
) {
|
|
683
|
+
downloadInfo = dataConfig.clickEvent;
|
|
684
|
+
}
|
|
685
|
+
if (downloadInfo) {
|
|
686
|
+
const downloadUrl = this.updateFileLink($row, downloadInfo);
|
|
687
|
+
if (downloadUrl) {
|
|
688
|
+
if (typeof downloadInfo.mode === "string") {
|
|
665
689
|
if (downloadInfo.mode === "a" || downloadInfo.mode === "aBlank") {
|
|
666
690
|
// a标签下载
|
|
667
691
|
const $anchor = popsDOMUtils.createElement("a");
|
|
668
|
-
|
|
669
692
|
if (downloadInfo.mode === "aBlank") {
|
|
670
693
|
$anchor.setAttribute("target", "_blank");
|
|
671
694
|
}
|
|
672
|
-
|
|
673
|
-
$anchor.href = downloadInfo.url;
|
|
695
|
+
$anchor.href = downloadUrl;
|
|
674
696
|
$anchor.click();
|
|
675
697
|
} else if (downloadInfo.mode === "open" || downloadInfo.mode === "openBlank") {
|
|
676
698
|
// window.open下载
|
|
677
|
-
|
|
678
699
|
if (downloadInfo.mode === "openBlank") {
|
|
679
|
-
globalThis.open(
|
|
700
|
+
globalThis.open(downloadUrl, "_blank");
|
|
680
701
|
} else {
|
|
681
|
-
globalThis.open(
|
|
702
|
+
globalThis.open(downloadUrl);
|
|
682
703
|
}
|
|
683
704
|
} else if (downloadInfo.mode === "iframe") {
|
|
684
705
|
// iframe下载
|
|
685
706
|
const $downloadIframe = popsDOMUtils.createElement("iframe");
|
|
686
|
-
|
|
687
|
-
$downloadIframe.src = downloadInfo.url;
|
|
707
|
+
$downloadIframe.src = downloadUrl;
|
|
688
708
|
$downloadIframe.onload = function () {
|
|
689
709
|
popsUtils.setTimeout(() => {
|
|
690
710
|
$downloadIframe.remove();
|
|
@@ -860,9 +880,14 @@ export const PopsFolder = {
|
|
|
860
880
|
// 文件 - 点击事件
|
|
861
881
|
popsDOMUtils.on<MouseEvent | PointerEvent>(fileNameElement, "click", (event) => {
|
|
862
882
|
// 下载文件
|
|
863
|
-
|
|
883
|
+
popsDOMUtils.preventEvent(event);
|
|
884
|
+
this.onFileClick(event, fileNameElement, item);
|
|
864
885
|
});
|
|
865
|
-
|
|
886
|
+
// 如果clickEvent不是函数,那么现在就可以进行配置
|
|
887
|
+
if (typeof item.clickEvent === "object" && item.clickEvent !== null && !Array.isArray(item.clickEvent)) {
|
|
888
|
+
// {} 单文件配置
|
|
889
|
+
this.updateFileLink(fileNameElement, item.clickEvent);
|
|
890
|
+
}
|
|
866
891
|
folderListBodyElement.appendChild(folderElement);
|
|
867
892
|
}
|
|
868
893
|
});
|
|
@@ -10,18 +10,11 @@ import type {
|
|
|
10
10
|
*/
|
|
11
11
|
export type PopsFolderDownloadOption = {
|
|
12
12
|
/**
|
|
13
|
-
* 是否点击后自动触发下载
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* 触发下载后会根据提供的url链接进行下载
|
|
21
|
-
*/
|
|
22
|
-
url: string;
|
|
23
|
-
/**
|
|
24
|
-
* 下载方式
|
|
14
|
+
* 前置条件:url不为空
|
|
15
|
+
*
|
|
16
|
+
* 下载方式,不传入就不下载(不做任何处理)
|
|
17
|
+
*
|
|
25
18
|
*
|
|
26
19
|
* + `a`: 使用`a标签`进行下载
|
|
27
20
|
* + `aBlank`: 使用`a标签`进行下载(添加属性`target="_blank"`)
|
|
@@ -32,6 +25,10 @@ export type PopsFolderDownloadOption = {
|
|
|
32
25
|
* @default "aBlank"
|
|
33
26
|
*/
|
|
34
27
|
mode?: "a" | "aBlank" | "iframe" | "open" | "openBlank";
|
|
28
|
+
/**
|
|
29
|
+
* 触发下载后会根据提供的url链接进行下载
|
|
30
|
+
*/
|
|
31
|
+
url: string;
|
|
35
32
|
};
|
|
36
33
|
/**
|
|
37
34
|
* pops.folder的folder配置信息
|
|
@@ -96,15 +93,28 @@ export interface PopsFolderDataConfig {
|
|
|
96
93
|
*/
|
|
97
94
|
index: number;
|
|
98
95
|
/**
|
|
99
|
-
*
|
|
96
|
+
* 列表项的点击事件回调
|
|
97
|
+
*
|
|
98
|
+
* 如果是配置项,则自动根据配置项来创建下载事件,也可以自定义函数
|
|
99
|
+
*
|
|
100
|
+
* 如果是自定义函数的话,根据返回值来判断,如果为空则什么都不做
|
|
100
101
|
*/
|
|
101
|
-
clickEvent?:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
clickEvent?:
|
|
103
|
+
| ((
|
|
104
|
+
/**
|
|
105
|
+
* 点击事件
|
|
106
|
+
*/
|
|
107
|
+
event: MouseEvent | PointerEvent,
|
|
108
|
+
/**
|
|
109
|
+
* 当前层级的文件|文件夹信息配置
|
|
110
|
+
*/
|
|
111
|
+
config: PopsFolderDataConfig
|
|
112
|
+
) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void>)
|
|
113
|
+
| PopsFolderDownloadOption
|
|
114
|
+
| PopsFolderDataConfig[]
|
|
115
|
+
| null
|
|
116
|
+
| undefined
|
|
117
|
+
| void;
|
|
108
118
|
}
|
|
109
119
|
|
|
110
120
|
/**
|
|
@@ -21,22 +21,46 @@ export const PopsHandler = {
|
|
|
21
21
|
/**
|
|
22
22
|
* 创建shadow
|
|
23
23
|
*/
|
|
24
|
-
handlerShadow(config: Pick<PopsGeneralConfig, "useShadowRoot">) {
|
|
24
|
+
handlerShadow(config: Pick<PopsGeneralConfig, "useShadowRoot" | "stopKeyDownEventPropagation">) {
|
|
25
25
|
const $shadowContainer = popsDOMUtils.createElement("div", {
|
|
26
26
|
className: "pops-shadow-container",
|
|
27
27
|
});
|
|
28
|
+
let $shadowRoot: ShadowRoot | HTMLElement;
|
|
28
29
|
if (config.useShadowRoot) {
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
$shadowContainer,
|
|
32
|
-
$shadowRoot,
|
|
33
|
-
};
|
|
30
|
+
$shadowRoot = $shadowContainer.attachShadow({ mode: "open" });
|
|
34
31
|
} else {
|
|
35
|
-
|
|
36
|
-
$shadowContainer,
|
|
37
|
-
$shadowRoot: $shadowContainer,
|
|
38
|
-
};
|
|
32
|
+
$shadowRoot = $shadowContainer;
|
|
39
33
|
}
|
|
34
|
+
// 添加键盘监听
|
|
35
|
+
// rightClickMenu
|
|
36
|
+
// searchSuggestion
|
|
37
|
+
// tooltip
|
|
38
|
+
// 以上都不需要添加该事件监听
|
|
39
|
+
if (config.stopKeyDownEventPropagation) {
|
|
40
|
+
popsDOMUtils.on(
|
|
41
|
+
$shadowRoot,
|
|
42
|
+
"keydown",
|
|
43
|
+
[
|
|
44
|
+
'input[type="text"]',
|
|
45
|
+
'input[type="password"]',
|
|
46
|
+
'input[type="number"]',
|
|
47
|
+
'input[type="email"]',
|
|
48
|
+
'input[type="url"]',
|
|
49
|
+
'input[type="search"]',
|
|
50
|
+
"input:not([type])",
|
|
51
|
+
"textarea",
|
|
52
|
+
],
|
|
53
|
+
(evt) => {
|
|
54
|
+
evt.stopImmediatePropagation();
|
|
55
|
+
evt.stopPropagation();
|
|
56
|
+
},
|
|
57
|
+
{ capture: true }
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
$shadowContainer,
|
|
62
|
+
$shadowRoot,
|
|
63
|
+
};
|
|
40
64
|
},
|
|
41
65
|
/**
|
|
42
66
|
* 处理初始化
|
|
@@ -214,6 +214,13 @@ export interface PopsGeneralConfig {
|
|
|
214
214
|
* 传入的css都在dark内
|
|
215
215
|
*/
|
|
216
216
|
darkStyle?: string | null;
|
|
217
|
+
/**
|
|
218
|
+
* (可选)是否阻止`keydown`事件传播
|
|
219
|
+
*
|
|
220
|
+
* 主要是阻止当`keydown`触发来源为输入框时,即在输入框内按下按键不会触发页面的快捷键
|
|
221
|
+
* @default true
|
|
222
|
+
*/
|
|
223
|
+
stopKeyDownEventPropagation?: boolean;
|
|
217
224
|
/**
|
|
218
225
|
* 在元素添加到页面前的事件
|
|
219
226
|
* @param $shadowRoot 根元素
|