diff --git a/main.js b/main.js new file mode 100644 index 0000000000000000000000000000000000000000..d34694b4b3c32c0630b8330f1977042f3695c281 --- /dev/null +++ b/main.js @@ -0,0 +1,385 @@ +// When selecting main criteria, select all criteria +function toggleCriteria() { + var h1 = document.getElementById("h1"); + var checkBoxes = document.getElementsByClassName("h1"); + if (h1.checked == false) { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = false; + } + } else { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = true; + } + } + + var h2 = document.getElementById("h2"); + var checkBoxes = document.getElementsByClassName("h2"); + if (h2.checked == false) { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = false; + } + } else { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = true; + } + } + + var h3 = document.getElementById("h3"); + var checkBoxes = document.getElementsByClassName("h3"); + if (h3.checked == false) { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = false; + } + } else { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = true; + } + } + + var h4 = document.getElementById("h4"); + var checkBoxes = document.getElementsByClassName("h4"); + if (h4.checked == false) { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = false; + } + } else { + for (let i = 0; i < checkBoxes.length; i++) { + checkBoxes[i].checked = true; + } + } + + getResults(); +} + +// Set maincriteria to true/false if all criterias are selected/one or more deselected +function criteriaOnChange1() { + var checkBoxes = document.getElementsByClassName("h1"); + var checked = 0; + + for (let i = 0; i < checkBoxes.length; i++) { + if (checkBoxes[i].checked) { + checked++; + } + } + + if (checked == 2) { + var h1 = document.getElementById("h1"); + h1.checked = true; + } else { + var h1 = document.getElementById("h1"); + h1.checked = false; + } + + getResults(); +} + +function criteriaOnChange2() { + var checkBoxes = document.getElementsByClassName("h2"); + var checked = 0; + + for (let i = 0; i < checkBoxes.length; i++) { + if (checkBoxes[i].checked) { + checked++; + } + } + + if (checked == 5) { + var h2 = document.getElementById("h2"); + h2.checked = true; + } else { + var h2 = document.getElementById("h2"); + h2.checked = false; + } + getResults(); +} + +function criteriaOnChange3() { + var checkBoxes = document.getElementsByClassName("h3"); + var checked = 0; + + for (let i = 0; i < checkBoxes.length; i++) { + if (checkBoxes[i].checked) { + checked++; + } + } + + if (checked == 3) { + var h3 = document.getElementById("h3"); + h3.checked = true; + } else { + var h3 = document.getElementById("h3"); + h3.checked = false; + } + getResults(); +} + +function criteriaOnChange4() { + var checkBoxes = document.getElementsByClassName("h4"); + var checked = 0; + + for (let i = 0; i < checkBoxes.length; i++) { + if (checkBoxes[i].checked) { + checked++; + } + } + + if (checked == 3) { + var h4 = document.getElementById("h4"); + h4.checked = true; + } else { + var h4 = document.getElementById("h4"); + h4.checked = false; + } + getResults(); +} + +const numberCounter = { + element1: 0, + element2: 0, + element3: 0, + element4: 0, + element5: 0, + element6: 0, + element7: 0, + element8: 0 +}; + +// Was macht das hier??? +function getResults() { + const criteria = { + criteria11: ["element3"], + criteria12: ["element3"], + criteria21: ["element4"], + criteria22: ["element1", "element2", "element5"], + criteria23: ["element1"], + criteria24: ["element1", "element2"], + criteria25: ["element1", "element2"], + criteria31: ["element2", "element3", "element4"], + criteria32: ["element2", "element3", "element4"], + criteria33: ["element6", "element7", "element8"], + criteria41: ["element1", "element4", "element6"], + criteria42: ["element1", "element2", "element4", "element6"], + criteria43: ["element1", "element2", "element4", "element6"] + }; + + const elementsResult = { + element1: 0, + element2: 0, + element3: 0, + element4: 0, + element5: 0, + element6: 0, + element7: 0, + element8: 0 + }; + + const elements = { + element1: "Punkte", + element2: "Abzeichen", + element3: "Fortschrittsanzeige", + element4: "Bestenlisten", + element5: "Level", + element6: "Avatar", + element7: "Narrativ", + element8: "Nicht-Spieler-Charaktere" + }; + + let elementCountArray = []; + let elementNameArray = []; + + let countCheckedCriteria = 0; + const criteriaElements = document.getElementsByClassName("criteria"); + + for (let i = 0; i < criteriaElements.length; i++) { + if (criteriaElements[i].checked) { + countCheckedCriteria++; + criteria[criteriaElements[i].id].forEach((item) => { + elementsResult[item] = elementsResult[item] + 1; + }); + } + } + + let totalCount = 0; + let percent = 0; + + console.log(elementsResult, "results"); + // Count totalCount up + for (element in elementsResult) { + if (elementsResult[element] > 0) totalCount++; + + elementCountArray.push(elementsResult[element]); + elementNameArray.push(elements[element]); + //totalCount += elementsResult[element] + } + + //showElements(elementsResult, countCheckedCriteria) + loopElements(elementsResult, countCheckedCriteria); + + console.log("array: ", elementCountArray); + console.log("name: ", elementNameArray); + + generateChart(elementNameArray, elementCountArray); +} + +function loopElements(elementsResult, countCheckedCriteria) { + const circleElements = document.getElementsByTagName("circle"); + const numberElements = document.getElementsByClassName("number"); + console.log(circleElements); + console.log(numberElements); + console.log(elementsResult); + + let i = 0; + for (var key in elementsResult) { + console.log(elementsResult[key]); + + if (elementsResult[key] == 0) { + resetCircleAndNumber(numberElements[i], circleElements[i], key); + } else { + modifyNumberAndText( + circleElements[i], + numberElements[i], + elementsResult, + elementsResult[key], + countCheckedCriteria, + key + ); + } + i++; + } +} + +// Shows elements +function modifyNumberAndText( + circle, + number, + elementsResult, + elementResultCount, + countCheckedCriteria, + key +) { + let percent = 0; + const elements = { + element1: "Punkte", + element2: "Abzeichen", + element3: "Fortschrittsanzeige", + element4: "Bestenlisten", + element5: "Level", + element6: "Avatar", + element7: "Narrativ", + element8: "Nicht-Spieler-Charaktere" + }; + + if (elementResultCount > 0) { + // Get percent of each element + if (countCheckedCriteria > 0) { + percent = ((elementResultCount / countCheckedCriteria) * 100).toFixed(2); + } + + // Increasing progess number + + let progress = 0; + + // Modify Number & Circle Progress + //if (elementsResult.element3 > 0 && String(element) == "element3") { + modifiyCircleProgressNumber(number, percent, key); + modifyCircleProgress(circle, percent); + //} + } +} + +function modifyCircleProgress(circle, percent) { + const progress = parseInt(440 - (440 * parseInt(percent)) / 100); + circle.style.setProperty("--fill", progress); +} + +function modifiyCircleProgressNumber(number, percent, key) { + // Modify Number + if (numberCounter[key] <= percent) { + // Count up + let intervalCountUp = setInterval(() => { + if (numberCounter[key] >= percent) { + clearInterval(intervalCountUp); + } else { + numberCounter[key] += 1; + number.innerHTML = numberCounter[key] + "%"; + } + }, 2000 / percent); + } else { + // Count down + let intervalCountDown = setInterval(() => { + if (numberCounter[key] <= percent) { + clearInterval(intervalCountDown); + } else { + numberCounter[key] -= 1; + number.innerHTML = numberCounter[key] + "%"; + } + }, 2000 / percent); + } +} + +function resetCircleAndNumber(number, circle, key) { + let intervalToZero = setInterval(() => { + if (numberCounter[key] <= 0) { + clearInterval(intervalToZero); + } else { + numberCounter[key] -= 1; + number.innerHTML = numberCounter[key] + "%"; + } + }, 2000 / numberCounter[key]); + circle.style.setProperty("--fill", 439); +} + +function setActive(e, svgId) { + progressBarElements = document.getElementsByClassName("progressbar"); + svgElements = document.getElementsByClassName("svgContainer"); + svgToShow = document.getElementById(svgId); + + for (let i = 0; i < progressBarElements.length; i++) { + progressBarElements[i].classList.remove("active"); + } + + for (let i = 0; i < svgElements.length; i++) { + svgElements[i].style.display = "none"; + } + + svgToShow.style.display = "flex"; + e.classList.add("active"); +} + +/* + * Chart.js + */ +let chart; + +function generateChart(elementNameArray, elementCountArray) { + try { + chart.destroy(); + } catch (error) { + console.error(error); + // Expected output: ReferenceError: nonExistentFunction is not defined + // (Note: the exact output may be browser-dependent) + } + + const ctx = document.getElementById("myChart"); + + chart = new Chart(ctx, { + type: "bar", + data: { + labels: elementNameArray, + datasets: [ + { + label: "# of Votes", + data: elementCountArray, + borderWidth: 1 + } + ] + }, + options: { + scales: { + y: { + beginAtZero: true + } + } + } + }); +}