doc/pozadavky.md
# Požadavky
Datum: Leden 2015<br>
Autor: Jakub Jirůtka
## Funkční požadavky
1. bude poskytovat náhled na události (tj. kalendáře) z pohledu:
1. osoby,
2. předmětu,
3. místnosti.
2. bude poskytovat různé módy zobrazení:
1. rozvrhový (horizontální):
a. s přepínáním mezi zobrazení 5/7 dní (např. dálkoví studenti mívají výuku i o víkendu),
b. s časovou osou podle harmonogramu dané fakulty (_časové_ rozsahy) sloužící jako _pomocné_ vodítko.
2. kalendářní:
1. týdenní (výchozí),
2. _měsíční,_ (**P2**)
3. denní.
3. bude zobrazovat paritu (sudý/lichý) aktuálně vybraného období.
4. bude zobrazovat označení semestru aktuálně vybraného období.
5. okénko události bude obsahovat:
1. kód předmětu,
2. místnost (KOSí kód), (**P1**)
3. čas začátku a _konce události_ (**P2**),
4. typ události (barevným rozlišením),
5. příznak, zda byla událost ovlivněna rozvrhovou výjimkou (tj. změna oproti pravidelnému rozvrhu).
6. po kliknutí na okénko události se zobrazí detail události obsahující:
1. celý název předmětu nebo události,
2. odkaz na kalendář předmětu (jen pro P/C/L/J/Z),
3. pořadové číslo výukové hodiny nebo zkoušky v semestru (jen pro P/C/L/Z),
4. číslo paralelky (jen pro P/C/L/J),
5. odkaz na kalendář místnosti,
6. vyučující/zkoušející/organizátoři události (jeden nebo více lidí):
1. celé jméno,
2. <del>e-mail</del> (je na Usermapu),
3. odkaz na kalendář,
4. odkaz na Usermap.
7. seznam studentů v paralelce (jen pro P/C/L): (**P3**)
1. celé jméno,
2. uživatelské jméno,
3. zobrazovat ve „fancy pop-up.“
8. seznam výjimek, které událost ovlivnily.
7. na původním místě zrušené či přesunuté události bude zobrazovat zástupné okýnko:
1. v případě přesunuté události s odkazem na novou událost. (**P3**)
8. bude umožňovat navigaci v kalendáři po týdnech/měsících/semestrech.
9. bude poskytovat filtr zobrazených událostí:
1. podle typu události.
10. bude poskytovat jednotný vyhledávač kalendářů:
1. osoby (podle uživatelského i občanského jména),
2. předmětu (podle kódu a názvu),
3. místnosti (podle KOSího kódu).
11. kalendářní data bude získávat ze služby Sirius:
1. přes jeho RESTful API, ve formátu JSON,
2. _on-demand_.
12. bude poskytovat JS API pro:
1. přidání položek zobrazených v okénku události,
2. přidání položek zobrazených v detailu události (textových i akcí),
3. odchytávání akcí nad kalendářem [TODO].
## Nefunkční požadavky
1. Uživatelské rozhraní:
1. bude lokalizované do češtiny a angličtiny,
2. bude responzivní (od desktopu po mobilní telefon s WVGA),
3. bude přizpůsobené i pro ovládání na dotykovém displeji,
4. vizuálně bude vycházet z grafiky vytvořené pro „nový web“ od Josefa Lobotky (fonty, barvy, příp. ikony).
2. Přizpůsobitelnost a konfigurovatelnost:
1. widget bude možné přizpůsobit pro různá použití:
1. na fakultním webu pro studenty a vyučující,
2. v rámci administračního rozhraní pro rozvrháře,
3. v módu omezené funkčnosti, např. na osobní stránce vyučujícího, studenta atp.
2. widget bude počítat s nasazením i na dalších fakultách.
3. Dokumentace:
1. bude obsahovat kompletní postup pro sestavení (build),
2. bude obsahovat popis konfigurace a JS API pro přizpůsobení widgetu,
3. veškerá dokumentace by měla být v angličtině.
4. Kvalita kódu:
1. kód bude srozumitelný, dobře strukturovaný a potenciálně nejasné části okomentované,
2. kód bude pokrytý jednotkovými a integračními testy,
3. kód i další textové soubory budou v UTF-8 a s unixovým způsobem ukončování řádek (řídící znak LF / 0x0A),
3. názvy všech identifikátorů použitých v kódu budou v angličtině.
5. Verzování:
1. projekt bude verzovaný systémem Git na GitHubu.
6. Technologie:
1. bude implementovaný v jazyce kompilovaném do JavaScriptu; preferovaná je syntaxe ECMAScript 6+ (s překladem pomocí https://github.com/babel/babel[Babel]).
7. Běhové prostředí:
1. bude fungovat _client-side_, ve webovém prohlížeči s podporou JavaScriptu:
1. Chrome/Chromium 35+,
2. Firefox 31+,
3. Internet Explorer 10+ (9 alespoň omezeně),
4. Safari 6+.
8. Licence:
1. bude využívat výhradně _open-source_ knihovny.
## Zkratky
Typy událostí:
* přednáška [P]
* cvičení [C]
* laboratoř [L]
* jednorázová akce předmětu [J]
* zkouška (i zápočtová) [Z]
* omezení vyučujícího [V]
* obecná událost [O]