@whitesev/pops 3.3.3 → 3.3.4
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 +58 -25
- 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 +58 -25
- 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 +58 -25
- 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 +58 -25
- 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 +58 -25
- 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 +58 -25
- 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/components/folder/types/index.d.ts +15 -14
- package/package.json +1 -1
- package/src/components/folder/index.ts +58 -33
- package/src/components/folder/types/index.ts +26 -20
|
@@ -4,18 +4,7 @@ import type { PopsTitleConfig, PopsDragConfig, PopsGeneralConfig, PopsMoreButton
|
|
|
4
4
|
*/
|
|
5
5
|
export type PopsFolderDownloadOption = {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* + `true`: 自动根据设置的`mode`值来选择下载方式
|
|
10
|
-
* + `false`: 不触发下载
|
|
11
|
-
*/
|
|
12
|
-
autoDownload: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* 触发下载后会根据提供的url链接进行下载
|
|
15
|
-
*/
|
|
16
|
-
url: string;
|
|
17
|
-
/**
|
|
18
|
-
* 下载方式
|
|
7
|
+
* 下载方式,不传入就不下载(不做任何处理)
|
|
19
8
|
*
|
|
20
9
|
* + `a`: 使用`a标签`进行下载
|
|
21
10
|
* + `aBlank`: 使用`a标签`进行下载(添加属性`target="_blank"`)
|
|
@@ -26,6 +15,10 @@ export type PopsFolderDownloadOption = {
|
|
|
26
15
|
* @default "aBlank"
|
|
27
16
|
*/
|
|
28
17
|
mode?: "a" | "aBlank" | "iframe" | "open" | "openBlank";
|
|
18
|
+
/**
|
|
19
|
+
* 触发下载后会根据提供的url链接进行下载
|
|
20
|
+
*/
|
|
21
|
+
url: string;
|
|
29
22
|
};
|
|
30
23
|
/**
|
|
31
24
|
* pops.folder的folder配置信息
|
|
@@ -85,14 +78,22 @@ export interface PopsFolderDataConfig {
|
|
|
85
78
|
* 层级
|
|
86
79
|
*/
|
|
87
80
|
index: number;
|
|
81
|
+
/**
|
|
82
|
+
* 列表项的点击事件回调
|
|
83
|
+
*
|
|
84
|
+
* 如果是配置项,则自动根据配置项来创建下载事件,也可以自定义函数
|
|
85
|
+
*
|
|
86
|
+
* 如果是自定义函数的话,根据返回值来判断,如果为空则什么都不做
|
|
87
|
+
*/
|
|
88
|
+
clickEvent?: ((
|
|
88
89
|
/**
|
|
89
90
|
* 点击事件
|
|
90
91
|
*/
|
|
91
|
-
|
|
92
|
+
event: MouseEvent | PointerEvent,
|
|
92
93
|
/**
|
|
93
94
|
* 当前层级的文件|文件夹信息配置
|
|
94
95
|
*/
|
|
95
|
-
config: PopsFolderDataConfig) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void
|
|
96
|
+
config: PopsFolderDataConfig) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void>) | PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void;
|
|
96
97
|
}
|
|
97
98
|
/**
|
|
98
99
|
* pops.folder
|
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,7 @@ import type {
|
|
|
10
10
|
*/
|
|
11
11
|
export type PopsFolderDownloadOption = {
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* + `true`: 自动根据设置的`mode`值来选择下载方式
|
|
16
|
-
* + `false`: 不触发下载
|
|
17
|
-
*/
|
|
18
|
-
autoDownload: boolean;
|
|
19
|
-
/**
|
|
20
|
-
* 触发下载后会根据提供的url链接进行下载
|
|
21
|
-
*/
|
|
22
|
-
url: string;
|
|
23
|
-
/**
|
|
24
|
-
* 下载方式
|
|
13
|
+
* 下载方式,不传入就不下载(不做任何处理)
|
|
25
14
|
*
|
|
26
15
|
* + `a`: 使用`a标签`进行下载
|
|
27
16
|
* + `aBlank`: 使用`a标签`进行下载(添加属性`target="_blank"`)
|
|
@@ -32,6 +21,10 @@ export type PopsFolderDownloadOption = {
|
|
|
32
21
|
* @default "aBlank"
|
|
33
22
|
*/
|
|
34
23
|
mode?: "a" | "aBlank" | "iframe" | "open" | "openBlank";
|
|
24
|
+
/**
|
|
25
|
+
* 触发下载后会根据提供的url链接进行下载
|
|
26
|
+
*/
|
|
27
|
+
url: string;
|
|
35
28
|
};
|
|
36
29
|
/**
|
|
37
30
|
* pops.folder的folder配置信息
|
|
@@ -96,15 +89,28 @@ export interface PopsFolderDataConfig {
|
|
|
96
89
|
*/
|
|
97
90
|
index: number;
|
|
98
91
|
/**
|
|
99
|
-
*
|
|
92
|
+
* 列表项的点击事件回调
|
|
93
|
+
*
|
|
94
|
+
* 如果是配置项,则自动根据配置项来创建下载事件,也可以自定义函数
|
|
95
|
+
*
|
|
96
|
+
* 如果是自定义函数的话,根据返回值来判断,如果为空则什么都不做
|
|
100
97
|
*/
|
|
101
|
-
clickEvent?:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
98
|
+
clickEvent?:
|
|
99
|
+
| ((
|
|
100
|
+
/**
|
|
101
|
+
* 点击事件
|
|
102
|
+
*/
|
|
103
|
+
event: MouseEvent | PointerEvent,
|
|
104
|
+
/**
|
|
105
|
+
* 当前层级的文件|文件夹信息配置
|
|
106
|
+
*/
|
|
107
|
+
config: PopsFolderDataConfig
|
|
108
|
+
) => IPromise<PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void>)
|
|
109
|
+
| PopsFolderDownloadOption
|
|
110
|
+
| PopsFolderDataConfig[]
|
|
111
|
+
| null
|
|
112
|
+
| undefined
|
|
113
|
+
| void;
|
|
108
114
|
}
|
|
109
115
|
|
|
110
116
|
/**
|