Extension for foodsharing.de - toggles to beta version and back
// ==UserScript==
// @name Toogle beta version
// @namespace Violentmonkey Scripts
// @match https://*.foodsharing.*/*
// @run-at document-idle
// @version 1.3
// @author Martin G. (166111)
// @license MIT
// @require https://cdn.jsdelivr.net/npm/@violentmonkey/shortcut@1
// @description Extension for foodsharing.de - toggles to beta version and back
// ==/UserScript==
function isBeta() {
return window.location.hostname.startsWith("beta.");
}
function initButton() {
if (document.getElementById("fs-toggle-beta-btn")) return;
// Try prod container first, then common header targets on beta, or fall back to body
const targetContainer =
document.querySelector(".metanav-container") ||
document.querySelector("header nav") ||
document.querySelector("#nav") ||
document.body;
if (!targetContainer) return;
const btn = document.createElement("button");
btn.id = "fs-toggle-beta-btn";
btn.innerHTML = isBeta() ? "prod" : "beta";
// Basic styling so it remains visible if appended to body/header
btn.style.marginLeft = "8px";
btn.style.cursor = "pointer";
btn.onclick = () => {
const aktuelleURL = window.location.href;
const betaMuster = /(\bhttps?:\/\/)(www\.)?/;
let neueURL;
if (isBeta()) {
neueURL = aktuelleURL.replace("beta.", "");
} else {
neueURL = aktuelleURL.replace(betaMuster, "$1beta.");
}
window.location.href = neueURL;
};
targetContainer.appendChild(btn);
}
// Run initial attempt
initButton();
// Observe DOM changes in case Vue re-renders the navigation
const observer = new MutationObserver(() => {
if (!document.getElementById("fs-toggle-beta-btn")) {
initButton();
}
});
observer.observe(document.body, { childList: true, subtree: true });