@whitesev/pops 3.3.2 → 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 +169 -74
- 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 +169 -74
- 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 +169 -74
- 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 +169 -74
- 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 +169 -74
- 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 +169 -74
- 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 +23 -10
- package/dist/types/src/components/folder/types/index.d.ts +15 -14
- package/dist/types/src/utils/PopsDOMUtils.d.ts +71 -21
- package/dist/types/src/utils/PopsUtils.d.ts +5 -0
- package/package.json +1 -1
- package/src/components/folder/index.ts +58 -33
- package/src/components/folder/types/index.ts +26 -20
- package/src/components/iframe/index.ts +2 -3
- package/src/utils/PopsDOMUtils.ts +189 -67
- package/src/utils/PopsUtils.ts +7 -0
package/dist/types/src/Pops.d.ts
CHANGED
|
@@ -85,12 +85,13 @@ declare class Pops {
|
|
|
85
85
|
};
|
|
86
86
|
/** 禁止滚动 */
|
|
87
87
|
forbiddenScroll: {
|
|
88
|
-
event(event: Event):
|
|
88
|
+
event(event: Event): false;
|
|
89
89
|
};
|
|
90
90
|
/** pops使用的工具类 */
|
|
91
91
|
Utils: {
|
|
92
92
|
isWin(target: any): boolean;
|
|
93
93
|
isDOM(target: any): boolean;
|
|
94
|
+
isNodeList($ele: any): $ele is any[] | NodeList;
|
|
94
95
|
delete(target: any, propName: any): void;
|
|
95
96
|
assign<T1, T2 extends object, T3 extends boolean>(target: T1, source: T2, isAdd?: T3 | undefined): T3 extends true ? T1 & T2 : T1;
|
|
96
97
|
getRandomGUID(): string;
|
|
@@ -172,15 +173,27 @@ declare class Pops {
|
|
|
172
173
|
onReady<T extends (...args: any[]) => any>(callback: T): void;
|
|
173
174
|
emit(element: HTMLElement | string | NodeList | any[] | Window | Document, eventType: string | string[], details?: object, useDispatchToEmitEvent?: boolean): void;
|
|
174
175
|
emit(element: HTMLElement | string | NodeList | any[] | Window | Document, eventType: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_EventType | import("./types/PopsDOMUtilsEventType").PopsDOMUtils_EventType[], details?: object, useDispatchToEmitEvent?: boolean): void;
|
|
175
|
-
click(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["click"]) => void, details?: any, useDispatchToEmitEvent?: boolean):
|
|
176
|
-
blur(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["blur"]) => void, details?: object, useDispatchToEmitEvent?: boolean):
|
|
177
|
-
focus(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["focus"]) => void, details?: object, useDispatchToEmitEvent?: boolean):
|
|
178
|
-
onHover(element:
|
|
179
|
-
onKeyup(target: HTMLElement | string | Window | typeof globalThis, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keyup"]) => void, option?: boolean | AddEventListenerOptions):
|
|
180
|
-
onKeydown(target: HTMLElement | Window | typeof globalThis | string, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keydown"]) => void, option?: boolean | AddEventListenerOptions):
|
|
181
|
-
onKeypress(target: HTMLElement | Window | typeof globalThis | string, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keypress"]) => void, option?: boolean | AddEventListenerOptions):
|
|
182
|
-
preventEvent(event: Event):
|
|
183
|
-
preventEvent(
|
|
176
|
+
click(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["click"]) => void, details?: any, useDispatchToEmitEvent?: boolean): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
177
|
+
blur(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["blur"]) => void, details?: object, useDispatchToEmitEvent?: boolean): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
178
|
+
focus(element: HTMLElement | string | Window, handler?: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["focus"]) => void, details?: object, useDispatchToEmitEvent?: boolean): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
179
|
+
onHover(element: import("./types/PopsDOMUtilsEventType").PopsDOMUtilsTargetElementType | Element | DocumentFragment | Node, handler: (this: HTMLElement, event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["hover"]) => void, option?: boolean | import("./types/PopsDOMUtilsEventType").PopsDOMUtilsEventListenerOption): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
180
|
+
onKeyup(target: HTMLElement | string | Window | typeof globalThis, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keyup"]) => void, option?: boolean | AddEventListenerOptions): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
181
|
+
onKeydown(target: HTMLElement | Window | typeof globalThis | string, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keydown"]) => void, option?: boolean | AddEventListenerOptions): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
182
|
+
onKeypress(target: HTMLElement | Window | typeof globalThis | string, handler: (event: import("./types/PopsDOMUtilsEventType").PopsDOMUtils_Event["keypress"]) => void, option?: boolean | AddEventListenerOptions): import("./types/PopsDOMUtilsEventType").PopsDOMUtilsAddEventListenerResult | undefined;
|
|
183
|
+
preventEvent(event: Event): false;
|
|
184
|
+
preventEvent<T extends boolean>(event: Event, onlyStopPropagation: T): T extends true ? void : false;
|
|
185
|
+
preventEvent($el: HTMLElement, eventNameList: string | string[], option?: {
|
|
186
|
+
capture?: boolean;
|
|
187
|
+
onlyStopPropagation?: boolean;
|
|
188
|
+
}): {
|
|
189
|
+
off(): void;
|
|
190
|
+
};
|
|
191
|
+
preventEvent($el: HTMLElement, eventNameList: string | string[], selector: string | string[] | null | undefined, option?: {
|
|
192
|
+
capture?: boolean;
|
|
193
|
+
onlyStopPropagation?: boolean;
|
|
194
|
+
}): {
|
|
195
|
+
off(): void;
|
|
196
|
+
};
|
|
184
197
|
selector<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | undefined;
|
|
185
198
|
selector<E extends Element = Element>(selector: string): E | undefined;
|
|
186
199
|
selectorAll<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K][];
|
|
@@ -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
|
|
@@ -211,7 +211,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
211
211
|
* console.log("触发click事件成功")
|
|
212
212
|
* })
|
|
213
213
|
* */
|
|
214
|
-
click(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["click"]) => void, details?: any, useDispatchToEmitEvent?: boolean):
|
|
214
|
+
click(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["click"]) => void, details?: any, useDispatchToEmitEvent?: boolean): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
215
215
|
/**
|
|
216
216
|
* 绑定或触发元素的blur事件
|
|
217
217
|
* @param element 目标元素
|
|
@@ -226,7 +226,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
226
226
|
* console.log("触发blur事件成功")
|
|
227
227
|
* })
|
|
228
228
|
* */
|
|
229
|
-
blur(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["blur"]) => void, details?: object, useDispatchToEmitEvent?: boolean):
|
|
229
|
+
blur(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["blur"]) => void, details?: object, useDispatchToEmitEvent?: boolean): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
230
230
|
/**
|
|
231
231
|
* 绑定或触发元素的focus事件
|
|
232
232
|
* @param element 目标元素
|
|
@@ -241,7 +241,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
241
241
|
* console.log("触发focus事件成功")
|
|
242
242
|
* })
|
|
243
243
|
* */
|
|
244
|
-
focus(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["focus"]) => void, details?: object, useDispatchToEmitEvent?: boolean):
|
|
244
|
+
focus(element: HTMLElement | string | Window, handler?: (event: PopsDOMUtils_Event["focus"]) => void, details?: object, useDispatchToEmitEvent?: boolean): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
245
245
|
/**
|
|
246
246
|
* 当鼠标移入或移出元素时触发事件
|
|
247
247
|
* @param element 当前元素
|
|
@@ -256,7 +256,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
256
256
|
* console.log("移入/移除");
|
|
257
257
|
* })
|
|
258
258
|
*/
|
|
259
|
-
onHover(element:
|
|
259
|
+
onHover(element: PopsDOMUtilsTargetElementType | Element | DocumentFragment | Node, handler: (this: HTMLElement, event: PopsDOMUtils_Event["hover"]) => void, option?: boolean | PopsDOMUtilsEventListenerOption): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
260
260
|
/**
|
|
261
261
|
* 当按键松开时触发事件
|
|
262
262
|
* keydown - > keypress - > keyup
|
|
@@ -272,7 +272,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
272
272
|
* console.log("按键松开");
|
|
273
273
|
* })
|
|
274
274
|
*/
|
|
275
|
-
onKeyup(target: HTMLElement | string | Window | typeof globalThis, handler: (event: PopsDOMUtils_Event["keyup"]) => void, option?: boolean | AddEventListenerOptions):
|
|
275
|
+
onKeyup(target: HTMLElement | string | Window | typeof globalThis, handler: (event: PopsDOMUtils_Event["keyup"]) => void, option?: boolean | AddEventListenerOptions): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
276
276
|
/**
|
|
277
277
|
* 当按键按下时触发事件
|
|
278
278
|
* keydown - > keypress - > keyup
|
|
@@ -288,7 +288,7 @@ declare class PopsDOMUtilsEvent {
|
|
|
288
288
|
* console.log("按键按下");
|
|
289
289
|
* })
|
|
290
290
|
*/
|
|
291
|
-
onKeydown(target: HTMLElement | Window | typeof globalThis | string, handler: (event: PopsDOMUtils_Event["keydown"]) => void, option?: boolean | AddEventListenerOptions):
|
|
291
|
+
onKeydown(target: HTMLElement | Window | typeof globalThis | string, handler: (event: PopsDOMUtils_Event["keydown"]) => void, option?: boolean | AddEventListenerOptions): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
292
292
|
/**
|
|
293
293
|
* 当按键按下时触发事件
|
|
294
294
|
* keydown - > keypress - > keyup
|
|
@@ -304,29 +304,79 @@ declare class PopsDOMUtilsEvent {
|
|
|
304
304
|
* console.log("按键按下");
|
|
305
305
|
* })
|
|
306
306
|
*/
|
|
307
|
-
onKeypress(target: HTMLElement | Window | typeof globalThis | string, handler: (event: PopsDOMUtils_Event["keypress"]) => void, option?: boolean | AddEventListenerOptions):
|
|
307
|
+
onKeypress(target: HTMLElement | Window | typeof globalThis | string, handler: (event: PopsDOMUtils_Event["keypress"]) => void, option?: boolean | AddEventListenerOptions): PopsDOMUtilsAddEventListenerResult | undefined;
|
|
308
308
|
/**
|
|
309
309
|
* 阻止事件传递
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
310
|
+
*
|
|
311
|
+
* + `.preventDefault()`: 阻止事件的默认行为发生。例如,当点击一个链接时,浏览器会默认打开链接的URL,或者在输入框内输入文字
|
|
312
|
+
* + `.stopPropagation()`: 停止事件的传播,阻止它继续向更上层的元素冒泡,事件将不会再传播给其他的元素
|
|
313
|
+
* + `.stopImmediatePropagation()`: 阻止事件传播,并且还能阻止元素上的其他事件处理程序被触发
|
|
314
|
+
* @param event 要阻止传递的事件
|
|
315
315
|
* @example
|
|
316
|
-
*
|
|
316
|
+
* DOMUtils.preventEvent(event);
|
|
317
317
|
*/
|
|
318
|
-
preventEvent(event: Event):
|
|
318
|
+
preventEvent(event: Event): false;
|
|
319
319
|
/**
|
|
320
320
|
* 阻止事件传递
|
|
321
|
-
* @param
|
|
322
|
-
* @param
|
|
323
|
-
* @
|
|
321
|
+
* @param event 要阻止传递的事件
|
|
322
|
+
* @param onlyStopPropagation (可选)是否仅阻止事件的传播,默认false,不调用`.preventDefault()`
|
|
323
|
+
* @example
|
|
324
|
+
* DOMUtils.preventEvent(event, true);
|
|
325
|
+
*/
|
|
326
|
+
preventEvent<T extends boolean>(event: Event, onlyStopPropagation: T): T extends true ? void : false;
|
|
327
|
+
/**
|
|
328
|
+
* 通过监听事件来主动阻止事件的传递
|
|
329
|
+
* @param $el 要进行处理的元素
|
|
330
|
+
* @param eventNameList 要阻止的事件名|列表
|
|
331
|
+
* @param option (可选)配置项
|
|
332
|
+
* @example
|
|
333
|
+
* DOMUtils.preventEvent(document.querySelector("a"), "click")
|
|
334
|
+
* @example
|
|
335
|
+
* DOMUtils.preventEvent(document.querySelector("a"), "click", undefined, {
|
|
336
|
+
* capture: true,
|
|
337
|
+
* })
|
|
338
|
+
* @example
|
|
339
|
+
* DOMUtils.preventEvent(document, "click", "a.xxx", {
|
|
340
|
+
* capture: true,
|
|
341
|
+
* onlyStopPropagation: true,
|
|
342
|
+
* })
|
|
343
|
+
*/
|
|
344
|
+
preventEvent($el: HTMLElement, eventNameList: string | string[], option?: {
|
|
345
|
+
/** (可选)是否捕获,默认false */
|
|
346
|
+
capture?: boolean;
|
|
347
|
+
/** (可选)是否仅阻止事件的传播,默认false,不调用`.preventDefault()` */
|
|
348
|
+
onlyStopPropagation?: boolean;
|
|
349
|
+
}): {
|
|
350
|
+
/** 移除监听事件 */
|
|
351
|
+
off(): void;
|
|
352
|
+
};
|
|
353
|
+
/**
|
|
354
|
+
* 通过监听事件来主动阻止事件的传递
|
|
355
|
+
* @param $el 要进行处理的元素
|
|
356
|
+
* @param eventNameList 要阻止的事件名|列表
|
|
357
|
+
* @param selector 子元素选择器
|
|
358
|
+
* @param option (可选)配置项
|
|
324
359
|
* @example
|
|
325
|
-
*
|
|
360
|
+
* DOMUtils.preventEvent(document.querySelector("a"), "click")
|
|
326
361
|
* @example
|
|
327
|
-
*
|
|
362
|
+
* DOMUtils.preventEvent(document.querySelector("a"), "click", undefined, {
|
|
363
|
+
* capture: true,
|
|
364
|
+
* })
|
|
365
|
+
* @example
|
|
366
|
+
* DOMUtils.preventEvent(document, "click", "a.xxx", {
|
|
367
|
+
* capture: true,
|
|
368
|
+
* onlyStopPropagation: true,
|
|
369
|
+
* })
|
|
328
370
|
*/
|
|
329
|
-
preventEvent(
|
|
371
|
+
preventEvent($el: HTMLElement, eventNameList: string | string[], selector: string | string[] | null | undefined, option?: {
|
|
372
|
+
/** (可选)是否捕获,默认false */
|
|
373
|
+
capture?: boolean;
|
|
374
|
+
/** (可选)是否仅阻止事件的传播,默认false,不调用`.preventDefault()` */
|
|
375
|
+
onlyStopPropagation?: boolean;
|
|
376
|
+
}): {
|
|
377
|
+
/** 移除监听事件 */
|
|
378
|
+
off(): void;
|
|
379
|
+
};
|
|
330
380
|
/**
|
|
331
381
|
* 选择器,可使用以下的额外语法
|
|
332
382
|
*
|
|
@@ -662,7 +712,7 @@ declare class PopsDOMUtils extends PopsDOMUtilsEvent {
|
|
|
662
712
|
* @param content 子元素或HTML字符串
|
|
663
713
|
* @example
|
|
664
714
|
* // 元素a.xx的内部末尾添加一个元素
|
|
665
|
-
* DOMUtils.append(document.querySelector("a.xx"),document.querySelector("b.xx"))
|
|
715
|
+
* DOMUtils.append(document.querySelector("a.xx"), document.querySelector("b.xx"))
|
|
666
716
|
* DOMUtils.append("a.xx","'<b class="xx"></b>")
|
|
667
717
|
* */
|
|
668
718
|
append(element: Element | Node | ShadowRoot | HTMLElement | string, content: HTMLElement | string | (HTMLElement | string | Element)[] | NodeList): void;
|
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
|
/**
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { PopsCore } from "../../PopsCore";
|
|
2
1
|
import { GlobalConfig } from "../../config/GlobalConfig";
|
|
3
2
|
import { PopsElementHandler } from "../../handler/PopsElementHandler";
|
|
4
3
|
import { PopsHandler } from "../../handler/PopsHandler";
|
|
5
4
|
import { PopsCSS } from "../../PopsCSS";
|
|
6
5
|
import { PopsInstData } from "../../PopsInst";
|
|
6
|
+
import type { PopsType } from "../../types/main";
|
|
7
7
|
import { popsDOMUtils } from "../../utils/PopsDOMUtils";
|
|
8
8
|
import { PopsInstanceUtils } from "../../utils/PopsInstanceUtils";
|
|
9
9
|
import { popsUtils } from "../../utils/PopsUtils";
|
|
10
10
|
import { PopsIframeDefaultConfig } from "./defaultConfig";
|
|
11
11
|
import type { PopsIframeClickEventConfig, PopsIframeConfig } from "./types";
|
|
12
|
-
import type { PopsType } from "../../types/main";
|
|
13
12
|
|
|
14
13
|
export const PopsIframe = {
|
|
15
14
|
init(__config__: PopsIframeConfig) {
|
|
@@ -102,7 +101,7 @@ export const PopsIframe = {
|
|
|
102
101
|
$headerBtnMax: headerMaxBtnElement,
|
|
103
102
|
$headerBtnMise: headerMiseBtnElement,
|
|
104
103
|
} = PopsHandler.handleQueryElement($anim, popsType);
|
|
105
|
-
let $iframeContainer =
|
|
104
|
+
let $iframeContainer = popsDOMUtils.selector<HTMLDivElement>(".pops-iframe-container");
|
|
106
105
|
if (!$iframeContainer) {
|
|
107
106
|
$iframeContainer = popsDOMUtils.createElement("div", {
|
|
108
107
|
className: "pops-iframe-container",
|