- From: Aaron Reed <aaronr@us.ibm.com>
- Date: Fri, 29 Feb 2008 18:24:46 -0600
- To: www-forms@w3.org
Hi,
One of our users found this interesting testcase that we (FF XForms
extension) handle poorly. But as it turns out, of the processors that I
tried (Orbeon, XSmiles and formsPlayer besides ourselves), only fP came
close to handling it correctly so I don't think that we are the only
ones unsure of how this should work.
The problem arises if the author has a xf:select/select1 with an item
that has an event handler for xforms-select in it and inside that event
handler the author put a xf:insert. In my interpretation of the spec,
when the user clicks on the item to select it, the xf:insert should
happen which will cause RRRR to occur immediately after the insertion
since this is an outermost action handler. After the xforms-select
fires, the bound node value should change. Then the xforms-recalculate,
xforms-revalidate, and then another xforms-refresh will fire as per
section 4.6.7 in the spec.
fP only fires one xforms-refresh, so even though they seem to handle the
testcase correctly otherwise, this doesn't correspond with what I think
should happen. The other two processors only fire one refresh but they
also seemingly don't process the xf:insert so they probably have bugs
like we do.
So I guess I'd like to know:
1) Should the bound node value change before xforms-select? Or is that
being left intentionally vague and being deemed implementation dependent?
2) How many xforms-rebuild, -recalculate, -revalidate and -refresh
events should fire? 1 rebuild and 2 of the rest or just one of each?
Here is the testcase:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG
1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xf="http://www.w3.org/2002/xforms">
<head>
<xf:model id="selection">
<xf:message level="modal" ev:event="xforms-refresh">
xforms-refresh
</xf:message>
<xf:instance id="choice">
<selection xmlns="">
<sort>
<item label="dummy"/>
</sort>
<types/>
</selection>
</xf:instance>
</xf:model>
</head>
<body>
<h2> Each time the testitem changes to the selected state,
it should add another node to the nodeset
</h2>
<xf:group model="selection">
<xf:select ref="types" appearance="full">
<xf:item>
<xf:label>testitem</xf:label>
<xf:value>cool</xf:value>
<xf:action ev:event="xforms-select">
<xf:insert nodeset="../sort/item[1]"/>
<xf:message level="modal">xforms-select</xf:message>
</xf:action>
</xf:item>
</xf:select>
</xf:group><br/><br/>
<xf:output value="count(/selection/sort/item)">
<xf:label>number of nodes: </xf:label>
</xf:output>
</body>
</html>
Thanks for listening,
--Aaron
Received on Saturday, 1 March 2008 00:38:52 UTC