W3C home > Mailing lists > Public > public-forms@w3.org > August 2007

Re: Suddenly confused about today's repeat index discussion

From: John Boyer <boyerj@ca.ibm.com>
Date: Fri, 10 Aug 2007 16:48:09 -0700
To: ebruchez@orbeon.com
Cc: "Forms WG (new)" <public-forms@w3.org>, public-forms-request@w3.org
Message-ID: <OF9A47694A.41EEF884-ON88257333.0071E4B7-88257333.0082C0E7@ca.ibm.com>
Hi Erik,

Yes, I think the problem is that insert (and the others) say that the 
index of *any nested repeat* within an updated [outer] repeat, the index 
of the nested repeat is reinitialized.

I prefer to use the word 'all', but that is what the author of this 
section meant and it's quite legal to say it that way.

So, agreed that when you insert a node that increases the repeat item set 
size of an outer repeat, if the newly created outer repeat item contains 
an inner repeat, then that inner repeat will have its repeat item set 
instantiated and will have its index "initialized". 

But that isn't reinitialized.  The index of the newly created inner repeat 
is initialized for the first time in its existence.

It doesn't make sense that the indexes of the other inner repeats in the 
other repeat items of the outer repeat would be affected at all by the 
creation of another outer repeat item.

It makes even less sense to change any inner repeat index when an outer 
repeat item is removed due to the delete action.

Generally, things that are true about a language construct at run-time 
should be invariant when that language construct is generated by a repeat. 
 A repeat is itself a language construct.  A repeat should not "lose" its 
index because of mutations made elsewhere in the document.  If repeat A is 
generated by repeat B, and repeat B mutates some other part of the 
document, repeat A should not forget where it was. 

Similar to insert/delete, the setindex action on an outer repeat B should 
not go out and reset any repeat A, whether or not a given repeat A was 
generated by repeat B.  Setindex should change the index of a given repeat 
and if other repeats must change, then setindex should be invoked on them 
too.

For example, with the current behavior, one actually cannot write a loop 
that sets the indexes of all inner repeats to some desired value because 
the only way to do that is to iterate the index of the outer repeat and, 
for each value, do a setindex on the inner repeat.  But right now, each 
time the outer repeat index is set, all of the inner repeat indexes are 
reinitialized!?!  It torments me so.

Finally, I did give some thought to the issue you raised about at least 
having a way for the form author to recover the old 1.0 behavior of 
reinitializing the inner repeats based on a focus change that sets the 
index of the outer repeat.  Well, this reinitialization is part of what 
I'm trying to get rid of because I don't think it serves the end-user to 
have a repeat forget where it was because the user decided to look at it. 
If it were a quantum particle, maybe, but not an XForms repeat.

I suppose, though, I won't get off that easily.  My immediate next 
reaction is that I'm pretty sure it is not so interesting that ALL the 
inner repeats got reset when the focus changes to a new repeat item of the 
outer repeat.  If that is the case, then I'm sure that a setindex encoded 
into a DOMFocusIn handler should do the trick, e.g.

<repeat nodeset="a/b">
   <group>
      <setindex ev:event="DOMFocusIn" repeat="R" index="5"/>

      <repeat id="R" nodeset="c/d">
         ...
      </repeat>
   </group>
</repeat>

However, if you do indeed want to reset *all* inner repeat indices any 
time a focus change causes the outer repeat index to be updated, then the 
above setindex action could be turned into an action sequence that 

1) saves the outer repeat index
2) iterates the outer repeat index so it can setindex on each inner repeat
3) restores the outer repeat index.

Finally, note that I am catching DOMFocusIn because that is the user event 
that is causing the outer index change, but if this is insufficient, then 
we could consider adding an xforms-scroll-changed event for repeats.  This 
would be a very nice addition to 1.1 anyway, but particularly nice if it 
allows us to get rid of the inner repeat index mangling.

Cheers,
John M. Boyer, Ph.D.
STSM: Lotus Forms Architect and Researcher
Chair, W3C Forms Working Group
Workplace, Portal and Collaboration Software
IBM Victoria Software Lab
E-Mail: boyerj@ca.ibm.com 

Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer





Erik Bruchez <ebruchez@orbeon.com> 
Sent by: public-forms-request@w3.org
08/08/2007 03:30 PM
Please respond to
ebruchez@orbeon.com


To
"Forms WG (new)" <public-forms@w3.org>
cc

Subject
Suddenly confused about today's repeat index discussion







All,

We discussed today that nested repeats should keep their own index 
information. Fine so far.

But it dawned on me that John's first example was that of an 
xforms:insert. In the case where new newly inserted node happens to be 
part of a repeat node-set, then the UI will update with a new set of 
controls. Fine too, but that would include the information about the 
nested repeat index, wouldn't it?

So while this discussion of nested repeat keeping individual index 
information makes sense when talking about xforms:setindex, I am not 
sure how much sense it makes in the case of xforms:insert: the new 
repeat iteration's nested repeat's index will have to be initialized to 
something, and that will be @startindex +/- index adjustment.

Or am I missing something?

-Erik

-- 
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/
Received on Friday, 10 August 2007 23:48:23 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 1 October 2013 22:06:44 UTC