W3C home > Mailing lists > Public > public-xformsusers@w3.org > June 2017

Switch/case

From: Steven Pemberton <steven.pemberton@cwi.nl>
Date: Wed, 28 Jun 2017 12:08:19 +0200
To: " XForms" <public-xformsusers@w3.org>
Message-ID: <op.y2jfr5o2smjzpq@steven-xps>
I've been writing a big form this week, and I discovered that I was  
creating admin elements just to use for their relevance, in order to drive  
model-based switch.

This led to me to realise that I would like switch/case to be a bit more  
flexible: I'd like the cases to match on expressions.

Not

<switch ref="/payment/details/@method">
   <case/>
   <case name="creditCard" label="Credit Card Details">
     ...
   </case>
   <case name="cashCard" label="Bank Account Card">
     ...
   </case>
   <case name="COD" label="Cash-on-delivery Account Information">
     ...
   </case>
</switch>

but

<switch ref="/payment/details/@method">
   <case if=". = 'creditCard'" label="Credit Card Details">
     ...
   </case>
   <case if=". = 'cashCard'" label="Bank Account Card">
     ...
   </case>
   <case if=". = 'COD'" label="Cash-on-delivery Account Information">
     ...
   </case>
   <case/>
</switch>

But then of course that led me to want:

   <switch value="...">

as well.

Well, what could I do with it. How about

<repeat ref="node()">
    <output value="concat(name(.), ':')"/>
    <switch>
      <case if="count(node()) = 0">
         <output ref="."/>
      </case>
      <case if="count(node()) > 0">
         <repeat ...> ...
         </repeat>
      </case>
    </switch>
</repeat>

Rules:
* value is obtained from switch/@ref or switch/@value
* first case with @if that evaluates to true is selected
* if last case has no condition and no case has been selected, it is  
selected.

Steven
Received on Wednesday, 28 June 2017 10:08:53 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 28 June 2017 10:08:54 UTC