# Dojo Toolkit

Das Dojo Toolkit ist eine freie, modulare JavaScript-Bibliothek, die zur raschen Entwicklung von JavaScript- oder Ajax-basierenden Anwendungen und Websites dient. Begonnen wurde das Projekt 2004 von Alex Russell, Dylan Schiemann, David Schontzler und anderen. Eine Mehrfachlizenz erlaubt sowohl die BSD-Lizenz als auch die Academic Free License. Die Dojo Foundation ist eine gemeinnützige Organisation, die die Verbreitung des Toolkits zum Ziel hat.
Das Toolkit besteht aus drei Komponenten. Der Hauptteil Dojo stellt grundlegende Werkzeuge zur Verfügung, wie z. B. eine vereinfachte Handhabung des DOM, von Arrays, Ajax, Ereignissen usw., wie es die meisten JavaScript-Bibliotheken bieten. Der zweite Teil namens Dijit enthält vorgefertigte Komponenten, die es ermöglichen sollen einfach, einheitliche, häufig benutzte, grafische Benutzeroberflächen nach dem Baukastensystem zu erstellen. Schließlich gibt es noch DojoX, das noch weiterreichende Komponenten zur Verfügung stellt, die allerdings zumindest teilweise als experimentell anzusehen sind.

## Features
### Widgets

Widgets laufen bei Dojo unter dem Überbegriff Dijit und sind vorgefertigte Bausteine aus JavaScript, HTML und CSS, die dazu dienen, verschiedene browserunabhängige Features in Websites einzubauen:
* Menüs, Tabs und Tooltips
* Sortierbare Tabellen, dynamische Diagramme und 2D-Vektorgrafik
* Animationseffekte
* Baumstrukturen mit Drag-and-Drop-Funktionalität
* Verschiedene bequem zu bedienende Formulare und Routinen zur Validierung von Formulardaten
* Uhr- und Kalenderfunktionen
* Ein Online-Editor für formatierte Texte
* Ein Satz von Widgets, die barrierefreie Webseiten gemäß WAI-ARIA für sehbehinderte User unterstützen.

### Asynchrone Kommunikation

Ein wichtiges Merkmal von Ajax-Anwendungen ist die asynchrone Kommunikation zwischen Browser und Server: Der Inhalt einer Seite wird aktualisiert, ohne dass die Seite neu geladen werden muss. Herkömmlich wird das über browserabhängige JavaScript-Anweisungen (XMLHttpRequest) getan. Dojo benutzt zur Abstraktion hiervon einen Wrapper (dojo.io.bind), in dem die verschiedenen Implementierungen gekapselt sind, und der noch weitere Transportmechanismen (wie versteckte Inlineframe) und eine Anzahl von Datenformaten unterstützt.

### Modulsystem

Dojo bietet ein Paketsystem, bei dem der modulare Aufbau von Funktionalität in einzelne Pakete und Unterpakete gegliedert ist. Das unterste Bootstrap-Skript von Dojo initialisiert einen Wurzel-Namensraum „dojo“ und darunter eine Reihe von hierarchischen Paket-Namensräumen wie „io“ und „event“ unter einem. Danach kann jedes Dojo-Paket durch entsprechende Funktionen geladen werden. Es ist auch möglich, zusätzliche Namensräume innerhalb des „dojo“-Namensraumes oder parallel dazu zu initialisieren, so dass Dojo durch eigene oder von Drittanbietern entwickelte Zusatzpakete erweitert werden kann.
Dojo-Pakete können aus mehreren Dateien bestehen. Jedes Paket kann spezifizieren, von welchen anderen Paketen es abhängt, so dass diese mitgeladen werden. Ein eigener Build von Dojo erlaubt auch das Zuladen von Paketen aus mehreren Domains zugleich.
Dojo stellt einen Mechanismus zur Verfügung, mit dem „Profile“ erstellt werden können: Beim Erstellungsprozess wird eine Liste von Paketen eingelesen und mithilfe von Apache Ant wird eine einzelne komprimierte JavaScript-Datei erzeugt, die diese Pakete und alles, wovon sie abhängen, enthält. Dies erlaubt es, den gesamten notwendigen Code auf einmal zu laden und zu initialisieren, und ermöglicht es, ihn auch zu cachen. (Die meisten Browser cachen keine Dateien, die über XMLHttpRequest hereinkommen.) Vorgefertigte Profile für einige gängige Anwendungsfälle stehen zum Herunterladen bereit.

### Client-seitige Datenspeicherung

Außer Funktionen, die das Lesen und Schreiben von Cookies unterstützen, stellt Dojo auch eine lokale Client-seitige Abstraktion namens Dojo Storage zur Verfügung, die es Web-Anwendungen erlaubt, mit Einwilligung des Benutzers Daten auf dem Client-Rechner zu speichern. Wie dies geschieht, ist browserabhängig. Bei Firefox 2 ist eine persistente Datenspeicherung vorgesehen. Bei anderen Browsern wird ein unsichtbares Flash-Programm dafür verwendet. Bei Anwendungen, die aus dem lokalen Dateisystem geladen werden (d. h. von einer URL nach dem Muster file://), arbeitet Dojo Storage beim Firefox mit XPCOM und beim Internet Explorer mit ActiveX. Gegenüber dem Programmierer sind diese unterschiedlichen Verfahren in eine virtuelle Hashtabelle gekapselt.

### Server-seitige Datenspeicherung

Dojo umfasst eine Reihe von Implementierungen zum Zugriff auf Server-seitig gespeicherte Daten, darunter solche mit nur lesendem Zugriff auf CSV-Tabellen, OPML-Dateien und bei YahooStore und Delicious gehostete Daten; außerdem Schreib-Lese-Zugriff in SPARQL auf RDF-Server wie den Application Server Rhizome.

## Entwicklungswerkzeuge

Zur komfortablen Arbeit mit Dojo können die Integrierten Entwicklungsumgebungen Aptana oder Komodo verwendet werden. Die WYSIWYG-Umgebung WaveMaker Visual Ajax Studio verwendet einige Widgets des Dojo-Toolkits 1.0. Das Dojo-Foundation-Projekt GeneralInterface stellt den GeneralInterface-Builder bereit, welcher zusätzlich zum GeneralInterface-Framework auch Dojo integriert.

## Stiftung und Sponsoren

Das Dojo Toolkit wird von IBM, Sun Microsystems, AOL und anderen Firmen unterstützt. Zend Technologies hat Dojo in das Zend Framework seit V1.6 integriert (Dojo wird mit ausgeliefert).
Die Dojo Foundation ist eine gemeinnützige Organisation, deren Stiftungszweck es ist, Open-Source-Projekte und ihre Zusammenarbeit miteinander zu unterstützen.
Mitglieder und Sponsoren sind:
* IBM
* Sun Microsystems
* JotSpot
* SitePen
* Renkoo
* AOL
* TurboAjax
* OpenLaszlo
* Nexaweb
* BEA Systems