Merge remote-tracking branch 'g/tom' into fk1810

This commit is contained in:
Tomasz 2024-10-18 14:25:48 +02:00
commit 388fcd43ee
3 changed files with 236 additions and 34 deletions

View File

@ -6,6 +6,26 @@
.tab.active {
display: block;
}
header {
display: flex;
justify-content: space-between;
align-items: right;
}
.header-box {
display: flex;
justify-content: space-between;
align-items: center;
background-color: cornflowerblue; /* Kolor tła nagłówka */
padding: 10px; /* Padding wewnętrzny dla lepszego wyglądu */
color: white; /* Kolor tekstu */
}
.up-button {
display: flex;
}
.header-title {
margin-left: auto; /* Przesuwa tytuł na prawo */
}
/* Style dla przycisków kategorii */
.category-buttons {
@ -35,6 +55,40 @@
border: 1px solid #4CAF50;
}
.up-button {
margin: 10px 0;
text-align: left;
}
.up-button 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;
}
.up-button button.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
.container {
display: flex;
flex-direction: column; /* Elementy jeden pod drugim */
align-items: flex-start; /* Ustawia elementy po lewej stronie */
margin-left: 20px; /* Możesz dostosować margines według potrzeb */
}
.select-role,
.select-class {
margin: 10px 0; /* Dostosuj odstęp między elementami */
}
/* Stylizacja tabeli */
table {
width: 100%;

View File

@ -19,6 +19,7 @@
}
</style>
</head>
<<<<<<< HEAD
<body class="dark-background">
<h1 class="lead" style="font-size: 48px;"><em>Ocena Zachowania</em></h1>
@ -29,8 +30,34 @@
<button onclick="showTab('criteria')">Ocena z zachowania</button>
<button onclick="showTab('stats')">Statystyka</button>
<button onclick="showTab('points')">Ustal punkty</button>
=======
<body>
<header class="header-box">
<div class="up-button">
<button class="active" onclick="showTab('criteria')">Ocena z zachowania</button>
<button class="active" onclick="showTab('stats')">Statystyka</button>
<button class="active" onclick="showTab('points')">Ustal punkty</button>
>>>>>>> g/tom
</div>
<h1 id="header-title" class="header-title">Ocena Zachowania</h1>
</header>
<div id="up-button-container" class="up-button" class="sa">
<button class="active" onclick="changeDay(-1)">Poprzedni Dzień</button>
<button class="active" onclick="changeDay(1)">Następny Dzień</button>
</div>
<div id="select-role-container" class="select-role" style="display: none;">
<p>Wybierz rolę:</p>
<select id="select-role" class="select-role">
<!-- Opcje będą ładowane dynamicznie -->
</select>
</div>
<div id="select-class-container" class="select-class" style="display: none;">
<p>Wybierz klasę:</p>
<select class="select-class" id="select-class-select">
<!-- Opcje będą ładowane dynamicznie -->
</select>
</div>
<!-- Zakładka "Ustal punkty" -->
<div id="points" class="tab">
<h2>Ustal punkty dla kryteriów</h2>
@ -120,32 +147,62 @@
</table>
</div>
<!-- Zakładka "Kryteria oceny zachowania" -->
<div id="criteria" class="tab active">
<h2>Kryteria oceny zachowania - <span id="current-date"></span></h2>
<div>
<button onclick="changeDay(-1)">Poprzedni Dzień</button>
<button onclick="changeDay(1)">Następny Dzień</button>
</div>
<!-- Zakładka "Kryteria oceny zachowania" -->
<div id="criteria" class="tab active">
<h2>Kryteria oceny zachowania - <span id="current-date"></span></h2>
<div class="select-role">
<p>Wybierz role:</p>
<select onchange="changeRole()" id="select-role" class="select-role">
<!-- Tabela uczniów -->
<table id="student-table">
<thead>
<tr>
<th>Imię i Nazwisko</th>
<!-- Dynamiczne kolumny będą generowane przez JavaScript -->
</tr>
</thead>
<tbody>
<!-- Wiersze uczniów będą generowane przez JavaScript -->
</tbody>
</table>
</select>
</div>
<div class="category-buttons">
<button data-category="frekwencja" onclick="showInnerTab('frekwencja')">Frekwencja</button>
<button data-category="olimpiady" onclick="showInnerTab('olimpiady')">Olimpiady</button>
<button data-category="konkursy" onclick="showInnerTab('konkursy')">Konkursy Szkolne</button>
<button data-category="reprezentacja" onclick="showInnerTab('reprezentacja')">Reprezentacja Szkoły</button>
<button data-category="aktywnosc" onclick="showInnerTab('aktywnosc')">Aktywność</button>
</div>
</div>
<div class="select-class" id="select-class-container">
<p>Wybierz klasę:</p>
<select class="select-class" id="select-class-select">
<!-- Opcje będą ładowane dynamicznie -->
</select>
</div>
<div class="category-buttons" id="category-buttons-box">
</div>
<!-- Zakładka "Statystyka" -->
<div id="stats" class="tab">
<h2>Statystyka dla wszystkich dni</h2>
<div id="stats-output"></div>
</div>
<!-- Zakładka "Ustal punkty" -->
<div id="points" class="tab">
<h2>Ustal punkty dla kryteriów</h2>
<table>
<thead>
<tr>
<th>Kryterium</th>
<th>Punkty</th>
</tr>
</thead>
<tbody>
<!-- Wiersze dla wszystkich kryteriów -->
<tr>
<td>Frekwencja 95-100%</td>
<td><input type="number" id="frekwencja-punkty" value="30" onchange="calculateStats()"></td>
</tr>
<tr>
<td>Brak godzin nieusprawiedliwionych</td>
<td><input type="number" id="brak_godzin-punkty" value="20" onchange="calculateStats()"></td>
</tr>
<!-- Dodaj pozostałe wiersze kryteriów tutaj -->
</tbody>
</table>
</div>
<!-- Tabela uczniów -->
<table id="student-table">
<thead>

