Request for comments and spec-ready text for issues 88, 89 and 90

All,

I worked on a few related issues/action items:

Issue 88 (http://www.w3.org/2007/09/19-forms-minutes.html#action02)
Issue 89 (http://www.w3.org/2007/09/19-forms-minutes.html#action03)
Issue 90 (http://www.w3.org/2007/09/19-forms-minutes.html#action01)

They all touch to the same section "8.1.10 The select Element" of the
spec so I am grouping the changes together. I hope I did not go too
much over the bounds of the action items, but I may have done so a
little bit.

One complaint I had in issue 88 was that the term "storage value" was
not defined. While technically I was not wrong here (no real
definition starting with "Definition: ..."), "8.2.3 The value Element"
does define how a storage value is computed. And I was certainly wrong
in saying that "storage value" was not mentioned anywhere else: it is
mentioned in particular in "8.2.2 The item Element" and "9.3.6 The
itemset Element".

So it seems relatively clear that a "storage value" is a value
specified by xforms:item/xforms:value or xforms:itemset/xforms:value.

As a side note this notion of "storage value" does not seem to apply
to xforms:copy. Well, section "9.3.7 The copy Element" is quite messed
up anyway as I thought I pointed out once (but I can't find the
reference now).

This being I think fine as is, I started working on the actual text
paragraph about "closed selections".

A few comments:

* The text only talks about "the initial instance value". But this is
   incomplete, because a control does not only update based on initial
   instance value, but everytime there is a refresh of the UI. So I
   suggest changing the text "If the initial instance value" with
   something else, namely "when the form control is updated to reflect
   instance data".

* Issue 89 also requires to be more precise to explain what happens in
   the other direction. Both areas need to cover blank values as well.

* It is not clear is the text from "8.1.10 The select Element" is
   really meant to cover xforms:copy much. I think that what "9.3.7 The
   copy Element" attempts to describe would benefit from being included
   here instead.

* The specification for free entry remains funky. I tried not to touch
   this.

* I built on the use of "storage value" which seems to exclude
   xforms:copy, so handling of xforms:copy remains untouched here. If
   the working groups wishes so, I can attempt to make the text more
   xforms:copy-friendly, but I think that this would still involve
   modifying "9.3.7 The copy Element".

Anyway I propose expanding this section to cover all this at the same
time. Here is my proposal, also available in the spec-ready text
attached:

   For closed selections: when the form control is updated to reflect
   bound instance data, behavior equivalent to the following steps must
   take place:

   * The space-separated values in the bound instance data are compared
     with the form control items' storage values.

   * Each form control item with a storage value equal to an instance
     data value becomes selected if it was not already selected.

   * Each form control item with a storage value missing from the
     instance data value becomes deselected if it was not already
     deselected.

   * If there are instance data values for which there is no
     corresponding form control item storage value, the form control
     must indicate an out-of-range condition.

   * NOTE: Any form control item with a storage value which is empty or
     which contains only white space characters must remain deselected.

   When the user selects a form control item which was previously
   deselected, behavior equivalent to the following steps must take
   place:

   * If the item's storage value was not present in the bound instance
     data, the item's storage value is inserted in the list of
     space-separated values. The exact location of the insertion is
     implementation-dependent. Any other item having the same storage
     value becomes selected as well.

   * If the item's storage value was already present in the bound
     instance data, the bound instance data is left unchanged.

   * NOTE: A form control item with a storage value which is empty or
     which contains only white space must not be selectable by the
     user.

   When the user deselects a form control item which was previously
   selected, behavior equivalent to the following steps must take
   place:

   * If the item's storage value was present in the bound instance
     data, the item's storage value is removed from the list of
     space-separated values. Any other item having the same storage
     value becomes deselected as well.

   * If the item's storage value was already absent from the bound
     instance data, the bound instance data is left unchanged.

   For open selections: when the form control is updated to reflect
   bound instance data, the behavior is the same as with closed
   selection, except the following:

   * The form control never indicates an out-of-range condition.

   * If there are instance data values for which there is no
     corresponding form control item storage value, those values are
     included as selected values, as if entered through free entry.

   Free entry text is handled the same as form control input 8.1.2 The
   input Element, possibly in multiplicity. When using dynamic
   selections with complexTypes, open selection has no effect. [TODO:
   What does this do here anyway?]

I also suggest modifying "8.1.11 The select1 Element" with the same
spirit:

   For closed selections: when the form control is updated to reflect
   bound instance data, behavior equivalent to the following steps must
   take place:

   * The bound instance data value is compared with the form control
     items' storage values.

   * The first form control item with a storage value equal to the
     instance data value becomes selected if it was not already
     selected. Other form control items with a storage value equal to
     the instance data value becomes deselected if they were selected.

   * Each form control item with a storage value different from the
     instance data value becomes deselected if it was not already
     deselected.

   * If no form control item storage value is equal to the instance
     data value, the form control must indicate an out-of-range
     condition.

   When the user selects a form control item which was previously
   deselected, behavior equivalent to the following steps must take
   place:

   * The bound data value is set to the selected item's storage
     value.

   * All other form control items become deselected.

   For open selections: when the form control is updated to reflect
   bound instance data, the behavior is the same as with closed
   selection, except the following:

   * The form control never indicates an out-of-range condition.

   * If no form control item storage value is equal to the instance
     data value, the selected value is that lexical value.

   Free entry text is handled the same as form control input 8.1.2 The
   input Element.

Please comment. Thanks,

-Erik

-- 
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/

Received on Wednesday, 24 October 2007 06:04:14 UTC