NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Strava Activity Speed // @version 0.1 // @license MIT // @description Show speed for every activity on "My Activities" page in Strava website // @author Dafiul Haq // @match https://www.strava.com/athlete/training // @grant none // ==/UserScript== let table = document.getElementById("search-results"); let thead = table.firstElementChild; let tbody = table.lastElementChild; let speedTh = document.createElement("th"); speedTh.style.textAlign = "center"; speedTh.style.padding = "0"; speedTh.textContent = "Avg. Speed"; thead.firstElementChild.insertBefore(speedTh, thead.firstElementChild.querySelector(".col-elev")); let observer = new MutationObserver((mutations, observer) => { for (let mutation of mutations) { if (mutation.type === 'childList' && mutation.removedNodes.length > 0) { [...tbody.children].forEach((tr) => { let meter = parseFloat(tr.querySelector(".col-dist").textContent) * 1000; let second = Number((() => { let raw = tr.querySelector(".col-time").textContent; let splitted = raw.split(":").map(v => Number(v)); if (splitted.length === 3) { return splitted[0] * 3600 + splitted[1] * 60 + splitted[2]; } else if (splitted.length === 2) { return splitted[0] * 60 + splitted[1]; } else { return raw.slice(0, -1); } })()); let kmh = ((meter / second) * 3600 / 1000).toFixed(1); let speedTd = document.createElement("td"); speedTd.classList.add("view-col"); speedTd.style.display = "table-cell"; speedTd.style.textAlign = "right"; speedTd.textContent = kmh + " km/h"; tr.insertBefore(speedTd, tr.querySelector(".col-elev")); }); } } }); observer.observe(tbody, {childList: true, subtree: true});