@whitesev/pops 1.4.0 → 1.5.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.
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +50 -48
- package/src/Config.ts +3 -0
- package/src/Core.ts +45 -0
- package/src/Pops.ts +340 -0
- package/src/components/alert/index.css +45 -0
- package/src/components/alert/index.ts +216 -0
- package/src/components/alert/indexType.ts +30 -0
- package/src/components/confirm/index.css +45 -0
- package/src/components/confirm/index.ts +264 -0
- package/src/components/confirm/indexType.ts +17 -0
- package/src/components/drawer/index.css +47 -0
- package/src/components/drawer/index.ts +338 -0
- package/src/components/drawer/indexType.ts +53 -0
- package/src/components/folder/folderIcon.ts +28 -0
- package/src/components/folder/index.css +291 -0
- package/src/components/folder/index.ts +1111 -0
- package/src/components/folder/indexType.ts +87 -0
- package/src/components/iframe/index.css +90 -0
- package/src/components/iframe/index.ts +415 -0
- package/src/components/iframe/indexType.ts +144 -0
- package/src/components/loading/index.css +60 -0
- package/src/components/loading/index.ts +123 -0
- package/src/components/loading/indexType.ts +31 -0
- package/src/components/panel/buttonType.ts +60 -0
- package/src/components/panel/commonType.ts +50 -0
- package/src/components/panel/deepMenuType.ts +59 -0
- package/src/components/panel/formsType.ts +32 -0
- package/src/components/panel/index.css +754 -0
- package/src/components/panel/index.ts +2435 -0
- package/src/components/panel/indexType.ts +107 -0
- package/src/components/panel/inputType.ts +65 -0
- package/src/components/panel/ownType.ts +28 -0
- package/src/components/panel/selectType.ts +80 -0
- package/src/components/panel/sliderType.ts +59 -0
- package/src/components/panel/switchType.ts +43 -0
- package/src/components/panel/textareaType.ts +54 -0
- package/src/components/prompt/index.css +60 -0
- package/src/components/prompt/index.ts +293 -0
- package/src/components/prompt/indexType.ts +47 -0
- package/src/components/rightClickMenu/index.ts +729 -0
- package/src/components/rightClickMenu/indexType.ts +89 -0
- package/src/components/searchSuggestion/index.css +0 -0
- package/src/components/searchSuggestion/index.ts +656 -0
- package/src/components/searchSuggestion/indexType.ts +238 -0
- package/src/components/tooltip/index.css +171 -0
- package/src/components/tooltip/index.ts +358 -0
- package/src/components/tooltip/indexType.ts +95 -0
- package/src/css/animation.css +2240 -0
- package/src/css/button.css +290 -0
- package/src/css/common.css +24 -0
- package/src/css/index.css +135 -0
- package/src/css/ninePalaceGridPosition.css +50 -0
- package/src/css/scrollbar.css +18 -0
- package/src/handler/PopsElementHandler.ts +353 -0
- package/src/handler/PopsHandler.ts +659 -0
- package/src/svg/arrowLeft.svg +4 -0
- package/src/svg/arrowRight.svg +4 -0
- package/src/svg/chromeFilled.svg +14 -0
- package/src/svg/circleClose.svg +8 -0
- package/src/svg/close.svg +5 -0
- package/src/svg/cpu.svg +8 -0
- package/src/svg/delete.svg +5 -0
- package/src/svg/documentCopy.svg +5 -0
- package/src/svg/edit.svg +8 -0
- package/src/svg/eleme.svg +5 -0
- package/src/svg/elemePlus.svg +5 -0
- package/src/svg/headset.svg +5 -0
- package/src/svg/hide.svg +8 -0
- package/src/svg/keyboard.svg +8 -0
- package/src/svg/loading.svg +5 -0
- package/src/svg/max.svg +5 -0
- package/src/svg/min.svg +5 -0
- package/src/svg/mise.svg +5 -0
- package/src/svg/monitor.svg +5 -0
- package/src/svg/next.svg +5 -0
- package/src/svg/picture.svg +8 -0
- package/src/svg/prev.svg +5 -0
- package/src/svg/search.svg +5 -0
- package/src/svg/share.svg +5 -0
- package/src/svg/upload.svg +5 -0
- package/src/svg/videoPause.svg +5 -0
- package/src/svg/videoPlay.svg +5 -0
- package/src/svg/view.svg +5 -0
- package/src/types/PopsDOMUtilsEventType.d.ts +246 -0
- package/src/types/animation.d.ts +19 -0
- package/src/types/button.d.ts +226 -0
- package/src/types/components.d.ts +197 -0
- package/src/types/event.d.ts +62 -0
- package/src/types/global.d.ts +11 -0
- package/src/types/icon.d.ts +32 -0
- package/src/types/layer.d.ts +20 -0
- package/src/types/main.d.ts +136 -0
- package/src/types/mask.d.ts +35 -0
- package/src/types/position.d.ts +60 -0
- package/src/utils/AnyTouch.js +1394 -0
- package/src/utils/PopsDOMUtils.ts +2013 -0
- package/src/utils/PopsInstanceUtils.ts +685 -0
- package/src/utils/PopsMathUtils.ts +77 -0
- package/src/utils/PopsUtils.ts +380 -0
|
@@ -0,0 +1,1111 @@
|
|
|
1
|
+
import { PopsElementHandler } from "../../handler/PopsElementHandler";
|
|
2
|
+
import { PopsHandler } from "../../handler/PopsHandler";
|
|
3
|
+
import { pops } from "../../Pops";
|
|
4
|
+
import { popsDOMUtils } from "../../utils/PopsDOMUtils";
|
|
5
|
+
import { PopsInstanceUtils } from "../../utils/PopsInstanceUtils";
|
|
6
|
+
import { popsUtils } from "../../utils/PopsUtils";
|
|
7
|
+
import { Folder_ICON } from "./folderIcon";
|
|
8
|
+
import type { PopsFolderDataConfig, PopsFolderDetails } from "./indexType";
|
|
9
|
+
|
|
10
|
+
export class PopsFolder {
|
|
11
|
+
constructor(details: PopsFolderDetails) {
|
|
12
|
+
const { $shadowContainer, $shadowRoot } = PopsHandler.handlerShadow();
|
|
13
|
+
PopsHandler.handleInit($shadowRoot, [
|
|
14
|
+
pops.config.cssText.index,
|
|
15
|
+
pops.config.cssText.ninePalaceGridPosition,
|
|
16
|
+
pops.config.cssText.scrollbar,
|
|
17
|
+
pops.config.cssText.button,
|
|
18
|
+
pops.config.cssText.anim,
|
|
19
|
+
pops.config.cssText.common,
|
|
20
|
+
pops.config.cssText.folderCSS,
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
let config: Required<PopsFolderDetails> = {
|
|
24
|
+
title: {
|
|
25
|
+
text: "pops.Folder",
|
|
26
|
+
position: "center",
|
|
27
|
+
html: false,
|
|
28
|
+
style: "",
|
|
29
|
+
},
|
|
30
|
+
sort: {
|
|
31
|
+
name: "latestTime",
|
|
32
|
+
isDesc: false,
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
callback() {},
|
|
35
|
+
},
|
|
36
|
+
folder: [
|
|
37
|
+
{
|
|
38
|
+
fileName: "测试文件夹",
|
|
39
|
+
fileSize: 0,
|
|
40
|
+
fileType: "",
|
|
41
|
+
createTime: 0,
|
|
42
|
+
latestTime: 0,
|
|
43
|
+
isFolder: true,
|
|
44
|
+
index: 0,
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
clickEvent() {
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
fileName: "内部-测试文件.zip",
|
|
50
|
+
fileSize: 1025000,
|
|
51
|
+
fileType: "zip",
|
|
52
|
+
createTime: 1702038410440,
|
|
53
|
+
latestTime: 1702039602126,
|
|
54
|
+
isFolder: false,
|
|
55
|
+
index: 1,
|
|
56
|
+
clickEvent() {
|
|
57
|
+
console.log("下载文件:", this.fileName);
|
|
58
|
+
return "https://update.greasyfork.org/scripts/456485/pops.js";
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
fileName: "测试文件.apk",
|
|
66
|
+
fileSize: 30125682,
|
|
67
|
+
fileType: "apk",
|
|
68
|
+
createTime: 1702036410440,
|
|
69
|
+
latestTime: 1702039410440,
|
|
70
|
+
isFolder: false,
|
|
71
|
+
index: 1,
|
|
72
|
+
// @ts-ignore
|
|
73
|
+
clickEvent() {
|
|
74
|
+
console.log("下载文件:", this.fileName);
|
|
75
|
+
return "https://update.greasyfork.org/scripts/456485/pops.js";
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
btn: {
|
|
80
|
+
merge: false,
|
|
81
|
+
mergeReverse: false,
|
|
82
|
+
reverse: false,
|
|
83
|
+
position: "flex-end",
|
|
84
|
+
ok: {
|
|
85
|
+
enable: true,
|
|
86
|
+
size: void 0,
|
|
87
|
+
icon: void 0,
|
|
88
|
+
rightIcon: false,
|
|
89
|
+
iconIsLoading: false,
|
|
90
|
+
text: "确定",
|
|
91
|
+
type: "primary",
|
|
92
|
+
callback(event) {
|
|
93
|
+
event.close();
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
cancel: {
|
|
97
|
+
enable: true,
|
|
98
|
+
size: void 0,
|
|
99
|
+
icon: void 0,
|
|
100
|
+
rightIcon: false,
|
|
101
|
+
iconIsLoading: false,
|
|
102
|
+
text: "关闭",
|
|
103
|
+
type: "default",
|
|
104
|
+
callback(event) {
|
|
105
|
+
event.close();
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
other: {
|
|
109
|
+
enable: false,
|
|
110
|
+
size: void 0,
|
|
111
|
+
icon: void 0,
|
|
112
|
+
rightIcon: false,
|
|
113
|
+
iconIsLoading: false,
|
|
114
|
+
text: "其它按钮",
|
|
115
|
+
type: "default",
|
|
116
|
+
callback(event) {
|
|
117
|
+
event.close();
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
close: {
|
|
121
|
+
enable: true,
|
|
122
|
+
callback(event) {
|
|
123
|
+
event.close();
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
class: "",
|
|
128
|
+
only: false,
|
|
129
|
+
width: "500px",
|
|
130
|
+
height: "400px",
|
|
131
|
+
position: "center",
|
|
132
|
+
animation: "pops-anim-fadein-zoom",
|
|
133
|
+
zIndex: 10000,
|
|
134
|
+
mask: {
|
|
135
|
+
enable: false,
|
|
136
|
+
clickEvent: {
|
|
137
|
+
toClose: false,
|
|
138
|
+
toHide: false,
|
|
139
|
+
},
|
|
140
|
+
clickCallBack: void 0,
|
|
141
|
+
},
|
|
142
|
+
drag: false,
|
|
143
|
+
dragLimit: true,
|
|
144
|
+
dragExtraDistance: 3,
|
|
145
|
+
dragMoveCallBack() {},
|
|
146
|
+
dragEndCallBack() {},
|
|
147
|
+
forbiddenScroll: false,
|
|
148
|
+
style: null,
|
|
149
|
+
beforeAppendToPageCallBack() {},
|
|
150
|
+
};
|
|
151
|
+
/* 办公几件套 */
|
|
152
|
+
|
|
153
|
+
(Folder_ICON as any).docx = Folder_ICON.doc;
|
|
154
|
+
(Folder_ICON as any).rtf = Folder_ICON.doc;
|
|
155
|
+
(Folder_ICON as any).xlsx = Folder_ICON.xls;
|
|
156
|
+
(Folder_ICON as any).pptx = Folder_ICON.ppt;
|
|
157
|
+
(Folder_ICON as any).dmg = Folder_ICON.ipa;
|
|
158
|
+
(Folder_ICON as any).json = Folder_ICON.js;
|
|
159
|
+
|
|
160
|
+
/* 压缩包 */
|
|
161
|
+
let zipIconList = [
|
|
162
|
+
"rar",
|
|
163
|
+
"7z",
|
|
164
|
+
"arj",
|
|
165
|
+
"bz2",
|
|
166
|
+
"cab",
|
|
167
|
+
"iso",
|
|
168
|
+
"jar",
|
|
169
|
+
"lz",
|
|
170
|
+
"lzh",
|
|
171
|
+
"tar",
|
|
172
|
+
"uue",
|
|
173
|
+
"xz",
|
|
174
|
+
"z",
|
|
175
|
+
"zipx",
|
|
176
|
+
"zst",
|
|
177
|
+
"001",
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
/* 图片 */
|
|
181
|
+
let imageIconList = ["jpg", "jpeg", "ico", "webp"];
|
|
182
|
+
|
|
183
|
+
/* 代码语言 */
|
|
184
|
+
let codeLanguageIconList = [
|
|
185
|
+
"htm",
|
|
186
|
+
"py",
|
|
187
|
+
"vue",
|
|
188
|
+
"bat",
|
|
189
|
+
"sh",
|
|
190
|
+
"vbs",
|
|
191
|
+
"java",
|
|
192
|
+
"kt",
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
/* Android安装包 */
|
|
196
|
+
let androidIconList = ["apk", "apkm", "xapk"];
|
|
197
|
+
|
|
198
|
+
zipIconList.forEach((keyName) => {
|
|
199
|
+
(Folder_ICON as any)[keyName] = Folder_ICON.zip;
|
|
200
|
+
});
|
|
201
|
+
imageIconList.forEach((keyName) => {
|
|
202
|
+
(Folder_ICON as any)[keyName] = Folder_ICON.png;
|
|
203
|
+
});
|
|
204
|
+
codeLanguageIconList.forEach((keyName) => {
|
|
205
|
+
(Folder_ICON as any)[keyName] = Folder_ICON.html;
|
|
206
|
+
});
|
|
207
|
+
androidIconList.forEach((keyName) => {
|
|
208
|
+
(Folder_ICON as any)[keyName] = Folder_ICON.apk;
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
config = popsUtils.assign(config, details);
|
|
212
|
+
if (details?.folder) {
|
|
213
|
+
config.folder = details.folder;
|
|
214
|
+
}
|
|
215
|
+
let guid = popsUtils.getRandomGUID();
|
|
216
|
+
const PopsType = "folder";
|
|
217
|
+
|
|
218
|
+
config = PopsHandler.handleOnly(PopsType, config);
|
|
219
|
+
|
|
220
|
+
let maskHTML = PopsElementHandler.getMaskHTML(guid, config.zIndex);
|
|
221
|
+
let headerBtnHTML = PopsElementHandler.getHeaderBtnHTML(PopsType, config);
|
|
222
|
+
let bottomBtnHTML = PopsElementHandler.getBottomBtnHTML(
|
|
223
|
+
PopsType,
|
|
224
|
+
config as any
|
|
225
|
+
);
|
|
226
|
+
let { headerStyle, headerPStyle } = PopsElementHandler.getHeaderStyle(
|
|
227
|
+
PopsType,
|
|
228
|
+
|
|
229
|
+
config
|
|
230
|
+
);
|
|
231
|
+
let animHTML = PopsElementHandler.getAnimHTML(
|
|
232
|
+
guid,
|
|
233
|
+
PopsType,
|
|
234
|
+
config,
|
|
235
|
+
`
|
|
236
|
+
<div class="pops-folder-title" style="text-align: ${
|
|
237
|
+
config.title.position
|
|
238
|
+
};${headerStyle}">
|
|
239
|
+
${
|
|
240
|
+
config.title.html
|
|
241
|
+
? config.title.text
|
|
242
|
+
: `<p pops style="${headerPStyle}">${config.title.text}</p>`
|
|
243
|
+
}
|
|
244
|
+
${headerBtnHTML}
|
|
245
|
+
</div>
|
|
246
|
+
<div class="pops-folder-content ${
|
|
247
|
+
pops.isPhone() ? "pops-mobile-folder-content" : ""
|
|
248
|
+
}">
|
|
249
|
+
<div class="pops-folder-list">
|
|
250
|
+
<div class="pops-folder-file-list-breadcrumb">
|
|
251
|
+
<div class="pops-folder-file-list-breadcrumb-primary">
|
|
252
|
+
<span class="pops-folder-file-list-breadcrumb-allFiles cursor-p" title="全部文件">
|
|
253
|
+
<a>全部文件</a>
|
|
254
|
+
</span>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="pops-folder-list-table__header-div">
|
|
258
|
+
<table class="pops-folder-list-table__header">
|
|
259
|
+
<colgroup>
|
|
260
|
+
<!-- <col width="8%"> --!>
|
|
261
|
+
<col width="52%">
|
|
262
|
+
<col width="24%">
|
|
263
|
+
<col width="16%">
|
|
264
|
+
</colgroup>
|
|
265
|
+
<thead>
|
|
266
|
+
<tr class="pops-folder-list-table__header-row">
|
|
267
|
+
<th class="pops-folder-list-table__header-th cursor-p">
|
|
268
|
+
<div class="text-ellip content flex-a-i-center">
|
|
269
|
+
<span>文件名</span>
|
|
270
|
+
<div class="pops-folder-list-table__sort" data-sort="fileName">
|
|
271
|
+
<div class="pops-folder-icon-arrow">
|
|
272
|
+
<svg
|
|
273
|
+
viewBox="0 0 1024 1024"
|
|
274
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
275
|
+
<path
|
|
276
|
+
d="M509.624392 5.882457 57.127707 458.379143 962.121078 458.379143Z"
|
|
277
|
+
class="pops-folder-icon-arrow-up"></path>
|
|
278
|
+
<path
|
|
279
|
+
d="M509.624392 1024 962.121078 571.503314 57.127707 571.503314Z"
|
|
280
|
+
class="pops-folder-icon-arrow-down"></path>
|
|
281
|
+
</svg>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</th>
|
|
286
|
+
<th class="pops-folder-list-table__header-th cursor-p">
|
|
287
|
+
<div class="text-ellip content flex-a-i-center">
|
|
288
|
+
<span>修改时间</span>
|
|
289
|
+
<div class="pops-folder-list-table__sort" data-sort="latestTime">
|
|
290
|
+
<div class="pops-folder-icon-arrow">
|
|
291
|
+
<svg
|
|
292
|
+
viewBox="0 0 1024 1024"
|
|
293
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
294
|
+
<path
|
|
295
|
+
d="M509.624392 5.882457 57.127707 458.379143 962.121078 458.379143Z"
|
|
296
|
+
class="pops-folder-icon-arrow-up"></path>
|
|
297
|
+
<path
|
|
298
|
+
d="M509.624392 1024 962.121078 571.503314 57.127707 571.503314Z"
|
|
299
|
+
class="pops-folder-icon-arrow-down"></path>
|
|
300
|
+
</svg>
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
</th>
|
|
305
|
+
<th class="pops-folder-list-table__header-th cursor-p">
|
|
306
|
+
<div class="text-ellip content flex-a-i-center">
|
|
307
|
+
<span>大小</span>
|
|
308
|
+
<div class="pops-folder-list-table__sort" data-sort="fileSize">
|
|
309
|
+
<div class="pops-folder-icon-arrow">
|
|
310
|
+
<svg
|
|
311
|
+
viewBox="0 0 1024 1024"
|
|
312
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
313
|
+
<path
|
|
314
|
+
d="M509.624392 5.882457 57.127707 458.379143 962.121078 458.379143Z"
|
|
315
|
+
class="pops-folder-icon-arrow-up"></path>
|
|
316
|
+
<path
|
|
317
|
+
d="M509.624392 1024 962.121078 571.503314 57.127707 571.503314Z"
|
|
318
|
+
class="pops-folder-icon-arrow-down"></path>
|
|
319
|
+
</svg>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</th>
|
|
324
|
+
</tr>
|
|
325
|
+
</thead>
|
|
326
|
+
</table>
|
|
327
|
+
</div>
|
|
328
|
+
<div class="pops-folder-list-table__body-div">
|
|
329
|
+
<table class="pops-folder-list-table__body">
|
|
330
|
+
<colgroup>
|
|
331
|
+
<!-- <col width="8%"> --!>
|
|
332
|
+
${
|
|
333
|
+
pops.isPhone()
|
|
334
|
+
? `<col width="100%">`
|
|
335
|
+
: `
|
|
336
|
+
<col width="52%">
|
|
337
|
+
<col width="24%">
|
|
338
|
+
<col width="16%">`
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
</colgroup>
|
|
342
|
+
<tbody>
|
|
343
|
+
|
|
344
|
+
</tbody>
|
|
345
|
+
</table>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
${bottomBtnHTML}
|
|
350
|
+
`,
|
|
351
|
+
bottomBtnHTML
|
|
352
|
+
);
|
|
353
|
+
/**
|
|
354
|
+
* 弹窗的主元素,包括动画层
|
|
355
|
+
*/
|
|
356
|
+
let $anim = PopsElementHandler.parseElement<HTMLDivElement>(animHTML);
|
|
357
|
+
let {
|
|
358
|
+
popsElement: $pops,
|
|
359
|
+
titleElement: $title,
|
|
360
|
+
contentElement: $content,
|
|
361
|
+
|
|
362
|
+
// folderListElement,
|
|
363
|
+
|
|
364
|
+
// folderListHeaderElement,
|
|
365
|
+
|
|
366
|
+
// folderListHeaderRowElement,
|
|
367
|
+
folderListBodyElement,
|
|
368
|
+
folderFileListBreadcrumbPrimaryElement,
|
|
369
|
+
headerCloseBtnElement: $btnCloseBtn,
|
|
370
|
+
btnOkElement,
|
|
371
|
+
btnCancelElement,
|
|
372
|
+
btnOtherElement,
|
|
373
|
+
folderListSortFileNameElement,
|
|
374
|
+
folderListSortLatestTimeElement,
|
|
375
|
+
folderListSortFileSizeElement,
|
|
376
|
+
} = PopsHandler.handleQueryElement($anim, PopsType);
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* 遮罩层元素
|
|
380
|
+
*/
|
|
381
|
+
let $mask: HTMLDivElement | null = null;
|
|
382
|
+
/**
|
|
383
|
+
* 已创建的元素列表
|
|
384
|
+
*/
|
|
385
|
+
let elementList: HTMLElement[] = [$anim];
|
|
386
|
+
|
|
387
|
+
if (config.mask.enable) {
|
|
388
|
+
let _handleMask_ = PopsHandler.handleMask({
|
|
389
|
+
type: PopsType,
|
|
390
|
+
guid: guid,
|
|
391
|
+
config: config,
|
|
392
|
+
animElement: $anim,
|
|
393
|
+
maskHTML: maskHTML,
|
|
394
|
+
});
|
|
395
|
+
$mask = _handleMask_.maskElement;
|
|
396
|
+
elementList.push($mask);
|
|
397
|
+
}
|
|
398
|
+
/* 事件 */
|
|
399
|
+
let eventDetails = PopsHandler.handleEventDetails(
|
|
400
|
+
guid,
|
|
401
|
+
$shadowContainer,
|
|
402
|
+
$shadowRoot,
|
|
403
|
+
PopsType,
|
|
404
|
+
$anim,
|
|
405
|
+
$pops,
|
|
406
|
+
$mask!,
|
|
407
|
+
config
|
|
408
|
+
);
|
|
409
|
+
PopsHandler.handleClickEvent(
|
|
410
|
+
"close",
|
|
411
|
+
$btnCloseBtn,
|
|
412
|
+
eventDetails,
|
|
413
|
+
config.btn.close!.callback!
|
|
414
|
+
);
|
|
415
|
+
PopsHandler.handleClickEvent(
|
|
416
|
+
"ok",
|
|
417
|
+
btnOkElement,
|
|
418
|
+
eventDetails,
|
|
419
|
+
config.btn.ok!.callback!
|
|
420
|
+
);
|
|
421
|
+
PopsHandler.handleClickEvent(
|
|
422
|
+
"cancel",
|
|
423
|
+
btnCancelElement,
|
|
424
|
+
eventDetails,
|
|
425
|
+
config.btn.cancel!.callback!
|
|
426
|
+
);
|
|
427
|
+
PopsHandler.handleClickEvent(
|
|
428
|
+
"other",
|
|
429
|
+
btnOtherElement,
|
|
430
|
+
eventDetails,
|
|
431
|
+
config.btn.other!.callback!
|
|
432
|
+
);
|
|
433
|
+
/* 创建到页面中 */
|
|
434
|
+
|
|
435
|
+
popsDOMUtils.append($shadowRoot, elementList);
|
|
436
|
+
if (typeof config.beforeAppendToPageCallBack === "function") {
|
|
437
|
+
config.beforeAppendToPageCallBack($shadowRoot, $shadowContainer);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
popsDOMUtils.appendBody($shadowContainer);
|
|
441
|
+
if ($mask != null) {
|
|
442
|
+
$anim.after($mask);
|
|
443
|
+
}
|
|
444
|
+
/* 添加文件信息 */
|
|
445
|
+
config.folder.sort();
|
|
446
|
+
/**
|
|
447
|
+
* 创建文件夹元素
|
|
448
|
+
* @param fileName
|
|
449
|
+
* @param latestTime
|
|
450
|
+
* @param [fileSize="-"]
|
|
451
|
+
*/
|
|
452
|
+
function createFolderRowElement(
|
|
453
|
+
fileName: string,
|
|
454
|
+
latestTime = "-",
|
|
455
|
+
fileSize = "-"
|
|
456
|
+
) {
|
|
457
|
+
let origin_fileName = fileName;
|
|
458
|
+
let origin_latestTime = latestTime;
|
|
459
|
+
let origin_fileSize = fileSize;
|
|
460
|
+
|
|
461
|
+
let folderELement = popsDOMUtils.createElement("tr");
|
|
462
|
+
|
|
463
|
+
let fileNameElement = popsDOMUtils.createElement("td");
|
|
464
|
+
|
|
465
|
+
let fileTimeElement = popsDOMUtils.createElement("td");
|
|
466
|
+
|
|
467
|
+
let fileFormatSize = popsDOMUtils.createElement("td");
|
|
468
|
+
let fileType = "";
|
|
469
|
+
let fileIcon = Folder_ICON.folder;
|
|
470
|
+
if (arguments.length === 1) {
|
|
471
|
+
/* 文件夹 */
|
|
472
|
+
latestTime = "";
|
|
473
|
+
fileSize = "";
|
|
474
|
+
} else {
|
|
475
|
+
/* 文件 */
|
|
476
|
+
fileIcon = "";
|
|
477
|
+
if (typeof latestTime === "number") {
|
|
478
|
+
latestTime = popsUtils.formatTime(latestTime);
|
|
479
|
+
}
|
|
480
|
+
if (typeof fileSize === "number") {
|
|
481
|
+
fileSize = popsUtils.formatByteToSize(fileSize) as string;
|
|
482
|
+
}
|
|
483
|
+
for (let keyName in Folder_ICON) {
|
|
484
|
+
if (fileName.toLowerCase().endsWith("." + keyName)) {
|
|
485
|
+
fileType = keyName;
|
|
486
|
+
|
|
487
|
+
fileIcon = (Folder_ICON as any)[keyName];
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
if (!Boolean(fileIcon)) {
|
|
492
|
+
fileType = "Null";
|
|
493
|
+
fileIcon = Folder_ICON.Null;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
folderELement.className = "pops-folder-list-table__body-row";
|
|
497
|
+
fileNameElement.className = "pops-folder-list-table__body-td";
|
|
498
|
+
fileTimeElement.className = "pops-folder-list-table__body-td";
|
|
499
|
+
fileFormatSize.className = "pops-folder-list-table__body-td";
|
|
500
|
+
fileNameElement.innerHTML = `
|
|
501
|
+
<div class="pops-folder-list-file-name cursor-p">
|
|
502
|
+
<div>
|
|
503
|
+
<img src="${fileIcon}" alt="${fileType}" class="pops-folder-list-file-icon u-file-icon u-file-icon--list">
|
|
504
|
+
<a title="${fileName}" class="pops-folder-list-file-name-title-text inline-block-v-middle text-ellip list-name-text">
|
|
505
|
+
${fileName}
|
|
506
|
+
</a>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
`;
|
|
510
|
+
fileTimeElement.innerHTML = `
|
|
511
|
+
<div class="pops-folder-list__time">
|
|
512
|
+
<span>${latestTime}</span>
|
|
513
|
+
</div>
|
|
514
|
+
`;
|
|
515
|
+
|
|
516
|
+
fileFormatSize.innerHTML = `
|
|
517
|
+
<div class="pops-folder-list-format-size">
|
|
518
|
+
<span>${fileSize}</span>
|
|
519
|
+
</div>
|
|
520
|
+
`;
|
|
521
|
+
/* 存储原来的值 */
|
|
522
|
+
let __value__ = {
|
|
523
|
+
fileName: origin_fileName,
|
|
524
|
+
latestTime: origin_latestTime,
|
|
525
|
+
fileSize: origin_fileSize,
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
(fileNameElement as any)["__value__"] = __value__;
|
|
529
|
+
|
|
530
|
+
(fileTimeElement as any)["__value__"] = __value__;
|
|
531
|
+
|
|
532
|
+
(fileFormatSize as any)["__value__"] = __value__;
|
|
533
|
+
|
|
534
|
+
(folderELement as any)["__value__"] = __value__;
|
|
535
|
+
folderELement.appendChild(fileNameElement);
|
|
536
|
+
folderELement.appendChild(fileTimeElement);
|
|
537
|
+
folderELement.appendChild(fileFormatSize);
|
|
538
|
+
return {
|
|
539
|
+
folderELement,
|
|
540
|
+
fileNameElement,
|
|
541
|
+
fileTimeElement,
|
|
542
|
+
fileFormatSize,
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* 创建移动端文件夹元素
|
|
547
|
+
*/
|
|
548
|
+
function createMobileFolderRowElement(
|
|
549
|
+
fileName: string,
|
|
550
|
+
latestTime = "-",
|
|
551
|
+
fileSize = "-"
|
|
552
|
+
) {
|
|
553
|
+
let origin_fileName = fileName;
|
|
554
|
+
let origin_latestTime = latestTime;
|
|
555
|
+
let origin_fileSize = fileSize;
|
|
556
|
+
|
|
557
|
+
let folderELement = popsDOMUtils.createElement("tr");
|
|
558
|
+
|
|
559
|
+
let fileNameElement = popsDOMUtils.createElement("td");
|
|
560
|
+
let fileType = "";
|
|
561
|
+
let fileIcon = Folder_ICON.folder;
|
|
562
|
+
if (arguments.length === 1) {
|
|
563
|
+
/* 文件夹 */
|
|
564
|
+
latestTime = "";
|
|
565
|
+
fileSize = "";
|
|
566
|
+
} else {
|
|
567
|
+
/* 文件 */
|
|
568
|
+
fileIcon = "";
|
|
569
|
+
if (typeof latestTime === "number") {
|
|
570
|
+
latestTime = popsUtils.formatTime(latestTime);
|
|
571
|
+
}
|
|
572
|
+
if (typeof fileSize === "number") {
|
|
573
|
+
fileSize = popsUtils.formatByteToSize(fileSize) as string;
|
|
574
|
+
}
|
|
575
|
+
for (let keyName in Folder_ICON) {
|
|
576
|
+
if (fileName.toLowerCase().endsWith("." + keyName)) {
|
|
577
|
+
fileType = keyName;
|
|
578
|
+
|
|
579
|
+
fileIcon = (Folder_ICON as any)[keyName];
|
|
580
|
+
break;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
if (!Boolean(fileIcon)) {
|
|
584
|
+
fileType = "Null";
|
|
585
|
+
fileIcon = Folder_ICON.Null;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
folderELement.className = "pops-folder-list-table__body-row";
|
|
589
|
+
fileNameElement.className = "pops-folder-list-table__body-td";
|
|
590
|
+
fileNameElement.innerHTML = `
|
|
591
|
+
<div class="pops-folder-list-file-name pops-mobile-folder-list-file-name cursor-p">
|
|
592
|
+
<img src="${fileIcon}" alt="${fileType}" class="pops-folder-list-file-icon u-file-icon u-file-icon--list">
|
|
593
|
+
<div>
|
|
594
|
+
<a title="${fileName}" class="pops-folder-list-file-name-title-text inline-block-v-middle text-ellip list-name-text">
|
|
595
|
+
${fileName}
|
|
596
|
+
</a>
|
|
597
|
+
<span>${latestTime} ${fileSize}</span>
|
|
598
|
+
</div>
|
|
599
|
+
</div>
|
|
600
|
+
`;
|
|
601
|
+
/* 存储原来的值 */
|
|
602
|
+
let __value__ = {
|
|
603
|
+
fileName: origin_fileName,
|
|
604
|
+
latestTime: origin_latestTime,
|
|
605
|
+
fileSize: origin_fileSize,
|
|
606
|
+
};
|
|
607
|
+
|
|
608
|
+
(fileNameElement as any)["__value__"] = __value__;
|
|
609
|
+
|
|
610
|
+
(folderELement as any)["__value__"] = __value__;
|
|
611
|
+
folderELement.appendChild(fileNameElement);
|
|
612
|
+
return {
|
|
613
|
+
folderELement,
|
|
614
|
+
fileNameElement,
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* 清空每行的元素
|
|
619
|
+
*/
|
|
620
|
+
function clearFolerRow() {
|
|
621
|
+
folderListBodyElement.innerHTML = "";
|
|
622
|
+
}
|
|
623
|
+
function getArrowIconElement() {
|
|
624
|
+
let iconArrowElement = popsDOMUtils.createElement("div", {
|
|
625
|
+
className: "iconArrow",
|
|
626
|
+
});
|
|
627
|
+
return iconArrowElement;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* 添加顶部导航
|
|
631
|
+
* @param name
|
|
632
|
+
* @param _config_
|
|
633
|
+
* @returns
|
|
634
|
+
*/
|
|
635
|
+
function getBreadcrumbAllFilesElement(
|
|
636
|
+
name: string,
|
|
637
|
+
_config_: PopsFolderDataConfig
|
|
638
|
+
) {
|
|
639
|
+
let spanElement = popsDOMUtils.createElement(
|
|
640
|
+
"span",
|
|
641
|
+
{
|
|
642
|
+
className: "pops-folder-file-list-breadcrumb-allFiles cursor-p",
|
|
643
|
+
innerHTML: `<a>${name}</a>`,
|
|
644
|
+
|
|
645
|
+
_config_: _config_,
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
title: "name",
|
|
649
|
+
}
|
|
650
|
+
);
|
|
651
|
+
return spanElement;
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* 顶部导航的点击事件
|
|
655
|
+
* @param event
|
|
656
|
+
* @param isTop 是否是全部文件按钮
|
|
657
|
+
* @param _config_ 配置
|
|
658
|
+
*/
|
|
659
|
+
|
|
660
|
+
function breadcrumbAllFilesElementClickEvent(
|
|
661
|
+
event: Event,
|
|
662
|
+
isTop: boolean,
|
|
663
|
+
_config_: PopsFolderDataConfig[]
|
|
664
|
+
) {
|
|
665
|
+
clearFolerRow();
|
|
666
|
+
/* 获取当前的导航元素 */
|
|
667
|
+
let $click = event.target as HTMLElement;
|
|
668
|
+
let currentBreadcrumb = $click.closest<HTMLSpanElement>(
|
|
669
|
+
"span.pops-folder-file-list-breadcrumb-allFiles"
|
|
670
|
+
);
|
|
671
|
+
if (currentBreadcrumb) {
|
|
672
|
+
while (currentBreadcrumb.nextElementSibling) {
|
|
673
|
+
currentBreadcrumb.nextElementSibling.remove();
|
|
674
|
+
}
|
|
675
|
+
} else {
|
|
676
|
+
console.error("获取导航按钮失败");
|
|
677
|
+
}
|
|
678
|
+
let loadingMask = pops.loading({
|
|
679
|
+
parent: $content,
|
|
680
|
+
|
|
681
|
+
content: {
|
|
682
|
+
text: "获取文件列表中...",
|
|
683
|
+
},
|
|
684
|
+
mask: {
|
|
685
|
+
enable: true,
|
|
686
|
+
clickEvent: {
|
|
687
|
+
toClose: false,
|
|
688
|
+
toHide: false,
|
|
689
|
+
},
|
|
690
|
+
},
|
|
691
|
+
addIndexCSS: false,
|
|
692
|
+
});
|
|
693
|
+
addFolderElement(_config_);
|
|
694
|
+
loadingMask.close();
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* 刷新文件列表界面信息
|
|
698
|
+
* @param event
|
|
699
|
+
* @param _config_
|
|
700
|
+
*/
|
|
701
|
+
async function refreshFolderInfoClickEvent(
|
|
702
|
+
event: MouseEvent | PointerEvent,
|
|
703
|
+
_config_: PopsFolderDataConfig
|
|
704
|
+
) {
|
|
705
|
+
clearFolerRow();
|
|
706
|
+
let loadingMask = pops.loading({
|
|
707
|
+
parent: $content,
|
|
708
|
+
|
|
709
|
+
content: {
|
|
710
|
+
text: "获取文件列表中...",
|
|
711
|
+
},
|
|
712
|
+
|
|
713
|
+
mask: {
|
|
714
|
+
enable: true,
|
|
715
|
+
},
|
|
716
|
+
addIndexCSS: false,
|
|
717
|
+
});
|
|
718
|
+
if (typeof _config_.clickEvent === "function") {
|
|
719
|
+
let childConfig = await _config_.clickEvent(event, _config_);
|
|
720
|
+
/* 添加顶部导航的箭头 */
|
|
721
|
+
|
|
722
|
+
folderFileListBreadcrumbPrimaryElement.appendChild(
|
|
723
|
+
getArrowIconElement()
|
|
724
|
+
);
|
|
725
|
+
/* 获取顶部导航 */
|
|
726
|
+
let breadcrumbAllFilesElement = getBreadcrumbAllFilesElement(
|
|
727
|
+
_config_["fileName"],
|
|
728
|
+
childConfig as any
|
|
729
|
+
);
|
|
730
|
+
|
|
731
|
+
folderFileListBreadcrumbPrimaryElement.appendChild(
|
|
732
|
+
breadcrumbAllFilesElement
|
|
733
|
+
);
|
|
734
|
+
/* 设置顶部导航点击事件 */
|
|
735
|
+
|
|
736
|
+
popsDOMUtils.on<MouseEvent | PointerEvent>(
|
|
737
|
+
breadcrumbAllFilesElement,
|
|
738
|
+
"click",
|
|
739
|
+
function (event) {
|
|
740
|
+
breadcrumbAllFilesElementClickEvent(
|
|
741
|
+
event,
|
|
742
|
+
false,
|
|
743
|
+
childConfig as any
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
);
|
|
747
|
+
|
|
748
|
+
addFolderElement(childConfig as any);
|
|
749
|
+
}
|
|
750
|
+
loadingMask.close();
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* 设置文件点击事件
|
|
754
|
+
* @param targetElement
|
|
755
|
+
* @param _config_
|
|
756
|
+
*/
|
|
757
|
+
function setFileClickEvent(
|
|
758
|
+
targetElement: HTMLElement,
|
|
759
|
+
_config_: PopsFolderDataConfig
|
|
760
|
+
) {
|
|
761
|
+
popsDOMUtils.on<MouseEvent | PointerEvent>(
|
|
762
|
+
targetElement,
|
|
763
|
+
"click",
|
|
764
|
+
async function (event) {
|
|
765
|
+
event?.preventDefault();
|
|
766
|
+
event?.stopPropagation();
|
|
767
|
+
event?.stopImmediatePropagation();
|
|
768
|
+
let linkElement = targetElement.querySelector("a")!;
|
|
769
|
+
if (typeof _config_.clickEvent === "function") {
|
|
770
|
+
let downloadInfo = await _config_.clickEvent(event, _config_)!;
|
|
771
|
+
if (
|
|
772
|
+
typeof downloadInfo === "object" &&
|
|
773
|
+
typeof downloadInfo.url === "string" &&
|
|
774
|
+
downloadInfo.url.trim() !== ""
|
|
775
|
+
) {
|
|
776
|
+
linkElement.setAttribute("href", downloadInfo.url);
|
|
777
|
+
linkElement.setAttribute("target", "_blank");
|
|
778
|
+
if (downloadInfo.autoDownload) {
|
|
779
|
+
if (
|
|
780
|
+
downloadInfo.mode == null ||
|
|
781
|
+
(downloadInfo as any).mode === ""
|
|
782
|
+
) {
|
|
783
|
+
/* 未设置mode的话默认为aBlank */
|
|
784
|
+
downloadInfo.mode = "aBlank";
|
|
785
|
+
}
|
|
786
|
+
if (
|
|
787
|
+
downloadInfo.mode === "a" ||
|
|
788
|
+
downloadInfo.mode === "aBlank"
|
|
789
|
+
) {
|
|
790
|
+
/* a标签下载 */
|
|
791
|
+
let downloadLinkElement = document.createElement("a");
|
|
792
|
+
|
|
793
|
+
if (downloadInfo.mode === "aBlank") {
|
|
794
|
+
downloadLinkElement.setAttribute("target", "_blank");
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
downloadLinkElement.href = downloadInfo.url;
|
|
798
|
+
downloadLinkElement.click();
|
|
799
|
+
} else if (
|
|
800
|
+
downloadInfo.mode === "open" ||
|
|
801
|
+
downloadInfo.mode === "openBlank"
|
|
802
|
+
) {
|
|
803
|
+
/* window.open下载 */
|
|
804
|
+
|
|
805
|
+
if (downloadInfo.mode === "openBlank") {
|
|
806
|
+
globalThis.open(downloadInfo.url, "_blank");
|
|
807
|
+
} else {
|
|
808
|
+
globalThis.open(downloadInfo.url);
|
|
809
|
+
}
|
|
810
|
+
} else if (downloadInfo.mode === "iframe") {
|
|
811
|
+
/* iframe下载 */
|
|
812
|
+
let downloadIframeLinkElement =
|
|
813
|
+
document.createElement("iframe");
|
|
814
|
+
|
|
815
|
+
downloadIframeLinkElement.src = downloadInfo.url;
|
|
816
|
+
downloadIframeLinkElement.onload = function () {
|
|
817
|
+
setTimeout(() => {
|
|
818
|
+
downloadIframeLinkElement.remove();
|
|
819
|
+
}, 1000);
|
|
820
|
+
};
|
|
821
|
+
$shadowRoot.appendChild(downloadIframeLinkElement);
|
|
822
|
+
setTimeout(() => {
|
|
823
|
+
downloadIframeLinkElement.remove();
|
|
824
|
+
}, 3 * 60 * 1000);
|
|
825
|
+
} else {
|
|
826
|
+
console.error("未知的下载模式", downloadInfo);
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
);
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* 对配置进行排序
|
|
836
|
+
* @param _config_
|
|
837
|
+
* @param sortName 比较的属性,默认fileName
|
|
838
|
+
* @param isDesc 是否降序,默认false(升序)
|
|
839
|
+
*/
|
|
840
|
+
function sortFolderConfig(
|
|
841
|
+
_config_: PopsFolderDataConfig[],
|
|
842
|
+
sortName: "fileName" | "fileSize" | "latestTime" = "fileName",
|
|
843
|
+
isDesc = false
|
|
844
|
+
) {
|
|
845
|
+
_config_.sort((a, b) => {
|
|
846
|
+
let beforeVal = a[sortName];
|
|
847
|
+
let afterVal = b[sortName];
|
|
848
|
+
if (sortName === "fileName") {
|
|
849
|
+
/* 文件名,进行字符串转换 */
|
|
850
|
+
beforeVal = beforeVal.toString();
|
|
851
|
+
afterVal = afterVal.toString();
|
|
852
|
+
} else if (sortName === "fileSize") {
|
|
853
|
+
/* 文件大小,进行Float转换 */
|
|
854
|
+
|
|
855
|
+
beforeVal = parseFloat(beforeVal as string);
|
|
856
|
+
|
|
857
|
+
afterVal = parseFloat(afterVal as string);
|
|
858
|
+
} else if (sortName === "latestTime") {
|
|
859
|
+
/* 文件时间 */
|
|
860
|
+
beforeVal = new Date(beforeVal).getTime();
|
|
861
|
+
afterVal = new Date(afterVal).getTime();
|
|
862
|
+
}
|
|
863
|
+
if (typeof beforeVal === "string" && typeof afterVal === "string") {
|
|
864
|
+
let compareVal = beforeVal.localeCompare(afterVal);
|
|
865
|
+
if (isDesc) {
|
|
866
|
+
/* 降序 */
|
|
867
|
+
if (compareVal > 0) {
|
|
868
|
+
compareVal = -1;
|
|
869
|
+
} else if (compareVal < 0) {
|
|
870
|
+
compareVal = 1;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
return compareVal;
|
|
874
|
+
} else {
|
|
875
|
+
if (beforeVal > afterVal) {
|
|
876
|
+
if (isDesc) {
|
|
877
|
+
/* 降序 */
|
|
878
|
+
return -1;
|
|
879
|
+
} else {
|
|
880
|
+
return 1;
|
|
881
|
+
}
|
|
882
|
+
} else if (beforeVal < afterVal) {
|
|
883
|
+
if (isDesc) {
|
|
884
|
+
/* 降序 */
|
|
885
|
+
return 1;
|
|
886
|
+
} else {
|
|
887
|
+
return -1;
|
|
888
|
+
}
|
|
889
|
+
} else {
|
|
890
|
+
return 0;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
});
|
|
894
|
+
return _config_;
|
|
895
|
+
}
|
|
896
|
+
/**
|
|
897
|
+
* 添加元素
|
|
898
|
+
* @param _config_
|
|
899
|
+
*/
|
|
900
|
+
function addFolderElement(_config_: PopsFolderDataConfig[]) {
|
|
901
|
+
sortFolderConfig(_config_, config.sort.name, config.sort.isDesc);
|
|
902
|
+
_config_.forEach((item) => {
|
|
903
|
+
if (item["isFolder"]) {
|
|
904
|
+
let { folderELement, fileNameElement } = pops.isPhone()
|
|
905
|
+
? createMobileFolderRowElement(item["fileName"])
|
|
906
|
+
: createFolderRowElement(item["fileName"]);
|
|
907
|
+
|
|
908
|
+
popsDOMUtils.on<MouseEvent | PointerEvent>(
|
|
909
|
+
fileNameElement,
|
|
910
|
+
"click",
|
|
911
|
+
(event) => {
|
|
912
|
+
refreshFolderInfoClickEvent(event, item);
|
|
913
|
+
}
|
|
914
|
+
);
|
|
915
|
+
|
|
916
|
+
folderListBodyElement.appendChild(folderELement);
|
|
917
|
+
} else {
|
|
918
|
+
let { folderELement, fileNameElement } = pops.isPhone()
|
|
919
|
+
? createMobileFolderRowElement(
|
|
920
|
+
item["fileName"],
|
|
921
|
+
(item as any)["latestTime"],
|
|
922
|
+
(item as any)["fileSize"]
|
|
923
|
+
)
|
|
924
|
+
: createFolderRowElement(
|
|
925
|
+
item["fileName"],
|
|
926
|
+
(item as any)["latestTime"],
|
|
927
|
+
(item as any)["fileSize"]
|
|
928
|
+
);
|
|
929
|
+
setFileClickEvent(fileNameElement, item);
|
|
930
|
+
|
|
931
|
+
folderListBodyElement.appendChild(folderELement);
|
|
932
|
+
}
|
|
933
|
+
});
|
|
934
|
+
}
|
|
935
|
+
addFolderElement(config.folder);
|
|
936
|
+
/* 将数据存到全部文件的属性_config_中 */
|
|
937
|
+
|
|
938
|
+
let allFilesElement =
|
|
939
|
+
folderFileListBreadcrumbPrimaryElement.querySelector<HTMLDivElement>(
|
|
940
|
+
".pops-folder-list .pops-folder-file-list-breadcrumb-allFiles:first-child"
|
|
941
|
+
)!;
|
|
942
|
+
|
|
943
|
+
(allFilesElement as any)._config_ = config.folder;
|
|
944
|
+
/* 设置点击顶部的全部文件事件 */
|
|
945
|
+
|
|
946
|
+
popsDOMUtils.on<MouseEvent | PointerEvent>(
|
|
947
|
+
allFilesElement,
|
|
948
|
+
"click",
|
|
949
|
+
(event) => {
|
|
950
|
+
breadcrumbAllFilesElementClickEvent(event, true, config.folder);
|
|
951
|
+
}
|
|
952
|
+
);
|
|
953
|
+
|
|
954
|
+
/* 移除所有的当前排序的arrow */
|
|
955
|
+
function removeAllArrowActive() {
|
|
956
|
+
[
|
|
957
|
+
...Array.from(
|
|
958
|
+
folderListSortFileNameElement.querySelectorAll<HTMLElement>(
|
|
959
|
+
".pops-folder-icon-active"
|
|
960
|
+
)
|
|
961
|
+
),
|
|
962
|
+
...Array.from(
|
|
963
|
+
folderListSortLatestTimeElement.querySelectorAll<HTMLElement>(
|
|
964
|
+
".pops-folder-icon-active"
|
|
965
|
+
)
|
|
966
|
+
),
|
|
967
|
+
...Array.from(
|
|
968
|
+
folderListSortFileSizeElement.querySelectorAll<HTMLElement>(
|
|
969
|
+
".pops-folder-icon-active"
|
|
970
|
+
)
|
|
971
|
+
),
|
|
972
|
+
].forEach((ele) => ele.classList.remove("pops-folder-icon-active"));
|
|
973
|
+
}
|
|
974
|
+
/* 设置当前的排序的arrow */
|
|
975
|
+
|
|
976
|
+
function changeArrowActive(
|
|
977
|
+
arrowUp: HTMLElement,
|
|
978
|
+
arrowDown: HTMLElement,
|
|
979
|
+
isDesc: boolean
|
|
980
|
+
) {
|
|
981
|
+
removeAllArrowActive();
|
|
982
|
+
if (isDesc) {
|
|
983
|
+
arrowDown.classList.add("pops-folder-icon-active");
|
|
984
|
+
} else {
|
|
985
|
+
arrowUp.classList.add("pops-folder-icon-active");
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
/**
|
|
989
|
+
* 排序按钮的点击事件
|
|
990
|
+
* @param {PointerEvent} target
|
|
991
|
+
* @param {HTMLElement} event
|
|
992
|
+
* @param {string} sortName
|
|
993
|
+
* @returns
|
|
994
|
+
*/
|
|
995
|
+
function arrowSortClickEvent(
|
|
996
|
+
target: HTMLDivElement,
|
|
997
|
+
event: MouseEvent | PointerEvent,
|
|
998
|
+
sortName: string
|
|
999
|
+
) {
|
|
1000
|
+
if (!(event as any)["notChangeSortRule"]) {
|
|
1001
|
+
(config as any).sort.name = sortName;
|
|
1002
|
+
config.sort.isDesc = !config.sort.isDesc;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
let arrowUp = target.querySelector<HTMLDivElement>(
|
|
1006
|
+
".pops-folder-icon-arrow-up"
|
|
1007
|
+
)!;
|
|
1008
|
+
let arrowDown = target.querySelector<HTMLDivElement>(
|
|
1009
|
+
".pops-folder-icon-arrow-down"
|
|
1010
|
+
)!;
|
|
1011
|
+
changeArrowActive(arrowUp, arrowDown, config.sort.isDesc);
|
|
1012
|
+
if (
|
|
1013
|
+
typeof config.sort.callback === "function" &&
|
|
1014
|
+
config.sort.callback(
|
|
1015
|
+
target,
|
|
1016
|
+
event,
|
|
1017
|
+
config.sort.name,
|
|
1018
|
+
config.sort.isDesc
|
|
1019
|
+
)
|
|
1020
|
+
) {
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
let childrenList: PopsFolderDataConfig[] = [];
|
|
1025
|
+
|
|
1026
|
+
Array.from(folderListBodyElement.children).forEach((trElement) => {
|
|
1027
|
+
let __value__ = (trElement as any)["__value__"];
|
|
1028
|
+
__value__["target"] = trElement;
|
|
1029
|
+
childrenList.push(__value__);
|
|
1030
|
+
});
|
|
1031
|
+
let sortedConfigList = sortFolderConfig(
|
|
1032
|
+
childrenList as any,
|
|
1033
|
+
config.sort.name,
|
|
1034
|
+
config.sort.isDesc
|
|
1035
|
+
);
|
|
1036
|
+
sortedConfigList.forEach((item) => {
|
|
1037
|
+
folderListBodyElement.appendChild((item as any).target);
|
|
1038
|
+
});
|
|
1039
|
+
}
|
|
1040
|
+
/* 设置当前排序的图标按钮 */
|
|
1041
|
+
popsDOMUtils.on<MouseEvent | PointerEvent>(
|
|
1042
|
+
folderListSortFileNameElement.closest("th"),
|
|
1043
|
+
"click",
|
|
1044
|
+
function (event) {
|
|
1045
|
+
arrowSortClickEvent(folderListSortFileNameElement, event, "fileName");
|
|
1046
|
+
},
|
|
1047
|
+
{
|
|
1048
|
+
capture: true,
|
|
1049
|
+
}
|
|
1050
|
+
);
|
|
1051
|
+
popsDOMUtils.on(
|
|
1052
|
+
folderListSortLatestTimeElement.closest("th"),
|
|
1053
|
+
"click",
|
|
1054
|
+
void 0,
|
|
1055
|
+
function (event) {
|
|
1056
|
+
arrowSortClickEvent(
|
|
1057
|
+
folderListSortLatestTimeElement,
|
|
1058
|
+
event,
|
|
1059
|
+
"latestTime"
|
|
1060
|
+
);
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
capture: true,
|
|
1064
|
+
}
|
|
1065
|
+
);
|
|
1066
|
+
popsDOMUtils.on(
|
|
1067
|
+
folderListSortFileSizeElement.closest("th"),
|
|
1068
|
+
"click",
|
|
1069
|
+
void 0,
|
|
1070
|
+
function (event) {
|
|
1071
|
+
arrowSortClickEvent(folderListSortFileSizeElement, event, "fileSize");
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
capture: true,
|
|
1075
|
+
}
|
|
1076
|
+
);
|
|
1077
|
+
/* 设置默认触发的arrow */
|
|
1078
|
+
if (config.sort.name === "fileName") {
|
|
1079
|
+
popsDOMUtils.trigger(folderListSortFileNameElement, "click", {
|
|
1080
|
+
notChangeSortRule: true,
|
|
1081
|
+
});
|
|
1082
|
+
} else if (config.sort.name === "latestTime") {
|
|
1083
|
+
popsDOMUtils.trigger(folderListSortLatestTimeElement, "click", {
|
|
1084
|
+
notChangeSortRule: true,
|
|
1085
|
+
});
|
|
1086
|
+
} else if (config.sort.name === "fileSize") {
|
|
1087
|
+
popsDOMUtils.trigger(folderListSortFileSizeElement, "click", {
|
|
1088
|
+
notChangeSortRule: true,
|
|
1089
|
+
});
|
|
1090
|
+
}
|
|
1091
|
+
/* 拖拽 */
|
|
1092
|
+
if (config.drag) {
|
|
1093
|
+
PopsInstanceUtils.drag($pops, {
|
|
1094
|
+
dragElement: $title,
|
|
1095
|
+
limit: config.dragLimit,
|
|
1096
|
+
extraDistance: config.dragExtraDistance,
|
|
1097
|
+
moveCallBack: config.dragMoveCallBack,
|
|
1098
|
+
endCallBack: config.dragEndCallBack,
|
|
1099
|
+
});
|
|
1100
|
+
}
|
|
1101
|
+
PopsHandler.handlePush(PopsType, {
|
|
1102
|
+
guid: guid,
|
|
1103
|
+
animElement: $anim,
|
|
1104
|
+
popsElement: $pops,
|
|
1105
|
+
maskElement: $mask!,
|
|
1106
|
+
$shadowContainer: $shadowContainer,
|
|
1107
|
+
$shadowRoot: $shadowRoot,
|
|
1108
|
+
});
|
|
1109
|
+
return PopsHandler.handleResultDetails(eventDetails);
|
|
1110
|
+
}
|
|
1111
|
+
}
|