Skip to content

Commit 62ca690

Browse files
committed
新增 文件夹排序
1 parent db8a7a3 commit 62ca690

1 file changed

Lines changed: 59 additions & 12 deletions

File tree

Lanzou-Enhanced.user.js

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@
135135
setTimeout(viewTop,1000); // 监听并修改右键菜单 [外链分享地址] 为 [复制并打开分享链接] / [复制分享链接] / [打开分享链接] 之一
136136
setTimeout(copyAllfileSha, 500); // 一键复制所有分享链接
137137

138-
setTimeout(filesSort, 200); // 文件排序
138+
setTimeout(filesSort, 300); // 文件排序
139139
}
140140
}
141141

@@ -597,6 +597,7 @@
597597
if (strA[i] === strB[i]) {
598598
continue;
599599
}
600+
if (strB[i] === undefined) return 1;
600601
if (notChinese(strA[i]) && notChinese(strB[i])) {
601602
return strA[i] < strB[i] ? -1 : 1;
602603
} else if (notChinese(strA[i])) {
@@ -610,9 +611,9 @@
610611
if (strA.length === strB.length) {
611612
return 0;
612613
} else if (strA.length < strB.length) {
613-
return 1;
614+
return -1;
614615
}
615-
return -1;
616+
return 1;
616617
}
617618
function notChinese(char) {
618619
const charCode = char.charCodeAt(0)
@@ -623,7 +624,6 @@
623624

624625
// 创建排序按鈕
625626
function createAllButtons() {
626-
if (!menu_value('menu_fileSort')) return;
627627
const tabTitle = frameDoc.querySelector('#container > div.n1 > div.f_th');
628628
const name = tabTitle.querySelector('div.f_name');
629629
const size = tabTitle.querySelector('div.f_size');
@@ -684,6 +684,22 @@
684684
}
685685
return filesInfo;
686686
}
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+
}
687703
// 转换文件大小
688704
function parseByteSize(text) {
689705
const unit = ['B', 'K', 'M', 'G', 'T'];
@@ -715,16 +731,16 @@
715731
}
716732

717733
// 排序
718-
function sortFiles(files, by, order) {
734+
function sortItems(files, by, order) {
719735
let compareFunc;
720736
if (by === 'name') {
721737
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);
723739
}
724740
} else {
725741
compareFunc = (a, b) => {
726742
const result = a.info[by] > b.info[by] ? 1 : -1;
727-
return (order == 'asc' ? 1 : -1) * result;
743+
return (order === 'asc' ? 1 : -1) * result;
728744
}
729745
}
730746
files.sort(compareFunc);
@@ -733,7 +749,7 @@
733749
function sortFileList() {
734750
const files = getFiles();
735751
if (files.length > 0) {
736-
sortFiles(files, currentStatus.by, currentStatus.order);
752+
sortItems(files, currentStatus.by, currentStatus.order);
737753
// console.log(files)
738754
const fileList = frameDoc.querySelector('#filelist');
739755
for (let i = 0; i < files.length; i++) {
@@ -742,15 +758,39 @@
742758
}
743759
}
744760

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+
745778
function fileListCallback(records) {
746779
if (!menu_value('menu_fileSort')) return;
747780
for (const event of records) {
748781
// 自己修改的时候不排序
749782
if (event.removedNodes.length > 0) return;
750783
}
751-
752784
sortFileList();
785+
}
753786

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();
754794
}
755795

756796
function clickSortButton(by, button) {
@@ -773,21 +813,28 @@
773813
button.textContent = currentStatus.order === 'asc' ? '⬆' : '⬇';
774814
currentStatus.by = by;
775815
sortFileList();
816+
sortFolderList();
776817

777818
}
778819

779820
// create buttons
780821
setTimeout(() => {
781-
if (allButtons === undefined) {
822+
if (allButtons === undefined && menu_value('menu_fileSort')) {
782823
allButtons = createAllButtons();
824+
// console.log(allButtons);
783825
allButtons[currentStatus.by].el.textContent = '⬆';
784826
}
785827
}, 500);
786828

787829
// sort files
788830
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 });
791838

792839

793840
}

0 commit comments

Comments
 (0)