The week in qooxdoo (2010-08-27)

Another week in retrospect:

Deprecated code

With revision r23139, we removed the deprecated code introduced with version 1.2 of qooxdoo. So now trunk is completely free of deprecations again. For more details, take a look at the corresponding bug report.

Using a deputy

We had a request to add the possibility to specify a deputy as a model in the list data binding. This can be especially handy when using a list or select box within a form. The form demo now shows how to create a form including a select box, all nicely done with data binding.

Fixes

For a complete list of tasks accomplished during the last working week, use this bugzilla query.

New Contrib: CanvasCell

Tobi Oetiker did it again: another high-quality addition made it into qooxdoo-contrib:

That’s what he said about CanvasCell: “Haven’t you all been dying to get a chance to embed little charts into your qooxdoo tables? Looks so much more fun than all this text and numbers. The structure of the canvascell renderer makes it very easy to add your own plotter objects for creating other nice plots. If you load excanvas, this will even work on IE6-8.

Have a look at the demo source to see how to use the things. If you come up with your own plotters, I’ll be glad to add them. I have made CanvasCell available in qooxdoo contrib, so you can grab your copy. Excellent!

JSConf.eu

The European JavaScript Conference is for sure going to be (again) an absolutely top-notch event, nothing less than the annual hotspot of JavaScript goodness. Of course, we just have to be there as well. If you happen to have a ticket, or are in Berlin anyway at that time (weekend of Sep. 25./26, 2010) feel free to drop us a note in advance, so we could possibly arrange for some decent qooxdoo get-together.

Have a nice weekend!

The week in qooxdoo (2010-08-20)

Welcome back to another regular round-up of the week.

Overflow handling

As promised last week when we announced the new overflow feature, we updated our applications to benefit from the toolbar overflow handling. We added specific code to the feed reader, api viewer and playground. To see it in action, resize your browser window and notice the toolbar items of those applications jump into a separate menu, located at the end of the toolbar itself.

Simulator: New locator type

The qooxdoo user extensions for Selenium now support a new way to identify widgets, the “hybrid” locator. This allows test developers to combine multiple different strategies such as HTML ID, XPath and qooxdoo widget hierarchy in a single locator string, e.g.:

qxhybrid=options&&qxh=[@label=Foo]

This would find a widget with the qooxdoo property label set to Foo which is a child of another widget which has a DOM element with the ID options.

Tasks accomplished

For a complete list of tasks accomplished during the working week, use this bugzilla query.

New Contrib: QxDyGraphs

Tobi Oetiker announced that he wrote “a little qooxdoo wrapper for using Dan Vanderkams wonderful dygraphs charting library from within the qooxdoo
infrastructure. It is checked into qooxdoo-contrib under QxDyGraphs
. Try the demo in the contrib demobrowser. Cool (again), Tobi!

Updated: RpcConsole

Christian Boulanger “released a minor update of the RpcConsole contribution to bring it closer to strict json-rpc standards compliance. The update to json-rpc version 2.0 will have to wait until the new RPC layer is implemented (not before the end of this year), but now the console should support sending requests to strict 1.0-compliant servers (which it did not do before)”. There is more information available, the code can be found in qooxdoo-contrib. There is also an online demo, you can for instance run automated tests using the “Run Tests” menu. Thanks, Christian!

Real-life example: Sava

Last but not least there was the addition of another real-life example to the corresponding wiki page: Sava is a repair center management application, which allows you to create a quote, take an order, manage customers, monitor inventories, send bills, create repair reports.

Interestingly, Sava seems to exist for quite some time now, as early versions of it were implemented in qooxdoo 0.5, then 0.6 and finally rebuilt with the latest qooxdoo versions, taking advantage of state-of-the-art features like the data binding layer. Nice theming, btw, and thanks for sharing this success story with the qooxdoo community!

That’s it for today, see you again next week.

The week in qooxdoo (2010-08-13)

Hi all! The weekly wrap-up of happenings in and around qooxdoo is here.

Team

A new member has joined the core team here at 1&1. It’s Tino Butz, and Tino is no stranger to us. We have been working together for quite some time, since Tino was formerly on the Gmx.com mail client team. As a consequence, Tino has in-depth knowledge of qooxdoo, and a lot of application development expertise as well :-). Welcome, Tino!

Framework

