document.addEventListener("DOMContentLoaded", (event) => { const recipes = document.querySelectorAll(".recipe"); for (const recipe of recipes) { recipe.checked = localStorage.getItem("kh1-synth-" + recipe.id) === "true" ?? false; update_synth_completions(recipe); recipe.addEventListener("input", function () { localStorage.setItem("kh1-synth-" + this.id, this.checked); update_synth_completions(this); calc_total_ingredients(); }); } const recipes_labels = document.querySelectorAll(".recipe-wrapper > label"); for (const label of recipes_labels) { label.addEventListener("mouseenter", function () { highlight_ingredients(this); }); } calc_total_ingredients(); }); function update_synth_completions(recipe) { if (recipe.checked) { recipe.parentElement.classList.add("complete"); } else { recipe.parentElement.classList.remove("complete"); } } function highlight_ingredients(label) { let mats = []; const ingredients = label.querySelectorAll("ul li"); const checkbox = label.parentElement.querySelectorAll(".recipe")[0]; const elems = document.querySelectorAll("#mats ul li"); if (checkbox.checked) { for (const elem of elems) { elem.style.color = "#fff"; } return; } for (const ingredient of ingredients) { const name = ingredient.dataset["synthItemName"]; mats.push(name); } for (const elem of elems) { const isCrossed = elem.style.textDecoration === "line-through"; if (isCrossed) { continue; } elem.style.color = "#fff"; for (const mat of mats) { if (elem.innerHTML.includes(mat)) { elem.style.color = "limegreen"; } } } } function calc_total_ingredients() { const needed = new Map(); const recipes = document.querySelectorAll(".recipe"); for (const recipe of recipes) { const isComplete = recipe.checked; if (isComplete) { continue; } const ingredients = recipe.parentElement.querySelectorAll("label ul li"); for (const ingredient of ingredients) { let name = ingredient.dataset["synthItemName"]; let amount = Number(ingredient.dataset["synthItemAmount"]); if (needed.has(name)) { let new_amount = Number(needed.get(name)) + amount; needed.set(name, new_amount); } else { needed.set(name, amount); } } } const sortedMap = new Map([...needed].sort((a, b) => b[1] - a[1])); // generating the new list with materials needed const matsList = document.getElementById("mats"); matsList.innerHTML = "