Einführung

Im Folgenden soll ein Überblick über das System gegeben werden. Dabei wird unter anderem das Grundgerüst, die Infrastruktur und die Anwendung der Komponenten erklärt.

Projektstruktur

Die folgende Abbildung veranschaulicht die Ordnerstruktur der Code-Components:

components/
├── dist/          <- kompilierte Version der Komponenten, aufgeteilt in:
│    ├── css/         <- CSS, unkomprimiert, komprimiert und mapping
│    ├── fonts/       <- Webfonts
│    ├── js/          <- JavaSkripte, unkomprimiert, komprimiert und mapping
├── dist-docs/     <- kompilierte Dokumentation
├── dist-test/     <- kompilierte HTML-Tests inkl. Bildmaterial
├── docs/          <- Sourcen der Dokumentation
├── grunt/         <- diverse Skripte für den Erstellprozess
├── src/           <- Sourcen der Komponenten, aufgeteilt in:
│    ├── fonts/       <- Webfonts
│    ├── icon/        <- divese grafische Sourcen, AI, SVG,...
│    ├── js/          <- JavaSkripte inkl. Unit-Tests
│    ├── scss/        <- SCSS Sourcen zur Erstellung von CSS
├── src-test/      <- HTML Test-Dateien inkl. Bildmaterial

Installation

Den Kern der Komponenten bildet Grunt, der JavaScript-Task-Runner. Er verwaltet die Aufgaben wie das Erstellen der Komponenten oder das Erstellen der Dokumentation. Grunt sowie seine Plugins werden mit dem Node-Package-Manager (npm) verwaltet. Da die verwendeten Pakete nur für die Entwicklung benötigt werden ist deren Abhängigkeit im Punkt "devDependencies" der Datei package.json festgelegt. Diese wird von npm benötigt.

Installationsvoraussetzungen

  • ein Terminal (Unter Windows empfehlen wir die Installation der GIT-Bash)
  • npm, den Node Package Manager (Wird mit Node.js ausgeliefert, unsere Version: 1.3.11)

    Die jeweiligen Installationsanweisungen sind auf den Herstellerseiten zu finden.

Installation der Pakete

  1. Öffnen Sie eine Shell.
    (z.B. Mac Terminal oder Windows Git-Bash)

  2. Begeben Sie sich anschließend in das Hauptverzeichnis der Komponenten.
    (hier befindet sich die Datei package.json)

  3. Zunächst muss grunt-cli installiert werden. Es sorgt dafür, dass die lokale Installation von Grunt gestartet wird.
    ("lokal" meint in dem Fall das Grunt des Projekts)

    Hinweis: Ist grunt-cli bereits global installiert, braucht es natürlich nicht nochmal installiert werden.
    npm install -g grunt-cli
  4. Nun kann Grunt mit all seinen Plugins installiert werden:

    npm install

    Beim Installationsprozess mit npm werden dabei automatisch alle Abhängigkeiten die ebenfalls mit npm verwaltet werden mitinstalliert. Deshalb kann die Installation ein paar Minuten dauern.

    Ist die Installation abgeschlossen steht der Kern der Komponenten. Manche der verwendten Plugins benötigen jedoch noch weitere Tools deren Installation nun erklärt wird:

Installation zusätzlicher Abhängigkeiten

SCSS-Compiler
Das Plugin grunt-contrib-sass das für die Umwandlung der SCSS-Dateien in CSS-Dateien zuständig ist benötigt zur Ausführung den SASS-Compiler der wiederum Ruby mit DevKit benötigt:

  • Ruby (Ruby for Windows, unsere Version: 2.0.0p247)
  • DevKit (unsere Version: 4.7.2-20130224-1432)
  • SASS-Compiler (unsere Version: 3.4.10)

    gem install sass --version 3.4.10

    Die jeweiligen Installationsanweisungen sind auf den Herstellerseiten zu finden.

SCSS-Linting
Das Plugin grunt-scss-lint soll SCSS-Dateien auf ihre Syntax überprüfen. Hierfür wird das Tool scss-lint benötigt. Es hat Ruby und den Sass-Compiler als Installationsvoraussetzungen. Diese sollten aber bereits installiert sein. So können Sie direkt scss-lint installieren:

  • scss-lint (unsere Version: 0.33.0)

    gem install scss-lint --version="0.33.0"

Unit-Testing
Die JavaScript-Komponenten werden mit dem Plugin grunt-contrib-qunit durch automatischen Tests auf ihre Richtigkeit untersucht. Die Tests werden von PhantomJS durchgeführt. PhantomJS hat je nach Betriebssystem Abhängigkeiten die eventuell installiert werden müssen:

