diff --git a/package.nw/lib/roster/renderRoster.js b/package.nw/lib/roster/renderRoster.js index 289d988..3b5cb01 100644 --- a/package.nw/lib/roster/renderRoster.js +++ b/package.nw/lib/roster/renderRoster.js @@ -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; } diff --git a/package.nw/lib/roster/rosterColumnFunctions.js b/package.nw/lib/roster/rosterColumnFunctions.js index 51d64e0..ba93049 100644 --- a/package.nw/lib/roster/rosterColumnFunctions.js +++ b/package.nw/lib/roster/rosterColumnFunctions.js @@ -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(); diff --git a/package.nw/lib/roster/rosterColumns.js b/package.nw/lib/roster/rosterColumns.js index 5c93854..457ab68 100644 --- a/package.nw/lib/roster/rosterColumns.js +++ b/package.nw/lib/roster/rosterColumns.js @@ -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 ? "" : ""}New ${WANTED_LABELS[field]}${options.html ? "" : ""}`); } @@ -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 ? "" : ""}Working${options.html ? "" : ""}`); } return parts;