diff --git a/css/style.css b/css/style.css index 450dfd3..7b31771 100644 --- a/css/style.css +++ b/css/style.css @@ -1,42 +1,135 @@ -body { - font-family: Arial, sans-serif; - margin: 20px; -} -table { - width: 100%; - border-collapse: collapse; -} -table, th, td { - border: 1px solid black; -} -th, td { - padding: 10px; - text-align: center; -} -th { - background-color: #f2f2f2; -} -input[type="number"], input[type="checkbox"] { - transform: scale(1.2); -} -button { - padding: 10px; - margin: 10px 5px; - font-size: 16px; -} -#stats { - margin-top: 20px; -} +/* Podstawowe style dla zakładek */ .tab { display: none; } -.active { + +.tab.active { display: block; } -select { - margin-bottom: 10px; - padding: 5px; - background-color: #f2f2f2; +/* Style dla przycisków kategorii */ +.category-buttons { + margin: 10px 0; + text-align: center; +} -} \ No newline at end of file +.category-buttons button { + margin: 5px; + padding: 10px 15px; + font-size: 16px; + cursor: pointer; + background-color: #f2f2f2; + border: 1px solid #ccc; + border-radius: 4px; + transition: background-color 0.3s, color 0.3s, border 0.3s; +} + +.category-buttons button.active { + background-color: #4CAF50; + color: white; + border: 1px solid #4CAF50; +} + +/* Stylizacja tabeli */ +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, td { + border: 1px solid #ddd; + padding: 8px; + text-align: center; +} + +th { + background-color: #f2f2f2; +} + +tr:nth-child(even) { + background-color: #f9f9f9; +} + +/* Stylizacja kontenera klasy */ +.select-class { + margin-top: 20px; + text-align: center; +} + +.select-class select { + padding: 5px; + font-size: 16px; + border: 1px solid #ccc; + border-radius: 4px; +} + +/* Stylizacja nagłówków */ +h1, h2, h3 { + text-align: center; +} + +/* Dodatkowe style dla układu */ +body { + font-family: Arial, sans-serif; + margin: 20px; + background-color: #fafafa; +} + +/* Stylizacja stopki */ +footer.footer { + width: 100%; + padding: 20px 0; + background-color: #fafafa; + color: #555; +} + +.footer-container { + max-width: 1200px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: stretch; +} + +.footer-left, .footer-right { + width: 100%; +} + +.footer-left { + text-align: left; +} + +.footer-right { + text-align: right; +} + +.footer-line { + border: none; + border-top: 2px solid #ddd; + margin: 20px 0; + width: 100%; +} + +/* Dodatkowe style dla estetyki */ +.footer-left p, +.footer-right p { + margin: 5px 0; + font-size: 14px; + color: #333; +} + +/* Stylizacja przycisków ogólna */ +button { + outline: none; +} + +button:hover { + opacity: 0.8; +} + +/* Stylizacja checkboxów */ +input[type="checkbox"] { + transform: scale(1.2); + cursor: pointer; +} diff --git a/index.html b/index.html index 9db43f2..a4a4215 100644 --- a/index.html +++ b/index.html @@ -15,6 +15,7 @@ +
Frekwencja 95-100% | |||
Brak godzin nieusprawiedliwionych | -+ | ||
Minimum 85% frekwencja | -+ | ||
Udział w etapie szkolnym olimpiady | -+ | Etap szkolny | +|
Udział w etapie rejonowym olimpiady | -+ | Etap rejonowy | +|
Udział w etapie wojewódzkim olimpiady | -+ | Etap wojewódzki | +|
Udział w etapie ogólnopolskim olimpiady | -+ | Etap ogólnopolski | ++ |
Udział w konkursach | ++ | ||
Wyróżnienie w konkursie | ++ | ||
Reprezentacja indywidualna | ++ | ||
Reprezentacja zespołowa | ++ | ||
Udział w zawodach | ++ | ||
Organizacja imprez | ++ | ||
Funkcje w klasie | ++ | ||
Uroczystości okolicznościowe | ++ | ||
Udział w poczcie sztandarowej | ++ | ||
Pomoc nauczycielowi | ++ | ||
Wolontariat | +
Wybierz klasę:
-Imię i nazwisko | -Frekwencja | -Olimpiady | -Konkursy Szkolne | -Reprezentacja Szkoły | -Aktywność | -|||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Frekwencja 95-100% | -Brak godzin nieusprawiedliwionych | -Minimum 85% frekwencja | -Etap szkolny | -Etap rejonowy | -Etap wojewódzki | -Etap ogólnopolski | -Udział w konkursach | -Wyróżnienie w konkursie | -Reprezentacja indywidualna | -Reprezentacja zespołowa | -Udział w zawodach | -Organizacja imprez | -Funkcje w klasie | -Uroczystości okolicznościowe | -Udział w poczcie sztandarowym | -Pomoc nauczycielowi | -Wolontariat | +Imię i Nazwisko | +
Student | - -
---|
diff --git a/js/app.js b/js/app.js deleted file mode 100644 index e69de29..0000000 diff --git a/js/script.js b/js/script.js index 5cb1f17..8c6eaf7 100644 --- a/js/script.js +++ b/js/script.js @@ -1,13 +1,53 @@ -// Funkcja do wczytania pliku JSON +// Definicja kategorii i ich kryteriów +const categories = { + frekwencja: [ + { name: "Frekwencja 95-100%", id: "frekwencja" }, + { name: "Brak godzin nieusprawiedliwionych", id: "brak_godzin" }, + { name: "Minimum 85% frekwencja", id: "min_85" } + ], + olimpiady: [ + { name: "Etap szkolny", id: "etap_szkolny" }, + { name: "Etap rejonowy", id: "etap_rejonowy" }, + { name: "Etap wojewódzki", id: "etap_wojewodzki" }, + { name: "Etap ogólnopolski", id: "etap_ogolnopolski" } + ], + konkursy: [ + { name: "Udział w konkursach", id: "udzial_konkurs" }, + { name: "Wyróżnienie w konkursie", id: "wyroznienie_konkurs" } + ], + reprezentacja: [ + { name: "Reprezentacja indywidualna", id: "reprezentacja_indywidualna" }, + { name: "Reprezentacja zespołowa", id: "reprezentacja_zespolowa" }, + { name: "Udział w zawodach", id: "udzial_zawody" } + ], + aktywnosc: [ + { name: "Organizacja imprez", id: "organizacja_imprez" }, + { name: "Funkcje w klasie", id: "funkcja_klasa" }, + { name: "Uroczystości okolicznościowe", id: "uroczystosci" }, + { name: "Udział w poczcie sztandarowej", id: "poczta_sztandar" }, + { name: "Pomoc nauczycielowi", id: "pomoc_nauczyciel" }, + { name: "Wolontariat", id: "wolontariat" } + ] +}; + +// 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; } } @@ -20,77 +60,86 @@ async function loadClasses() { const classes = await fetchJSONFile(classFilePath); if (classes) { - const section_by_id = document.getElementById("select-class"); - section_by_id.innerHTML = ""; // Wyczyść istniejące opcje + console.log('Załadowane klasy:', classes); - for (const classInfo of classes) { - const studentsFilePath = '/data/' + classInfo.file_path; - const studentsDataForClass = await fetchJSONFile(studentsFilePath); + const selectClass = document.getElementById("select-class-select"); + selectClass.innerHTML = ""; // Wyczyść istniejące opcje - const classKey = classInfo.class + "-" + classInfo.group; + classes.forEach(classInfo => { + const option = document.createElement('option'); + option.value = classInfo.file_path; + option.textContent = `Klasa: ${classInfo.class}`; + selectClass.appendChild(option); + console.log("Dodano klasę ", classInfo.class, " do SELECT"); + }); - // Utwórz i dodaj opcję do selecta - const option = document.createElement("option"); - option.value = classKey; - option.text = "Klasa: " + classInfo.class + " Grupa: " + classInfo.group; - section_by_id.appendChild(option); + // Dodaj nasłuchiwacz zdarzeń na zmianę wyboru klasy + selectClass.addEventListener('change', function() { + const selectedClassFile = this.value; + console.log(`Wybrano klasę: ${selectedClassFile}`); + loadStudents(selectedClassFile); + }); - if (studentsDataForClass) { - processClassData(classInfo, studentsDataForClass); - } + // Opcjonalnie, ustaw domyślnie pierwszą klasę i załaduj jej uczniów + if (classes.length > 0) { + selectClass.selectedIndex = 0; + const defaultClassFile = classes[0].file_path; + loadStudents(defaultClassFile); } } } -// Funkcja do przetwarzania danych o klasach i uczniach -function processClassData(classInfo, studentsDataForClass) { - const classKey = classInfo.class + "-" + classInfo.group; - classData[classKey] = studentsDataForClass; -} +// Funkcja do wczytania danych uczniów dla wybranej klasy +async function loadStudents(classFilePath) { + if (!classFilePath) { + console.warn("Nie wybrano żadnej klasy."); + return; + } -// Globalna tablica studentsData -let studentsData = []; + const studentsFilePath = `/data/${classFilePath}`; + const data = await fetchJSONFile(studentsFilePath); -// Nasłuchiwanie na zmianę klasy i ładowanie uczniów -document.addEventListener('DOMContentLoaded', function() { - loadClasses().then(() => { - const selectClassElement = document.getElementById('select-class'); + if (data && Array.isArray(data.students)) { + console.log(`Uczniowie załadowani z pliku ${classFilePath}:`, data); + studentsData = data.students; // Aktualizuj globalną tablicę uczniów - selectClassElement.addEventListener('change', function() { - var selectedClass = this.value; - console.log("Aktualnie wybrana klasa: ", selectedClass); - - // Pobierz dane uczniów dla wybranej klasy - let classStudentsData = classData[selectedClass]; - - if (classStudentsData && classStudentsData.students) { - console.log("Dane uczniów dla klasy:", classStudentsData.students); - // Zaktualizuj tablicę studentsData - studentsData = classStudentsData.students.map(student => ({ - name: student.first_name + " " + student.last_name, - behavior: {} - })); - // Wygeneruj tabelę - generateTable(); - // Załaduj dane dla aktualnego dnia - loadDayData(); - } else { - console.error("Nie znaleziono danych dla klasy: ", selectedClass); + // Inicjalizacja 'behavior' dla każdego ucznia, jeśli jest niezdefiniowany + studentsData.forEach(student => { + if (!student.behavior) { + student.behavior = {}; } }); - // Automatycznie wywołaj 'change' dla pierwszej klasy w select - if (selectClassElement.options.length > 0) { - selectClassElement.selectedIndex = 0; - selectClassElement.dispatchEvent(new Event('change')); - } - }); -}); + 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("Załadowane kryteria:", criteria); + // Implementacja dalszego przetwarzania kryteriów, jeśli jest potrzebna +} + +// Funkcja do przełączania głównych zakładek function showTab(tabName) { + // Ukryj wszystkie główne taby const tabs = document.querySelectorAll('.tab'); tabs.forEach(tab => tab.classList.remove('active')); - document.getElementById(tabName).classList.add('active'); + + // Pokaż wybrany tab + const selectedTab = document.getElementById(tabName); + if (selectedTab) { + selectedTab.classList.add('active'); + } if (tabName === 'criteria') { loadDayData(); @@ -99,43 +148,35 @@ function showTab(tabName) { } } -function generateTable() { - const table = document.getElementById('student-table'); - table.innerHTML = ''; +// Funkcja do przełączania kategorii w tabeli uczniów +function showInnerTab(category) { + currentCategory = category; + // Generowanie tabeli na podstawie wybranej kategorii + generateTable(category); - studentsData.forEach(student => { - console.log("Przetwarzany student:", student); - const studentId = student.name.replace(/\s+/g, '-'); - const row = document.createElement('tr'); - row.innerHTML = ` -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `; - table.appendChild(row); - }); + // Podkreślenie aktywnego przycisku + const buttons = document.querySelectorAll('.category-buttons button'); + buttons.forEach(button => button.classList.remove('active')); + const activeButton = document.querySelector(`.category-buttons button[data-category="${category}"]`); + if (activeButton) { + activeButton.classList.add('active'); + } } -let currentDay = 0; -const baseDate = new Date(); +// Funkcja, aby ustawić domyślną kategorię i zakładkę +document.addEventListener("DOMContentLoaded", function() { + // Domyślnie pokazujemy kategorię 'frekwencja' + showInnerTab('frekwencja'); -// Zmiana dnia i ładowanie danych + // Ustawienie daty na dziś + document.getElementById('current-date').innerText = baseDate.toLocaleDateString(); + + // Uruchomienie wczytywania klas i kryteriów + loadClasses(); + loadCriteria(); +}); + +// Funkcja do zmiany dnia function changeDay(direction) { saveDayData(); currentDay += direction; @@ -145,81 +186,73 @@ function changeDay(direction) { loadDayData(); } +// Funkcja do ładowania danych dnia function loadDayData() { studentsData.forEach(student => { - const studentId = student.name.replace(/\s+/g, '-'); + const studentId = `${student.first_name}-${student.last_name}`.replace(/ /g, '-'); const behavior = student.behavior[`day${currentDay}`] || {}; - document.getElementById(`frekwencja-${studentId}`).checked = behavior.frekwencja || false; - document.getElementById(`brak-godzin-${studentId}`).checked = behavior.brak_godzin || false; - document.getElementById(`min-85-${studentId}`).checked = behavior.min_85 || false; - document.getElementById(`etap-szkolny-${studentId}`).checked = behavior.etap_szkolny || false; - document.getElementById(`etap-rejonowy-${studentId}`).checked = behavior.etap_rejonowy || false; - document.getElementById(`etap-wojewodzki-${studentId}`).checked = behavior.etap_wojewodzki || false; - document.getElementById(`etap-ogolnopolski-${studentId}`).checked = behavior.etap_ogolnopolski || false; - document.getElementById(`udzial-konkurs-${studentId}`).checked = behavior.udzial_konkurs || false; - document.getElementById(`wyroznienie-konkurs-${studentId}`).checked = behavior.wyroznienie_konkurs || false; - document.getElementById(`reprezentacja-indywidualna-${studentId}`).checked = behavior.reprezentacja_indywidualna || false; - document.getElementById(`reprezentacja-zespolowa-${studentId}`).checked = behavior.reprezentacja_zespolowa || false; - document.getElementById(`udzial-zawody-${studentId}`).checked = behavior.udzial_zawody || false; - document.getElementById(`organizacja-imprez-${studentId}`).checked = behavior.organizacja_imprez || false; - document.getElementById(`funkcja-klasa-${studentId}`).checked = behavior.funkcja_klasa || false; - document.getElementById(`uroczystosci-${studentId}`).checked = behavior.uroczystosci || false; - document.getElementById(`poczta-sztandar-${studentId}`).checked = behavior.poczta_sztandar || false; - document.getElementById(`pomoc-nauczyciel-${studentId}`).checked = behavior.pomoc_nauczyciel || false; - document.getElementById(`wolontariat-${studentId}`).checked = behavior.wolontariat || false; + // Pobierz kryteria dla aktualnej kategorii + const categoryColumns = categories[currentCategory]; + categoryColumns.forEach(column => { + const checkbox = document.getElementById(`${column.id}-${studentId}`); + if (checkbox) { + checkbox.checked = behavior[column.id] || false; + } + }); }); calculateStats(); } +// Funkcja do zapisywania danych dnia function saveDayData() { studentsData.forEach(student => { - const studentId = student.name.replace(/\s+/g, '-'); - const behavior = { - frekwencja: document.getElementById(`frekwencja-${studentId}`).checked, - brak_godzin: document.getElementById(`brak-godzin-${studentId}`).checked, - min_85: document.getElementById(`min-85-${studentId}`).checked, - etap_szkolny: document.getElementById(`etap-szkolny-${studentId}`).checked, - etap_rejonowy: document.getElementById(`etap-rejonowy-${studentId}`).checked, - etap_wojewodzki: document.getElementById(`etap-wojewodzki-${studentId}`).checked, - etap_ogolnopolski: document.getElementById(`etap-ogolnopolski-${studentId}`).checked, - udzial_konkurs: document.getElementById(`udzial-konkurs-${studentId}`).checked, - wyroznienie_konkurs: document.getElementById(`wyroznienie-konkurs-${studentId}`).checked, - reprezentacja_indywidualna: document.getElementById(`reprezentacja-indywidualna-${studentId}`).checked, - reprezentacja_zespolowa: document.getElementById(`reprezentacja-zespolowa-${studentId}`).checked, - udzial_zawody: document.getElementById(`udzial-zawody-${studentId}`).checked, - organizacja_imprez: document.getElementById(`organizacja-imprez-${studentId}`).checked, - funkcja_klasa: document.getElementById(`funkcja-klasa-${studentId}`).checked, - uroczystosci: document.getElementById(`uroczystosci-${studentId}`).checked, - poczta_sztandar: document.getElementById(`poczta-sztandar-${studentId}`).checked, - pomoc_nauczyciel: document.getElementById(`pomoc-nauczyciel-${studentId}`).checked, - wolontariat: document.getElementById(`wolontariat-${studentId}`).checked - }; + const studentId = `${student.first_name}-${student.last_name}`.replace(/ /g, '-'); + + // Upewnij się, że 'behavior' jest zdefiniowany + if (!student.behavior) { + student.behavior = {}; + } + + let behavior = student.behavior[`day${currentDay}`] || {}; + + const categoryColumns = categories[currentCategory]; + + categoryColumns.forEach(column => { + const checkbox = document.getElementById(`${column.id}-${studentId}`); + if (checkbox) { + behavior[column.id] = checkbox.checked; + } + }); student.behavior[`day${currentDay}`] = behavior; }); } +// Funkcja do obliczania statystyk function calculateStats() { - const frekwencjaPoints = parseInt(document.getElementById('frekwencja-punkty').value); - const brakGodzinPoints = parseInt(document.getElementById('brak-godzin-punkty').value); - const min85Points = parseInt(document.getElementById('min-85-punkty').value); - const etapSzkolnyPoints = parseInt(document.getElementById('etap-szkolny-punkty').value); - const etapRejonowyPoints = parseInt(document.getElementById('etap-rejonowy-punkty').value); - const etapWojewodzkiPoints = parseInt(document.getElementById('etap-wojewodzki-punkty').value); - const etapOgolnopolskiPoints = parseInt(document.getElementById('etap-ogolnopolski-punkty').value); - const udzialKonkursPoints = 5; // stała wartość - const wyroznienieKonkursPoints = 10; // stała wartość - const reprezentacjaIndPoints = 5; // stała wartość - const reprezentacjaZesPoints = 10; // stała wartość - const udzialZawodyPoints = 15; // stała wartość - const organizacjaImprezPoints = 10; // stała wartość - const funkcjaKlasyPoints = 10; // stała wartość - const uroczystosciPoints = 10; // stała wartość - const pocztaSztandarPoints = 20; // stała wartość - const pomocNauczycielaPoints = 10; // stała wartość - const wolontariatPoints = 10; // stała wartość + // Pobieranie punktów z zakładki "Ustal punkty" + const points = { + frekwencja: parseInt(document.getElementById('frekwencja-punkty').value) || 0, + brak_godzin: parseInt(document.getElementById('brak_godzin-punkty').value) || 0, + min_85: parseInt(document.getElementById('min_85-punkty').value) || 0, + etap_szkolny: parseInt(document.getElementById('etap_szkolny-punkty').value) || 5, + etap_rejonowy: parseInt(document.getElementById('etap_rejonowy-punkty').value) || 10, + etap_wojewodzki: parseInt(document.getElementById('etap_wojewodzki-punkty').value) || 15, + etap_ogolnopolski: parseInt(document.getElementById('etap_ogolnopolski-punkty').value) || 20, + udzial_konkurs: parseInt(document.getElementById('udzial_konkurs-punkty').value) || 5, + wyroznienie_konkurs: parseInt(document.getElementById('wyroznienie_konkurs-punkty').value) || 10, + reprezentacja_indywidualna: parseInt(document.getElementById('reprezentacja_indywidualna-punkty').value) || 5, + reprezentacja_zespolowa: parseInt(document.getElementById('reprezentacja_zespolowa-punkty').value) || 10, + udzial_zawody: parseInt(document.getElementById('udzial_zawody-punkty').value) || 15, + organizacja_imprez: parseInt(document.getElementById('organizacja_imprez-punkty').value) || 10, + funkcja_klasa: parseInt(document.getElementById('funkcja_klasa-punkty').value) || 10, + uroczystosci: parseInt(document.getElementById('uroczystosci-punkty').value) || 10, + poczta_sztandar: parseInt(document.getElementById('poczta_sztandar-punkty').value) || 20, + pomoc_nauczyciel: parseInt(document.getElementById('pomoc_nauczyciel-punkty').value) || 10, + wolontariat: parseInt(document.getElementById('wolontariat-punkty').value) || 10 + }; let stats = ''; @@ -230,34 +263,22 @@ function calculateStats() { const behavior = student.behavior[day]; let dayPoints = 0; - if (behavior.frekwencja) dayPoints += frekwencjaPoints; - if (behavior.brak_godzin) dayPoints += brakGodzinPoints; - if (behavior.min_85) dayPoints += min85Points; - if (behavior.etap_szkolny) dayPoints += etapSzkolnyPoints; - if (behavior.etap_rejonowy) dayPoints += etapRejonowyPoints; - if (behavior.etap_wojewodzki) dayPoints += etapWojewodzkiPoints; - if (behavior.etap_ogolnopolski) dayPoints += etapOgolnopolskiPoints; - if (behavior.udzial_konkurs) dayPoints += udzialKonkursPoints; - if (behavior.wyroznienie_konkurs) dayPoints += wyroznienieKonkursPoints; - if (behavior.reprezentacja_indywidualna) dayPoints += reprezentacjaIndPoints; - if (behavior.reprezentacja_zespolowa) dayPoints += reprezentacjaZesPoints; - if (behavior.udzial_zawody) dayPoints += udzialZawodyPoints; - if (behavior.organizacja_imprez) dayPoints += organizacjaImprezPoints; - if (behavior.funkcja_klasa) dayPoints += funkcjaKlasyPoints; - if (behavior.uroczystosci) dayPoints += uroczystosciPoints; - if (behavior.poczta_sztandar) dayPoints += pocztaSztandarPoints; - if (behavior.pomoc_nauczyciel) dayPoints += pomocNauczycielaPoints; - if (behavior.wolontariat) dayPoints += wolontariatPoints; + for (const [criterion, value] of Object.entries(behavior)) { + if (value && points[criterion]) { + dayPoints += points[criterion]; + } + } totalPoints += dayPoints; }); - stats += `${student.name}: ${totalPoints} punktów (${getGrade(totalPoints)})\n`; + stats += `${student.first_name} ${student.last_name}: ${totalPoints} punktów (${getGrade(totalPoints)})\n`; }); - document.getElementById('stats').innerText = stats; + document.getElementById('stats-output').innerText = stats; } +// Funkcja do przypisywania ocen na podstawie punktów function getGrade(points) { if (points >= 250) return "Wzorowe"; if (points >= 180) return "Bardzo dobre"; @@ -267,5 +288,61 @@ function getGrade(points) { return "Naganne"; } -// Ustawienie daty na dziś -document.getElementById('current-date').innerText = baseDate.toLocaleDateString(); +// Funkcja do generowania tabeli uczniów na podstawie wybranej kategorii +function generateTable(category) { + const table = document.getElementById('student-table'); + const thead = table.querySelector('thead tr'); + const tbody = table.querySelector('tbody'); + + // Wyczyść istniejące nagłówki i wiersze + thead.innerHTML = ''; + tbody.innerHTML = ''; + + // Dodaj nagłówek 'Imię i Nazwisko' + const thName = document.createElement('th'); + thName.textContent = "Imię i Nazwisko"; + thead.appendChild(thName); + + // Pobierz kolumny dla wybranej kategorii + const categoryColumns = categories[category]; + + // Dodaj nagłówki dla kryteriów w kategorii + categoryColumns.forEach(column => { + const th = document.createElement('th'); + th.textContent = column.name; + thead.appendChild(th); + }); + + // Generuj wiersze dla uczniów + studentsData.forEach(student => { + const row = document.createElement('tr'); + + // Komórka z imieniem i nazwiskiem + const tdName = document.createElement('td'); + tdName.textContent = `${student.first_name} ${student.last_name}`; + row.appendChild(tdName); + + // Upewnij się, że 'behavior' jest zdefiniowany + if (!student.behavior) { + student.behavior = {}; + } + + // Komórki z checkboxami dla kryteriów + categoryColumns.forEach(column => { + const td = document.createElement('td'); + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + const studentId = `${student.first_name}-${student.last_name}`.replace(/ /g, '-'); + checkbox.id = `${column.id}-${studentId}`; + checkbox.onchange = calculateStats; + + // Ustawienie stanu checkboxa na podstawie zapisanych danych + checkbox.checked = student.behavior[`day${currentDay}`]?.[column.id] || false; + + td.appendChild(checkbox); + row.appendChild(td); + }); + + tbody.appendChild(row); + }); +} diff --git a/p1/token.txt b/p1/token.txt deleted file mode 100644 index 567c04c..0000000 --- a/p1/token.txt +++ /dev/null @@ -1 +0,0 @@ -a4dd89352b730d2ef7a3eff72ab98dbc2b7e8d6b \ No newline at end of file diff --git a/templates/criteria.html b/templates/criteria.html deleted file mode 100644 index cf39461..0000000 --- a/templates/criteria.html +++ /dev/null @@ -1,7 +0,0 @@ -
- diff --git a/templates/dashboard.html b/templates/dashboard.html deleted file mode 100644 index d006bd8..0000000 --- a/templates/dashboard.html +++ /dev/null @@ -1,51 +0,0 @@ - - -
- - -
- - -
-