Document Information

Last modified:
2011/04/07 15:31 by thron7

qooxdoo 1.4 (2011-04-07)

Summary

This is a regular minor release, thus it not only includes many bugfixes but also many new features and improvements.

Highlights

  • With qooxdoo being a universal JavaScript framework not only for typical rich internet applications, but also for low-level webapps (think jQuery) or GUI-less server-side solutions (think node.js), it was quite a natural step to embrace the mobile world as well: Now you can leverage qooxdoo's object-oriented programming model and its powerful toolchain to also create mobile apps for smartphones. With its dedicated mobile widget set you can create multi-platform mobile apps (currently for Android and iOS devices), while sharing code and app logic with a more typical desktop-oriented qooxdoo app. A mobile variant of the feedreader demo for instance reuses a common layer based on data binding, while a mobile showcase highlights most of the existing mobile widgets and features. As with most of the mobile world nowadays also qooxdoo's mobile enhancement is still experimental and work in progress. We will keep you up-to-date and invite everybody to try it out, get familiar with its current state and contribute back.
  • The set of virtual widgets, which can easily handle even huge data sets, has been completed even further. The virtual List, introduced as experimental last time, is now meant for production. In addition both a new virtual SelectBox and a virtual ComboBox are ready to be used. And yet another thing: a new experimental virtual Tree is also part of the package.
  • Introduced new "Simple" theme, which leverages modern browsers' new theming capabilities, specifically CSS3, not requiring images for gradients, rounded borders or shadows. The "Modern" default theme has been updated to also take advantage of CSS3 in newer browsers. Two different fallback strategies for legacy browsers have been implemented in those themes: while Modern falls back to the previous image-based theming, the Simple theme looks a bit less shiny but still great in browsers like IE6 and others.
  • Talking of images: there is now full support for base64 images, which get included via "data:" urls as inline resources in today's browsers. The toolchain greatly supports you in doing so in quite a transparent way, i.e. with a proper fallback in older browsers.
  • With that many enhancements in theming, it made sense to create a new demo app that showcases most - if not all - of the widgets and themes that ship with the framework: The new Widget browser complements the existing demo apps like Showcase, Demobrowser or the interactive Playground.
  • With the large variety of classical browsers, even browser-based runtimes, on desktop as on mobile, there's much debate about feature detection. Besides all religious beliefs, in practical life every developer should be able to decide to what extent an app should take advantage of build-time and/or run-time branching. qooxdoo supports both in an elegant and powerful way: with the new "Environment" implementation you can go from a pure feature detection at run-time to optimized feature-specific builds. It also unifies and replaces qooxdoo's previous layers for feature detection, settings and variants.
  • Apparently a general topic of this release is the enhanced support for modern browsers. Of course, this release comes with full support for the latest browsers IE9 and Firefox 4. It also comes with extended HTML5 support, including first experimental wrappers to Audio, Video, Geolocation, Web Storage, Web Workers.
  • The new Testrunner, included as a preview in the last release, has replaced the previous one. It is a prominent part of qooxdoo's built-in unit testing solution. The Testrunner is now elegantly based on data binding, and allows for different UIs: while it still comes with the traditional rich user interface, it also supports a lightweight HTML view and even a pure browser console view. Advanced developers will also appreciate the possibilities to use spies, stubs and mocks within their unit tests.
  • Another experimental tool of the previous release is now meant to be put into production: The Simulator is qooxdoo's built-in solution for automated GUI tests using Selenium. All infrastructure now ships with the SDK, you only need to download Rhino and Selenium RC.
  • The comprehensive toolchain has been made even more robust, e.g. when developing apps against multiple framework versions, for varying platform setups, with a more complete dependency analysis or when creating localized apps. Besides spearheading or complementing new enhancements like feature-specific builds or base64 images, it introduces a handy source-hybrid target, for generating an app, which combines the ease of debugging an app's source version with near the speed of loading its build version.

Bugfixes & Enhancements

See this detailed list of issues resolved for qooxdoo 1.4, which includes the fixes of the accompanying 1.3.1 patch release. A detailed list for those issues that were resolved for 1.4 exclusively, see here.

Migration

Being a regular release with many additional and improved features, there are some migration steps needed for upgrading your apps from the previous 1.3.x releases. After the semiautomatic migration steps supported by the toolchain, you will most likely notice a number of typical deprecation warnings in the development version of your apps ("source"), while that shouldn't affect the production version of your app ("build"). Nevertheless you should get rid of those runtime warnings altogether by adjusting the places in code you are pointed to.

