Framework Features
A typical qooxdoo application is created by leveraging the integrated development tools and the client-side programming model based on object-oriented JavaScript. Since no HTML, CSS nor DOM knowledge is needed, developers can fully concentrate on creating application classes without worrying about low-level cross-browser issues.
Language
- qooxdoo runs in any modern web browser, including
- Internet Explorer 6+
- Firefox 2+
- Opera 9+
- Safari 3.0+
- Chrome 2+
- No plugins required (neither ActiveX, Java, Flash nor Silverlight needed)
- Non-critical modifications of the native JavaScript objects to allow for easy integration with other libraries and custom code
- Cross-browser JavaScript 1.6 string/array generics
Object-orientation
- Framework is fully class-based (currently about 350 classes)
- No pollution by global variables due to namespacing
- Besides regular classes, it offers abstract, static or singleton classes
- Constructors and destructors
- Public, protected and private members by naming convention, that can (partly) be enforced during development
- Single inheritance, full polymorphism
- Java-like interfaces
- Ruby-esque mixins
- So-called dynamic properties, a very convenient and powerful way to have optimized setter and getter methods generated from simple configuration
Programming
- Purely client-side JavaScript
- No HTML knowledge required
- No CSS knowledge required
- No DOM knowledge required
- Complete support for event-based programming
- Development of qooxdoo applications fully supported on all platforms, e.g. Windows, Linux, all Unixes, Mac OS X
- Quickstart for easy evaluation of the framework without the need to install any software
- Skeletons as pre-configured basis for full-featured custom applications
- Many sample applications and examples
- Designed for high performance
- Framework is memory-leak free
- Aid in developing memory-leak free user applications
- Extensive logging capabilities (e.g. different log appenders, Firebug support)
- Straightforward debugging (e.g. object introspection, benchmarking)
- Browser history management, i.e. browser back/forward button, bookmarks
- Cookies
- Generic JavaScript pretty printer / code formatter for unified code style
Internationalization
- Built-in internationalization (i18n) and localization (l10n) support
- Supporting all languages and locales, at least on this planet
- Based on the comprehensive Common Language Data Repository (CLDR)
- Internally using the mature GNU gettext tools
- Well-known translation file format (*.po)
- Support by professional, free translation tools (”po editors”) on all platforms
API reference
- Extended Javadoc-like source code comments
- Full API reference for both framework and custom application
- Online and offline API viewer application
Testing
- Integrated unit testing framework "Test Runner"
- Integrated functional testing framework "Simulator"
Deployment
- Generation of a self-contained and easily deployable “build” version
- Complexity of the build process hidden behind user-friendly commands
- JavaScript compression (removal of whitespaces, etc.)
- Automatic dependency resolution of JavaScript classes; no need for manual “require” statements or tweaking a custom build
- Automatic linking of JavaScript classes (”JS linker”)
- Copying of required static resources like images or other external files into a self-contained build
- String extraction (tremendous performance improvement for IE6)
- Shortening and obfuscating local variables and/or private members
- Optional browser-specific variant for each supported browser (e.g. Firefox-only build)
- Generation of build versions depending on user-defined variants, which allows for different products from same code base
- Removal of debug statements within the application code before deployment
Migration
- Support for easy migration of custom applications from one framework release to another
- As painless as technically feasible
- Fully integrated into the regular build system
- All non-ambiguous changes are done automatically for maximum convenience and to avoid manual find/replace errors
- All ambiguous or semantic changes that require some developer decision are put into a comprehensive checklist
Alternative programming models
- Java/Eclipse: Eclipse Rich Ajax Platform (RAP)
- PHP/Visual: Borland/CodeGear "Delphi For PHP"
