@whitesev/pops 2.3.5 → 2.3.7

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.umd.js CHANGED
@@ -186,9 +186,19 @@
186
186
  window: window,
187
187
  globalThis: globalThis,
188
188
  self: self,
189
+ setTimeout: globalThis.setTimeout.bind(globalThis),
190
+ setInterval: globalThis.setInterval.bind(globalThis),
191
+ clearTimeout: globalThis.clearTimeout.bind(globalThis),
192
+ clearInterval: globalThis.clearInterval.bind(globalThis),
189
193
  };
190
194
  const PopsCoreEnv = Object.assign({}, PopsCoreDefaultEnv);
191
195
  const PopsCore = {
196
+ init(option) {
197
+ if (!option) {
198
+ option = Object.assign({}, PopsCoreDefaultEnv);
199
+ }
200
+ Object.assign(PopsCoreEnv, option);
201
+ },
192
202
  get document() {
193
203
  return PopsCoreEnv.document;
194
204
  },
@@ -201,6 +211,18 @@
201
211
  get self() {
202
212
  return PopsCoreEnv.self;
203
213
  },
214
+ get setTimeout() {
215
+ return PopsCoreEnv.setTimeout;
216
+ },
217
+ get setInterval() {
218
+ return PopsCoreEnv.setInterval;
219
+ },
220
+ get clearTimeout() {
221
+ return PopsCoreEnv.clearTimeout;
222
+ },
223
+ get clearInterval() {
224
+ return PopsCoreEnv.clearInterval;
225
+ },
204
226
  };
205
227
  const OriginPrototype = {
206
228
  Object: {
@@ -719,7 +741,7 @@
719
741
  return setTimeout$1(callback, timeout);
720
742
  }
721
743
  catch (error) {
722
- return globalThis.setTimeout(callback, timeout);
744
+ return PopsCore.setTimeout(callback, timeout);
723
745
  }
724
746
  }
725
747
  /**
@@ -734,7 +756,7 @@
734
756
  catch (error) {
735
757
  }
736
758
  finally {
737
- globalThis.clearTimeout(timeId);
759
+ PopsCore.clearTimeout(timeId);
738
760
  }
739
761
  }
740
762
  /**
@@ -745,7 +767,7 @@
745
767
  return setInterval$1(callback, timeout);
746
768
  }
747
769
  catch (error) {
748
- return globalThis.setInterval(callback, timeout);
770
+ return PopsCore.setInterval(callback, timeout);
749
771
  }
750
772
  }
751
773
  /**
@@ -760,7 +782,7 @@
760
782
  catch (error) {
761
783
  }
762
784
  finally {
763
- globalThis.clearInterval(timeId);
785
+ PopsCore.clearInterval(timeId);
764
786
  }
765
787
  }
766
788
  }
@@ -1136,6 +1158,7 @@
1136
1158
  * })
1137
1159
  */
