Form support¶ ↑
Showoff extends Markdown to render a limited subset of form elements. This is mostly useful for polls, quizzes, surveys, etc. These extensions are only rendered on slide that have been marked as forms.
Form responses are saved to a JSON file on disk,
stats/forms.json
, and cached in memory for quick access.
Responses are keyed by form ID and IP address. Each IP has only one
response saved, and subsequent submissions will overwrite. Showoff saves
and reloads data from disk, so you can run the presentation multiple times
without data loss. Just like stats/viewstats.json
, you should
remove the file prior to starting the presentation if you'd like to
start from a clean slate.
Responses can optionally be displayed live in the presenter view.
Marking a slide¶ ↑
Each slide containing a form must be marked as such by including that form's ID in the slide signature. For example, to create a slide that posts to the id of `experience`, the slide signature that you might use could look like:
<!SLIDE form=experience>
Markdown extensions¶ ↑
Form slides are rendered via Markdown extension with the general form of:
question = answer(s)
Both sides, the question and the answer(s) are tokenized so that they may be represented as either a single continuous string, or a key and a string. This would look like:
key -> A human readable representation of the element
If the `=` sign has an asterisk prepended, then the field is marked as required.
question *= answer(s)
Form element syntax¶ ↑
The right hand side (answer) can be rendered in the following ways:
- text field
-
Three or more consecutive underscores, followed by an optional length.
name = ___ name = ___[50] name -> What is your name? = ___[50]
- text area
-
Whitespace surrounded by square brackets, including an optional number of rows.
comments = [ ] comments = [ 5]
- radio buttons
-
Delineate a list of options on the right hand side with parentheses, optionally marking one as default using an `x`. This accepts the tokenized form for a key and a full human readable string. If options are placed on multiple lines indented by 3+ spaces, then the output will be rendered as a bullet list. For use as a quiz, you may mark correct answers with an `=`.
smartphone = () iPhone () Android () other -> Any other phone not listed awake -> Are you paying attention? = (x) No () Yes continent -> Which continent is largest? = () Africa () Americas (=) Asia () Australia () Europe
- checkboxes
-
Works exactly like radio boxes, only using square brackets as delineators. Use `x` to mark the default options and `=` to mark correct options.
smartphone = [] iPhone [] Android [x] other -> Any other phone not listed
- combo select
-
Surround options on the right hand side with curly brackets and a combo select box will be rendered. If you place the options on multiple lines, you can use the long tokenized form. The shorthand single line syntax supports keys only. The default option may be specified by surrounding an option with parentheses and the correct option may be indicated with square brackets.
phoneos -> Which phone OS is developed by Google? = {iPhone, [Android], Other } smartphone = {iPhone, Android, (Other) } smartphone = {iPhone, Android, (other -> Any other phone not listed) } cuisine -> What is your favorite cuisine? = { American, Italian, French } cuisine -> What is your favorite cuisine? = { US -> American IT -> Italian FR -> French }
Viewing results¶ ↑
A continuously updating block displaying the live results from a given form ID can be embedded into the presenter notes using the syntax below. The ID should match the ID of a form created by marking a slide with a form tag.
~~~FORM:id~~~
This will display all data that can be rendered in aggregate form as a horizontal bar chart that updates every three seconds. Free entry elements are not displayed.
The presenter view also includes a Display Results button instead of the Save button that audience members see. Pressing this button will render a single snapshot of the current results over the display window. This will commonly be displayed on the projector. Pressing the button again will update the results.
Example slide¶ ↑
<!SLIDE form=classinfo> # Making Acquaintances ## Let's get to know each other Tell me a little bit about yourself to help me better tailor the classroom experience towards your needs. howlong -> How long have have you been using Puppet? = { under -> Less than six months 6mo -> Around six months 1yr -> About a year 2yr -> Two years or so more -> Since before Puppet Enterprise was a sparkle in Luke's eye, get offa my lawn. } job -> What is your work role? = [] support -> Technical Support [] Sysadmin [] dbadmin -> DB Admin [] Developer [] Management usedpe -> Have you used Puppet Enterprise? = () Yes () No prepared -> Do you feel prepared for this class? = () Yes () No ~~~SECTION:notes~~~ Tell the class a little bit about yourself and your own background. ~~~FORM:classinfo~~~ ~~~ENDSECTION~~~