qooxdoo 2.1 (2012-11-14)
Summary
This release comes with many new features and improvements besides a large number of bugfixes.
Highlights
General
- Internet Explorer 10 is now fully supported. This allows qooxdoo to target new platforms such as Windows 8, Windows RT and Windows Phone 8. Leverage free tools like Apache Cordova ("PhoneGap") to even create native apps either for Windows 8 and Windows RT or for Windows Phone 8.
- A Tutorial application was introduced to interactively guide new users through some fundamental desktop and mobile samples. This complements existing ways to get started with qooxdoo, e.g. the Playground or written tutorials for desktop and mobile.
Website
- qooxdoo's website-oriented features have been around as a pre-built library, typically called "q" due to its top-level namespace. To avoid conflicts with your environment, you may now also use the alternative identifier qxWeb.
- New modules were added, e.g. for local Storage, Placeholder support in form fields, Placement of DOM elements and client-side Messaging.
- Cross-browser Animations saw further improvements. For instance, Animated Scrolling is now available in the Manipulating module. Moreover, you have more ways to control and finetune animations, e.g. for iteration, delay or start events.
- Two demo applications, the website variant of the Feedreader as well as the Todo app, were rebuilt using q. The latter app takes advantage of the Storage module.
Mobile
- The mobile widget set now ships with some awesome additions: Carousel, Picker, scrollable TextArea or Canvas.
- Some other improvements: The layout of mobile forms has been polished. All widgets now include convenient transform functions (rotation, scale and translate). And a mobile view for unit testing is available.
Desktop
- Dynamic Theme Switching is a great new feature when supporting several themes for an app; it not only makes development of custom themes faster, it can also be included with the final app: see the Theme dropdowns in either Demobrowser or Widgetbrowser.
- Animations also make it into the desktop widget set: fade in, fade out or scroll animations can easily be applied to those rich interfaces.
- The VirtualTree, a widget for handling even huge hierarchical data sets very efficiently, now offers advanced capabilities to filter and sort items.
Tooling
- The toolchain is an integral and powerful part of the qooxdoo SDK. For many typical usecases it is now faster and more robust. The new JS parser, introduced with 2.0, has been extended to take over more use cases from the old one.
- Code validation is performed by a dedicated tool (a.k.a. the "lint" job), but also by the compiler when generating an app. Those two warning systems have been unified into one, along with improvements in validating JS and JSON files.
- Writing API documentation can be error-prone. Now developers benefit from a stricter parsing and analysis of JSDoc comments, including checks for parameter types, return values and other possible inconsistencies.
- When working in a team of developers, or when incorporating code from several sources, a consistent coding style is beneficial. The pretty-print feature was revamped and includes some handy features for reformatting code, such as limiting the length of code lines.
Bugfixes & Enhancements
See this detailed list of issues resolved for qooxdoo 2.1, which includes the fixes of the accompanying qooxdoo 2.0.3 patch release. Besides fixes for defects, many enhancements made it into qooxdoo 2.1. See here for a detailed list of issues that were resolved for 2.1 exclusively.
Migration
Some manual migration steps might be necessary when upgrading from the previous releases, see the Migration guide. Deprecation warnings in the development ("source") version shouldn't negatively affect your app in production ("build"), but it is recommended to get rid of those warnings. A bugfix-only replacement is available as qooxdoo 2.0.3, the corresponding patch release.
Core
Core
- qx.log.Logger now includes the stack trace when serializing error objects.
- Fixed source loading of huge applications for IE.
- Fixed removeListener for listeners added with addListenerOnce.
- Make sure to return the right value in application routing.
- Updated the cursor implementation.
- In class handling removed the setting of overflow styles (not needed nowadays). (#6618)
Data Binding
- Added the possibility to tell the JSON marshaler which parts to ignore during marshaling. (#6580)
Browser Support
- Fixed CSS border-image feature detection for Firefox 15+.
- Fixed transform detection for IE10.
- Fixed chrome bug which caused ellipsis in most labels. (#6799)
Transport
- qx.io.rest.Resource is production ready now.
- "poll" method of "qx.io.rest.Resource" should not start immediately. (#6642).
- New method
qx.application.Routing.getStatereturns the history hash of the navigation handler. qx.application.Routing.inittakes an optional default route as argument.qx.uitable.model.Remote.reloadDatanow clears its data only when new data arrives from another request.
Low-level
qx.bom.element.Style.compilenow uses vendor-prefixed CSS property names if necessary.
qx.Website
- Fixed bug in the templating where plain text instead of a text node has been returned.
- Fixed memory leak in the event emitter.
- Added missing methods.
- Added a storage module.
- Added a placeholder module.
- Added a messaging module. (#6781)
- Added a core module.
- Added iteration / start event to the animation layer.
- Added possibility to delay animations.
- Animation module now supports animated scrolling.
- Animation keep frame will be calculated right for reversed animations.
- Added a isPaused method for animations.
- Added a cross browser wrapper for 'requestAnmiationFrame'
- Added scroll animation support. (#6702)
- Enhanced the polyfill module.
- The filenames now contain the version number.
- Bug fixes in the IO module.
- Updated mustach.js to version 0.7.0.
- Updated sizzle to version 1.8.2.
- Support for noConflict mode added. (#6766)
qx.Desktop
UI Core
- Fixed incorrect arrow position of qx.ui.container.SlideBar (#6675)
- Make sure a drop event does not fire a click event on virtual tree.
- Added fadeIn / fadeOut animation to the widget class.
- Added scroll animation support. (#6657)
- Added possibility to prevent drops based on the current set action e.g. allow move but no copy. (#6825)
Form
- Use the native placeholder for Firefox.
- Fixed placeholder wrap behavior.
- Fixed a missing input event for input fields.
- Make sure to reset the input value on input fields to ensure the firing of input events.
- Exposed the redefineItem method of the resetter in the form.
Widgets
Virtual Widgets
qx.ui.tree.VirtualTreenow supports sorting and filtering (via a delegate).
Theming
- Fixed web font rendering for safari.
- Fixed shadow resizing / positioning when shadow objects are changed during runtime.
- Fixed usage of box shadow and linear gradients in IE.
- Fixed date chooser appearance of the simple theme.
- Color themes can now contain self references. (#6705)
- Runtime theme switching added. (#6748)
- Added documentation on how to use the Widgetbrowser for custom theme development. (#5261)
qx.Mobile
- Added null state and placeholder to qx.Mobile SelectBox. (#6729)
- iOS6 support for qx.Mobile. (#6893)
- Android 2.3 Form Field Fix (iScroll) is only used till Android 4.1. (#6896)
- Fixed wrong positioning of Dialogs. (#6885)
- Atom should be able to change its image after initialization. (#6806)
- Added qx.ui.mobile.embed.Canvas. (#6900)
- Added transform/scale/rotate methods to
qx.ui.mobile.core.Widget. (#6888) - Implemented fallback for mobile widgets transform: translate3d() to translate() if "css.transform.3d" environment variable returns false.
- Prevent mobile showcase from loading desktop icon set.
- Added a picker widget
qx.ui.mobile.dialog.Picker(#6815) qx.ui.mobile.list.List: Improved rendering performance. (#5185)- "Soft Keyboard" - don't hide after textField input on ios mobile environment. (#6775)
- Re-layouting of qx.Mobile Forms. (#6524)
- "changeSelection" event should be fired by
qx.ui.mobile.form.SelectBox. (#6769) - Support for Ripple Emulator. (#6686)
qx.ui.mobile.page.NavigationPageshould provide full screen mode. (#6550)- Allow reverse direction in
qx.ui.mobile.form.Slider. (#6522) - Added
qx.ui.mobile.form.Groupfor improved layouting. (#4906) - Updated qx.Mobile Event Showcase.
- Added a OpenStreetMap example to Mobile Showcase. (#6386)
- Fixed Android form input field bug. (#6646)
- Handle visibility on form rows. (#6829)
- Mobile Carousel should allow page scrolling. (#6911)
- Make qx.Mobile support Internet Explorer 10. (#6929)
- Created
event.mspointerenvironment variable, which checks for IE10 MSPointer events. (#6929) - Fixed Inspector for working with qx.Mobile Apps. (#6480)
- Deprecated the mobile navigation manager in favor of the application routing. (#6574)
qx.Server
- Added the environment key 'runtime.name'.
- Added the version number to the NPM package description's main key.
Applications
- Made Inline applications mobile-ready. (#6652)
Showcase
- Used the routing class for navigation.
Demobrowser
- Added a animation timing compare demo.
Playground
- Updated ACE to version 1.0.
Tutorial
- Newly added application for live tutorials.
Feedreader
- The website view is based on qx.Website aka q.
Todo
- Complete rewrite based on qx.Website.
Test Runner
- The Test Requirements feature is now compatible with DOMless environments (node.js, Rhino).
- Added a mobile view and corresponding test-mobile job (mobile skeleton).
- HTML view: Improved test selection speed in older browsers.
- Widget view: Added a 'clear results on run' option.
Feature Configuration Editor
- Feature Configuration Editor works on mobile devices. (#6588)
Tooling
- The create-application.py scaffolding helper is now available in the SDK root directory.
- Using an alternative Json parsing module allows JS-style comments in all .json files, e.g. Manifest.json, better error reporting, and a command-line Json checker
jsonlint.py. - Added -I as short for –no-progress-indicator to the generator command-line options.
Generation
- Faster library scans with cold cache, through selective class parsing.
- Made library scanning more lenient, so that all library assets (classes, resources, translations) are optional.
Configuration
- New log/translations key.
Internationalization
- New locals cs, pt in framework and apps.
- Upgraded polib module to version 1.0.1.
- With the new module, escaping of embedded double quotes is now mandatory (e.g.
msgid "foo \" bar").
Code Validation
- New implementation of warning module unifies warning output of compile and lint jobs. (#4615)
- Lint job now takes the compile libraries into account so that their symbols are recognize as known.
- New lint JSDoc keys to suppress certain warnings: environmentNonLiteralKey when warning about non-literal first arguments in calls to e.g. qx.core.Environment.get; ignoreNoLoopBlock when warning about loop bodies (if, while, for) not being a block statement.
- The 'lint-check' config key is now generally declarative (i.e. does nothing) if the subkey lint-check/run is not set to true.
- Besides that there are multiple new 'lint-check' config sub-keys, to control source code checking on the global level, like ignore-multiple-mapkeys, ignore-catch-param, etc.
Code Formatting
- New pretty-printing implementation.
- New pretty-printing option pretty-print/general/text-width, to limit the length of source code lines.
Documentation
api-verifyjob can now check the documented types of function parameters and return values for validity.- qx.Website: Added polyfill documentation to API Viewer.
- Added an manual page about events in the data binding context.
- The SDK's manual (under documentation/) is now offline-capable, e.g. containing all required style sheets and fonts.
- New implementation of the JSDoc parser; syntax of JSDoc comments is now treated more strictly.
- New sourceViewUrl library property allows the inclusion of links to source code with the class documentation in Apiviewer.
Migration
API Changes
- The source property of qx.ui.embed.Iframe and qx.ui.embed.ThemedIframe are no longer nullable. Instead, they now use 'about:blank' as init value.
- Deprecated unused qx.util.format.DateFormat.LOGGING_DATE_TIME__format.
- Moved the RingBuffer class from qx.lang to qx.util.
- A bug in the inset calculation of the shadow decorators changed the insets handling. (#6684)
- qx.bom.Collection is deprecated in favor of qxWeb.



