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