qxoo is keeping up traction. We pushed it on our demo web site as a download, and provided some cool code samples. Even custom events and single-value data binding are working. Check it out!

Toolbar Overflow

We closed quite an old bug this week which was an enhancement for the Toolbar: overflow handling. We ended up not implementing a “right out of the box” behavior, but realized a fairly general infrastructure where almost everything is possible for the application developer. As a first proof of concept, the toolbar demo includes this overflow handling (check the “Overflow handling” checkbox and resize your browser window, to see a “More” menu appear and disappear). We plan to add it to the Apiviewer and Feedreader next week.

Bugs

Here is a canned query for all the issues that were resolved this week.

Inspector

We spent some time to improve our Inspector application. We fixed some minor bugs, refactored the code and also added a feature which makes it now possible to inspect Inline applications. The screenshot shows the Inspector running on our Showcase demo (which is an Inline app), with all of the Inspector windows open (Selenium, Objects, Widgets, Properties and Console – clockwise, starting top-left). So try it out :-) .

Community

Burak Arslan has pushed out another update to his joint SOAP efforts, soaplib 0.9.2-alpha2 and qxsoap-0.6.1-beta1, which allow you to communicate complex class hierarchies between server and client app. See the details and download instructions here.

That wraps it up for this time. Enjoy your weekend!

Download qxoo now!

The last couple of days we had some time to use our new qxoo package, which you might already have read about,  and did some experiments with it. All of us here in the core team like it so much we thought we had to write another blog post to show some details on how to use it on the server side.

node.js

So here we go! As a first example I want to show you how to use it on node.js. We are using classes, inheritance, properties, the event system and even single value binding in this example.

var sys = require('sys');
var qx = require('./qx-oo.js');
 
qx.Class.define("Fish", {
  extend : qx.core.Object,
  properties : {
    age: {
      event : "changeAge",
      init : 3
    }
  }
});
 
qx.Class.define("Shark", {
  extend : Fish
});
 
var fish = new Fish();
sys.print("The fish is " + fish.getAge() + " years old\n");
 
var shark = new Shark();
shark.addListener("changeAge", function(e) {
  sys.print("The shark changed its age to " + e.getData() + "\n");
});
shark.setAge(5);
sys.print("The shark is " + shark.getAge() + " years old\n");
 
fish.bind("age", shark, "age");
fish.setAge(7);
sys.print("The fish is " + fish.getAge() + " years old\n");

The output looks something like this.

The fish is 3 years old          // 1
The shark changed its age to 5   // 2
The shark is 5 years old         // 3
The shark changed its age to 3   // 4
The shark changed its age to 7   // 5
The fish is 7 years old          // 6

Surely you’ve seen that we are creating two classes, a fish and a shark which is a fish of course. Our fishes have one property named age. Properties, in short, are data stores with automatic generated accessors and other goodies like in this example, a change event. We create an instance of each class and play around with the generated setter, getter and events. The second to last line shows the single value binding which synchronizes the two age properties.
This should look familiar to anyone using qooxdoo, the only difference is that its running on node.js and not in the browser (This is the corresponding “browser version”, just make sure you check the Log pane to see the same messages).

Rhino

Next up, let’s write a script to run in Mozilla’s Rhino that demonstrates the use of Mixins:

load(["qx-oo.js"]);
 
qx.Mixin.define("MBar", {
  members :
  {
    bar : function()
    {
      return "bar!";
    }
  }
});
 
qx.Class.define("Foo", {
  extend : qx.core.Object,
  members :
  {
    foo : function() {
      return "foo!";
    }
  }
});
 
qx.Class.include(Foo, MBar);
 
var foo = new Foo();
print(foo.foo()); // "foo!"
print(foo.bar()); // "bar!"

Again, with the exception of the Rhino-specific load and print statements, this is plain qooxdoo. Assuming that js.jar (the Rhino Java archive), qx-oo.js and a file containing the code listed above, named e.g. test.js, are all located in the same directory, this is the shell command that will run the script in Rhino:

java -cp js.jar org.mozilla.javascript.tools.shell.Main test.js

If you want to give it a try you don’t have to download the SDK and build it yourself. Just go to our devel applications page and download the precompiled script in either an optimized or unoptimized version. This will be updated usually once a week on Friday, like all other qooxdoo online apps.  While this qxoo package is still in experimental state, the code it contains is rock solid, having been used for a couple of years in the browser. Give it a try and send us your feedback!