// ==UserScript== // @name parkrun Volunteer Days Display // @description Displays the number of volunteer credits for parkrun finishers on results pages, for celebration purposes (and let's not make assumptions about ratios) // @author Pete Johns (@johnsyweb) // @downloadURL https://raw.githubusercontent.com/johnsyweb/tampermonkey-parkrun/refs/heads/main/volunteer-days-display.user.js // @grant none // @homepage https://www.johnsy.com/tampermonkey-parkrun/ // @icon https://www.google.com/s2/favicons?sz=64&domain=parkrun.com.au // @license MIT // @match *://www.parkrun.ca/*/results/* // @match *://www.parkrun.co.at/*/results/* // @match *://www.parkrun.co.nl/*/results/* // @match *://www.parkrun.co.nz/*/results/* // @match *://www.parkrun.co.za/*/results/* // @match *://www.parkrun.com.au/*/results/* // @match *://www.parkrun.com.de/*/results/* // @match *://www.parkrun.dk/*/results/* // @match *://www.parkrun.fi/*/results/* // @match *://www.parkrun.fr/*/results/* // @match *://www.parkrun.ie/*/results/* // @match *://www.parkrun.it/*/results/* // @match *://www.parkrun.jp/*/results/* // @match *://www.parkrun.lt/*/results/* // @match *://www.parkrun.my/*/results/* // @match *://www.parkrun.no/*/results/* // @match *://www.parkrun.org.uk/*/results/* // @match *://www.parkrun.pl/*/results/* // @match *://www.parkrun.se/*/results/* // @match *://www.parkrun.sg/*/results/* // @match *://www.parkrun.us/*/results/* // @namespace http://tampermonkey.net/ // @run-at document-end // @supportURL https://github.com/johnsyweb/tampermonkey-parkrun/issues/ // @tag parkrun // @updateURL https://raw.githubusercontent.com/johnsyweb/tampermonkey-parkrun/refs/heads/main/volunteer-days-display.user.js // @version 1.0.66 // ==/UserScript== // DO NOT EDIT - generated from src/ by scripts/build-scripts.js (function () { 'use strict'; /** * Adds volunteer credit information to each finisher who has volunteered */ function showVolunteerCredits() { document.querySelectorAll('tr[data-vols] > td.Results-table-td.Results-table-td--name > div.detailed').forEach(function (div) { var volDays = div.closest('tr').getAttribute('data-vols'); if (volDays && parseInt(volDays) > 0) { var spacer = document.createElement('span'); spacer.classList.add('spacer'); spacer.textContent = ' | '; var volSpan = document.createElement('span'); volSpan.textContent = "".concat(volDays, " volunteer credit").concat(volDays === '1' ? '' : 's'); volSpan.classList.add('volunteer-days'); // In responsive detailed view, gender position is wrapped in a Results-tablet span. // Insert volunteer credits immediately after the finish count (before gender block) when present. var genderTablet = div.querySelector('.Results-tablet'); if (genderTablet) { div.insertBefore(spacer, genderTablet); spacer.insertAdjacentElement('afterend', volSpan); } else { var firstElement = div.firstElementChild; if (firstElement) { firstElement.insertAdjacentElement('afterend', spacer); spacer.insertAdjacentElement('afterend', volSpan); } else { div.appendChild(volSpan); } } } }); } /** * Waits for the page to fully load before adding volunteer information */ function init() { var firstRow = document.querySelector('tr[data-vols]'); if (firstRow) { showVolunteerCredits(); addVolunteerCreditsSort(); } else { setTimeout(init, 500); } } /** * Adds sort options for volunteer credits and wires up sorting behaviour */ function addVolunteerCreditsSort() { var firstRow = document.querySelector('tr[data-vols]'); if (!firstRow) return; var tbody = firstRow.closest('tbody'); // Try to find an existing sort