Jekyll für die Dokumentation (optional)
Soll die Dokumentation erstellt werden, wird zusätzlich Jekyll benötigt. Da die Dokumentation außerdem sehr viele Code-Beispiele enthält werden diese extra ausgezeichnet. Dies wird mit dem Code-Highlighter rouge erledigt:

  • Jekyll / mit rouge als Code-Highlighter

    gem install jekyll --version="2.2.0"
    gem install rouge

Installationshilfe für Windows

Installationshilfe für Windows - Bitte die Versionen beachten!

Troubleshooting

Allgemeines Update

Wenn sich die Datei package.json ändert muss dafür gesorgt werden, dass veraltete npm-Pakete deinstalliert und neue Pakete installiert werden.

Das ermöglichen die folgenden Befehle:

Veraltetes deinstallieren:

npm prune

Neues Installieren:

npm install

Sollte es Probleme geben, dann hilft es eventuell vorher den npm-Cache zu leeren:

npm cache clear

Grunt Update: Beim Update von grunt via

npm update grunt --save-dev

passiert erstmal garnichts. Deshalb kann folgender Weg eingeschlagen werden:

npm uninstall grunt
npm install grunt --save-dev

Was zu einem Fehler führt:

npm ERR! peerinvalid The package grunt does not satisfy its siblings' peerDependencies

Allerdings ist hier nicht zu finden um welche Abhängigkeiten (dependencies) es handelt. Um das herauszufinden muss

npm install

ausgeführt werden. Dadurch erhält man folgende Paketübersicht:

npm ERR! peerinvalid Peer grunt-banner@0.2.1 wants grunt@~0.4.1
npm ERR! peerinvalid Peer grunt-contrib-clean@0.5.0 wants grunt@~0.4.0
npm ERR! peerinvalid Peer grunt-contrib-concat@0.3.0 wants grunt@~0.4.0
npm ERR! peerinvalid Peer grunt-contrib-connect@0.6.0 wants grunt@~0.4.0
npm ERR! peerinvalid Peer grunt-jscs-checker@0.3.2 wants grunt@0.4.2

Diese Meldungen sind jedoch verwirrend, da er alle pakete mit ERR markiert. Fehlerhaft ist jedoch meist nur ein Paket. Beispiel:

grunt-jscs-checker@0.3.2 wants grunt@0.4.2

Achtung! Es wird die genaue Version 0.4.2 verlangt. (Das Paket grunt-jscs-checker@0.3.2 war in unserem Test-Fall außerdem veraltet)

Mit der Installation des neuen Pakets grunt-jscs war das Problem dann behoben.

Installieren von grunt-jscs

Wichtig für Windows: die Git-Bash als Administrator ausführen! Sonst dürfen Ordner nicht erstellt werden.

dann:

npm cache clear
npm install grunt-jscs --save-dev

Kompilieren der Komponenten

Zur Erstellung der Komponenten sind in der Datei Gruntfile.js mehrere Tasks definiert die im Folgenden kurz erklärt werden:

Erstellen der kompletten Komponenten - Der DEFAULT Task
Mit diesem Task werden die Komponenten zunächst getestet und anschließend distributiert. Der Paramter --force sorgt dafür, dass der Task auch im Fehlerfall weitergeführt wird:

grunt --force
Hinweis: Aktuell kommt es durch den csslint-Test zu einem @-moz-document Fehler. Wir warten derzeit auf die Einarbeitung dieser Auszeichnung in den Test.

Teile der Komponenten distributieren

Testen der Komponenten
Das Testen der Komponenten ist der wohl aufwändigste Task. Hier wird sowohl die Syntax geprüft, als auch Unit-Tests durchgeführt:

grunt dist-docs --force

Erstellen der JS-Dateien

grunt dist-js

Erstellen der CSS-Dateien

grunt dist-css

Erstellen der HTML-Dateien im Testordner

grunt dist-html

Erstellen der Komponenten inkl. Assets
Hier werden Schriftarten usw. mit distributiert.

grunt dist

Erstellen der Dokumentation

Das Erstellen der dokumentation benötigt Jekyll. Bitte beachten Sie die Installationsanweisungen:

grunt dist-docs

Die dokumentation selbst ist mit der markdown syntax verfasst. Es ist daher sinnvoll ein Werkzeug zu verwenden, welches Markdown beherrscht.

Beispiele:

Während der Entwicklung

Für die Entwicklung der Komponenten steht der watch-Task zur Verfügung:

grunt watch

Er beobachtet für die Entwicklung relevante Dateien. Ändert sich eine dieser Dateien wird automatisch der nötigte Erstell-Task aufgerufen. Die Test-HTML-Dateien sind außerdem mit dem livereload-Script ausgestattet. Es sorgt dafür, dass sich der Browser automatisch neu lädt, wenn eine Änderung stattgefunden hat.

