Advanced Web Apps Formatting

Advanced Web Apps Formatting

 

 

Warning

Please note that these configurations apply to Web Apps. To see comparable formatting options for CommCare Mobile go to Advanced CommCare Android Formatting. If you would like to confirm these advanced formatting attributes are working, you will need to test the application in the appropriate place for your project, whether that is a mobile device or Web Apps.

About

Items on this page are useful for formatting in CommCare apps and are described below. Most of them require you to edit an "Advanced" field of your question. The Advanced section of the Form Builder is by default collapsed/hidden since most fields are not relevant; however it can be displayed via the form builder by selecting Advanced from the drop down menu immediately to the right of the red Delete button. 

Appearance Attribute - Overview

By editing the appearance attribute or making other advanced changes in the Form Builder, you can do some very nice things with your form structure while working in CommCare for Android and Web Apps. The options listed here are supported as of CommCare 2.9. Utilize multiple appearance attributes simultaneously by entering them separated by spaces.

In the form builder the Appearance Attribute field can be found near the bottom of the Advanced section of the Question Properties:

Appearance Attribute Examples and Instructions


Collapsible Groups

In Web Apps, groups can be configured to show a bordered box with a header. Clicking on the header will then show or hide the questions inside the group:

Collapsible groups can be nested inside each other:

If a closed collapsible group contains a required question, the group header will be marked with an asterisk:

When the group is opened, the asterisk will disappear from the header since it's now visible on the question:

If a closed group contains a question with a validation error, the group header will be marked with a warning icon:

When the group is opened, the warning icon will disappear from the header and be visible on the question with the error, along with the error message:

Collapsible group headers also support markdown to format the group header text (such as italics, bold, links, headers and bullet points). Any markdown that you use in the Group question's Display Text will be displayed as formatted text. Markdown formatting options can be found on the help page Text Formatting (Markdown)

How to do it

In the Advanced section of the Question Properties section, you'll mark the group as collapsible and whether you want it to be open or closed when the form loads.

If you wish to have the group open when the form is first opened, set the Appearance Attribute to: group-collapse collapse-open

If you wish to have the group closed when the form is first opened, set the Appearance Attribute to: group-collapse collapse-closed

Collapsibility is only supported for Group questions, not for Question List questions or Repeat Group questions. However, you can nest a question list or repeat group inside of a collapsible group.

In order for the appearance attributes listed above to work, the Question Group must have a display text.

Collapsible groups are available only on web apps, not on mobile devices or in App Preview.

 


Combined Multiple Choice Using a Question List Group

This is a way of combining questions that have the same answers. It requires creating a "throw-away" question that is used to set the header (i.e. in the example below, "Chose for each: Yes No" is a single select question for which data is not captured).

This structure can also work for multi-select checkbox questions.



How to do it

You need to put all of the questions in a Question List Group.

The first question will define the headers (so you will not be able to actually record data for it). For that first question, in the Advanced section of the Question Properties, set the field  Appearance Attribute to: 

label

The subsequent questions in the group should have appearance set to: 

list-nolabel


Below is an example of what this looks like in the form builder:



Below is an example of the xml.

For the first question:

<select1 ref="/data/test_combined_appearance/like_choices" appearance="label"> <label ref="jr:itext('like_choices-label')" /> <item> <label ref="jr:itext('like_choices-yes-label')" /> <value>yes</value> </item> <item> <label ref="jr:itext('like_choices-no-label')" /> <value>no</value> </item> </select1>

For the subsequent questions:

<select1 ref="/data/test_combined_appearance/like_blue" appearance="list-nolabel"> <label ref="jr:itext('like_blue-label')" /> <item> <label ref="jr:itext('like_blue-yes-label')" /> <value>yes</value> </item> <item> <label ref="jr:itext('like_blue-no-label')" /> <value>no</value> </item> </select1>






Single Select "Dropdown" or "Combo Box"

This dropdown also allows you to filter the list by typing in a text box. When possible, it will also try to prevent users from entering text that is not part of a valid answer.





How to do it

In the Advanced section of the Question Properties, set the field  Appearance Attribute to: 

minimal

There are 3 different variations of a combo box available, which use different rules for how they filter answer choices in the dropdown menu based upon the text that the user has entered:

  1. Standard - This option is recommended for if your question has simple, mostly one-word answer choices. The filter matches on prefixes, i.e. entering the text "ap" would show "Apple" and "Apply", but not "Cape"

    1. In the Advanced section of the Question Properties, set the field Appearance Attribute to:

      combobox

  2. Multiple Words - This option is recommended for if your question has more complicated, mostly multiple-word answer choices. The filter checks for matches on individual words that appear anywhere within the entered text. On Web Apps, the fuzzy matching approach typically yields better results than Multiple Words.

    1. In the Advanced section of the Question Properties, set the field Appearance Attribute to: 

      combobox multiword

  3. Fuzzy Matching - This option is recommended for if your question has more complicated answer choices that you expect users might misspell or mistype. The filter is more permissive and will show answer choices that are deemed similar to the entered text.

    1. In the Advanced section of the Question Properties, set the field Appearance Attribute to: 

      combobox fuzzy

    2. Technical note: "fuzziness" is largely based on edit distance, which calculates how similar the search string is to the options. CommCare also does some special case handling, in particular to handle searches that match the beginning of one or more of the options (as when the user has started typing out a long option).



Here is an example of the xml:

<select1 ref="/data/spinner_test" appearance="minimal"> <label ref="jr:itext('spinner_test-label')" /> <item> <label ref="jr:itext('spinner_test-1-label')" /> <value>1</value> </item> <item> <label ref="jr:itext('spinner_test-2-label')" /> <value>2</value> </item> <item> <label ref="jr:itext('spinner_test-3-label')" /> <value>3</value> </item> <item> <label ref="jr:itext('spinner_test-4-label')" /> <value>4</value> </item> </select1>