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.

qooxdoo 3.5 released

 

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

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

qooxdoo 3.5 is another landmark in the framework’s ongoing evolution of being a universal JavaScript framework. The current release introduces such highlights as a lightweight widget set for websites and it embraces an ever-growing ecosystem for JavaScript tooling.

 

qx.Website

The website-oriented part of qooxdoo had already become an enterprise-grade solution for developers to enhance their websites with dynamic functionality. One frequent request was the need for “low-level widgets”.

So we added a qx.Website Widgets library that provides a set of lightweight UI components ready to be integrated into any web project. These widgets use the same collection API paradigm as qx.Website itself, so they can be be initialized and customized in just a few lines of code. Each widget can also be configured using HTML data attributes so that a website’s UI can be defined entirely in (server-generated) HTML and initialized with only a single line of JavaScript.

For the initial release, the library contains the following components: Button, Calendar, Rating, Slider, Tabs, Accordion. More will be added in the coming months – let us know which UI components you would find useful.

Please note that the Widgets module is considered experimental, i.e. the API can still change. We expect it to be finalized for the next major release, your input is appreciated.

The addition of new qx.Website modules necessitated a redesign of the qx.Website API Viewer‘s navigation.

Modules are arranged in groups and a filter box can be used to narrow down the list of methods. Thanks to the responsive UI, the API Viewer works well on phones and tablets, too.

 

qx.Mobile

When specifically targeting smartphones or tablets, qooxdoo’s mobile GUI toolkit continues to be the perfect choice. Many improvements went into the qooxdoo 3.5 release that emphasize its capabilities to let you create elaborate mobile apps.

One of the most challenging features in a multi-device world is proper application scaling. qx.Mobile now enables you to easily adjust the scale of your qx.Mobile app (or even let your users do so), simply by changing the root font size.

This is made possible by the built-in themes that are now fully resolution-independent. In technical terms this means that relative units are being used throughout the themes instead of absolute pixel units. No matter how small or large your font settings are, the mobile widgets will scale accordingly.

qx.Mobile is built upon CSS-based themes, backed by the popular SCSS precompiling technology. We took the chance to consolidate and improve the themes provided by the framework. For instance, we expose many widget style variables to the main SCSS file of a theme. Modifying colors or using linear gradients becomes trivial. It is now even easier to create your very own custom theme.

So-called “flat” designs became popular on mobile operating systems recently. In leveraging the new capabilities for custom themes, we created and shipped a new “Flat” theme.

Support for Windows Phone 8 and Internet Explorer 11 has been enhanced. The modern IEs 10 and 11 now take advantage of native scrolling, providing a much smoother user experience. Multi-touch handling was also added for those browsers, based on pointer events. Target those emerging device classes (hybrid devices, convertibles, etc.) with your qx.Mobile app.

Besides fixes and improvements throughout qx.Mobile many existing widgets were enhanced. To pick just one example, the mobile Carousel can now host a large number of pages due to its pagination overflow handling.

 

Tooling

We introduced experimental Grunt support. Grunt.js is a popular task runner based on Node.js. The features of the qooxdoo toolchain nicely blend with Grunt. We’ve begun to leverage Grunt’s ecosystem of plugins and combine the best of Grunt with the best of the qooxdoo Generator.

For newly created qooxdoo apps all Generator jobs are now also available through a Grunt frontend. For instance, instead of writing generate.py source you can now use grunt source, too.

In order to use it in your existing app take a look at the Gruntify existing apps section in the manual. Grunt offers a huge number of Grunt Plugins waiting to be utilized. Go ahead and read our Grunt manual page to find out about the possibilities and what we are aiming for.

 

Check it out!

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

The qooxdoo 3.5 release comes with many substantial improvements and exciting new features. In fact about 190 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! :-)