View File

@ -7,6 +7,63 @@ let currentRole = "teacher"
let currentRoleCriterias = []
const baseDate = new Date();
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);
});
}
// Funkcja do wczytywania pliku JSON
async function fetchJSONFile(filePath) {
try {
@ -414,14 +471,48 @@ async function generateTable(category) {
tbody.appendChild(row);
});
}
function showTab(tabName) {
// Ukryj wszystkie zakładki
const tabs = document.querySelectorAll('.tab');
tabs.forEach(tab => tab.classList.remove('active'));
// Pokaż wybraną zakładkę
const selectedTab = document.getElementById(tabName);
if (selectedTab) {
selectedTab.classList.add('active');
}
// Zmieniaj tytuł nagłówka w zależności od wybranej zakładki
const headerTitle = document.getElementById('header-title');
const upButtonContainer = document.getElementById('up-button-container');
const selectRoleContainer = document.getElementById('select-role-container');
const selectClassContainer = document.getElementById('select-class-container');
switch (tabName) {
case 'criteria':
headerTitle.textContent = 'Ocena Zachowania';
generateTable(currentCategory); // Generuj tabelę dla aktualnej kategorii
upButtonContainer.style.display = 'block'; // Pokaż przyciski
selectRoleContainer.style.display = 'block'; // Pokaż wybór roli
selectClassContainer.style.display = 'block'; // Pokaż wybór klasy
break;
case 'stats':
headerTitle.textContent = 'Statystyka';
upButtonContainer.style.display = 'none'; // Ukryj przyciski
selectRoleContainer.style.display = 'none'; // Ukryj wybór roli
selectClassContainer.style.display = 'none'; // Ukryj wybór klasy
break;
case 'points':
headerTitle.textContent = 'Ustal punkty';
upButtonContainer.style.display = 'none'; // Ukryj przyciski
selectRoleContainer.style.display = 'none'; // Ukryj wybór roli
selectClassContainer.style.display = 'none'; // Ukryj wybór klasy
break;
default:
headerTitle.textContent = 'Ocena Zachowania';
upButtonContainer.style.display = 'none'; // Ukryj przyciski
selectRoleContainer.style.display = 'none'; // Ukryj wybór roli
selectClassContainer.style.display = 'none'; // Ukryj wybór klasy
}
}
//window.onscroll = function() {
// const stickyElements = document.querySelectorAll('.sticky');
//stickyElements.forEach(element => {
// if (window.pageYOffset > element.offsetTop) {
// element.classList.add('active');
// } else {
// element.classList.remove('active');
//}
//});
//};