From aaee58f94ef3a1d2166885c68e2f86445ed3e2d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rebecca=20M=C3=BCller?=
<rebecca.mueller@student.reutlingen-university.de>
Date: Tue, 2 Apr 2024 18:47:22 +0000
Subject: [PATCH] main js file
---
main.js | 385 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 385 insertions(+)
create mode 100644 main.js
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..d34694b
--- /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
+ }
+ }
+ }
+ });
+}
--
GitLab