jspsych 6.2.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -29
- package/css/jspsych.css +39 -39
- package/dist/JsPsych.d.ts +112 -0
- package/dist/TimelineNode.d.ts +34 -0
- package/dist/index.browser.js +3164 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.browser.min.js +2 -0
- package/dist/index.browser.min.js.map +1 -0
- package/dist/index.cjs +3158 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +3152 -0
- package/dist/index.js.map +1 -0
- package/dist/migration.d.ts +3 -0
- package/dist/modules/data/DataCollection.d.ts +45 -0
- package/dist/modules/data/DataColumn.d.ts +15 -0
- package/dist/modules/data/index.d.ts +25 -0
- package/dist/modules/data/utils.d.ts +3 -0
- package/dist/modules/extensions.d.ts +22 -0
- package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
- package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
- package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
- package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
- package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
- package/dist/modules/plugin-api/index.d.ts +8 -0
- package/dist/modules/plugins.d.ts +129 -0
- package/dist/modules/randomization.d.ts +35 -0
- package/dist/modules/turk.d.ts +40 -0
- package/dist/modules/utils.d.ts +7 -0
- package/package.json +32 -15
- package/src/JsPsych.ts +884 -0
- package/src/TimelineNode.ts +536 -0
- package/src/index.ts +71 -0
- package/src/migration.ts +37 -0
- package/src/modules/data/DataCollection.ts +198 -0
- package/src/modules/data/DataColumn.ts +86 -0
- package/src/modules/data/index.ts +174 -0
- package/src/modules/data/utils.ts +75 -0
- package/src/modules/extensions.ts +23 -0
- package/src/modules/plugin-api/HardwareAPI.ts +32 -0
- package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
- package/src/modules/plugin-api/MediaAPI.ts +337 -0
- package/src/modules/plugin-api/SimulationAPI.ts +181 -0
- package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
- package/src/modules/plugin-api/index.ts +28 -0
- package/src/modules/plugins.ts +158 -0
- package/src/modules/randomization.ts +327 -0
- package/src/modules/turk.ts +99 -0
- package/src/modules/utils.ts +30 -0
- package/.github/workflows/jest.yml +0 -20
- package/code-of-conduct.md +0 -56
- package/contributors.md +0 -61
- package/docs/CNAME +0 -1
- package/docs/about/about.md +0 -18
- package/docs/about/contributing.md +0 -43
- package/docs/about/license.md +0 -25
- package/docs/about/support.md +0 -7
- package/docs/core_library/jspsych-core.md +0 -661
- package/docs/core_library/jspsych-data.md +0 -589
- package/docs/core_library/jspsych-pluginAPI.md +0 -510
- package/docs/core_library/jspsych-randomization.md +0 -397
- package/docs/core_library/jspsych-turk.md +0 -102
- package/docs/img/blue.png +0 -0
- package/docs/img/folder-setup.png +0 -0
- package/docs/img/folder-with-html.png +0 -0
- package/docs/img/githubreleases.jpg +0 -0
- package/docs/img/jspsych-favicon.png +0 -0
- package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
- package/docs/img/jspsych-logo.jpg +0 -0
- package/docs/img/orange.png +0 -0
- package/docs/img/palmer_stim.png +0 -0
- package/docs/img/progress_bar.png +0 -0
- package/docs/img/visual_search_example.jpg +0 -0
- package/docs/index.md +0 -9
- package/docs/overview/browser-device-support.md +0 -35
- package/docs/overview/callbacks.md +0 -140
- package/docs/overview/data.md +0 -281
- package/docs/overview/exclude-browser.md +0 -32
- package/docs/overview/experiment-options.md +0 -121
- package/docs/overview/fullscreen.md +0 -36
- package/docs/overview/media-preloading.md +0 -91
- package/docs/overview/mturk.md +0 -77
- package/docs/overview/progress-bar.md +0 -110
- package/docs/overview/record-browser-interactions.md +0 -23
- package/docs/overview/running-experiments.md +0 -95
- package/docs/overview/timeline.md +0 -387
- package/docs/overview/trial.md +0 -142
- package/docs/plugins/creating-a-plugin.md +0 -79
- package/docs/plugins/jspsych-animation.md +0 -40
- package/docs/plugins/jspsych-audio-button-response.md +0 -60
- package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
- package/docs/plugins/jspsych-audio-slider-response.md +0 -53
- package/docs/plugins/jspsych-call-function.md +0 -81
- package/docs/plugins/jspsych-canvas-button-response.md +0 -66
- package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
- package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
- package/docs/plugins/jspsych-categorize-animation.md +0 -60
- package/docs/plugins/jspsych-categorize-html.md +0 -52
- package/docs/plugins/jspsych-categorize-image.md +0 -53
- package/docs/plugins/jspsych-cloze.md +0 -45
- package/docs/plugins/jspsych-external-html.md +0 -70
- package/docs/plugins/jspsych-free-sort.md +0 -55
- package/docs/plugins/jspsych-fullscreen.md +0 -57
- package/docs/plugins/jspsych-html-button-response.md +0 -42
- package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
- package/docs/plugins/jspsych-html-slider-response.md +0 -45
- package/docs/plugins/jspsych-iat-html.md +0 -64
- package/docs/plugins/jspsych-iat-image.md +0 -64
- package/docs/plugins/jspsych-image-button-response.md +0 -46
- package/docs/plugins/jspsych-image-keyboard-response.md +0 -57
- package/docs/plugins/jspsych-image-slider-response.md +0 -52
- package/docs/plugins/jspsych-instructions.md +0 -58
- package/docs/plugins/jspsych-maxdiff.md +0 -42
- package/docs/plugins/jspsych-rdk.md +0 -119
- package/docs/plugins/jspsych-reconstruction.md +0 -48
- package/docs/plugins/jspsych-resize.md +0 -39
- package/docs/plugins/jspsych-same-different-html.md +0 -53
- package/docs/plugins/jspsych-same-different-image.md +0 -66
- package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -50
- package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
- package/docs/plugins/jspsych-survey-html-form.md +0 -50
- package/docs/plugins/jspsych-survey-likert.md +0 -70
- package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
- package/docs/plugins/jspsych-survey-multi-select.md +0 -53
- package/docs/plugins/jspsych-survey-text.md +0 -63
- package/docs/plugins/jspsych-video-button-response.md +0 -52
- package/docs/plugins/jspsych-video-keyboard-response.md +0 -48
- package/docs/plugins/jspsych-video-slider-response.md +0 -58
- package/docs/plugins/jspsych-visual-search-circle.md +0 -52
- package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
- package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
- package/docs/plugins/overview.md +0 -111
- package/docs/tutorials/hello-world.md +0 -144
- package/docs/tutorials/rt-task.md +0 -1107
- package/examples/add-to-end-of-timeline.html +0 -32
- package/examples/conditional-and-loop-functions.html +0 -63
- package/examples/css/jquery-ui.css +0 -1225
- package/examples/data-add-properties.html +0 -40
- package/examples/data-as-function.html +0 -36
- package/examples/data-from-timeline.html +0 -45
- package/examples/data-from-url.html +0 -21
- package/examples/demo-flanker.html +0 -108
- package/examples/demo-simple-rt-task.html +0 -104
- package/examples/demos/demo_1.html +0 -29
- package/examples/demos/demo_2.html +0 -43
- package/examples/demos/demo_3.html +0 -58
- package/examples/display-element-to-embed-experiment.html +0 -73
- package/examples/end-active-node.html +0 -52
- package/examples/end-experiment.html +0 -43
- package/examples/exclusions.html +0 -32
- package/examples/external_html/simple_consent.html +0 -4
- package/examples/img/1.gif +0 -0
- package/examples/img/10.gif +0 -0
- package/examples/img/11.gif +0 -0
- package/examples/img/12.gif +0 -0
- package/examples/img/2.gif +0 -0
- package/examples/img/3.gif +0 -0
- package/examples/img/4.gif +0 -0
- package/examples/img/5.gif +0 -0
- package/examples/img/6.gif +0 -0
- package/examples/img/7.gif +0 -0
- package/examples/img/8.gif +0 -0
- package/examples/img/9.gif +0 -0
- package/examples/img/age/of1.jpg +0 -0
- package/examples/img/age/of2.jpg +0 -0
- package/examples/img/age/of3.jpg +0 -0
- package/examples/img/age/om1.jpg +0 -0
- package/examples/img/age/om2.jpg +0 -0
- package/examples/img/age/om3.jpg +0 -0
- package/examples/img/age/yf1.jpg +0 -0
- package/examples/img/age/yf4.jpg +0 -0
- package/examples/img/age/yf5.jpg +0 -0
- package/examples/img/age/ym2.jpg +0 -0
- package/examples/img/age/ym3.jpg +0 -0
- package/examples/img/age/ym5.jpg +0 -0
- package/examples/img/backwardN.gif +0 -0
- package/examples/img/blue.png +0 -0
- package/examples/img/con1.png +0 -0
- package/examples/img/con2.png +0 -0
- package/examples/img/fixation.gif +0 -0
- package/examples/img/happy_face_1.jpg +0 -0
- package/examples/img/happy_face_2.jpg +0 -0
- package/examples/img/happy_face_3.jpg +0 -0
- package/examples/img/happy_face_4.jpg +0 -0
- package/examples/img/inc1.png +0 -0
- package/examples/img/inc2.png +0 -0
- package/examples/img/normalN.gif +0 -0
- package/examples/img/orange.png +0 -0
- package/examples/img/redX.png +0 -0
- package/examples/img/ribbon.jpg +0 -0
- package/examples/img/sad_face_1.jpg +0 -0
- package/examples/img/sad_face_2.jpg +0 -0
- package/examples/img/sad_face_3.jpg +0 -0
- package/examples/img/sad_face_4.jpg +0 -0
- package/examples/js/snap.svg-min.js +0 -21
- package/examples/jspsych-RDK.html +0 -58
- package/examples/jspsych-animation.html +0 -33
- package/examples/jspsych-audio-button-response.html +0 -52
- package/examples/jspsych-audio-keyboard-response.html +0 -62
- package/examples/jspsych-audio-slider-response.html +0 -55
- package/examples/jspsych-call-function.html +0 -32
- package/examples/jspsych-canvas-button-response.html +0 -95
- package/examples/jspsych-canvas-keyboard-response.html +0 -78
- package/examples/jspsych-canvas-slider-response.html +0 -67
- package/examples/jspsych-categorize-animation.html +0 -46
- package/examples/jspsych-categorize-html.html +0 -38
- package/examples/jspsych-categorize-image.html +0 -38
- package/examples/jspsych-cloze.html +0 -42
- package/examples/jspsych-free-sort.html +0 -97
- package/examples/jspsych-fullscreen.html +0 -44
- package/examples/jspsych-html-button-response.html +0 -46
- package/examples/jspsych-html-keyboard-response.html +0 -42
- package/examples/jspsych-html-slider-response.html +0 -53
- package/examples/jspsych-iat.html +0 -510
- package/examples/jspsych-image-button-response.html +0 -84
- package/examples/jspsych-image-keyboard-response.html +0 -78
- package/examples/jspsych-image-slider-response.html +0 -76
- package/examples/jspsych-instructions.html +0 -37
- package/examples/jspsych-maxdiff.html +0 -33
- package/examples/jspsych-reconstruction.html +0 -43
- package/examples/jspsych-resize.html +0 -34
- package/examples/jspsych-same-different-html.html +0 -28
- package/examples/jspsych-same-different-image.html +0 -33
- package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
- package/examples/jspsych-serial-reaction-time.html +0 -54
- package/examples/jspsych-survey-html-form.html +0 -33
- package/examples/jspsych-survey-likert.html +0 -42
- package/examples/jspsych-survey-multi-choice.html +0 -40
- package/examples/jspsych-survey-multi-select.html +0 -42
- package/examples/jspsych-survey-text.html +0 -34
- package/examples/jspsych-video-button-response.html +0 -57
- package/examples/jspsych-video-keyboard-response.html +0 -53
- package/examples/jspsych-video-slider-response.html +0 -55
- package/examples/jspsych-visual-search-circle.html +0 -58
- package/examples/jspsych-vsl-animate-occlusion.html +0 -29
- package/examples/jspsych-vsl-grid-scene.html +0 -41
- package/examples/lexical-decision.html +0 -132
- package/examples/manual-preloading.html +0 -53
- package/examples/pause-unpause.html +0 -33
- package/examples/progress-bar.html +0 -62
- package/examples/sound/hammer.mp3 +0 -0
- package/examples/sound/sound.mp3 +0 -0
- package/examples/sound/speech_blue.mp3 +0 -0
- package/examples/sound/speech_green.mp3 +0 -0
- package/examples/sound/speech_joke.mp3 +0 -0
- package/examples/sound/speech_red.mp3 +0 -0
- package/examples/sound/tone.mp3 +0 -0
- package/examples/timeline-variables-sampling.html +0 -50
- package/examples/timeline-variables.html +0 -55
- package/examples/video/sample_video.mp4 +0 -0
- package/jspsych.js +0 -2796
- package/license.txt +0 -21
- package/mkdocs.yml +0 -104
- package/plugins/jspsych-animation.js +0 -189
- package/plugins/jspsych-audio-button-response.js +0 -247
- package/plugins/jspsych-audio-keyboard-response.js +0 -204
- package/plugins/jspsych-audio-slider-response.js +0 -262
- package/plugins/jspsych-call-function.js +0 -58
- package/plugins/jspsych-canvas-button-response.js +0 -199
- package/plugins/jspsych-canvas-keyboard-response.js +0 -155
- package/plugins/jspsych-canvas-slider-response.js +0 -207
- package/plugins/jspsych-categorize-animation.js +0 -266
- package/plugins/jspsych-categorize-html.js +0 -220
- package/plugins/jspsych-categorize-image.js +0 -222
- package/plugins/jspsych-cloze.js +0 -112
- package/plugins/jspsych-external-html.js +0 -112
- package/plugins/jspsych-free-sort.js +0 -444
- package/plugins/jspsych-fullscreen.js +0 -104
- package/plugins/jspsych-html-button-response.js +0 -188
- package/plugins/jspsych-html-keyboard-response.js +0 -149
- package/plugins/jspsych-html-slider-response.js +0 -202
- package/plugins/jspsych-iat-html.js +0 -284
- package/plugins/jspsych-iat-image.js +0 -286
- package/plugins/jspsych-image-button-response.js +0 -311
- package/plugins/jspsych-image-keyboard-response.js +0 -247
- package/plugins/jspsych-image-slider-response.js +0 -353
- package/plugins/jspsych-instructions.js +0 -237
- package/plugins/jspsych-maxdiff.js +0 -174
- package/plugins/jspsych-rdk.js +0 -1373
- package/plugins/jspsych-reconstruction.js +0 -134
- package/plugins/jspsych-resize.js +0 -166
- package/plugins/jspsych-same-different-html.js +0 -168
- package/plugins/jspsych-same-different-image.js +0 -169
- package/plugins/jspsych-serial-reaction-time-mouse.js +0 -213
- package/plugins/jspsych-serial-reaction-time.js +0 -247
- package/plugins/jspsych-survey-html-form.js +0 -171
- package/plugins/jspsych-survey-likert.js +0 -195
- package/plugins/jspsych-survey-multi-choice.js +0 -208
- package/plugins/jspsych-survey-multi-select.js +0 -232
- package/plugins/jspsych-survey-text.js +0 -185
- package/plugins/jspsych-video-button-response.js +0 -320
- package/plugins/jspsych-video-keyboard-response.js +0 -279
- package/plugins/jspsych-video-slider-response.js +0 -351
- package/plugins/jspsych-visual-search-circle.js +0 -259
- package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
- package/plugins/jspsych-vsl-grid-scene.js +0 -103
- package/plugins/template/jspsych-plugin-template.js +0 -35
- package/tests/README.md +0 -7
- package/tests/jsPsych/default-iti.test.js +0 -51
- package/tests/jsPsych/default-parameters.test.js +0 -58
- package/tests/jsPsych/endexperiment.test.js +0 -49
- package/tests/jsPsych/events.test.js +0 -369
- package/tests/jsPsych/init.test.js +0 -48
- package/tests/jsPsych/loads.test.js +0 -7
- package/tests/jsPsych/min-rt.test.js +0 -58
- package/tests/jsPsych/progressbar.test.js +0 -202
- package/tests/jsPsych/timeline-variables.test.js +0 -254
- package/tests/jsPsych/timelines.test.js +0 -498
- package/tests/jsPsych.data/datacollection.test.js +0 -116
- package/tests/jsPsych.data/datacolumn.test.js +0 -50
- package/tests/jsPsych.data/datamodule.test.js +0 -152
- package/tests/jsPsych.data/dataparameter.test.js +0 -251
- package/tests/jsPsych.data/interactions.test.js +0 -109
- package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -144
- package/tests/jsPsych.randomization/randomziation.test.js +0 -27
- package/tests/jsPsych.utils/utils.test.js +0 -58
- package/tests/media/blue.png +0 -0
- package/tests/media/orange.png +0 -0
- package/tests/media/sample_video.mp4 +0 -0
- package/tests/media/sound.mp3 +0 -0
- package/tests/plugins/plugin-animation.test.js +0 -35
- package/tests/plugins/plugin-audio-button-response.test.js +0 -15
- package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
- package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
- package/tests/plugins/plugin-call-function.test.js +0 -49
- package/tests/plugins/plugin-categorize-animation.test.js +0 -274
- package/tests/plugins/plugin-categorize-html.test.js +0 -17
- package/tests/plugins/plugin-categorize-image.test.js +0 -17
- package/tests/plugins/plugin-cloze.test.js +0 -140
- package/tests/plugins/plugin-free-sort.test.js +0 -112
- package/tests/plugins/plugin-fullscreen.test.js +0 -41
- package/tests/plugins/plugin-html-button-response.test.js +0 -161
- package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
- package/tests/plugins/plugin-html-slider-response.test.js +0 -155
- package/tests/plugins/plugin-iat-html.test.js +0 -328
- package/tests/plugins/plugin-iat-image.test.js +0 -308
- package/tests/plugins/plugin-image-button-response.test.js +0 -183
- package/tests/plugins/plugin-image-keyboard-response.test.js +0 -154
- package/tests/plugins/plugin-image-slider-response.test.js +0 -183
- package/tests/plugins/plugin-instructions.test.js +0 -66
- package/tests/plugins/plugin-maxdiff.test.js +0 -39
- package/tests/plugins/plugin-rdk.test.js +0 -17
- package/tests/plugins/plugin-reconstruction.test.js +0 -16
- package/tests/plugins/plugin-resize.test.js +0 -16
- package/tests/plugins/plugin-same-different-html.test.js +0 -17
- package/tests/plugins/plugin-same-different-image.test.js +0 -17
- package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
- package/tests/plugins/plugin-serial-reaction-time.test.js +0 -69
- package/tests/plugins/plugin-survey-html-form.test.js +0 -44
- package/tests/plugins/plugin-survey-likert.test.js +0 -48
- package/tests/plugins/plugin-survey-multi-choice.test.js +0 -48
- package/tests/plugins/plugin-survey-multi-select.test.js +0 -72
- package/tests/plugins/plugin-survey-text.test.js +0 -115
- package/tests/plugins/plugin-video-button-response.test.js +0 -35
- package/tests/plugins/plugin-video-keyboard-response.test.js +0 -35
- package/tests/plugins/plugin-video-slider-response.test.js +0 -34
- package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
- package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
- package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
- package/tests/testing-utils.js +0 -13
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-serial-reaction-time
|
|
3
|
-
* Josh de Leeuw
|
|
4
|
-
*
|
|
5
|
-
* plugin for running a serial reaction time task
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
**/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins["serial-reaction-time-mouse"] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
plugin.info = {
|
|
16
|
-
name: 'serial-reaction-time-mouse',
|
|
17
|
-
description: '',
|
|
18
|
-
parameters: {
|
|
19
|
-
target: {
|
|
20
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
21
|
-
pretty_name: 'Target',
|
|
22
|
-
array: true,
|
|
23
|
-
default: undefined,
|
|
24
|
-
description: 'The location of the target. The array should be the [row, column] of the target.'
|
|
25
|
-
},
|
|
26
|
-
grid: {
|
|
27
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
28
|
-
pretty_name: 'Grid',
|
|
29
|
-
array: true,
|
|
30
|
-
default: [[1,1,1,1]],
|
|
31
|
-
description: 'This array represents the grid of boxes shown on the screen.'
|
|
32
|
-
},
|
|
33
|
-
grid_square_size: {
|
|
34
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
35
|
-
pretty_name: 'Grid square size',
|
|
36
|
-
default: 100,
|
|
37
|
-
description: 'The width and height in pixels of each square in the grid.'
|
|
38
|
-
},
|
|
39
|
-
target_color: {
|
|
40
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
41
|
-
pretty_name: 'Target color',
|
|
42
|
-
default: "#999",
|
|
43
|
-
description: 'The color of the target square.'
|
|
44
|
-
},
|
|
45
|
-
response_ends_trial: {
|
|
46
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
47
|
-
pretty_name: 'Response ends trial',
|
|
48
|
-
default: true,
|
|
49
|
-
description: 'If true, the trial ends after a key press.'
|
|
50
|
-
},
|
|
51
|
-
pre_target_duration: {
|
|
52
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
53
|
-
pretty_name: 'Pre-target duration',
|
|
54
|
-
default: 0,
|
|
55
|
-
description: 'The number of milliseconds to display the grid before the target changes color.'
|
|
56
|
-
},
|
|
57
|
-
trial_duration: {
|
|
58
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
59
|
-
pretty_name: 'Trial duration',
|
|
60
|
-
default: null,
|
|
61
|
-
description: 'How long to show the trial'
|
|
62
|
-
},
|
|
63
|
-
fade_duration: {
|
|
64
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
65
|
-
pretty_name: 'Fade duration',
|
|
66
|
-
default: null,
|
|
67
|
-
description: 'If a positive number, the target will progressively change color at the start of the trial, with the transition lasting this many milliseconds.'
|
|
68
|
-
},
|
|
69
|
-
allow_nontarget_responses: {
|
|
70
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
71
|
-
pretty_name: 'Allow nontarget response',
|
|
72
|
-
default: false,
|
|
73
|
-
description: 'If true, then user can make nontarget response.'
|
|
74
|
-
},
|
|
75
|
-
prompt: {
|
|
76
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
77
|
-
pretty_name: 'Prompt',
|
|
78
|
-
default: null,
|
|
79
|
-
description: 'Any content here will be displayed below the stimulus'
|
|
80
|
-
},
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
plugin.trial = function(display_element, trial) {
|
|
85
|
-
|
|
86
|
-
var startTime = -1;
|
|
87
|
-
var response = {
|
|
88
|
-
rt: null,
|
|
89
|
-
row: null,
|
|
90
|
-
column: null
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// display stimulus
|
|
94
|
-
var stimulus = this.stimulus(trial.grid, trial.grid_square_size);
|
|
95
|
-
display_element.innerHTML = stimulus;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if(trial.pre_target_duration <= 0){
|
|
99
|
-
showTarget();
|
|
100
|
-
} else {
|
|
101
|
-
jsPsych.pluginAPI.setTimeout(function(){
|
|
102
|
-
showTarget();
|
|
103
|
-
}, trial.pre_target_duration);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
//show prompt if there is one
|
|
107
|
-
if (trial.prompt !== null) {
|
|
108
|
-
display_element.insertAdjacentHTML('beforeend', trial.prompt);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function showTarget(){
|
|
112
|
-
var resp_targets;
|
|
113
|
-
if(!trial.allow_nontarget_responses){
|
|
114
|
-
resp_targets = [display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1])]
|
|
115
|
-
} else {
|
|
116
|
-
resp_targets = display_element.querySelectorAll('.jspsych-serial-reaction-time-stimulus-cell');
|
|
117
|
-
}
|
|
118
|
-
for(var i=0; i<resp_targets.length; i++){
|
|
119
|
-
resp_targets[i].addEventListener('mousedown', function(e){
|
|
120
|
-
if(startTime == -1){
|
|
121
|
-
return;
|
|
122
|
-
} else {
|
|
123
|
-
var info = {}
|
|
124
|
-
info.row = e.currentTarget.getAttribute('data-row');
|
|
125
|
-
info.column = e.currentTarget.getAttribute('data-column');
|
|
126
|
-
info.rt = performance.now() - startTime;
|
|
127
|
-
after_response(info);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
startTime = performance.now();
|
|
133
|
-
|
|
134
|
-
if(trial.fade_duration == null){
|
|
135
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.backgroundColor = trial.target_color;
|
|
136
|
-
} else {
|
|
137
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.transition = "background-color "+trial.fade_duration;
|
|
138
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.backgroundColor = trial.target_color;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if(trial.trial_duration !== null){
|
|
142
|
-
jsPsych.pluginAPI.setTimeout(endTrial, trial.trial_duration);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function endTrial() {
|
|
148
|
-
|
|
149
|
-
// kill any remaining setTimeout handlers
|
|
150
|
-
jsPsych.pluginAPI.clearAllTimeouts();
|
|
151
|
-
|
|
152
|
-
// gather the data to store for the trial
|
|
153
|
-
var trial_data = {
|
|
154
|
-
"rt": response.rt,
|
|
155
|
-
"grid": JSON.stringify(trial.grid),
|
|
156
|
-
"target": JSON.stringify(trial.target),
|
|
157
|
-
"response_row": response.row,
|
|
158
|
-
"response_column": response.column,
|
|
159
|
-
"correct": response.row == trial.target[0] && response.column == trial.target[1]
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
// clear the display
|
|
163
|
-
display_element.innerHTML = '';
|
|
164
|
-
|
|
165
|
-
// move on to the next trial
|
|
166
|
-
jsPsych.finishTrial(trial_data);
|
|
167
|
-
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
// function to handle responses by the subject
|
|
171
|
-
function after_response(info) {
|
|
172
|
-
|
|
173
|
-
// only record first response
|
|
174
|
-
response = response.rt == null ? info : response;
|
|
175
|
-
|
|
176
|
-
if (trial.response_ends_trial) {
|
|
177
|
-
endTrial();
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
plugin.stimulus = function(grid, square_size, target, target_color, labels) {
|
|
184
|
-
var stimulus = "<div id='jspsych-serial-reaction-time-stimulus' style='margin:auto; display: table; table-layout: fixed; border-spacing:"+square_size/4+"px'>";
|
|
185
|
-
for(var i=0; i<grid.length; i++){
|
|
186
|
-
stimulus += "<div class='jspsych-serial-reaction-time-stimulus-row' style='display:table-row;'>";
|
|
187
|
-
for(var j=0; j<grid[i].length; j++){
|
|
188
|
-
var classname = 'jspsych-serial-reaction-time-stimulus-cell';
|
|
189
|
-
|
|
190
|
-
stimulus += "<div class='"+classname+"' id='jspsych-serial-reaction-time-stimulus-cell-"+i+"-"+j+"' "+
|
|
191
|
-
"data-row="+i+" data-column="+j+" "+
|
|
192
|
-
"style='width:"+square_size+"px; height:"+square_size+"px; display:table-cell; vertical-align:middle; text-align: center; cursor: pointer; font-size:"+square_size/2+"px;";
|
|
193
|
-
if(grid[i][j] == 1){
|
|
194
|
-
stimulus += "border: 2px solid black;"
|
|
195
|
-
}
|
|
196
|
-
if(typeof target !== 'undefined' && target[0] == i && target[1] == j){
|
|
197
|
-
stimulus += "background-color: "+target_color+";"
|
|
198
|
-
}
|
|
199
|
-
stimulus += "'>";
|
|
200
|
-
if(typeof labels !=='undefined' && labels[i][j] !== false){
|
|
201
|
-
stimulus += labels[i][j]
|
|
202
|
-
}
|
|
203
|
-
stimulus += "</div>";
|
|
204
|
-
}
|
|
205
|
-
stimulus += "</div>";
|
|
206
|
-
}
|
|
207
|
-
stimulus += "</div>";
|
|
208
|
-
|
|
209
|
-
return stimulus
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return plugin;
|
|
213
|
-
})();
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-serial-reaction-time
|
|
3
|
-
* Josh de Leeuw
|
|
4
|
-
*
|
|
5
|
-
* plugin for running a serial reaction time task
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
**/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins["serial-reaction-time"] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
plugin.info = {
|
|
16
|
-
name: 'serial-reaction-time',
|
|
17
|
-
description: '',
|
|
18
|
-
parameters: {
|
|
19
|
-
grid: {
|
|
20
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
21
|
-
pretty_name: 'Grid',
|
|
22
|
-
array: true,
|
|
23
|
-
default: [[1,1,1,1]],
|
|
24
|
-
description: 'This array represents the grid of boxes shown on the screen.'
|
|
25
|
-
},
|
|
26
|
-
target: {
|
|
27
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
28
|
-
pretty_name: 'Target',
|
|
29
|
-
array: true,
|
|
30
|
-
default: undefined,
|
|
31
|
-
description: 'The location of the target. The array should be the [row, column] of the target.'
|
|
32
|
-
},
|
|
33
|
-
choices: {
|
|
34
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
35
|
-
pretty_name: 'Choices',
|
|
36
|
-
array: true,
|
|
37
|
-
default: [['3','5','7','9']],
|
|
38
|
-
description: ' Each entry in this array is the key that should be pressed for that corresponding location in the grid.'
|
|
39
|
-
},
|
|
40
|
-
grid_square_size: {
|
|
41
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
42
|
-
pretty_name: 'Grid square size',
|
|
43
|
-
default: 100,
|
|
44
|
-
description: 'The width and height in pixels of each square in the grid.'
|
|
45
|
-
},
|
|
46
|
-
target_color: {
|
|
47
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
48
|
-
pretty_name: 'Target color',
|
|
49
|
-
default: "#999",
|
|
50
|
-
description: 'The color of the target square.'
|
|
51
|
-
},
|
|
52
|
-
response_ends_trial: {
|
|
53
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
54
|
-
pretty_name: 'Response ends trial',
|
|
55
|
-
default: true,
|
|
56
|
-
description: 'If true, trial ends when user makes a response.'
|
|
57
|
-
},
|
|
58
|
-
pre_target_duration: {
|
|
59
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
60
|
-
pretty_name: 'Pre-target duration',
|
|
61
|
-
default: 0,
|
|
62
|
-
description: 'The number of milliseconds to display the grid before the target changes color.'
|
|
63
|
-
},
|
|
64
|
-
trial_duration: {
|
|
65
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
66
|
-
pretty_name: 'Trial duration',
|
|
67
|
-
default: null,
|
|
68
|
-
description: 'How long to show the trial.'
|
|
69
|
-
},
|
|
70
|
-
show_response_feedback: {
|
|
71
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
72
|
-
pretty_name: 'Show response feedback',
|
|
73
|
-
default: false,
|
|
74
|
-
description: 'If true, show feedback indicating where the user responded and whether it was correct.'
|
|
75
|
-
},
|
|
76
|
-
feedback_duration: {
|
|
77
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
78
|
-
pretty_name: 'Feedback duration',
|
|
79
|
-
default: 200,
|
|
80
|
-
description: 'The length of time in milliseconds to show the feedback.'
|
|
81
|
-
},
|
|
82
|
-
fade_duration: {
|
|
83
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
84
|
-
pretty_name: 'Fade duration',
|
|
85
|
-
default: null,
|
|
86
|
-
description: 'If a positive number, the target will progressively change color at the start of the trial, with the transition lasting this many milliseconds.'
|
|
87
|
-
},
|
|
88
|
-
prompt: {
|
|
89
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
90
|
-
pretty_name: 'Prompt',
|
|
91
|
-
default: null,
|
|
92
|
-
no_function: false,
|
|
93
|
-
description: ' Any content here will be displayed below the stimulus.'
|
|
94
|
-
},
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
plugin.trial = function(display_element, trial) {
|
|
99
|
-
|
|
100
|
-
// create a flattened version of the choices array
|
|
101
|
-
var flat_choices = jsPsych.utils.flatten(trial.choices);
|
|
102
|
-
while(flat_choices.indexOf('') > -1){
|
|
103
|
-
flat_choices.splice(flat_choices.indexOf(''),1);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// display stimulus
|
|
107
|
-
var stimulus = this.stimulus(trial.grid, trial.grid_square_size);
|
|
108
|
-
display_element.innerHTML = stimulus;
|
|
109
|
-
|
|
110
|
-
if(trial.pre_target_duration <= 0){
|
|
111
|
-
showTarget();
|
|
112
|
-
} else {
|
|
113
|
-
jsPsych.pluginAPI.setTimeout(function(){
|
|
114
|
-
showTarget();
|
|
115
|
-
}, trial.pre_target_duration);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
//show prompt if there is one
|
|
119
|
-
if (trial.prompt !== null) {
|
|
120
|
-
display_element.innerHTML += trial.prompt;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
var keyboardListener = {};
|
|
124
|
-
|
|
125
|
-
var response = {
|
|
126
|
-
rt: null,
|
|
127
|
-
key: false,
|
|
128
|
-
correct: false
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function showTarget(){
|
|
132
|
-
if(trial.fade_duration == null){
|
|
133
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.backgroundColor = trial.target_color;
|
|
134
|
-
} else {
|
|
135
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.transition = "background-color "+trial.fade_duration;
|
|
136
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+trial.target[0]+'-'+trial.target[1]).style.backgroundColor = trial.target_color;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
keyboardListener = jsPsych.pluginAPI.getKeyboardResponse({
|
|
140
|
-
callback_function: after_response,
|
|
141
|
-
valid_responses: flat_choices,
|
|
142
|
-
allow_held_key: false
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
if(trial.trial_duration > null){
|
|
146
|
-
jsPsych.pluginAPI.setTimeout(showFeedback, trial.trial_duration);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function showFeedback() {
|
|
152
|
-
if(response.rt == null || trial.show_response_feedback == false){
|
|
153
|
-
endTrial();
|
|
154
|
-
} else {
|
|
155
|
-
var color = response.correct ? '#0f0' : '#f00';
|
|
156
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+response.responseLoc[0]+'-'+response.responseLoc[1]).style.transition = "";
|
|
157
|
-
display_element.querySelector('#jspsych-serial-reaction-time-stimulus-cell-'+response.responseLoc[0]+'-'+response.responseLoc[1]).style.backgroundColor = color;
|
|
158
|
-
jsPsych.pluginAPI.setTimeout(endTrial, trial.feedback_duration);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function endTrial() {
|
|
163
|
-
|
|
164
|
-
// kill any remaining setTimeout handlers
|
|
165
|
-
jsPsych.pluginAPI.clearAllTimeouts();
|
|
166
|
-
|
|
167
|
-
// kill keyboard listeners
|
|
168
|
-
if (typeof keyboardListener !== 'undefined') {
|
|
169
|
-
jsPsych.pluginAPI.cancelKeyboardResponse(keyboardListener);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// gather the data to store for the trial
|
|
173
|
-
var trial_data = {
|
|
174
|
-
"rt": response.rt,
|
|
175
|
-
"key_press": response.key,
|
|
176
|
-
"correct": response.correct,
|
|
177
|
-
"grid": JSON.stringify(trial.grid),
|
|
178
|
-
"target": JSON.stringify(trial.target)
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
// clear the display
|
|
182
|
-
display_element.innerHTML = '';
|
|
183
|
-
|
|
184
|
-
// move on to the next trial
|
|
185
|
-
jsPsych.finishTrial(trial_data);
|
|
186
|
-
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
// function to handle responses by the subject
|
|
190
|
-
function after_response(info) {
|
|
191
|
-
|
|
192
|
-
// only record first response
|
|
193
|
-
response = response.rt == null ? info : response;
|
|
194
|
-
|
|
195
|
-
// check if the response is correct
|
|
196
|
-
var responseLoc = [];
|
|
197
|
-
for(var i=0; i<trial.choices.length; i++){
|
|
198
|
-
for(var j=0; j<trial.choices[i].length; j++){
|
|
199
|
-
var t = typeof trial.choices[i][j] == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.choices[i][j]) : trial.choices[i][j];
|
|
200
|
-
if(info.key == t){
|
|
201
|
-
responseLoc = [i,j];
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
response.responseLoc = responseLoc;
|
|
207
|
-
response.correct = (JSON.stringify(responseLoc) == JSON.stringify(trial.target));
|
|
208
|
-
|
|
209
|
-
if (trial.response_ends_trial) {
|
|
210
|
-
if (trial.show_response_feedback){
|
|
211
|
-
showFeedback(response.correct);
|
|
212
|
-
} else {
|
|
213
|
-
endTrial();
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
plugin.stimulus = function(grid, square_size, target, target_color, labels) {
|
|
221
|
-
var stimulus = "<div id='jspsych-serial-reaction-time-stimulus' style='margin:auto; display: table; table-layout: fixed; border-spacing:"+square_size/4+"px'>";
|
|
222
|
-
for(var i=0; i<grid.length; i++){
|
|
223
|
-
stimulus += "<div class='jspsych-serial-reaction-time-stimulus-row' style='display:table-row;'>";
|
|
224
|
-
for(var j=0; j<grid[i].length; j++){
|
|
225
|
-
stimulus += "<div class='jspsych-serial-reaction-time-stimulus-cell' id='jspsych-serial-reaction-time-stimulus-cell-"+i+"-"+j+"' "+
|
|
226
|
-
"style='width:"+square_size+"px; height:"+square_size+"px; display:table-cell; vertical-align:middle; text-align: center; font-size:"+square_size/2+"px;";
|
|
227
|
-
if(grid[i][j] == 1){
|
|
228
|
-
stimulus += "border: 2px solid black;"
|
|
229
|
-
}
|
|
230
|
-
if(typeof target !== 'undefined' && target[0] == i && target[1] == j){
|
|
231
|
-
stimulus += "background-color: "+target_color+";"
|
|
232
|
-
}
|
|
233
|
-
stimulus += "'>";
|
|
234
|
-
if(typeof labels !=='undefined' && labels[i][j] !== false){
|
|
235
|
-
stimulus += labels[i][j]
|
|
236
|
-
}
|
|
237
|
-
stimulus += "</div>";
|
|
238
|
-
}
|
|
239
|
-
stimulus += "</div>";
|
|
240
|
-
}
|
|
241
|
-
stimulus += "</div>";
|
|
242
|
-
|
|
243
|
-
return stimulus
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return plugin;
|
|
247
|
-
})();
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-survey-html-form
|
|
3
|
-
* a jspsych plugin for free html forms
|
|
4
|
-
*
|
|
5
|
-
* Jan Simson
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins['survey-html-form'] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
plugin.info = {
|
|
16
|
-
name: 'survey-html-form',
|
|
17
|
-
description: '',
|
|
18
|
-
parameters: {
|
|
19
|
-
html: {
|
|
20
|
-
type: jsPsych.plugins.parameterType.HTML_STRING,
|
|
21
|
-
pretty_name: 'HTML',
|
|
22
|
-
default: null,
|
|
23
|
-
description: 'HTML formatted string containing all the input elements to display. Every element has to have its own distinctive name attribute. The <form> tag must not be included and is generated by the plugin.'
|
|
24
|
-
},
|
|
25
|
-
preamble: {
|
|
26
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
27
|
-
pretty_name: 'Preamble',
|
|
28
|
-
default: null,
|
|
29
|
-
description: 'HTML formatted string to display at the top of the page above all the questions.'
|
|
30
|
-
},
|
|
31
|
-
button_label: {
|
|
32
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
33
|
-
pretty_name: 'Button label',
|
|
34
|
-
default: 'Continue',
|
|
35
|
-
description: 'The text that appears on the button to finish the trial.'
|
|
36
|
-
},
|
|
37
|
-
autofocus: {
|
|
38
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
39
|
-
pretty_name: 'Element ID to focus',
|
|
40
|
-
default: '',
|
|
41
|
-
description: 'The HTML element ID of a form field to autofocus on.'
|
|
42
|
-
},
|
|
43
|
-
dataAsArray: {
|
|
44
|
-
type: jsPsych.plugins.parameterType.BOOLEAN,
|
|
45
|
-
pretty_name: 'Data As Array',
|
|
46
|
-
default: false,
|
|
47
|
-
description: 'Retrieve the data as an array e.g. [{name: "INPUT_NAME", value: "INPUT_VALUE"}, ...] instead of an object e.g. {INPUT_NAME: INPUT_VALUE, ...}.'
|
|
48
|
-
},
|
|
49
|
-
autocomplete: {
|
|
50
|
-
type: jsPsych.plugins.parameterType.BOOL,
|
|
51
|
-
pretty_name: 'Allow autocomplete',
|
|
52
|
-
default: false,
|
|
53
|
-
description: "Setting this to true will enable browser auto-complete or auto-fill for the form."
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
plugin.trial = function(display_element, trial) {
|
|
59
|
-
|
|
60
|
-
var html = '';
|
|
61
|
-
// show preamble text
|
|
62
|
-
if(trial.preamble !== null){
|
|
63
|
-
html += '<div id="jspsych-survey-html-form-preamble" class="jspsych-survey-html-form-preamble">'+trial.preamble+'</div>';
|
|
64
|
-
}
|
|
65
|
-
// start form
|
|
66
|
-
if ( trial.autocomplete ) {
|
|
67
|
-
html += '<form id="jspsych-survey-html-form">'
|
|
68
|
-
} else {
|
|
69
|
-
html += '<form id="jspsych-survey-html-form" autocomplete="off">'
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// add form HTML / input elements
|
|
73
|
-
html += trial.html;
|
|
74
|
-
|
|
75
|
-
// add submit button
|
|
76
|
-
html += '<input type="submit" id="jspsych-survey-html-form-next" class="jspsych-btn jspsych-survey-html-form" value="'+trial.button_label+'"></input>';
|
|
77
|
-
|
|
78
|
-
html += '</form>';
|
|
79
|
-
display_element.innerHTML = html;
|
|
80
|
-
|
|
81
|
-
if ( trial.autofocus !== '' ) {
|
|
82
|
-
var focus_elements = display_element.querySelectorAll('#'+trial.autofocus);
|
|
83
|
-
if ( focus_elements.length === 0 ) {
|
|
84
|
-
console.warn('No element found with id: '+trial.autofocus);
|
|
85
|
-
} else if ( focus_elements.length > 1 ) {
|
|
86
|
-
console.warn('The id "'+trial.autofocus+'" is not unique so autofocus will not work.');
|
|
87
|
-
} else {
|
|
88
|
-
focus_elements[0].focus();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
display_element.querySelector('#jspsych-survey-html-form').addEventListener('submit', function(event) {
|
|
93
|
-
// don't submit form
|
|
94
|
-
event.preventDefault();
|
|
95
|
-
|
|
96
|
-
// measure response time
|
|
97
|
-
var endTime = performance.now();
|
|
98
|
-
var response_time = endTime - startTime;
|
|
99
|
-
|
|
100
|
-
var question_data = serializeArray(this);
|
|
101
|
-
|
|
102
|
-
if (!trial.dataAsArray) {
|
|
103
|
-
question_data = objectifyForm(question_data);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// save data
|
|
107
|
-
var trialdata = {
|
|
108
|
-
"rt": response_time,
|
|
109
|
-
"responses": JSON.stringify(question_data)
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
display_element.innerHTML = '';
|
|
113
|
-
|
|
114
|
-
// next trial
|
|
115
|
-
jsPsych.finishTrial(trialdata);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
var startTime = performance.now();
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
/*!
|
|
122
|
-
* Serialize all form data into an array
|
|
123
|
-
* (c) 2018 Chris Ferdinandi, MIT License, https://gomakethings.com
|
|
124
|
-
* @param {Node} form The form to serialize
|
|
125
|
-
* @return {String} The serialized form data
|
|
126
|
-
*/
|
|
127
|
-
var serializeArray = function (form) {
|
|
128
|
-
// Setup our serialized data
|
|
129
|
-
var serialized = [];
|
|
130
|
-
|
|
131
|
-
// Loop through each field in the form
|
|
132
|
-
for (var i = 0; i < form.elements.length; i++) {
|
|
133
|
-
var field = form.elements[i];
|
|
134
|
-
|
|
135
|
-
// Don't serialize fields without a name, submits, buttons, file and reset inputs, and disabled fields
|
|
136
|
-
if (!field.name || field.disabled || field.type === 'file' || field.type === 'reset' || field.type === 'submit' || field.type === 'button') continue;
|
|
137
|
-
|
|
138
|
-
// If a multi-select, get all selections
|
|
139
|
-
if (field.type === 'select-multiple') {
|
|
140
|
-
for (var n = 0; n < field.options.length; n++) {
|
|
141
|
-
if (!field.options[n].selected) continue;
|
|
142
|
-
serialized.push({
|
|
143
|
-
name: field.name,
|
|
144
|
-
value: field.options[n].value
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Convert field data to a query string
|
|
150
|
-
else if ((field.type !== 'checkbox' && field.type !== 'radio') || field.checked) {
|
|
151
|
-
serialized.push({
|
|
152
|
-
name: field.name,
|
|
153
|
-
value: field.value
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return serialized;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
// from https://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery
|
|
162
|
-
function objectifyForm(formArray) {//serialize data function
|
|
163
|
-
var returnArray = {};
|
|
164
|
-
for (var i = 0; i < formArray.length; i++){
|
|
165
|
-
returnArray[formArray[i]['name']] = formArray[i]['value'];
|
|
166
|
-
}
|
|
167
|
-
return returnArray;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return plugin;
|
|
171
|
-
})();
|