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,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-reconstruction
|
|
3
|
-
* a jspsych plugin for a reconstruction task where the subject recreates
|
|
4
|
-
* a stimulus from memory
|
|
5
|
-
*
|
|
6
|
-
* Josh de Leeuw
|
|
7
|
-
*
|
|
8
|
-
* documentation: docs.jspsych.org
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
jsPsych.plugins['reconstruction'] = (function() {
|
|
14
|
-
|
|
15
|
-
var plugin = {};
|
|
16
|
-
|
|
17
|
-
plugin.info = {
|
|
18
|
-
name: 'reconstruction',
|
|
19
|
-
description: '',
|
|
20
|
-
parameters: {
|
|
21
|
-
stim_function: {
|
|
22
|
-
type: jsPsych.plugins.parameterType.FUNCTION,
|
|
23
|
-
pretty_name: 'Stimulus function',
|
|
24
|
-
default: undefined,
|
|
25
|
-
description: 'A function with a single parameter that returns an HTML-formatted string representing the stimulus.'
|
|
26
|
-
},
|
|
27
|
-
starting_value: {
|
|
28
|
-
type: jsPsych.plugins.parameterType.FLOAT,
|
|
29
|
-
pretty_name: 'Starting value',
|
|
30
|
-
default: 0.5,
|
|
31
|
-
description: 'The starting value of the stimulus parameter.'
|
|
32
|
-
},
|
|
33
|
-
step_size: {
|
|
34
|
-
type: jsPsych.plugins.parameterType.FLOAT,
|
|
35
|
-
pretty_name: 'Step size',
|
|
36
|
-
default: 0.05,
|
|
37
|
-
description: 'The change in the stimulus parameter caused by pressing one of the modification keys.'
|
|
38
|
-
},
|
|
39
|
-
key_increase: {
|
|
40
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
41
|
-
pretty_name: 'Key increase',
|
|
42
|
-
default: 'h',
|
|
43
|
-
description: 'The key to press for increasing the parameter value.'
|
|
44
|
-
},
|
|
45
|
-
key_decrease: {
|
|
46
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
47
|
-
pretty_name: 'Key decrease',
|
|
48
|
-
default: 'g',
|
|
49
|
-
description: 'The key to press for decreasing the parameter value.'
|
|
50
|
-
},
|
|
51
|
-
button_label: {
|
|
52
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
53
|
-
pretty_name: 'Button label',
|
|
54
|
-
default: 'Continue',
|
|
55
|
-
description: 'The text that appears on the button to finish the trial.'
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
plugin.trial = function(display_element, trial) {
|
|
61
|
-
|
|
62
|
-
// current param level
|
|
63
|
-
var param = trial.starting_value;
|
|
64
|
-
|
|
65
|
-
// set-up key listeners
|
|
66
|
-
var after_response = function(info) {
|
|
67
|
-
|
|
68
|
-
//console.log('fire');
|
|
69
|
-
|
|
70
|
-
var key_i = (typeof trial.key_increase == 'string') ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.key_increase) : trial.key_increase;
|
|
71
|
-
var key_d = (typeof trial.key_decrease == 'string') ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.key_decrease) : trial.key_decrease;
|
|
72
|
-
|
|
73
|
-
// get new param value
|
|
74
|
-
if (info.key == key_i) {
|
|
75
|
-
param = param + trial.step_size;
|
|
76
|
-
} else if (info.key == key_d) {
|
|
77
|
-
param = param - trial.step_size;
|
|
78
|
-
}
|
|
79
|
-
param = Math.max(Math.min(1, param), 0);
|
|
80
|
-
|
|
81
|
-
// refresh the display
|
|
82
|
-
draw(param);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// listen for responses
|
|
86
|
-
var key_listener = jsPsych.pluginAPI.getKeyboardResponse({
|
|
87
|
-
callback_function: after_response,
|
|
88
|
-
valid_responses: [trial.key_increase, trial.key_decrease],
|
|
89
|
-
rt_method: 'performance',
|
|
90
|
-
persist: true,
|
|
91
|
-
allow_held_key: true
|
|
92
|
-
});
|
|
93
|
-
// draw first iteration
|
|
94
|
-
draw(param);
|
|
95
|
-
|
|
96
|
-
function draw(param) {
|
|
97
|
-
|
|
98
|
-
//console.log(param);
|
|
99
|
-
|
|
100
|
-
display_element.innerHTML = '<div id="jspsych-reconstruction-stim-container">'+trial.stim_function(param)+'</div>';
|
|
101
|
-
|
|
102
|
-
// add submit button
|
|
103
|
-
display_element.innerHTML += '<button id="jspsych-reconstruction-next" class="jspsych-btn jspsych-reconstruction">'+trial.button_label+'</button>';
|
|
104
|
-
|
|
105
|
-
display_element.querySelector('#jspsych-reconstruction-next').addEventListener('click', endTrial);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function endTrial() {
|
|
109
|
-
// measure response time
|
|
110
|
-
var endTime =performance.now();
|
|
111
|
-
var response_time = endTime - startTime;
|
|
112
|
-
|
|
113
|
-
// clear keyboard response
|
|
114
|
-
jsPsych.pluginAPI.cancelKeyboardResponse(key_listener);
|
|
115
|
-
|
|
116
|
-
// save data
|
|
117
|
-
var trial_data = {
|
|
118
|
-
"rt": response_time,
|
|
119
|
-
"final_value": param,
|
|
120
|
-
"start_value": trial.starting_value
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
display_element.innerHTML = '';
|
|
124
|
-
|
|
125
|
-
// next trial
|
|
126
|
-
jsPsych.finishTrial(trial_data);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
var startTime = performance.now();
|
|
130
|
-
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
return plugin;
|
|
134
|
-
})();
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-resize
|
|
3
|
-
* Steve Chao
|
|
4
|
-
*
|
|
5
|
-
* plugin for controlling the real world size of the display
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
**/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins["resize"] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
plugin.info = {
|
|
16
|
-
name: 'resize',
|
|
17
|
-
description: '',
|
|
18
|
-
parameters: {
|
|
19
|
-
item_height: {
|
|
20
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
21
|
-
pretty_name: 'Item height',
|
|
22
|
-
default: 1,
|
|
23
|
-
description: 'The height of the item to be measured.'
|
|
24
|
-
},
|
|
25
|
-
item_width: {
|
|
26
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
27
|
-
pretty_name: 'Item width',
|
|
28
|
-
default: 1,
|
|
29
|
-
description: 'The width of the item to be measured.'
|
|
30
|
-
},
|
|
31
|
-
prompt: {
|
|
32
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
33
|
-
pretty_name: 'Prompt',
|
|
34
|
-
default: null,
|
|
35
|
-
description: 'The content displayed below the resizable box and above the button.'
|
|
36
|
-
},
|
|
37
|
-
pixels_per_unit: {
|
|
38
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
39
|
-
pretty_name: 'Pixels per unit',
|
|
40
|
-
default: 100,
|
|
41
|
-
description: 'After the scaling factor is applied, this many pixels will equal one unit of measurement.'
|
|
42
|
-
},
|
|
43
|
-
starting_size: {
|
|
44
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
45
|
-
pretty_name: 'Starting size',
|
|
46
|
-
default: 100,
|
|
47
|
-
description: 'The initial size of the box, in pixels, along the larget dimension.'
|
|
48
|
-
},
|
|
49
|
-
button_label: {
|
|
50
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
51
|
-
pretty_name: 'Button label',
|
|
52
|
-
default: 'Continue',
|
|
53
|
-
description: 'Label to display on the button to complete calibration.'
|
|
54
|
-
},
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
plugin.trial = function(display_element, trial) {
|
|
59
|
-
|
|
60
|
-
var aspect_ratio = trial.item_width / trial.item_height;
|
|
61
|
-
|
|
62
|
-
// variables to determine div size
|
|
63
|
-
if(trial.item_width >= trial.item_height){
|
|
64
|
-
var start_div_width = trial.starting_size;
|
|
65
|
-
var start_div_height = Math.round(trial.starting_size / aspect_ratio);
|
|
66
|
-
} else {
|
|
67
|
-
var start_div_height = trial.starting_size;
|
|
68
|
-
var start_div_width = Math.round(trial.starting_size * aspect_ratio);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// create html for display
|
|
72
|
-
var html ='<div id="jspsych-resize-div" style="border: 2px solid steelblue; height: '+start_div_height+'px; width:'+start_div_width+'px; margin: 7px auto; background-color: lightsteelblue; position: relative;">';
|
|
73
|
-
html += '<div id="jspsych-resize-handle" style="cursor: nwse-resize; background-color: steelblue; width: 10px; height: 10px; border: 2px solid lightsteelblue; position: absolute; bottom: 0; right: 0;"></div>';
|
|
74
|
-
html += '</div>';
|
|
75
|
-
if (trial.prompt !== null){
|
|
76
|
-
html += trial.prompt;
|
|
77
|
-
}
|
|
78
|
-
html += '<a class="jspsych-btn" id="jspsych-resize-btn">'+trial.button_label+'</a>';
|
|
79
|
-
|
|
80
|
-
// render
|
|
81
|
-
display_element.innerHTML = html;
|
|
82
|
-
|
|
83
|
-
// listens for the click
|
|
84
|
-
document.getElementById("jspsych-resize-btn").addEventListener('click', function() {
|
|
85
|
-
scale();
|
|
86
|
-
end_trial();
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
var dragging = false;
|
|
90
|
-
var origin_x, origin_y;
|
|
91
|
-
var cx, cy;
|
|
92
|
-
|
|
93
|
-
var mousedownevent = function(e){
|
|
94
|
-
e.preventDefault();
|
|
95
|
-
dragging = true;
|
|
96
|
-
origin_x = e.pageX;
|
|
97
|
-
origin_y = e.pageY;
|
|
98
|
-
cx = parseInt(scale_div.style.width);
|
|
99
|
-
cy = parseInt(scale_div.style.height);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
display_element.querySelector('#jspsych-resize-handle').addEventListener('mousedown', mousedownevent);
|
|
103
|
-
|
|
104
|
-
var mouseupevent = function(e){
|
|
105
|
-
dragging = false;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
document.addEventListener('mouseup', mouseupevent);
|
|
109
|
-
|
|
110
|
-
var scale_div = display_element.querySelector('#jspsych-resize-div');
|
|
111
|
-
|
|
112
|
-
var resizeevent = function(e){
|
|
113
|
-
if(dragging){
|
|
114
|
-
var dx = (e.pageX - origin_x);
|
|
115
|
-
var dy = (e.pageY - origin_y);
|
|
116
|
-
|
|
117
|
-
if(Math.abs(dx) >= Math.abs(dy)){
|
|
118
|
-
scale_div.style.width = Math.round(Math.max(20, cx+dx*2)) + "px";
|
|
119
|
-
scale_div.style.height = Math.round(Math.max(20, cx+dx*2) / aspect_ratio ) + "px";
|
|
120
|
-
} else {
|
|
121
|
-
scale_div.style.height = Math.round(Math.max(20, cy+dy*2)) + "px";
|
|
122
|
-
scale_div.style.width = Math.round(aspect_ratio * Math.max(20, cy+dy*2)) + "px";
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
document.addEventListener('mousemove', resizeevent);
|
|
128
|
-
|
|
129
|
-
// scales the stimulus
|
|
130
|
-
var scale_factor;
|
|
131
|
-
var final_height_px, final_width_px;
|
|
132
|
-
function scale() {
|
|
133
|
-
final_width_px = scale_div.offsetWidth;
|
|
134
|
-
//final_height_px = scale_div.offsetHeight;
|
|
135
|
-
|
|
136
|
-
var pixels_unit_screen = final_width_px / trial.item_width;
|
|
137
|
-
|
|
138
|
-
scale_factor = pixels_unit_screen / trial.pixels_per_unit;
|
|
139
|
-
document.getElementById("jspsych-content").style.transform = "scale(" + scale_factor + ")";
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
// function to end trial
|
|
144
|
-
function end_trial() {
|
|
145
|
-
|
|
146
|
-
// clear document event listeners
|
|
147
|
-
document.removeEventListener('mousemove', resizeevent);
|
|
148
|
-
document.removeEventListener('mouseup', mouseupevent);
|
|
149
|
-
|
|
150
|
-
// clear the screen
|
|
151
|
-
display_element.innerHTML = '';
|
|
152
|
-
|
|
153
|
-
// finishes trial
|
|
154
|
-
|
|
155
|
-
var trial_data = {
|
|
156
|
-
'final_height_px': final_height_px,
|
|
157
|
-
'final_width_px': final_width_px,
|
|
158
|
-
'scale_factor': scale_factor
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
jsPsych.finishTrial(trial_data);
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
return plugin;
|
|
166
|
-
})();
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-same-different
|
|
3
|
-
* Josh de Leeuw
|
|
4
|
-
*
|
|
5
|
-
* plugin for showing two stimuli sequentially and getting a same / different judgment
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins['same-different-html'] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
plugin.info = {
|
|
16
|
-
name: 'same-different-html',
|
|
17
|
-
description: '',
|
|
18
|
-
parameters: {
|
|
19
|
-
stimuli: {
|
|
20
|
-
type: jsPsych.plugins.parameterType.HTML_STRING,
|
|
21
|
-
pretty_name: 'Stimuli',
|
|
22
|
-
default: undefined,
|
|
23
|
-
array: true,
|
|
24
|
-
description: 'The HTML content to be displayed.'
|
|
25
|
-
},
|
|
26
|
-
answer: {
|
|
27
|
-
type: jsPsych.plugins.parameterType.SELECT,
|
|
28
|
-
pretty_name: 'Answer',
|
|
29
|
-
options: ['same', 'different'],
|
|
30
|
-
default: undefined,
|
|
31
|
-
description: 'Either "same" or "different".'
|
|
32
|
-
},
|
|
33
|
-
same_key: {
|
|
34
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
35
|
-
pretty_name: 'Same key',
|
|
36
|
-
default: 'Q',
|
|
37
|
-
description: ''
|
|
38
|
-
},
|
|
39
|
-
different_key: {
|
|
40
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
41
|
-
pretty_name: 'Different key',
|
|
42
|
-
default: 'P',
|
|
43
|
-
description: 'The key that subjects should press to indicate that the two stimuli are the same.'
|
|
44
|
-
},
|
|
45
|
-
first_stim_duration: {
|
|
46
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
47
|
-
pretty_name: 'First stimulus duration',
|
|
48
|
-
default: null,
|
|
49
|
-
description: 'How long to show the first stimulus for in milliseconds. If null, then the stimulus will remain on the screen until any keypress is made.'
|
|
50
|
-
},
|
|
51
|
-
gap_duration: {
|
|
52
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
53
|
-
pretty_name: 'Gap duration',
|
|
54
|
-
default: 500,
|
|
55
|
-
description: 'How long to show a blank screen in between the two stimuli.'
|
|
56
|
-
},
|
|
57
|
-
second_stim_duration: {
|
|
58
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
59
|
-
pretty_name: 'Second stimulus duration',
|
|
60
|
-
default: null,
|
|
61
|
-
description: 'How long to show the second stimulus for in milliseconds. If null, then the stimulus will remain on the screen until a valid response is made.'
|
|
62
|
-
},
|
|
63
|
-
prompt: {
|
|
64
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
65
|
-
pretty_name: 'Prompt',
|
|
66
|
-
default: null,
|
|
67
|
-
description: 'Any content here will be displayed below the stimulus.'
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
plugin.trial = function(display_element, trial) {
|
|
73
|
-
|
|
74
|
-
display_element.innerHTML = '<div class="jspsych-same-different-stimulus">'+trial.stimuli[0]+'</div>';
|
|
75
|
-
|
|
76
|
-
var first_stim_info;
|
|
77
|
-
if (trial.first_stim_duration > 0) {
|
|
78
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
79
|
-
showBlankScreen();
|
|
80
|
-
}, trial.first_stim_duration);
|
|
81
|
-
} else {
|
|
82
|
-
function afterKeyboardResponse(info) {
|
|
83
|
-
first_stim_info = info;
|
|
84
|
-
showBlankScreen();
|
|
85
|
-
}
|
|
86
|
-
jsPsych.pluginAPI.getKeyboardResponse({
|
|
87
|
-
callback_function: afterKeyboardResponse,
|
|
88
|
-
valid_responses: trial.advance_key,
|
|
89
|
-
rt_method: 'performance',
|
|
90
|
-
persist: false,
|
|
91
|
-
allow_held_key: false
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function showBlankScreen() {
|
|
96
|
-
display_element.innerHTML = '';
|
|
97
|
-
|
|
98
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
99
|
-
showSecondStim();
|
|
100
|
-
}, trial.gap_duration);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function showSecondStim() {
|
|
104
|
-
|
|
105
|
-
var html = '<div class="jspsych-same-different-stimulus">'+trial.stimuli[1]+'</div>';
|
|
106
|
-
//show prompt here
|
|
107
|
-
if (trial.prompt !== null) {
|
|
108
|
-
html += trial.prompt;
|
|
109
|
-
}
|
|
110
|
-
display_element.innerHTML = html;
|
|
111
|
-
|
|
112
|
-
if (trial.second_stim_duration > 0) {
|
|
113
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
114
|
-
display_element.querySelector('.jspsych-same-different-stimulus').style.visibility = 'hidden';
|
|
115
|
-
}, trial.second_stim_duration);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
var after_response = function(info) {
|
|
121
|
-
|
|
122
|
-
// kill any remaining setTimeout handlers
|
|
123
|
-
jsPsych.pluginAPI.clearAllTimeouts();
|
|
124
|
-
|
|
125
|
-
var correct = false;
|
|
126
|
-
|
|
127
|
-
var skey = typeof trial.same_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.same_key) : trial.same_key;
|
|
128
|
-
var dkey = typeof trial.different_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.different_key) : trial.different_key;
|
|
129
|
-
|
|
130
|
-
if (info.key == skey && trial.answer == 'same') {
|
|
131
|
-
correct = true;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (info.key == dkey && trial.answer == 'different') {
|
|
135
|
-
correct = true;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
var trial_data = {
|
|
139
|
-
"rt": info.rt,
|
|
140
|
-
"answer": trial.answer,
|
|
141
|
-
"correct": correct,
|
|
142
|
-
"stimulus": JSON.stringify([trial.stimuli[0], trial.stimuli[1]]),
|
|
143
|
-
"key_press": info.key
|
|
144
|
-
};
|
|
145
|
-
if (first_stim_info) {
|
|
146
|
-
trial_data["rt_stim1"] = first_stim_info.rt;
|
|
147
|
-
trial_data["key_press_stim1"] = first_stim_info.key;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
display_element.innerHTML = '';
|
|
151
|
-
|
|
152
|
-
jsPsych.finishTrial(trial_data);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
jsPsych.pluginAPI.getKeyboardResponse({
|
|
156
|
-
callback_function: after_response,
|
|
157
|
-
valid_responses: [trial.same_key, trial.different_key],
|
|
158
|
-
rt_method: 'performance',
|
|
159
|
-
persist: false,
|
|
160
|
-
allow_held_key: false
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
return plugin;
|
|
168
|
-
})();
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* jspsych-same-different
|
|
3
|
-
* Josh de Leeuw
|
|
4
|
-
*
|
|
5
|
-
* plugin for showing two stimuli sequentially and getting a same / different judgment
|
|
6
|
-
*
|
|
7
|
-
* documentation: docs.jspsych.org
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
jsPsych.plugins['same-different-image'] = (function() {
|
|
12
|
-
|
|
13
|
-
var plugin = {};
|
|
14
|
-
|
|
15
|
-
jsPsych.pluginAPI.registerPreload('same-different-image', 'stimuli', 'image')
|
|
16
|
-
|
|
17
|
-
plugin.info = {
|
|
18
|
-
name: 'same-different-image',
|
|
19
|
-
description: '',
|
|
20
|
-
parameters: {
|
|
21
|
-
stimuli: {
|
|
22
|
-
type: jsPsych.plugins.parameterType.IMAGE,
|
|
23
|
-
pretty_name: 'Stimuli',
|
|
24
|
-
default: undefined,
|
|
25
|
-
array: true,
|
|
26
|
-
description: 'The images to be displayed.'
|
|
27
|
-
},
|
|
28
|
-
answer: {
|
|
29
|
-
type: jsPsych.plugins.parameterType.SELECT,
|
|
30
|
-
pretty_name: 'Answer',
|
|
31
|
-
options: ['same', 'different'],
|
|
32
|
-
default: undefined,
|
|
33
|
-
description: 'Either "same" or "different".'
|
|
34
|
-
},
|
|
35
|
-
same_key: {
|
|
36
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
37
|
-
pretty_name: 'Same key',
|
|
38
|
-
default: 'Q',
|
|
39
|
-
description: ''
|
|
40
|
-
},
|
|
41
|
-
different_key: {
|
|
42
|
-
type: jsPsych.plugins.parameterType.KEYCODE,
|
|
43
|
-
pretty_name: 'Different key',
|
|
44
|
-
default: 'P',
|
|
45
|
-
description: 'The key that subjects should press to indicate that the two stimuli are the same.'
|
|
46
|
-
},
|
|
47
|
-
first_stim_duration: {
|
|
48
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
49
|
-
pretty_name: 'First stimulus duration',
|
|
50
|
-
default: null,
|
|
51
|
-
description: 'How long to show the first stimulus for in milliseconds. If null, then the stimulus will remain on the screen until any keypress is made.'
|
|
52
|
-
},
|
|
53
|
-
gap_duration: {
|
|
54
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
55
|
-
pretty_name: 'Gap duration',
|
|
56
|
-
default: 500,
|
|
57
|
-
description: 'How long to show a blank screen in between the two stimuli.'
|
|
58
|
-
},
|
|
59
|
-
second_stim_duration: {
|
|
60
|
-
type: jsPsych.plugins.parameterType.INT,
|
|
61
|
-
pretty_name: 'Second stimulus duration',
|
|
62
|
-
default: null,
|
|
63
|
-
description: 'How long to show the second stimulus for in milliseconds. If null, then the stimulus will remain on the screen until a valid response is made.'
|
|
64
|
-
},
|
|
65
|
-
prompt: {
|
|
66
|
-
type: jsPsych.plugins.parameterType.STRING,
|
|
67
|
-
pretty_name: 'Prompt',
|
|
68
|
-
default: null,
|
|
69
|
-
description: 'Any content here will be displayed below the stimulus.'
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
plugin.trial = function(display_element, trial) {
|
|
75
|
-
|
|
76
|
-
display_element.innerHTML = '<img class="jspsych-same-different-stimulus" src="'+trial.stimuli[0]+'"></img>';
|
|
77
|
-
|
|
78
|
-
var first_stim_info;
|
|
79
|
-
if (trial.first_stim_duration > 0) {
|
|
80
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
81
|
-
showBlankScreen();
|
|
82
|
-
}, trial.first_stim_duration);
|
|
83
|
-
} else {
|
|
84
|
-
function afterKeyboardResponse(info) {
|
|
85
|
-
first_stim_info = info;
|
|
86
|
-
showBlankScreen();
|
|
87
|
-
}
|
|
88
|
-
jsPsych.pluginAPI.getKeyboardResponse({
|
|
89
|
-
callback_function: afterKeyboardResponse,
|
|
90
|
-
valid_responses: trial.advance_key,
|
|
91
|
-
rt_method: 'performance',
|
|
92
|
-
persist: false,
|
|
93
|
-
allow_held_key: false
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function showBlankScreen() {
|
|
98
|
-
display_element.innerHTML = '';
|
|
99
|
-
|
|
100
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
101
|
-
showSecondStim();
|
|
102
|
-
}, trial.gap_duration);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function showSecondStim() {
|
|
106
|
-
|
|
107
|
-
var html = '<img class="jspsych-same-different-stimulus" src="'+trial.stimuli[1]+'"></img>';
|
|
108
|
-
//show prompt
|
|
109
|
-
if (trial.prompt !== null) {
|
|
110
|
-
html += trial.prompt;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
display_element.innerHTML = html;
|
|
114
|
-
|
|
115
|
-
if (trial.second_stim_duration > 0) {
|
|
116
|
-
jsPsych.pluginAPI.setTimeout(function() {
|
|
117
|
-
display_element.querySelector('.jspsych-same-different-stimulus').style.visibility = 'hidden';
|
|
118
|
-
}, trial.second_stim_duration);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
var after_response = function(info) {
|
|
122
|
-
|
|
123
|
-
// kill any remaining setTimeout handlers
|
|
124
|
-
jsPsych.pluginAPI.clearAllTimeouts();
|
|
125
|
-
|
|
126
|
-
var correct = false;
|
|
127
|
-
|
|
128
|
-
var skey = typeof trial.same_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.same_key) : trial.same_key;
|
|
129
|
-
var dkey = typeof trial.different_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.different_key) : trial.different_key;
|
|
130
|
-
|
|
131
|
-
if (info.key == skey && trial.answer == 'same') {
|
|
132
|
-
correct = true;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (info.key == dkey && trial.answer == 'different') {
|
|
136
|
-
correct = true;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
var trial_data = {
|
|
140
|
-
"rt": info.rt,
|
|
141
|
-
"answer": trial.answer,
|
|
142
|
-
"correct": correct,
|
|
143
|
-
"stimulus": JSON.stringify([trial.stimuli[0], trial.stimuli[1]]),
|
|
144
|
-
"key_press": info.key
|
|
145
|
-
};
|
|
146
|
-
if (first_stim_info) {
|
|
147
|
-
trial_data["rt_stim1"] = first_stim_info.rt;
|
|
148
|
-
trial_data["key_press_stim1"] = first_stim_info.key;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
display_element.innerHTML = '';
|
|
152
|
-
|
|
153
|
-
jsPsych.finishTrial(trial_data);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
jsPsych.pluginAPI.getKeyboardResponse({
|
|
157
|
-
callback_function: after_response,
|
|
158
|
-
valid_responses: [trial.same_key, trial.different_key],
|
|
159
|
-
rt_method: 'performance',
|
|
160
|
-
persist: false,
|
|
161
|
-
allow_held_key: false
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
return plugin;
|
|
169
|
-
})();
|