XForms/Venn Diagram
Appearance
< XForms
Motivation
[edit | edit source]You want to interactively change Venn Diagram parameters.
Method
[edit | edit source]Use XForms range controls to change values in a form. Use the bind to concatenate input parameters. Use the incremental attribute to allow the user to see the changes as the range controls change. Sending a submit will alter the Venn Diagram REST parameters.
Screen Image of User Interface
[edit | edit source]
Output of Call to Google Charts
[edit | edit source]
Link to Executable Example
[edit | edit source]Program Code
[edit | edit source]<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <head> <title>Google Venn Diagram</title> <style type="text/css"> @namespace xf url("http://www.w3.org/2002/xforms"); body {font-family: Helvetica, sans-serif} /* This line ensures all the separate input controls appear on their own lines */ xf|input, xf|range, xf|output {display:block; margin:5px 0;} /* this puts the labels in120px columns and right aligns them */ xf|input > xf|label, xf|range > xf|label, xf|output > xf|label {text-align:right; padding-right:10px; width:120px; float:left; text-align:right;} .xf-value {width: 150px} </style> <xf:model> <xf:instance id="chart-params" xmlns=""> <data> <cht>v</cht> <chs>400x400</chs> <chd/> <chdl/> </data> </xf:instance> <!-- temp variables that are concated together to create the parameter --> <xf:instance xmlns="" id="tmp"> <data> <sa>15</sa> <sb>20</sb> <sc>25</sc> <ab>10</ab> <ac>12</ac> <bc>15</bc> <abc>5</abc> <la>A</la> <lb>B</lb> <lc>C</lc> </data> </xf:instance> <xf:bind nodeset="instance('tmp')/sa" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/sb" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/sc" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/ab" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/ac" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/bc" type="xs:integer"/> <xf:bind nodeset="instance('tmp')/abc" type="xs:integer"/> <xf:bind nodeset="instance('chart-params')/chd" calculate="concat( 't:', instance('tmp')/sa, ',', instance('tmp')/sb, ',', instance('tmp')/sc, ',', instance('tmp')/ab, ',', instance('tmp')/ab, ',', instance('tmp')/bc, ',', instance('tmp')/abc )"/> <xf:bind nodeset="instance('chart-params')/chdl" calculate="concat( instance('tmp')/la, '|', instance('tmp')/lb,'|', instance('tmp')/lc )"/> <xf:submission id="get-chart" action="http://chart.apis.google.com/chart" method="get" separator="&" ref="instance('chart-params')" replace="all"/> <!-- put the cursor in the first field when the form becomes ready --> <xf:action ev:event="xforms-ready"> <xf:setfocus control="field-1"/> </xf:action> </xf:model> </head> <body> <h3>Google Venn Diagram Demo</h3> <xf:range ref="instance('tmp')/sa" start="2" end="30" step="1" incremental="true"> <xf:label>Size A: </xf:label> </xf:range> <xf:range ref="instance('tmp')/sb" start="2" end="30" incremental="true"> <xf:label>Size B: </xf:label> </xf:range> <xf:range ref="instance('tmp')/sc" start="2" end="30" incremental="true"> <xf:label>Size C: </xf:label> </xf:range> <xf:range ref="instance('tmp')/ab" start="0" end="20" incremental="true"> <xf:label>AB Distance: </xf:label> </xf:range> <xf:range ref="instance('tmp')/ac" start="0" end="20" incremental="true"> <xf:label>AC Distance: </xf:label> </xf:range> <xf:range ref="instance('tmp')/bc" start="0" end="20" incremental="true"> <xf:label>BC Distance: </xf:label> </xf:range> <xf:range ref="instance('tmp')/abc" start="0" end="20" incremental="true"> <xf:label>ABC Overlap: </xf:label> </xf:range> <xf:output ref="chd"> <xf:label>Data:</xf:label> </xf:output> <xf:input ref="instance('tmp')//la"> <xf:label>Label A: </xf:label> </xf:input> <xf:input ref="instance('tmp')/lb"> <xf:label>Label B: </xf:label> </xf:input> <xf:input ref="instance('tmp')/lc"> <xf:label>Label C: </xf:label> </xf:input> <xf:output ref="instance('chart-params')/chd"> <xf:label>Distance Data:</xf:label> </xf:output> <xf:output ref="instance('chart-params')/chdl"> <xf:label>Labels:</xf:label> </xf:output> <xf:submit submission="get-chart"> <xf:label>Create Venn Diagram</xf:label> </xf:submit> </body> </html>