lukujarjestaja/käyttöliittymä.js

55 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2023-08-02 17:12:15 +00:00
'use strict';
document.getElementById('kumoa').addEventListener('click', () => {
suorita(_tietokanta.kumoa());
});
document.getElementById('luokat-uusi').addEventListener('submit', (e) => {
e.preventDefault();
suorita(_tietokanta.transaktio((t) => {
const luokanNimi = document.getElementById('luokat-uusi-nimi').value;
t.lisää(taulut.luokat, luokanNimi)
document.getElementById('luokat-uusi-nimi').value = '';
}));
});
2024-05-17 12:32:19 +00:00
function suorita([tietokanta, muutokset]) {
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-17 12:32:19 +00:00
function suoritaMuutos(tietokanta, muutos) {
const {taulu, id, vanha, uusi} = muutos;
if (taulu === taulut.luokat && vanha === undefined) {
// Uusi luokka
2024-05-17 12:32:19 +00:00
const järjestys = tietokanta.järjestyksessä(taulu, vertaa);
const seuraavaId = järjestys[järjestys.indexOf(id) + 1];
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);
} else if (taulu === taulut.luokat && uusi === undefined) {
// Luokka poistettu
const luokka = document.getElementById(`luokka-${id}`);
luokka.parentElement.removeChild(luokka);
} else {
throw new Error(`Ei toteutettu ${taulu} ${id} ${vanha} ${uusi}`);
}
}
2024-05-17 12:32:19 +00:00
function vertaa(a, b) {
// TODO: Parempi vertailufunktio?
return a.localeCompare(b);
}
function luoLuokka(id, nimi) {
const li = document.createElement('li');
li.id = `luokka-${id}`;
li.textContent = nimi;
return li;
2023-08-02 17:12:15 +00:00
}