W3C home > Mailing lists > Public > www-forms@w3.org > December 2003

A simple general-purpose wizard [was RE: xforms for inhomogenous collections]

From: Mark Birbeck <mark.birbeck@x-port.net>
Date: Wed, 17 Dec 2003 20:04:10 -0000
To: "'Oliver Scholz'" <alkibiades@gmx.de>
Cc: <www-forms@w3.org>
Message-ID: <003f01c3c4d8$f28cce40$6b01a8c0@W100>
Hi Oliver,

You wrote:
> The way I see it, "relevance" in the context of the group element
> to the "relevant" attribute of a bind element in the model. Is that
> If so, I do not yet understand how I (as a user of my application)
> specify a bind element that would lead to the desired effect. Could
> give me a hint?
> I guess, the simplest thing for my purpose would be something like the
> (with the example data in my last message). But as far as I can see,
this would
> be an extension.  Is that what you suggest?
>    <xforms:repeat ref="/record-set/record">
>      <hr/>
>      <xforms:group relevant="@type = 'author'">
>	<h2>An Author</h2>
>	<xforms:input ref="name">
>	  <xforms:label>Author Name</xforms:label>
>	</xforms:input>
>      </xforms:group>
>     <xforms:group relevant="@type = 'book'">
>	<h2>A Book</h2>
>	<xforms:input ref="title">
>	  <xforms:label>Book Title</xforms:label>
>	</xforms:input>
>     </xforms:group>
>    </xforms:repeat>

You are correct about using @relevant, but not in how it is used. It
should not be an attribute on a form control.

What you need to do is make use of the fact that binding model item
properties (MIPs) such as 'relevant' and 'readonly' to a nodeset results
in the value of those MIPs being forwarded to any user interface
components connected to the nodeset. This goes for xf:group and
xf:trigger, as much as it does for any other UI control.

So, for example, you could have a set of 'page' elements in an instance,
and then use a page number to enable one and disable the others:

    <xforms:bind nodeset="page" relevant="@id = /currentPage" />

Then you simply bind an xf:repeat or a series of xf:groups to these
elements. The following uses the xf:group approach, but if every page
had the same structure an xf:repeat would be even easier:

    :disabled { display: none; }
    xforms|group { display: block; }

    /* for formsPlayer */
    .disabled { display: none; }
    xforms\:group { display: block; }

    <xforms:group ref="page[1]">
        <h2><xforms:output ref="@title" /></h2>
        I'm the first page ...

    <xforms:group ref="page[2]">
        <h2><xforms:output ref="@title" /></h2>
        ... and I'm the second.

Now you simply change the value of 'currentPage' and the correct
xf:group becomes enabled, the others disabled.

An example including dynamic navigation triggers that use the same
technique, is attached. It is a generic 'wizard controller' that can be
used with any repeating sequence to drive the pages of the wizard. It
has been tested in formsPlayer.



Mark Birbeck
x-port.net Ltd.

Download our 100% compliant XForms processor
From http://formsPlayer.com/

Received on Wednesday, 17 December 2003 15:04:22 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:36:10 UTC