Document Information

Last modified:
2011/02/22 12:31 (external edit)

qooxdoo 1.3 (2010-12-08)

Summary

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

Despite being a minor release, no manual migration steps seem to be needed for upgrading from the previous 1.2.x releases. There might be some typical deprecation warnings in the development version, but that shouldn't affect the production version of your app. If you need a bugfix-only drop-in replacement, you might want to check-out qooxdoo 1.2.2, the corresponding patch release.

Highlights

  • A new virtual List is now available as an experimental addition to the framework. This List is based on a fundamental infrastructure that allows to elegantly create such virtual widgets. Simply put, the meaning of "virtual" is that only the visible items are created for rendering and updated on demand. This significantly reduces creation time and memory usage when visualizing even huge date sets. The List supports advanced features such as single and multiselection, filtering, sorting and grouping, custom renderers. Since the implementation takes full advantage of the existing data binding layer, developers only need to provide a model that represents the data set for the List to work instantaneously.
  • Other new widgets were introduced, for instance a Tri-state CheckBox. It has been implemented rather generically, so ToggleButtons and with them also CheckBoxes can now have a third "undetermined" state. Another new widget in the framework is a ProgressBar, commonly used to display the progress of longer running actions. The ToolBar now allows for a smart overflow handling, which automatically places toolbar elements into a dropdown, once the remaining space becomes too small (open demo, and resize with checkbox turned on).
  • Existing widgets got much love and were further polished, which shows in their user-facing look&feel, but also in a more maintainable code base. Some widgets like the SplitPane even saw some significant performance speedups.
  • In addition to the existing Testrunner - and as a future candidate to eventually replace it -, an alternative unit testing GUI component is included. This experimental new Testrunner, called Testrunner2 internally, comes with a lighter, HTML-only interface. Thus unit tests will be able to run in more setups than the current Testrunner, e.g. even on mobile devices.
  • Talking of mobile, support for qooxdoo apps running on touch-enabled devices has also been included. Of course, typical rich internet applications aren't meant to be run unchanged on such touch devices like tablets, but regular qooxdoo apps should at least continue to be used also on an iPad for example. There has been good progress to target smartphones and tablets with some extensions to qooxdoo, but that will be part of a future release.
  • A new, promising way of creating and running automated GUI tests with Selenium is available as an experimental preview. While full support for Selenium testing has been around for quite long and is being used successfully, it is now becoming more deeply integrated. With the new, now built-in Simulator component Selenium-based interaction tests can be defined as regular qooxdoo classes directly within a project, and be executed from the shell through the generator.
  • Actually, the part that allows to write such Selenium tests as qooxdoo classes, is called qx-oo, and is available independently as a new build variant of the framework for non-browser environments like Rhino or node.js. It contains qooxdoo's OO layer with its powerful object-oriented programming model.

Bugfixes & Enhancements

See this detailed list of over 350 issues resolved for qooxdoo 1.3, which includes the fixes of the accompanying qooxdoo 1.2.2 (2010-12-08) patch release. Besides fixes for defects about 100 enhancements made it into qooxdoo 1.3. A detailed list for those issues that were resolved for 1.3 exclusively, see here.

Framework

