From e0ba11b0e9620841c10b33842568fade0432424a Mon Sep 17 00:00:00 2001 From: konradm Date: Thu, 17 Oct 2024 14:15:45 +0200 Subject: [PATCH] commit --- index.html | 22 +++++----- js/script.js | 117 +++++++++++++++++++++++++++------------------------ 2 files changed, 73 insertions(+), 66 deletions(-) diff --git a/index.html b/index.html index 0be4322..1dcf3aa 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,6 @@ - Ocena Zachowania @@ -114,21 +113,20 @@

Wybierz klasę:

-
- - - - - -
- +
+ + + + + +
+ + diff --git a/js/script.js b/js/script.js index eb68634..e8c43ef 100644 --- a/js/script.js +++ b/js/script.js @@ -30,19 +30,24 @@ const categories = { ] }; -// Zmienna przechowująca aktualną kategorię +// Zmienne globalne let currentCategory = 'frekwencja'; +let currentClass = ''; +let studentsData = []; +let currentDay = 0; +const baseDate = new Date(); // Funkcja do wczytywania pliku JSON async function fetchJSONFile(filePath) { try { const response = await fetch(filePath); if (!response.ok) { - throw new Error(`HTTP error! Status: ${response.status}`); + throw new Error(`Błąd HTTP! Status: ${response.status}`); } return await response.json(); } catch (error) { - console.error("Error fetching JSON file:", error); + console.error("Błąd podczas pobierania pliku JSON:", error); + return null; } } @@ -52,73 +57,77 @@ async function loadClasses() { const classes = await fetchJSONFile(classFilePath); if (classes) { - console.log('Classes loaded:', classes); + console.log('Załadowane klasy:', classes); const selectClass = document.getElementById("select-class-select"); - selectClass.innerHTML = ""; // Clear existing options + selectClass.innerHTML = ""; // Wyczyść istniejące opcje classes.forEach(classInfo => { const option = document.createElement('option'); - option.value = classInfo.class; + option.value = classInfo.file_path; option.textContent = `Klasa: ${classInfo.class}`; selectClass.appendChild(option); - console.log("DODANO KLASE ", classInfo.class, " DO SELECT"); + console.log("Dodano klasę ", classInfo.class, " do SELECT"); }); - // Add event listener for class selection + // Dodaj nasłuchiwacz zdarzeń na zmianę wyboru klasy selectClass.addEventListener('change', function() { - const selectedClass = this.value; - console.log(`Wybrano klasę: ${selectedClass}`); - // Wczytaj dane uczniów dla wybranej klasy - // To implement based on how you store student data per class - // For example: - // loadStudents(selectedClass); - // But for now, assuming studentsData is global + const selectedClassFile = this.value; + console.log(`Wybrano klasę: ${selectedClassFile}`); + loadStudents(selectedClassFile); }); - // Optionally, set a default selected class + // Opcjonalnie, ustaw domyślnie pierwszą klasę i załaduj jej uczniów if (classes.length > 0) { - selectClass.value = classes[0].class; - // Load students for the first class - // loadStudents(classes[0].class); + selectClass.selectedIndex = 0; + const defaultClassFile = classes[0].file_path; + loadStudents(defaultClassFile); } } } +// Funkcja do wczytania danych uczniów dla wybranej klasy +async function loadStudents(classFilePath) { + if (!classFilePath) { + console.warn("Nie wybrano żadnej klasy."); + return; + } + + const studentsFilePath = `/data/${classFilePath}`; + const data = await fetchJSONFile(studentsFilePath); + + if (data && Array.isArray(data.students)) { + console.log(`Uczniowie załadowani z pliku ${classFilePath}:`, data); + studentsData = data.students; // Aktualizuj globalną tablicę uczniów + + // Inicjalizacja 'behavior' dla każdego ucznia, jeśli jest niezdefiniowany + studentsData.forEach(student => { + if (!student.behavior) { + student.behavior = {}; + } + }); + + currentClass = classFilePath; // Ustaw aktualną klasę + generateTable(currentCategory); // Regeneruj tabelę z aktualną kategorią + } else { + console.error("Błąd: Nie udało się załadować danych uczniów lub dane są niepoprawne."); + studentsData = []; // Jeśli nie udało się załadować danych, wyczyść tablicę uczniów + currentClass = ''; + generateTable(currentCategory); // Regeneruj pustą tabelę + } +} + + + // Funkcja do wczytania pliku criteria.json async function loadCriteria() { const criteriaFilePath = '/data/criteria.json'; const criteria = await fetchJSONFile(criteriaFilePath); - console.log("Criteria loaded:", criteria); + console.log("Załadowane kryteria:", criteria); // Implementacja dalszego przetwarzania kryteriów, jeśli jest potrzebna } -// Dane uczniów (przykładowe, powinny być ładowane z plików JSON) -let studentsData = [ - { name: "Jan Kowalski", behavior: {} }, - { name: "Anna Nowak", behavior: {} }, - { name: "Piotr Wiśniewski", behavior: {} }, - { name: "Katarzyna Zielińska", behavior: {} } -]; - -// To store student data per class, you might need a data structure like: -// let allStudentsData = { -// "1A": [...], -// "2B": [...], -// ... -// }; - -// let allStudentsData = {}; - -// function loadStudents(className) { -// // Load students data for the class from allStudentsData[className] -// // And set studentsData accordingly -// } - -let currentDay = 0; -const baseDate = new Date(); - // Funkcja do przełączania głównych zakładek function showTab(tabName) { // Ukryj wszystkie główne taby @@ -182,7 +191,7 @@ function loadDayData() { const studentId = student.name.replace(/ /g, '-'); const behavior = student.behavior[`day${currentDay}`] || {}; - // Get criteria for the current category + // Pobierz kryteria dla aktualnej kategorii const categoryColumns = categories[currentCategory]; categoryColumns.forEach(column => { const checkbox = document.getElementById(`${column.id}-${studentId}`); @@ -199,7 +208,7 @@ function loadDayData() { function saveDayData() { studentsData.forEach(student => { const studentId = student.name.replace(/ /g, '-'); - const behavior = student.behavior[`day${currentDay}`] || {}; + let behavior = student.behavior[`day${currentDay}`] || {}; const categoryColumns = categories[currentCategory]; @@ -278,35 +287,35 @@ function generateTable(category) { const thead = table.querySelector('thead tr'); const tbody = table.querySelector('tbody'); - // Clear existing headers and body + // Wyczyść istniejące nagłówki i wiersze thead.innerHTML = ''; tbody.innerHTML = ''; - // Add 'Imię i Nazwisko' header + // Dodaj nagłówek 'Imię i Nazwisko' const thName = document.createElement('th'); thName.textContent = "Imię i Nazwisko"; thead.appendChild(thName); - // Get columns for the category + // Pobierz kolumny dla wybranej kategorii const categoryColumns = categories[category]; - // Add headers for category + // Dodaj nagłówki dla kryteriów w kategorii categoryColumns.forEach(column => { const th = document.createElement('th'); th.textContent = column.name; thead.appendChild(th); }); - // Generate rows + // Generuj wiersze dla uczniów studentsData.forEach(student => { const row = document.createElement('tr'); - // Name cell + // Komórka z imieniem i nazwiskiem const tdName = document.createElement('td'); tdName.textContent = student.name; row.appendChild(tdName); - // Checkbox cells + // Komórki z checkboxami dla kryteriów categoryColumns.forEach(column => { const td = document.createElement('td'); const checkbox = document.createElement('input');