From 36524d8012aee725a50608b9188bdff76245f662 Mon Sep 17 00:00:00 2001 From: baiobelfer Date: Wed, 16 Oct 2024 14:53:18 +0200 Subject: [PATCH 1/8] update loadCriteria --- js/script.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/js/script.js b/js/script.js index 78cfe5b..f928438 100644 --- a/js/script.js +++ b/js/script.js @@ -56,6 +56,13 @@ async function loadClasses() { } } +async function loadCriteria () { + const criteriaFilePath = '/data/criteria.json'; + const criteria = await fetchJSONFile(classFilePath); + + console.log ("break") +} + const classData = [] // Funkcja do przetwarzania danych o klasach i uczniach @@ -68,7 +75,7 @@ function processClassData(classInfo, studentsData) { // Uruchomienie wczytywania klas loadClasses(); - +loadCriteria(); // // // From 6f7a626db3a1bd4cfc27494a7bc126c6895b7c99 Mon Sep 17 00:00:00 2001 From: baiobelfer Date: Wed, 16 Oct 2024 14:56:56 +0200 Subject: [PATCH 2/8] bh update --- js/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/script.js b/js/script.js index f928438..67fb87c 100644 --- a/js/script.js +++ b/js/script.js @@ -58,7 +58,7 @@ async function loadClasses() { async function loadCriteria () { const criteriaFilePath = '/data/criteria.json'; - const criteria = await fetchJSONFile(classFilePath); + const criteria = await fetchJSONFile(criteriaFilePath); console.log ("break") } From ab33dc5f75186595b696651ccb54ae01fbb1ed14 Mon Sep 17 00:00:00 2001 From: bartoszh Date: Wed, 16 Oct 2024 15:44:17 +0200 Subject: [PATCH 3/8] commit --- index.html | 224 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 159 insertions(+), 65 deletions(-) diff --git a/index.html b/index.html index 2b87cab..e4f0bdc 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,15 @@ Ocena Zachowania + @@ -16,6 +25,7 @@ +

Ustal punkty dla kryteriów

@@ -38,95 +48,179 @@ - - - - - - - - - - - - - - - - +
Minimum 85% frekwencja
Udział w etapie szkolnym olimpiady
Udział w etapie rejonowym olimpiady
Udział w etapie wojewódzkim olimpiady
Udział w etapie ogólnopolskim olimpiady
+

Kryteria oceny zachowania -

-
-

Wybierz klase:

- +
+ + + + + +
+
+

Wybierz klasę:

+ + +
+

Frekwencja

+ + + + + + + + + + + + + + + +
Frekwencja 95-100%Brak godzin nieusprawiedliwionychMinimum 85% frekwencja
.........
+
+ + +
+

Olimpiady

+ + + + + + + + + + + + + + + + + +
Etap szkolnyEtap rejonowyEtap wojewódzkiEtap ogólnopolski
............
+
+ + +
+

Konkursy Szkolne

+ + + + + + + + + + + + + +
Udział w konkursachWyróżnienie w konkursie
......
+
+ + +
+

Reprezentacja Szkoły

+ + + + + + + + + + + + + + + +
Reprezentacja indywidualnaReprezentacja zespołowaUdział w zawodach
.........
+
+ + +
+

Aktywność

+ + + + + + + + + + + + + + + + + + + + + +
Organizacja imprezFunkcje w klasieUroczystości okolicznościoweUdział w poczcie sztandarowymPomoc nauczycielowiWolontariat
..................
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FrekwencjaOlimpiadyKonkursy SzkolneReprezentacja SzkołyAktywność
Frekwencja 95-100%Brak godzin nieusprawiedliwionychMinimum 85% frekwencjaEtap szkolnyEtap rejonowyEtap wojewódzkiEtap ogólnopolskiUdział w konkursachWyróżnienie w konkursieReprezentacja indywidualnaReprezentacja zespołowaUdział w zawodachOrganizacja imprezFunkcje w klasieUroczystości okolicznościoweUdział w poczcie sztandarowymPomoc nauczycielowiWolontariat
+

