qooxdoo 4.1 released

We are happy to announce a new release of the framework, qooxdoo 4.1.

Many thanks go to the entire community for making this happen: the team of core developers, 1&1 as the supporting company, all contributors and users who brought in their bugfixes, suggestions and improvements.

qooxdoo

 

The qooxdoo 4.1 release comes with many substantial improvements as well as new features – across the entire framework. In fact more than 170 bugfixes and enhancements made it into the release. See the changelogs as an detailed overview in release notes. In the following we just pick some of the highlights in each of the different domains of the framework.

General improvements

As a state-of-the-art framework qooxdoo continues to embrace new browsers (and their additional features) while phasing out on the legacy browsers. For instance, the new release comes with improved support for IE11 as well as Firefox 31 and beyond. Likewise, Safari 8 and its mobile cousin on iOS 8 is taken care of. On the other hand notorious legacy browsers such as IE6 and IE7 are no longer supported in the qx.Website domain of qooxdoo.

With each regular framework release the previous deprecations, i.e. development run-time warnings, get removed along with their former APIs or feature code. This time it’s about the qooxdoo 4.0 deprecations, so adjust your code base accordingly prior to migration.

Besides many other maintenance tasks in the framework core, the resulting code size of the Environment classes, responsible for feature-detection within your apps, was significantly reduced. The comprehensive data-binding layer saw several further improvements. The event layer was further polished after the introduction of input-device independent pointer events with the last major release this summer.

Website

The family of website widgets, meant for easy use on dynamic web pages, were refined as well. Take as an example the Calendar, which adds range selection, or the Tabs, which became responsive.

To enhance the low-level layout capabilities we made the flexbox styles from qx.Mobile available in qx.Website, used them in
the Tabs widget and added a manual page explaining how to include them in custom website-oriented applications.

Several usability updates went into the website API viewer. Its interactive samples now leverage the more robust CodePen instead of jsFiddle. Overall, the API viewer comes with more samples, a better search and it starts up faster.

Mobile

As mentioned qx.Mobile is ready for iOS 8 and the new iPhone models. A key aspect of mobile apps are powerful scrolling capabilities. Introducing the waypoints feature, you can now react to and trigger actions on custom-defined scroll positions. This handy feature for instance lets the mobile List to realize a popular “pull-to-refresh”.

The mobile widgets are a mature set of UI elements for all device classes. In this release it further benefits from stability refinements, e.g. memory leak fixes. Refactorings within widgets could not only reduce redundancy, but also take advantage of enhancements in the mobile layer. As an example, the refactored picker now comes with the momentum scrolling known from regular scrolling in the mobile toolkit.

qx.Desktop

The GUI toolkit to create compelling Single-Page Applications was advanced as well in many areas. Improvements went into virtual widgets in general, and the Table widget in particular. All of those scale easily to handle large amounts of data.

Commands allow to globally define keyboard shortcuts and assign them to widgets. They can now be organized in command groups. Some other improvements to qx.Desktop include drag & drop, scrolling areas and theme switching.

Tooling

Continuing with advancing the JavaScript-powered toolchain, we started to supply key parts such as an underlying caching layer, as well as optimizations for private variables and for variants. An initial implementation of generating a self-contained “build” version also made good progress, so the Grunt tooling gets more complete continuously.

 

Check it out!

qooxdoo 4.1 is available for download. Check out the detailed release notes and the manual. Watch the code repository on GitHub.

Thanks

Many thanks from the core developers to the community of contributors and users. Please help to spread the news, get people excited about the latest releases, and show them how to deploy qooxdoo as a truly universal JavaScript framework.

Enjoy! :)

qooxdoo 4.0.2 released

A new maintenance release of the framework is available.

qooxdoo 4.0.2 ships with almost 80 bugfixes over the previous qooxdoo 4.0.1 release.

As a patch release qooxdoo 4.0.2 is fully backwards-compatible to the previous versions 4.0.1 and 4.0. Nothing needs to be changed in your existing apps if they are already based on those versions. When upgrading from an older version you can migrate directly to 4.0.2.

Download qooxdoo 4.0.2. Check out the detailed release notes and the manual.

Many thanks from the core developers to the community, particularly for reporting issues and your help in improving the framework.

qooxdoo 4.0.1 released

A new and important maintenance release of the framework is available.

qooxdoo 4.0.1 ships with about 20 bugfixes over the previous qooxdoo 4.0 release.

Some of the fixes finalize the event layer for input device independence that we introduced with qooxdoo 4.0, e.g.:

  • Tap event now works properly in IE 10/11 on Windows 7 (see blog post)
  • Fixed additive selection mode
  • Fixed drag & drop on the Table widget

Given the many improvements of qooxdoo 4.x, we recommend you take the latest release into production and upgrade your apps to qooxdoo 4.0.1.

As a patch release qooxdoo 4.0.1 is fully backwards-compatible with the previous version. Nothing needs to be changed in your existing apps if they are already based on qooxdoo 4.0. When upgrading from an older version you can migrate directly to 4.0.1.

Download qooxdoo 4.0.1. Check out the detailed release notes and the manual.

