Greasy Fork is available in English.
Adds buttons that switch the activity feeds directly.
// ==UserScript== // @name Strava - Feed buttons // @namespace https://github.com/bogdal/userscripts // @version 0.1 // @description Adds buttons that switch the activity feeds directly. // @author Adam Bogdał // @match https://www.strava.com/dashboard* // @grant GM_addStyle // @license MIT // @run-at document-start // ==/UserScript== GM_addStyle(` .us-feed-buttons { float: right; } .us-feed-buttons a:focus { outline: none; } .us-feed-buttons .feed-selected { color: #000; background-color: #fff; border-color: #fff; } `); const FEED_TYPE_CLUB = "club"; const FEED_TYPE_FOLLOWING = "following"; const FEED_TYPE_MY_ACTIVITY = "my_activity"; const feedButtons = [ { title: "Following", icon: "group", feedType: FEED_TYPE_FOLLOWING, isActive: (loadedFeed) => ![FEED_TYPE_MY_ACTIVITY, FEED_TYPE_CLUB].includes(loadedFeed), }, { title: "Your Activities", icon: "avatar", feedType: FEED_TYPE_MY_ACTIVITY, isActive: (loadedFeed) => loadedFeed === FEED_TYPE_MY_ACTIVITY, }, ]; const params = new URLSearchParams(window.location.search); const currentFeedType = params.get("feed_type"); const createButton = (iconName, title, url, isActive) => { let icon = document.createElement("span"); icon.classList.add(`icon-${iconName}`, "app-icon", "icon-lg"); let link = document.createElement("a"); link.classList.add("btn"); link.href = url; link.title = title; link.appendChild(icon); if (isActive) { link.classList.add("feed-selected"); } return link; }; const createFeedButtons = (container, classes) => { container.classList.add(classes); feedButtons.forEach((config) => { container.append( createButton( config.icon, config.title, `/dashboard?feed_type=${config.feedType}`, config.isActive(currentFeedType) ) ); }); return container; }; new MutationObserver((mutations, observer) => { const settingsBox = document.querySelector(".feed-header.feed-settings"); if (settingsBox) { settingsBox.append( createFeedButtons(document.createElement("div"), "us-feed-buttons") ); observer.disconnect(); } }).observe(document, { childList: true, subtree: true });