Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/* ============================================================================================== Zutatenumrechner 0.43 von Finn Pauls ([[Benutzer:Finn]]) ============================================================================================== */ addOnloadHook( function () { /* Stylesheet einbinden Klassen: zum_aktiviert und zum_deaktiviert*/ importStylesheet('Benutzer:Finn/zutatenrechner.css'); document.getElementsByTagName("table")[0].innerHTML = document.getElementsByTagName("table")[0].innerHTML.replace(/<td>\s*Rezeptmenge\sfür\:\s*<\/td><td>\s*(\d+)–(\d+)\s([A-Za-zäÄöÖüÜß]+)/g, '<td> Rezeptmenge für: </td><td><span id="zum_print" class="zum_printonly">$1</span><input class="zum_noprint" style="display:none;" id="zum_input" type="text" size="4" maxlength="5" value="$1" onkeydown="javascript:enter_als_ok(event)" onchange="javascript:bis_menge_neu();">–<span id="zum_bis_menge">$2</span> <span id="zum_mengenart">$3</span><button class="zum_noprint" style="display:none;" onmouseup="javascript:aktualisieren();">OK</button>'); // Eingabefeld und Buttons einfügen. Das Inputfeld "zum_input" hat die Grundanzahl als value. document.getElementsByTagName("table")[0].innerHTML = document.getElementsByTagName("table")[0].innerHTML.replace(/<td>\s*Rezeptmenge\sfür\:\s*<\/td><td>\s*(\d+)\s([A-Za-zäÄöÖüÜß]+)/g, '<td> Rezeptmenge für: </td><td><span id="zum_print" class="zum_printonly">$1</span><input id="zum_input" class="zum_noprint" style="display:none;" type="text" size="4" maxlength="5" onkeydown="javascript:enter_als_ok(event)" value="$1"> <span id="zum_mengenart">$2</span><button class="zum_noprint" style="display:none;" onmouseup="javascript:aktualisieren();">OK</button>'); // Diese Anzahl wird in der Variable 'alte_anzahl' gespeichert. alte_anzahl = document.getElementById("zum_input").value; if(document.getElementById('zum_bis_menge')) { bis_menge = document.getElementById('zum_bis_menge').innerHTML/alte_anzahl; } // Funktion verpackt die Zutatenliste in einem <span> mit der id 'zum_zutatenliste'. Die Zutatenliste wird zustälich in der Variable 'zutatenliste' gespeichert. zutatenliste = zutatenliste_in_span(); // Regulärer Ausdruck zur Erkennung der Mengenanzahlen der Zutaten zutaten_regex = /(<.*?>|(\d*)\s*<sup>(\d+)<\/sup>[//]<sub>(\d+)<\/sub>|(\d+(,\d+)?))/g; zutaten_zahlen = new Array(); zeilen = zutatenliste.split("\n"); // Der Zutatenumrechner geht davon aus, dass die Zutatenmenge immer als erstes genannt wird und danach auftretende Zahlen nicht mit umgerechnet werden sollen // Wie z.B. der Mehltyp oder Prozentangaben // Dazu wird jede Zeile zwischen links und rechts unterschieden. Zum Teilen wird der erste auftretende Buchstabe genutzt. links_und_rechts = new Array(); links_und_rechts[0] = new Array(); //links, aktiviert links_und_rechts[1] = new Array(); //rechts, deaktiviert buchstabe_regex = /[A-Za-z]/g; open_regex = /</g; close_regex = />/g; var keinelement = true; var j = 0; var k = 1; var n = 0; // Jedes Zeiche wird einzelnd überprüft. Die Buchstaben innerhalb von Elementen z.B. <em> wrden ignoriert. while(zeilen[k]) { while(!(keinelement && buchstabe_regex.test(zeilen[k][n]))) { if(open_regex.test(zeilen[k][n])) { keinelement = false; } else if (close_regex.test(zeilen[k][n])) { keinelement = true; } n++; } links_und_rechts[0][k] = zeilen[k].substr(0,n); // 0 steht für links links_und_rechts[1][k] = zeilen[k].substr(n); // 1 steht für rechts n = 0; k++; } k = 1; zutatenliste = ""; var speicher = ""; while(links_und_rechts[0][k] || links_und_rechts[1][k]) { start = 0; // Zahlen auf der linken Seite mit aktivierten Schaltern austatten. while(inhalt = zutaten_regex.exec(links_und_rechts[0][k])){ if(!isNaN(inhalt[1].replace(/,/g,".")) || !isNaN(inhalt[3])) { j++; if(inhalt[1]==inhalt[5]) { neu = inhalt[1].replace(/,/g,"."); } else if(inhalt[2]){ neu = parseFloat(inhalt[2])+inhalt[3]/inhalt[4]; } else { neu = inhalt[3]/inhalt[4]; } zutaten_zahlen[j] = neu/alte_anzahl; neu = neu.toString().replace(/\./g,","); speicher += links_und_rechts[0][k].substring(start, inhalt.index)+"<a href='#' onClick='javascript:schalter(this)' id='zum_zutat_" + j + "'class='zum_aktiviert'>"+neu+"</a>"; start = inhalt.index+inhalt[0].length; } } speicher += links_und_rechts[0][k].substring(start); start = 0; // Zahlen auf der rechten Seite mit deaktivierten Schaltern austatten. while(inhalt = zutaten_regex.exec(links_und_rechts[1][k])){ if(!isNaN(inhalt[1].replace(/,/g,".")) || !isNaN(inhalt[3])) { j++; if(inhalt[1]==inhalt[5]) { neu = inhalt[1].replace(/,/g,"."); } else if(inhalt[2]){ neu = parseFloat(inhalt[2])+inhalt[3]/inhalt[4]; } else { neu = inhalt[3]/inhalt[4]; } zutaten_zahlen[j] = neu/alte_anzahl; neu = neu.toString().replace(/\./g,","); speicher += links_und_rechts[1][k].substring(start, inhalt.index)+"<a href='#' onClick='javascript:schalter(this)' id='zum_zutat_" + j + "'class='zum_deaktiviert'>" + neu + "</a>"; start = inhalt.index+inhalt[0].length; } } speicher += links_und_rechts[1][k].substring(start); speicher += "\n"; k++; } document.getElementById('zum_zutatenliste').innerHTML = speicher; // Schalterveränderungen an Dokument }) function schalter(element) { if(element.className == 'zum_aktiviert') { element.className = 'zum_deaktiviert'; } else { element.className = 'zum_aktiviert'; aktualisieren(); } } // Mengenarten als Einzahl und Mehrzahl var mengen = new Object(); mengen["Person"] = "Personen"; mengen["Glas"] = "Gläser"; mengen["Portion"] = "Portionen"; mengen["Backblech"] = "Backbleche"; function mengenname(mengenart, anzahl) { if(anzahl!=1) { for (var einzahl in mengen) { if (mengenart == einzahl) return mengen[einzahl]; } } else { for (var einzahl in mengen) { if (mengenart == mengen[einzahl] ) return einzahl; } } } function aktualisieren() { // Eingabeüberprüfung if(isNaN(document.getElementById("zum_input").value)) { alert('Fehler: Menge ist keine Zahl.'); } else if(document.getElementById("zum_input").value<=0) { alert('Fehler: Menge ist nicht positiv.'); } else { neue_anzahl = document.getElementById("zum_input").value; document.getElementById("zum_print").innerHTML = neue_anzahl; i = 1; while(document.getElementById("zum_zutat_"+i)) { menge = document.getElementById("zum_zutat_"+i); if(menge.className=="zum_aktiviert") { menge.innerHTML = Math.round(zutaten_zahlen[i]*neue_anzahl*100)/100; menge.innerHTML = menge.innerHTML.replace(/\./g,","); } i++; } if (mengenname(document.getElementById('zum_mengenart').innerHTML, neue_anzahl)) document.getElementById('zum_mengenart').innerHTML = mengenname(document.getElementById('zum_mengenart').innerHTML, neue_anzahl); } } function bis_menge_neu () { if(isNaN(document.getElementById("zum_input").value)) { document.getElementById('zum_bis_menge').innerHTML = "?"; } else if(document.getElementById("zum_input").value<=0) { document.getElementById('zum_bis_menge').innerHTML = "?"; } else { neue_anzahl = document.getElementById("zum_input").value; document.getElementById('zum_bis_menge').innerHTML = Math.round(bis_menge*neue_anzahl); } } function zutatenliste_in_span () { // Der Quelltext des Artikels wird in der Variable 'bodycontent' gespeichert. bodycontent = document.getElementById('bodyContent').innerHTML; // Regulärer Ausdruck, um die Überschrift "Zutaten" zu finden. headline_regex = /Zutaten\s<\/span><\/h2>/g; // Überschrift suchen und Position in 'headline' speichern. headline = headline_regex.exec(bodycontent); // Bereich vor der Überschrift in 'rezept_anfang' abspeichern. rezept_anfang = bodycontent.substring(0,headline.index+20); // Bereich nach der Überschrift 'Zutaten' in 'rezept_ende' anspeichern. rezept_ende = bodycontent.substring(headline.index+20); // Regulärer Ausdruck, um das Ende des Zutatenabschnitts zu finden. endezutaten_regex = /<a\sname="(Kochgeschirr|Zubereitung)"\sid="(Kochgeschirr|Zubereitung)"><\/a>/g; endezutaten = endezutaten_regex.exec(rezept_ende); // Den Zutatenabschnitt aus 'rezept_ende' extrahieren und in 'rezept_zutaten' abspeichern. rezept_zutaten = rezept_ende.substring(0,endezutaten.index); // 'rezept_ende' wird nun der Teil nach der Zutatenliste. 'rezept_anfang', 'rezept_zutaten' und 'rezept_ende' ergeben damit den ganzen bodycontent. rezept_ende = rezept_ende.substring(endezutaten.index); // Nun wird wieder alles zusammengesetzt und die Zutatenliste in dem Span verpackt. document.getElementById('bodyContent').innerHTML = rezept_anfang + "<span id='zum_zutatenliste'>" + rezept_zutaten + "</span>" + rezept_ende; return rezept_zutaten; } function enter_als_ok(e) { var key=e.keyCode || e.which; if (key==13){ aktualisieren(); } }