1138
1160
  ready(callback) {
1161
+ const that = this;
1139
1162
  if (typeof callback !== "function") {
1140
1163
  return;
1141
1164
  }
@@ -1181,7 +1204,7 @@
1181
1204
  function addDomReadyListener() {
1182
1205
  for (let index = 0; index < targetList.length; index++) {
1183
1206
  let item = targetList[index];
1184
- item.target.addEventListener(item.eventType, item.callback);
1207
+ that.on(item.target, item.eventType, item.callback);
1185
1208
  }
1186
1209
  }
1187
1210
  /**
@@ -1190,7 +1213,7 @@
1190
1213
  function removeDomReadyListener() {
1191
1214
  for (let index = 0; index < targetList.length; index++) {
1192
1215
  let item = targetList[index];
1193
- item.target.removeEventListener(item.eventType, item.callback);
1216
+ that.off(item.target, item.eventType, item.callback);
1194
1217
  }
1195
1218
  }
1196
1219
  if (checkDOMReadyState()) {
@@ -1472,9 +1495,7 @@
1472
1495
  eventNameList = [eventNameList];
1473
1496
  }
1474
1497
  eventNameList.forEach((eventName) => {
1475
- element.addEventListener(eventName, stopEvent, {
1476
- capture: Boolean(capture),
1477
- });
1498
+ this.on(element, eventName, stopEvent, { capture: Boolean(capture) });
1478
1499
  });
1479
1500
  }
1480
1501
  }
@@ -5123,57 +5144,101 @@
5123
5144
  if ($mask != null) {
5124
5145
  $anim.after($mask);
5125
5146
  }
5126
- /* 添加文件信息 */
5127
- config.folder.sort();
5128
- /**
5129
- * 创建文件夹元素
5130
- * @param fileName
5131
- * @param latestTime
5132
- * @param [fileSize="-"]
5133
- * @param isFolder
5134
- */
5135
- function createFolderRowElement(fileName, latestTime = "-", fileSize = "-", isFolder = false) {
5136
- let origin_fileName = fileName;
5137
- let origin_latestTime = latestTime;
5138
- let origin_fileSize = fileSize;
5139
- let folderELement = popsDOMUtils.createElement("tr");
5140
- let fileNameElement = popsDOMUtils.createElement("td");
5141
- let fileTimeElement = popsDOMUtils.createElement("td");
5142
- let fileFormatSize = popsDOMUtils.createElement("td");
5143
- let fileType = "";
5144
- let fileIcon = Folder_ICON.folder;
5145
- if (isFolder) {
5146
- /* 文件夹 */
5147
- latestTime = "";
5148
- fileSize = "";
5149
- }
5150
- else {
5151
- /* 文件 */
5152
- fileIcon = "";
5153
- if (typeof latestTime === "number") {
5154
- latestTime = popsUtils.formatTime(latestTime);
5155
- }
5156
- if (typeof fileSize === "number") {
5157
- fileSize = popsUtils.formatByteToSize(fileSize);
5158
- }
5159
- for (let keyName in Folder_ICON) {
5160
- if (fileName.toLowerCase().endsWith("." + keyName)) {
5161
- fileType = keyName;
5162
- fileIcon = Folder_ICON[keyName];
5163
- break;
5164
- }
5147
+ class PopsFolder {
5148
+ init() {
5149
+ config.folder.sort();
5150
+ this.initFolderView(config.folder);
5151
+ /* 将数据存到全部文件的属性_config_中 */
5152
+ let allFilesElement = folderFileListBreadcrumbPrimaryElement.querySelector(".pops-folder-list .pops-folder-file-list-breadcrumb-allFiles:first-child");
5153
+ Reflect.set(allFilesElement, "_config_", config.folder);
5154
+ /* 设置点击顶部的全部文件事件 */
5155
+ popsDOMUtils.on(allFilesElement, "click", (event) => {
5156
+ this.setBreadcrumbClickEvent(event, true, config.folder);
5157
+ });
5158
+ // 文件名的点击排序
5159
+ popsDOMUtils.on(folderListSortFileNameElement.closest("th"), "click", (event) => {
5160
+ this.arrowToSortFolderInfoView(folderListSortFileNameElement, event, "fileName");
5161
+ }, {
5162
+ capture: true,
5163
+ });
5164
+ // 修改事件的点击排序
5165
+ popsDOMUtils.on(folderListSortLatestTimeElement.closest("th"), "click", (event) => {
5166
+ this.arrowToSortFolderInfoView(folderListSortLatestTimeElement, event, "latestTime");
5167
+ }, {
5168
+ capture: true,
5169
+ });
5170
+ // 文件大小的点击排序
5171
+ popsDOMUtils.on(folderListSortFileSizeElement.closest("th"), "click", (event) => {
5172
+ this.arrowToSortFolderInfoView(folderListSortFileSizeElement, event, "fileSize");
5173
+ }, {
5174
+ capture: true,
5175
+ });
5176
+ /* 设置默认触发的arrow */
5177
+ if (config.sort.name === "fileName") {
5178
+ popsDOMUtils.trigger(folderListSortFileNameElement, "click", {
5179
+ notChangeSortRule: true,
5180
+ });
5165
5181
  }
5166
- if (!Boolean(fileIcon)) {
5167
- fileType = "Null";
5168
- fileIcon = Folder_ICON.Null;
5182
+ else if (config.sort.name === "latestTime") {
5183
+ popsDOMUtils.trigger(folderListSortLatestTimeElement, "click", {
5184
+ notChangeSortRule: true,
5185
+ });
5186
+ }
5187
+ else if (config.sort.name === "fileSize") {
5188
+ popsDOMUtils.trigger(folderListSortFileSizeElement, "click", {
5189
+ notChangeSortRule: true,
5190
+ });
5169
5191
  }
5170
5192
  }
5171
- folderELement.className = "pops-folder-list-table__body-row";
5172
- fileNameElement.className = "pops-folder-list-table__body-td";
5173
- fileTimeElement.className = "pops-folder-list-table__body-td";
5174
- fileFormatSize.className = "pops-folder-list-table__body-td";
5175
- PopsSafeUtils.setSafeHTML(fileNameElement,
5176
- /*html*/ `
5193
+ /**
5194
+ * 创建文件夹元素
5195
+ * @param fileName 文件名
5196
+ * @param latestTime 修改时间
5197
+ * @param [fileSize="-"] 文件大小
5198
+ * @param isFolder 是否是文件夹
5199
+ */
5200
+ createFolderRowElement(fileName, latestTime = "-", fileSize = "-", isFolder = false) {
5201
+ let origin_fileName = fileName;
5202
+ let origin_latestTime = latestTime;
5203
+ let origin_fileSize = fileSize;
5204
+ let folderElement = popsDOMUtils.createElement("tr");
5205
+ let fileNameElement = popsDOMUtils.createElement("td");
5206
+ let fileTimeElement = popsDOMUtils.createElement("td");
5207
+ let fileFormatSize = popsDOMUtils.createElement("td");
5208
+ let fileType = "";
5209
+ let fileIcon = Folder_ICON.folder;
5210
+ if (isFolder) {
5211
+ /* 文件夹 */
5212
+ latestTime = "";
5213
+ fileSize = "";
5214
+ }
5215
+ else {
5216
+ /* 文件 */
5217
+ fileIcon = "";
5218
+ if (typeof latestTime === "number") {
5219
+ latestTime = popsUtils.formatTime(latestTime);
5220
+ }
5221
+ if (typeof fileSize === "number") {
5222
+ fileSize = popsUtils.formatByteToSize(fileSize);
5223
+ }
5224
+ for (let keyName in Folder_ICON) {
5225
+ if (fileName.toLowerCase().endsWith("." + keyName)) {
5226
+ fileType = keyName;
5227
+ fileIcon = Folder_ICON[keyName];
5228
+ break;
5229
+ }
5230
+ }
5231
+ if (!Boolean(fileIcon)) {
5232
+ fileType = "Null";
5233
+ fileIcon = Folder_ICON.Null;
5234
+ }
5235
+ }
5236
+ folderElement.className = "pops-folder-list-table__body-row";
5237
+ fileNameElement.className = "pops-folder-list-table__body-td";
5238
+ fileTimeElement.className = "pops-folder-list-table__body-td";
5239
+ fileFormatSize.className = "pops-folder-list-table__body-td";
5240
+ PopsSafeUtils.setSafeHTML(fileNameElement,
5241
+ /*html*/ `
5177
5242
  <div class="pops-folder-list-file-name cursor-p">
5178
5243
  <div>
5179
5244
  <img src="${fileIcon}" alt="${fileType}" class="pops-folder-list-file-icon u-file-icon u-file-icon--list">
@@ -5183,80 +5248,84 @@
5183
5248
  </div>
5184
5249
  </div>
5185
5250
  `);
5186
- PopsSafeUtils.setSafeHTML(fileTimeElement,
5187
- /*html*/ `
5251
+ PopsSafeUtils.setSafeHTML(fileTimeElement,
5252
+ /*html*/ `
5188
5253
  <div class="pops-folder-list__time">
5189
5254
  <span>${latestTime}</span>
5190
5255
  </div>
5191
5256
  `);
5192
- PopsSafeUtils.setSafeHTML(fileFormatSize,
5193
- /*html*/ `
5257
+ PopsSafeUtils.setSafeHTML(fileFormatSize,
5258
+ /*html*/ `
5194
5259
  <div class="pops-folder-list-format-size">
5195
5260
  <span>${fileSize}</span>
5196
5261
  </div>
5197
5262
  `);
5198
- /* 存储原来的值 */
5199
- let __value__ = {
5200
- fileName: origin_fileName,
5201
- latestTime: origin_latestTime,
5202
- fileSize: origin_fileSize,
5203
- isFolder: isFolder,
5204
- };
5205
- Reflect.set(fileNameElement, "__value__", __value__);
5206
- Reflect.set(fileTimeElement, "__value__", __value__);
5207
- Reflect.set(fileFormatSize, "__value__", __value__);
5208
- Reflect.set(folderELement, "__value__", __value__);
5209
- folderELement.appendChild(fileNameElement);
5210
- folderELement.appendChild(fileTimeElement);
5211
- folderELement.appendChild(fileFormatSize);
5212
- return {
5213
- folderELement,
5214
- fileNameElement,
5215
- fileTimeElement,
5216
- fileFormatSize,
5217
- };
5218
- }
5219
- /**
5220
- * 创建移动端文件夹元素
5221
- */
5222
- function createMobileFolderRowElement(fileName, latestTime = "-", fileSize = "-", isFolder = false) {
5223
- let origin_fileName = fileName;
5224
- let origin_latestTime = latestTime;
5225
- let origin_fileSize = fileSize;
5226
- let folderELement = popsDOMUtils.createElement("tr");
5227
- let fileNameElement = popsDOMUtils.createElement("td");
5228
- let fileType = "";
5229
- let fileIcon = Folder_ICON.folder;
5230
- if (isFolder) {
5231
- /* 文件夹 */
5232
- latestTime = "";
5233
- fileSize = "";
5263
+ /* 存储原来的值 */
5264
+ let __value__ = {
5265
+ fileName: origin_fileName,
5266
+ latestTime: origin_latestTime,
5267
+ fileSize: origin_fileSize,
5268
+ isFolder: isFolder,
5269
+ };
5270
+ Reflect.set(fileNameElement, "__value__", __value__);
5271
+ Reflect.set(fileTimeElement, "__value__", __value__);
5272
+ Reflect.set(fileFormatSize, "__value__", __value__);
5273
+ Reflect.set(folderElement, "__value__", __value__);
5274
+ folderElement.appendChild(fileNameElement);
5275
+ folderElement.appendChild(fileTimeElement);
5276
+ folderElement.appendChild(fileFormatSize);
5277
+ return {
5278
+ folderElement,
5279
+ fileNameElement,
5280
+ fileTimeElement,
5281
+ fileFormatSize,
5282
+ };
5234
5283
  }
5235
- else {
5236
- /* 文件 */
5237
- fileIcon = "";
5238
- if (typeof latestTime === "number") {
5239
- latestTime = popsUtils.formatTime(latestTime);
5240
- }
5241
- if (typeof fileSize === "number") {
5242
- fileSize = popsUtils.formatByteToSize(fileSize);
5243
- }
5244
- for (let keyName in Folder_ICON) {
5245
- if (fileName.toLowerCase().endsWith("." + keyName)) {
5246
- fileType = keyName;
5247
- fileIcon = Folder_ICON[keyName];
5248
- break;
5249
- }
5284
+ /**
5285
+ * 创建移动端文件夹元素
5286
+ * @param fileName 文件名
5287
+ * @param latestTime 创建时间
5288
+ * @param [fileSize="-"] 文件大小
5289
+ * @param isFolder 是否是文件夹
5290
+ */
5291
+ createFolderRowElementByMobile(fileName, latestTime = "-", fileSize = "-", isFolder = false) {
5292
+ let origin_fileName = fileName;
5293
+ let origin_latestTime = latestTime;
5294
+ let origin_fileSize = fileSize;
5295
+ let folderElement = popsDOMUtils.createElement("tr");
5296
+ let fileNameElement = popsDOMUtils.createElement("td");
5297
+ let fileType = "";
5298
+ let fileIcon = Folder_ICON.folder;
5299
+ if (isFolder) {
5300
+ /* 文件夹 */
5301
+ latestTime = "";
5302
+ fileSize = "";
5250
5303
  }
5251
- if (!Boolean(fileIcon)) {
5252
- fileType = "Null";
5253
- fileIcon = Folder_ICON.Null;
5304
+ else {
5305
+ /* 文件 */
5306
+ fileIcon = "";
5307
+ if (typeof latestTime === "number") {
5308
+ latestTime = popsUtils.formatTime(latestTime);
5309
+ }
5310
+ if (typeof fileSize === "number") {
5311
+ fileSize = popsUtils.formatByteToSize(fileSize);
5312
+ }
5313
+ for (let keyName in Folder_ICON) {
5314
+ if (fileName.toLowerCase().endsWith("." + keyName)) {
5315
+ fileType = keyName;
5316
+ fileIcon = Folder_ICON[keyName];
5317
+ break;
5318
+ }
5319
+ }
5320
+ if (!Boolean(fileIcon)) {
5321
+ fileType = "Null";
5322
+ fileIcon = Folder_ICON.Null;
5323
+ }
5254
5324
  }
5255
- }
5256
- folderELement.className = "pops-folder-list-table__body-row";
5257
- fileNameElement.className = "pops-folder-list-table__body-td";
5258
- PopsSafeUtils.setSafeHTML(fileNameElement,
5259
- /*html*/ `
5325
+ folderElement.className = "pops-folder-list-table__body-row";
5326
+ fileNameElement.className = "pops-folder-list-table__body-td";
5327
+ PopsSafeUtils.setSafeHTML(fileNameElement,
5328
+ /*html*/ `
5260
5329
  <div class="pops-folder-list-file-name pops-mobile-folder-list-file-name cursor-p">
5261
5330
  <img src="${fileIcon}" alt="${fileType}" class="pops-folder-list-file-icon u-file-icon u-file-icon--list">
5262
5331
  <div>
@@ -5265,139 +5334,138 @@
5265
5334
  </div>
5266
5335
  </div>
5267
5336
  `);
5268
- /* 存储原来的值 */
5269
- let __value__ = {
5270
- fileName: origin_fileName,
5271
- latestTime: origin_latestTime,
5272
- fileSize: origin_fileSize,
5273
- isFolder: isFolder,
5274
- };
5275
- Reflect.set(fileNameElement, "__value__", __value__);
5276
- Reflect.set(folderELement, "__value__", __value__);
5277
- folderELement.appendChild(fileNameElement);
5278
- return {
5279
- folderELement,
5280
- fileNameElement,
5281
- };
5282
- }
5283
- /**
5284
- * 清空每行的元素
5285
- */
5286
- function clearFolderRow() {
5287
- PopsSafeUtils.setSafeHTML(folderListBodyElement, "");
5288
- }
5289
- /**
5290
- * 创建顶部导航的箭头图标
5291
- */
5292
- function createHeaderArrowIcon() {
5293
- let iconArrowElement = popsDOMUtils.createElement("div", {
5294
- className: "iconArrow",
5295
- });
5296
- return iconArrowElement;
5297
- }
5298
- /**
5299
- * 添加顶部导航
5300
- * @param folderName 文件夹名
5301
- * @param folderDataConfig 文件夹配置
5302
- */
5303
- function createHeaderFileLinkNavgiation(folderName, folderDataConfig) {
5304
- let spanElement = popsDOMUtils.createElement("span", {
5305
- className: "pops-folder-file-list-breadcrumb-allFiles cursor-p",
5306
- innerHTML: `<a>${folderName}</a>`,
5307
- _config_: folderDataConfig,
5308
- }, {
5309
- title: folderName,
5310
- });
5311
- return spanElement;
5312
- }
5313
- /**
5314
- * 顶部导航的点击事件
5315
- * @param event
5316
- * @param isTop 是否是全部文件按钮
5317
- * @param folderDataConfigList 配置
5318
- */
5319
- function breadcrumbAllFilesElementClickEvent(event, isTop, folderDataConfigList) {
5320
- clearFolderRow();
5321
- /* 获取当前的导航元素 */
5322
- let $click = event.target;
5323
- let currentBreadcrumb = $click.closest("span.pops-folder-file-list-breadcrumb-allFiles");
5324
- if (currentBreadcrumb) {
5325
- while (currentBreadcrumb.nextElementSibling) {
5326
- currentBreadcrumb.nextElementSibling.remove();
5337
+ /* 存储原来的值 */
5338
+ let __value__ = {
5339
+ fileName: origin_fileName,
5340
+ latestTime: origin_latestTime,
5341
+ fileSize: origin_fileSize,
5342
+ isFolder: isFolder,
5343
+ };
5344
+ Reflect.set(fileNameElement, "__value__", __value__);
5345
+ Reflect.set(folderElement, "__value__", __value__);
5346
+ folderElement.appendChild(fileNameElement);
5347
+ return {
5348
+ folderElement,
5349
+ fileNameElement,
5350
+ };
5351
+ }
5352
+ /**
5353
+ * 清空文件夹信息页面
5354
+ */
5355
+ clearFolderInfoView() {
5356
+ PopsSafeUtils.setSafeHTML(folderListBodyElement, "");
5357
+ }
5358
+ /**
5359
+ * 创建顶部导航的箭头图标
5360
+ */
5361
+ createHeaderArrowIcon() {
5362
+ let $arrowIcon = popsDOMUtils.createElement("div", {
5363
+ className: "iconArrow",
5364
+ });
5365
+ return $arrowIcon;
5366
+ }
5367
+ /**
5368
+ * 添加顶部导航元素
5369
+ * @param folderName 文件夹名
5370
+ * @param folderDataConfig 文件夹配置
5371
+ */
5372
+ createBreadcrumb(folderName, folderDataConfig) {
5373
+ let $breadcrumb = popsDOMUtils.createElement("span", {
5374
+ className: "pops-folder-file-list-breadcrumb-allFiles cursor-p",
5375
+ innerHTML: `<a>${folderName}</a>`,
5376
+ _config_: folderDataConfig,
5377
+ }, {
5378
+ title: folderName,
5379
+ });
5380
+ return $breadcrumb;
5381
+ }
5382
+ /**
5383
+ * 顶部导航的点击事件
5384
+ * @param clickEvent
5385
+ * @param isTop 是否是全部文件按钮
5386
+ * @param dataConfigList 配置
5387
+ */
5388
+ setBreadcrumbClickEvent(clickEvent, isTop, dataConfigList) {
5389
+ this.clearFolderInfoView();
5390
+ /* 获取当前的导航元素 */
5391
+ let $click = clickEvent.target;
5392
+ let currentBreadcrumb = $click.closest("span.pops-folder-file-list-breadcrumb-allFiles");
5393
+ if (currentBreadcrumb) {
5394
+ while (currentBreadcrumb.nextElementSibling) {
5395
+ currentBreadcrumb.nextElementSibling.remove();
5396
+ }
5397
+ }
5398
+ else {
5399
+ console.error("获取导航按钮失败");
5327
5400
  }
5401
+ let loadingMask = PopsLoading.init({
5402
+ parent: $content,
5403
+ content: {
5404
+ text: "获取文件列表中...",
5405
+ },
5406
+ mask: {
5407
+ enable: true,
5408
+ clickEvent: {
5409
+ toClose: false,
5410
+ toHide: false,
5411
+ },
5412
+ },
5413
+ addIndexCSS: false,
5414
+ });
5415
+ this.initFolderView(dataConfigList);
5416
+ loadingMask.close();
5328
5417
  }
5329
- else {
5330
- console.error("获取导航按钮失败");
5331
- }
5332
- let loadingMask = PopsLoading.init({
5333
- parent: $content,
5334
- content: {
5335
- text: "获取文件列表中...",
5336
- },
5337
- mask: {
5338
- enable: true,
5339
- clickEvent: {
5340
- toClose: false,
5341
- toHide: false,
5418
+ /**
5419
+ * 文件夹的点击事件 - 进入文件夹
5420
+ *
5421
+ * 先情况页面元素
5422
+ * @param clickEvent
5423
+ * @param dataConfig
5424
+ */
5425
+ async enterFolder(clickEvent, dataConfig) {
5426
+ this.clearFolderInfoView();
5427
+ let loadingMask = PopsLoading.init({
5428
+ parent: $content,
5429
+ content: {
5430
+ text: "获取文件列表中...",
5342
5431
  },
5343
- },
5344
- addIndexCSS: false,
5345
- });
5346
- addFolderElement(folderDataConfigList);
5347
- loadingMask.close();
5348
- }
5349
- /**
5350
- * 刷新文件列表界面信息
5351
- * @param event
5352
- * @param folderDataConfig
5353
- */
5354
- async function refreshFolderInfoClickEvent(event, folderDataConfig) {
5355
- clearFolderRow();
5356
- let loadingMask = PopsLoading.init({
5357
- parent: $content,
5358
- content: {
5359
- text: "获取文件列表中...",
5360
- },
5361
- mask: {
5362
- enable: true,
5363
- },
5364
- addIndexCSS: false,
5365
- });
5366
- if (typeof folderDataConfig.clickEvent === "function") {
5367
- let childConfig = await folderDataConfig.clickEvent(event, folderDataConfig);
5368
- /* 添加顶部导航的箭头 */
5369
- folderFileListBreadcrumbPrimaryElement.appendChild(createHeaderArrowIcon());
5370
- /* 添加顶部导航的链接文字 */
5371
- let breadcrumbAllFilesElement = createHeaderFileLinkNavgiation(folderDataConfig.fileName, childConfig);
5372
- folderFileListBreadcrumbPrimaryElement.appendChild(breadcrumbAllFilesElement);
5373
- /* 设置顶部导航点击事件 */
5374
- popsDOMUtils.on(breadcrumbAllFilesElement, "click", function (event) {
5375
- breadcrumbAllFilesElementClickEvent(event, false, childConfig);
5432
+ mask: {
5433
+ enable: true,
5434
+ },
5435
+ addIndexCSS: false,
5376
5436
  });
5377
- addFolderElement(childConfig);
5437
+ if (typeof dataConfig.clickEvent === "function") {
5438
+ let childConfig = await dataConfig.clickEvent(clickEvent, dataConfig);
5439
+ /* 添加顶部导航的箭头 */
5440
+ folderFileListBreadcrumbPrimaryElement.appendChild(this.createHeaderArrowIcon());
5441
+ /* 添加顶部导航的链接文字 */
5442
+ let breadcrumbAllFilesElement = this.createBreadcrumb(dataConfig.fileName, childConfig);
5443
+ folderFileListBreadcrumbPrimaryElement.appendChild(breadcrumbAllFilesElement);
5444
+ /* 设置顶部导航点击事件 */
5445
+ popsDOMUtils.on(breadcrumbAllFilesElement, "click", (event) => {
5446
+ this.setBreadcrumbClickEvent(event, false, childConfig);
5447
+ });
5448
+ this.initFolderView(childConfig);
5449
+ }
5450
+ loadingMask.close();
5378
5451
  }
5379
- loadingMask.close();
5380
- }
5381
- /**
5382
- * 设置文件点击事件
5383
- * @param targetElement
5384
- * @param _config_
5385
- */
5386
- function setFileClickEvent(targetElement, _config_) {
5387
- popsDOMUtils.on(targetElement, "click", async function (event) {
5388
- event?.preventDefault();
5389
- event?.stopPropagation();
5390
- event?.stopImmediatePropagation();
5391
- let linkElement = targetElement.querySelector("a");
5392
- if (typeof _config_.clickEvent === "function") {
5393
- let downloadInfo = await _config_.clickEvent(event, _config_);
5452
+ /**
5453
+ * 文件的点击事件 - 下载文件
5454
+ * @param $target
5455
+ * @param dataConfig
5456
+ */
5457
+ async downloadFile(clickEvent, $row, dataConfig) {
5458
+ popsDOMUtils.preventEvent(clickEvent);
5459
+ let $link = $row.querySelector("a");
5460
+ if (typeof dataConfig.clickEvent === "function") {
5461
+ let downloadInfo = await dataConfig.clickEvent(clickEvent, dataConfig);
5394
5462
  if (downloadInfo != null &&
5395
5463
  typeof downloadInfo === "object" &&
5396
5464
  !Array.isArray(downloadInfo) &&
5397
5465
  typeof downloadInfo.url === "string" &&
5398
5466
  downloadInfo.url.trim() !== "") {
5399
- linkElement.setAttribute("href", downloadInfo.url);
5400
- linkElement.setAttribute("target", "_blank");
5467
+ $link.setAttribute("href", downloadInfo.url);
5468
+ $link.setAttribute("target", "_blank");
5401
5469
  if (downloadInfo.autoDownload) {
5402
5470
  if (downloadInfo.mode == null || downloadInfo.mode === "") {
5403
5471
  /* 未设置mode的话默认为aBlank */
@@ -5441,215 +5509,190 @@
5441
5509
  }
5442
5510
  }
5443
5511
  }
5444
- });
5445
- }
5446
- /**
5447
- * 对配置进行排序
5448
- * @param folderDataConfigList
5449
- * @param sortName 比较的属性,默认fileName
5450
- * @param isDesc 是否降序,默认false(升序)
5451
- */
5452
- function sortFolderConfig(folderDataConfigList, sortName = "fileName", isDesc = false) {
5453
- if (sortName === "fileName") {
5454
- // 如果是以文件名排序,文件夹优先放前面
5455
- let onlyFolderDataConfigList = folderDataConfigList.filter((value) => {
5456
- return value.isFolder;
5457
- });
5458
- let onlyFileDataConfigList = folderDataConfigList.filter((value) => {
5459
- return !value.isFolder;
5460
- });
5461
- // 文件夹排序
5462
- onlyFolderDataConfigList.sort((leftConfig, rightConfig) => {
5463
- let beforeVal = leftConfig[sortName].toString();
5464
- let afterVal = rightConfig[sortName].toString();
5465
- let compareVal = beforeVal.localeCompare(afterVal);
5466
- if (isDesc) {
5467
- /* 降序 */
5468
- if (compareVal > 0) {
5469
- compareVal = -1;
5512
+ }
5513
+ /**
5514
+ * 对配置进行排序
5515
+ * @param folderDataConfigList
5516
+ * @param sortName 比较的属性,默认fileName
5517
+ * @param isDesc 是否降序,默认false(升序)
5518
+ */
5519
+ sortFolderConfig(folderDataConfigList, sortName = "fileName", isDesc = false) {
5520
+ if (sortName === "fileName") {
5521
+ // 如果是以文件名排序,文件夹优先放前面
5522
+ let onlyFolderDataConfigList = folderDataConfigList.filter((value) => {
5523
+ return value.isFolder;
5524
+ });
5525
+ let onlyFileDataConfigList = folderDataConfigList.filter((value) => {
5526
+ return !value.isFolder;
5527
+ });
5528
+ // 文件夹排序
5529
+ onlyFolderDataConfigList.sort((leftConfig, rightConfig) => {
5530
+ let beforeVal = leftConfig[sortName].toString();
5531
+ let afterVal = rightConfig[sortName].toString();
5532
+ let compareVal = beforeVal.localeCompare(afterVal);
5533
+ if (isDesc) {
5534
+ /* 降序 */
5535
+ if (compareVal > 0) {
5536
+ compareVal = -1;
5537
+ }
5538
+ else if (compareVal < 0) {
5539
+ compareVal = 1;
5540
+ }
5470
5541
  }
5471
- else if (compareVal < 0) {
5472
- compareVal = 1;
5542
+ return compareVal;
5543
+ });
5544
+ // 文件名排序
5545
+ onlyFileDataConfigList.sort((leftConfig, rightConfig) => {
5546
+ let beforeVal = leftConfig[sortName].toString();
5547
+ let afterVal = rightConfig[sortName].toString();
5548
+ let compareVal = beforeVal.localeCompare(afterVal);
5549
+ if (isDesc) {
5550
+ /* 降序 */
5551
+ if (compareVal > 0) {
5552
+ compareVal = -1;
5553
+ }
5554
+ else if (compareVal < 0) {
5555
+ compareVal = 1;
5556
+ }
5473
5557
  }
5474
- }
5475
- return compareVal;
5476
- });
5477
- // 文件名排序
5478
- onlyFileDataConfigList.sort((leftConfig, rightConfig) => {
5479
- let beforeVal = leftConfig[sortName].toString();
5480
- let afterVal = rightConfig[sortName].toString();
5481
- let compareVal = beforeVal.localeCompare(afterVal);
5558
+ return compareVal;
5559
+ });
5482
5560
  if (isDesc) {
5483
- /* 降序 */
5484
- if (compareVal > 0) {
5485
- compareVal = -1;
5486
- }
5487
- else if (compareVal < 0) {
5488
- compareVal = 1;
5489
- }
5561
+ // 降序,文件夹在下面
5562
+ return [...onlyFileDataConfigList, ...onlyFolderDataConfigList];
5563
+ }
5564
+ else {
5565
+ // 升序,文件夹在上面
5566
+ return [...onlyFolderDataConfigList, ...onlyFileDataConfigList];
5490
5567
  }
5491
- return compareVal;
5492
- });
5493
- if (isDesc) {
5494
- // 降序,文件夹在下面
5495
- return [...onlyFileDataConfigList, ...onlyFolderDataConfigList];
5496
5568
  }
5497
5569
  else {
5498
- // 升序,文件夹在上面
5499
- return [...onlyFolderDataConfigList, ...onlyFileDataConfigList];
5500
- }
5501
- }
5502
- else {
5503
- folderDataConfigList.sort((beforeConfig, afterConfig) => {
5504
- let beforeVal = beforeConfig[sortName];
5505
- let afterVal = afterConfig[sortName];
5506
- if (sortName === "fileSize") {
5507
- /* 文件大小,进行Float转换 */
5508
- beforeVal = parseFloat(beforeVal.toString());
5509
- afterVal = parseFloat(afterVal.toString());
5510
- }
5511
- else if (sortName === "latestTime") {
5512
- /* 文件时间 */
5513
- beforeVal = new Date(beforeVal).getTime();
5514
- afterVal = new Date(afterVal).getTime();
5515
- }
5516
- if (beforeVal > afterVal) {
5517
- if (isDesc) {
5518
- /* 降序 */
5519
- return -1;
5570
+ folderDataConfigList.sort((beforeConfig, afterConfig) => {
5571
+ let beforeVal = beforeConfig[sortName];
5572
+ let afterVal = afterConfig[sortName];
5573
+ if (sortName === "fileSize") {
5574
+ /* 文件大小,进行Float转换 */
5575
+ beforeVal = parseFloat(beforeVal.toString());
5576
+ afterVal = parseFloat(afterVal.toString());
5520
5577
  }
5521
- else {
5522
- return 1;
5578
+ else if (sortName === "latestTime") {
5579
+ /* 文件时间 */
5580
+ beforeVal = new Date(beforeVal).getTime();
5581
+ afterVal = new Date(afterVal).getTime();
5523
5582
  }
5524
- }
5525
- else if (beforeVal < afterVal) {
5526
- if (isDesc) {
5527
- /* 降序 */
5528
- return 1;
5583
+ if (beforeVal > afterVal) {
5584
+ if (isDesc) {
5585
+ /* 降序 */
5586
+ return -1;
5587
+ }
5588
+ else {
5589
+ return 1;
5590
+ }
5591
+ }
5592
+ else if (beforeVal < afterVal) {
5593
+ if (isDesc) {
5594
+ /* 降序 */
5595
+ return 1;
5596
+ }
5597
+ else {
5598
+ return -1;
5599
+ }
5529
5600
  }
5530
5601
  else {
5531
- return -1;
5602
+ return 0;
5532
5603
  }
5604
+ });
5605
+ return folderDataConfigList;
5606
+ }
5607
+ }
5608
+ /**
5609
+ * 添加文件夹/文件行元素
5610
+ * @param dataConfig 配置
5611
+ */
5612
+ initFolderView(dataConfig) {
5613
+ // 先对文件夹、文件进行排序
5614
+ this.sortFolderConfig(dataConfig, config.sort.name, config.sort.isDesc);
5615
+ dataConfig.forEach((item) => {
5616
+ if (item.isFolder) {
5617
+ let { folderElement, fileNameElement } = popsUtils.isPhone()
5618
+ ? this.createFolderRowElementByMobile(item.fileName, "", "", true)
5619
+ : this.createFolderRowElement(item.fileName, "", "", true);
5620
+ // 文件夹 - 点击事件
5621
+ popsDOMUtils.on(fileNameElement, "click", (event) => {
5622
+ // 进入文件夹
5623
+ this.enterFolder(event, item);
5624
+ });
5625
+ folderListBodyElement.appendChild(folderElement);
5533
5626
  }
5534
5627
  else {
5535
- return 0;
5628
+ let { folderElement, fileNameElement } = popsUtils.isPhone()
5629
+ ? this.createFolderRowElementByMobile(item.fileName, item.latestTime, item.fileSize, false)
5630
+ : this.createFolderRowElement(item.fileName, item.latestTime, item.fileSize, false);
5631
+ // 文件 - 点击事件
5632
+ popsDOMUtils.on(fileNameElement, "click", (event) => {
5633
+ // 下载文件
5634
+ this.downloadFile(event, fileNameElement, item);
5635
+ });
5636
+ folderListBodyElement.appendChild(folderElement);
5536
5637
  }
5537
5638
  });
5538
- return folderDataConfigList;
5539
5639
  }
5540
- }
5541
- /**
5542
- * 添加元素
5543
- * @param _config_
5544
- */
5545
- function addFolderElement(_config_) {
5546
- sortFolderConfig(_config_, config.sort.name, config.sort.isDesc);
5547
- _config_.forEach((item) => {
5548
- if (item["isFolder"]) {
5549
- let { folderELement, fileNameElement } = popsUtils.isPhone()
5550
- ? createMobileFolderRowElement(item["fileName"], "", "", true)
5551
- : createFolderRowElement(item["fileName"], "", "", true);
5552
- popsDOMUtils.on(fileNameElement, "click", (event) => {
5553
- refreshFolderInfoClickEvent(event, item);
5554
- });
5555
- folderListBodyElement.appendChild(folderELement);
5640
+ /**
5641
+ * 移除所有箭头的被访问状态
5642
+ */
5643
+ removeArrowActiveStatus() {
5644
+ [
5645
+ ...Array.from(folderListSortFileNameElement.querySelectorAll(".pops-folder-icon-active")),
5646
+ ...Array.from(folderListSortLatestTimeElement.querySelectorAll(".pops-folder-icon-active")),
5647
+ ...Array.from(folderListSortFileSizeElement.querySelectorAll(".pops-folder-icon-active")),
5648
+ ].forEach((ele) => ele.classList.remove("pops-folder-icon-active"));
5649
+ }
5650
+ /**
5651
+ * 修改导航箭头的状态
5652
+ */
5653
+ changeArrowActive(arrowUp, arrowDown, isDesc) {
5654
+ this.removeArrowActiveStatus();
5655
+ if (isDesc) {
5656
+ arrowDown.classList.add("pops-folder-icon-active");
5556
5657
  }
5557
5658
  else {
5558
- let { folderELement, fileNameElement } = popsUtils.isPhone()
5559
- ? createMobileFolderRowElement(item["fileName"], item.latestTime, item.fileSize, false)
5560
- : createFolderRowElement(item["fileName"], item.latestTime, item.fileSize, false);
5561
- setFileClickEvent(fileNameElement, item);
5562
- folderListBodyElement.appendChild(folderELement);
5659
+ arrowUp.classList.add("pops-folder-icon-active");
5563
5660
  }
5564
- });
5565
- }
5566
- addFolderElement(config.folder);
5567
- /* 将数据存到全部文件的属性_config_中 */
5568
- let allFilesElement = folderFileListBreadcrumbPrimaryElement.querySelector(".pops-folder-list .pops-folder-file-list-breadcrumb-allFiles:first-child");
5569
- allFilesElement._config_ = config.folder;
5570
- /* 设置点击顶部的全部文件事件 */
5571
- popsDOMUtils.on(allFilesElement, "click", (event) => {
5572
- breadcrumbAllFilesElementClickEvent(event, true, config.folder);
5573
- });
5574
- /* 移除所有的当前排序的arrow */
5575
- function removeAllArrowActive() {
5576
- [
5577
- ...Array.from(folderListSortFileNameElement.querySelectorAll(".pops-folder-icon-active")),
5578
- ...Array.from(folderListSortLatestTimeElement.querySelectorAll(".pops-folder-icon-active")),
5579
- ...Array.from(folderListSortFileSizeElement.querySelectorAll(".pops-folder-icon-active")),
5580
- ].forEach((ele) => ele.classList.remove("pops-folder-icon-active"));
5581
- }
5582
- /* 设置当前的排序的arrow */
5583
- function changeArrowActive(arrowUp, arrowDown, isDesc) {
5584
- removeAllArrowActive();
5585
- if (isDesc) {
5586
- arrowDown.classList.add("pops-folder-icon-active");
5587
5661
  }
5588
- else {
5589
- arrowUp.classList.add("pops-folder-icon-active");
5590
- }
5591
- }
5592
- /**
5593
- * 排序按钮的点击事件
5594
- * @param {PointerEvent} target
5595
- * @param {HTMLElement} event
5596
- * @param {string} sortName
5597
- */
5598
- function arrowSortClickEvent(target, event, sortName) {
5599
- if (!event["notChangeSortRule"]) {
5600
- config.sort.name = sortName;
5601
- config.sort.isDesc = !config.sort.isDesc;
5602
- }
5603
- let arrowUp = target.querySelector(".pops-folder-icon-arrow-up");
5604
- let arrowDown = target.querySelector(".pops-folder-icon-arrow-down");
5605
- changeArrowActive(arrowUp, arrowDown, config.sort.isDesc);
5606
- if (typeof config.sort.callback === "function" &&
5607
- config.sort.callback(target, event, config.sort.name, config.sort.isDesc)) {
5608
- return;
5662
+ /**
5663
+ * 排序按钮的点击事件
5664
+ * @param target
5665
+ * @param event
5666
+ * @param sortName
5667
+ */
5668
+ arrowToSortFolderInfoView(target, event, sortName) {
5669
+ const notChangeSortRule = Reflect.get(event, "notChangeSortRule");
5670
+ if (!notChangeSortRule) {
5671
+ config.sort.name = sortName;
5672
+ config.sort.isDesc = !config.sort.isDesc;
5673
+ }
5674
+ let arrowUp = target.querySelector(".pops-folder-icon-arrow-up");
5675
+ let arrowDown = target.querySelector(".pops-folder-icon-arrow-down");
5676
+ this.changeArrowActive(arrowUp, arrowDown, config.sort.isDesc);
5677
+ if (typeof config.sort.callback === "function" &&
5678
+ config.sort.callback(target, event, config.sort.name, config.sort.isDesc)) {
5679
+ return;
5680
+ }
5681
+ let childrenList = [];
5682
+ Array.from(folderListBodyElement.children).forEach((trElement) => {
5683
+ let __value__ = Reflect.get(trElement, "__value__");
5684
+ Reflect.set(__value__, "target", trElement);
5685
+ childrenList.push(__value__);
5686
+ });
5687
+ let sortedConfigList = this.sortFolderConfig(childrenList, config.sort.name, config.sort.isDesc);
5688
+ sortedConfigList.forEach((item) => {
5689
+ folderListBodyElement.appendChild(item.target);
5690
+ });
5609
5691
  }
5610
- let childrenList = [];
5611
- Array.from(folderListBodyElement.children).forEach((trElement) => {
5612
- let __value__ = trElement["__value__"];
5613
- __value__["target"] = trElement;
5614
- childrenList.push(__value__);
5615
- });
5616
- let sortedConfigList = sortFolderConfig(childrenList, config.sort.name, config.sort.isDesc);
5617
- sortedConfigList.forEach((item) => {
5618
- folderListBodyElement.appendChild(item.target);
5619
- });
5620
- }
5621
- /* 设置当前排序的图标按钮 */
5622
- popsDOMUtils.on(folderListSortFileNameElement.closest("th"), "click", function (event) {
5623
- arrowSortClickEvent(folderListSortFileNameElement, event, "fileName");
5624
- }, {
5625
- capture: true,
5626
- });
5627
- popsDOMUtils.on(folderListSortLatestTimeElement.closest("th"), "click", void 0, function (event) {
5628
- arrowSortClickEvent(folderListSortLatestTimeElement, event, "latestTime");
5629
- }, {
5630
- capture: true,
5631
- });
5632
- popsDOMUtils.on(folderListSortFileSizeElement.closest("th"), "click", void 0, function (event) {
5633
- arrowSortClickEvent(folderListSortFileSizeElement, event, "fileSize");
5634
- }, {
5635
- capture: true,
5636
- });
5637
- /* 设置默认触发的arrow */
5638
- if (config.sort.name === "fileName") {
5639
- popsDOMUtils.trigger(folderListSortFileNameElement, "click", {
5640
- notChangeSortRule: true,
5641
- });
5642
- }
5643
- else if (config.sort.name === "latestTime") {
5644
- popsDOMUtils.trigger(folderListSortLatestTimeElement, "click", {
5645
- notChangeSortRule: true,
5646
- });
5647
- }
5648
- else if (config.sort.name === "fileSize") {
5649
- popsDOMUtils.trigger(folderListSortFileSizeElement, "click", {
5650
- notChangeSortRule: true,
5651
- });
5652
5692
  }
5693
+ const popsFolder = new PopsFolder();
5694
+ popsFolder.init();
5695
+ Reflect.set($pops, "data-pops-folder", popsFolder);
5653
5696
  /* 拖拽 */
5654
5697
  if (config.drag) {
5655
5698
  PopsInstanceUtils.drag($pops, {
@@ -11606,7 +11649,7 @@
11606
11649
  /** 配置 */
11607
11650
  config = {
11608
11651
  /** 版本号 */
11609
- version: "2025.8.17",
11652
+ version: "2025.8.30",
11610
11653
  cssText: PopsCSS,
11611
11654
  /** icon图标的svg代码 */
11612
11655
  iconSVG: PopsIcon.$data,