Statystyka dla wszystkich dni

- K. Michalak -
- F. Kowalski -
+ K. Michalak
+ F. Kowalski
Led and Authored by M. Pabiszczak
- + + // Pokaż wybrany tab + document.getElementById(tabId).classList.add('active'); + } + // Funkcja do przełączania wewnętrznych zakładek (Frekwencja, Olimpiady, itp.) + function showInnerTab(innerTabId) { + // Ukryj wszystkie wewnętrzne zakładki + const innerTabs = document.querySelectorAll('#criteria .tab'); + innerTabs.forEach(innerTab => innerTab.classList.remove('active')); + + // Pokaż wybrany wewnętrzny tab + document.getElementById(innerTabId).classList.add('active'); + } + + // Funkcja, aby ustawić domyślną zakładkę + document.addEventListener("DOMContentLoaded", function() { + showInnerTab('frekwencja-tab'); // Pokaż domyślnie zakładkę Frekwencja + }); + From 3d62de7867b3fbd1156c17a2be793a701af5e560 Mon Sep 17 00:00:00 2001 From: bartoszh Date: Thu, 17 Oct 2024 12:47:01 +0200 Subject: [PATCH 4/8] wszystko zrobione --- css/style.css | 111 +++++++++++------ index.html | 247 ++++++++++++++----------------------- js/script.js | 333 ++++++++++++++++++++++++++------------------------ 3 files changed, 341 insertions(+), 350 deletions(-) diff --git a/css/style.css b/css/style.css index 450dfd3..d906f02 100644 --- a/css/style.css +++ b/css/style.css @@ -1,42 +1,81 @@ + +/* Podstawowe style dla zakładek */ +.tab { + display: none; +} + +.tab.active { + display: block; +} + +/* Style dla przycisków kategorii */ +.category-buttons { + margin: 10px 0; + text-align: center; +} + +.category-buttons button { + margin: 5px; + padding: 10px 15px; + font-size: 16px; + cursor: pointer; + background-color: #f2f2f2; + border: 1px solid #ccc; + border-radius: 4px; +} + +.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; +} + +/* Stylizacja nagłówków */ +h1, h2, h3 { + text-align: center; +} + +/* Dodatkowe style dla układu */ 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; + +footer { text-align: center; + margin-top: 40px; + font-size: 14px; + color: #555; } -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; -} -.tab { - display: none; -} -.active { - display: block; -} - -select { - margin-bottom: 10px; - padding: 5px; - background-color: #f2f2f2; - -} \ No newline at end of file diff --git a/index.html b/index.html index e4f0bdc..d6f1fe3 100644 --- a/index.html +++ b/index.html @@ -5,15 +5,6 @@ Ocena Zachowania - @@ -48,7 +39,67 @@ 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 sztandarowej + + + + Pomoc nauczycielowi + + + + Wolontariat + + +
@@ -60,167 +111,53 @@ -
- - - - - -
-
+ +

Wybierz klasę:

- - -
-

Frekwencja

- - - - - - - - - - - - - - - -
Frekwencja 95-100%Brak godzin nieusprawiedliwionychMinimum 85% frekwencja
.........
-
- - -
-

Olimpiady

- - - - - - - - - - - - - - - - - -
Etap szkolnyEtap rejonowyEtap wojewódzkiEtap ogólnopolski
............
-
- - -
-

Konkursy Szkolne

- - - - - - - - - - - - - -
Udział w konkursachWyróżnienie w konkursie
......
-
- - -
-

Reprezentacja Szkoły

- - - - - - - - - - - - - - - -
Reprezentacja indywidualnaReprezentacja zespołowaUdział w zawodach
.........
-
- - -
-

Aktywność

- - - - - - - - - - - - - - - - - - - - - -
Organizacja imprezFunkcje w klasieUroczystości okolicznościoweUdział w poczcie sztandarowymPomoc nauczycielowiWolontariat
..................
+
+ + + + +
+
+ + + + + + + + + + + +

Statystyka dla wszystkich dni

