This is a regular release, which comes with many new features and improvements besides a large number of bugfixes.
Despite being a full release, only a limited number of manual migration steps may be necessary for upgrading from the previous 1.5.x releases. See the Migration section for more details and to determine if your apps are affected. As with most releases there might also be deprecation warnings in the development version, but those shouldn't negatively affect the production version of your app. It is nevertheless suggested to get rid of those warnings early. If you need a bugfix-only drop-in replacement, you might want to check-out qooxdoo 1.5.1, the corresponding patch release.
Offline usage is an increasingly important topic in modern apps, and is now supported by the framework. New technologies like local/session storage and offline events allow for such offline capabilities in all current browsers. To bring those features right into your apps, an offline event handler has been added and also a convenient offline data store to leverage qooxdoo's powerful data binding.
To see the offline store in action, open the enhanced feedreader demo app, load some feeds and then switch your browser to offline mode. The app continues to work even in offline mode, thus after a reload of the feeds it will be able to show the previous content.
Animations and Transforms are great new features introduced by CSS3. While both features are covered by CSS3 specs, they are not easy to use for developers working on cross-browser applications. For instance, vendors often support such features only via vendor-specific prefixes, so it becomes tedious and error-prone without proper framework support.
So with qooxdoo's new wrappers for both feature sets, animations and transforms, amazing dynamic behavior can be brought to the elements of your website-oriented applications. For future releases it is planned to extend animation even to qooxdoo's high-level widget set for targeting rich internet applications (RIAs).
Check out the following three demos to see what the differences are between the available feature sets: Animations, Transforms, 3D Animation.
Please make sure you use a browser capable of those recent CSS features, for instance a Webkit-based browser like the latest Safari or Chrome. For more details about the new animation layer you might want to read the corresponding blog post.
Creating and maintaining website-oriented applications can significantly benefit from existing features of the qooxdoo app framework. For instance, data binding for a clean MVC design of your app, or the comprehensive toolchain. Many improvements have been made for low-level applications that want to build upon technologies like HTML, CSS, DOM rather than the traditional qooxdoo GUI toolkit.
One milestone along that way was to create a website-oriented view on top of the existing feedreader demo app. A handy feature for creating such HTML snippets is to allow for a smart templating engine, so the popular mustache.js solution was adopted. With data binding being a key ingredient for any decent app design, a new list controller for templates was added to perfectly match the low-level requirements. Working on a DOM-oriented level, the new animation layer could also be used right away for some nice effects.
An additional low-level app was created to particularly feature the new offline data store: The Todo app is a simple app to manage your tasks, leveraging offline storage and data binding. For more details about the Todo app, read the corresponding blog post.
A sophisticated REST layer complements the state-of-the-art transport layer that was introduced with the last release. Guided by REST principles we will see an increasing number of well-designed, service-oriented apps in the future. As a first practical building block towards that vision the new REST wrapper comes with support for URI Templates, better handling of concurrent requests, auto-serialization of the request body based on the indicated content type and more flexible ways to define required parameters. In order to showcase some of the features of the REST wrapper a new Github demo app was added that accesses the Github REST API.
The mobile framework has been improved further. In particular, the mobile widgets come with a number of enhancements: widgets can now also be put into a disabled state, and frequently requested mobile widgets were added: Popup, Blocker, Loading Indicator, Dialog (along with a manager), Atom (a combination of label and image). The toolchain of the mobile SDK helps in developing and deploying apps, e.g. CSS files are now optimized automatically. Click the "Toolbar" buttons in the mobile showcase to see the new features in action (requires Webkit-based browser). The qooxdoo mobile framework is still labeled experimental to allow for ongoing testing and advancement, so any feedback of yours when creating mobile apps with it is appreciated.
The interactive Playground is one of qooxdoo's most popular apps. Many features of the new framework release were employed to enhance it. For instance, the offline data store was used to replace the Gist feature in order to more reliably work with individual code samples. Custom samples can now be loaded and saved via local storage. The playground's layout was adjusted to host a corresponding toolbar (see bottom left). Another brand new feature to boost developer productivity is the ability to try out qooxdoo's mobile widget set interactively. Just use a Webkit-based desktop browser (Safari or Chrome) to check out the new mobile samples in the playground!
See this detailed list of about 320 issues resolved for qooxdoo 1.6, which includes the fixes of the accompanying qooxdoo 1.5.1 patch release. Besides fixes for defects, many enhancements made it into qooxdoo 1.6. See here for a detailed list of issues that were resolved for 1.6 exclusively.
qx.core.Environment
. They have been used to replace around 60 browser engine name queries in the framework classes. (#4987)qx.dev.StackTrace
to allow custom conversion of source file names to class names. (#4660)qx.util.Base64
. (#5282)qx.Bootstrap
to a separate util class. (#5717)setHeight
in qx.bom.media.Video
. The functions now sets the height correctly. (#5760)innerHTML
. (#5481)onload
event for successful requests when using the file protocol. (#5586)ontimeout()
always being called for sync requests. (#5629)open()
, throw if method or URL is missing. (#5797)X-Requested-With
header. (#5387)x-www-form-urlencoded
for methods that allow a request body (including PUT). (#5570){set|get|remove}RequestHeader()
. (#5567)AbstractRequest
. (#5568)json/xml
content types. (#5818)invoke()
. (#5665)map()
. (#5657)get
as action name. (#5625)invoke()
public.baseUrl
. (#5773)onPool
method to get informed when a widget is set to the internal pool. (#5508)NavigationPage._getNavigationPage
function. (#5555)basic
skeleton, the test
job will produce an application that will run the application's unit tests in Rhino or Node.js.abort()
switch state to DONE when OPENED and sent..gitignore
file (for those who care).#ignore
compiler hint now allows a glob-style wildcard ('*'), so that you can ignore entire name spaces of symbols (e.g. #ignore(foo.bar.*)).variants
optimization. This ensures all static class dependencies will be loaded, including mixin references in calls to qx.core.Environment.filter(). qx.core.Environment
, and not qx.core.Environment itself. This also means that dependencies are maintained correctly across parts. Dependency calculation and variants optimization are sped up by this. (#5516)QOOXDOO_PATH
from the OS environment. If set, it will take precedence over configuration file macros of the same name.shell
config key, by using the GENERATOR_OPTS
macro. (This is interesting for nested generator invocations).#optional
compiler hints. It was just doing the same thing as #ignore
, so just use #ignore instead. qx.dev.StackTrace.FORMAT_STACKTRACE
, which replaces qx.log.appender.FORMAT_STACK
. (#4660)css.gradients
in favor of css.gradient.linear
.css.translate3d
in favor of css.transform.3d
.ecmascript.objectcount
because the browser feature is deprecated as well.qx.io.AbstractRequest#requestHeaders
property is deprecated. (#5571)packages/i18n-with-boot
renamed to packages/i18n-as-parts
with inverted logic; please update your config.json if you are using this key.qx.io.AbstractRequest#timeout
: The timeout parameter is now interpreted as milliseconds (was seconds). (#5462)qx.bom.Stylesheet
does no longer auto-convert resource IDs using the resource manager. Call the ResourceManager explicitly instead.