Files
kartoffelsalat-rechner/js/main.js
2026-05-08 18:07:42 +02:00

286 lines
8.5 KiB
JavaScript

import Alpine from "https://unpkg.com/alpinejs@3.15.4/dist/module.esm.js";
window.Alpine = Alpine;
Alpine.data("daten", () => ({
zutaten: [
{ gruppe: "Grundzutaten" },
{ name: "Kartoffeln", einheit: "g", faktor: 200 },
{ name: "Nudeln", einheit: "g", faktor: 50 },
{ name: "Salatgurke", einheit: "x", faktor: 0.5, runde: 10 },
{ name: "Saure Gurke", einheit: "x", faktor: 2 },
{ name: "Mayonnaise", einheit: "g", faktor: 20 },
{ name: "Senf", einheit: " EL", faktor: 1.4 },
{ name: "Ketchup", einheit: " EL", faktor: 1.4 },
{ name: "Saure Sahne", einheit: "ml", faktor: 100 },
{ gruppe: "Früchte" },
{ name: "Birne", einheit: "x" },
{ name: "Apfel", einheit: "x" },
{ name: "Rote Beete", einheit: " Knolle/n" },
{ name: "Mandarine", einheit: "x" },
{ name: "Ananas", einheit: "g", faktor: 50 },
{ name: "Mango", einheit: "g", faktor: 50 },
{ gruppe: "Gemüse" },
{ name: "Rucola", einheit: "g", faktor: 150 },
{ name: "Kopfsalat", einheit: " Blätter" },
{ name: "Oliven", einheit: "g", faktor: 50 },
{ name: "Erbsen", einheit: "g", faktor: 50 },
{ name: "Tomaten (stückig)", einheit: "g", faktor: 200 },
{ name: "Paprika", einheit: "x" },
{ name: "Karotte", einheit: "x" },
{ gruppe: "Fleischanteil" },
{ name: "Fleischwurst", einheit: "g", faktor: 200 },
{ name: "Hackfleisch", einheit: "g", faktor: 250 },
{ name: "Mett", einheit: "g", faktor: 100 },
{ name: "Bratwurst", einheit: "x" },
{ name: "Hering", einheit: "g", faktor: 150 },
{ name: "Thunfisch", einheit: "g", faktor: 100 },
{ name: "Lachs", einheit: "g", faktor: 100 },
{ name: "Mehlwürmer" },
{ gruppe: "Milchprodukte" },
{ name: "Käse", einheit: "g", faktor: 100 },
{ name: "Sahne", einheit: "ml", faktor: 100 },
{ gruppe: "Special Gewürze" },
{ name: "Knoblauch", einheit: " Zehe/n" },
{ name: "Chili", einheit: " Scoville", faktor: 10_000 },
{ gruppe: "Sonstiges" },
{ name: "Champignons", einheit: "g", faktor: 100 },
{ name: "Eier", einheit: "x"},
{ name: "Zwiebeln", einheit: "g", faktor: 100 },
{ name: "Meeresfrüchte" },
{ name: "Spargel", einheit: " Stange/n" },
],
filter: "",
init() {
this.zutaten.forEach((z, index) => {
if (z.name) {
z.menge = 0;
z.id = index;
}
});
},
reset() {
this.filter = "";
for (let index = 0; index < this.zutaten.length; index++) {
const zutat = this.zutaten[index];
if (zutat.menge && zutat.menge > 0) {
zutat.menge = 0;
}
}
},
get zutaten_filter() {
if (this.filter.length == 0) {
return this.zutaten;
}
let filtered = this.zutaten.filter((z) => {
return (
z.gruppe ||
(z.name && z.name.toLowerCase().includes(this.filter.toLowerCase()))
);
});
return filtered;
},
menge(delta, id) {
let zutat = this.zutaten.find((z) => z.id == id);
zutat.menge = Math.max(0, Math.min(zutat.menge + delta, 10));
},
get rezept() {
let ausgabe = [];
for (let i = 0; i < this.zutaten.length; i++) {
const zutat = this.zutaten[i];
if (zutat.menge > 0 && zutat.einheit) {
let faktor = zutat.faktor ?? 1;
let runde = zutat.runde ?? 1;
ausgabe.push(
`${Math.round(zutat.menge * faktor * runde) / runde}${zutat.einheit} ${zutat.name}`,
);
}
}
return ausgabe;
},
get rezeptname() {
let zutaten = this.zutaten.reduce(
(a, v) => ({ ...a, [v.name]: v.menge }),
{},
);
let gesamt = Object.values(zutaten).reduce((a, b) => {
if (b) {
return a + b;
} else {
return a;
}
}, 0);
if (zutaten["Salatgurke"] >= 4 && zutaten["Senf"] >= 4 && gesamt < 15) {
return ["Senfgurken"];
}
if (zutaten["Karotten"] >= 4 && zutaten["Käse"]) {
return ["Karottenpommes"];
}
if (zutaten["Nudeln"] >= 1 && zutaten["Kartoffeln"] == 0) {
return ["Nudelsalat"];
}
if (
zutaten["Hackfleisch"] >= 2 &&
zutaten["Nudeln"] >= 3 &&
zutaten["Tomaten (stückig)"] >= 2
) {
return ["Spaghetti Bolognese"];
}
if (
zutaten["Ketchup"] >= 3 &&
zutaten["Mayonnaise"] >= 3 &&
zutaten["Kartoffeln"] >= 1
) {
return ["Pommes Rot-Weiß"];
}
if (
zutaten["Kopfsalat"] >= 3 &&
zutaten["Karotte"] >= 1 &&
zutaten["Paprika"] >= 1
) {
return ["Gemischter Salat", "etwas Schnittlauch und Petersilie"];
}
if (zutaten["Paprika"] >= 4 && zutaten["Hackfleisch"] >= 1) {
return ["Gefüllte Paprika"];
}
if (
zutaten["Bratwurst"] >= 3 &&
zutaten["Fleischwurst"] >= 1 &&
zutaten["Käse"] >= 2 &&
zutaten["Senf"] >= 1 &&
zutaten["Mayonnaise"] >= 1
) {
return ["Lecker Grillerchen"];
}
if (
zutaten["Karotte"] >= 1 &&
zutaten["Bratwurst"] >= 3 &&
zutaten["Kartoffeln"] >= 2 &&
zutaten["Knoblauch"] >= 5 &&
zutaten["Zwiebeln"] >= 2 &&
zutaten["Paprika"] >= 1
) {
return ["Gulasch"];
}
if (
(zutaten["Thunfisch"] >= 3 || zutaten["Hering"] >= 3) &&
zutaten["Zwiebeln"] >= 1 &&
zutaten["Chili"] >= 1 &&
zutaten["Sahne"] >= 2 &&
zutaten["Knoblauch"] >= 1
) {
return ["Fischsuppe"];
}
if (
zutaten["Kartoffeln"] >= 7 &&
zutaten["Zwiebeln"] >= 2 &&
zutaten["Salatgurke"] >= 2 &&
zutaten["Senf"] >= 2
) {
return ["Kartoffel-Gurken-Salat"];
}
if (
zutaten["Hackfleisch"] >= 7 &&
zutaten["Fleischwurst"] >= 2 &&
zutaten["Zwiebeln"] >= 3 &&
zutaten["Tomaten (stückig)"] >= 2 &&
zutaten["Paprika"] >= 2 &&
zutaten["Karotte"] >= 1
) {
return ["Soljanka"];
}
if (
zutaten["Salatgurke"] >= 2 &&
zutaten["Paprika"] >= 1 &&
zutaten["Oliven"] >= 4 &&
zutaten["Käse"] >= 1
) {
return ["Griechischer Salat", "ist als Käse Schafskäse zu empfehlen"];
}
if (
zutaten["Mett"] >= 10 &&
zutaten["Zwiebeln"] >= 3 &&
zutaten["Saure Gurke"] >= 2
) {
return ["Mett-Igel"];
}
if (
zutaten["Kartoffeln"] >= 3 &&
zutaten["Karotte"] >= 2 &&
zutaten["Bratwurst"] >= 2
) {
return ["Kartoffelsuppe", "Kräuter, Wiener statt Bratwurst"];
}
if (zutaten["Mett"] >= 5 && zutaten["Zwiebeln"] >= 2) {
return ["Metttorte"];
}
if (
zutaten["Mett"] >= 3 &&
zutaten["Zwiebeln"] >= 1 &&
zutaten["Oliven"] >= 1
) {
return ["Mettigel"];
}
if (
zutaten["Champignons"] >= 3 &&
zutaten["Nudeln"] >= 2 &&
zutaten["Zwiebeln"] >= 1 &&
zutaten["Käse"] >= 1 &&
zutaten["Knoblauch"] >= 1
) {
return ["Pilzpfanne mit Nudeln"];
}
if (
zutaten["Tomaten"] >= 5 &&
zutaten["Zwiebeln"] >= 1 &&
zutaten["Knoblauch"] >= 1
) {
return ["Tomaten-Bruscetta", "ein Baguette, Basilikum, Salz & Pfeffer"];
}
if (
zutaten["Paprika"] >= 3 &&
zutaten["Zwiebeln"] >= 1 &&
zutaten["Chili"] >= 1
) {
return ["Paprikasalat"];
}
if(zutaten["Kartoffeln"] >= 2 && zutaten["Zwiebeln"] >= 1) {
return ["Bratkartoffeln", "Kräuter, z.B. Schnittlauch oder Oregano"]
}
if(zutaten["Kartoffeln"] >= 5 && zutaten["Zwiebeln"] >= 1 && zutaten["Eier"] >= 2) {
return ["Kartoffelpuffer"];
}
if (zutaten["Zwiebeln"] >= 1 && zutaten["Tomaten"] >= 5 && zutaten["Eier"] >= 3) {
return ["Falsches Hirn"];
}
if(zutaten["Eier"] >= 7 && zutaten["Mayonnaise"] >= 2 && zutaten["Zwiebeln"] >= 1 && zutaten["Fleischwurst"] >= 1) {
return ["Omas Eiersalat"]
}
if(zutaten["Eier"] >= 7 && zutaten["Mayonnaise"] >= 2 && zutaten["Zwiebeln"] >= 1) {
return ["Mamas Eiersalat"]
}
if(zutaten["Eier"] >= 6 && zutaten["Mayonnaise"] >= 1 && zutaten["Zwiebeln"] >= 1) {
return ["Eiersalat"]
}
if(zutaten["Tomaten"] >= 5 && zutaten["Salatgurke"] >= 1 && zutaten["Paprika"] >= 2 && zutaten["Knoblauch"] >= 6) {
return ["Gazpacho"]
}
let allObst = [
"Birne",
"Apfel",
"Rote Beete",
"Mandarine",
"Ananas",
"Mango",
];
let obst = Object.entries(zutaten).filter((z) => allObst.includes(z[0]));
if (obst.length == allObst.length && obst.every((z) => z[1] >= 1)) {
return ["Obstsalat"];
}
if (zutaten["Apfel"] == 2 && gesamt == 2) {
return ["Bratapfel"];
}
return ["Kartoffelsalat"];
},
}));
Alpine.start();