This release comes with many new features and improvements besides a large number of bugfixes.
qooxdoo's GUI toolkit for feature-rich applications has become much more lightweight.
Illustrating the reduced DOM elements: previous qooxdoo (left) vs. qooxdoo 3.0 (right)
The optimizations were only possible by revisiting the browser support: We took further advantage of native features built into modern browsers. At the same time we implemented graceful degradation in older browsers (like IE8) and discontinued support for some legacy browsers (like IE6 and IE7). Moreover, this release already embraces future browsers (like IE11 Preview).
Chances are good you won't have to change anything in your existing qx.Desktop application. See the documentation if your application needs some manual adjustment (e.g. if you created a custom theme).
We have been able to achieve a good user experience in running qx.Desktop apps on touch devices. For instance, on hybrid devices (like Windows 8 convertibles) or tablet devices like the iPad. To further support the latter scenario, we introduced a new setting for you to opt-in to mouse event emulation on touch devices. This further increases subjective performance when using your fingers to interact with desktop apps.
- In addition to providing qx.Website as a single all-in-one script file we also offer separate module builds (i.e.
q-animation-3.0.min.js, …) which are freely combinable.
- iOS devices use "-webkit-overflow-scrolling:touch" instead of iScroll.
- Support for BlackBerry 10 OS.
- Support for displays with different device pixel ratios (1.5x, 2x, 3x).
- New container widget: Drawer.
- A longtap event has been added. You can test the event on the events page of the mobile showcase.
- New tool chain jobs:
- watch (auto-building the application)
- watch-scss (auto-building CSS files from SCSS, mobile apps)
- source-server (mini webserver for the source version)
- source-httpd-config (web server configuration for the source version)
- source-server-reload (auto-reload application in the browser)
- validate-config, validate-manifest (validate config.json, Manifest.json)
- Cold cache built speed-ups through pre-compiled information of the framework classes.
- Enhanced manual including special characters in search strings (`.`, `-`, `#`, `@`), and upper-case words.
See this detailed list of issues resolved for qooxdoo 3.0, which includes the fixes of the accompanying qooxdoo 2.1.2 patch release. Besides fixes for defects, many enhancements made it into qooxdoo 3.0. See here for a detailed list of issues that were resolved for 3.0 exclusively.
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.1.2, the corresponding patch release.
- Serializer now supports serializing qooxdoo classes / mixins / interfaces (#7369)
- Added a cancel method for requestAnimationFrame based frame sequences (#6994)
- Use HighResolutionTime for requestAnimationFrame if supported (#7003)
- Added a wrapper for the PageVisibility API (#5391)
- Added basecall feature (i.e.
this.base(arguments, varargs)) from
- Resolved error when overriding a generated property method (#4726)
- Only fire a change event on array splice if the content really changed. (#5777)
- Call the converter in case the property chain for binding breaks (#6880)
- Added a set of convenience methods to the data array (#6787)
- Fixed the bubble handling when removing and adding the same instance with splice (#7132)
- Fixed Single Value Binding cleanup (#6947)
- Added two new properties to the array's change event data: added and removed items. (#6207)
- Cloning DOM nodes now works as expected for collection with child nodes (#7358)
- It's now possible to add native 'MSPointer*' events to any DOM node if necessary (#7342)
- Animation of the attributes 'width' and 'height' now work for all IE browsers (7310)
- q()/qxWeb() now optionally accepts a collection as context. (#7264)
- Event module: New method allOff() removes all listeners (optionally of a given type) from the collection items. (#7202)
- Touch events are now normalized (using MSPointer events in modern IEs). (#7147)
- Do not apply the keep frame if the animation has been stopped before end (#7418)
- Fixed stopping of JS based animations (#7015)
- Two animations can run on one element when two collections are used (#6948)
- Added support for prefixed css keys in animations (#7002)
- Updated mustache.js to version 0.7.2 (#6866)
build-module-all-minjobs which build module tailored qxWeb js-files (#6849)
renderToNode()method to template module (#7300)
q('div').slice(0, 0)now returns
empty(): fixed destroying of child elems in IE (#7323)
replaceClass(): only adds a class as replacement (#7265)
- Added code samples for modules Core, CSS, Manipulating, Traversing (#7064)
- Fixed scroll handling on container edges (#6175)
- Allow to release child controls (#6932)
- Prevent dragover and dragleave events on the drag&drop cursor (#6909)
- Close all menus on scroll via mouse wheel to make sure the positioning does not break. (#7009)
- Added mouse emulation for touch devices (#7145)
- Make use of AnimationFrame in the queue manager (#7153)
- Prevent click events after drop (#6951)
- Added a method to stop scroll animations (#7211)
- Removed the container element (#7302)
- Associated buddy is toggled if qx.ui.basic.Label is clicked (#6881)
- Fixed qx.ui.toolbar.ToolBar items show property regression (#6823)
- Added missing initialization of shortcut string for qx.ui.core.Command (#7036)
- Fixed hiding of all popups in qx.ui.popup.Manager (#7126)
- Fire changeValue event when maxLength is set and value has changed (#7158)
- Double form renderer aligns labels right (#7489)
- Prevent selection of null on mouse wheel on an empty select box (#7007)
- MenuButton now has its own appearance id plus theming. (including a down arrow) (#6981)
- Make sure 0 (and only 0) will be accepted as value when the input field is set to required (#7052)
- New container widget Drawer, similar to the iOS or Android drawer widgets. It is a kind of “pull-down” menu which can be added to the application’s root or any qx.ui.mobile.container.Composite.
- qx.Mobile now supports the BlackBerry 10 OS (#7415)
- Mobile labels and list items now support runtime locale changes. (#7099)
- OrientationChange Event always returned the wrong mode on Galaxy Nexus. (#7163)
- Tap event fired unintentionally when scrolling back and forth, then releasing. (#7374)
- Replaced __selectedIndex through selectedIndex property in menu, for firing event 'changeSelection'
- Updated __selection to property in qx.ui.mobile.form.SelectBox for firing event "changeSelection" on every property apply
- qx.ui.mobile.form.SelectBox.setSelection method did not fire "changeSelection" event (#7228)
- Picker widget not "stopping" button events (#7152)
- Carousel scrolls to wrong position when user switches between TextArea on different CarouselPages (#7205)
- qx.ui.mobile.form.Form.showRow hides the row (#7210)
- Unexpected behaviour in the qx.ui.mobile.container.Carousel (#7065)
- Zoom gesture on an Android mobile platform don't work (#7115)
- Update styling of qx.Mobile radio buttons and check boxes (#7494)
- Added MS prefix to qx.Mobile SASS gradient mixins
- Improved responsiveness of checkboxes and radio buttons (#6993)
- Use Android ICS Input Field Fix (#7361)
- Use double-sized resolution images for Retina Display (#7058)
- Use overflow:scroll / -webkit-overflow-scrolling: touch; in iOS5 instead of iScroll (edit) (#5313)
- Form Renderer access to labels and rows (#7426)
- New: shownPage as property of carousel (#7397)
- Modified qx.Mobile's widget _removeAll method for returning removed children
- qx.Mobile ScrollComposite should have a scroll lock for vertical and horizontal direction (#7144)
- qx.Mobile Page has a "wait" lifecycle state (#7262)
- Added the platform type as a CSS class into Mobile's root div, for being able to react on platform specific CSS bugs
- Added "watch-scss" job to qx.Mobile Showcase
- qx.ui.mobile.form.SelectBox: Added getSelectionDialog method
- Enhance MScroll options (#6384)
- Added a "inAnimation" state for preventing double execution of any animation
- Added CSS class flag for detecting the portrait or landscape mode on root's widget
- Add SCSS Support to the Toolchain (#6859)
- Merge qx.Mobile Dialog with qx.Mobile Popup (#7069)
- Migrated theming from LESS to SCSS/SASS (#7047)
- Provide a way to create application-specific themes in qx.Mobile (#7039)
- Carousel's scrollLoop does not work on swipe (#7018)
- A longtap event has been added (#6964)
- Added a changeCurrentIndex event to the carousel (#7022)
- Updated Sinon.JS to version 1.7.1 (#7184)
- New watch job auto-builds your application when source files change.
- New watch-scss job for mobile applications, to auto-build CSS files from SCSS files when they change.
- New source-server job to start a mini webserver to export the source version of an app.
- New source-httpd-config to generate configuration snippets for popular web servers, to export the source version of an app.
- New source-server-reload job to automatically reload an application in the browser when it has changed.
- New validate-config job to validate an application's config.json.
- New validate-manifest job to validate an application's Manifest.json.
- New build-module-all job to build separate qx.Website modules.
- New build-module-all-min job to build separate qx.Website modules (minified).
- New dependencies job to speed up cold-cache compilation of applications using the current library.
- Start a mini webserver to export the SDK's index.html (for better demo and API consumption).
- Check for undocumented class properties. (#7472)
- Warnings for incomplete API documentation can now be displayed on the shell, in the API Viewer, or both. (#5939)
- The 'api' job can now optionally calculate the percentage of undocumented API items for each package. (#7019)
- Compiler hints:
`#`compiler hints are deprecated; use
`@`hints in JSDoc comments instead.
- Compiler hints:
`@lint ignoreUndefined`is deprecated; use
- Reduced icon images (physically & registered) in build (#7045)
- Added support for CSS at-rules (e.g.
@mediaetc.) in patched pyScss version (#7064)
- Changed exclude configuration key semantics: A leading
`=`in front of an excluded class will now remove also all classes required by this class from the build.
- Add new configuration key lint-check/ignore-shadowing-locals.
Manifest.jsonvalidation via JSON Schema (#6674)
config.jsonvalidation via JSON Schema (#5426)
- Updated CLDR data to v.23.1
- New lint check: Local variables that shadow global library symbols (such as qx) will now be warned about (control with lint-check/ignore-shadowing-locals).
- Fix of various pretty-printing issues (switch-case formatting, statement parsing, trailing comments, 'keep-column', 'comment-cols', 'padding' options)
- Migration job: Fix bug in the migration that could potentially corrupt code. The new implementation uses pretty-printing (with default options), so your code will be re-formatted. This is only relevant for users that haven't already migrated to 2.1.
- Compiler hints:
`@lint ignoreUndefined`is deprecated; use
- The method
setTextColorin the class
qx.ui.embed.HtmlAreahas been renamed to
setTextForegroundColor. The method still exists but is inherited from the widget API. So ode won't break but does not work as expected anymore if not updated.
- Renamed the 'event.pointer' environment key to 'css.pointerevents' (#7483)
- qx.ui.mobile.container.Carousel: Renamed setShowTransition to setTransitionDuration
- The change event of the data array features two new properties:
removedeach holding an array of items. The
itemsproperty is therefore deprecated. (#6207)
- Theming: Double borders are not supported on widgets inheriting from qx.ui.form.AbstractField in Internet Explorer 8 (#7571)
- Generator jobs source-server and source-server-reload with IE9/IE10: There is a known issue with newer IE's talking to the Python mini web server that is used by the tool chain. Those browsers easily stall on file requests, thereby stalling the web server as well. The work-around is to use a more elaborate web server like Apache or nginx (which is an easy install on Windows, just an unzip of the archive), and use the source-httpd-config job to generate a suitable config snippet for the application's source version.