2023-08-02 17:12:15 +00:00
|
|
|
'use strict';
|
2023-08-08 16:08:44 +00:00
|
|
|
|
2024-05-12 22:02:26 +00:00
|
|
|
document.getElementById('kumoa').addEventListener('click', () => {
|
2024-05-17 12:34:23 +00:00
|
|
|
suorita(_tietokanta.kumoa());
|
2023-08-08 16:08:44 +00:00
|
|
|
});
|
|
|
|
|
2024-05-18 16:57:20 +00:00
|
|
|
document.getElementById('luokat-uusi').addEventListener('submit', (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
suorita(_tietokanta.transaktio((t) => {
|
|
|
|
const luokanNimi = document.getElementById('luokat-uusi-nimi').value;
|
2024-05-19 11:18:37 +00:00
|
|
|
if (luokanNimi !== '') {
|
|
|
|
t.lisää(taulut.luokat, luokanNimi)
|
|
|
|
document.getElementById('luokat-uusi-nimi').value = '';
|
|
|
|
}
|
2024-05-18 16:57:20 +00:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
2024-05-21 10:55:23 +00:00
|
|
|
document.getElementById('opettajat-uusi').addEventListener('submit', (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
suorita(_tietokanta.transaktio((t) => {
|
|
|
|
const nimi = document.getElementById('opettajat-uusi-nimi').value;
|
|
|
|
const lyhenne = document.getElementById('opettajat-uusi-lyhenne').value;
|
|
|
|
if (nimi !== '' || lyhenne !== '') {
|
|
|
|
t.lisää(taulut.opettajat, {nimi, lyhenne});
|
|
|
|
document.getElementById('opettajat-uusi-nimi').value = '';
|
|
|
|
document.getElementById('opettajat-uusi-lyhenne').value = '';
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
document.getElementById('opettajat-uusi-nimi').addEventListener('change', () => {
|
|
|
|
const nimi = document.getElementById('opettajat-uusi-nimi').value;
|
|
|
|
// TODO: Kunnollinen tuki grafeemiklustereille
|
|
|
|
// TODO: Älä ehdota lyhennettä, joka on jo käytössä
|
|
|
|
const lyhenne = nimi.split(' ')
|
|
|
|
.map((x) => String.fromCodePoint(x.codePointAt(0))).join('');
|
|
|
|
document.getElementById('opettajat-uusi-lyhenne').value = lyhenne;
|
|
|
|
});
|
|
|
|
|
2024-05-17 12:32:19 +00:00
|
|
|
function suorita([tietokanta, muutokset]) {
|
2024-05-12 22:02:26 +00:00
|
|
|
for (const muutos of muutokset) {
|
2024-05-17 12:32:19 +00:00
|
|
|
suoritaMuutos(tietokanta, muutos);
|
2023-08-02 17:12:15 +00:00
|
|
|
}
|
2024-05-19 15:51:53 +00:00
|
|
|
tallennaTietokanta(tietokanta);
|
2023-08-02 17:12:15 +00:00
|
|
|
}
|
|
|
|
|
2024-05-17 12:32:19 +00:00
|
|
|
function suoritaMuutos(tietokanta, muutos) {
|
2024-05-12 22:02:26 +00:00
|
|
|
const {taulu, id, vanha, uusi} = muutos;
|
|
|
|
if (taulu === taulut.luokat && vanha === undefined) {
|
|
|
|
// Uusi luokka
|
2024-05-21 10:55:23 +00:00
|
|
|
const seuraavaId = idJälkeen(tietokanta, taulu, id, vertaa);
|
2024-05-12 22:02:26 +00:00
|
|
|
const luokatLista = document.getElementById('luokat-lista');
|
2024-05-17 12:32:19 +00:00
|
|
|
// getElementById palauttaa null:n, jos id:tä ei löydy. Jos tämä luokka
|
|
|
|
// on viimeinen, seuraavaId on undefined, eikä DOM:ssa ole luokkaa
|
|
|
|
// "luokka-undefined". seuraava on siis null silloin kuin tämä luokka
|
|
|
|
// tulee lisätä listan loppuun, joka vastaa insertBefore:n toimintaa
|
|
|
|
const seuraava = document.getElementById(`luokka-${seuraavaId}`);
|
|
|
|
luokatLista.insertBefore(luoLuokka(id, uusi), seuraava);
|
2024-05-12 22:02:26 +00:00
|
|
|
} else if (taulu === taulut.luokat && uusi === undefined) {
|
|
|
|
// Luokka poistettu
|
|
|
|
const luokka = document.getElementById(`luokka-${id}`);
|
|
|
|
luokka.parentElement.removeChild(luokka);
|
2024-05-21 10:55:23 +00:00
|
|
|
// TODO: luokka muutos
|
|
|
|
} else if (taulu === taulut.opettajat && vanha === undefined) {
|
|
|
|
// Uusi opettaja
|
|
|
|
const seuraavaId = idJälkeen(tietokanta, taulu, id,
|
|
|
|
(a, b) => vertaa(a.nimi, b.nimi)
|
|
|
|
);
|
|
|
|
const opettajatLista = document.getElementById('opettajat-lista');
|
|
|
|
// ks. kommentti uuden luokan tapauksessa
|
|
|
|
const seuraava = document.getElementById(`opettaja-${seuraavaId}`);
|
|
|
|
opettajatLista.insertBefore(luoOpettaja(id, uusi), seuraava);
|
|
|
|
} else if (taulu === taulut.opettajat && uusi === undefined) {
|
|
|
|
// Opettaja poistettu
|
|
|
|
const opettaja = document.getElementById(`opettaja-${id}`);
|
|
|
|
opettaja.parentElement.removeChild(opettaja);
|
|
|
|
// TODO: opettaja muutos
|
2024-05-12 22:02:26 +00:00
|
|
|
} else {
|
|
|
|
throw new Error(`Ei toteutettu ${taulu} ${id} ${vanha} ${uusi}`);
|
2023-08-08 16:08:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-21 10:55:23 +00:00
|
|
|
function idJälkeen(tietokanta, taulu, id, vertaa) {
|
|
|
|
const järjestys = tietokanta.järjestyksessä(taulu, vertaa);
|
|
|
|
return järjestys[järjestys.indexOf(id) + 1];
|
|
|
|
}
|
|
|
|
|
2024-05-17 12:32:19 +00:00
|
|
|
function vertaa(a, b) {
|
|
|
|
// TODO: Parempi vertailufunktio?
|
|
|
|
return a.localeCompare(b);
|
|
|
|
}
|
|
|
|
|
2024-05-12 22:02:26 +00:00
|
|
|
function luoLuokka(id, nimi) {
|
|
|
|
const li = document.createElement('li');
|
|
|
|
li.id = `luokka-${id}`;
|
2024-05-19 11:24:26 +00:00
|
|
|
const poistoPainike = document.createElement('input');
|
|
|
|
poistoPainike.type = 'button';
|
|
|
|
poistoPainike.value = '-';
|
|
|
|
poistoPainike.addEventListener('click', () => {
|
|
|
|
suorita(_tietokanta.transaktio((t) => {
|
|
|
|
t.poista(taulut.luokat, id);
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
li.appendChild(poistoPainike);
|
|
|
|
li.appendChild(document.createTextNode(nimi));
|
2024-05-12 22:02:26 +00:00
|
|
|
return li;
|
2023-08-02 17:12:15 +00:00
|
|
|
}
|
2024-05-21 10:55:23 +00:00
|
|
|
|
|
|
|
function luoOpettaja(id, {nimi, lyhenne}) {
|
|
|
|
const li = document.createElement('li');
|
|
|
|
li.id = `opettaja-${id}`;
|
|
|
|
const poistoPainike = document.createElement('input');
|
|
|
|
poistoPainike.type = 'button';
|
|
|
|
poistoPainike.value = '-';
|
|
|
|
poistoPainike.addEventListener('click', () => {
|
|
|
|
suorita(_tietokanta.transaktio((t) => {
|
|
|
|
t.poista(taulut.opettajat, id);
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
li.appendChild(poistoPainike);
|
|
|
|
li.appendChild(document.createTextNode(`${nimi} (${lyhenne})`));
|
|
|
|
return li;
|
|
|
|
}
|