Calcul Des Points Weight Watcher Gratuit

Calcul des Points Weight Watchers Gratuit – Votre Outil Essentiel :root { –primary-color: #004a99; –success-color: #28a745; –background-color: #f8f9fa; –text-color: #333; –light-gray: #e9ecef; –white: #fff; –error-color: #dc3545; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–background-color); color: var(–text-color); line-height: 1.6; margin: 0; padding: 0; } .container { max-width: 1000px; margin: 20px auto; padding: 20px; background-color: var(–white); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); display: flex; flex-direction: column; align-items: center; } h1, h2, h3 { color: var(–primary-color); text-align: center; } h1 { font-size: 2.5em; margin-bottom: 15px; } h2 { font-size: 1.8em; margin-top: 30px; margin-bottom: 15px; border-bottom: 2px solid var(–primary-color); padding-bottom: 5px; } h3 { font-size: 1.4em; margin-top: 20px; margin-bottom: 10px; } .calculator-section { width: 100%; margin-bottom: 30px; padding: 25px; background-color: var(–white); border-radius: 8px; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08); } .loan-calc-container { display: flex; flex-direction: column; gap: 15px; } .input-group { display: flex; flex-direction: column; gap: 5px; } .input-group label { font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group select { padding: 10px 12px; border: 1px solid var(–light-gray); border-radius: 5px; font-size: 1em; width: 100%; box-sizing: border-box; } .input-group input[type="number"]:focus, .input-group select:focus { outline: none; border-color: var(–primary-color); box-shadow: 0 0 0 2px rgba(0, 74, 153, 0.2); } .input-group .helper-text { font-size: 0.85em; color: #6c757d; } .input-group .error-message { color: var(–error-color); font-size: 0.8em; margin-top: 5px; min-height: 1.2em; /* To prevent layout shifts */ } .button-group { display: flex; gap: 10px; margin-top: 20px; flex-wrap: wrap; } button { padding: 12px 20px; border: none; border-radius: 5px; font-size: 1em; font-weight: bold; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; white-space: nowrap; } button.primary { background-color: var(–primary-color); color: var(–white); } button.primary:hover { background-color: #003366; transform: translateY(-1px); } button.secondary { background-color: var(–light-gray); color: var(–text-color); } button.secondary:hover { background-color: #d3d9df; transform: translateY(-1px); } button.reset { background-color: #ffc107; color: var(–text-color); } button.reset:hover { background-color: #e0a800; transform: translateY(-1px); } #results-container { margin-top: 30px; padding: 25px; background-color: var(–primary-color); color: var(–white); border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 74, 153, 0.3); text-align: center; width: 100%; box-sizing: border-box; } #results-container h3 { color: var(–white); margin-bottom: 15px; } #main-result { font-size: 2.5em; font-weight: bold; margin-bottom: 10px; display: inline-block; padding: 10px 20px; background-color: var(–success-color); border-radius: 5px; } #results-container p { margin: 8px 0; font-size: 1.1em; } #results-container p strong { color: var(–light-gray); } .intermediate-results div, .key-assumptions div { margin-top: 15px; padding-top: 15px; border-top: 1px dashed rgba(255, 255, 255, 0.3); } .intermediate-results span, .key-assumptions span { font-weight: bold; font-size: 1.2em; color: var(–white); } .formula-explanation { margin-top: 20px; font-size: 0.95em; color: var(–light-gray); text-align: left; border-left: 3px solid var(–success-color); padding-left: 15px; } table { width: 100%; border-collapse: collapse; margin-top: 20px; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08); } th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid var(–light-gray); } thead { background-color: var(–primary-color); color: var(–white); } thead th { font-weight: bold; } tbody tr:nth-child(even) { background-color: var(–background-color); } tbody tr:hover { background-color: var(–light-gray); } caption { font-size: 1.1em; font-weight: bold; color: var(–primary-color); margin-bottom: 10px; text-align: left; } #chart-container { width: 100%; margin-top: 30px; padding: 20px; background-color: var(–white); border-radius: 8px; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08); } #chart-container canvas { width: 100% !important; height: auto !important; } .article-content { margin-top: 40px; padding: 30px; background-color: var(–white); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .article-content p, .article-content ul, .article-content ol { margin-bottom: 15px; } .article-content ul, .article-content ol { padding-left: 25px; } .article-content li { margin-bottom: 8px; } .article-content a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .article-content a:hover { text-decoration: underline; } .faq-item { margin-bottom: 15px; border-bottom: 1px solid var(–light-gray); padding-bottom: 10px; } .faq-item:last-child { border-bottom: none; } .faq-question { font-weight: bold; color: var(–primary-color); cursor: pointer; display: block; margin-bottom: 5px; } .faq-answer { font-size: 0.95em; color: #555; display: none; /* Hidden by default */ } .faq-item.open .faq-answer { display: block; } .related-tools ul { list-style: none; padding: 0; } .related-tools li { margin-bottom: 10px; } .related-tools a { font-weight: bold; } .related-tools span { font-size: 0.9em; color: #666; display: block; margin-top: 3px; } /* Responsive adjustments */ @media (max-width: 768px) { .container { margin: 10px; padding: 15px; } h1 { font-size: 2em; } h2 { font-size: 1.5em; } button { width: 100%; margin-bottom: 10px; } .button-group { flex-direction: column; align-items: center; } #main-result { font-size: 2em; } }

Calcul des Points Weight Watchers Gratuit

Calculez facilement vos points pour chaque aliment et suivez votre parcours minceur.

Votre Calculateur de Points

Entrez le nom de l'aliment pour référence.
Calories pour 100g ou 100ml de l'aliment.
Grammes de protéines pour 100g/100ml.
Grammes de glucides pour 100g/100ml.
Grammes de lipides (matières grasses) pour 100g/100ml.
Grammes de sucres pour 100g/100ml (souvent inclus dans les glucides).
Grammes de fibres pour 100g/100ml.
Grammes d'acides gras saturés pour 100g/100ml.
Quantité consommée en grammes ou millilitres.

Vos Résultats

Points pour 100g :
Points Totaux (portion) :
Calories par Point : — kcal/pt

Hypothèses Clés :

Aliment :
Portion : — g/ml
Formule : WW (ProPoints/SmartPoints)

Explication de la formule : Les points sont calculés en tenant compte des calories, des protéines, des glucides, des lipides, des sucres, des fibres et des acides gras saturés. La formule exacte peut varier légèrement selon la version du programme WW (ProPoints, SmartPoints), mais elle vise à valoriser les aliments nutritifs et à limiter ceux riches en calories, sucres et mauvaises graisses.

Répartition des Nutriments par Point
Détails Nutritionnels et Points
Nutriment Quantité (pour 100g/ml) Points (pour 100g/ml)
Calories (kcal)
Protéines (g)
Glucides (g)
Lipides (g)
Sucres (g)
Fibres (g)
Acides Gras Saturés (g)

Qu'est-ce que le Calcul des Points Weight Watchers Gratuit ?

Le calcul des points Weight Watchers gratuit est une méthode permettant d'évaluer la "valeur" d'un aliment en points, basée sur ses caractéristiques nutritionnelles. L'objectif principal de ce système est d'encourager la consommation d'aliments plus sains et moins caloriques, tout en permettant une certaine flexibilité. Il ne s'agit pas d'une simple calorie-thérapie, mais d'une approche plus nuancée qui prend en compte la densité nutritionnelle. Ce système, autrefois appelé ProPoints puis SmartPoints, aide les utilisateurs à mieux comprendre l'impact de leurs choix alimentaires sur leur apport calorique et leur bien-être général, dans le cadre d'un objectif de perte ou de maintien du poids.

Qui devrait utiliser ce système ? Toute personne souhaitant perdre du poids, maintenir son poids, ou simplement adopter une alimentation plus équilibrée et consciente. Il est particulièrement utile pour ceux qui trouvent les comptages de calories trop restrictifs ou qui cherchent une méthode structurée pour faire de meilleurs choix alimentaires. Les personnes suivant un programme WW officiel peuvent utiliser cet outil pour vérifier les points d'aliments non répertoriés ou pour mieux comprendre la logique derrière le calcul.

Idées fausses courantes : Une idée fausse est que tous les aliments "sains" ont zéro point, ce qui n'est pas le cas. Même les fruits et légumes, bien que souvent faibles en points, peuvent en avoir selon leur teneur en sucres naturels. Une autre idée fausse est que le système est uniquement basé sur les calories ; en réalité, les protéines, les fibres, les sucres et les graisses jouent tous un rôle crucial dans le calcul, rendant le système plus holistique.

Formule et Explication Mathématique du Calcul des Points Weight Watchers

La formule exacte des points Weight Watchers a évolué au fil du temps (ProPoints, SmartPoints). Voici une explication basée sur les principes généraux qui sous-tendent ces systèmes, visant à refléter la complexité du calcul :

Formule Générale Simplifiée (pour illustration) :

Points = (0.4 * Calories) + (2 * Lipides) - (1.5 * Protéines) - (0.8 * Glucides)

Note : Cette formule est une simplification à des fins éducatives. Les versions officielles (ProPoints, SmartPoints) intègrent des facteurs et des seuils spécifiques, notamment pour les sucres, les fibres, et des ajustements basés sur la densité nutritionnelle.

Explication des Variables :

Variables du Calcul des Points WW
Variable Signification Unité Rôle dans le Calcul
Calories Apport énergétique total de l'aliment. kcal / 100g ou 100ml Augmente les points (facteur positif).
Protéines Macronutriment essentiel, favorise la satiété. g / 100g ou 100ml Diminue les points (facteur négatif).
Lipides (Matières Grasses) Source d'énergie dense, importante mais à consommer avec modération. g / 100g ou 100ml Augmente les points (facteur positif).
Glucides Source d'énergie principale. La formule peut différencier sucres et fibres. g / 100g ou 100ml Peut diminuer les points (facteur négatif), surtout si ce sont des glucides complexes/fibres.
Sucres Type de glucide simple, souvent moins valorisé. g / 100g ou 100ml Peut augmenter les points dans certaines formules ou être un sous-composant des glucides.
Fibres Glucide complexe bénéfique pour la digestion et la satiété. g / 100g ou 100ml Diminue les points (facteur négatif).
Acides Gras Saturés Type de lipide moins sain, souvent pénalisé. g / 100g ou 100ml Augmente significativement les points (facteur positif).

Dérivation et Logique : La formule est conçue pour attribuer plus de points aux aliments riches en calories et en "mauvaises" graisses (lipides, acides gras saturés), et moins de points aux aliments riches en protéines et en fibres. Les glucides sont traités de manière plus complexe, avec une tendance à réduire les points s'ils sont sous forme de fibres, et potentiellement à les augmenter s'ils sont sous forme de sucres simples. L'objectif est de guider l'utilisateur vers des choix alimentaires plus nutritifs et moins denses en énergie non bénéfique.

Exemples Pratiques (Cas d'Utilisation Réels)

Utilisons notre calculateur pour illustrer le calcul des points Weight Watchers.

Exemple 1 : Blanc de Poulet Grillé

Données :

  • Nom : Blanc de Poulet Grillé
  • Calories : 165 kcal / 100g
  • Protéines : 31 g / 100g
  • Glucides : 0 g / 100g
  • Lipides : 3.6 g / 100g
  • Sucres : 0 g / 100g
  • Fibres : 0 g / 100g
  • Acides Gras Saturés : 1 g / 100g
  • Portion : 150 g

Résultats du Calculateur :

  • Points pour 100g : Environ 4 points
  • Points Totaux (pour 150g) : Environ 6 points
  • Calories par Point : Environ 41 kcal/pt

Interprétation : Le blanc de poulet est une excellente source de protéines et relativement faible en calories et lipides. Il obtient donc un faible nombre de points, ce qui en fait un aliment idéal pour un régime Weight Watchers, permettant de consommer une portion généreuse pour un coût en points raisonnable.

Exemple 2 : Salade de Fruits Frais

Données :

  • Nom : Salade de Fruits Frais (Mélange : Pomme, Banane, Orange)
  • Calories : 70 kcal / 100g
  • Protéines : 0.8 g / 100g
  • Glucides : 17 g / 100g
  • Lipides : 0.2 g / 100g
  • Sucres : 12 g / 100g
  • Fibres : 2.5 g / 100g
  • Acides Gras Saturés : 0.05 g / 100g
  • Portion : 200 g

Résultats du Calculateur :

  • Points pour 100g : Environ 3 points
  • Points Totaux (pour 200g) : Environ 6 points
  • Calories par Point : Environ 23 kcal/pt

Interprétation : Bien que les fruits soient considérés comme sains, leur teneur naturelle en sucres contribue au calcul des points. Cette salade de fruits obtient un nombre de points modéré. Elle est plus riche en points que le poulet en proportion égale, principalement à cause des sucres, mais reste un choix intéressant grâce à ses fibres et vitamines. La portion de 200g représente donc 6 points.

Comment Utiliser Ce Calculateur de Points Weight Watchers Gratuit

Notre calculateur est conçu pour être simple et intuitif. Suivez ces étapes pour obtenir vos résultats :

  1. Entrez le Nom de l'Aliment : Dans le champ "Nom de l'aliment", tapez le nom de ce que vous souhaitez calculer (ex: "Yaourt nature", "Saumon"). Cela aide à identifier le résultat.
  2. Renseignez les Valeurs Nutritionnelles : Pour chaque champ (Calories, Protéines, Glucides, Lipides, Sucres, Fibres, Acides Gras Saturés), entrez la quantité correspondante pour 100 grammes ou 100 millilitres de l'aliment. Ces informations se trouvent généralement sur l'emballage du produit ou peuvent être recherchées en ligne.
  3. Spécifiez la Portion : Indiquez la taille de la portion que vous consommez réellement, en grammes (g) ou en millilitres (ml).
  4. Cliquez sur "Calculer les Points" : Le calculateur affichera instantanément :
    • Le résultat principal : Points Totaux pour votre portion.
    • Les valeurs intermédiaires : Points pour 100g/ml, Calories par Point.
    • Les hypothèses utilisées : Nom de l'aliment, taille de la portion.
  5. Interprétez les Résultats : Le nombre de points vous donne une idée de la densité calorique et nutritionnelle de votre portion. Un nombre de points plus bas indique généralement un choix plus avantageux dans le cadre du programme WW.
  6. Utilisez les Boutons :
    • Copier les Résultats : Utile pour sauvegarder ou partager vos calculs.
    • Réinitialiser : Pour effacer les champs et commencer un nouveau calcul.

Conseils pour la prise de décision : Utilisez les points calculés pour comparer différents aliments. Privilégiez ceux qui offrent plus de satiété (protéines, fibres) pour un nombre de points donné. Ce calculateur est un excellent outil pour faire des choix éclairés au quotidien et rester aligné avec vos objectifs de bien-être.

Facteurs Clés Affectant les Résultats du Calcul des Points

Plusieurs éléments influencent le nombre de points attribués à un aliment et, par conséquent, l'impact sur votre régime :

  1. Teneur en Lipides : Les matières grasses sont très denses en calories (9 kcal/g contre 4 kcal/g pour les protéines et glucides). Elles augmentent significativement le nombre de points, encourageant la modération.
  2. Teneur en Protéines : Les protéines sont essentielles et favorisent la satiété. Le système WW les valorise en réduisant le nombre de points, récompensant ainsi les aliments riches en protéines.
  3. Teneur en Sucres : Les sucres ajoutés ou naturels augmentent la teneur en glucides et sont souvent un facteur clé dans l'augmentation des points, car ils apportent de l'énergie rapidement mais peu de satiété durable.
  4. Fibres Alimentaires : Les fibres sont bénéfiques pour la digestion et la satiété. Elles sont récompensées par une réduction des points, favorisant la consommation de grains entiers, fruits et légumes.
  5. Densité Calorique Globale : Même si d'autres nutriments sont pris en compte, le total calorique reste un contributeur majeur au score de points. Les aliments très caloriques auront naturellement plus de points.
  6. Transformation des Aliments : Les aliments ultra-transformés peuvent avoir des profils nutritionnels moins favorables (plus de sucres, de graisses saturées, moins de fibres) et donc un score de points plus élevé que leur équivalent brut ou moins transformé.
  7. Version du Programme WW : Les facteurs de pondération et les seuils exacts ont changé entre les anciennes versions (ProPoints) et les plus récentes (SmartPoints), affectant les scores finaux. Notre calculateur utilise une logique générale inspirée des versions récentes.

Foire Aux Questions (FAQ)

Comment puis-je trouver les informations nutritionnelles pour un aliment ?

Vous pouvez généralement trouver ces informations sur l'emballage du produit (tableau nutritionnel). Pour les aliments frais ou non emballés, des bases de données nutritionnelles en ligne (comme Ciqual en France) ou des applications dédiées peuvent être très utiles.

Le calculateur est-il compatible avec toutes les versions de Weight Watchers ?

Ce calculateur est basé sur les principes généraux des systèmes de points WW (ProPoints/SmartPoints) les plus récents. Les facteurs exacts peuvent légèrement varier selon la version spécifique du programme que vous suivez. Il offre une excellente estimation.

Pourquoi les fruits et légumes ont-ils des points ?

Même les fruits et légumes contiennent des calories et des sucres naturels. Bien qu'ils soient très nutritifs et faibles en points par rapport à d'autres aliments, ils ne sont pas toujours à zéro point, surtout s'ils sont riches en sucres (comme les bananes ou les dattes) ou consommés en très grande quantité.

Que faire si je ne connais pas la quantité exacte de "sucres" ou de "fibres" ?

Si l'information n'est pas disponible, vous pouvez essayer de la rechercher en ligne pour votre aliment spécifique. Si cela reste impossible, vous pouvez laisser le champ à 0 ou utiliser une estimation basée sur des aliments similaires. Gardez à l'esprit que cela affectera la précision du calcul.

Les points calculés sont-ils les mêmes que ceux de l'application officielle WW ?

Notre calculateur fournit une estimation très proche basée sur les formules publiques et les principes du programme. L'application officielle WW peut avoir des ajustements propriétaires ou des bases de données plus exhaustives qui pourraient entraîner de légères différences.

Puis-je calculer les points d'un plat préparé ?

Oui, si vous avez accès aux informations nutritionnelles complètes pour 100g du plat préparé. Pour les plats maison, il est plus difficile d'obtenir une valeur précise sans connaître les quantités exactes de chaque ingrédient et leur profil nutritionnel.

Comment utiliser les points calculés pour planifier mes repas ?

Utilisez le calculateur pour comparer les points de différents aliments ou repas. Essayez de construire vos journées en respectant votre budget de points quotidien tout en privilégiant des aliments nutritifs et rassasiants.

Qu'est-ce que le ratio Calories/Point ?

Ce ratio indique combien de calories vous consommez pour chaque point WW. Un ratio plus élevé (plus de calories par point) suggère un aliment plus dense en énergie mais potentiellement moins "remplissant" par point. Un ratio plus bas est généralement préférable.
var chartInstance = null; // Global variable to hold the chart instance function validateInput(id, errorId, minValue, maxValue, isRequired = true) { var inputElement = document.getElementById(id); var errorElement = document.getElementById(errorId); var value = inputElement.value.trim(); var numValue = parseFloat(value); errorElement.textContent = "; // Clear previous error if (isRequired && value === ") { errorElement.textContent = 'Ce champ est requis.'; return false; } if (value !== " && isNaN(numValue)) { errorElement.textContent = 'Veuillez entrer un nombre valide.'; return false; } if (numValue maxValue) { errorElement.textContent = 'La valeur est trop élevée.'; return false; } return true; } function calculatePoints() { var isValid = true; // Validate all inputs isValid &= validateInput('foodName', 'foodNameError'); isValid &= validateInput('calories', 'caloriesError', 0); isValid &= validateInput('protein', 'proteinError', 0); isValid &= validateInput('carbs', 'carbsError', 0); isValid &= validateInput('fat', 'fatError', 0); isValid &= validateInput('sugar', 'sugarError', 0); isValid &= validateInput('fiber', 'fiberError', 0); isValid &= validateInput('saturatedFat', 'saturatedFatError', 0); isValid &= validateInput('portionSize', 'portionSizeError', 1); if (!isValid) { return; // Stop calculation if any input is invalid } var foodName = document.getElementById('foodName').value.trim(); var calories = parseFloat(document.getElementById('calories').value); var protein = parseFloat(document.getElementById('protein').value); var carbs = parseFloat(document.getElementById('carbs').value); var fat = parseFloat(document.getElementById('fat').value); var sugar = parseFloat(document.getElementById('sugar').value); var fiber = parseFloat(document.getElementById('fiber').value); var saturatedFat = parseFloat(document.getElementById('saturatedFat').value); var portionSize = parseFloat(document.getElementById('portionSize').value); // — WW Point Calculation Logic (Simplified SmartPoints/ProPoints inspired) — // This is a representative formula. Actual WW formulas are proprietary and complex. // Factors: Calories, Protein, Fat, Sugar, Fiber, Saturated Fat // General idea: Penalize calories, fat, sugar; Reward protein, fiber. var pointsPer100g = 0; var caloriesPer100g = calories; var proteinPer100g = protein; var carbsPer100g = carbs; var fatPer100g = fat; var sugarPer100g = sugar; var fiberPer100g = fiber; var satFatPer100g = saturatedFat; // Simplified calculation based on common factors // These factors are illustrative and may not match exact WW proprietary values var factorCalories = 0.4; var factorFat = 2.0; var factorProtein = 1.5; var factorCarbs = 0.8; // Can be adjusted based on sugar/fiber var factorSugar = 0.5; // Added factor for sugar var factorFiber = 0.3; // Added factor for fiber var factorSatFat = 1.0; // Additional penalty for saturated fat // Base points from calories and fat pointsPer100g = (factorCalories * caloriesPer100g) + (factorFat * fatPer100g); // Adjustments based on protein, carbs, sugar, fiber, sat fat pointsPer100g -= (factorProtein * proteinPer100g); pointsPer100g += (factorSugar * sugarPer100g); pointsPer100g -= (factorFiber * fiberPer100g); pointsPer100g += (factorSatFat * satFatPer100g); // Apply a general carb factor (can be complex, simplified here) // If carbs are high and fiber low, it might increase points. // If carbs are mostly fiber, it should decrease points. // For simplicity, let's assume carbs contribute positively if not offset by fiber. // A more nuanced approach would be needed for exact WW formula. // Let's refine: If sugar is high, it adds points. If fiber is high, it subtracts. // The base formula already includes protein and fat. Let's adjust based on sugar/fiber balance. // Refined logic: // Points = (0.4 * Calories) + (2 * Fat) – (1.5 * Protein) // Then adjust for sugar and fiber. // Let's use a common approach where sugar adds points and fiber subtracts. // And saturated fat adds more penalty. var basePoints = (0.4 * calories) + (2 * fat); var proteinAdjustment = (1.5 * protein); var sugarAdjustment = (0.5 * sugar); // Example factor for sugar var fiberAdjustment = (0.3 * fiber); // Example factor for fiber var satFatAdjustment = (1.0 * saturatedFat); // Additional penalty pointsPer100g = basePoints – proteinAdjustment + sugarAdjustment – fiberAdjustment + satFatAdjustment; // Ensure points don't go below a minimum (e.g., 0 or 1 for most foods) // WW often has a minimum point value for foods. if (pointsPer100g 0 && pointsPer100g > 0) ? (calories / pointsPer100g) : 0; caloriesPerPoint = Math.round(caloriesPerPoint * 10) / 10; // Update results display document.getElementById('main-result').textContent = totalPoints + (totalPoints === 1 ? ' point' : ' points'); document.getElementById('pointsPer100g').textContent = 'Points pour 100g : ' + pointsPer100g; document.getElementById('totalPoints').textContent = 'Points Totaux (portion) : ' + totalPoints; document.getElementById('caloriesPerPoint').textContent = 'Calories par Point : ' + (isNaN(caloriesPerPoint) ? '–' : caloriesPerPoint + ' kcal/pt'); document.getElementById('assumptionFoodName').textContent = 'Aliment : ' + (foodName || '–'); document.getElementById('assumptionPortion').textContent = 'Portion : ' + portionSize + ' g/ml'; document.getElementById('assumptionFormula').textContent = 'Formule : WW (SmartPoints/ProPoints inspiré)'; // Update table document.getElementById('tableCalories').textContent = calories; document.getElementById('tableProtein').textContent = protein; document.getElementById('tableCarbs').textContent = carbs; document.getElementById('tableFat').textContent = fat; document.getElementById('tableSugar').textContent = sugar; document.getElementById('tableFiber').textContent = fiber; document.getElementById('tableSaturatedFat').textContent = saturatedFat; // Calculate points contribution per nutrient for the table (for 100g) // This is illustrative, showing how each nutrient *contributes* to the pointsPer100g var pointsFromCalories = Math.round((factorCalories * calories) * 10) / 10; var pointsFromFat = Math.round((factorFat * fat) * 10) / 10; var pointsFromProtein = Math.round((factorProtein * protein) * 10) / 10; var pointsFromSugar = Math.round((factorSugar * sugar) * 10) / 10; var pointsFromFiber = Math.round((factorFiber * fiber) * 10) / 10; var pointsFromSatFat = Math.round((factorSatFat * saturatedFat) * 10) / 10; document.getElementById('tablePointsCalories').textContent = pointsFromCalories > 0 ? '+' + pointsFromCalories : (pointsFromCalories 0 ? '+' + pointsFromFat : (pointsFromFat 0 ? '-' + pointsFromProtein : (pointsFromProtein 0 ? '+' + pointsFromSugar : (pointsFromSugar 0 ? '-' + pointsFromFiber : (pointsFromFiber 0 ? '+' + pointsFromSatFat : (pointsFromSatFat < 0 ? pointsFromSatFat : 0); // Update Chart updateChart(calories, protein, carbs, fat, sugar, fiber, saturatedFat); } function updateChart(calories, protein, carbs, fat, sugar, fiber, saturatedFat) { var ctx = document.getElementById('nutrientsChart').getContext('2d'); // Destroy previous chart instance if it exists if (chartInstance) { chartInstance.destroy(); } // Prepare data for chart (e.g., showing contribution to points or raw values) // Let's show raw nutrient values per 100g for simplicity and comparison var labels = ['Protéines', 'Glucides', 'Lipides', 'Sucres', 'Fibres', 'Acides Gras Sat.']; var dataValues = [protein, carbs, fat, sugar, fiber, saturatedFat]; // Assign colors to nutrients for better visualization var backgroundColors = [ 'rgba(40, 167, 69, 0.7)', // Protein (Green) 'rgba(255, 193, 7, 0.7)', // Carbs (Yellow) 'rgba(0, 123, 255, 0.7)', // Fat (Blue) 'rgba(220, 53, 69, 0.7)', // Sugar (Red) 'rgba(108, 117, 125, 0.7)',// Fiber (Gray) 'rgba(147, 10, 10, 0.7)' // Saturated Fat (Dark Red) ]; var borderColors = [ 'rgba(40, 167, 69, 1)', 'rgba(255, 193, 7, 1)', 'rgba(0, 123, 255, 1)', 'rgba(220, 53, 69, 1)', 'rgba(108, 117, 125, 1)', 'rgba(147, 10, 10, 1)' ]; chartInstance = new Chart(ctx, { type: 'bar', // Use bar chart for nutrient comparison data: { labels: labels, datasets: [{ label: 'Quantité (g) pour 100g/ml', data: dataValues, backgroundColor: backgroundColors, borderColor: borderColors, borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, title: { display: true, text: 'Grammes (g)' } } }, plugins: { legend: { display: false // Hide legend as labels are on the axis }, title: { display: true, text: 'Profil Nutritionnel pour 100g/ml' } } } }); } function copyResults() { var mainResult = document.getElementById('main-result').textContent; var pointsPer100g = document.getElementById('pointsPer100g').textContent; var totalPoints = document.getElementById('totalPoints').textContent; var caloriesPerPoint = document.getElementById('caloriesPerPoint').textContent; var assumptionFoodName = document.getElementById('assumptionFoodName').textContent; var assumptionPortion = document.getElementById('assumptionPortion').textContent; var assumptionFormula = document.getElementById('assumptionFormula').textContent; var resultsText = "— Résultats Calcul Points WW —\n\n"; resultsText += mainResult + "\n"; resultsText += pointsPer100g + "\n"; resultsText += totalPoints + "\n"; resultsText += caloriesPerPoint + "\n\n"; resultsText += assumptionFoodName + "\n"; resultsText += assumptionPortion + "\n"; resultsText += assumptionFormula + "\n"; // Use navigator.clipboard for modern browsers if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(resultsText).then(function() { alert('Résultats copiés dans le presse-papiers !'); }).catch(function(err) { console.error('Erreur lors de la copie : ', err); fallbackCopyTextToClipboard(resultsText); }); } else { // Fallback for older browsers or insecure contexts fallbackCopyTextToClipboard(resultsText); } } function fallbackCopyTextToClipboard(text) { var textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; // Avoid scrolling to bottom textArea.style.top = 0; textArea.style.left = 0; textArea.style.width = '2em'; textArea.style.height = '2em'; textArea.style.padding = '0'; textArea.style.border = 'none'; textArea.style.outline = 'none'; textArea.style.boxShadow = 'none'; textArea.style.background = 'transparent'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'Résultats copiés !' : 'La copie a échoué.'; alert(msg); } catch (err) { console.error('Fallback: Oops, unable to copy', err); alert('Impossible de copier les résultats. Veuillez les copier manuellement.'); } document.body.removeChild(textArea); } function resetCalculator() { document.getElementById('foodName').value = 'Exemple Aliment'; document.getElementById('calories').value = 100; document.getElementById('protein').value = 10; document.getElementById('carbs').value = 15; document.getElementById('fat').value = 5; document.getElementById('sugar').value = 5; document.getElementById('fiber').value = 2; document.getElementById('saturatedFat').value = 1; document.getElementById('portionSize').value = 100; // Clear error messages document.getElementById('foodNameError').textContent = ''; document.getElementById('caloriesError').textContent = ''; document.getElementById('proteinError').textContent = ''; document.getElementById('carbsError').textContent = ''; document.getElementById('fatError').textContent = ''; document.getElementById('sugarError').textContent = ''; document.getElementById('fiberError').textContent = ''; document.getElementById('saturatedFatError').textContent = ''; document.getElementById('portionSizeError').textContent = ''; // Reset results to default state document.getElementById('main-result').textContent = '–'; document.getElementById('pointsPer100g').textContent = 'Points pour 100g : –'; document.getElementById('totalPoints').textContent = 'Points Totaux (portion) : –'; document.getElementById('caloriesPerPoint').textContent = 'Calories par Point : — kcal/pt'; document.getElementById('assumptionFoodName').textContent = 'Aliment : –'; document.getElementById('assumptionPortion').textContent = 'Portion : — g/ml'; document.getElementById('assumptionFormula').textContent = 'Formule : WW (SmartPoints/ProPoints inspiré)'; // Reset table document.getElementById('tableCalories').textContent = '–'; document.getElementById('tableProtein').textContent = '–'; document.getElementById('tableCarbs').textContent = '–'; document.getElementById('tableFat').textContent = '–'; document.getElementById('tableSugar').textContent = '–'; document.getElementById('tableFiber').textContent = '–'; document.getElementById('tableSaturatedFat').textContent = '–'; document.getElementById('tablePointsCalories').textContent = '–'; document.getElementById('tablePointsFat').textContent = '–'; document.getElementById('tablePointsProtein').textContent = '–'; document.getElementById('tablePointsSugar').textContent = '–'; document.getElementById('tablePointsFiber').textContent = '–'; document.getElementById('tablePointsSaturatedFat').textContent = '–'; // Reset chart data if (chartInstance) { chartInstance.destroy(); chartInstance = null; } var canvas = document.getElementById('nutrientsChart'); var ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear canvas // Optionally, call calculatePoints() to show default calculation for reset values calculatePoints(); } // Add event listeners for real-time updates var inputs = document.querySelectorAll('.loan-calc-container input[type="number"], .loan-calc-container input[type="text"]'); for (var i = 0; i < inputs.length; i++) { inputs[i].addEventListener('input', function() { // Basic validation on input change to clear errors quickly var id = this.id; var errorId = id + 'Error'; var value = this.value.trim(); var numValue = parseFloat(value); if (value === '' || isNaN(numValue) || numValue < 0 || (id === 'portionSize' && numValue < 1)) { // Don't auto-calculate on every keystroke if invalid, wait for button click or full valid input } else { calculatePoints(); // Recalculate on valid input change } }); inputs[i].addEventListener('blur', function() { // Perform full validation on blur var id = this.id; var errorId = id + 'Error'; var minValue = 0; if (id === 'portionSize') minValue = 1; validateInput(id, errorId, minValue); }); } // Initial calculation on page load with default values document.addEventListener('DOMContentLoaded', function() { calculatePoints(); // Initialize FAQ toggles var faqQuestions = document.querySelectorAll('.faq-question'); for (var i = 0; i < faqQuestions.length; i++) { faqQuestions[i].addEventListener('click', function() { var faqItem = this.parentElement; faqItem.classList.toggle('open'); }); } }); // Chart.js library is required for the chart to work. // In a real WordPress environment, you would enqueue this script properly. // For this standalone HTML, assume Chart.js is available globally. // If running this locally, include Chart.js via CDN: // // Make sure to add this line before the closing tag or at the end of .

Leave a Comment