HelloFresh Hide Premium Recipes

Hides HelloFresh recipes with additional costs

  1. // ==UserScript==
  2. // @name HelloFresh Hide Premium Recipes
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.6
  5. // @description Hides HelloFresh recipes with additional costs
  6. // @author You
  7. // @match https://www.hellofresh.de/*
  8. // @license MIT
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. function hideExpensiveRecipes() {
  16. console.log('Script running...');
  17.  
  18. const priceElements = document.querySelectorAll('[data-test-id="mealkit-surcharge-price"]');
  19. console.log('Found price elements:', priceElements.length);
  20.  
  21. priceElements.forEach((priceEl, index) => {
  22. const priceText = priceEl.textContent || '';
  23. console.log(`Price element ${index} text:`, priceText);
  24.  
  25. if (priceText.includes('+')) {
  26. // Find parent recipe container
  27. const recipeContainer = priceEl.closest('[data-test-id^="item-"]');
  28. if (recipeContainer) {
  29. console.log('Hiding recipe:', recipeContainer.getAttribute('data-test-id'));
  30. recipeContainer.style.display = 'none';
  31. recipeContainer.style.visibility = 'hidden';
  32. recipeContainer.style.opacity = '0';
  33. recipeContainer.style.height = '0';
  34. recipeContainer.style.overflow = 'hidden';
  35. }
  36. }
  37. });
  38. }
  39.  
  40. // Run immediately and after short delay
  41. hideExpensiveRecipes();
  42. setTimeout(hideExpensiveRecipes, 1500);
  43.  
  44. // Watch for DOM changes
  45. const observer = new MutationObserver((mutations) => {
  46. const hasNewPrices = mutations.some(mutation =>
  47. Array.from(mutation.addedNodes)
  48. .some(node => node.querySelector?.('[data-test-id="mealkit-surcharge-price"]'))
  49. );
  50.  
  51. if (hasNewPrices) {
  52. hideExpensiveRecipes();
  53. }
  54. });
  55.  
  56. observer.observe(document.body, {
  57. childList: true,
  58. subtree: true
  59. });
  60. })();