MediaWiki:Common.js: Difference between revisions
Appearance
m Undo revision 32210 by TheWaffleLord (talk) Tag: Undo |
m Fix weirdly displaying numbers in leaderboard |
||
| Line 20: | Line 20: | ||
var totalEdits = calculateTotalEdits(row); // Calculate total edits | var totalEdits = calculateTotalEdits(row); // Calculate total edits | ||
if (row.cells[4]) { | if (row.cells[4]) { | ||
row.cells[4].innerHTML = '<strong>' + formatNumber(totalEdits) + '</strong>'; // Update the Total Edits column with bold formatting and comma separation | row.cells[4].innerHTML = '<strong style="font-weight: bold;">' + formatNumber(totalEdits) + '</strong>'; // Update the Total Edits column with bold formatting and comma separation | ||
} | } | ||
}); | }); | ||
| Line 40: | Line 40: | ||
// Assign rank: if current edit count is the same as the last, keep the same rank | // Assign rank: if current edit count is the same as the last, keep the same rank | ||
if (editCount !== lastCount) { | if (editCount !== lastCount) { | ||
row.cells[0].innerHTML = '<strong>' + currentRank + '</strong>'; // Assign current rank with bold formatting | row.cells[0].innerHTML = '<strong style="font-weight: bold;">' + currentRank + '</strong>'; // Assign current rank with bold formatting | ||
lastCount = editCount; // Update lastCount to the current edit count | lastCount = editCount; // Update lastCount to the current edit count | ||
currentRank++; // Increment rank for the next unique entry | currentRank++; // Increment rank for the next unique entry | ||
} else { | } else { | ||
row.cells[0].innerHTML = '<strong>' + (currentRank - 1) + '</strong>'; // Keep the same rank for ties | row.cells[0].innerHTML = '<strong style="font-weight: bold;">' + (currentRank - 1) + '</strong>'; // Keep the same rank for ties | ||
} | } | ||
}); | }); | ||
Revision as of 00:48, 12 April 2025
/* Any JavaScript here will be loaded for all users on every page load. */
// Function to sort leaderboard
function sortLeaderboard() {
var table = document.querySelector('.edit-leaderboard'); // Target the specific class
// Check if the table exists
if (!table) {
return; // Exit if the table doesn't exist
}
// Select all rows excluding the header row
var headerRow = table.rows[0]; // Get the header row
var rows = Array.prototype.slice.call(table.querySelectorAll('tr')).filter(function(row) {
return row !== headerRow; // Filter out the header row
});
// Calculate and display total edits in the last column for each row
rows.forEach(function(row) {
var totalEdits = calculateTotalEdits(row); // Calculate total edits
if (row.cells[4]) {
row.cells[4].innerHTML = '<strong style="font-weight: bold;">' + formatNumber(totalEdits) + '</strong>'; // Update the Total Edits column with bold formatting and comma separation
}
});
// Sort rows by the edit count (column index 4 for Total Edits)
rows.sort(function(rowA, rowB) {
var editA = calculateTotalEdits(rowA); // Use the new function to get total edits
var editB = calculateTotalEdits(rowB); // Use the new function to get total edits
return editB - editA; // Sort descending by total edit count
});
// Update ranks after sorting, handling ties
var currentRank = 1; // Start from rank 1
var lastCount = -1; // Initialize lastCount to a value that won't match any edit count
rows.forEach(function(row) {
var editCount = calculateTotalEdits(row); // Get current total edit count
// Assign rank: if current edit count is the same as the last, keep the same rank
if (editCount !== lastCount) {
row.cells[0].innerHTML = '<strong style="font-weight: bold;">' + currentRank + '</strong>'; // Assign current rank with bold formatting
lastCount = editCount; // Update lastCount to the current edit count
currentRank++; // Increment rank for the next unique entry
} else {
row.cells[0].innerHTML = '<strong style="font-weight: bold;">' + (currentRank - 1) + '</strong>'; // Keep the same rank for ties
}
});
// Clear the table and re-add sorted rows
while (table.rows.length > 1) {
table.deleteRow(1); // Remove existing rows except for the header
}
// Append the header row back to the table first
table.appendChild(headerRow);
// Append sorted rows back to the table
rows.forEach(function(row) {
table.appendChild(row); // Re-add the sorted row to the table
});
}
// Execute the sorting function
sortLeaderboard();
// Function to calculate total edits for a row
function calculateTotalEdits(row) {
var username = row.cells[1] ? row.cells[1].innerText.trim() : ""; // Get the username safely
// Initialize total edits
var totalEdits = 0;
// Get the edit count from the 3rd column (index 2)
var editCountsText = row.cells[2] ? row.cells[2].innerText.replace(/,/g, '').trim() : ""; // Remove commas first
var editCounts = editCountsText.split(/\s+/).map(function(edit) { // Split only on whitespace
return parseInt(edit, 10) || 0; // Convert to integer
});
// Get fandom edits from the "Fandom edits" cell (index 3)
var fandomEdits = row.cells[3] ? parseInt(row.cells[3].innerText.trim().replace(/[^0-9]/g, ''), 10) || 0 : 0;
// Sum up all extracted edit counts and fandom edits
totalEdits = editCounts.reduce((acc, count) => acc + count, 0) + fandomEdits;
return totalEdits;
}
// Function to format numbers with commas
function formatNumber(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); // Format number with commas
}
// Fix downscaling type on map pages
if (/^https:\/\/wiki\.pxls\.space\/(index\.php\?title=Map:|view\/Map:)/.test(window.location.href)) {
var style = document.createElement('style');
style.innerHTML = `
#map_leaflet_1 {
image-rendering: -moz-crisp-edges;
image-rendering: -o-crisp-edges;
image-rendering: -webkit-optimize-contrast;
-ms-interpolation-mode: nearest-neighbor;
image-rendering: pixelated;
}
`;
document.head.appendChild(style);
}