Toogle beta version

Extension for foodsharing.de - toggles to beta version and back

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

Um dieses Skript zu installieren, müssen Sie eine Erweiterung wie Tampermonkey oder Violentmonkey installieren.

Um dieses Skript zu installieren, müssen Sie eine Erweiterung wie Tampermonkey oder Violentmonkey installieren.

Um dieses Skript zu installieren, müssen Sie eine Erweiterung wie Tampermonkey oder Userscripts installieren.

Um dieses Skript zu installieren, müssen Sie eine Erweiterung wie Tampermonkey installieren.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

Um dieses Design zu installieren, müssen Sie eine Erweiterung wie Stylus installieren.

Um dieses Design zu installieren, müssen Sie eine Erweiterung wie Stylus installieren.

Um dieses Design zu installieren, müssen Sie eine Erweiterung wie Stylus installieren.

Um diesen Stil zu installieren, müssen Sie eine Erweiterung für den Benutzerstil Verwaltung installieren.

Um diesen Stil zu installieren, müssen Sie eine Erweiterung für den Benutzerstil Verwaltung installieren.

Um diesen Stil zu installieren, müssen Sie eine Erweiterung für den Benutzerstil Verwaltung installieren.

(Ich habe bereits einen Benutzerstil Verwaltung, ich möchte ihn installieren!)

// ==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 });