De globale werking
De stemindicator is zo gebouwd dat het
een zo klein mogelijke belasting voor de server geeft. Er wordt dan
ook geen gebruik gemaakt van CGI; de resultaten worden op een andere
manier uitgelezen.
De applicatie werkt voor een groot
gedeelte client side. Dat wil zeggen dat de complete 'enquete' (de
serie vragen en antwoorden waaruit een stemadvies naar voren komt)
met javascript in de browser werkt. Dit is mogelijk door de opzet van
de stemindicator. Deze kan namelijk worden beschouwd als een
directionele “graaf” (zie grafentheorie)
waardoor men een pad kan afleggen. Dit pad wordt bepaald door de
vragen (knopen) en de antwoorden (kanten) die men kiest. Ieder pad
heeft een eindpunt, waarin het stemadvies is vastgelegd.
Als de hele enquete is doorlopen wordt
1 keer het afgelegde pad naar de server gestuurd. Dit gebeurd door de
vragen en antwoorden in een url te coderen en deze op te vragen.
Het javascript
Het javascript dat wordt gebruikt voor
de stemindicator is toegespitst op de directionele graaf. In principe
wordt de enquete opgebouwd uit drie klassen: Survey, Question en
Answer. Daarnaast wordt gebruik gemaakt van een eigen gedefinieerd
datatype Result.
Survey: een verzameling vragen. De
Survey houdt tevens een lijst van de Results bij.
Question: een vraag en een verzameling
van mogelijke antwoorden.
Answer: een antwoord en een verwijzing
naar de volgende vraag die moet worden gevolgd indien dit antwoord
wordt gekozen.
Result: een datatype dat de combinatie
van een vraag en een gekozen antwoord kan opslaan.
Omdat deze javascript objecten niet
zomaar kunnen worden weergegeven, althans niet in een begrijpelijke
vorm, wordt gebruik gemaakt van een LayoutManager. Aan een Question
object kan worden meegegeven welke LayoutManager moet worden
gebruikt. Hierin kan worden bepaald hoe de vraag en de antwoorden in
HTML worden opgemaakt.
De gebruikte LayoutManagers staan in
het bestand QLayoutManager.js
Naast deze javascript klassen wordt nog
een klasse gebruikt: JsDocument. Een JsDocument object kan worden
gebruikt indien er veel tekst aan elkaar moet worden geplakt
(concattenating). De standaard concattenate functie in javascript
(bv. string += “tekst”) wordt erg traag als de strings groot
worden. Door gebruik te maken van een array en de join functie werkt
dit veel efficienter en sneller.
De JsDocument klasse staat in het
bestand jsdocument.js
Er is een aantal functies dat gebruikt
wordt voor het opstellen van de url die alle informatie bevat over
het gekozen pad. De results array van het Survey object kan worden
gefiltered op bepaalde vragen. Hiervoor is de functie
filterQuestions. Deze functie maakt weer gebruik van een aantal
algoritmen isIn (voor het bepalen of een bepaalde waarde in een array
aanwezig is), en XOR en XAND (twee logische operators).
Deze functies staan in het bestand
survey_functions.js
Omdat in sommige versies van Internet
Explorer de methode push van de Array klasse niet werkt wordt deze
functie aan het prototype toegevoegd.
Deze functie staat in
array.prototype.js
Tot slot is er een control functie voor
het starten, doorlopen, eindigen en natuurlijk het weergeven van de
enquete. Deze kan zelf worden aangepast naargelang de wensen.
Deze functie staat in de HTML.
Je kunt de stemindicator locaal uitproberen door het bestand stemindicator.zip te downloaden en uit te pakken op je computer. Alle benodigde bestanden zijn bijgevoegd.
Download:
stemindicator.zip
|