-
+
+ B. Hrynowiecki
K. Michalak
F. Kowalski
Led and Authored by M. Pabiszczak
- + + diff --git a/js/script.js b/js/script.js index 67fb87c..eee3c2e 100644 --- a/js/script.js +++ b/js/script.js @@ -1,11 +1,39 @@ -//Funkcja do sprawdzania ktora klasa jest wybrana w SELECT +// 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" } + ] +}; -function selected_class() { +// Zmienna przechowująca aktualną kategorię +let currentCategory = 'frekwencja'; -} - - -// Funkcja do wczytania pliku JSON +// Funkcja do wczytywania pliku JSON async function fetchJSONFile(filePath) { try { const response = await fetch(filePath); @@ -26,62 +54,44 @@ async function loadClasses() { if (classes) { console.log('Classes loaded:', classes); - var section_HTML = "" + let section_HTML = ""; // Iterowanie po wszystkich klasach i wczytywanie plików z danymi uczniów for (const classInfo of classes) { - const studentsFilePath = '/data/'+ classInfo.file_path; - const studentsData = await fetchJSONFile(studentsFilePath); + const studentsFilePath = '/data/' + classInfo.file_path; + const studentsDataFromFile = await fetchJSONFile(studentsFilePath); // Wczytywanie klas do elementu select w html + const selectClass = document.getElementById("select-class-select"); - const section_by_id = document.getElementById("select-class") - if (!section_HTML.includes(classInfo.class)) { - const section_option = "" - section_HTML += section_option; - console.log("DODANO KLASE ", classInfo.class, " DO SELECT") - section_by_id.innerHTML = section_HTML + const option = document.createElement('option'); + option.value = classInfo.class; + option.textContent = `Klasa: ${classInfo.class}`; + selectClass.appendChild(option); + console.log("DODANO KLASE ", classInfo.class, " DO SELECT"); + section_HTML += classInfo.class; } - if (studentsData) { - console.log(`Students loaded for class ${classInfo.class}:`, studentsData); - // Tutaj możesz przechowywać dane lub je przetwarzać według potrzeb - processClassData(classInfo, studentsData); - - - + if (studentsDataFromFile) { + console.log(`Students loaded for class ${classInfo.class}:`, studentsDataFromFile); + // Możesz tutaj przechowywać dane uczniów dla poszczególnych klas + // Na przykład, dodając je do odpowiedniego obiektu lub tablicy } } } } -async function loadCriteria () { +// Funkcja do wczytania pliku criteria.json +async function loadCriteria() { const criteriaFilePath = '/data/criteria.json'; const criteria = await fetchJSONFile(criteriaFilePath); - console.log ("break") + console.log("Criteria loaded:", criteria); + // Implementacja dalszego przetwarzania kryteriów, jeśli jest potrzebna } -const classData = [] - -// Funkcja do przetwarzania danych o klasach i uczniach -function processClassData(classInfo, studentsData) { - console.log(`Class: ${classInfo.class}, Group: ${classInfo.group}, Students Count: ${classInfo.student_count}`); - console.log('Student Data:', studentsData); - classData.push(studentsData) - // Możesz tutaj np. wyświetlić dane w interfejsie lub przeprowadzić dodatkowe operacje -} - -// Uruchomienie wczytywania klas -loadClasses(); -loadCriteria(); -// -// -// - -let currentDay = 0; -const baseDate = new Date(); +// Dane uczniów (przykładowe, powinny być ładowane z plików JSON) const studentsData = [ { name: "Jan Kowalski", behavior: {} }, { name: "Anna Nowak", behavior: {} }, @@ -89,10 +99,20 @@ const studentsData = [ { name: "Katarzyna Zielińska", behavior: {} } ]; +let currentDay = 0; +const baseDate = new Date(); + +// 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(); @@ -101,57 +121,34 @@ function showTab(tabName) { } } -async function changeClass() { - await loadClasses() - let classesNames = [] -for (const classInfo of classData) { - console.log(classInfo) - classesNames.push(classInfo.header.class + "-" + classInfo.header.group) -} -console.log("lol") -console.log(classesNames) - +// Funkcja do przełączania kategorii w tabeli uczniów +function showInnerTab(category) { + currentCategory = category; + // Generowanie tabeli na podstawie wybranej kategorii + generateTable(category); + + // 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'); + } } +// Funkcja, aby ustawić domyślną kategorię i zakładkę +document.addEventListener("DOMContentLoaded", function() { + showInnerTab('frekwencja'); // Pokaż domyślnie zakładkę Frekwencja + // Ustawienie daty na dziś + document.getElementById('current-date').innerText = baseDate.toLocaleDateString(); -function generateTable() { - changeClass() - const table = document.getElementById('student-table'); - table.innerHTML = ''; - - //xd - - studentsData.forEach(student => { - const row = document.createElement('tr'); - row.innerHTML = ` - - - - ${student.name} - - - - - - - - - - - - - - - - - - - `; - table.appendChild(row); - }); -} + // Uruchomienie wczytywania klas i kryteriów + loadClasses(); + loadCriteria(); +}); +// Funkcja do zmiany dnia function changeDay(direction) { saveDayData(); currentDay += direction; @@ -161,81 +158,49 @@ function changeDay(direction) { loadDayData(); } +// Funkcja do ładowania danych dnia function loadDayData() { - studentsData.forEach(student => { - const studentId = student.name.replace(' ', '-'); - 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; - }); - + // Wczytaj dane dla aktualnego dnia, jeśli istnieją + // Możesz tu zaimplementować dodatkową logikę, jeśli potrzebujesz calculateStats(); } +// Funkcja do zapisywania danych dnia function saveDayData() { studentsData.forEach(student => { - const studentId = student.name.replace(' ', '-'); - 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_nauciciel: document.getElementById(`pomoc-nauczyciel-${studentId}`).checked, - wolontariat: document.getElementById(`wolontariat-${studentId}`).checked - }; + const studentId = student.name.replace(/ /g, '-'); + const behavior = student.behavior[`day${currentDay}`] || {}; + + const categoryColumns = categories[currentCategory]; + + categoryColumns.forEach(column => { + behavior[column.id] = document.getElementById(`${column.id}-${studentId}`).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ść + const frekwencjaPoints = parseInt(document.getElementById('frekwencja-punkty').value) || 0; + const brakGodzinPoints = parseInt(document.getElementById('brak-godzin-punkty').value) || 0; + const min85Points = parseInt(document.getElementById('min-85-punkty').value) || 0; + const etapSzkolnyPoints = parseInt(document.getElementById('etap-szkolny-punkty')?.value) || 5; + const etapRejonowyPoints = parseInt(document.getElementById('etap-rejonowy-punkty')?.value) || 10; + const etapWojewodzkiPoints = parseInt(document.getElementById('etap-wojewodzki-punkty')?.value) || 15; + const etapOgolnopolskiPoints = parseInt(document.getElementById('etap-ogolnopolski-punkty')?.value) || 20; + const udzialKonkursPoints = parseInt(document.getElementById('udzial-konkurs-punkty')?.value) || 5; + const wyroznienieKonkursPoints = parseInt(document.getElementById('wyroznienie-konkurs-punkty')?.value) || 10; + const reprezentacjaIndPoints = parseInt(document.getElementById('reprezentacja-indywidualna-punkty')?.value) || 5; + const reprezentacjaZesPoints = parseInt(document.getElementById('reprezentacja-zespolowa-punkty')?.value) || 10; + const udzialZawodyPoints = parseInt(document.getElementById('udzial-zawody-punkty')?.value) || 15; + const organizacjaImprezPoints = parseInt(document.getElementById('organizacja-imprez-punkty')?.value) || 10; + const funkcjaKlasyPoints = parseInt(document.getElementById('funkcja-klasa-punkty')?.value) || 10; + const uroczystosciPoints = parseInt(document.getElementById('uroczystosci-punkty')?.value) || 10; + const pocztaSztandarPoints = parseInt(document.getElementById('poczta-sztandar-punkty')?.value) || 20; + const pomocNauczycielaPoints = parseInt(document.getElementById('pomoc-nauczyciel-punkty')?.value) || 10; + const wolontariatPoints = parseInt(document.getElementById('wolontariat-punkty')?.value) || 10; let stats = ''; @@ -262,7 +227,7 @@ function calculateStats() { if (behavior.funkcja_klasa) dayPoints += funkcjaKlasyPoints; if (behavior.uroczystosci) dayPoints += uroczystosciPoints; if (behavior.poczta_sztandar) dayPoints += pocztaSztandarPoints; - if (behavior.pomoc_nauciciel) dayPoints += pomocNauczycielaPoints; + if (behavior.pomoc_nauczyciel) dayPoints += pomocNauczycielaPoints; if (behavior.wolontariat) dayPoints += wolontariatPoints; totalPoints += dayPoints; @@ -271,9 +236,10 @@ function calculateStats() { stats += `${student.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"; @@ -283,8 +249,57 @@ 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'); -// Generowanie tabeli przy starcie -generateTable(); \ No newline at end of file + // Clear existing headers and body + thead.innerHTML = ''; + tbody.innerHTML = ''; + + // Add 'Imię i Nazwisko' header + const thName = document.createElement('th'); + thName.textContent = "Imię i Nazwisko"; + thead.appendChild(thName); + + // Get columns for the category + const categoryColumns = categories[category]; + + // Add headers for category + categoryColumns.forEach(column => { + const th = document.createElement('th'); + th.textContent = column.name; + thead.appendChild(th); + }); + + // Generate rows + studentsData.forEach(student => { + const row = document.createElement('tr'); + + // Name cell + const tdName = document.createElement('td'); + tdName.textContent = student.name; + row.appendChild(tdName); + + // Checkbox cells + categoryColumns.forEach(column => { + const td = document.createElement('td'); + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.id = `${column.id}-${student.name.replace(/ /g, '-')}`; + checkbox.onchange = calculateStats; + + // Ustawienie stanu checkboxa na podstawie zapisanych danych + if (student.behavior[`day${currentDay}`] && student.behavior[`day${currentDay}`][column.id]) { + checkbox.checked = student.behavior[`day${currentDay}`][column.id]; + } + + td.appendChild(checkbox); + row.appendChild(td); + }); + + tbody.appendChild(row); + }); +} From a211321c8430ed0b085ced2119fd42755ee3a808 Mon Sep 17 00:00:00 2001 From: konradm Date: Thu, 17 Oct 2024 14:14:38 +0200 Subject: [PATCH 5/8] =?UTF-8?q?commit=20//=20Generuj=20wiersze=20dla=20ucz?= =?UTF-8?q?ni=C3=B3w=20studentsData.forEach(student=20=3D>=20{=20=20=20=20?= =?UTF-8?q?=20const=20row=20=3D=20document.createElement('tr');?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // Komórka z imieniem i nazwiskiem const tdName = document.createElement('td'); tdName.textContent = student.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'; checkbox.id = `${column.id}-${student.name.replace(/ /g, '-')}`; checkbox.onchange = calculateStats; // Ustawienie stanu checkboxa na podstawie zapisanych danych if (student.behavior[`day${currentDay}`] && student.behavior[`day${currentDay}`][column.id]) { checkbox.checked = student.behavior[`day${currentDay}`][column.id]; } else { checkbox.checked = false; } td.appendChild(checkbox); row.appendChild(td); }); tbody.appendChild(row); }); --- index.html | 41 +++++------ js/app.js | 0 js/script.js | 149 ++++++++++++++++++++++---------------- p1/token.txt | 1 - templates/criteria.html | 7 -- templates/dashboard.html | 51 ------------- templates/header.html | 12 --- templates/statistics.html | 27 ------- 8 files changed, 106 insertions(+), 182 deletions(-) delete mode 100644 js/app.js delete mode 100644 p1/token.txt delete mode 100644 templates/criteria.html delete mode 100644 templates/dashboard.html delete mode 100644 templates/header.html delete mode 100644 templates/statistics.html diff --git a/index.html b/index.html index d6f1fe3..0be4322 100644 --- a/index.html +++ b/index.html @@ -27,6 +27,7 @@ + Frekwencja 95-100% @@ -41,47 +42,47 @@ 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 @@ -89,17 +90,16 @@ Udział w poczcie sztandarowej - + Pomoc nauczycielowi - + Wolontariat -
@@ -122,11 +122,9 @@ @@ -134,11 +132,12 @@ - + + - +
Imię i Nazwisko
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 eee3c2e..eb68634 100644 --- a/js/script.js +++ b/js/script.js @@ -54,30 +54,33 @@ async function loadClasses() { if (classes) { console.log('Classes loaded:', classes); - let section_HTML = ""; + const selectClass = document.getElementById("select-class-select"); + selectClass.innerHTML = ""; // Clear existing options - // Iterowanie po wszystkich klasach i wczytywanie plików z danymi uczniów - for (const classInfo of classes) { - const studentsFilePath = '/data/' + classInfo.file_path; - const studentsDataFromFile = await fetchJSONFile(studentsFilePath); + classes.forEach(classInfo => { + const option = document.createElement('option'); + option.value = classInfo.class; + option.textContent = `Klasa: ${classInfo.class}`; + selectClass.appendChild(option); + console.log("DODANO KLASE ", classInfo.class, " DO SELECT"); + }); - // Wczytywanie klas do elementu select w html - const selectClass = document.getElementById("select-class-select"); + // Add event listener for class selection + 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 + }); - if (!section_HTML.includes(classInfo.class)) { - const option = document.createElement('option'); - option.value = classInfo.class; - option.textContent = `Klasa: ${classInfo.class}`; - selectClass.appendChild(option); - console.log("DODANO KLASE ", classInfo.class, " DO SELECT"); - section_HTML += classInfo.class; - } - - if (studentsDataFromFile) { - console.log(`Students loaded for class ${classInfo.class}:`, studentsDataFromFile); - // Możesz tutaj przechowywać dane uczniów dla poszczególnych klas - // Na przykład, dodając je do odpowiedniego obiektu lub tablicy - } + // Optionally, set a default selected class + if (classes.length > 0) { + selectClass.value = classes[0].class; + // Load students for the first class + // loadStudents(classes[0].class); } } } @@ -92,13 +95,27 @@ async function loadCriteria() { } // Dane uczniów (przykładowe, powinny być ładowane z plików JSON) -const studentsData = [ +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(); @@ -138,7 +155,8 @@ function showInnerTab(category) { // Funkcja, aby ustawić domyślną kategorię i zakładkę document.addEventListener("DOMContentLoaded", function() { - showInnerTab('frekwencja'); // Pokaż domyślnie zakładkę Frekwencja + // Domyślnie pokazujemy kategorię 'frekwencja' + showInnerTab('frekwencja'); // Ustawienie daty na dziś document.getElementById('current-date').innerText = baseDate.toLocaleDateString(); @@ -160,8 +178,20 @@ function changeDay(direction) { // Funkcja do ładowania danych dnia function loadDayData() { - // Wczytaj dane dla aktualnego dnia, jeśli istnieją - // Możesz tu zaimplementować dodatkową logikę, jeśli potrzebujesz + studentsData.forEach(student => { + const studentId = student.name.replace(/ /g, '-'); + const behavior = student.behavior[`day${currentDay}`] || {}; + + // Get criteria for the current category + const categoryColumns = categories[currentCategory]; + categoryColumns.forEach(column => { + const checkbox = document.getElementById(`${column.id}-${studentId}`); + if (checkbox) { + checkbox.checked = behavior[column.id] || false; + } + }); + }); + calculateStats(); } @@ -174,7 +204,10 @@ function saveDayData() { const categoryColumns = categories[currentCategory]; categoryColumns.forEach(column => { - behavior[column.id] = document.getElementById(`${column.id}-${studentId}`).checked; + const checkbox = document.getElementById(`${column.id}-${studentId}`); + if (checkbox) { + behavior[column.id] = checkbox.checked; + } }); student.behavior[`day${currentDay}`] = behavior; @@ -183,24 +216,27 @@ function saveDayData() { // Funkcja do obliczania statystyk function calculateStats() { - const frekwencjaPoints = parseInt(document.getElementById('frekwencja-punkty').value) || 0; - const brakGodzinPoints = parseInt(document.getElementById('brak-godzin-punkty').value) || 0; - const min85Points = parseInt(document.getElementById('min-85-punkty').value) || 0; - const etapSzkolnyPoints = parseInt(document.getElementById('etap-szkolny-punkty')?.value) || 5; - const etapRejonowyPoints = parseInt(document.getElementById('etap-rejonowy-punkty')?.value) || 10; - const etapWojewodzkiPoints = parseInt(document.getElementById('etap-wojewodzki-punkty')?.value) || 15; - const etapOgolnopolskiPoints = parseInt(document.getElementById('etap-ogolnopolski-punkty')?.value) || 20; - const udzialKonkursPoints = parseInt(document.getElementById('udzial-konkurs-punkty')?.value) || 5; - const wyroznienieKonkursPoints = parseInt(document.getElementById('wyroznienie-konkurs-punkty')?.value) || 10; - const reprezentacjaIndPoints = parseInt(document.getElementById('reprezentacja-indywidualna-punkty')?.value) || 5; - const reprezentacjaZesPoints = parseInt(document.getElementById('reprezentacja-zespolowa-punkty')?.value) || 10; - const udzialZawodyPoints = parseInt(document.getElementById('udzial-zawody-punkty')?.value) || 15; - const organizacjaImprezPoints = parseInt(document.getElementById('organizacja-imprez-punkty')?.value) || 10; - const funkcjaKlasyPoints = parseInt(document.getElementById('funkcja-klasa-punkty')?.value) || 10; - const uroczystosciPoints = parseInt(document.getElementById('uroczystosci-punkty')?.value) || 10; - const pocztaSztandarPoints = parseInt(document.getElementById('poczta-sztandar-punkty')?.value) || 20; - const pomocNauczycielaPoints = parseInt(document.getElementById('pomoc-nauczyciel-punkty')?.value) || 10; - const wolontariatPoints = parseInt(document.getElementById('wolontariat-punkty')?.value) || 10; + // 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 = ''; @@ -210,25 +246,12 @@ function calculateStats() { Object.keys(student.behavior).forEach(day => { const behavior = student.behavior[day]; - let dayPoints = 0; // Startowa liczba punktów - 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; + let dayPoints = 0; + for (const [criterion, value] of Object.entries(behavior)) { + if (value && points[criterion]) { + dayPoints += points[criterion]; + } + } totalPoints += dayPoints; }); 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 @@ -
-

Kryteria Weryfikacyjne

-
    - -
-
- 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 @@ - - - - - - Behavior Assessment Dashboard - - - -

Behavior Assessment Dashboard

- -
- - - - - - - - - - - -
- -

Criteria Table

- - - - - - - - - - -
Student
- - - - - diff --git a/templates/header.html b/templates/header.html deleted file mode 100644 index 41adefc..0000000 --- a/templates/header.html +++ /dev/null @@ -1,12 +0,0 @@ -
-

Ocena Zachowania

-

Zalogowany jako: Nauczyciel

-
- - - diff --git a/templates/statistics.html b/templates/statistics.html deleted file mode 100644 index ce95227..0000000 --- a/templates/statistics.html +++ /dev/null @@ -1,27 +0,0 @@ -
-

Statystyki i Ustalanie Wag

- - -
- - -
- - - -

Statystyki dla uczniów

- - - - - - - - - - - - -
UczeńPunktyOcena
-
- From e0ba11b0e9620841c10b33842568fade0432424a Mon Sep 17 00:00:00 2001 From: konradm Date: Thu, 17 Oct 2024 14:15:45 +0200 Subject: [PATCH 6/8] 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'); From 32449be5316ec1d251444ce872c286a4412f830e Mon Sep 17 00:00:00 2001 From: konradm Date: Thu, 17 Oct 2024 14:24:08 +0200 Subject: [PATCH 7/8] first name last name --- index.html | 12 ++++++------ js/script.js | 32 ++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/index.html b/index.html index 1dcf3aa..c0e00fc 100644 --- a/index.html +++ b/index.html @@ -26,18 +26,18 @@ - + - + - + @@ -147,9 +147,9 @@
- B. Hrynowiecki
- K. Michalak
- F. Kowalski
+ B. Hrynowiecki
+ K. Michalak
+ F. Kowalski
Led and Authored by M. Pabiszczak
diff --git a/js/script.js b/js/script.js index e8c43ef..b9faca1 100644 --- a/js/script.js +++ b/js/script.js @@ -117,8 +117,6 @@ async function loadStudents(classFilePath) { } } - - // Funkcja do wczytania pliku criteria.json async function loadCriteria() { const criteriaFilePath = '/data/criteria.json'; @@ -188,7 +186,7 @@ function changeDay(direction) { // Funkcja do ładowania danych dnia function loadDayData() { studentsData.forEach(student => { - const studentId = student.name.replace(/ /g, '-'); + const studentId = `${student.first_name}-${student.last_name}`.replace(/ /g, '-'); const behavior = student.behavior[`day${currentDay}`] || {}; // Pobierz kryteria dla aktualnej kategorii @@ -207,7 +205,13 @@ function loadDayData() { // Funkcja do zapisywania danych dnia function saveDayData() { studentsData.forEach(student => { - const studentId = student.name.replace(/ /g, '-'); + 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]; @@ -228,8 +232,8 @@ function calculateStats() { // 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, + 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, @@ -265,7 +269,7 @@ function calculateStats() { 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-output').innerText = stats; @@ -312,21 +316,25 @@ function generateTable(category) { // Komórka z imieniem i nazwiskiem const tdName = document.createElement('td'); - tdName.textContent = student.name; + 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'; - checkbox.id = `${column.id}-${student.name.replace(/ /g, '-')}`; + 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 - if (student.behavior[`day${currentDay}`] && student.behavior[`day${currentDay}`][column.id]) { - checkbox.checked = student.behavior[`day${currentDay}`][column.id]; - } + checkbox.checked = student.behavior[`day${currentDay}`]?.[column.id] || false; td.appendChild(checkbox); row.appendChild(td); From 9faf9bdb96f275f87ea3ea119d4c1be4570793d7 Mon Sep 17 00:00:00 2001 From: konradm Date: Thu, 17 Oct 2024 14:39:47 +0200 Subject: [PATCH 8/8] linia --- css/style.css | 64 +++++++++++++++++++++++++++++++++++++++++++++++---- index.html | 16 +++++++++---- 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/css/style.css b/css/style.css index d906f02..7b31771 100644 --- a/css/style.css +++ b/css/style.css @@ -1,4 +1,3 @@ - /* Podstawowe style dla zakładek */ .tab { display: none; @@ -22,6 +21,7 @@ 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 { @@ -60,6 +60,8 @@ tr:nth-child(even) { .select-class select { padding: 5px; font-size: 16px; + border: 1px solid #ccc; + border-radius: 4px; } /* Stylizacja nagłówków */ @@ -71,11 +73,63 @@ h1, h2, h3 { body { font-family: Arial, sans-serif; margin: 20px; + background-color: #fafafa; } -footer { - text-align: center; - margin-top: 40px; - font-size: 14px; +/* 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 c0e00fc..a4a4215 100644 --- a/index.html +++ b/index.html @@ -35,6 +35,7 @@ + @@ -146,11 +147,16 @@
-
- B. Hrynowiecki
- K. Michalak
- F. Kowalski
- Led and Authored by M. Pabiszczak +
+ + +
Frekwencja 95-100%
Brak godzin nieusprawiedliwionych
Minimum 85% frekwencja
Etap szkolny Brak godzin nieusprawiedliwionych
Minimum 85% frekwencja