[whatwg] repetition model

On 25 Jun 2004 at 11:01, Avi Bryant wrote:

> > I do agree that the [id] stuff is somewhat dodgy. I really am at a loss of
> > how to do a better solution, though. And it does work quite well.
> 
> In other words: it's a useful hack.  No argument there, as long as we
> agree that it would be nice to find something that *isn't* dodgy.

This complexity seems to be introduced simply because one wants to 
choose where in a "name" or "id" value the index goes. Here are some 
ideas that might make the repetition model simpler to use (at least 
for authors with simple needs): 

Introduce a mode where the browser automatically appends the new 
repetition block's index to any "name", "id" and "template" 
properties in its child elements.

For example, instead of this:

     <tr repeat="template" id="row">
      <td><input type="text" name="name_[row]" value=""></td>
      <td><input type="text" name="count_[row]" value="1"></td>
      <td><button type="remove">Delete Row</button></td>
     </tr>

the author might specify this to get exactly the same effect:

     <tr repeat="template" id="row" autoname="autoname">
      <td><input type="text" name="name_" value=""></td>
      <td><input type="text" name="count_" value="1"></td>
      <td><button type="remove">Delete Row</button></td>
     </tr>

An "autoname" attribute set to "autoname" causes the browser to add 
the index to element names automatically. It could be set to a value 
autoname="pattern" to indicate [id] replacements or the equivalent 
(more below), and the value autoname="none" to indicate that element 
names should not be changed at all (authors might want this where the 
server is capable of making sense of the order items are submitted 
in).

This would IMO making the repetition model much more usable for 
authors. There are two problems with this approach that mean the [id] 
hack is still necessary:

1) Authors that need to control where the index goes to create names 
like row0.item or row[0]item would still have to use [id].
2) I think nested templates will be a problem. Even if both "id" and 
"template" attributes have indexes auto-appended there is nothing 
that would distinguish the index of the parent repetition block from 
the index of the nested one. 
To go with the "nested repetition" example in the spec there would be 
no way of telling whether

<input name="planetmoon135"/>

was the 35th moon of the 1st planet or the 5th moon of the 13th 
planet.

Perhaps these problems could be solved by an "indexposition" 
attribute that with a regexp specified where the index should be 
inserted?

Still looking at the spec's nested repetition block template - would 
something like this work?

<li repeat="template" id="planets" autoname="pattern" 
indexposition="[^\.]*">
     <label> Name: <input name="planet.name" required="required"/> 
</label>
     <h3> Moons </h3>
     <ul>
    

	<li repeat="template" id="planet.moons"  autoname="pattern" 
indexposition="[^\.]*\.[^\.]*">
       <input name="planet.moon.moons"/>
</li>

The UA will deduce the index of the new repetition block as given in 
the spec, and then instead of step 7 in the "add" part go through all 
attributes and insert the index into the attribute at the end of the 
regexp match.

-- 
Hallvord Reiar Michaelsen Steen
hallvors at online.no / www.hallvord.com

Received on Friday, 25 June 2004 13:51:23 UTC