HelloFresh Hide Premium Recipes

Hides HelloFresh recipes with additional costs

// ==UserScript==
// @name         HelloFresh Hide Premium Recipes
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Hides HelloFresh recipes with additional costs
// @author       You
// @match        https://www.hellofresh.de/*
// @license      MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function hideExpensiveRecipes() {
        console.log('Script running...');

        const priceElements = document.querySelectorAll('[data-test-id="mealkit-surcharge-price"]');
        console.log('Found price elements:', priceElements.length);

        priceElements.forEach((priceEl, index) => {
            const priceText = priceEl.textContent || '';
            console.log(`Price element ${index} text:`, priceText);

            if (priceText.includes('+')) {
                // Find parent recipe container
                const recipeContainer = priceEl.closest('[data-test-id^="item-"]');
                if (recipeContainer) {
                    console.log('Hiding recipe:', recipeContainer.getAttribute('data-test-id'));
                    recipeContainer.style.display = 'none';
                    recipeContainer.style.visibility = 'hidden';
                    recipeContainer.style.opacity = '0';
                    recipeContainer.style.height = '0';
                    recipeContainer.style.overflow = 'hidden';
                }
            }
        });
    }

    // Run immediately and after short delay
    hideExpensiveRecipes();
    setTimeout(hideExpensiveRecipes, 1500);

    // Watch for DOM changes
    const observer = new MutationObserver((mutations) => {
        const hasNewPrices = mutations.some(mutation =>
            Array.from(mutation.addedNodes)
                .some(node => node.querySelector?.('[data-test-id="mealkit-surcharge-price"]'))
        );

        if (hasNewPrices) {
            hideExpensiveRecipes();
        }
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();