Core

  • Added qx-oo, a new build variant of the framework for non-browser environments like Rhino or node.js. It contains qooxdoo's OO layer with its powerful object-oriented programming model. (#3965)
  • Listeners added with addListenerOnce are called only once in any case (#4254)
  • The KeySequence event got a new getKeyCode() method to determine which physical key was pressed. (##3280)
  • Retrieve nested properties when serializing to native object (#4172).
  • Logging methods now accept any number of parameters to be logged (#4044)
  • Logging system now accepts a custom function to format stack traces (#4052)
  • The framework now ships with Romanian translations (locale ro, besides the existing de, en, es, fr, it, nl, sv translations).

Application

  • External scripts added by "add-script" config key, are now loaded before application scripts to prevent race conditions (#4302)
  • If a locale gets loaded in a part, but is used before that part is finished loading, a warning is raised

Browser Support

  • Normalized the mouse buttons for click events across browsers (#3353)
  • Absolute resource paths now work correctly in Internet Explorer using HTTPS (#4073)
  • Fixed handling of clip CSS property in IE8 standards mode (#4216).
  • All finally code branches of try/catch/finally statements are now also executed for IE6 and IE7.
  • IE9 is to support the DOM2 event model, therefore feature detection instead of browser detection is used throughout the event layer. (#4091).
  • The qx.bom.element.Opacity implementation is now feature-detected to support CSS3, also to be available in IE9. (#3877).
  • IE9 shows text ellipsis even when not needed, this is worked around now (#4038).
  • Disabled AlphaImageLoader in IE9 standards mode (#3878).
  • No longer rely on the pointer-events CSS property in all versions of Opera due to incomplete browser support. Makes click events dispatched on widgets with visible decorator more reliable. (#4229).
  • Added feature detection for XUL used for displaying text ellipsis in Firefox. Due to the XUL removal in Firefox 4 there's no alternative solution for text ellipsis until support is again implemented in the browser. (#4058)
  • Added detection for the iPad. (#4271)

Transport

  • The RequestQueue now uses the Logger infrastructure to handle errors and to let the Logger create the stacktrace and other info.
  • Fixed callback invocation for multiple scripts of single ScriptLoader instance (#4175).
  • Added an abort method to the ImageLoader. (#4022)
  • More verbose timeout warning; added request url, method and parameters (#4176).
  • Improved error messages in the RPC layer. (#4366)

Low-level

  • Added cross-browser XML utility functions setAttributeNS (#3906) and createSubElementsNS (#3907)
  • No longer set HTML attribute if value is undefined; before, "undefined" (as string) was taken as a value and ended up in the DOM.
  • Updated Sizzle, the CSS selector engine. (#3898)
  • qx.bom.Element.matchesSelector checks if an element is selectable by a certain selector.
  • The duration property is now properly applied in the Pulsate animation effect.
  • Fixed a bug for wrong calculation of getContentWidth for inline DOM elements, when e.g. paddings returned a negative value.
  • Moved method isBlockNode from HtmlArea implementation to the qx.dom.Node class

Mobile

  • Made regular qooxdoo rich internet applications work on iOS devices. (#4033)
  • Added touch event support for touch enabled devices (#4008)
  • Added "qx.mobile.emulatetouch" variant to emulate touch support by mouse input (#4008)
  • Added basic support for tap / swipe gestures for touch enabled devices (#4076)
  • Added orientation changed event for mobile devices (#4337)

GUI Toolkit

UI Core

  • Added the possibility to specify an always-on-top widget, which will not be covered by popups or menus. This could be used for commercials for instance (#3854)
  • Fixed wrong placement of widgets. (#4304)
  • Added a second argument to _childControlImpl which allows to retrieve the # identifier. (#3044)
  • Switching locales at run-time now correctly updates tooltip text for all widgets. (#4387)
  • Added touch scrolling to common scroll components in the GUI toolkit. (#4009)
  • Fixed wrong text cursor position after focusing a text field in IE (#3519).
  • The related target was wrong for mouseover events on IE and is now fixed (#4145).
  • Refactored selectable implementation on qx.ui.core.Widget (#4164).
  • Mouse wheel events at lists without visible scrollbars are not prevented anymore, so the scrolling of the whole page can take place. Useful for (inline) applications with visible scrollbars.

Data Binding

  • Some minor fixes in the data binding layer. (#3980, #3598)
  • Single-value binding is now aware of proper resetting and the difference of setting null. (#3983)
  • Data arrays won't fire a change event if the same data is set. (#4106)
  • Fixed the missing update of the selection for all controllers. (#4039)
  • Models now dispose their children. (#4236, #4305)
  • Added dispose sections to every occurrence of data array in the framework code. (#4234)
  • Fixed an error during model changes of the tree controller. (#4293)
  • Fixed the removal of tree controller bindings. (#4296)
  • Fixed an issue when resetting single selections using a controller. (#4125)
  • Converters will now be used when initializing a model by the form controller. (#4382)
  • Added the possibility to bind the model property. (#3668)
  • Form controller now allows to bind a form to more than one model. (#3738)
  • Updated the form controller with the possibility to set up unidirectional bindings and store the values on a later method call. (#4144)

Form

  • Added the possibility to add custom data as options to the form e.g. for further descriptions, help text, … (#4171)
  • Fixed locale handling of validation messages. (#4093)
  • TextField and TextArea now use the native HTML5 placeholder property if available. (#3195)
  • Placeholders in text inputs no longer use the same color as the entered text. (#4107)
  • Fixed destruction of form and resetter. (#4200)

Widgets

  • Added tri-state checkboxes. ToggleButtons and with them CheckBoxes can now have a third state (#0963). Take a look at the weekly summary for more details.
  • Added a ProgressBar widget (#8)
  • Fixed incorrect styling, including icon, of disabled checkboxes when checked or hovered (#4371).
  • It is now possible to group toggle buttons in a radio group just like radio buttons. This has the effect that only one button can be activated at the same time. Refer to the weekly summary for more details.
  • Radio button of the toolbar now keeps its selection if no empty selection is allowed. (#4374)
  • Added the infrastructure for overflow handling to the toolbar. (#2335)
  • Menu button now fires an execute event without the need of having a menu to be set. (#4340)
  • Fixed focus handling of the combo box. (#4113)
  • Removed an endless loop when using maxlength for text areas in IE. (#4352)
  • Fixed bug with wrong font formatting at the beginning of a new line with (yet) no content.
  • Some fixes to the spinner. (#4042, #4312)
  • Major speed improvements of the split pane widget which now uses a blocker element instead of calculating the mouse pointer distance while moving. (#2892)
  • Added two more positions to align text and icon of an atom: top-left and bottom-left. (##3396)
  • If modal windows are opened, then the last one will always be active. (##3956)
  • Introduced iconOpened property for TreeFile and TreeFolder. Makes it possible to set a custom "opened" icon. See the weekly summary for more details.
  • Fixed addBefore() and addAfter() methods of qx.ui.tree.Tree, which did not work as expected in drag&drop scenarios. (#3297).

Virtual Widgets

  • Finished implementation for the experimental virtual List. The virtual List is based on the fundamental virtual infrastructure. The meaning of "virtual" is that only the visible items are created for rendering and updated on demand. This significantly reduces creation time and memory usage when visualizing huge date sets. The List supports advanced features such as single-selection, multi-selection, filtering, sorting and grouping. One key aspect is that the implementation is fully based on the powerful data binding layer. Thus developers only needs to provide a model for the List to work, immediately. At the moment the HTML based rendering feature is missing and will be implemented in a further release (#4458).
  • Fixed scroll into view issue on the virtual infrastructure (#3886).
Table
  • Improved extensibility of the table. (#4243)
  • Extended event to tell if the column width was being changed as a result of a mouse drag in the header. (#3978)
  • Added a new table constructor setting to hide columns on startup. (#3979)
  • General fixes in the table. (#4057, #3425, #1632, #4250, #4220)
  • Table will be rendered correctly when a new table header cell renderer is set (#4381)
  • Removed the automatic dispose of old table cell renderer. (#4282)
TreeVirtual
  • Tree virtual now supports different icon sizes. (#4232)
  • Fixed problem causing treevirtual to loose its selection highlight. (#3989)

Layouts

  • Fixed the calculation for widgets in the grid layout when using rowSpan, if they are higher than the rest of the rows. (#4204)

Theming

  • Added a theme fallback for child controls of widgets used as child control themselves in custom widgets. (#4020)
  • Handle undetermined state for check box (#0963).
  • General fixed in the default decorators. (#3848)
  • Fixed the Modern theme for disabled toolbar split buttons. (#4005)
  • Removed the focus indicator for disabled menu bars. (#3991)
  • Fixed a regression in qx.ui.decoration.Double, i.e. border is lost when background is used, which came in with release 1.0.1 (#3450).

Applications

Inspector

  • Improved stability by refactoring internal code structure and fixing several open issues.
  • The Selenium window can now determine locators for inline widgets (#2041)
  • The external scripts necessary for the Selenium window can now be loaded straight from their online code repositories (#4037)
  • Alert if loading from file system (with file: protocol) fails (#4299). === Demobrowser === * Made disabling of the playground button always work. (#4277) * Added PingPong, Scale and Fingers demos to demonstrate touch support (#4009) * Ported FsmMiceMaze demo from legacy qooxdoo versions. * Update virtual List demo. * Updated virtual ExtendedList demo. * Added new virtual GroupedList demo. * Added new virtual ListWithFilter demo. === Playground === * Added toolbar overflow handling. (#3992) * Gist IDs will now stay in the URL for reloading. (#3930) * Replaced CodeMirror editor with ACE, the ajax.org code editor component. (#4123) === Feedreader === * Added toolbar overflow handling. (#3987) * Added part loading feedback. (#4127) * Added Romanian language switch. (#4288) === Portal === * Page now scrolls when resizing a panel with the mouse out of the current browser window * Dragging a box into another groupbox parent is smoother now from left to right. === API Viewer === * Static fields are now displayed in the API Viewer unless they begin with $$ (#3194) * Inherited members now come with proper hyperlinks. === Test Runner === * Alert when loading from file system (with file: protocol) fails (#4299).
  • Added toolbar overflow handling. (#3988)

Simulator

  • New experimental component for Selenium-based interaction tests defined as qooxdoo classes and executed through the Generator (#3890)

Tooling

Generation

  • New jobs to build qooxdoo's OO layer in a versatile .js package (qxoo-build and qxoo-noopt)
  • Fixed a bug that prevented existing resources from being overwritten (#3986)
  • The image splitting job (slice-images) now allows different values for the four sides (including 0) (#2963)
  • Dependency analysis of classes (among the most time-consuming activities of the generator) now indicates if the dependency information of a class was found in the cache (printing a . to the console), or had to be calculated afresh (printing a *).
  • During dependency analysis of a class, load-time dependencies that introduce other load-time dependencies are now explored recursively, doing a deep analysis of load-time deps. This e.g. allows static method calls to initialize class attributes to be used safely. (#1455)
  • Most sys.exit(1) calls are now replaced with raising proper exceptions, which helps tracking down issues.
  • Combined images are used again in builts created on Windows (This was a regression in 1.2).
  • Unknown symbols in the code are again warned about in the generator console output (This was absent in 1.2).
  • Unmatched #asset hints are now warned about.
  • Package names of classes (like qx.core of qx.core.Object) are now automatically regarded as known symbols, and are no longer warned about.
  • Warning messages of the generator are now all prefixed with Warning:, errors with Error:, for easier distinction.

Configuration

  • New top-level config key default-job allows you to specify a job to be run when no job argument is passed to the generator on the command line. Such default jobs are defined for most framework apps and skeletons.
  • Removed config key library/namespace, as it might lead to erroneous results.
  • The generator now warns about unknown Json keys in configuration files, and does a basic type check on the job key values.
  • Two new configuration macros are available, USERNAME and HOME.

Optimization

  • Although the deep analysis of load-time deps (see above) costs additional run time, generator optimizations compensate for that and allow cache-miss performance (e.g. when compiling with an empty cache) to be on the same level as before.

Documentation

  • Fixed the search preview of the manual. (#4001)
  • Positioned sidebar of the online manual in a way understood by IE6/IE7 (#4393).
  • General fixes in the manuals style information. (#4104)
  • Change the twitter tutorial to use the public timeline instead of the friends timeline, which is no longer supported. (#4049)
  • Added a tutorial for translations. (#4070)
  • Added documentation for the table widget. (#1322)
  • Added section about property transforms to the manual. (#4161)
  • Updated the transport section in the manual. (#4011)

Migration

API Changes

  • Deprecated the previous experimental List implementation and its classes in the namespace qx.ui.virtual.form.*.
  • Removed config key library/namespace, as it might lead to erroneous results.
  • Added changeReadOnly event on qx.ui.form.AbstractField (#4231).
  • The method isBlockNode is deprecated at HtmlArea classes and moved to qx.dom.Node

Information

Last modified:
2011/02/22 12:31 (external edit)

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.