Since there seems to be some interest in Ajax development, and since
there seems to be several parallel Ajax development efforts, perhaps now
is a good time to come up with a coordinated plan for future Ajax
development.
I'll start things off by reviewing what we've discussed so far and what
work has been contributed so far. Everyone is welcome to join in and
offer suggestions and ideas!
1. The screen widget XML code used for Ajax support should be rendering
format agnostic and shouldn't tie the XML to a specific third party library.
2. Screen widgets should still output usable HTML when the user has
JavaScript disabled. In other words, an Ajax-enabled page should still
function properly with JavaScript turned off.
3. As much as possible, use new widget elements for Ajax support,
instead of new attributes.
I discovered this while working on the Ajax code that was already in
place. Having a widget attribute allows for only one Ajax event, where
more than one Ajax event may be desired. A good example is the Ajax
Example page in the Example component - two areas of the screen are
updated asynchronously when a new item is added.
I created two new widget elements: <on-event-update-area> for the form
widget, and <on-field-event-update-area> for the field elements. The
number of elements used in a form widget is unlimited, so any number of
Ajax events can be fired.
4. Decouple the widget Java code from the third party Ajax library via a
JavaScript "connector." I added ajaxXxxx functions to the selectall.js
file to do that. We're using the Prototype Ajax library now, but should
we decide to change to another library in the future, we only have to
rewrite the ajaxXxxx functions in selectall.js. It will be a simple
change to make.
--------------------
Here is the current screen widget Ajax support:
1. <container> elements can be updated periodically.
2. <form> elements can update screen areas asynchronously.
3. Text input fields can have server-side autocompletion.
There are two things I would like to see added:
1. A date/time input control that has drop-down controls for each field
(year, month, day, etc). As each drop-down is changed, the others are
updated with valid choices. The valid choices would depend upon the
user's locale.
2. "Smart" table headers that, when clicked, change the sort order of
the table.
--------------------
That's it so far.
What new features should be added? Where do we go from here? Who wants
to help?
-Adrian