MyDealz Global Nav Toggle

Blendet Haupt- und Subnavigation auf MyDealz aus und fügt einen globalen Toggle-Button hinzu.

当前为 2025-04-17 提交的版本,查看 最新版本

// ==UserScript==
// @name         MyDealz Global Nav Toggle
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Blendet Haupt- und Subnavigation auf MyDealz aus und fügt einen globalen Toggle-Button hinzu.
// @author       MD928835
// @match        https://www.mydealz.de/*
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @license      MIT
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // --- Konfiguration ---
    // Liste der CSS-Selektoren für die Elemente, die ausgeblendet werden sollen [1]
    const SELECTORS_TO_TOGGLE = [
        '.nav',            // Hauptnavigationsleiste
        '.subNav--light',  // Sub-Navigationsleiste unter der Hauptleiste
        '.subNavMenu',     // Liste mit 'Beliebt' alles' etc.
        '.pagi--max-height-80' // Seitenpager
    ];

    const BUTTON_ID = 'mydealzGlobalNavToggle';
    const STORAGE_KEY = 'mydealzGlobalNavVisible'; // Zustandsspeicherung
    const HIDDEN_CLASS = 'mydealz-nav-hidden-by-script'; // Eigene Klasse zum Ausblenden
    const ICON_SHOW = '>';
    const ICON_CLOSE = '<';

    // --- CSS hinzufügen ---
    GM_addStyle(`
        /* Klasse zum Ausblenden der Navigationsbereiche */
        .${HIDDEN_CLASS} {
            display: none !important;
            visibility: hidden !important;
            height: 0 !important;
            overflow: hidden !important;
            margin: 0 !important;
            padding: 0 !important;
        }

        /* Styling für den Toggle-Button (fixed position) */
        #${BUTTON_ID} {
            position: fixed; /* Absolut fixiert relativ zum Viewport */
            top: 10px;       /* Abstand von oben */
            left: 10px;      /* Abstand von links */
            z-index: 10001; /* Muss über anderen Elementen liegen (MyDealz header hat zIndex--fixed) */
            background-color: rgba(240, 240, 240, 0.9);
            border: 1px solid #cccccc;
            border-radius: 5px;
            padding: 6px 12px;
            font-size: 22px;
            line-height: 1;
            cursor: pointer;
            box-shadow: 0 2px 5px rgba(0,0,0,0.2);
            transition: background-color 0.2s;
            color: #333;
        }

        #${BUTTON_ID}:hover {
            background-color: rgba(220, 220, 220, 0.95);
        }
    `);

    // --- Prüfen, ob das Body-Element vorhanden ist (Button-Anker) ---
    if (!document.body) {
        console.error('MyDealz Global Nav Toggle: <body> Element nicht gefunden. Button kann nicht platziert werden. Skript wird beendet.');
        return;
    }

    // --- Toggle-Button erstellen oder finden ---
    let toggleButton = document.getElementById(BUTTON_ID);
    if (!toggleButton) {
        toggleButton = document.createElement('button');
        toggleButton.id = BUTTON_ID;
        toggleButton.title = "Navigation ein-/ausblenden";
        // Den Button direkt in den Body einfügen
        document.body.appendChild(toggleButton);
        console.log('MyDealz Global Nav Toggle: Button erstellt und in <body> eingefügt.');
    } else {
         console.log('MyDealz Global Nav Toggle: Button existiert bereits.');
    }

    // --- Zustand initialisieren (aus Speicher oder Standard = unsichtbar) ---
    let isVisible = GM_getValue(STORAGE_KEY, false);

    // --- Funktion zum Aktualisieren des Navigationszustands ---
    function updateNavState(visible) {
        let foundElements = false;
        SELECTORS_TO_TOGGLE.forEach(selector => {
            const elements = document.querySelectorAll(selector);
            if (elements.length > 0) {
                foundElements = true;
                elements.forEach(element => {
                    element.classList.toggle(HIDDEN_CLASS, !visible);
                });
            }
        });

        if (!foundElements && isVisible) { // Nur warnen, wenn etwas sichtbar sein sollte, aber nichts gefunden wurde
             console.warn("MyDealz Global Nav Toggle: Keines der zu toggelnden Elemente wurde gefunden.");
        }

        // Button-Icon ändern
        toggleButton.textContent = visible ? ICON_CLOSE : ICON_SHOW;

        // Zustand speichern
        GM_setValue(STORAGE_KEY, visible);
    }

    // --- Initialen Zustand beim Laden setzen ---
    updateNavState(isVisible);

    // --- Event Listener für den Klick auf den Button hinzufügen ---
    toggleButton.addEventListener('click', () => {
        isVisible = !isVisible; // Zustand umschalten
        updateNavState(isVisible); // Anzeige aktualisieren und speichern
    });

})();