Appendix B. A Brief Survey of DojoX

DojoX is the toolkit's canonical location for experimental and specialized extensions. Unlike the rest of this book, which covers Base, Core, Dijit, and Util in depth, this short appendix on DojoX provides survey-style coverage of what could really be another entire book on its own—a book that might even be about twice as long as this one. The hope is that once you've made the trek across the rest of the toolkit, picking up something from DojoX and running with it should be fairly straightforward.

The author's semi-regular columns on Dojo available at http://dojotdg.com includes topics on DojoX subprojects, so consider adding it to your RSS reader so that you can stay current.

DojoX is managed on a per-subproject basis, and the condition of any given project can vary widely. While some subprojects such as cometd and charting are quite stable, others are very much in their infancy, and DojoX acts as a proving ground for them. One commonality for all DojoX subprojects, however, is that they should all have a README file that contains the basic status and version information for the subproject as well as contact information for the authors. DojoX subprojects may have dependencies on Base, Core, or Dijit; however, they may also be completely standalone projects. Unlike Dijit, DojoX makes no official guarantees about accessibility or internationalization, and the overall style of implementation varies more so than what you would find in slightly more unified project like Dijit.

One thing you must have noticed about the rest of the toolkit by now is that it provides serious breadth and depth; well, DojoX is not different. In fact, a crude analysis of the number of functions (including anonymous inline functions) and statements across Core, Base, and Dijit works out to be roughly as shown in Table B-1, as calculated via:

grep -rc 'function' * | grep -v \.svn | cut -d : -f 2 |  awk '{for (i=1; i<=NF; i++)
s=s+$i}; END{print s}'

And:

grep -rc '\;' * | grep -v \.svn | cut -d : -f 2 |  awk '{for (i=1; i<=NF; i++)
s=s+$i}; END{print s}'
Table B-1. Rough estimate for the number of functions and statements (in thousands) in the toolkit as of version 1.1

Base

 

Core

 

Dijit

 

DojoX

 

Functions

Statements

Functions

Statements

Functions

Statements

Functions

Statements

0.7

2.2

1.9

9.5

1.6

15.1

7.1

54

At the very least, you can see that there is a tremendous amount of source code in DojoX. In any event, the additional breadth and depth that DojoX provides is astounding, and in may ways, there are lot more interesting things going on in DojoX than Dijit because DojoX is really is about the bleeding edge and specialized interests. Just because this book cannot cover DojoX doesn't mean that you won't find a lot of useful features that are likely to save you a lot of time.

The synopsis in Table B-2 is a helpful guide for determining exactly what's in DojoX as of version 1.1. Since DojoX is so fluid, however, your best bet for the most up-to-date coverage of DojoX is to download a nightly build from http://archive.dojotoolkit.org/nightly/ and inspect the README file directly.

Table B-2. DojoX projects

Subproject

Description

analytics

An analytics and client monitoring system that can be used to log various events back to the server such as mouse clicks, idle activity, console.* messages, etc.

av

An audio/video project supporting Flash and QuickTime movies.

charting

An advanced charting engine based on dojox.gfx and dojox.gfx3d.

collections

A number of functions that provide support for data structures such as stacks, sets, queues, additional functionality for hashes, arrays, and so on.

color

Additional support for colorspaces such as CMYK and HSL as well as HSV.

cometd

An implementation of the Bayeaux protocol, which is a low-latency data transfer technique from servers to clients.

data

Support for custom data stores such as a FlickrRestStore, XmlStore, CsvStore, etc. that implement the dojo.data API as well as additional utility functions for dojo.data.

date

A placeholder for date operations such as formatters that are common to other programming languages or server technologies such as PHP.

embed

A means of easily embedding external objects that would normally require the use of OBJECT or EMBED tags.

dtl

A project that aims to fully implement the Django Template Language.

encoding

A set of routines for common encoding algorithms such as cryptography, digests, and compression.

flash

A project that aims to make it easy to extend Flash's capabilities into a DHTML environment.

form

A collection of useful form widgets including functionality such as a password validator, multiselects that use check boxes instead of Ctrl-clicks, etc.

fx

A set of animation effects that extend and enhance the effects provided in Base and Core.

gfx

A portable 2D graphics library that leverages technologies like VML, SVG, etc., to provide advanced graphics that may be static or animated.

gfx3d

A portable 3D graphics library. Builds upon features offered in gfx.

grid

A powerful data grid capable of rendering arbitrary amounts of data from a data store.

highlight

A syntax highlighting engine that provides client-side syntax highlighting of <CODE> blocks for various programming languages.

image

Provides support for common image operations such as playing slideshows, magnification, picking thumbnails, light box, and so on.

io

Support for XHR multipart functions and an XHR IFRAME proxy for accomplishing cross-domain XmlHttpRequests.

jsonPath

Similar to Xpath, but for querying JavaScript objects; very handy for querying complex JSON structures.

lang

Language utilities for additional operations on arrays, hashes, and extensions from functional programming (lambda).

layout

Additional layout widgets.

math

A set of advanced math functions such as abstract curve definitions, point calculations, and so on.

off

A wrapper around Google Gears that offers offline functionality for a web application.

presentation

A mechanism for various display-oriented tasks, such as presentations.

rpc

Extras on top of dojo.rpc for performing remote procedure calls.

sketch

A cross-browser drawing editor based on the dojox.gfx module.

storage

A JavaScript abstraction that provides limited support for persistent storage of data via a native browser extension, such as Flash or Google Gears.

string

Miscellaneous string utility functions.

timing

Support for advanced timing constructs.

uuid

An implementation of the Universally Unique Identifier, as described in RFC4122.

validate

A set of functions for common validation tasks such as email addressees, social security numbers, and so on.

widget

A set of widgets, similar to those found in Dijit, including an advanced color picker, a fish eye list, a toaster, a wizard, a magnifier, advanced scroll panes, and more.

wire

An API for providing simplified MVC patterns in clients by suppling a generic data binding and service invocation library.

xml

Utilities for XML processing.