Release Notes

2.0.1 [26.06.2015]

  • Verbesserungen bei der Verwendung der Selectbox auf mobilen Geräten
  • Diverse Änderungen in der Dokumentation
  • Verbesserungen des Focus-Effekts auf Einabgefeldern
  • Anpassungen des Layouts im Modal-Dialog

2.0.0 [08.06.2015]

  • 2.0.0 Release

2.0.0-beta.10 [01.06.2015]

  • Verbesserungen hinsichtlich Benutzbarkeit durch Dependency Manager
  • Diverse Accessibility Verbesserungen
  • Diverse Verbesserungen der Dokumentation (Anmerkungen etc.)

2.0.0-beta.9 [19.02.2015]

  • Tooltip hinzugefügt
  • Tooltip Dokumentation hinzugefügt
  • Icon-Font aktualisiert
  • Einbindung des neuen Screen-Fonts
  • Diverse Accessibility Verbesserungen
  • keyboard.js entfernt um JavaScript zu minimieren

2.0.0-beta.8 [20.01.2015]

  • JavaScript Button hinzugefügt
  • JavaScript Toggle Button hinzugefügt
  • JavaScript Button Group Radio hinzugefügt
  • JavaScript Button Group Checkbox hinzugefügt
  • JavaScript Expandabe hinzugefügt
  • JavaScript Expandabe Group hinzugefügt
  • JavaScript Modal hinzugefügt
  • JavaScript To Top hinzugefügt
  • IconFont Outline hinzugefügt
  • IconFont Solid hinzugefügt
  • Dark-Theme hinzugefügt
  • Diverse CSS Verbesserungen
  • Diverse Accessibility Verbesserungen

2.0.0-beta.7 [05.01.2015]

  • Responsive-Helfer "Visible-Hidden" hinzugefügt
  • Responsive Ausrichtung für Text hinzugefügt
  • Heroheadline hinzugefügt
  • ThinHeadline hinzugefügt
  • Thin als Textdecoration hinzugefügt
  • Einfache unsortierte Liste hinzugefügt

2.0.0-beta.6 [18.12.2014]

  • Neues Modul Badges hinzugefügt
  • Neues Modul Benachrichtigungen hinzugefügt
  • Accessibility Verbesserungen in Checkbox, Radiobutton, Dropdown, Streichpreis
  • Accessibility Anmerkunden in Dokumentation
  • Content-Listen erweitert und hinsichtlich Accessibility verbessert
  • Fehlerhafte Tabellen-Footer-Auszeichnungen korrigiert
  • Pagination hinsichtlich High-Contract-Mode verbessert
  • Clean-Button hinsichtlich High-Contract-Mode verbessert

2.0.0-beta.5 [17.09.2014]

  • Helfer für horizontales und vertikales Zentrieren hinzugefügt
  • Background-Colors hinzugefügt
  • Responsives Verhalten der Description List verbessert
  • Abstände des Thread Views und des Zitats verbessert

2.0.0-beta.4 [05.09.2014]

  • Breadcrumb hinzugefügt
  • Pagination hinzugefügt
  • Content-Liste Select- und Hover-Zustand hinzugefügt
  • Responsive Element Offset Helper hinzugefügt
  • XL-Grid-Size hinzugefügt
  • Accessibility Verbesserungen der Selectbox
  • Accessibility Verbesserungen der Radio-Buttons innerhalb von Button-Gruppen
  • Pointer-Verhalten bei Radio-Buttons uns Checkboxen hinzugefügt
  • Breadcrumb Dokumentation hinzugefügt
  • Pagination Dokumentation hinzugefügt
  • Content List, Selectstate and Hover Beispiele in Dokumentation
  • Responsive Element Offset Dokumentation hinzugefügt

2.0.0-beta.3 [29.08.2014]

  • Responsive Grid System hinzugefügt
  • Responsive Grid Dokumentation hinzugefügt
  • Content List-Modul hinzugefügt
  • Icon-Verwendung Dokumentation verbessert
  • Responsive Debug Tool hinzugefügt
  • CSS Debug Theme hinzugefügt

2.0.0-beta.2 [14.08.2014]

  • Aktualisierung Dokumentation - Installationsanweisungen
  • Accessibility Anpassungen
  • Grid Bugfixes

2.0.0-beta.1 [15.07.2014]

  • Accessibility Verbesserungen
  • Bilder ohne Outline
  • Refactoring marked-text and ellipsed

2.0.0-beta [30.06.2014]

  • Abstände von Elementen verbesser
  • Hover-Animationen eingeführt

2.0.0-alpha [12.06.2014]

  • Erste Prereleaseversion nach Entwicklung
  • CSS-Reset, Typografie, Input, Buttons, Images, Table, Icons, Basic-Grid