Fix directory sorting to correctly prioritize `..` before anything else

master
Sven Slootweg 8 years ago
parent e19279db73
commit d6bdee2b6d

@ -3,7 +3,9 @@
const Promise = require("bluebird");
const fs = Promise.promisifyAll(require("fs"));
const path = require("path");
const naturalSort = require("natural-sort");
const rfr = require("rfr");
const directorySorter = rfr("lib/sorting/directory")();
function statComplete(target) {
return Promise.try(() => {
@ -75,16 +77,6 @@ module.exports = function(basePath, options = {}) {
}
})
}).then((entries) => {
let sorter = naturalSort();
return entries.sort((entryA, entryB) => {
if (entryA.targetType == "folder" && entryB.targetType != "folder") {
return -1;
} else if (entryB.targetType == "folder" && entryA.targetType != "folder") {
return 1;
} else {
return sorter(entryA.name, entryB.name);
}
});
return entries.sort(directorySorter);
});
}

@ -0,0 +1,28 @@
'use strict';
const naturalSort = require("natural-sort");
const rfr = require("rfr");
const priorityRules = rfr("lib/sorting/priority-rules");
module.exports = function() {
let naturalSorter = naturalSort();
let ruleSorter = priorityRules([
function(entry) {
return entry.name === "..";
},
function(entry) {
return entry.targetType === "folder";
}
]);
return function(entryA, entryB) {
let result = ruleSorter(entryA, entryB);
if (result !== 0) {
return result;
} else {
return naturalSorter(entryA.name, entryB.name);
}
}
}

@ -0,0 +1,19 @@
'use strict';
module.exports = function(rules) {
return function(entryA, entryB) {
for (let i = 0; i < rules.length; i++) {
let rule = rules[i];
let resultA = !!(rule(entryA));
let resultB = !!(rule(entryB));
if (resultA && !resultB) {
return -1;
} else if (resultB && !resultA) {
return 1;
}
}
return 0;
}
}
Loading…
Cancel
Save