Toogle beta version

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

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

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