Creator of Script.aculo.us
Thomas Fuchs is a software architect from Vienna, Austria. He's been building web applications since 1996. Thomas is the author of script.aculo.us, a cross-browser JavaScript framework featuring advanced Ajax UI controls, visual effects and other niceties, and a core development team member of the influential Ruby on Rails web development framework. He's also a contributor to Prototype, an object-oriented Ajax/JavaScript framework.He wrote the "Web 2.0" chapter on Ajax development with Rails for the best-selling Agile Web Development with Rails (Pragmatic Programmers) book.
Next to writing about web application development on his blog mir.aculo.us, he currently is busy building fluxiom, an ajaxy web application, as a member of wollzelle, a Viennese design and programming shop.
Presentations by Thomas Fuchs
Combining advanced JavaScript/DOM techniques and Ajax to build better User
Ajax is giving developers and designers the power to access the back- end at any time. How and where does JavaScript and the Document Object Model fit in? How can they be used efficiently to provide next- generation form controls, sliding panels, loading-on-demand, activity indicators andwhat-have-you?
mir.aculo.us
mir.aculo.us
Thursday, November 2, 2006
Prototype needs your documentation skills—a new super-cool documentation site is in the making, and it needs your help.
Get on board already!
Saturday, September 16, 2006
As promised, here are the slides on unit testing JavaScript from my talk at RailsConf Europe:
Adventures in JavaScript testing (PDF, 11.7 MB)
I also hear that audio (and video?) might be forthcoming, but I can’t promise anything on that. Anyway, as soon as I get some rest, I’ll also post some photos from the conference. :)
Tuesday, September 12, 2006
Tomorrow we’ll make a short trip over to London for RailsConf Europe where I’ll be talking about Adventures in JavaScript Testing.
Here’s a teaser:

I assure you, there is. Drop by my talk if you want to know more. I’ll also post the talk here on mir.aculo.us after the conference, of course.
Hope to see some of my humble readers at the conference!
Wednesday, September 6, 2006
script.aculo.us 1.6.4, which marks the inclusion of the new release candidate of Prototype 1.5, is out now.
(For those of you missing the 1.6.3 version: that version was out yesterday but had a issue with IE that is now fixed in 1.6.4)
This release comes with the brand-new Prototype V1.5.0_rc1 version, adds several new features and options to drag and drop, features a whole new (experimental) way of doing testing, and adds some other goodies here and there. Also, thanks to the contributors for identifying and squishing bugs!
So—what’s new & cool?
- Update Prototype to V1.5.0_rc1 (read more on Justin Palmer’s blog)
- Add experimental alternate syntax for unit tests (Behaviour Driven Development-style)
- Merge assertElementsMatch and assertElementMatches from Prototype’s [4986] unittest.js [Sam Stephenson]
- Add assertRespondsTo and shouldRespondTo assertions
// object
var testObj = {
isNice: function() { }
}
// test
assertRespondsTo('isNice', testObj);
- Make Sortable.serialize handle DOM IDs like “some_element_1” correctly, fixes #5324
- Add support for onStart, onDrag and onEnd events directly on Draggables (invoked from the Draggables.notify), fixes #4747 [thx scriptkitchen]
new Draggable('some_id',{
onStart:function(){ /* ... */ },
onDrag:function(){ /* ... */ },
onEnd:function(){ /* ... */ }
});
- Add autoSelect option to Autocompleters to auto select an entry if only one is returned, fixes #5183 [thx cassiano dandrea]
- Added delay option to Draggables and Sortables, see test/functional/dragdrop_delay_test.html for usage, implements #3325 [thx lsimon, tomg]
- Add version and timestamp to indvidual library files for easier identification (the files are preprocessed by the Rake fresh_scriptaculous task), fixes #3015 [thx Tobie]
- Add assertIndentical and assertNotIdentical unit test assertions, which test for equality and common type, fixes #5822 [thx glazedginger]
- Add integration test for Ajax autocompleter for results with no linebreaks, #4149
- Added a custom exception to all base effects when used on non- existing DOM elements, added a assertRaise method to unit tests
- Add element shortcuts to Builder that can be activated by calling Builder.dump() (see the unit test), fixes #4260 [thx napalm]
Builder.dump();
var element = DIV({id:'ghosttrain'},[
DIV({style:'font-size: 11px; font-weight: bold;'},[
H1('Ghost Train'),
"testtext", 2, 3, 4,
UL([
LI({onclick:'alert(\'test\')'},'click me')
]),
]),
]);
- Make Effect.Puff work correctly for floating elements, fixes #3777 [thx michael hartl]
- Fix selection of correct option in SELECT element generated by InPlaceCollectionEditor for indexed option arrays, fixes #4789 [thx steve]
- Fix an issue with redrawing ghosted draggables that are inside a scrolled container, fixes #3860 [thx gkupps, tsukue]
- Fix autoscrolling inside scrollable containers when window is scrolled too, fixes #5200 [thx wseitz]
- Fix autoscrolling when dragging an element unto a scrollable container, fixes #5017 [thx tomg]
- Fix a condition where overriding the endeffect on Draggables without overriding the starteffect too leads to a Javascript error [thx Javier Martinez]
- Fix a possible error with the drag/drop logic (affects the solution to #4706)
- Fix various issues with IE detection and Opera, and setOpacity, fixes #3886, #5973
- Remove revert cache code obsoleted by #4706, fixes #3436 (again) [thx tomg]
As always, the required 1.5.0_rc1 version of Prototype is included with the download.
Big thanks to the contributors!
Tuesday, August 29, 2006
Borrowing from Behaviour Driven Development techniques, especially the RSpec framework I’ve added some new features to script.aculo.us’ testing library.
It’s all about more readability, and even non-technical folk should be able to comprehend (at least some) of the tests. Let’s have a look:
Test.context("BDD-style testing",{
'should automatically add extensions to strings': function(){
'a'.shouldEqual('a');
'a'.shouldNotEqual('b');
'a'.shouldNotBeNull();
'a'.shouldBeA(String);
'a'.shouldNotBeA(Number);
}
});
Basically, you’re defining a context for which one or more specifications should be asserted. Note the easy readability, and the added value by using a string to describe the test/specification, giving you the advantage of having better documentation for your JavaScript libraries.
Of course, setup and teardown is also supported, as are all normal assert* methods.
If you code in the Prototoypian way, with proper objects, an other added value, especially for higher-level behavioural specifications is:
var testObj = {
isNice: function(){
return true;
},
isBroken: function(){
return false;
}
}
// in Test.context
'should add object extensions': function(){
Object.extend(testObj, Test.BDDMethods);
testObj.shouldBe('nice');
testObj.shouldNotBe('broken');
},
Note that the support for this is far from complete, and JavaScript has certain limitatons that won’t allow all the elegant solutions that are possible with Ruby, but your tests can get much cleaner this way.
For now, you’ll need the script.aculo.us version from the SVN trunk. For more examples, see the repository file browser: test file, test library.