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.

qooxdoo 3.5.1 released

A new maintenance release of the framework is available.

qooxdoo 3.5.1 ships with around 90 bugfixes over the previous qooxdoo 3.5 release.

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

Download qooxdoo 3.5.1, checkout 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.

The Catalog Website: Browsing qooxdoo contribs

Ideas for a website which makes browsing and discovering contribs easier existed early on, when we started thinking about what the contrib catalog might look like finally.

With the contrib catalog in place for some time, we now have the possibility to use all this metadata (the content from the Manifest.json files) for something better than the old dusty wiki page of all available conrtributions.

So, without further ado: Have a look at the new qooxdoo contrib catalog website.

We had several goals with the new catalog website in mind:

  • Ease the process of finding a contrib:
    You can now search and sort contribs. Most parts of the manifest files are indexed, so searching for an author, a specific qooxdoo version or just all the descriptions is possible.
  • Ease the process of maintaining a contrib:
    We don’t oblige you anymore to create a wiki account, a SourceForge account and maybe also a bugzilla component. The only thing we need from you is a Manifest.json, present in the catalog, with some obvious information included (author, homepage, contrib archive for download …).
  • Better self representation as a contrib author:
    You are now able to represent your contrib much more individually. You can freely decide where you want to write your source code (e.g. GitHub or Bitbucket etc) and where to host your demos. And you don’t have to learn our wiki syntax anymore. Nowadays you just place a Markdown or reStructuredText file in the root of your project and sites like GitHub render them on your project page.

The contrib catalog website is updated regularly, so if your GitHub pull request for the catalog is accepted your new or updated content soon appears on the website.

If you’re a contrib author, please have a look at your contribs, i.e. please check if the information used from the Manifest.json files is still valid and up to date. Don’t hesitate to create a pull request.

As always we are happy to get feedback from you, especially from the contrib authors.