If you need a bugfix-only drop-in replacement, you might want to check-out qooxdoo 1.3.1, the corresponding patch release.

Framework

Core

  • Added new Environment system used for an improved and unified feature detection. (#4641)
  • Added new feature detections, e.g. for data: urls (#4572), css border radius, css gradient and css box shadow (#4610).
  • Fixed execution order of all internal queues. (#4691)
  • Improved consistency in return values for all removeAll methods. (#4367)
  • Improved disposal of objects. (#4629)
  • Added a runtime warning if an event handler or deferred call is called with a disposed context. (#4695)
  • Added helper to qx.lang.Object that serializes a given map to URI parameters.
  • The GlobalError handler called the existing handler with wrong parameters. This is now fixed. (#4604)

Browser Support

  • Completed full IE9 support. See a list of fixed issues with this release.
  • Completed full Firefox 4 support.
  • Handle "scroll" event fired asynchronously by some browsers. (#4570).

Transport

  • Processing time of request handlers is no longer counted when determining whether the request has timed out (#4422).
  • Fixed erroneous HTTP status reported by IE (#4476).
  • Global error handling catches errors in completed request handler. (#3861).
  • Added two convenience methods to the part loader to query available parts. (#4326)
  • Minor fixes in the part loading. (#4482)
  • New qx.bom.request.Xhr (experimental), a wrapper of the XMLHttpRequest host object that abstracts browser inconsistencies.
  • New qx.io.request.Xhr (experimental), a convenient interface to send AJAX requests and handle responses.

Data Binding

  • Minor fixes in the data binding core layer. (#4487, #4748, #4823)
  • Minor fixes in the data binding controller. (#4531, #4756)
  • Harmonized the changeBubble events for data arrays. (#4659)
  • Improved error handling of the JSON data store. (#4426)
  • Improved error handling of the JSON marshaler. (#4663)
  • The converter function can now access not only the source but also the target object. (#4290)

Low-level

  • Added first experimental wrappers to HTML5 features: Audio and Video (#4720), Geolocation (#4723), Web Storage (#4656), Web Workers (#4721)
  • The qx.dom.Node class gained support to handle CDATA text nodes (#4767)
  • More reliably apply overflowX/overflowY styles. (#4493).
  • Added callback mechanism when opening a native window. (#2683)
  • In qx.xml.Element: added getAttributeNS function to complement the existing setAttributeNS function (#4308)
  • Load event added for image DOM elements (#4526)
  • Updated CSS selector engine to latest Sizzle version 1.5.1. (#4353)

Mobile

  • Introduced experimental widget set for smartphones (Android / iOS). (#4707)
  • New mobile showcase apps: see mobile feedreader and mobile showcase below.
  • New environment checks for PhoneGap, feature CSS translate3d.
  • Fixed browser language detection on Android. (#4787)
  • Fixed mouse click event handler for iOS devices. (#4483)
  • Improved tap event for Android devices.

Util

  • DateFormat inconsistencies fixed, adheres to Unicode standard now.(#4577)
  • Added Norwegian translation for framework.
  • Added a check for data arrays in append method of qx.type.Array. (#4488)
  • Fixed serialization of translated strings and data arrays. (#4552, #4753)
  • Fixed JSON parsing of dates. (#4502)
  • Removed an accidentally used default value in the Timer class to align with existing docs. (#4835)
  • Handled an exception that occurred when aborting the image loading. (#4899)
  • Fixed lazy scrolling to given position (#4516).
  • Reflow text when enabling text wrapping after initial browser paint (#4517).

GUI Toolkit

UI Core

  • Normalize input event when adding line break to qx.ui.form.TextArea across browsers, including Opera (#4511).
  • Prevent page from scrolling down when hitting the space key while a widget is focused (#4465).
  • Solved a dispose problem with commands. (#4532)
  • Added dynamic mouse wheel speed calculation as a default setting to normalize across varying and volatile browser behavior. (#4528)
  • Mouse wheel event is now passed to the parent if the scrolling area is either at end or start. (#4724)

Layouts

  • The Flow layout is now usable within a scroll container. If there are more items to show than space is available a scrollbar is automatically displayed.
  • Grid layout got fix for an edge case. (#4703)
  • Proper handling of assigning negative values to BoxDiv decoration. (#4548)

Widgets

Form
  • Minor fix for Buttons. (#4673)
  • Disabled native resize of textareas in Gecko browsers. (#4760)
  • New crossbrowser auto-sizeable TextArea (#4324).
  • Customizeable weekday format in qx.ui.control.DateChooser (#4473).
  • The text inside qx.ui.form.TextField is now vertically aligned (#1585)
  • The model selection of the radio group now also works if the targeted radio button is not visible
  • Added remove and getItems to the validation manager. (#4485)
Toolbar
  • Toolbar overflow handling can now take into account button adds and removes. (#4687)
  • Fixed flickering of the toolbar overflow handling. (#4542)
  • Added left, middle and right states to the toolbar elements.
ComboBox
  • Fixed keyboard navigation in qx.ui.form.ComboBox with rich text items (#4389).
  • Fixed broken focus handling in combobox when popup is visible (#4453).
  • Fixed key press issues of combobox(#4550, #4538)
Tree
Image
  • Added support for using base64 encoded image URLs, aka data: URLs. (#4555)
  • Fixed resetting source of qx.ui.basic.Image. (#4524).
Embeds
  • Added loading, loaded and timeout to the qx.ui.embed.Flash widget. (#4061)
  • Detect and properly handle user navigation in qx.ui.embed.Iframe (#4481).
  • Sometimes it could happen that the qx.ui.embed.ThemedIframe ignored the horizontal scrollbar. This is now fixed. (#4662).
  • Added support for the HtmlArea widget to be able to set the initial content before the widget is rendered. This value can be easily changed without running out-of-sync with the rendered content. (#4197)
Misc
  • Fixed splitpane blocker resize if position is 0 (top or left). (#4522)
  • Fixed an issue with IE and the splitpanes, as sometimes it could happen that a wrong widget got a click event (#4471).
  • The qx.ui.container.Stack has the full children handling capability as defined in qx.ui.core.MChildrenHandling (#4630)
  • Setting an qx.ui.basic.Atom selectable also makes its child controls selectable. (#4452).
  • It was not possible to use a context menu on a menu item. This is now fixed. (#4736)
  • Fixed a tooltip problem causing the icon to be displayed as tooltip. (#4534)
  • Fixed the autohide for qx.ui.popup.Popup widget. (#4421)

Virtual Widgets

Virtual List
  • Added support for object as grouping indicator for the virtual list (#4490)
Virtual SelectBox
  • Added a new VirtualSelectBox widget which is based on the fundamental virtual infrastructure. (#3651)
Virtual ComboBox
  • Created a virtual combo box widget also based on the fundamental virtual infrastructure. (#3652)
Virtual Tree
  • Added an experimental virtual Tree implementation which is based on the fundamental virtual infrastructure. (#3653)
Table
  • Minor fixes in the table widget. (#3337, #4451, #4676, #4521)
  • Added first and last state to the table header cells for better styling. (#4672)
  • The properties rowHeight, headerCellHeight, headerCellsVisible and columnVisibilityButtonVisible and are now themable to better support the theming of the table widget and its sub-components.
TreeVirtual
  • Fixed infinite loop in the older TreeVirtual widget when "columnVisibilityButtonVisible" is set to false. (#4549)
  • Fixed infinite loop in the TreeVirtual widget when the "topRightWidget" or the scrollbar has margins. (#4477)
  • Added a filter functionality to the SimpleTreeDataModel of the TreeVirtual widget. (#4515)

Theming

  • Added a new theme called "Simple" based on the new CSS3 decorators. (#4500)
  • The "Modern" theme now uses the new CSS3 decorators in browsers that support them, falling back to the image-based theme in the older browsers. (#4605)
  • Improved the decorators and added new CSS3 decorators, e.g. box shadow decorator, linear gradient decorator and border radius decorator. (#4501)
  • Added inheritance support for decorators as a convenient way to derive from and reuse existing decorators. (#4508)
  • The appearance keys of an included appearance are now available in the including appearance. (#4647)
  • Corner resize is less picky. (#1200)
  • The tables row renderer's color map is now made protected to allow for overriding. (#4680)
  • Added support for defining the text color within the Font theme
  • Fixed resizing behavior in the case a widget to be resized had inset and borders. (#4519)
  • Fixed the caching of appearances. (#3851)

Applications

  • Updated index.html files of all applications to the HTML5 DOCTYPE. (#4654)

Showcase

  • Added Swedish translation. (#4776)
  • Fixed showcase when viewed offline. (#4547).

Widgetbrowser

  • Introduced Widgetbrowser application. Shows widgets and themes available in qooxdoo. Uses on-demand loading of app parts, which is nice also in the source version.

Mobile Showcase

  • New mobile showcase application which demonstrates currently available mobile widgets and some of the features. (#4806)

Demobrowser

  • New "Simple" theme can be selected for all demo applications.
  • New SettingsList demo. Showcases a combination of data binding, virtual list and tri-state checkboxes.
  • Changed the remote table model demo to use a PHP backend. (#1787)
  • Outdated Gears demo has been removed.

Playground

  • Syntax highlighting code editor based on ACE updated to improve features and stability. (#4364)
  • Code editor is now available for all browsers, including IE. (#4648)
  • Added Swedish translation. (#4775)

Feedreader

Rich Internet Application (RIA)
  • Reset the language selection on cancel. (#4494)
Mobile App
  • Added new mobile app, which introduces a smartphone specific UI, but reuses much of the existing (RIA) app logic from a common code base. (#4790)

API Viewer

  • Both interface inheritance and code indentation are now displayed correctly (#2169, #4436)
  • Advanced filter capabilities for the API search added. (#2601)
  • Search results are sorted by type, and inside the same type alphabetically (#3718)
  • The apply method is now shown correctly when reused by multiple properties (#4314)
  • Displays native JavaScript base classes now (#3821)

Testrunner

  • Rewritten based on a modular design and making extensive use of data binding (#4372)
  • Allows for different UIs on top of a common core, e.g. the traditional RIA UI, but also shipping with views based on lightweight HTML or even for browser consoles.
  • Introduced qx.dev.unit.MMock building upon the great Sinon.JS library. Can be mixed in test cases to add spies, stubs and mocks to unit tests. Also provides fake XMLHttpRequest objects, custom assertions and transparent sand boxing.

Simulator

  • Many improvements to API consistency, documentation and usability of the Simulator. (#4702)
  • qooxdoo user extension for Selenium now shipping right with the framework.

Skeletons

  • Added new skeleton as a starting point for developing mobile apps. (#4793)

Tooling

  • Support for base64 images; base64-based combined images can now be created and used in place of traditional combined images, and are then applied e.g. as data: URLs.
  • The generator now better supports the use of alternate Python interpreters in subprocesses by using Python's sys.executable instead of hard-wiring the interpreter name. This is also available in configuration files through the PYTHON_CMD macro (see further). (#4479)
  • The default CACHE macro is now version-dependent (e.g. /tmp/qx1.4/cache); this better supports side-by-side installations of different qooxdoo versions, which no longer clear each others cache objects.

Generation

  • A new default job, source-hybrid, has been introduced; it collects the unaltered source code of classes into common .js files, thus combining the ease of debugging of a source version with the near speed of app loading of a build version.
  • Generation of parts has been strongly improved, making package merging more robust and enforcing additional constraints on the parts configuration that could otherwise lead to non-working packages being generated. (#4491, #4576)
  • Recursive method dependency analysis has been extended to include file-level method calls, making dependency analysis more complete. Analyzing a method recursively is now indicated by a _ (underscore) in the generator console output. (#1455)

Configuration

  • New default config macro PYTHON_CMD exposes the Python executable with which the generator was started (aka sys.executable; usable e.g. in shell config keys).
  • Removed support for non-dependent excludes in exclude key which are completely covered by normal exclude expressions, for better code efficiency.
  • New job-level configuration key environment, which unifies and supersedes the deprecated keys settings and variants. Environment settings can serve as a simple key:value store, can trigger variant builds by the generator, and allow compile-time code optimization. Supported values are all simple JSON values (string, number, boolean, 'null'), or lists thereof. If you use both variants and environment with same keys in your job configs, the variants settings will take precedence.

Internationalization

  • Upgraded CLDR data from unicode.org to version 1.9 (of 2010/12/01).

Documentation

Migration

  • Removed all code deprecated in previous release 1.3. (#4018)

API Changes

Information

Last modified:
2011/04/07 15:31 by thron7

Account

 
 
A book on qooxdoo RIAs, authored  by community members
JS Tutorial, JavaScript Tutorial, JavaScript Guide, Learn JavaScript JS, How To Learn JS, Learning JavaScript
 

Bad Behavior has blocked 0 potential spam attempts in the last 7 days.