``{=html}
``{=html}
## Inhalt
- [Einführung](#einführung)
- [Übersicht der Module](#übersicht-der-module)
- [Verzeichnisstruktur](#verzeichnisstruktur)
- [Modul 2: Diagramme verstehen](#modul-2-diagramme-verstehen)
- [Entwicklungsumgebung](#build-tool-chain)
- [Javascript](#javascript)
- [Sass](#sass)
- [Bilddateien](#bilddateien)
- [Entwicklungshistorie](#entwicklungshistorie)
## Einführung
Das Projekt [RisikoAtlas](https://risikoatlas.de) hat die Förderung der
Risikokompetenz zum Ziel. Zu diesem Zweck wurden am Harding-Zentrum für
Risikokompetenz am Max-Planck-Institut für Bildungsforschung digitale
Werkzeuge entwickelt, die auf wissenschaftlichen Erkenntnissen beruhen.
Neben interaktiven Visualisierungen evidenzbasierter
Risikokommunikation, einer App zur Entscheidungsunterstützung und einer
Browser-Erweiterung als Leseassistenz sind Lernvisualisierungen zur
Verbesserung der Risikokompetenz Teil des Projektes. Das vorliegende
Modul ist eines dieser sechs Lernmodule.
Die Lernmodule wurden ursprünglich entwickelt von [kf
interactive](https://www.kf-interactive.com).
## Übersicht der Module
Die folgende Liste gibt einen Überblick über die Ziele der Module:
1. Module01 -- Risiken vergleichen **\***
2. **Module02 -- Diagramme verstehen** **\***
3. Module03 -- Trends schätzen **\***
4. Module04 -- Stichproben verstehen (original: [Rock 'n
poll](http://rocknpoll.graphics/))
5. Module05 -- Relative Risiken verstehen **\***
6. Module06 -- Wachstumsprozesse verstehen
Alle mit einem **\*** versehenen Module greifen über eine API auf eine
Datenbank zu. Auf diese Weise rufen sie die benötigten Daten ab, und
speichern andererseits Antworten der Benutzer, um ihnen den Vergleich zu
Anderen zu ermöglichen. Für jedes dieser Module existiert auch eine
offline-Version, die ausschließlich auf lokale Daten zugreift.
## Verzeichnisstruktur
Im Wurzelverzeichnis liegen die für den Build Prozess notwendigen
Konfigurationsdateien. Das Verzeichnis `doc/` enthält detailliertere
Dokumentationen zu einzelnen Aspekten des Projekts. Alle für die WebApp
benötigten Dateien werden in `public/` erstellt bzw. dorthin kopiert. Im
`src/` Verzeichnis befinden sich alle Quelldateien, Bilder und Fonts.
Der `tasks/` Ordner enthält Javascript-Dateien, die die Teilschritte des
Build-Prozesses definieren.
Die grobe Struktur sieht folgendermaßen aus:
├── .editorconfig // Konfiguration für Texteditoren
├── .babelrc // Konfiguration von babel
├── .eslintrc.yml // Konfiguration des Javascript Linters
├── .htmlhintrc // Konfiguration des HTML Linters
├── .sass-lint.yml // Konfiguration des Sass Linters
├── config.js // Konfiguration des Build-Systems
├── gulpfile.babel.js // gulp Datei, verwendet Definitionen unter `tasks/`
├── package.json // npm Abhängigkeiten, Shortcuts für gulp tasks
├── doc/ // Dokumentation in markdown
├── public/ // Zielverzeichnis für den Build-Prozess
├── src/ // Quellverzeichnis
│ ├── fonts // Font Dateien
│ ├── html // HTML 'Templates'
│ ├── img // Bilder und Sprites
│ ├── js // Javascript Quelldateien
│ └── scss // Sass stylesheets
└── tasks/ // Definitionen für den gulp Build-Prozess
## Modul 2: Diagramme verstehen
Dieses Modul stellt ein interaktives Werkzeug als Hilfe zur Verbesserung
des Verständnisses von Diagrammen bereit.\
Dazu werden den Nutzern Multiple-Choice-Fragen zu Charakteristiken des
gezeigten Graphen präsentiert. Die Lösung und gegebenenfalls die falsch
gewählte Antwort werden grafisch hervorgehoben. Ein zweiter Typ von Test
ermöglicht es den Nutzern, Teile des Diagramms auszuwählen und zu
skalieren, um einen in der Frage vorgegebenen Effekt zu erzielen. Dies
soll zeigen, wie einfache Manipulationen die Interpretation von Graphen
beeinflussen können. Erst wenn eine korrekte Lösung gefunden wurde, kann
zur folgenden Aufgabe weitergegangen werden.
### Javascript Verzeichnisstruktur
Für einen besseren Überblick sind die Quell-Dateien mit kurzen
Beschreibungen aufgelistet:
├── main.jsx // Einstiegspunkt für App *mit* Verwendung der API ("online mode")
├── main-offline.jsx // Einstiegspunkt für App *ohne* Verwendung der API ("offline mode")
├── config.js // Globale Konfiguration der WebApp
├── components // (p)react Komponenten
│ ├── Index.jsx // Web App Haupt-Komponente
│ └── partials
│ ├── GraphItem.jsx // Komponente für d3 Visualisierungen
│ ├── IntroItem.jsx // Komponente für die Einführung zu den Fragen
│ └── QuestionItem.jsx // Komponente für Benutzereingaben für Fragen
├── content
│ ├── Gruppe-x_item-y.json // Definitionen der Fragen
│ ├── module.json // Definition der (meisten) Labels und Texte des User Interfaces
│ └── offline.js // Definition der Reihenfolge der Fragen
├── d3 // d3 Module
│ ├── configuration.js // Konfiguration für d3-Module
│ ├── axes.js // Achsendefinitionen
│ ├── main.js // d3 Haupt-Modul
│ ├── defs.js // Defintionen für SVG-Element (clip-path, gradient)
│ ├── gradient.js // Darstellung der Steigung innerhalb eines Intervalls (Fragetyp 3)
│ ├── grid.js // Skalierendes Hintergrundraster
│ ├── handleConnector.js // Definition der Verbindungslinien zwischen Anfassern (Fragetyp 3)
│ ├── handleSymbols.js // Definition der Geometrie der Anfasser als SVG symbols (Fragetyp 3)
│ ├── handle.js // Konstruktor und Definition des Verhaltens der Anfasser (Fragetyp 3)
│ ├── legend.js // Legende der Graphen
│ ├── bar.js // Balkendiagramm als Feedback für Benutzer
│ ├── lineGraphs.js // Darstellung der Graphen
│ ├── points.js // Hervorhebung der Lösung / falschen Antwort (Fragetyp 1)
│ ├── scales.js // d3 Skalen für x- und y-Achsen
│ ├── range.js // Definition eines Auswahlbereichs (Fragetyp 3)
│ └── rangeController.js // Controller für Auswahlbereich; Kommunikation zwischen Visualisierungs-Modulen (untereinander) und Anwendung
└── utilities
├── api.js // API für Lese- und Schreibzugriff auf die Datenbank
├── enableTouch.js
├── fonts.js
├── formatter.js
├── math.js
├── randomizer.js
└── validator.js // Funktionen zur Validierung der Benutzerantworten
### Wie ändere ich Bezeichner und Datenbasis?
Um den Benutzern den Vergleich zu anderen zu ermöglichen, wird die
Anbindung an eine Datenbank ermöglicht. Diese ist über eine API
anzusprechen, die im Abschnitt "Online Version" dokumentiert ist. Es ist
aber genauso möglich, auf diese Datenbankanbindung zu verzichten und
stattdessen nur "lokale" Daten zu nutzen. Die dafür relevanten Dateien
sind unter "Offline Version" dokumentiert.
#### *Offline* Version
Die "lokalen" Inhalte und Daten sind in den `json`-Dateien Dateien unter
`src/js/content` definiert.
#### Labels
##### Umgebende Texte
In `module.json` sind die umgebenden Texte und Labels definiert, die
nicht direkt Teil der WebApp sind. Dies umfasst die einleitenden
(`introtext`) und abschließenden Texte (`outrotext`) und die Labels der
Buttons und Vergleichsansichten mit anderen Nutzern.
{
"title": "Wie werden Finanzstatistiken verzerrt?",
"introtext": "Um zu lernen, wie Statistiken verzerrt werden, …",
"outrotext": "Was haben Sie geübt? …",
"success": "Sie haben die Lösung erreicht!",
"next": "Weiter",
"start": "Start",
"restart": "Neustart",
"usersVoteHeadline": "So wählten die User",
"usersRight": "Andere Nutzer lagen richtig"
}
##### Labels der WebApp
Der Titel der Aufgabe, Achsenbezeichner und Legendentext werden aus der
`json`-Datei der jeweiligen Aufgabe (Namensschema
`Gruppe-_item-.json`) gelesen und können dort geändert werden
(siehe anschließenden Abschnitt zu Daten). Die Beschriftung der x-Achse
wird direkt aus den Daten übernommen, die y-Achse dagegen automatisch
von der Javascript-Bibliothek [d3js](https://d3js.org) generiert.
```{=html}