Provide a set of sorting "tie breakers"

merge-requests/175/merge
Sebastian Delmont 2022-01-04 13:52:10 -05:00 zatwierdzone przez Matthew Chambers
rodzic 7fc138fdf9
commit 441970c2e3
3 zmienionych plików z 34 dodań i 13 usunięć

Wyświetl plik

@ -93,15 +93,6 @@ function renderRoster(callRoster, rosterSettings)
window.document.title = `Call Roster: ${countParts.join(" • ")}`;
if (g_rosterSettings.compact)
{
sortCallList(visibleCallList, "Age", false);
}
else
{
sortCallList(visibleCallList, g_rosterSettings.sortColumn, g_rosterSettings.sortReverse);
}
let showBands = (Object.keys(rosterSettings.bands).length > 1) || g_rosterSettings.columns.Band;
let showModes = (Object.keys(rosterSettings.modes).length > 1) || g_rosterSettings.columns.Mode;
@ -109,6 +100,15 @@ function renderRoster(callRoster, rosterSettings)
columnOverrides.Mode = showModes
const rosterColumns = rosterColumnList(g_rosterSettings.columns, columnOverrides)
if (g_rosterSettings.compact)
{
sortCallList(visibleCallList, "Age", false, rosterColumns);
}
else
{
sortCallList(visibleCallList, g_rosterSettings.sortColumn, g_rosterSettings.sortReverse);
}
let worker = g_rosterSettings.compact ? renderCompactRosterHeaders() : renderNormalRosterHeaders(rosterColumns)
// Third loop: render all rows
@ -120,5 +120,6 @@ function renderRoster(callRoster, rosterSettings)
}
worker += g_rosterSettings.compact ? renderCompactRosterFooter() : renderNormalRosterFooter()
RosterTable.innerHTML = worker;
}

Wyświetl plik

@ -62,11 +62,20 @@ function setRosterSorting(column)
window.opener.goProcessRoster();
}
function sortCallList(callList, sortColumn, sortReverse)
function sortCallList(callList, sortColumn, sortReverse, columns)
{
const columnInfo = ROSTER_COLUMNS[sortColumn]
callList.sort((columnInfo && columnInfo.compare) || ROSTER_COLUMNS.Age.compare)
const comparerList = [
(columnInfo && columnInfo.compare) || ROSTER_COLUMNS.Age.compare,
columns && columns.includes("Spot") && ROSTER_COLUMNS.Spot.compare,
columns && columns.includes("dB") && ROSTER_COLUMNS.dB.compare,
columns && columns.includes("Age") && ROSTER_COLUMNS.Age.compare,
columns && columns.includes("Life") && ROSTER_COLUMNS.Life.compare,
columns && columns.includes("Callsign") && ROSTER_COLUMNS.Callsign.compare
]
callList.sort(multiColumnComparer(comparerList))
if (sortReverse)
{
@ -74,6 +83,17 @@ function sortCallList(callList, sortColumn, sortReverse)
}
}
const multiColumnComparer = (comparers) => (a, b) =>
{
let result = 0;
for (let i in comparers)
{
result = comparers[i] && comparers[i](a, b);
if (result) return result;
}
return 0;
}
function validateRosterColumnOrder(columns)
{
let correctedColumnOrder = (columns || DEFAULT_COLUMN_ORDER || []).slice();

Wyświetl plik

@ -423,7 +423,7 @@ function wantedColumnParts(callObj, options)
{
let wanted = callObj.hunting[field];
if (wanted == "calling" || wanted == "caller") { parts.push("Calling"); }
if (wanted == "calling") { parts.push("Calling"); }
else if (wanted == "hunted" && field == "qrz") { parts.push("QRZ"); }
else if (wanted == "hunted" && field == "oams") { parts.push("OAMS User"); }
else if (wanted == "hunted") { parts.push(`${options.html ? "<b>" : ""}New ${WANTED_LABELS[field]}${options.html ? "<b>" : ""}`); }
@ -436,7 +436,7 @@ function wantedColumnParts(callObj, options)
if (parts[0] == "Calling" && parts[1] == "Calling")
{
parts.shift(); parts.shift();
parts.unshift("Working");
parts.unshift(`${options.html ? "<b>" : ""}Working${options.html ? "<b>" : ""}`);
}
return parts;