The basic
trial template is the most common type. This type of trial template can be used to create essentially any trials. The other trial template types, such as instruction, alternative forced choice, or mouse reset, are specialized versions of this basic type. The use of the specialized trial template types is strongly encouraged (which in most cases will save researchers' time) but often not necessary (that is, researchers could use the basic type for all trials in a study).
With the basic
trial template, you specify a set of stimuli from which your trials should pull, a set of associated responses, the order in which these stimuli and responses should be presented, and much more!
For example, let's say you want to create a series of 8 trials that match images with a rating scale response, and you want the set of images to appear in a randomized order for each participant. You can use the basic
trial template to match a set of image stimuli with a rating response (all previously defined in your study materials -- see Stimuli and Response sections of this grammar if these concepts are unfamiliar). You can also specify that the 8 stimuli be presented in a randomized order, and FindingFive will take care of creating 8 trials, each with a single image stimulus and the specified rating scale response, and FindingFive will also make sure these eight trials are randomized for each participant!
Use the below properties to implement a basic
trial template. They are organized by function (e.g., properties that control the behavior of stimuli, properties that control timing and trial progression, etc.).
basic
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"]
}
Please see the following tabs for more details on each of these options!
["s1", "s2", "s3"]
) that define which stimuli to present on each realized instance of this trial template. These stimuli will be presented in standard locations.["s1", "s2", "s3"]
). Use nested lists to present multiple stimuli on a single trial (e.g., ["s1", ["s2", "s3"]]
).Example code:
For example, consider the trial template "T1"
defined as:
"T1": {
"type": "basic",
"stimuli": ["s1", ["s2", "s3"], "s4"]
}
This trial template will generate a total of three trials: s1
will be displayed on the first trial, s2
and s3
will be displayed on the second trial, and s4
will be displayed on the third trial. The locations of these stimuli are chosen by FindingFive - when there's one stimulus per trial, the stimulus will be in the center of the trial; when there are more than one stimulus per trial, the stimuli will be placed in intuitive default locations.
Definition: A list of dictionaries of stimulus names, paired with their locations in a 3x3 grid. Optionally, one can also specify whether to randomly shuffle the stimuli across the defined locations.
The 3x3 grid is organized as follows:
Possible values: A list of dictionaries specified in the form: {"which": [LIST_OF_STIMULI], "location": [LIST_OF_LOCATIONS], "randomize_location": true or false}
. Note that "randomize_location" is optional and its default value is false
. Also note that with the custom option, each dictionary refers to stimuli-location pairings for a single trial. Include one dictionary for each desired trial.
Example code: For example, to place two stimuli on a single trial so that one is at the top left corner and the other at the bottom right corner, one can specify:
"T1": {
"type": "basic",
"stimuli": [{"which": ["s1", "s2"], "location": [1, 9],
"randomize_location": true},
{"which": ["s3", "s4"], "location": [1, 3]}]
}
In the above trial template, s1
and s2
will be displayed on the first trial. Because randomize_location
is specified as true
, s1
and s2
will be randomly placed in the top left corner (location 1
) and bottom right corner (location 9
). s3
and s4
will be displayed on the second trial. Because randomize_location
is not specified (equivalent to "randomize_location": false
), s3
will appear in the top left corner (location 1
) and s4
will appear in the top right corner (location 3
).
Stimulus names can also be a special syntax that refers to participant responses collected on previous trials of the same experiment (carryover responses). This can be useful for experimental designs where the participant is asked to review or judge their own responses in perception or decision making tasks. At the time being, FindingFive supports using participant data collected from text and audio responses as text and audio stimuli, respectively.
The special syntax is:
"%r:BlockName|TrialTemplateName|ResponseName"
Each instance of this special stimulus name carries over exactly one participant response. In a typical design, the same ResponseName response may be used many times with different stimuli on the same trial template. To carry over multiple participant responses that can be matched by this special syntax, simply use as many instances of this special stimulus name as needed. For example:
"TestingTrialTemplate": {
"stimuli": ["%r:TrainingBlock|AudioRecordingTrial|AudioResponse",
"%r:TrainingBlock|AudioRecordingTrial|AudioResponse",
"%r:TrainingBlock|AudioRecordingTrial|AudioResponse",
"%r:TrainingBlock|AudioRecordingTrial|AudioResponse",
"%r:TrainingBlock|AudioRecordingTrial|AudioResponse"],
"responses": ["SomeResponse"]
}
The above trial template will create 5 different trials, each of which uses a different response that has been collected on the AudioRecordingTrial in the TrainingBlock (note you must make sure that that trial has collected at least 5 AudioResponses).
By default, you do not need to define a separate stimulus for carryover responses used as stimuli. However, in the event that customization is necessary, you can create a stimulus of the same name. For example, we can create a stimulus named %r:TrainingBlock|AudioRecordingTrial|AudioResponse after we have used the same syntax in the "stimuli" property of the above trial template. Then, we would like to make the stimulus invisible and truncated to only 5 seconds (let’s pretend the original audio response collected 10s of recording):
{
"type": "audio",
"visible": false,
"duration": 5
}
Importantly, as a general rule for using carryover responses, those responses must have been already collected in an earlier block than the block referencing them.
Definition: A dictionary that specifies how the supplied stimuli are used on realized trials. The dictionary usually consists of a set of optional properties for tweaking the presentation of stimuli on trials generated from a template, such as:
{
"order": "some_order",
"attribute": "some_attribute",
"pre_shuffle": false,
"limit": 5
}
Definition: A stimulus can have custom-named properties that serve as attributes of the stimulus. This is useful for controlling the presentation pattern of particular types of stimuli, when used together with some of the below options for "order"
.
Possible values: A custom-named property defined for one or more of the stimuli listed in the "stimuli"
property of a trial template.
Default: there is no default for this property as it is completely optional. That is, the "attribute"
property can be omitted from "stimulus_pattern"
.
For example, one can set a custom attribute called "grammatical"
with values of either true
or false
for a group of text stimuli:
{
"type": "text",
"content": "It rained yesterday",
"grammatical": true
}
and
{
"type": "text",
"content": "I love eating many ice-creams",
"grammatical": false
}
Then, one can alternate the presentation of grammatical and ungrammatical sentences by using the following stimulus pattern setup:
"stimulus_pattern": {"order": "alternate",
"attribute": "grammatical"}
"fixed"
, "random"
, "pseudorandom"
, "ascending"
, "descending"
, "alternate"
, "every"
. See the following tabs for details on each of these."fixed"
."fixed"
presents stimuli in the same order as they are listed in the "stimuli"
property of the trial template. For example:
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"stimulus_pattern": {"order": "fixed"} // this is the default and can be omitted
}
A total of two trials will be generated from this trial template: the first trial presents the stimulus "s1" and the second trial "s2". In other words, stimuli are presented in the order they are listed in the "stimuli"
property due to the "fixed"
order. This is the default and can be omitted.
"random"
presents stimuli randomly, using true randomization that is generated each time a participant views the study, with no counterbalancing within or between participants.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"stimulus_pattern": {"order": "random"}
}
In the above code, the presentation order of stimuli "s1" and "s2" is randomized per participant, and per instance of the trial template. For example, if the same trial template is used multiple times in a study, the trials generated from the template will be randomized separately for each occurrence of that trial template for each participant.
"pseudorandom"
presents stimuli randomly, subject to the constraint that stimuli with a designated custom attribute (in this example, "ungrammatical"
) will appear in a row at least "min_N"
times (defaults to 1) and at most "max_N"
times (defaults to, and is always at least equal to, "min_N"
).
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"stimulus_pattern": {"order": "pseudorandom",
"attribute": "ungrammatical",
"min_N": 2, "max_N": 4}
}
In the above code, stimuli are randomized per participant, so that ungrammatical stimuli (those with custom attribute "ungrammatical"
set to true
) are presented at least twice in a row, but no more than 4 times consecutively.
"ascending"
presents stimuli in increasing order by the value of a designated custom attribute (in this example, "length"
).
Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
"length": 1
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
"length": 2
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
"length": 3
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"length": 4
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"length": 5
}
The following trial template:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "ascending",
"attribute": "length"}
}
presents the stimuli in the order that the value of "length"
increases (singleShort1, singleShort2, singleShort3, etc.). Intuitively, changing "ascending"
to "descending"
has the exact opposite effect.
Note that if two or more stimuli have the same value for "length"
, then their relative order can be randomized setting "pre_shuffle"
to true
:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "ascending",
"attribute": "length",
"pre_shuffle": true}
}
If the values of the target attribute are all unique, then "pre_shuffle"
has no effect.
"descending"
presents stimuli in decreasing order by the value of a designated custom attribute (in this example, "length"
).
Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
"length": 1
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
"length": 2
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
"length": 3
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"length": 4
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"length": 5
}
The following trial template:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "descending",
"attribute": "length"}
}
presents the stimuli in the order that the value of "length"
decreases (singleShort5, singleShort4, singleShort3, etc.). Intuitively, changing "descending"
to "ascending"
has the exact opposite effect.
Note that if two or more stimuli have the same value for "length"
, then their relative order can be randomized setting "pre_shuffle"
to true
:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "descending",
"attribute": "length",
"pre_shuffle": true}
}
If the values of the target attribute are all unique, then "pre_shuffle"
has no effect.
"alternate"
presents stimuli so that they alternate between values of a defined custom attribute.
Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
"difficulty": "easy"
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
"difficulty": "easy"
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
"difficulty": "easy"
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"difficulty": "hard"
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"difficulty": "hard"
}
The following trial template then presents the stimuli so that "easy"
and "hard"
alternate:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "alternate",
"attribute": "difficulty"}
}
"every"
presents one stimulus with a defined custom attribute after presenting N-1
stimuli without this attribute. An additional property "N"
must also be specified.
Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"difficult": true
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"difficult": true
},
"singleShort6": {"type": "image",
"content": "new-ambi1-a-6.jpg",
}
The following trial template:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5", "singleShort6"],
"stimulus_pattern": {"order": "every",
"attribute": "difficult"}
"N": 3
}
presents 2 stimuli ("N"
-1) without custom property "difficult"
, then presents 1 stimulus with "difficult" : true
, and repeats until all stimuli are displayed (e.g., singleShort1, singleShort2, singleShort4, singleShort3, singleShort6, singleShort5).
"stimuli"
property of a trial template before applying the specified patterntrue
or false
false
"order"
is "fixed"
or "random"
"order"
implies strict ordering (such as "ascending"
), "pre_shuffle"
only affects cases where attribute values are the same.Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
"difficulty": "easy"
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
"difficulty": "easy"
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
"difficulty": "easy"
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"difficulty": "hard"
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"difficulty": "hard"
}
Consider the effects of "pre_shuffle"
:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "alternate",
"attribute": "difficulty",
"pre_shuffle": false}
}
With "pre_shuffle"
set to false
(which can be omitted since it's the default), the stimuli are always going to be presented in the order "singleShort1", "singleShort4", "singleShort2", "singleShort5", "singleShort3"*
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5"],
"stimulus_pattern": {"order": "alternate",
"attribute": "difficulty",
"pre_shuffle": true}
}
With "pre_shuffle"
set to true
, although "easy"
and "hard"
still alternate, it is possible to obtain a sequence such as "singleShort2", "singleShort5", "singleShort1", "singleShort4", "singleShort3". That is, the order in which stimulus names are listed in the trial template has no effect on the generated alternating order anymore.
"order"
is "every"
, meaning that for every N trials, present one stimulus with the attribute specified in "every"
(that is, present one trial with the attribute of interest after every N-1 trials without the attribute)."order"
and should be omitted in most cases.Consider that the following stimuli are defined in your study:
"singleShort1": {"type": "image",
"content": "new-ambi1-a-1.jpg",
},
"singleShort2": {"type": "image",
"content": "new-ambi1-a-2.jpg",
},
"singleShort3": {"type": "image",
"content": "new-ambi1-a-3.jpg",
},
"singleShort4": {"type": "image",
"content": "new-ambi1-a-4.jpg",
"difficult": true
},
"singleShort5": {"type": "image",
"content": "new-ambi1-a-5.jpg",
"difficult": true
},
"singleShort6": {"type": "image",
"content": "new-ambi1-a-6.jpg",
}
The following trial template:
"T1": {
"type": "basic",
"stimuli": ["singleShort1", "singleShort2",
"singleShort3", "singleShort4",
"singleShort5", "singleShort6"],
"stimulus_pattern": {"order": "every",
"attribute": "difficult"}
"N": 3
}
presents 2 stimuli ("N"
-1) without custom property "difficult"
, then presents 1 stimulus with "difficult" : true
, and repeats until all stimuli are displayed (e.g., singleShort1, singleShort2, singleShort4, singleShort3, singleShort6, singleShort5).
The most common use of "limit"
is to randomly sample a subset of stimuli from a given collection:
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3", "s4"],
"stimulus_pattern": {"order": "random", "limit": 2}
}
The above code first randomizes the 4 stimuli per participant, then presents the first 2. In effect, this means that each participant will see two randomly selected stimuli from the four available options.
["response1"]
) or nested list (e.g., [["response1", "response2"]]
). Nested lists can be used to present more than one response in a single realized trial."T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"responses": ["r1"]
}
The above code presents "r1" for both trials (one presenting "s1" and one presenting "s2").
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"responses": ["r1", "r2"]
}
The above code presents r1
for the first trial (which presents s1
) and r2
for the second trial (which presents s2
).
"T1": {
"type": "basic",
"stimuli": ["s1", "s2"],
"responses": [["r1", "r2"]]
}
The above code presents both r1
and r2
for both the trial presenting s1
and the trial presenting s2
.
Definition: When both the "stimuli"
and the "responses"
lists contain more than one element, "response_pairing"
tells FindingFive how to combine stimuli and responses across trials.
Possible values: "alternate"
, "partitioned"
, "random"
. See the following tabs for details on each of these.
Default: "alternate"
.
Responses are always evenly distributed among the stimuli - that is, if a trial template contains N times as many stimuli as responses, each response will be associated with exactly N stimuli
The number of stimuli must be an exact multiple of the number of responses.
The pattern as specified by "stimulus_pattern"
is applied after response pairing - that is, FindingFive pairs stimuli and responses together according to the specified "response_pairing" first, and then applies the specified "stimulus_pattern"
.
"alternate"
pairs the first response (r1
) with the first stimulus (s1
), the second response (r2
) with the second stimulus (s2
), the third response (r3
) with the third stimulus (s3
), and so on, until all responses are used, at which point FindingFive goes back to the beginning of the response list and continues to pair the responses with the remaining stimuli in the same pattern.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3", "s4", "s5", "s6"],
"responses": ["r1", "r2", "r3"],
"response_pairing": "alternate" // this is the default
//and can be omitted
}
In the above example, r1
will be paired with s1
and s4
, r2
with s2
and s5
, r3
with s3
and s6
.
"partitioned"
evenly divides the entire list of stimuli into sublists according to the number of responses. For example, if there are 9 stimuli and 3 responses, the stimuli will be partitioned into 3 sublists of 3. Then, preserving the original order of the stimulus list, "partitioned"
pairs the first response with the stimuli in the first sublist, the second response with the stimuli in the second sublist, and so on until all responses are used.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3", "s4", "s5", "s6"],
"responses": ["r1", "r2", "r3"],
"response_pairing": "partitioned"
}
In the above example, the list of 6 stimuli will be divided into subsets of 2, because there are 3 responses. r1
will be paired with s1
and s2
, r2
with s3
and s4
, r3
with s5
and s6
.
"random"
randomly pairs each response with stimuli. If there are more stimuli than responses, multiple stimuli will be assigned to each response. For example, if there are 9 stimuli and 3 responses, FindingFive will create 9 trials for which each response is randomly paired with 3 stimuli, without overlap.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3", "s4", "s5", "s6"],
"responses": ["r1", "r2", "r3"],
"response_pairing": "random"
}
In the above example, each response will be randomly paired with 2 stimuli, displaying each stimulus only once. For example, r1
might be paired with s4
and s5
, r2
with s2
and s6
, r3
with s1
and s3
.
"responses"
of this trial template)."follow_up_responses": {"previous_choice_response": [
// follow-up condition #1
{"match": ["value1", "value2"], "responses": ["follow_up_response1"]},
// follow-up condition #2
{"match": "value3", "responses": ["follow_up_response2", "audio_response"]}
]}
The above snippet tells FindingFive to display a response named "follow_up_response1"
if the participant chooses either value1
or value2
in the "previous_choice_response"
(which must be defined in "responses"
of this trial template), and display two other different responses if the participant chooses value3
instead.
true
or false
false
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"response_confirm": true
}
The above snippet requires participants to confirm their responses on each trial before advancing to the next.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"response_confirm": false // this is the default
// and can be omitted
}
Here, participants will automatically advance to the next trial upon providing a response.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"delay": 1.6
}
The above code introduces a delay of 1600 milliseconds before each trial.
“auto_advance”
."T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"duration": 1.6
}
In the above example, participants will passively view each stimulus for 1600 milliseconds before automatically advancing to the next trial.
true
and "duration"
is greater than 0
, then a timer will appear on each trial to remind participants explicitly that this is a timed trial.true
or false
false
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"duration": 3,
"countdown_visible": true
}
In this example, on each trial, participants will see a timer count down three seconds before advancing to the next trial (regardless of whether they provide a response or not).
true
, participants will automatically advance to the next trial when stimuli with barrier finish on the current trial. When set to false
, a continue button will appear for participants to click on to advance to the next trial.true
or false
"duration"
is longer than 0
, the default is true
; otherwise, false
."T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"duration": 1.6,
"auto_advance": false
}
In the above example, participants will not automatically advance to the next trial after 1600 milliseconds but will be required to click a continue button to advance to the next trial.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"]
}
In the second example, since "duration"
is not specified, "auto_advance"
will be set to false'
. Participants will be required to click a continue button to advance to the next trial.
"continue_button" : {"display": "auto", "onset": "auto"}
// this is the default and can be omitted
"auto"
or "always"
"auto"
Example code:
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"continue_button": {"display": "auto", "onset": "auto"}
}
In this example, FindingFive will automatically determine whether or not to display a continue button for each trial.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"continue_button": {"display": "always", "onset":
"immediate"}
}
In this example, FindingFive will always display a continue button, which will be visible from the onset of each trial.
"auto"
or "immediate"
"auto"
Example code:
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"continue_button": {"display": "auto", "onset": "auto"}
}
In this example, FindingFive will automatically determine whether (and when) a continue button should be displayed for each trial.
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"continue_button": {"display": "always", "onset":
"immediate"}
}
In this example, FindingFive will always display a continue button, which will be visible from the onset of each trial.
false
, then data collected on trials generated from this template will not be submitted to the server right away. Instead, it will be cached and waiting to be submitted until the next trial that doesn’t have this setting. Setting this property to false
is recommended for reaction-time-critical trials to avoid network latencies.true
or false
true
, meaning that data collected on a trial will be submitted at the end of the trial by default."T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"submission_point": false
}
true
, stimuli and responses on this trial will be displayed from the very top of the screen; normally, FindingFive vertically centers all content.true
or false
false
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": ["r1", "r2", "r3"],
"vertical_center": true
}
true
, a clickable banner saying “replay this trial” will appear on the top left corner of all trials generated from this trial template. Participants can refresh a trial by clicking that banner. When multiple questions are displayed on a trial, this allows participants who have not yet submitted an answer to the final question to change their responses.true
or false
false
"T1": {
"type": "basic",
"stimuli": ["s1", "s2", "s3"],
"responses": [["r1", "r2", "r3"]],
"replayable": true
}
In this example, participants are given the option to replay trials by clicking a banner. When a participant replays a trial, they reset all responses (e.g., r1
, r2
, and r3
) and must provide them again.