Many thanks from the core developers to the community, particularly for reporting issues and your help in improving the framework.

qooxdoo 4.0 released

We are happy to announce a new release of the framework, qooxdoo 4.0.

Many thanks go to the entire community for making this happen: the team of core developers, 1&1 as the supporting company, all contributors and users who brought in their suggestions and improvements.

qooxdoo 3.5

A major highlight of the current release covers all three GUI toolkits (website, mobile and desktop). Your qooxdoo-based app can now work with all kind of input devices. This is an awesome feature in this ever-growing multi-device world:

Input Device Independent Events

qooxdoo’s three widget sets (for desktop, mobile and website) used to have specific relations to the typical input devices, i.e. mouse for desktop or website, and touch for mobile. So using one type of app with an input device it wasn’t meant for initially, wasn’t ideal. For that reason, we had already added emulation layers for mouse on touch devices and for touch on PC-like devices. But transforming one event model into another is error-prone and just doesn’t feel natural.

Luckily, there already is a W3C spec, named Pointer Events, which tackles this problem. The main idea of this spec is to offer a unified event model, independent of the input device. In a nutshell, the spec defines how to map mouse, touch and pen input to pointer events.

That’s exactly what we did for all three GUI toolkits: Create pointer events in all browsers that don’t support them natively. That meant adding event handlers for the website and desktop / mobile layer, connecting those events to the widgets and changing every widget to listen to pointer events instead of mouse / touch events. While that’s what you could do with your own app as well, there is no need to use pointer events if you (think you) don’t need them. Mouse and touch events are still supported just as they were before the change.

We did not stop with the fundamental pointer events, however. Features we call “gestures” were also introduced on top of pointer events. This includes simple interactions like tap (as an alternative to click), but also some multi-pointer gestures such as rotate, well-known from touch devices. Check out the following sample using qx.Website:

q("#target").on("tap", function() {
    console.log("tap");
});

Using the same gesture in qx.Desktop / qx.Mobile is just as easy:

target.addListener("tap", function() {
    console.log("tap");
});

We also changed the drag & drop implementation for qx.Desktop, which now supports touch devices as well. The final thing we had to change was scrolling, because touch devices usually don’t have scroll bars or a mouse wheel. That’s where the new roll event comes in handy. This is an abstraction gesture for both mouse wheel and touch scrolling, also available in all three GUI domains. Here is a sample of a simple scroller for qx.Website:

q("#target").on("roll", function(e) {
    this[0].scrollTop = this[0].scrollTop + e.delta.y;
});

If you’re interested in the details behind the topic of input device independence, check out the first blog post about pointer event support or the manual pages about pointer and gesture events.

See the following sections on our work in other parts of the framework, like Grunt-based tooling:

Grunt Tooling

Continuing with advancing the JS toolchain, we started reimplementing the source job as a Grunt task. Along with that we introduced several npm packages (dependency, library, locale, resource and translation), which provide the underlying functionality. Of course, those packages are properly covered with unit tests and JSDoc comments. As a consequence of that modularization, the Grunt task itself is only a small wrapper orchestrating the aforementioned packages. The source job is the first building block for creating qooxdoo apps with Node.js (i.e. JavaScript code) only. We did not replace the Python-based default source job with the JavaScript-based variant, so you can still continue to use the existing, integrated toolchain.

Website

In addition to the huge new feature of pointer events, the development and enhancement of the website API viewer continued with many practical enhancements such as searchable polyfill methods or flagging of optional parameters. We also took some time to finish and polish the website widgets, which allowed us to remove their former experimental state.

Mobile

The list is one of the most important widgets in the whole mobile GUI toolkit. We added two new features to the list with this release. One is a grouping feature, which you might know from mobile apps such as the typical contacts app. The second new feature is called “swipe to delete” and is a handy feature to delete list items. You can see both features in the mobile showcase, which also demonstrates some of the many improvements made to qx.Mobile.

Contrib

We improved the process of finding new contribs with introducing a new contrib catalog website. It represents user-provided contributions available in a searchable and sortable way. The data used for the catalog website comes from the contrib-catalog repository, which provides all the metadata aggregated already. The new infrastructure is a starting point for a better community-driven exchange of solutions and code, thus your support to further improve it and to enhance it with your contributions is very welcome.

Migration

Introducing pointer events was a huge effort, of course, that included a lot of changes to the framework code. Fortunately, you might not or only slightly be affected with your own app code, related to a few public API changes. On the other hand, if you extend qooxdoo classes and created custom widgets based on some protected API, some changes might break your code. Make sure to run the migration job, read and follow the migration hints in the release notes, and you will end up with a future-embracing version of your app.

Check it out!

qooxdoo 4.0 is available for download. Check out the detailed release notes and the manual. Watch the code repository on GitHub.

The qooxdoo 4.0 release comes with many substantial improvements and exciting new features. In fact over 300 bugfixes and enhancements made it into the release.

Thanks

Many thanks from the core developers to the community of contributors and users. Please help to spread the news, get people excited about the latest releases, and show them how to deploy qooxdoo as a truly universal JavaScript framework.

Enjoy! :)

Icons taken from icons8.