jspsych 6.3.0 → 7.1.1
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 +36 -37
- 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 -734
- package/docs/core_library/jspsych-data.md +0 -589
- package/docs/core_library/jspsych-pluginAPI.md +0 -610
- package/docs/core_library/jspsych-randomization.md +0 -397
- package/docs/core_library/jspsych-turk.md +0 -102
- package/docs/extensions/extensions.md +0 -83
- package/docs/extensions/jspsych-ext-webgazer.md +0 -106
- package/docs/img/blue.png +0 -0
- package/docs/img/devtools-change-css.png +0 -0
- package/docs/img/devtools-css-errors.png +0 -0
- package/docs/img/devtools-inspect-element.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/prolific-study-completion.png +0 -0
- package/docs/img/prolific-study-link.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 -184
- package/docs/overview/data.md +0 -281
- package/docs/overview/dynamic-parameters.md +0 -147
- package/docs/overview/exclude-browser.md +0 -32
- package/docs/overview/experiment-options.md +0 -149
- package/docs/overview/eye-tracking.md +0 -237
- package/docs/overview/fullscreen.md +0 -36
- package/docs/overview/media-preloading.md +0 -369
- package/docs/overview/mturk.md +0 -77
- package/docs/overview/plugins.md +0 -320
- package/docs/overview/progress-bar.md +0 -110
- package/docs/overview/prolific.md +0 -78
- package/docs/overview/record-browser-interactions.md +0 -23
- package/docs/overview/running-experiments.md +0 -95
- package/docs/overview/style.md +0 -293
- package/docs/overview/timeline.md +0 -457
- 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 -53
- 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 -56
- 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 -48
- package/docs/plugins/jspsych-image-keyboard-response.md +0 -58
- package/docs/plugins/jspsych-image-slider-response.md +0 -54
- package/docs/plugins/jspsych-instructions.md +0 -58
- package/docs/plugins/jspsych-maxdiff.md +0 -41
- package/docs/plugins/jspsych-preload.md +0 -128
- 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 -52
- 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 -54
- package/docs/plugins/jspsych-video-keyboard-response.md +0 -50
- package/docs/plugins/jspsych-video-slider-response.md +0 -60
- package/docs/plugins/jspsych-virtual-chinrest.md +0 -105
- 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/jspsych-webgazer-calibrate.md +0 -60
- package/docs/plugins/jspsych-webgazer-init-camera.md +0 -31
- package/docs/plugins/jspsych-webgazer-validate.md +0 -43
- package/docs/plugins/list-of-plugins.md +0 -54
- package/docs/tutorials/hello-world.md +0 -162
- package/docs/tutorials/rt-task.md +0 -1334
- package/docs/tutorials/video-tutorials.md +0 -11
- package/examples/add-to-end-of-timeline.html +0 -38
- package/examples/case-sensitive-responses.html +0 -45
- package/examples/conditional-and-loop-functions.html +0 -64
- package/examples/css/jquery-ui.css +0 -1225
- package/examples/css-classes-parameter.html +0 -145
- package/examples/data-add-properties.html +0 -44
- package/examples/data-as-function.html +0 -39
- package/examples/data-from-timeline.html +0 -52
- package/examples/data-from-url.html +0 -21
- package/examples/demo-flanker.html +0 -117
- package/examples/demo-simple-rt-task.html +0 -120
- package/examples/demos/demo_1.html +0 -35
- package/examples/demos/demo_2.html +0 -50
- package/examples/demos/demo_3.html +0 -63
- package/examples/display-element-to-embed-experiment.html +0 -79
- package/examples/end-active-node.html +0 -52
- package/examples/end-experiment.html +0 -45
- 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/card.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/js/webgazer.js +0 -88886
- package/examples/jspsych-RDK.html +0 -58
- package/examples/jspsych-animation.html +0 -39
- package/examples/jspsych-audio-button-response.html +0 -58
- package/examples/jspsych-audio-keyboard-response.html +0 -68
- package/examples/jspsych-audio-slider-response.html +0 -61
- 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 -49
- package/examples/jspsych-categorize-html.html +0 -33
- package/examples/jspsych-categorize-image.html +0 -44
- package/examples/jspsych-cloze.html +0 -37
- package/examples/jspsych-free-sort.html +0 -109
- package/examples/jspsych-fullscreen.html +0 -45
- package/examples/jspsych-html-button-response.html +0 -43
- package/examples/jspsych-html-keyboard-response.html +0 -42
- package/examples/jspsych-html-slider-response.html +0 -53
- package/examples/jspsych-iat.html +0 -520
- package/examples/jspsych-image-button-response.html +0 -91
- package/examples/jspsych-image-keyboard-response.html +0 -85
- package/examples/jspsych-image-slider-response.html +0 -85
- package/examples/jspsych-instructions.html +0 -37
- package/examples/jspsych-maxdiff.html +0 -33
- package/examples/jspsych-preload.html +0 -140
- 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 -39
- 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 -65
- package/examples/jspsych-video-keyboard-response.html +0 -61
- package/examples/jspsych-video-slider-response.html +0 -63
- package/examples/jspsych-virtual-chinrest.html +0 -69
- package/examples/jspsych-visual-search-circle.html +0 -64
- package/examples/jspsych-vsl-animate-occlusion.html +0 -35
- package/examples/jspsych-vsl-grid-scene.html +0 -47
- package/examples/lexical-decision.html +0 -134
- package/examples/manual-preloading.html +0 -59
- package/examples/pause-unpause.html +0 -33
- package/examples/progress-bar.html +0 -68
- package/examples/save-trial-parameters.html +0 -98
- 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 -64
- package/examples/video/sample_video.mp4 +0 -0
- package/examples/webgazer.html +0 -162
- package/examples/webgazer_image.html +0 -60
- package/extensions/jspsych-ext-webgazer.js +0 -185
- package/jspsych.js +0 -3015
- package/license.txt +0 -21
- package/mkdocs.yml +0 -118
- package/plugins/jspsych-animation.js +0 -189
- package/plugins/jspsych-audio-button-response.js +0 -269
- package/plugins/jspsych-audio-keyboard-response.js +0 -212
- package/plugins/jspsych-audio-slider-response.js +0 -278
- 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 -478
- package/plugins/jspsych-fullscreen.js +0 -106
- 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 -327
- package/plugins/jspsych-image-keyboard-response.js +0 -263
- package/plugins/jspsych-image-slider-response.js +0 -369
- package/plugins/jspsych-instructions.js +0 -237
- package/plugins/jspsych-maxdiff.js +0 -173
- package/plugins/jspsych-preload.js +0 -345
- 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 -212
- 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 -335
- package/plugins/jspsych-video-keyboard-response.js +0 -279
- package/plugins/jspsych-video-slider-response.js +0 -351
- package/plugins/jspsych-virtual-chinrest.js +0 -471
- 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/jspsych-webgazer-calibrate.js +0 -166
- package/plugins/jspsych-webgazer-init-camera.js +0 -95
- package/plugins/jspsych-webgazer-validate.js +0 -304
- package/plugins/template/jspsych-plugin-template.js +0 -35
- package/tests/README.md +0 -7
- package/tests/jsPsych/case-sensitive-responses.test.js +0 -53
- package/tests/jsPsych/css-classes-parameter.test.js +0 -107
- 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 -606
- package/tests/jsPsych/functions-as-parameters.test.js +0 -210
- 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 -531
- package/tests/jsPsych/timelines.test.js +0 -569
- package/tests/jsPsych.data/data-csv-conversion.test.js +0 -85
- package/tests/jsPsych.data/data-json-conversion.test.js +0 -120
- package/tests/jsPsych.data/datacollection.test.js +0 -117
- 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.data/trialparameters.test.js +0 -175
- package/tests/jsPsych.extensions/extensions.test.js +0 -207
- package/tests/jsPsych.extensions/test-extension.js +0 -42
- package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -341
- package/tests/jsPsych.pluginAPI/preloads.test.js +0 -43
- package/tests/jsPsych.randomization/randomziation.test.js +0 -27
- package/tests/jsPsych.utils/utils.test.js +0 -58
- package/tests/plugins/plugin-animation.test.js +0 -34
- 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 -263
- 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 -157
- package/tests/plugins/plugin-free-sort.test.js +0 -106
- 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 -299
- package/tests/plugins/plugin-iat-image.test.js +0 -298
- package/tests/plugins/plugin-image-button-response.test.js +0 -174
- package/tests/plugins/plugin-image-keyboard-response.test.js +0 -147
- package/tests/plugins/plugin-image-slider-response.test.js +0 -174
- package/tests/plugins/plugin-instructions.test.js +0 -85
- package/tests/plugins/plugin-maxdiff.test.js +0 -39
- package/tests/plugins/plugin-preload.test.js +0 -916
- package/tests/plugins/plugin-rdk.test.js +0 -61
- 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 -109
- 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 -47
- package/tests/plugins/plugin-survey-multi-select.test.js +0 -71
- package/tests/plugins/plugin-survey-text.test.js +0 -115
- package/tests/plugins/plugin-video-button-response.test.js +0 -32
- package/tests/plugins/plugin-video-keyboard-response.test.js +0 -32
- package/tests/plugins/plugin-video-slider-response.test.js +0 -31
- 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
package/README.md
CHANGED
|
@@ -1,63 +1,62 @@
|
|
|
1
|
-

