@whitesev/pops 2.2.8 → 2.2.9

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