- From: Weston Ruter <westonruter@gmail.com>
- Date: Fri, 4 May 2007 01:46:27 -0700
- To: "John Boyer" <boyerj@ca.ibm.com>
- Cc: "HTML WG" <public-html@w3.org>, public-forms@w3.org, "Maciej Stachowiak" <mjs@apple.com>
- Message-ID: <fb8299e10705040146j2b750f57rc750ff6cdf0e6896@mail.gmail.com>
Hi John, On 5/3/07, John Boyer <boyerj@ca.ibm.com> wrote: > 1) Observe first off that the template row is not differentiated from the data > rows, so a poor user experience results when a user deletes the template > row since it is no longer possible to add a new empty row. This is not accurate. The template cannot be deleted by invoking the repetition behavior (see working "planet" example < http://weston.ruter.net/projects/repetition-model/testsuite/003.html>). The template row is differentiated from the data rows in that its repetitionType DOM property is set to REPETITION_TEMPLATE (versus REPETITION_BLOCK for the blocks), and furthermore in that the template node does not appear in the repetitionBlocks NodeSet. > 2) Moreover, if all the rows are deleted, then how does the table ever > become non-empty again? Again, only the repetition blocks are deleted; the template remains intact. The table becomes non-empty by invoking the template's addRepetitionBlock method. > 4) It's also unclear how you'd easily do some kinds of common UI constructs > like adding a new row relative to where the current focus is located in the table > or deleting a row with a button that is not in the table row. Maybe these are > solvable with current WF2, but they are common enough use cases to warrant > looking at the markup. I agree. I think there should be two more buttons defined for the WF2 repetition model: add-before and add-after. When these buttons are placed within an instantiated template (a block) then they would insert a new block in the appropriate location (before and after, respectively). This functionality, however, can be scripted currently by passing a refNode argument to the addRepetitionBlock method. > 5) Finally, the note at the end of nested repeats about the need for unicode > hacks to bandage the XML non-validity problems seems another symptom of > the need for a better solution.. I agree. Although perhaps HTML5 should explicitly allow left and right square brackets in IDs since it's not XML anyway? :-) Weston On 5/3/07, John Boyer <boyerj@ca.ibm.com> wrote: > > > I think perhaps the most important bit missing from my off-the-cuff > laundry list is a requirement that I have gotten so used to taking for > granted that it just didn't float to the top yesterday. > > It's important because it seems to be a bit at odds with some of the > technical approach taken in WF2, which in turn occurred to optimize a > seamingly competitive need. > > Frankly, it's expressed in our current charter ( > http://www.w3.org/2007/03/forms-charter.html) in the following sentence: > "It is a goal that this work will be conducted in a task force jointly with > the HTML WG, draw on the Web Forms 2 work (which moves from the Web > Application Formats Working Group to the HTML Working Group) and be > integrated into the XForms architecture (following design principles such as > the separation of presentation from content)." > > The key is the parenthetic: a foundational tenet of XForms architecture is > the separation of presentation from content. XForms has tended to optimize > on this tenet. Part of WF2 reflects a desire to relax that tenet, and in a > number of ways the forms working group has expressed amenability to that > desire. > > WF2 on the other hand seems to optimize on backwards compatibility, which > no one is arguing against in principle, but it seems in some places to be > carried to the extreme of avoiding the use of better tags/attributes even > for net new features for which only limited compatibility with html4 > browsers can ever be hoped for. > > A concrete difference can be seen, for example, with the approach to > repeating structures. In XForms a <repeat> expresses the template, and the > *data* associated with that repeat determines how many instances of the > template become available at run-time. In WF2 ( > http://www.whatwg.org/specs/web-forms/current-work/#repeatExample), it is > shown that the UI controls are repeated in the markup itself as there is > *no* separation of data and presentation. > > 1) Observe first off that the template row is not differentiated from the > data rows, so a poor user experience results when a user deletes the > template row since it is no longer possible to add a new empty row. > > 2) Moreover, if all the rows are deleted, then how does the table ever > become non-empty again? > > 3) And if "mid-population" data is obtained by an ajax call, you have > again the problem of not having an empty row template to work with. > > 4) It's also unclear how you'd easily do some kinds of common UI > constructs like adding a new row relative to where the current focus is > located in the table or deleting a row with a button that is not in the > table row. Maybe these are solvable with current WF2, but they are common > enough use cases to warrant looking at the markup. > > 5) Finally, the note at the end of nested repeats about the need for > unicode hacks to bandage the XML non-validity problems seems another symptom > of the need for a better solution.. > > What would be better is a technical approach that allows the repeating > construct to be identified and the template to be specified, but > prepopulation data should be provided through a separate instance. It also > illustrates what we mean by "scale up to XForms architecture" while also > preserving the most backwards compatibility with html4 that could reasonably > be expected. Here is sample of the serialization of the planets and moons > example from WF2 the way it might look with a good separation of > presentation and data: > > Presentation: > > <ol> > <li> > <repeat name="planets"> > <label for="name">Planet: </label> <input name="planet" .../> > <h3>Moons</h3> > <ul> > <repeat name="moons"> > <li> <input name="moon" /> <button type="delete">Delete > moon</button></li> > </repeat> > </ul> > <button type="insert" repeat="moons">Add moon</button> > </repeat> > <button type="delete">Delete planet</button> > </li> > </ol> > <button type="insert" repeat="planets">Add planet</button> > > The data model, which is optional if you don't want to prepopulate the > table, would look like this: > > <form> > <instance> > <data> > <planets> > <planet>Mars</planet> > <moons> > <moon>Phobos</moon> > <moon>Deimos</moon> > </moons> > </planets> > <planets> > <planet>Neptune</planet> > <moons> > <moon>Triton</moon> > <moon>Nereid</moon> > ... > </moons> > </planets> > </data> > </instance> > > <ol> ... from above ... </ol> > </form> > > > The html4 browser sees an empty table and some buttons, which don't work. > This is expected since html4 browsers won't really understand how to > operate html5 repeats, so this is about the best that can be expected for > "backwards compatibility". > > But an html5 browser now has the desired nested table, and at the same > time all the problems I listed above go away. The template is clearly > distinct from the data, so you can't delete the template and you can recover > from the empty table problem. It is easy to extend the buttons to handle > insert/delete at currently focused location because the repeats are clearly > identified for what they are and don't do double duty as template and data. > And the above never resorts to XML invalid content, so it is easy to > provide "two equal serializations", one XML and the other tag soup, that > mean the same thing. > > The benefits don't stop there. Aside from the runt-ime (i.e. the concerns > of web browser makers), the above separation advantages not only design > tools that seek to make it easier to author forms, but most importantly the > authors of and the CPUs that have to run server-side code for processing > these forms. For example, it is much easier to write form prepopulation > code (e.g. a JSP) that just gets some data and drops it in one place in > the form than it is to write the code that has to generate the UI controls > to represent that data. Aside from being easier to write, the code is less > brittle. And then there's the tremendously important aspect of the lower > server load that the separation provides. The transactional volumes > required in government to citizen forms applications are really critical to > consider here. > > I could continue on about the impact of this separation on other language > features, but this should be enough to exemplify what I see as being better > "architectural alignment" and to substantiate why it must be done. > > 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 > > > > > *Maciej Stachowiak <mjs@apple.com>* > Sent by: public-html-request@w3.org > > 05/03/2007 10:51 AM > To > Maciej Stachowiak <mjs@apple.com> cc > HTML WG <public-html@w3.org> Subject > Re: Architectural Consistency Requirements for Forms > > > > > > > > > On May 3, 2007, at 9:13 AM, Maciej Stachowiak wrote: > > > John mentioned that these thoughts were off the cuff, and he may > > have forgotten some important points. I would appreciate it if > > XForms experts > > Oops, I forgot to finish my sentence. "I would appreciate it if > XForms experts would mention any requirements they think should be > added to this list." > > Regards, > Maciej > > > >
Received on Friday, 4 May 2007 18:52:26 UTC