Compare commits
No commits in common. "c7b7d726d98d37c29b63921d8a4eb25618a05691" and "502ff75f0f4f51c842afd83aa0e9f7a5e5305a2b" have entirely different histories.
c7b7d726d9
...
502ff75f0f
4 changed files with 12 additions and 352 deletions
21
index.html
21
index.html
|
@ -43,9 +43,6 @@
|
||||||
#opettajat > li > span {
|
#opettajat > li > span {
|
||||||
margin-left: 0.5em;
|
margin-left: 0.5em;
|
||||||
}
|
}
|
||||||
#tunti-kertaa-viikossa {
|
|
||||||
width: 3em;
|
|
||||||
}
|
|
||||||
.piilotettu {
|
.piilotettu {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -78,24 +75,6 @@
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details class="ruutu" open>
|
|
||||||
<summary>Tunnit</summary>
|
|
||||||
<div>
|
|
||||||
<form id="lisää-tunti">
|
|
||||||
<label for="tunti-nimi">Nimi</label>
|
|
||||||
<input id="tunti-nimi" type="text" required>
|
|
||||||
<label for="tunti-luokka">Luokka</label>
|
|
||||||
<select id="tunti-luokka" required></select>
|
|
||||||
<label for="tunti-opettaja">Opettaja</label>
|
|
||||||
<select id="tunti-opettaja" required></select>
|
|
||||||
<input id="tunti-kertaa-viikossa" type="number" min="1" value="1">
|
|
||||||
<label for="tunti-kertaa-viikossa">kertaa viikossa</label>
|
|
||||||
<input type="submit" value="+">
|
|
||||||
</form>
|
|
||||||
<ul id="tunnit"></ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<script src="testit.js"></script>
|
<script src="testit.js"></script>
|
||||||
<script src="tietotyypit.js"></script>
|
<script src="tietotyypit.js"></script>
|
||||||
<script src="tietomalli.js"></script>
|
<script src="tietomalli.js"></script>
|
||||||
|
|
|
@ -10,7 +10,7 @@ document.getElementById('tee-uudelleen').addEventListener('click', () => {
|
||||||
|
|
||||||
document.getElementById('lisää-luokka-aste').addEventListener('click', () => {
|
document.getElementById('lisää-luokka-aste').addEventListener('click', () => {
|
||||||
suorita(tapahtumaTyypit.lisääAste);
|
suorita(tapahtumaTyypit.lisääAste);
|
||||||
piirräKaikki();
|
piirräLuokat();
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById('lisää-opettaja').addEventListener('submit', (tapahtuma) => {
|
document.getElementById('lisää-opettaja').addEventListener('submit', (tapahtuma) => {
|
||||||
|
@ -34,7 +34,7 @@ document.getElementById('lisää-opettaja').addEventListener('submit', (tapahtum
|
||||||
lyhenneElementti.value = '';
|
lyhenneElementti.value = '';
|
||||||
lyhenneElementti.placeholder = '';
|
lyhenneElementti.placeholder = '';
|
||||||
virheElementti.classList.add('piilotettu');
|
virheElementti.classList.add('piilotettu');
|
||||||
piirräKaikki();
|
piirräOpettajat();
|
||||||
} else if (toinenNimi === nimi) {
|
} else if (toinenNimi === nimi) {
|
||||||
virheElementti.firstChild.textContent =
|
virheElementti.firstChild.textContent =
|
||||||
`Opettaja ${nimi} on jo listassa`;
|
`Opettaja ${nimi} on jo listassa`;
|
||||||
|
@ -61,31 +61,9 @@ document.getElementById('opettaja-nimi').addEventListener('input', () => {
|
||||||
document.getElementById('opettaja-lyhenne').placeholder = lyhenne;
|
document.getElementById('opettaja-lyhenne').placeholder = lyhenne;
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById('lisää-tunti').addEventListener('submit', (tapahtuma) => {
|
|
||||||
tapahtuma.preventDefault();
|
|
||||||
let nimiElementti = document.getElementById('tunti-nimi');
|
|
||||||
let luokkaElementti = document.getElementById('tunti-luokka');
|
|
||||||
let opettajaElementti = document.getElementById('tunti-opettaja');
|
|
||||||
let kertaaViikossaElementti = document.getElementById('tunti-kertaa-viikossa');
|
|
||||||
|
|
||||||
let nimi = nimiElementti.value;
|
|
||||||
let luokka = luokkaElementti.value;
|
|
||||||
let opettajaLyhenne = opettajaElementti.value;
|
|
||||||
let kertaaViikossa = parseInt(kertaaViikossaElementti.value);
|
|
||||||
suorita(tapahtumaTyypit.lisääTunti, nimi, luokka, opettajaLyhenne, kertaaViikossa);
|
|
||||||
|
|
||||||
nimiElementti.value = '';
|
|
||||||
luokkaElementti.value = '';
|
|
||||||
opettajaElementti.value = '';
|
|
||||||
kertaaViikossaElementti.value = 1;
|
|
||||||
|
|
||||||
piirräKaikki();
|
|
||||||
});
|
|
||||||
|
|
||||||
function piirräKaikki() {
|
function piirräKaikki() {
|
||||||
piirräLuokat();
|
piirräLuokat();
|
||||||
piirräOpettajat();
|
piirräOpettajat();
|
||||||
piirräTunnit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function piirräLuokat() {
|
function piirräLuokat() {
|
||||||
|
@ -95,20 +73,6 @@ function piirräLuokat() {
|
||||||
luokkaAsteLista,
|
luokkaAsteLista,
|
||||||
vanhaLuokkaAsteLista
|
vanhaLuokkaAsteLista
|
||||||
);
|
);
|
||||||
|
|
||||||
let vanhaTuntiLuokkaValinta = document.getElementById('tunti-luokka');
|
|
||||||
let tuntiLuokkaValinta = document.createElement('select');
|
|
||||||
tuntiLuokkaValinta.id = 'tunti-luokka';
|
|
||||||
for (let luokka of luokkaAsteet.luokat()) {
|
|
||||||
let valinta = document.createElement('option');
|
|
||||||
valinta.appendChild(document.createTextNode(luokka));
|
|
||||||
tuntiLuokkaValinta.appendChild(valinta);
|
|
||||||
}
|
|
||||||
tuntiLuokkaValinta.value = '';
|
|
||||||
vanhaTuntiLuokkaValinta.parentNode.replaceChild(
|
|
||||||
tuntiLuokkaValinta,
|
|
||||||
vanhaTuntiLuokkaValinta
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function luoLuokkaAsteLista() {
|
function luoLuokkaAsteLista() {
|
||||||
|
@ -131,7 +95,7 @@ function luoLuokkaAsteListassa(aste) {
|
||||||
|
|
||||||
luokkaAsteListassa.appendChild(luoPainike('+', () => {
|
luokkaAsteListassa.appendChild(luoPainike('+', () => {
|
||||||
suorita(tapahtumaTyypit.lisääLuokka, aste);
|
suorita(tapahtumaTyypit.lisääLuokka, aste);
|
||||||
piirräKaikki();
|
piirräLuokat();
|
||||||
}));
|
}));
|
||||||
luokkaAsteListassa.appendChild(luoPainike('-', () => {
|
luokkaAsteListassa.appendChild(luoPainike('-', () => {
|
||||||
if (luokkaAsteet.asteet[aste].luokat().length > 1) {
|
if (luokkaAsteet.asteet[aste].luokat().length > 1) {
|
||||||
|
@ -139,7 +103,7 @@ function luoLuokkaAsteListassa(aste) {
|
||||||
} else {
|
} else {
|
||||||
suorita(tapahtumaTyypit.poistaAste, aste);
|
suorita(tapahtumaTyypit.poistaAste, aste);
|
||||||
}
|
}
|
||||||
piirräKaikki();
|
piirräLuokat();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
luokkaAsteListassa.appendChild(luoLuokkaLista(aste));
|
luokkaAsteListassa.appendChild(luoLuokkaLista(aste));
|
||||||
|
@ -169,7 +133,7 @@ function luoLuokkaAsteListassa(aste) {
|
||||||
let uusiAste = parseInt(asteValitsin.value);
|
let uusiAste = parseInt(asteValitsin.value);
|
||||||
if (luokkaAsteet.asteet[uusiAste] === undefined || aste === uusiAste) {
|
if (luokkaAsteet.asteet[uusiAste] === undefined || aste === uusiAste) {
|
||||||
suorita(tapahtumaTyypit.muutaAste, aste, uusiAste);
|
suorita(tapahtumaTyypit.muutaAste, aste, uusiAste);
|
||||||
piirräKaikki();
|
piirräLuokat();
|
||||||
} else {
|
} else {
|
||||||
muokkausVirhe.firstChild.textContent =
|
muokkausVirhe.firstChild.textContent =
|
||||||
`Luokka-aste ${uusiAste} on jo olemassa.`;
|
`Luokka-aste ${uusiAste} on jo olemassa.`;
|
||||||
|
@ -207,21 +171,6 @@ function piirräOpettajat() {
|
||||||
opettajaLista,
|
opettajaLista,
|
||||||
vanhaOpettajaLista
|
vanhaOpettajaLista
|
||||||
);
|
);
|
||||||
|
|
||||||
let vanhaTuntiOpettajaValinta = document.getElementById('tunti-opettaja');
|
|
||||||
let tuntiOpettajaValinta = document.createElement('select');
|
|
||||||
tuntiOpettajaValinta.id = 'tunti-opettaja';
|
|
||||||
for (let [lyhenne, nimi] of opettajat.opettajat()) {
|
|
||||||
let valinta = document.createElement('option');
|
|
||||||
valinta.appendChild(document.createTextNode(nimi));
|
|
||||||
valinta.value = lyhenne;
|
|
||||||
tuntiOpettajaValinta.appendChild(valinta);
|
|
||||||
}
|
|
||||||
tuntiOpettajaValinta.value = '';
|
|
||||||
vanhaTuntiOpettajaValinta.parentNode.replaceChild(
|
|
||||||
tuntiOpettajaValinta,
|
|
||||||
vanhaTuntiOpettajaValinta
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function luoOpettajaLista() {
|
function luoOpettajaLista() {
|
||||||
|
@ -240,7 +189,7 @@ function luoOpettajaListassa(lyhenne, nimi) {
|
||||||
|
|
||||||
opettajaListassa.appendChild(luoPainike('-', () => {
|
opettajaListassa.appendChild(luoPainike('-', () => {
|
||||||
suorita(tapahtumaTyypit.poistaOpettaja, lyhenne);
|
suorita(tapahtumaTyypit.poistaOpettaja, lyhenne);
|
||||||
piirräKaikki();
|
piirräOpettajat();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let opettajanNimi = document.createElement('span');
|
let opettajanNimi = document.createElement('span');
|
||||||
|
@ -250,38 +199,6 @@ function luoOpettajaListassa(lyhenne, nimi) {
|
||||||
return opettajaListassa;
|
return opettajaListassa;
|
||||||
}
|
}
|
||||||
|
|
||||||
function piirräTunnit() {
|
|
||||||
let vanhaTuntiLista = document.getElementById('tunnit');
|
|
||||||
let tuntiLista = luoTuntiLista();
|
|
||||||
vanhaTuntiLista.parentNode.replaceChild(
|
|
||||||
tuntiLista,
|
|
||||||
vanhaTuntiLista
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function luoTuntiLista() {
|
|
||||||
let tuntiLista = document.createElement('ul');
|
|
||||||
tuntiLista.id = 'tunnit';
|
|
||||||
|
|
||||||
for (let [_, tunti] of tunnit.järjestyksessä()) {
|
|
||||||
let tuntiListassa = document.createElement('li');
|
|
||||||
let nimi = tunti.nimi;
|
|
||||||
let luokat = tunti.luokat.join(', ');
|
|
||||||
let opettajat = tunti.opettajaLyhenteet.join(', ');
|
|
||||||
let kertaaViikossa = tunti.kertaaViikossa;
|
|
||||||
let teksti;
|
|
||||||
if (kertaaViikossa === 1) {
|
|
||||||
teksti = `${nimi} ${luokat} ${opettajat}`;
|
|
||||||
} else {
|
|
||||||
teksti = `${nimi} ${luokat} ${opettajat} ×${kertaaViikossa}`;
|
|
||||||
}
|
|
||||||
tuntiListassa.appendChild(document.createTextNode(teksti));
|
|
||||||
tuntiLista.appendChild(tuntiListassa);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tuntiLista;
|
|
||||||
}
|
|
||||||
|
|
||||||
function luoPainike(teksti, funktio) {
|
function luoPainike(teksti, funktio) {
|
||||||
let painike = document.createElement('input');
|
let painike = document.createElement('input');
|
||||||
painike.type = 'button';
|
painike.type = 'button';
|
||||||
|
|
127
tietomalli.js
127
tietomalli.js
|
@ -9,9 +9,6 @@ const tapahtumaTyypit = {
|
||||||
|
|
||||||
lisääOpettaja: 'lisääOpettaja',
|
lisääOpettaja: 'lisääOpettaja',
|
||||||
poistaOpettaja: 'poistaOpettaja',
|
poistaOpettaja: 'poistaOpettaja',
|
||||||
|
|
||||||
lisääTunti: 'lisääTunti',
|
|
||||||
poistaTunti: 'poistaTunti',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Tapahtuma {
|
class Tapahtuma {
|
||||||
|
@ -22,7 +19,7 @@ class Tapahtuma {
|
||||||
}
|
}
|
||||||
|
|
||||||
let historia, tulevaisuus;
|
let historia, tulevaisuus;
|
||||||
let luokkaAsteet, opettajat, tunnit;
|
let luokkaAsteet, opettajat;
|
||||||
alustaMalli();
|
alustaMalli();
|
||||||
|
|
||||||
function alustaMalli() {
|
function alustaMalli() {
|
||||||
|
@ -30,7 +27,6 @@ function alustaMalli() {
|
||||||
tulevaisuus = [];
|
tulevaisuus = [];
|
||||||
luokkaAsteet = new LuokkaAsteet();
|
luokkaAsteet = new LuokkaAsteet();
|
||||||
opettajat = new Opettajat();
|
opettajat = new Opettajat();
|
||||||
tunnit = new Tunnit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function suorita(tyyppi, ...argumentit) {
|
function suorita(tyyppi, ...argumentit) {
|
||||||
|
@ -42,38 +38,11 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
break;
|
break;
|
||||||
case tapahtumaTyypit.poistaAste:
|
case tapahtumaTyypit.poistaAste:
|
||||||
assertEq('poistaAste argumentit määrä', argumentit.length, 1);
|
assertEq('poistaAste argumentit määrä', argumentit.length, 1);
|
||||||
let [poistettuAste] = argumentit;
|
paluuarvo = luokkaAsteet.poista(...argumentit)
|
||||||
luokkaAsteet.poista(poistettuAste);
|
|
||||||
// Poista poistettujen luokka-asteiden luokat tunneista
|
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
|
||||||
let luokat = [];
|
|
||||||
for (let luokka of tunti.luokat) {
|
|
||||||
let luokanAste = parseInt(luokka[0]);
|
|
||||||
if (luokanAste !== poistettuAste) {
|
|
||||||
luokat.push(luokka);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case tapahtumaTyypit.muutaAste:
|
case tapahtumaTyypit.muutaAste:
|
||||||
assertEq('muutaAste argumentit määrä', argumentit.length, 2);
|
assertEq('muutaAste argumentit määrä', argumentit.length, 2);
|
||||||
let [vanhaAste, uusiAste] = argumentit;
|
luokkaAsteet.muuta(...argumentit)
|
||||||
luokkaAsteet.muuta(vanhaAste, uusiAste);
|
|
||||||
// Muuta muutetut luokka-asteet tunneissa
|
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
|
||||||
let luokat = [];
|
|
||||||
for (let luokka of tunti.luokat) {
|
|
||||||
let luokanAste = parseInt(luokka[0]);
|
|
||||||
if (luokanAste === vanhaAste) {
|
|
||||||
let luokanLuokka = luokka.slice(1);
|
|
||||||
luokat.push(`${uusiAste}${luokanLuokka}`);
|
|
||||||
} else {
|
|
||||||
luokat.push(luokka);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case tapahtumaTyypit.lisääLuokka:
|
case tapahtumaTyypit.lisääLuokka:
|
||||||
|
@ -82,47 +51,16 @@ function suorita(tyyppi, ...argumentit) {
|
||||||
break;
|
break;
|
||||||
case tapahtumaTyypit.poistaLuokka:
|
case tapahtumaTyypit.poistaLuokka:
|
||||||
assertEq('poistaLuokka argumentit määrä', argumentit.length, 1);
|
assertEq('poistaLuokka argumentit määrä', argumentit.length, 1);
|
||||||
let [aste] = argumentit;
|
luokkaAsteet.asteet[argumentit[0]].poista();
|
||||||
luokkaAsteet.asteet[aste].poista();
|
|
||||||
// Poista luokka jota ei enää ole asteella tunneista
|
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
|
||||||
let luokat = [];
|
|
||||||
for (let luokka of tunti.luokat) {
|
|
||||||
if (luokkaAsteet.luokat().indexOf(luokka) !== -1) {
|
|
||||||
luokat.push(luokka);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tunnit.tunnit.get(id).luokat = luokat;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case tapahtumaTyypit.lisääOpettaja:
|
case tapahtumaTyypit.lisääOpettaja:
|
||||||
assertEq('lisääOpettaja argumentit määrä', argumentit.length, 2);
|
assertEq('lisääOpettaja argumentit määrä', argumentit.length, 2);
|
||||||
opettajat.lisää(...argumentit);
|
opettajat.lisää(argumentit[0], argumentit[1]);
|
||||||
break;
|
break;
|
||||||
case tapahtumaTyypit.poistaOpettaja:
|
case tapahtumaTyypit.poistaOpettaja:
|
||||||
assertEq('poistaOpettaja argumentit määrä', argumentit.length, 1);
|
assertEq('poistaOpettaja argumentit määrä', argumentit.length, 1);
|
||||||
let [poistettuOpettaja] = argumentit;
|
opettajat.poista(argumentit[0]);
|
||||||
opettajat.poista(poistettuOpettaja);
|
|
||||||
// Poista opettaja joita ei enää ole tunneista
|
|
||||||
for (let [id, tunti] of tunnit.tunnit) {
|
|
||||||
let opettajaLyhenteet = [];
|
|
||||||
for (let opettajaLyhenne of tunti.opettajaLyhenteet) {
|
|
||||||
if (opettajaLyhenne !== poistettuOpettaja) {
|
|
||||||
opettajaLyhenteet.push(opettajaLyhenne);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tunnit.tunnit.get(id).opettajaLyhenteet = opettajaLyhenteet;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case tapahtumaTyypit.lisääTunti:
|
|
||||||
assertEq('lisääTunti argumentit määrä', argumentit.length, 4);
|
|
||||||
paluuarvo = tunnit.lisää(...argumentit);
|
|
||||||
break;
|
|
||||||
case tapahtumaTyypit.poistaTunti:
|
|
||||||
assertEq('poistaTunti argumentit määrä', argumentit.length, 1);
|
|
||||||
tunnit.poista(...argumentit);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -167,13 +105,11 @@ testi('mallin alustaminen', () => {
|
||||||
tulevaisuus = undefined;
|
tulevaisuus = undefined;
|
||||||
luokkaAsteet = undefined;
|
luokkaAsteet = undefined;
|
||||||
opettajat = undefined;
|
opettajat = undefined;
|
||||||
tunnit = undefined;
|
|
||||||
alustaMalli();
|
alustaMalli();
|
||||||
assertNe('historia', historia, undefined);
|
assertNe('historia', historia, undefined);
|
||||||
assertNe('tulevaisuus', tulevaisuus, undefined);
|
assertNe('tulevaisuus', tulevaisuus, undefined);
|
||||||
assertNe('luokkaAsteet', luokkaAsteet, undefined);
|
assertNe('luokkaAsteet', luokkaAsteet, undefined);
|
||||||
assertNe('opettajat', opettajat, undefined);
|
assertNe('opettajat', opettajat, undefined);
|
||||||
assertNe('tunnit', tunnit, undefined);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
testi('tapahtumahistoria', () => {
|
testi('tapahtumahistoria', () => {
|
||||||
|
@ -274,54 +210,3 @@ testi('opettajien käsittely', () => {
|
||||||
suorita(tapahtumaTyypit.poistaOpettaja, 'MM');
|
suorita(tapahtumaTyypit.poistaOpettaja, 'MM');
|
||||||
assertEq('poistettua', opettajat.opettajat(), []);
|
assertEq('poistettua', opettajat.opettajat(), []);
|
||||||
});
|
});
|
||||||
|
|
||||||
testi('tuntien käsittely', () => {
|
|
||||||
alustaMalli();
|
|
||||||
suorita(tapahtumaTyypit.lisääAste);
|
|
||||||
suorita(tapahtumaTyypit.lisääAste, 5);
|
|
||||||
suorita(tapahtumaTyypit.lisääLuokka, 5);
|
|
||||||
suorita(tapahtumaTyypit.lisääOpettaja, 'KV', 'Kari Virtanen');
|
|
||||||
suorita(tapahtumaTyypit.lisääOpettaja, 'AS', 'Aili Savolainen');
|
|
||||||
suorita(tapahtumaTyypit.lisääOpettaja, 'MM', 'Maija Meikäläinen');
|
|
||||||
assertEq('aluksi', tunnit.järjestyksessä(), []);
|
|
||||||
|
|
||||||
assertEq('historia',
|
|
||||||
suorita(tapahtumaTyypit.lisääTunti, 'Historia', '5B', 'KV', 1),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
assertEq('äidinkieli',
|
|
||||||
suorita(tapahtumaTyypit.lisääTunti, 'Äidinkieli', '1A', 'AS', 3),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
assertEq('kuvataide',
|
|
||||||
suorita(tapahtumaTyypit.lisääTunti, 'Kuvataide', '5A', 'MM', 1),
|
|
||||||
2
|
|
||||||
);
|
|
||||||
assertEq('lisättyä pituus', tunnit.järjestyksessä().length, 3);
|
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaAste, 1);
|
|
||||||
assertEq('aste poistettua 0', tunnit.järjestyksessä()[0][1].luokat, ['5B']);
|
|
||||||
assertEq('aste poistettua 1', tunnit.järjestyksessä()[1][1].luokat, ['5A']);
|
|
||||||
assertEq('aste poistettua 2', tunnit.järjestyksessä()[2][1].luokat, []);
|
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.muutaAste, 5, 6);
|
|
||||||
assertEq('aste muutettua 0', tunnit.järjestyksessä()[0][1].luokat, ['6B']);
|
|
||||||
assertEq('aste muutettua 1', tunnit.järjestyksessä()[1][1].luokat, ['6A']);
|
|
||||||
assertEq('aste muutettua 2', tunnit.järjestyksessä()[2][1].luokat, []);
|
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaLuokka, 6);
|
|
||||||
assertEq('luokka poistettua 0', tunnit.järjestyksessä()[0][1].luokat, []);
|
|
||||||
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[1][1].luokat, ['6A']);
|
|
||||||
assertEq('luokka poistettua 1', tunnit.järjestyksessä()[2][1].luokat, []);
|
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaOpettaja, 'KV');
|
|
||||||
assertEq('opettaja poistettua 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet, []);
|
|
||||||
assertEq('opettaja poistettua 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet, ['MM']);
|
|
||||||
assertEq('opettaja poistettua 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet, ['AS']);
|
|
||||||
|
|
||||||
suorita(tapahtumaTyypit.poistaTunti, 0);
|
|
||||||
assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2);
|
|
||||||
|
|
||||||
alustaMalli();
|
|
||||||
// TODO: Luokkien ja opettajien listojen päivitys
|
|
||||||
});
|
|
||||||
|
|
121
tietotyypit.js
121
tietotyypit.js
|
@ -26,18 +26,6 @@ class LuokkaAste {
|
||||||
class LuokkaAsteet {
|
class LuokkaAsteet {
|
||||||
asteet = [];
|
asteet = [];
|
||||||
|
|
||||||
luokat() {
|
|
||||||
let luokat = [];
|
|
||||||
for (let aste = 0; aste < this.asteet.length; aste++) {
|
|
||||||
if (this.asteet[aste] !== undefined) {
|
|
||||||
for (let luokka of this.asteet[aste].luokat()) {
|
|
||||||
luokat.push(`${aste}${luokka}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return luokat;
|
|
||||||
}
|
|
||||||
|
|
||||||
seuraavaAste() {
|
seuraavaAste() {
|
||||||
// Seuraava aste on yksi suurinta listassa jo olevaa astetta isompi, tai
|
// Seuraava aste on yksi suurinta listassa jo olevaa astetta isompi, tai
|
||||||
// 1 jos listassa ei vielä ole asteita
|
// 1 jos listassa ei vielä ole asteita
|
||||||
|
@ -109,71 +97,6 @@ class Opettajat {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Tunti {
|
|
||||||
constructor(nimi, luokat, opettajaLyhenteet, kertaaViikossa) {
|
|
||||||
this.nimi = nimi;
|
|
||||||
this.luokat = luokat;
|
|
||||||
this.opettajaLyhenteet = opettajaLyhenteet;
|
|
||||||
this.kertaaViikossa = kertaaViikossa;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Tunnit {
|
|
||||||
tunnit = new Map();
|
|
||||||
#seuraavaId = 0;
|
|
||||||
|
|
||||||
lisää(nimi, luokka, opettajaLyhenne, kertaaViikossa) {
|
|
||||||
let id = this.#seuraavaId++;
|
|
||||||
this.tunnit.set(
|
|
||||||
id,
|
|
||||||
new Tunti(nimi, [luokka], [opettajaLyhenne], kertaaViikossa)
|
|
||||||
);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
poista(id) {
|
|
||||||
if (!this.tunnit.delete(id)) {
|
|
||||||
throw new Error(`ei tuntia ID:llä ${id}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
järjestyksessä() {
|
|
||||||
let tunnit = [];
|
|
||||||
for (let [id, tunti] of this.tunnit) {
|
|
||||||
tunnit.push([id, tunti]);
|
|
||||||
}
|
|
||||||
tunnit.sort((a, b) => {
|
|
||||||
let tulos = vertaa(a[1].nimi, b[1].nimi);
|
|
||||||
// TODO: Korjaa niin, että osaa verrata okein listoja
|
|
||||||
if (tulos === 0) {
|
|
||||||
tulos = vertaa(a[1].luokat, b[1].luokat);
|
|
||||||
}
|
|
||||||
// TODO: Korjaa niin, että osaa verrata okein listoja
|
|
||||||
if (tulos === 0) {
|
|
||||||
tulos = vertaa(a[1].opettajaLyhenteet, b[1].opettajaLyhenteet);
|
|
||||||
}
|
|
||||||
if (tulos === 0) {
|
|
||||||
tulos = vertaa(a[1].kertaaViikossa, b[1].kertaaViikossa);
|
|
||||||
}
|
|
||||||
if (tulos === 0) {
|
|
||||||
tulos = vertaa(a[0], b[0]);
|
|
||||||
}
|
|
||||||
return tulos;
|
|
||||||
});
|
|
||||||
return tunnit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function vertaa(a, b) {
|
|
||||||
if (a < b) {
|
|
||||||
return -1;
|
|
||||||
} else if (a > b) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
testi('seuraava aste', () => {
|
testi('seuraava aste', () => {
|
||||||
let luokkaAsteet = new LuokkaAsteet();
|
let luokkaAsteet = new LuokkaAsteet();
|
||||||
assertEq('aluksi', luokkaAsteet.seuraavaAste(), 1);
|
assertEq('aluksi', luokkaAsteet.seuraavaAste(), 1);
|
||||||
|
@ -198,7 +121,6 @@ testi('asteiden lisääminen', () => {
|
||||||
assertThrow('3. aste uudelleen', 'luokka-aste 3 on jo olemassa', () => {
|
assertThrow('3. aste uudelleen', 'luokka-aste 3 on jo olemassa', () => {
|
||||||
luokkaAsteet.lisää(3);
|
luokkaAsteet.lisää(3);
|
||||||
});
|
});
|
||||||
assertEq('lisättyä', luokkaAsteet.luokat(), ['1A', '2A', '3A']);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
testi('asteiden poistaminen', () => {
|
testi('asteiden poistaminen', () => {
|
||||||
|
@ -210,14 +132,12 @@ testi('asteiden poistaminen', () => {
|
||||||
assertThrow('3. asteen poisto', 'luokka-astetta 3 ei ole olemassa', () => {
|
assertThrow('3. asteen poisto', 'luokka-astetta 3 ei ole olemassa', () => {
|
||||||
luokkaAsteet.poista(3);
|
luokkaAsteet.poista(3);
|
||||||
});
|
});
|
||||||
assertEq('poistettua', luokkaAsteet.luokat(), []);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
testi('asteiden muuttaminen', () => {
|
testi('asteiden muuttaminen', () => {
|
||||||
let luokkaAsteet = new LuokkaAsteet();
|
let luokkaAsteet = new LuokkaAsteet();
|
||||||
assertEq('lisääminen', luokkaAsteet.lisää(), 1);
|
assertEq('lisääminen', luokkaAsteet.lisää(), 1);
|
||||||
luokkaAsteet.muuta(1, 5);
|
luokkaAsteet.muuta(1, 5);
|
||||||
assertEq('muutettua', luokkaAsteet.luokat(), ['5A']);
|
|
||||||
assertThrow('poisto', 'luokka-astetta 1 ei ole olemassa', () => {
|
assertThrow('poisto', 'luokka-astetta 1 ei ole olemassa', () => {
|
||||||
luokkaAsteet.poista(1);
|
luokkaAsteet.poista(1);
|
||||||
});
|
});
|
||||||
|
@ -293,44 +213,3 @@ testi('opettajien lyhenteen', () => {
|
||||||
assertEq('MaM', opettajat.lyhenne('MaM'), 'Matti Meikäläinen');
|
assertEq('MaM', opettajat.lyhenne('MaM'), 'Matti Meikäläinen');
|
||||||
assertEq('ZZ', opettajat.lyhenne('ZZ'), undefined);
|
assertEq('ZZ', opettajat.lyhenne('ZZ'), undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
testi('tuntien lisääminen', () => {
|
|
||||||
let tunnit = new Tunnit();
|
|
||||||
assertEq('historia', tunnit.lisää('Historia', '5B', 'KV', 1), 0);
|
|
||||||
assertEq('äidinkieli', tunnit.lisää('Äidinkieli', '1A', 'AS', 3), 1);
|
|
||||||
assertEq('historia nimi', tunnit.tunnit.get(0).nimi, 'Historia');
|
|
||||||
assertEq('historia luokat', tunnit.tunnit.get(0).luokat, ['5B']);
|
|
||||||
assertEq('historia opettajat', tunnit.tunnit.get(0).opettajaLyhenteet, ['KV']);
|
|
||||||
assertEq('historia viikossa', tunnit.tunnit.get(0).kertaaViikossa, 1);
|
|
||||||
assertEq('äidinkieli nimi', tunnit.tunnit.get(1).nimi, 'Äidinkieli');
|
|
||||||
assertEq('äidinkieli luokat', tunnit.tunnit.get(1).luokat, ['1A']);
|
|
||||||
assertEq('äidinkieli opettajat', tunnit.tunnit.get(1).opettajaLyhenteet, ['AS']);
|
|
||||||
assertEq('äidinkieli viikossa', tunnit.tunnit.get(1).kertaaViikossa, 3);
|
|
||||||
});
|
|
||||||
|
|
||||||
testi('tuntien poistaminen', () => {
|
|
||||||
let tunnit = new Tunnit();
|
|
||||||
tunnit.lisää('Historia', '5B', 'KV', 1);
|
|
||||||
tunnit.lisää('Äidinkieli', '1B', 'AS', 3);
|
|
||||||
tunnit.poista(0);
|
|
||||||
tunnit.poista(1);
|
|
||||||
assertThrow('jo poistettu', 'ei tuntia ID:llä 1', () => {
|
|
||||||
tunnit.poista(1);
|
|
||||||
});
|
|
||||||
assertEq('kuvataide', tunnit.lisää('Kuvataide', '6A', 'MM', 1), 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
testi('tuntien järjestys', () => {
|
|
||||||
let tunnit = new Tunnit();
|
|
||||||
tunnit.lisää('Historia', '5B', 'KV', 1);
|
|
||||||
tunnit.lisää('Äidinkieli', '1B', 'AS', 3);
|
|
||||||
assertEq('aluksi', tunnit.järjestyksessä()[0][1].nimi, 'Historia');
|
|
||||||
tunnit.tunnit.get(1).nimi = 'Historia';
|
|
||||||
assertEq('sama nimi', tunnit.järjestyksessä()[0][1].luokat, ['1B']);
|
|
||||||
tunnit.tunnit.get(0).luokat = ['1B'];
|
|
||||||
assertEq('sama luokka', tunnit.järjestyksessä()[0][1].opettajaLyhenteet, ['AS']);
|
|
||||||
tunnit.tunnit.get(0).opettajaLyhenteet = ['AS'];
|
|
||||||
assertEq('sama opettaja', tunnit.järjestyksessä()[0][1].kertaaViikossa, 1);
|
|
||||||
tunnit.tunnit.get(1).kertaaViikossa = 1;
|
|
||||||
assertEq('yhtä monta kertaa viikossa', tunnit.järjestyksessä()[0][0], 0);
|
|
||||||
});
|
|
||||||
|
|
Loading…
Reference in a new issue