|
|
1
|
+

|
|
2
2
|
|
|
3
|
-
jsPsych is a JavaScript
|
|
3
|
+
jsPsych is a JavaScript framework for creating behavioral experiments that run in a web browser.
|
|
4
4
|
|
|
5
|
-
jsPsych
|
|
5
|
+
Experiments in jsPsych are created using [plugins](https://www.jspsych.org/latest/overview/plugins).
|
|
6
|
+
Each plugin defines different kinds of events, like showing an image on the screen, and collects different kinds of data, like recording which key was pressed at which time.
|
|
7
|
+
By assembling different plugins together into [a timeline](https://www.jspsych.org/latest/overview/timeline), it is possible to create a wide range of online experiments.
|
|
6
8
|
|
|
7
9
|
## What can I do with jsPsych?
|
|
8
10
|
|
|
9
|
-
jsPsych comes with a number of plugins that you can use create tasks and collect data.
|
|
11
|
+
jsPsych comes with a number of plugins that you can use create tasks and collect data.
|
|
12
|
+
Some plugins do general things, like present a stimulus (text, image, audio, video) and record a key press or button response along with a response time.
|
|
13
|
+
Other plugins do more specific things, like show a set of instructions pages, run a drag-and-drop image sorting task, or calibrate the WebGazer eye-tracking extension.
|
|
14
|
+
See the [list of all plugins](https://www.jspsych.org/latest/plugins/list-of-plugins/) to see what each plugin can do.
|
|
10
15
|
|
|
11
|
-
Often people can create their experiment by combining these plugins together.
|
|
16
|
+
Often people can create their experiment by combining these plugins together.
|
|
17
|
+
But if that's not possible for your experiment, you can also modify a plugin file or [create your own plugin](https://www.jspsych.org/latest/developers/plugin-development).
|
|
18
|
+
This gives you the flexibility to do exactly what you want, while still taking advantage of jsPsych's general experiment-building framework.
|
|
19
|
+
The plugin template is *extremely* flexible. If a task is possible to do in a web browser, you can almost certainly implement it as a plugin.
|
|
12
20
|
|
|
13
|
-
Getting started
|
|
14
|
-
---------------
|
|
21
|
+
## Getting started
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
jsPsych can be loaded into a project in a variety of ways, including via CDNs and through NPM.
|
|
24
|
+
You can learn more about setting up a project by following the [hello world tutorial](https://www.jspsych.org/latest/tutorials/hello-world/) on the jsPsych website.
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
Once you've got a project set up, the [reaction time task tutorial](https://www.jspsych.org/latest/tutorials/rt-task/) is a great next step, since it covers many core topics and features.
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
----------
|
|
28
|
+
There are also a number of [video tutorials](https://www.jspsych.org/latest/tutorials/video-tutorials) available on the website.
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
## Examples
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
Several example experiments and plugin demonstrations are available in the `/examples` folder.
|
|
33
|
+
After you've downloaded the [latest release](https://github.com/jspsych/jsPsych/releases), double-click on an example HTML file to run it in your web browser, and open it with a programming-friendly text editor to see how it works.
|
|
27
34
|
|
|
28
|
-
Documentation
|
|
35
|
+
## Documentation
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
----------
|
|
37
|
+
Documentation is available at [https://www.jspsych.org](https://www.jspsych.org/).
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
## Getting help
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
For questions about using the library, please use the GitHub [discussions forum](https://github.com/jspsych/jsPsych/discussions).
|
|
42
|
+
You can also browse through the history of Q&A on the forum to find related questions.
|
|
37
43
|
|
|
38
|
-
|
|
44
|
+
## Contributing
|
|
39
45
|
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
We :heart: contributions!
|
|
47
|
+
See the [contributing to jsPsych](https://www.jspsych.org/latest/developers/contributing/) documentation page for more information about how you can help.
|
|
48
|
+
|
|
49
|
+
## Citation
|
|
42
50
|
|
|
43
51
|
If you use this library in academic work, please cite the [paper that describes jsPsych](http://link.springer.com/article/10.3758%2Fs13428-014-0458-y):
|
|
44
52
|
|
|
45
53
|
de Leeuw, J.R. (2015). jsPsych: A JavaScript library for creating behavioral experiments in a Web browser. *Behavior Research Methods*, _47_(1), 1-12. doi:10.3758/s13428-014-0458-y
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
--------------
|
|
49
|
-
|
|
50
|
-
Wondering if jsPsych can be used for research that depends on accurate response time measurement? For most purposes, the answer is yes. Response time measurements in jsPsych (and JavaScript in general) are comparable to those taken in standard lab software like Psychophysics Toolbox and E-Prime. Response times measured in JavaScript tend to be a little bit longer (10-40ms), but have similar variance. See the following references for extensive work on this topic.
|
|
51
|
-
|
|
52
|
-
* [de Leeuw, J. R., & Motz, B. A. (2016). Psychophysics in a Web browser? Comparing response times collected with JavaScript and Psychophysics Toolbox in a visual search task. *Behavior Research Methods*, *48*(1), 1-12.](http://link.springer.com/article/10.3758%2Fs13428-015-0567-2)
|
|
53
|
-
* [Hilbig, B. E. (2016). Reaction time effects in lab- versus web-based research: Experimental evidence. *Behavior Research Methods*, *48*(4), 1718-1724.](http://dx.doi.org/10.3758/s13428-015-0678-9)
|
|
54
|
-
* [Pinet, S., Zielinski, C., Mathôt, S. et al. (2017). Measuring sequences of keystrokes with jsPsych: Reliability of response times and interkeystroke intervals. *Behavior Research Methods*, *49*(3), 1163-1176.](http://link.springer.com/article/10.3758/s13428-016-0776-3)
|
|
55
|
-
* [Reimers, S., & Stewart, N. (2015). Presentation and response time accuracy in Adobe Flash and HTML5/JavaScript Web experiments. *Behavior Research Methods*, *47*(2), 309-327.](http://link.springer.com/article/10.3758%2Fs13428-014-0471-1)
|
|
56
|
-
|
|
55
|
+
## Contributors
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
jsPsych is open source project with [numerous contributors](https://github.com/jspsych/jsPsych/graphs/contributors).
|
|
58
|
+
The project is currently managed by the core team of Josh de Leeuw ([@jodeleeuw](https://github.com/jodeleeuw)), Becky Gilbert ([@becky-gilbert](https://github.com/becky-gilbert)), and Björn Luchterhandt ([@bjoluc](https://github.com/bjoluc)).
|
|
60
59
|
|
|
61
|
-
jsPsych was created by Josh de Leeuw
|
|
60
|
+
jsPsych was created by [Josh de Leeuw](http://www.twitter.com/joshdeleeuw).
|
|
62
61
|
|
|
63
|
-
We're grateful for the
|
|
62
|
+
We're also grateful for the generous support from a [Mozilla Open Source Support award](https://www.mozilla.org/en-US/moss/), which funded development of the library from 2020-2021.
|
package/css/jspsych.css
CHANGED
|
@@ -5,45 +5,45 @@
|
|
|
5
5
|
* experiments look polished without any additional styles.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
|
|
9
9
|
|
|
10
10
|
/* Container holding jsPsych content */
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
12
|
+
.jspsych-display-element {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
overflow-y: auto;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.jspsych-display-element:focus {
|
|
19
|
+
outline: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.jspsych-content-wrapper {
|
|
23
|
+
display: flex;
|
|
24
|
+
margin: auto;
|
|
25
|
+
flex: 1 1 100%;
|
|
26
|
+
width: 100%;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.jspsych-content {
|
|
30
|
+
max-width: 95%; /* this is mainly an IE 10-11 fix */
|
|
31
|
+
text-align: center;
|
|
32
|
+
margin: auto; /* this is for overflowing content */
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.jspsych-top {
|
|
36
|
+
align-items: flex-start;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.jspsych-middle {
|
|
40
|
+
align-items: center;
|
|
41
|
+
}
|
|
42
42
|
|
|
43
43
|
/* fonts and type */
|
|
44
44
|
|
|
45
45
|
.jspsych-display-element {
|
|
46
|
-
font-family:
|
|
46
|
+
font-family: "Open Sans", "Arial", sans-serif;
|
|
47
47
|
font-size: 18px;
|
|
48
48
|
line-height: 1.6em;
|
|
49
49
|
}
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
/* Form elements like input fields and buttons */
|
|
52
52
|
|
|
53
53
|
.jspsych-display-element input[type="text"] {
|
|
54
|
-
font-family:
|
|
54
|
+
font-family: "Open Sans", "Arial", sans-serif;
|
|
55
55
|
font-size: 14px;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
margin: 0px;
|
|
63
63
|
font-size: 14px;
|
|
64
64
|
font-weight: 400;
|
|
65
|
-
font-family:
|
|
65
|
+
font-family: "Open Sans", "Arial", sans-serif;
|
|
66
66
|
cursor: pointer;
|
|
67
67
|
line-height: 1.4;
|
|
68
68
|
text-align: center;
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
|
|
87
87
|
.jspsych-btn:active {
|
|
88
88
|
background-color: #ddd;
|
|
89
|
-
border-color
|
|
89
|
+
border-color: #000000;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.jspsych-btn:disabled {
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
|
|
101
101
|
.jspsych-slider {
|
|
102
102
|
appearance: none;
|
|
103
|
-
-webkit-appearance: none;
|
|
103
|
+
-webkit-appearance: none;
|
|
104
104
|
-moz-appearance: none;
|
|
105
|
-
width: 100%;
|
|
106
|
-
background: transparent;
|
|
105
|
+
width: 100%;
|
|
106
|
+
background: transparent;
|
|
107
107
|
}
|
|
108
108
|
.jspsych-slider:focus {
|
|
109
109
|
outline: none;
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
height: 14px;
|
|
193
193
|
display: inline-block;
|
|
194
194
|
vertical-align: middle;
|
|
195
|
-
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
|
|
195
|
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
196
196
|
}
|
|
197
197
|
#jspsych-progressbar-inner {
|
|
198
198
|
background-color: #aaa;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { JsPsychData } from "./modules/data";
|
|
2
|
+
import { PluginAPI } from "./modules/plugin-api";
|
|
3
|
+
import * as randomization from "./modules/randomization";
|
|
4
|
+
import * as turk from "./modules/turk";
|
|
5
|
+
import * as utils from "./modules/utils";
|
|
6
|
+
export declare class JsPsych {
|
|
7
|
+
extensions: any;
|
|
8
|
+
turk: typeof turk;
|
|
9
|
+
randomization: typeof randomization;
|
|
10
|
+
utils: typeof utils;
|
|
11
|
+
data: JsPsychData;
|
|
12
|
+
pluginAPI: PluginAPI;
|
|
13
|
+
version(): any;
|
|
14
|
+
/**
|
|
15
|
+
* options
|
|
16
|
+
*/
|
|
17
|
+
private opts;
|
|
18
|
+
/**
|
|
19
|
+
* experiment timeline
|
|
20
|
+
*/
|
|
21
|
+
private timeline;
|
|
22
|
+
private timelineDescription;
|
|
23
|
+
private global_trial_index;
|
|
24
|
+
private current_trial;
|
|
25
|
+
private current_trial_finished;
|
|
26
|
+
private DOM_container;
|
|
27
|
+
private DOM_target;
|
|
28
|
+
/**
|
|
29
|
+
* time that the experiment began
|
|
30
|
+
*/
|
|
31
|
+
private exp_start_time;
|
|
32
|
+
/**
|
|
33
|
+
* is the experiment paused?
|
|
34
|
+
*/
|
|
35
|
+
private paused;
|
|
36
|
+
private waiting;
|
|
37
|
+
/**
|
|
38
|
+
* is the page retrieved directly via file:// protocol (true) or hosted on a server (false)?
|
|
39
|
+
*/
|
|
40
|
+
private file_protocol;
|
|
41
|
+
/**
|
|
42
|
+
* Promise that is resolved when `finishExperiment()` is called
|
|
43
|
+
*/
|
|
44
|
+
private finished;
|
|
45
|
+
private resolveFinishedPromise;
|
|
46
|
+
/**
|
|
47
|
+
* is the experiment running in `simulate()` mode
|
|
48
|
+
*/
|
|
49
|
+
private simulation_mode;
|
|
50
|
+
/**
|
|
51
|
+
* simulation options passed in via `simulate()`
|
|
52
|
+
*/
|
|
53
|
+
private simulation_options;
|
|
54
|
+
webaudio_context: AudioContext;
|
|
55
|
+
internal: {
|
|
56
|
+
/**
|
|
57
|
+
* this flag is used to determine whether we are in a scope where
|
|
58
|
+
* jsPsych.timelineVariable() should be executed immediately or
|
|
59
|
+
* whether it should return a function to access the variable later.
|
|
60
|
+
*
|
|
61
|
+
**/
|
|
62
|
+
call_immediate: boolean;
|
|
63
|
+
};
|
|
64
|
+
constructor(options?: any);
|
|
65
|
+
/**
|
|
66
|
+
* Starts an experiment using the provided timeline and returns a promise that is resolved when
|
|
67
|
+
* the experiment is finished.
|
|
68
|
+
*
|
|
69
|
+
* @param timeline The timeline to be run
|
|
70
|
+
*/
|
|
71
|
+
run(timeline: any[]): Promise<void>;
|
|
72
|
+
simulate(timeline: any[], simulation_mode?: "data-only" | "visual", simulation_options?: {}): Promise<void>;
|
|
73
|
+
getProgress(): {
|
|
74
|
+
total_trials: number;
|
|
75
|
+
current_trial_global: number;
|
|
76
|
+
percent_complete: number;
|
|
77
|
+
};
|
|
78
|
+
getStartTime(): any;
|
|
79
|
+
getTotalTime(): number;
|
|
80
|
+
getDisplayElement(): HTMLElement;
|
|
81
|
+
getDisplayContainerElement(): HTMLElement;
|
|
82
|
+
finishTrial(data?: {}): void;
|
|
83
|
+
endExperiment(end_message?: string, data?: {}): void;
|
|
84
|
+
endCurrentTimeline(): void;
|
|
85
|
+
getCurrentTrial(): any;
|
|
86
|
+
getInitSettings(): any;
|
|
87
|
+
getCurrentTimelineNodeID(): any;
|
|
88
|
+
timelineVariable(varname: string, immediate?: boolean): any;
|
|
89
|
+
getAllTimelineVariables(): any;
|
|
90
|
+
addNodeToEndOfTimeline(new_timeline: any, preload_callback?: any): void;
|
|
91
|
+
pauseExperiment(): void;
|
|
92
|
+
resumeExperiment(): void;
|
|
93
|
+
loadFail(message: any): void;
|
|
94
|
+
getSafeModeStatus(): boolean;
|
|
95
|
+
getTimeline(): any[];
|
|
96
|
+
private prepareDom;
|
|
97
|
+
private loadExtensions;
|
|
98
|
+
private startExperiment;
|
|
99
|
+
private finishExperiment;
|
|
100
|
+
private nextTrial;
|
|
101
|
+
private doTrial;
|
|
102
|
+
private evaluateTimelineVariables;
|
|
103
|
+
private evaluateFunctionParameters;
|
|
104
|
+
private replaceFunctionsWithValues;
|
|
105
|
+
private setDefaultValues;
|
|
106
|
+
private checkExclusions;
|
|
107
|
+
private drawProgressBar;
|
|
108
|
+
private updateProgressBar;
|
|
109
|
+
private progress_bar_amount;
|
|
110
|
+
setProgressBar(proportion_complete: any): void;
|
|
111
|
+
getProgressBarCompleted(): number;
|
|
112
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { JsPsych } from "./JsPsych";
|
|
2
|
+
export declare class TimelineNode {
|
|
3
|
+
private jsPsych;
|
|
4
|
+
relative_id: any;
|
|
5
|
+
parent_node: any;
|
|
6
|
+
trial_parameters: any;
|
|
7
|
+
timeline_parameters: any;
|
|
8
|
+
node_trial_data: any;
|
|
9
|
+
progress: any;
|
|
10
|
+
end_message?: string;
|
|
11
|
+
constructor(jsPsych: JsPsych, parameters: any, parent?: any, relativeID?: any);
|
|
12
|
+
trial(): any;
|
|
13
|
+
markCurrentTrialComplete(): void;
|
|
14
|
+
nextRepetiton(): void;
|
|
15
|
+
setTimelineVariablesOrder(): void;
|
|
16
|
+
nextSet(): void;
|
|
17
|
+
advance(): any;
|
|
18
|
+
isComplete(): any;
|
|
19
|
+
getTimelineVariableValue(variable_name: string): any;
|
|
20
|
+
findTimelineVariable(variable_name: any): any;
|
|
21
|
+
timelineVariable(variable_name: string): any;
|
|
22
|
+
allTimelineVariables(): any;
|
|
23
|
+
allTimelineVariablesNames(so_far?: any[]): any;
|
|
24
|
+
length(): number;
|
|
25
|
+
percentComplete(): number;
|
|
26
|
+
reset(): void;
|
|
27
|
+
end(): void;
|
|
28
|
+
endActiveNode(): void;
|
|
29
|
+
ID(): string;
|
|
30
|
+
activeID(): any;
|
|
31
|
+
generatedData(): import("./modules/data/DataCollection").DataCollection;
|
|
32
|
+
trialsOfType(type: any): any;
|
|
33
|
+
insert(parameters: any): void;
|
|
34
|
+
}
|