jspsych 6.3.1 → 7.1.2
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 +3171 -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 +3165 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +3159 -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 +136 -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 +165 -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 -719
- package/docs/core_library/jspsych-data.md +0 -587
- package/docs/core_library/jspsych-pluginAPI.md +0 -624
- package/docs/core_library/jspsych-randomization.md +0 -389
- package/docs/core_library/jspsych-turk.md +0 -98
- package/docs/extensions/extensions.md +0 -83
- package/docs/extensions/jspsych-ext-webgazer.md +0 -137
- 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 -180
- 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 -271
- 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 -61
- package/docs/plugins/jspsych-webgazer-init-camera.md +0 -30
- package/docs/plugins/jspsych-webgazer-validate.md +0 -44
- 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/ridgeWorker.mjs +0 -135
- package/examples/js/webgazer/webgazer.js +0 -88909
- package/examples/js/webgazer/worker_scripts/mat.js +0 -306
- package/examples/js/webgazer/worker_scripts/util.js +0 -398
- 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 -174
- package/examples/webgazer_audio.html +0 -90
- package/examples/webgazer_image.html +0 -60
- package/extensions/jspsych-ext-webgazer.js +0 -265
- package/jspsych.js +0 -3023
- 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 -209
- 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 -161
- package/plugins/jspsych-webgazer-init-camera.js +0 -139
- package/plugins/jspsych-webgazer-validate.js +0 -314
- 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 -365
- 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
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
# Media Preloading
|
|
2
|
-
|
|
3
|
-
If an experiment uses image, audio, or video files as stimuli, it is a good idea to preload the files before running the experiment. You can preload files at any point in your experiment using the [jsPsych `preload` plugin](../plugins/jspsych-preload.md). Preloading files means that the subject's browser will download the files and store them in local memory on the subject's computer. This is important because displaying or playing a media file is much faster if it is already in memory on the subject's computer. Without preloading, there will be noticeable delays in the display of media, which will affect any timing measurements (such as how long an image is displayed, or a subject's response time since first viewing an image). For particularly large files, like video, preloading content avoids lengthy pauses in the middle of the experiment that can be disruptive to the flow of the experiment.
|
|
4
|
-
|
|
5
|
-
!!! warning
|
|
6
|
-
Note that video preloading will not work when you run your experiment offline (e.g., by double-clicking on the HTML file), but it will work once your experiment is running online (hosted on a server). The [Cross-origin requests (CORS) and safe mode](running-experiments.md#cross-origin-requests-cors-and-safe-mode) section on the Running Experiments page contains more information about this.
|
|
7
|
-
|
|
8
|
-
## Automatic Preloading
|
|
9
|
-
|
|
10
|
-
jsPsych can automatically preload audio, video, and image files that are used as parameters for the standard set of plugins, based on the timeline that is passed to `jsPsych.init`. You must initiate this preloading using a `preload` trial. You should add this `preload` trial into your timeline when you want the preloading to occur, and set the `auto_preload` parameter to `true`.
|
|
11
|
-
|
|
12
|
-
```javascript
|
|
13
|
-
// the "auto_preload: true" setting tells the plugin to automatically find
|
|
14
|
-
// stimuli to preload based the main experiment timeline (used in jsPsych.init)
|
|
15
|
-
var preload = {
|
|
16
|
-
type: 'preload',
|
|
17
|
-
auto_preload: true
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// this image file can be automatically preloaded
|
|
21
|
-
var image_trial = {
|
|
22
|
-
type: 'image-keyboard-response',
|
|
23
|
-
stimulus: 'img/file1.png'
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// the sound file can be automatically preloaded
|
|
27
|
-
var sound_trial = {
|
|
28
|
-
type: 'audio-keyboard-response',
|
|
29
|
-
stimulus: 'audio/hello.mp3'
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// the video file can be automatically preloaded (as long as the experiment
|
|
33
|
-
// is running on a server)
|
|
34
|
-
var video_trial = {
|
|
35
|
-
type: 'video',
|
|
36
|
-
stimulus: ['video/sample_video.mp4']
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
jsPsych.init({
|
|
40
|
-
timeline: [preload, image_trial, sound_trial, video_trial]
|
|
41
|
-
});
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Manual preloading
|
|
45
|
-
|
|
46
|
-
If you are using media files in your experiment but they are not being passed directly as parameters to the trials (e.g., because you are using functions as parameters that return the media files, you are using timeline variables, or you are embedding the media files in an HTML string), then these files will not be detected when you use the `auto_preload` option, so you must manually specify them. The `preload` plugin allows you to add these files using the `images`, `audio` and `video` parameters.
|
|
47
|
-
|
|
48
|
-
```javascript
|
|
49
|
-
// this image file cannot be automatically preloaded because it is embedded in
|
|
50
|
-
// an HTML string
|
|
51
|
-
var image_trial = {
|
|
52
|
-
type: 'html-keyboard-response',
|
|
53
|
-
stimulus: '<img src="img/file1.png"></img>',
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// this audio file cannot be automatically preloaded because it is returned
|
|
57
|
-
// from a function
|
|
58
|
-
var sound_trial = {
|
|
59
|
-
type: 'audio-keyboard-response',
|
|
60
|
-
stimulus: function() { return 'audio/sound1.mp3' }
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// these video files cannot be automatically preloaded because they are passed
|
|
64
|
-
// into a trial using the jsPsych.timelineVariable function
|
|
65
|
-
var video_trials = {
|
|
66
|
-
timeline: [
|
|
67
|
-
{
|
|
68
|
-
type: 'video',
|
|
69
|
-
stimulus: jsPsych.timelineVariable('video')
|
|
70
|
-
}
|
|
71
|
-
],
|
|
72
|
-
timeline_variables: [
|
|
73
|
-
{video: ['video/1.mp4']},
|
|
74
|
-
{video: ['video/2.mp4']}
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// to manually preload media files, create an array of file paths for each
|
|
79
|
-
// media type
|
|
80
|
-
var images = ['img/file1.png'];
|
|
81
|
-
var audio = ['audio/sound1.mp3'];
|
|
82
|
-
var video = ['video/1.mp4', 'video/2.mp4'];
|
|
83
|
-
|
|
84
|
-
// these array can be passed into the preload plugin using the images, audio
|
|
85
|
-
// and video parameters
|
|
86
|
-
var preload = {
|
|
87
|
-
type: 'preload',
|
|
88
|
-
images: images,
|
|
89
|
-
audio: audio,
|
|
90
|
-
video: video
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
jsPsych.init({
|
|
94
|
-
timeline: [preload, image_trial, sound_trial, video_trials],
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Combining automatic and manual preloading
|
|
100
|
-
|
|
101
|
-
It's possible to combine automatic and manual preloading. For instance, you may want to automatically preload all of the media files based on your experiment timeline, while also manually preloading any files that can't be automatically preloaded. Any duplicate file names across all preloading methods will be removed before preloading starts, so including the same file names in multiple `preload` parameters will not affect the preloading duration.
|
|
102
|
-
|
|
103
|
-
```javascript
|
|
104
|
-
// this file can be preloaded automatically
|
|
105
|
-
var image_trial = {
|
|
106
|
-
type: 'image-keyboard-response',
|
|
107
|
-
stimulus: 'img/file1.png'
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// this file can be preloaded automatically
|
|
111
|
-
var sound_trial = {
|
|
112
|
-
type: 'audio-keyboard-response',
|
|
113
|
-
stimulus: 'audio/hello.mp3'
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// these files must be preloaded manually
|
|
117
|
-
var video_trials = {
|
|
118
|
-
timeline: [
|
|
119
|
-
{
|
|
120
|
-
type: 'video',
|
|
121
|
-
stimulus: jsPsych.timelineVariable('video')
|
|
122
|
-
}
|
|
123
|
-
],
|
|
124
|
-
timeline_variables: [
|
|
125
|
-
{video: ['video/1.mp4']},
|
|
126
|
-
{video: ['video/2.mp4']}
|
|
127
|
-
]
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
var video = ['video/1.mp4', 'video/2.mp4'];
|
|
131
|
-
|
|
132
|
-
var preload = {
|
|
133
|
-
type: 'preload',
|
|
134
|
-
auto_preload: true, // automatically preload the image and audio files
|
|
135
|
-
video: video // manually preload the videos used with timeline variables
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
jsPsych.init({
|
|
139
|
-
timeline: [preload, image_trial, sound_trial, video_trials],
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Preloading in batches
|
|
145
|
-
|
|
146
|
-
Some experiments use many and/or large media files. This can cause problems when participants have slow and/or unreliable internet connections, because it increases the chances of loading errors during preloading. This can also cause problems with file caching, i.e. ensuring that the preloaded files remain in the browser's memory, because loading all stimuli at once may exceed the browser's cache limits. One option for mitigating these problems is to load the media files in smaller batches throughout the experiment. Files should be preloaded as close as possible to when they will be needed. For instance, if you have several blocks of trials, then right before each block, you can preload the stimuli that are needed for that block.
|
|
147
|
-
|
|
148
|
-
Here is an example with trials where the stimuli files can be preloaded automatically. In this case, the `trials` parameter is used to tell the `preload` plugin to preload the stimuli from a specific part of the timeline.
|
|
149
|
-
|
|
150
|
-
```javascript
|
|
151
|
-
// these image files in these trial blocks can be automatically preloaded
|
|
152
|
-
var block_1 = {
|
|
153
|
-
timeline: [
|
|
154
|
-
{
|
|
155
|
-
type: 'image-keyboard-response',
|
|
156
|
-
stimulus: 'img/file1.png'
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
type: 'image-keyboard-response',
|
|
160
|
-
stimulus: 'img/file2.png'
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
var block_2 = {
|
|
166
|
-
timeline: [
|
|
167
|
-
{
|
|
168
|
-
type: 'image-keyboard-response',
|
|
169
|
-
stimulus: 'img/file3.png'
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
type: 'image-keyboard-response',
|
|
173
|
-
stimulus: 'img/file4.png'
|
|
174
|
-
}
|
|
175
|
-
]
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
var preload_1 = {
|
|
179
|
-
type: 'preload',
|
|
180
|
-
trials: block_1 // automatically preload just the images from block_1 trials
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
var preload_2 = {
|
|
184
|
-
type: 'preload',
|
|
185
|
-
trials: block_2 // automatically preload just the images from block_2 trials
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
jsPsych.init({
|
|
189
|
-
// add each preload trial onto the timeline before the appropriate trial block
|
|
190
|
-
timeline: [preload_1, block_1, preload_2, block_2],
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Below is an example with trials where the stimuli files cannot be preloaded automatically, because the stimuli files are passed to the trials via `jsPsych.timelineVariable`. In this case, we create separate arrays for each batch of files, and then pass those arrays to the each preload trial.
|
|
195
|
-
|
|
196
|
-
```javascript
|
|
197
|
-
// these trial blocks cannot be automatically preloaded because
|
|
198
|
-
// the media files are passed to the trial parameters with timeline variables
|
|
199
|
-
var block_1 = {
|
|
200
|
-
timeline: [...],
|
|
201
|
-
timeline_variables: [
|
|
202
|
-
{stim: 'file1.png'},
|
|
203
|
-
{stim: 'file1.png'}
|
|
204
|
-
]
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
var block_2 = {
|
|
208
|
-
timeline: [...],
|
|
209
|
-
timeline_variables: [
|
|
210
|
-
{stim: 'file3.png'},
|
|
211
|
-
{stim: 'file4.png'}
|
|
212
|
-
]
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
var images_block_1 = ['file1.png', 'file2.png'];
|
|
216
|
-
var images_block_2 = ['file3.png', 'file4.png'];
|
|
217
|
-
|
|
218
|
-
// preload trial for preloading the block 1 stimuli
|
|
219
|
-
var preload_1 = {
|
|
220
|
-
type: 'preload',
|
|
221
|
-
images: images_block_1
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// preload trial for preloading the block 2 stimuli
|
|
225
|
-
var preload_2 = {
|
|
226
|
-
type: 'preload',
|
|
227
|
-
images: images_block_2
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
jsPsych.init({
|
|
231
|
-
// add each preload trial to the timeline before the appropriate trial block
|
|
232
|
-
timeline: [preload_1, block_1, preload_2, block_2],
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Preloading progress bar
|
|
238
|
-
|
|
239
|
-
By default, the `preload` plugin will display a progress bar while files are being preloaded. This progress bar represents all files that are being preloaded during the trial, regardless of whether the file is being preloaded automatically via the `auto_preload` or `trials` parameters, or manually via the `audio`, `images`, and `video` parameters. You may wish to turn the preload progress bar off if you are only loading a small number of files, as it will appear and disappear so quickly that the participant may be confused about what it was. You can control whether the preloading progress bar appears by setting the `show_progress_bar` parameter in the `preload` trial.
|
|
240
|
-
|
|
241
|
-
```javascript
|
|
242
|
-
var preload_trial = {
|
|
243
|
-
type: 'preload',
|
|
244
|
-
auto_preload: true
|
|
245
|
-
show_progress_bar: false // hide progress bar
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Loading time limits
|
|
250
|
-
|
|
251
|
-
It's usually a good idea to set a time limit for file loading, to ensure that participants aren't waiting for an unreasonable amount of time. Time limits can be specified in milliseconds using the `max_load_time` parameter. If you set a loading time limit and all files haven't finished loading before this time, then the `preload` trial will either stop an error (if `continue_after_error` is false, the default) or the trial will end and the experiment will continue (if `continue_after_error` is `true`). If `max_load_time` is `null` (the default), then there is no time limit.
|
|
252
|
-
|
|
253
|
-
```javascript
|
|
254
|
-
var preload_trial = {
|
|
255
|
-
type: 'preload',
|
|
256
|
-
auto_preload: true
|
|
257
|
-
max_load_time: 60000 // 1 minute
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
## Loading and error messages
|
|
262
|
-
|
|
263
|
-
It's possible to specify custom messages to be shown on the page while the media files are loading, and in case of one or more file loading errors. The `message` parameter allows you to customize the loading message using an HML-formatted string. If `show_progress_bar` is `true`, then this message will be shown above the progress bar.
|
|
264
|
-
|
|
265
|
-
```javascript
|
|
266
|
-
var preload_trial = {
|
|
267
|
-
type: 'preload',
|
|
268
|
-
auto_preload: true
|
|
269
|
-
message: 'Please wait while the experiment loads. This may take a few minutes.',
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
A preloading error will occur when either (a) one or more files produces a loading error, and/or (b) all files have not finished loading before the `max_load_time` duration. The `error_message` parameter allows you to customize the messsage that's shown on the page in these cases. This message will only be shown if `continue_after_error` is `false` (the default).
|
|
274
|
-
|
|
275
|
-
```javascript
|
|
276
|
-
var preload_trial = {
|
|
277
|
-
type: 'preload',
|
|
278
|
-
auto_preload: true,
|
|
279
|
-
error_message: 'The experiment failed to load. Please contact the researcher.'
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
In addition to the `error_message` parameter, it's also possible to show more detailed error messages on the page about any files that failed to load. You can control this with the `show_detailed_errors` parameter. Detailed error messages will appear below the general error message. This only applies if `continue_after_error` is `false` (the default).
|
|
284
|
-
|
|
285
|
-
Detailed error messages can be useful when testing and debugging your experiment. If `show_detailed_errors` is `true`, then if one or more loading errors occurs before the `max_load_time` is reached, then the error page will also contian a list of the file(s) that produced an error, along with error information (if there is any). Note that this may not be a complete list, because it will only report any errors that occurred before the `max_load_time` was reached. If there are no file loading errors but preloading hasn't finished before the `max_load_time`, then detailed error message will just tell you that loading timed out.
|
|
286
|
-
|
|
287
|
-
```javascript
|
|
288
|
-
var preload_trial = {
|
|
289
|
-
type: 'preload',
|
|
290
|
-
auto_preload: true,
|
|
291
|
-
// show details of any file loading errors and/or loading time out
|
|
292
|
-
show_detailed_errors: true
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
## Options for handling errors
|
|
297
|
-
|
|
298
|
-
If `continue_after_error` is `true`, then the experiment _will not stop_ if one or more files fails to load. Instead, the trial will end and the experiment will continue. However, the preload trial data will contain a property called `success`, which is whether or not all files were loaded successfully, `timeout`, which is whether or not the files loaded successfully before the `max_load_time`. The preload trial data will also contain lists of any `image`, `audio`, and `video` files that failed to load. This gives you the option to continue the experiment after preloading fails and use the preload trial data decide what to do next. For instance, you may decide to skip the trials that use the stimuli files that failed to load, or try loading the failed files again. Another option is to simply end the experiment when preloading fails, but send the data back to your server so that you have more information about the loading failure.
|
|
299
|
-
|
|
300
|
-
```javascript
|
|
301
|
-
var preload_trial = {
|
|
302
|
-
type: 'preload',
|
|
303
|
-
auto_preload: true,
|
|
304
|
-
message: 'Please wait while the experiment loads...',
|
|
305
|
-
// don't stop the experiment if there are file loading errors or if loading times out
|
|
306
|
-
continue_after_error: true
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
var save_data = {
|
|
310
|
-
type: 'call-function',
|
|
311
|
-
async: true,
|
|
312
|
-
func: function(done){
|
|
313
|
-
var data = jsPsych.data.get().json();
|
|
314
|
-
save_data(data, function() {done()})
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// the experiment will stop here, since there are no valid key choices or trial duration
|
|
319
|
-
var fail_message = {
|
|
320
|
-
type: 'html-keyboard-response',
|
|
321
|
-
stimulus: 'The experiment failed to load. Please contact the researcher.',
|
|
322
|
-
choices: jsPsych.NO_KEYS,
|
|
323
|
-
trial_duration: null
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
var if_loading_fails = {
|
|
327
|
-
timeline: [save_data, fail_message],
|
|
328
|
-
conditional_function: function() {
|
|
329
|
-
if (jsPsych.data.getLastTrialData()[0].values().success) {
|
|
330
|
-
// preloading was successful, so skip this conditional timeline
|
|
331
|
-
// and move on with the experiment
|
|
332
|
-
return false;
|
|
333
|
-
} else {
|
|
334
|
-
// preloading failed, so run this conditional timeline:
|
|
335
|
-
// save the data to the server and show the fail message
|
|
336
|
-
return true;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// ... rest of experiment
|
|
342
|
-
|
|
343
|
-
jsPsych.init({
|
|
344
|
-
timeline: [preload_trial, if_loading_fails, ... ]
|
|
345
|
-
})
|
|
346
|
-
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
The `preload` plugin's `on_success` and `on_error` callback functions provide another way of tracking preloading progress and handling file loading errors. These functions are called after any file either loads successfully or produces an error, respectively. These functions receive a single argument, which is the path of the file (string) that loaded or produced an error.
|
|
350
|
-
|
|
351
|
-
```javascript
|
|
352
|
-
var file_load_count = 0;
|
|
353
|
-
var file_error_count = 0;
|
|
354
|
-
|
|
355
|
-
var preload_trial = {
|
|
356
|
-
type: 'preload',
|
|
357
|
-
auto_preload: true,
|
|
358
|
-
on_error: function(file) {
|
|
359
|
-
file_error_count++;
|
|
360
|
-
console.log('Error: ',file);
|
|
361
|
-
},
|
|
362
|
-
on_success: function(file) {
|
|
363
|
-
file_load_count++;
|
|
364
|
-
console.log('Loaded: ',file);
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
Note that there's no guarantee that any/all files will trigger one of these two callback functions, because they are cancelled after the `preload` trial ends. For instance, if a file takes longer to load then the `max_load_time`, then the `preload` trial will end due to timing out, and the `on_success` and `on_error` callbacks for any in-progress files will be cancelled.
|
package/docs/overview/mturk.md
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Integrating with Mechanical Turk
|
|
2
|
-
|
|
3
|
-
A common use of jsPsych is to build an online experiment and find subjects using [Mechanical Turk](http://www.mturk.com/). Once an experiment is available through a web server and data is being [saved on the server](data.md), connecting the experiment with Mechanical Turk takes only a few additional steps. jsPsych has some built-in functionality to assist with this process.
|
|
4
|
-
|
|
5
|
-
## The jsPsych.turk module
|
|
6
|
-
|
|
7
|
-
The [jsPsych.turk](../core_library/jspsych-turk.md) module contains functions that are relevant for experiments running on Mechanical Turk.
|
|
8
|
-
|
|
9
|
-
## Creating an advertisement page
|
|
10
|
-
|
|
11
|
-
When potential subjects view your experiment on Mechanical Turk, they will be able to see a single webpage before deciding whether or not to accept the HIT (start the experiment). This first page is often used as an advertisement for the experiment, similar to posting a flier in a department hallway. The important thing to remember about this page is that potential subjects will be able to interact with it even if they haven't accepted the HIT. Therefore, it can be useful to change the content of the page depending on whether the HIT has been accepted or not. This is relatively easy to do:
|
|
12
|
-
|
|
13
|
-
```html
|
|
14
|
-
<div id="experiment_link">You must accept the HIT to begin the experiment</div>.
|
|
15
|
-
|
|
16
|
-
<script>
|
|
17
|
-
// jsPsych has a method turkInfo() which can determine whether or not the
|
|
18
|
-
// HIT has been accepted.
|
|
19
|
-
var turkInfo = jsPsych.turkInfo();
|
|
20
|
-
|
|
21
|
-
// turkInfo.previewMode is true in two cases: when the HIT has not been
|
|
22
|
-
// accepted yet OR when the page is viewed outside of mechanical turk.
|
|
23
|
-
// The second property, outsideTurk, is true when the page is viewed
|
|
24
|
-
// outside of mechanical turk, so together, the statement will be true
|
|
25
|
-
// only when in Turk and when the HIT is not accepted yet.
|
|
26
|
-
if(!turkInfo.previewMode && !turkInfo.outsideTurk) {
|
|
27
|
-
document.querySelector('#experiment_link').innerHMTL = '<a href="link_to_experiment.html" target="_blank">Click Here to Start Experiment</a>';
|
|
28
|
-
}
|
|
29
|
-
</script>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
One important issue with advertisement pages is that they must be served using the https protocol, which requires having an SSL certificate on the web server hosting the page. Instructions for how to do this vary depending on what kind of server you are using, so the best advice is to simply Google for instructions on how to acquire and install an SSL certificate on your particular server.
|
|
33
|
-
|
|
34
|
-
## Getting the worker ID
|
|
35
|
-
|
|
36
|
-
Every account on Mechanical Turk is given a unique identification string. Recording this ID is a useful way to keep track of who is doing your experiment. In particular, while Turk has built in tools for preventing the same person from doing a HIT more than once, there may be cases where you don't want subjects to complete related experiments. If you store the worker ID of every person who starts an experiment in a database, then you can exclude people by running a query on the database to check for the ID. jsPsych can get the workerID, assignmentID, and hitID with the turkInfo method.
|
|
37
|
-
|
|
38
|
-
```javascript
|
|
39
|
-
var turkInfo = jsPsych.turk.turkInfo();
|
|
40
|
-
|
|
41
|
-
// workerID
|
|
42
|
-
turkInfo.workerId
|
|
43
|
-
|
|
44
|
-
// hitID
|
|
45
|
-
turkInfo.hitId
|
|
46
|
-
|
|
47
|
-
// assignmentID
|
|
48
|
-
turkInfo.assignmentId
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Recording the workerId at the start of the experiment is also a good way to track dropouts.
|
|
52
|
-
|
|
53
|
-
## Submitting results to Mechanical Turk
|
|
54
|
-
|
|
55
|
-
If you are running a HIT on Mechanical Turk using the ExternalQuestion template, then you'll need to provide a way for subjects to indicate that they have completed the HIT. (If you are using another template, then the template will provide this code for you). jsPSych makes this a relatively easy task. A common strategy for external HITs is to display an HTML page on the Mechanical Turk website that links to your HIT. Subjects click the link, which opens the actual experiment content in a new browser window or tab, allowing the experiment to take up the whole browser window instead of just the iframe that displays content on Mechanical Turk.
|
|
56
|
-
|
|
57
|
-
On this page, you might include a submit button for workers to indicate that they have finished the experiment. The page would look something like this:
|
|
58
|
-
|
|
59
|
-
```html
|
|
60
|
-
<p>Enter the code you were given:</p>
|
|
61
|
-
<input type="text" id="code"></input>
|
|
62
|
-
<button onclick="sendData();">Submit HIT</button>
|
|
63
|
-
|
|
64
|
-
<script>
|
|
65
|
-
function sendData() {
|
|
66
|
-
jsPsych.turk.submitToTurk({
|
|
67
|
-
code: document.getElementById('code').value
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
</script>
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
When workers click the button, the contents of the `code` text field will be sent to Mechanical Turk, and you'll be able to view the subjects and the codes that they entered in the Mechanical Turk GUI. You can then approve or reject work using the Mechanical Turk website.
|
|
74
|
-
|
|
75
|
-
## Limitations
|
|
76
|
-
|
|
77
|
-
jsPsych is not designed to communicate with the Mechanical Turk API in a comprehensive manner. If you are looking for software to help you post and manage HITs, then you may want to look at [PsiTurk](http://www.psiturk.org). jsPsych and PsiTurk complement each other nicely, and there is [an example of combining the two platforms](https://psiturk.org/ee/W4v3TPAsiD6FUVY8PDyajH) on PsiTurk's experiment exchange.
|