Files
SWE/webseite/assets/js/formula.js

158 lines
6.0 KiB
JavaScript

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();
}