mirror of
https://github.com/TrentSPalmer/hugo_themes_report.git
synced 2025-11-21 02:08:25 -08:00
add more sorting for results
This commit is contained in:
97
templates/js/getSortedThemes.js
Normal file
97
templates/js/getSortedThemes.js
Normal file
@@ -0,0 +1,97 @@
|
||||
function dateCompare(x, y) {
|
||||
let xRay = x.split("-").map((j) => parseInt(j));
|
||||
let yRay = y.split("-").map((k) => parseInt(k));
|
||||
return xRay[0] > yRay[0]
|
||||
? 1
|
||||
: xRay[0] < yRay[0]
|
||||
? -1
|
||||
: xRay[1] > yRay[1]
|
||||
? 1
|
||||
: xRay[1] < yRay[1]
|
||||
? -1
|
||||
: xRay[2] > yRay[2]
|
||||
? 1
|
||||
: xRay[2] < yRay[2]
|
||||
? -1
|
||||
: 0;
|
||||
}
|
||||
|
||||
function semVerCompare(y, x) {
|
||||
let xRay = x.split(".").map((j) => parseInt(j));
|
||||
let yRay = y.split(".").map((k) => parseInt(k));
|
||||
[xRay, yRay].forEach((i) => {
|
||||
if (i.length < 1) {
|
||||
i[0] = 0;
|
||||
i[1] = 0;
|
||||
i[2] = 0;
|
||||
} else if (i.length < 2) {
|
||||
i[1] = 0;
|
||||
i[2] = 0;
|
||||
} else if (i.length < 3) {
|
||||
i[2] = 0;
|
||||
}
|
||||
});
|
||||
return xRay[0] > yRay[0]
|
||||
? 1
|
||||
: xRay[0] < yRay[0]
|
||||
? -1
|
||||
: xRay[1] > yRay[1]
|
||||
? 1
|
||||
: xRay[1] < yRay[1]
|
||||
? -1
|
||||
: xRay[2] > yRay[2]
|
||||
? 1
|
||||
: xRay[2] < yRay[2]
|
||||
? -1
|
||||
: 0;
|
||||
}
|
||||
|
||||
function compareTheme(x, y, sortedBy) {
|
||||
if (sortedBy[0] === "date") {
|
||||
let dComp = dateCompare(y.date, x.date);
|
||||
return dComp === 1
|
||||
? 1
|
||||
: dComp === -1
|
||||
? -1
|
||||
: sortedBy.length < 2
|
||||
? -1
|
||||
: compareTheme(x, y, sortedBy.slice(1));
|
||||
} else if (sortedBy[0] === "stars") {
|
||||
return y.num_stars > x.num_stars
|
||||
? 1
|
||||
: y.num_stars < x.num_stars
|
||||
? -1
|
||||
: sortedBy.length < 2
|
||||
? -1
|
||||
: compareTheme(x, y, sortedBy.slice(1));
|
||||
} else if (sortedBy[0] === "name") {
|
||||
return x.cname.localeCompare(y.cname) === 1
|
||||
? 1
|
||||
: x.cname.localeCompare(y.cname) === -1
|
||||
? -1
|
||||
: sortedBy.length < 2
|
||||
? -1
|
||||
: compareTheme(x, y, sortedBy.slice(1));
|
||||
} else if (sortedBy[0] === "minVer") {
|
||||
let svComp = semVerCompare(x.min_ver, y.min_ver);
|
||||
return svComp === 1
|
||||
? 1
|
||||
: svComp === -1
|
||||
? -1
|
||||
: sortedBy.length < 2
|
||||
? -1
|
||||
: compareTheme(x, y, sortedBy.slice(1));
|
||||
} else if (sortedBy[0] === "license") {
|
||||
return x.license.localeCompare(y.license) === 1
|
||||
? 1
|
||||
: x.license.localeCompare(y.license) === -1
|
||||
? -1
|
||||
: sortedBy.length < 2
|
||||
? -1
|
||||
: compareTheme(x, y, sortedBy.slice(1));
|
||||
}
|
||||
}
|
||||
|
||||
function sortThemes(themeList, sortedBy) {
|
||||
themeList.sort((a, b) => compareTheme(a, b, sortedBy));
|
||||
}
|
||||
Reference in New Issue
Block a user