function createFormula(text = "") { const formulaInputs = document.querySelector('#formulaInputs'); const formulaElement = document.createElement('div'); formulaElement.classList.add('input-formula', "pb-10"); formulaElement.id = "f-" + crypto.randomUUID(); const textElement = document.createElement('textarea'); textElement.type = 'text'; textElement.classList.add('input-text'); textElement.classList.add("w-full", "px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400"); textElement.rows = 3; textElement.placeholder = "Aufgabentext"; textElement.innerText = text; textElement.onchange = updateFormulaText; formulaElement.appendChild(textElement); const variableSection = document.createElement('div'); variableSection.classList.add("input-variable-section"); formulaElement.appendChild(variableSection) const buttonRow = document.createElement('div'); buttonRow.classList.add("flex", "flow-root"); const removeFormulaButton = document.createElement('button'); removeFormulaButton.type = "button"; removeFormulaButton.innerText = "Aufgabe löschen"; removeFormulaButton.classList.add("px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400"); removeFormulaButton.onclick = () => { formulaElement.remove(); }; buttonRow.appendChild(removeFormulaButton); const addVariableButton = document.createElement('button'); addVariableButton.type = "button"; addVariableButton.innerText = "+"; addVariableButton.classList.add("w-2/12", "md:w-1/12", "float-right", "px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400"); addVariableButton.onclick = () => { createVariable(formulaElement.id); }; buttonRow.appendChild(addVariableButton); formulaElement.appendChild(buttonRow); formulaInputs.appendChild(formulaElement); return formulaElement.id; } function createVariable(formulaUID, variableText = "", valueText = "") { const element = document.querySelector("#" + formulaUID).querySelector(".input-variable-section"); const variableValueElement = document.createElement('div'); variableValueElement.classList.add('input-variables'); const variableElement = document.createElement('input'); variableElement.type = 'text'; variableElement.classList.add('input-variable'); variableElement.classList.add("w-5/12", "md:w-6/12", "px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400") variableElement.value = variableText; variableElement.placeholder = "Variable"; variableElement.onchange = updateFormulaText; variableValueElement.appendChild(variableElement); const valueElement = document.createElement('input'); valueElement.type = 'text'; valueElement.classList.add('input-value'); valueElement.classList.add("w-5/12", "md:w-5/12", "px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400") valueElement.value = valueText; valueElement.placeholder = "Richtiger Wert"; valueElement.onchange = updateFormulaText; variableValueElement.appendChild(valueElement); const removeButton = document.createElement('button'); removeButton.type = "button"; removeButton.innerText = "-" removeButton.classList.add("w-2/12", "md:w-1/12", "px-4", "py-3", "border", "rounded-lg", "focus:outline-none", "focus:ring-2", "focus:ring-blue-500", "text-lg", "enabled:hover:border-gray-400"); removeButton.onclick = () => { variableValueElement.remove(); updateFormulaText(); }; variableValueElement.appendChild(removeButton); element.appendChild(variableValueElement); } function createFormulaWithVariable() { const uuid = createFormula(); createVariable(uuid); } function createFormulasFromString(string) { const taskStrings = string.split(";;;;"); taskStrings.forEach((taskString) => { const elements = taskString.split(";;"); if(elements.length < 2) { return; } const text = elements[0]; const variables = elements.slice(1, elements.length); const uid = createFormula(text); variables.forEach((variableValuePair) => { const arr = variableValuePair.split("::"); if(arr.length !== 2) { return; } createVariable(uid, arr[0], arr[1]); }); }); } function getFormulasAsString() { const formulaInputs = document.querySelector('#formulaInputs'); let formulas = []; formulaInputs.querySelectorAll('.input-formula').forEach((formulaElement) => { const text = formulaElement.querySelector(".input-text").value; if(text.includes(";;")) { return; } let variables = []; formulaElement.querySelectorAll(".input-variables").forEach((variableValueElement) => { const variable = variableValueElement.querySelector(".input-variable"); const value = variableValueElement.querySelector(".input-value"); if(variable == null || value == null) { return; } if(variable.value.trim() === "" || value.value.trim() === "") { return; } if(variable.value.includes(";;") || variable.value.includes("::")) { return; } if(value.value.includes(";;") || value.value.includes("::")) { return; } variables.push(variable.value + "::" + value.value); }); formulas.push(text + ";;" + variables.join(";;")); }); return formulas.join(';;;;'); } function updateFormulaText() { document.querySelector('#formulas').value = getFormulasAsString(); }