|
135 | 135 | setTimeout(viewTop,1000); // 监听并修改右键菜单 [外链分享地址] 为 [复制并打开分享链接] / [复制分享链接] / [打开分享链接] 之一 |
136 | 136 | setTimeout(copyAllfileSha, 500); // 一键复制所有分享链接 |
137 | 137 |
|
138 | | - setTimeout(filesSort, 200); // 文件排序 |
| 138 | + setTimeout(filesSort, 300); // 文件排序 |
139 | 139 | } |
140 | 140 | } |
141 | 141 |
|
|
597 | 597 | if (strA[i] === strB[i]) { |
598 | 598 | continue; |
599 | 599 | } |
| 600 | + if (strB[i] === undefined) return 1; |
600 | 601 | if (notChinese(strA[i]) && notChinese(strB[i])) { |
601 | 602 | return strA[i] < strB[i] ? -1 : 1; |
602 | 603 | } else if (notChinese(strA[i])) { |
|
610 | 611 | if (strA.length === strB.length) { |
611 | 612 | return 0; |
612 | 613 | } else if (strA.length < strB.length) { |
613 | | - return 1; |
| 614 | + return -1; |
614 | 615 | } |
615 | | - return -1; |
| 616 | + return 1; |
616 | 617 | } |
617 | 618 | function notChinese(char) { |
618 | 619 | const charCode = char.charCodeAt(0) |
|
623 | 624 |
|
624 | 625 | // 创建排序按鈕 |
625 | 626 | function createAllButtons() { |
626 | | - if (!menu_value('menu_fileSort')) return; |
627 | 627 | const tabTitle = frameDoc.querySelector('#container > div.n1 > div.f_th'); |
628 | 628 | const name = tabTitle.querySelector('div.f_name'); |
629 | 629 | const size = tabTitle.querySelector('div.f_size'); |
|
684 | 684 | } |
685 | 685 | return filesInfo; |
686 | 686 | } |
| 687 | + |
| 688 | + function getFolders() { |
| 689 | + const list = frameDoc.querySelector('#sub_folder_list'); |
| 690 | + const folders = list.childNodes; |
| 691 | + const foldersInfo = []; |
| 692 | + for (const folder of folders) { |
| 693 | + const name = folder.querySelector('.f_tb > .f_name2 > span.follink > span').textContent; |
| 694 | + foldersInfo.push({ |
| 695 | + info: { |
| 696 | + name: name, |
| 697 | + }, |
| 698 | + node: folder |
| 699 | + }) |
| 700 | + } |
| 701 | + return foldersInfo; |
| 702 | + } |
687 | 703 | // 转换文件大小 |
688 | 704 | function parseByteSize(text) { |
689 | 705 | const unit = ['B', 'K', 'M', 'G', 'T']; |
|
715 | 731 | } |
716 | 732 |
|
717 | 733 | // 排序 |
718 | | - function sortFiles(files, by, order) { |
| 734 | + function sortItems(files, by, order) { |
719 | 735 | let compareFunc; |
720 | 736 | if (by === 'name') { |
721 | 737 | compareFunc = (a, b) => { |
722 | | - return (order == 'asc' ? 1 : -1) * sortByName(a.info.name, b.info.name); |
| 738 | + return (order === 'asc' ? 1 : -1) * sortByName(a.info.name, b.info.name); |
723 | 739 | } |
724 | 740 | } else { |
725 | 741 | compareFunc = (a, b) => { |
726 | 742 | const result = a.info[by] > b.info[by] ? 1 : -1; |
727 | | - return (order == 'asc' ? 1 : -1) * result; |
| 743 | + return (order === 'asc' ? 1 : -1) * result; |
728 | 744 | } |
729 | 745 | } |
730 | 746 | files.sort(compareFunc); |
|
733 | 749 | function sortFileList() { |
734 | 750 | const files = getFiles(); |
735 | 751 | if (files.length > 0) { |
736 | | - sortFiles(files, currentStatus.by, currentStatus.order); |
| 752 | + sortItems(files, currentStatus.by, currentStatus.order); |
737 | 753 | // console.log(files) |
738 | 754 | const fileList = frameDoc.querySelector('#filelist'); |
739 | 755 | for (let i = 0; i < files.length; i++) { |
|
742 | 758 | } |
743 | 759 | } |
744 | 760 |
|
| 761 | + function sortFolderList() { |
| 762 | + const folders = getFolders(); |
| 763 | + // console.log(folders); |
| 764 | + if (folders.length > 0) { |
| 765 | + // 文件夹只能按名称排序 |
| 766 | + if (currentStatus.by === 'name') { |
| 767 | + sortItems(folders, 'name', currentStatus.order); |
| 768 | + } else { |
| 769 | + sortItems(folders, 'name', 'asc'); // 其他情况,皆按名称升序 |
| 770 | + } |
| 771 | + const folderList = frameDoc.querySelector('#sub_folder_list'); |
| 772 | + for (let i = 0; i < folders.length; i++) { |
| 773 | + folderList.appendChild(folders[i].node); |
| 774 | + } |
| 775 | + } |
| 776 | + } |
| 777 | + |
745 | 778 | function fileListCallback(records) { |
746 | 779 | if (!menu_value('menu_fileSort')) return; |
747 | 780 | for (const event of records) { |
748 | 781 | // 自己修改的时候不排序 |
749 | 782 | if (event.removedNodes.length > 0) return; |
750 | 783 | } |
751 | | - |
752 | 784 | sortFileList(); |
| 785 | + } |
753 | 786 |
|
| 787 | + function folderListCallback(records) { |
| 788 | + if (!menu_value('menu_fileSort')) return; |
| 789 | + for (const event of records) { |
| 790 | + // 自己修改的时候不排序 |
| 791 | + if (event.removedNodes.length > 0) return; |
| 792 | + } |
| 793 | + sortFolderList(); |
754 | 794 | } |
755 | 795 |
|
756 | 796 | function clickSortButton(by, button) { |
|
773 | 813 | button.textContent = currentStatus.order === 'asc' ? '⬆' : '⬇'; |
774 | 814 | currentStatus.by = by; |
775 | 815 | sortFileList(); |
| 816 | + sortFolderList(); |
776 | 817 |
|
777 | 818 | } |
778 | 819 |
|
779 | 820 | // create buttons |
780 | 821 | setTimeout(() => { |
781 | | - if (allButtons === undefined) { |
| 822 | + if (allButtons === undefined && menu_value('menu_fileSort')) { |
782 | 823 | allButtons = createAllButtons(); |
| 824 | + // console.log(allButtons); |
783 | 825 | allButtons[currentStatus.by].el.textContent = '⬆'; |
784 | 826 | } |
785 | 827 | }, 500); |
786 | 828 |
|
787 | 829 | // sort files |
788 | 830 | const fileList = frameDoc.querySelector('#filelist'); |
789 | | - const observer = new MutationObserver(fileListCallback); |
790 | | - observer.observe(fileList, { childList: true, attributes: false }); |
| 831 | + const fileObserver = new MutationObserver(fileListCallback); |
| 832 | + fileObserver.observe(fileList, { childList: true, attributes: false }); |
| 833 | + |
| 834 | + // sort files |
| 835 | + const folderList = frameDoc.querySelector('#sub_folder_list');; |
| 836 | + const folderObserver = new MutationObserver(folderListCallback); |
| 837 | + folderObserver.observe(folderList, { childList: true, attributes: false }); |
791 | 838 |
|
792 | 839 |
|
793 | 840 | } |
|
0 commit comments