# Dojo Toolkit

Dojo est une bibliothèque logicielle open source en JavaScript. Son but est le développement rapide d'applications en JavaScript exécutées côté client et communiquant avec le serveur avec une granularité inférieure à la page grâce à Ajax. Dojo est sous double licence et peut donc être obtenue soit selon les termes de la licence BSD, soit sous ceux de l'Academic Free License.
Actuellement le framework Dojo est disponible en version 1.12.1 (en date du 27 avril 2017). Une refonte est en cours pour proposer une version 2.0 basée sur TypeScript, disponible en version béta depuis décembre 2017.

## Système de paquetage

Dojo fournit un système de paquetage conçu pour faciliter la séparation des fonctionnalités en paquetages et sous-paquetages individuels. Le script de base pour le bootstrap de Dojo initialise un espace de nom hiérarchique appelé "dojo". Après son initialisation, une fonction utilitaire peut charger tout paquetage via XMLHttpRequest ou un autre système de transport de données. Pour le code développé avec Dojo, on peut initialiser des espaces de noms parallèles à "dojo".
Les paquetages peuvent être constitués de multiples fichiers et peuvent spécifier quels fichiers constituent un paquetage entier. Chaque paquetage ou fichier peut spécifier des dépendances vis-à-vis d'autres paquetages ou fichiers qui seront chargés automatiquement.
Dojo fournit aussi un mécanisme pour construire des "profils". Le système de construction prend en entrée une liste de paquetages et utilise Apache Ant pour créer un seul fichier JavaScript compressé contenant tous ces paquetages et leur dépendance. Cela permet à tout le code nécessaire d'être chargé et initialisé en une fois et permet de cacher le code (la plupart des butineurs - navigateurs Web - ne chargent pas en mémoire cache les fichiers obtenus par XMLHttpRequest). Des "profils" préfabriqués pour différents cas courants d'utilisation sont disponibles à la même adresse que la totalité du cadriciel Dojo.

## Survol des fonctionnalités de Dojo

Au-delà du système de paquetage, voici les fonctionnalités les plus notables de Dojo :
* Un modèle d'objet riche avec une approche classique, bien maîtrisée par la plupart des développeurs, au contraire de l'héritage prototypé natif de JavaScript. Ce modèle d'objet permet de l'héritage multiple et des mixins.
* Un système évènementiel qui permet au code d'être marqué pour l'exécution non seulement pour les évènements DOM mais pour des évènements arbitraires tels que les appels à une fonction particulière. Cela permet une utilisation plus robuste de la programmation orientée aspect qu'il n'est typique en JavaScript.
* Un système de widgets qui permet la création de composants réutilisables complexes, et propose de nombreux widgets préfabriqués (par exemple, un sélectionneur de dates fondé sur un calendrier, et un éditeur de texte riche).
* Un wrapper au-dessus des différentes implantations de XMLHttpRequest, qui permet d'utiliser divers systèmes de transport de données et de formats de données et de s'abstraire autant que possible des variations entre butineurs.
* Une bibliothèque d'animations, incluant à la fois des effets d'animation pré-construits et des possibilités de construire soi-même des effets.
* Une bibliothèque d'utilitaires de manipulation du DOM.
* Des utilitaires pour la manipulation des classes JavaScript.
* Abstraction de l'environnement d'exécution, Dojo permet de détecter et de gérer les différences entre les différents butineurs et environnements d'exécution tels que Rhino et SpiderMonkey pour Mozilla et Firefox.
* Des contournements pour le chargement inter-domaines de la plupart des paquetages de Dojo (bien que cela requière une construction spéciale de Dojo ; une telle construction est hébergée par AOL).

## Patronage

IBM et Sun Microsystems ont annoncé un support officiel de Dojo, dont des contributions de code.
Un autre élément important du patronage fait autour de Dojo est la Foundation Dojo à laquelle contribuent de nombreuses sociétés et d'autres projets Open Source comme OpenLaszlo.
Par ailleurs, en mai 2008, Zend Framework a annoncé un partenariat avec la Fondation Dojo. L'objectif est d'intégrer Dojo Toolkit à Zend Framework afin de simplifier la création d'applications web avec une interface utilisateur "riche".

## Critiques

Une critique commune est l'absence de documentation complète. Malgré des efforts pour combler cette lacune, la critique était toujours valable en octobre 2006. L'équipe de Dojo a réagi à cette critique, ainsi depuis novembre 2006 l'effort a été porté sur la documentation en ligne et a vu le jour d'une aide accrue encore en perfectionnement. De plus, l'activité de Dojo étant importante, de nombreuses informations sont disponibles dans leur lettre de diffusion.