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.
Files changed (397) hide show
  1. package/README.md +36 -37
  2. package/css/jspsych.css +39 -39
  3. package/dist/JsPsych.d.ts +112 -0
  4. package/dist/TimelineNode.d.ts +34 -0
  5. package/dist/index.browser.js +3164 -0
  6. package/dist/index.browser.js.map +1 -0
  7. package/dist/index.browser.min.js +2 -0
  8. package/dist/index.browser.min.js.map +1 -0
  9. package/dist/index.cjs +3158 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +3152 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/migration.d.ts +3 -0
  15. package/dist/modules/data/DataCollection.d.ts +45 -0
  16. package/dist/modules/data/DataColumn.d.ts +15 -0
  17. package/dist/modules/data/index.d.ts +25 -0
  18. package/dist/modules/data/utils.d.ts +3 -0
  19. package/dist/modules/extensions.d.ts +22 -0
  20. package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
  21. package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
  22. package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
  23. package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
  24. package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
  25. package/dist/modules/plugin-api/index.d.ts +8 -0
  26. package/dist/modules/plugins.d.ts +129 -0
  27. package/dist/modules/randomization.d.ts +35 -0
  28. package/dist/modules/turk.d.ts +40 -0
  29. package/dist/modules/utils.d.ts +7 -0
  30. package/package.json +32 -15
  31. package/src/JsPsych.ts +884 -0
  32. package/src/TimelineNode.ts +536 -0
  33. package/src/index.ts +71 -0
  34. package/src/migration.ts +37 -0
  35. package/src/modules/data/DataCollection.ts +198 -0
  36. package/src/modules/data/DataColumn.ts +86 -0
  37. package/src/modules/data/index.ts +174 -0
  38. package/src/modules/data/utils.ts +75 -0
  39. package/src/modules/extensions.ts +23 -0
  40. package/src/modules/plugin-api/HardwareAPI.ts +32 -0
  41. package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
  42. package/src/modules/plugin-api/MediaAPI.ts +337 -0
  43. package/src/modules/plugin-api/SimulationAPI.ts +181 -0
  44. package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
  45. package/src/modules/plugin-api/index.ts +28 -0
  46. package/src/modules/plugins.ts +158 -0
  47. package/src/modules/randomization.ts +327 -0
  48. package/src/modules/turk.ts +99 -0
  49. package/src/modules/utils.ts +30 -0
  50. package/.github/workflows/jest.yml +0 -20
  51. package/code-of-conduct.md +0 -56
  52. package/contributors.md +0 -61
  53. package/docs/CNAME +0 -1
  54. package/docs/about/about.md +0 -18
  55. package/docs/about/contributing.md +0 -43
  56. package/docs/about/license.md +0 -25
  57. package/docs/about/support.md +0 -7
  58. package/docs/core_library/jspsych-core.md +0 -734
  59. package/docs/core_library/jspsych-data.md +0 -589
  60. package/docs/core_library/jspsych-pluginAPI.md +0 -610
  61. package/docs/core_library/jspsych-randomization.md +0 -397
  62. package/docs/core_library/jspsych-turk.md +0 -102
  63. package/docs/extensions/extensions.md +0 -83
  64. package/docs/extensions/jspsych-ext-webgazer.md +0 -106
  65. package/docs/img/blue.png +0 -0
  66. package/docs/img/devtools-change-css.png +0 -0
  67. package/docs/img/devtools-css-errors.png +0 -0
  68. package/docs/img/devtools-inspect-element.png +0 -0
  69. package/docs/img/folder-setup.png +0 -0
  70. package/docs/img/folder-with-html.png +0 -0
  71. package/docs/img/githubreleases.jpg +0 -0
  72. package/docs/img/jspsych-favicon.png +0 -0
  73. package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
  74. package/docs/img/jspsych-logo.jpg +0 -0
  75. package/docs/img/orange.png +0 -0
  76. package/docs/img/palmer_stim.png +0 -0
  77. package/docs/img/progress_bar.png +0 -0
  78. package/docs/img/prolific-study-completion.png +0 -0
  79. package/docs/img/prolific-study-link.png +0 -0
  80. package/docs/img/visual_search_example.jpg +0 -0
  81. package/docs/index.md +0 -9
  82. package/docs/overview/browser-device-support.md +0 -35
  83. package/docs/overview/callbacks.md +0 -184
  84. package/docs/overview/data.md +0 -281
  85. package/docs/overview/dynamic-parameters.md +0 -147
  86. package/docs/overview/exclude-browser.md +0 -32
  87. package/docs/overview/experiment-options.md +0 -149
  88. package/docs/overview/eye-tracking.md +0 -237
  89. package/docs/overview/fullscreen.md +0 -36
  90. package/docs/overview/media-preloading.md +0 -369
  91. package/docs/overview/mturk.md +0 -77
  92. package/docs/overview/plugins.md +0 -320
  93. package/docs/overview/progress-bar.md +0 -110
  94. package/docs/overview/prolific.md +0 -78
  95. package/docs/overview/record-browser-interactions.md +0 -23
  96. package/docs/overview/running-experiments.md +0 -95
  97. package/docs/overview/style.md +0 -293
  98. package/docs/overview/timeline.md +0 -457
  99. package/docs/plugins/jspsych-animation.md +0 -40
  100. package/docs/plugins/jspsych-audio-button-response.md +0 -60
  101. package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
  102. package/docs/plugins/jspsych-audio-slider-response.md +0 -53
  103. package/docs/plugins/jspsych-call-function.md +0 -81
  104. package/docs/plugins/jspsych-canvas-button-response.md +0 -66
  105. package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
  106. package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
  107. package/docs/plugins/jspsych-categorize-animation.md +0 -60
  108. package/docs/plugins/jspsych-categorize-html.md +0 -53
  109. package/docs/plugins/jspsych-categorize-image.md +0 -53
  110. package/docs/plugins/jspsych-cloze.md +0 -45
  111. package/docs/plugins/jspsych-external-html.md +0 -70
  112. package/docs/plugins/jspsych-free-sort.md +0 -56
  113. package/docs/plugins/jspsych-fullscreen.md +0 -57
  114. package/docs/plugins/jspsych-html-button-response.md +0 -42
  115. package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
  116. package/docs/plugins/jspsych-html-slider-response.md +0 -45
  117. package/docs/plugins/jspsych-iat-html.md +0 -64
  118. package/docs/plugins/jspsych-iat-image.md +0 -64
  119. package/docs/plugins/jspsych-image-button-response.md +0 -48
  120. package/docs/plugins/jspsych-image-keyboard-response.md +0 -58
  121. package/docs/plugins/jspsych-image-slider-response.md +0 -54
  122. package/docs/plugins/jspsych-instructions.md +0 -58
  123. package/docs/plugins/jspsych-maxdiff.md +0 -41
  124. package/docs/plugins/jspsych-preload.md +0 -128
  125. package/docs/plugins/jspsych-rdk.md +0 -119
  126. package/docs/plugins/jspsych-reconstruction.md +0 -48
  127. package/docs/plugins/jspsych-resize.md +0 -39
  128. package/docs/plugins/jspsych-same-different-html.md +0 -53
  129. package/docs/plugins/jspsych-same-different-image.md +0 -66
  130. package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -52
  131. package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
  132. package/docs/plugins/jspsych-survey-html-form.md +0 -50
  133. package/docs/plugins/jspsych-survey-likert.md +0 -70
  134. package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
  135. package/docs/plugins/jspsych-survey-multi-select.md +0 -53
  136. package/docs/plugins/jspsych-survey-text.md +0 -63
  137. package/docs/plugins/jspsych-video-button-response.md +0 -54
  138. package/docs/plugins/jspsych-video-keyboard-response.md +0 -50
  139. package/docs/plugins/jspsych-video-slider-response.md +0 -60
  140. package/docs/plugins/jspsych-virtual-chinrest.md +0 -105
  141. package/docs/plugins/jspsych-visual-search-circle.md +0 -52
  142. package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
  143. package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
  144. package/docs/plugins/jspsych-webgazer-calibrate.md +0 -60
  145. package/docs/plugins/jspsych-webgazer-init-camera.md +0 -31
  146. package/docs/plugins/jspsych-webgazer-validate.md +0 -43
  147. package/docs/plugins/list-of-plugins.md +0 -54
  148. package/docs/tutorials/hello-world.md +0 -162
  149. package/docs/tutorials/rt-task.md +0 -1334
  150. package/docs/tutorials/video-tutorials.md +0 -11
  151. package/examples/add-to-end-of-timeline.html +0 -38
  152. package/examples/case-sensitive-responses.html +0 -45
  153. package/examples/conditional-and-loop-functions.html +0 -64
  154. package/examples/css/jquery-ui.css +0 -1225
  155. package/examples/css-classes-parameter.html +0 -145
  156. package/examples/data-add-properties.html +0 -44
  157. package/examples/data-as-function.html +0 -39
  158. package/examples/data-from-timeline.html +0 -52
  159. package/examples/data-from-url.html +0 -21
  160. package/examples/demo-flanker.html +0 -117
  161. package/examples/demo-simple-rt-task.html +0 -120
  162. package/examples/demos/demo_1.html +0 -35
  163. package/examples/demos/demo_2.html +0 -50
  164. package/examples/demos/demo_3.html +0 -63
  165. package/examples/display-element-to-embed-experiment.html +0 -79
  166. package/examples/end-active-node.html +0 -52
  167. package/examples/end-experiment.html +0 -45
  168. package/examples/exclusions.html +0 -32
  169. package/examples/external_html/simple_consent.html +0 -4
  170. package/examples/img/1.gif +0 -0
  171. package/examples/img/10.gif +0 -0
  172. package/examples/img/11.gif +0 -0
  173. package/examples/img/12.gif +0 -0
  174. package/examples/img/2.gif +0 -0
  175. package/examples/img/3.gif +0 -0
  176. package/examples/img/4.gif +0 -0
  177. package/examples/img/5.gif +0 -0
  178. package/examples/img/6.gif +0 -0
  179. package/examples/img/7.gif +0 -0
  180. package/examples/img/8.gif +0 -0
  181. package/examples/img/9.gif +0 -0
  182. package/examples/img/age/of1.jpg +0 -0
  183. package/examples/img/age/of2.jpg +0 -0
  184. package/examples/img/age/of3.jpg +0 -0
  185. package/examples/img/age/om1.jpg +0 -0
  186. package/examples/img/age/om2.jpg +0 -0
  187. package/examples/img/age/om3.jpg +0 -0
  188. package/examples/img/age/yf1.jpg +0 -0
  189. package/examples/img/age/yf4.jpg +0 -0
  190. package/examples/img/age/yf5.jpg +0 -0
  191. package/examples/img/age/ym2.jpg +0 -0
  192. package/examples/img/age/ym3.jpg +0 -0
  193. package/examples/img/age/ym5.jpg +0 -0
  194. package/examples/img/backwardN.gif +0 -0
  195. package/examples/img/blue.png +0 -0
  196. package/examples/img/card.png +0 -0
  197. package/examples/img/con1.png +0 -0
  198. package/examples/img/con2.png +0 -0
  199. package/examples/img/fixation.gif +0 -0
  200. package/examples/img/happy_face_1.jpg +0 -0
  201. package/examples/img/happy_face_2.jpg +0 -0
  202. package/examples/img/happy_face_3.jpg +0 -0
  203. package/examples/img/happy_face_4.jpg +0 -0
  204. package/examples/img/inc1.png +0 -0
  205. package/examples/img/inc2.png +0 -0
  206. package/examples/img/normalN.gif +0 -0
  207. package/examples/img/orange.png +0 -0
  208. package/examples/img/redX.png +0 -0
  209. package/examples/img/ribbon.jpg +0 -0
  210. package/examples/img/sad_face_1.jpg +0 -0
  211. package/examples/img/sad_face_2.jpg +0 -0
  212. package/examples/img/sad_face_3.jpg +0 -0
  213. package/examples/img/sad_face_4.jpg +0 -0
  214. package/examples/js/snap.svg-min.js +0 -21
  215. package/examples/js/webgazer.js +0 -88886
  216. package/examples/jspsych-RDK.html +0 -58
  217. package/examples/jspsych-animation.html +0 -39
  218. package/examples/jspsych-audio-button-response.html +0 -58
  219. package/examples/jspsych-audio-keyboard-response.html +0 -68
  220. package/examples/jspsych-audio-slider-response.html +0 -61
  221. package/examples/jspsych-call-function.html +0 -32
  222. package/examples/jspsych-canvas-button-response.html +0 -95
  223. package/examples/jspsych-canvas-keyboard-response.html +0 -78
  224. package/examples/jspsych-canvas-slider-response.html +0 -67
  225. package/examples/jspsych-categorize-animation.html +0 -49
  226. package/examples/jspsych-categorize-html.html +0 -33
  227. package/examples/jspsych-categorize-image.html +0 -44
  228. package/examples/jspsych-cloze.html +0 -37
  229. package/examples/jspsych-free-sort.html +0 -109
  230. package/examples/jspsych-fullscreen.html +0 -45
  231. package/examples/jspsych-html-button-response.html +0 -43
  232. package/examples/jspsych-html-keyboard-response.html +0 -42
  233. package/examples/jspsych-html-slider-response.html +0 -53
  234. package/examples/jspsych-iat.html +0 -520
  235. package/examples/jspsych-image-button-response.html +0 -91
  236. package/examples/jspsych-image-keyboard-response.html +0 -85
  237. package/examples/jspsych-image-slider-response.html +0 -85
  238. package/examples/jspsych-instructions.html +0 -37
  239. package/examples/jspsych-maxdiff.html +0 -33
  240. package/examples/jspsych-preload.html +0 -140
  241. package/examples/jspsych-reconstruction.html +0 -43
  242. package/examples/jspsych-resize.html +0 -34
  243. package/examples/jspsych-same-different-html.html +0 -28
  244. package/examples/jspsych-same-different-image.html +0 -39
  245. package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
  246. package/examples/jspsych-serial-reaction-time.html +0 -54
  247. package/examples/jspsych-survey-html-form.html +0 -33
  248. package/examples/jspsych-survey-likert.html +0 -42
  249. package/examples/jspsych-survey-multi-choice.html +0 -40
  250. package/examples/jspsych-survey-multi-select.html +0 -42
  251. package/examples/jspsych-survey-text.html +0 -34
  252. package/examples/jspsych-video-button-response.html +0 -65
  253. package/examples/jspsych-video-keyboard-response.html +0 -61
  254. package/examples/jspsych-video-slider-response.html +0 -63
  255. package/examples/jspsych-virtual-chinrest.html +0 -69
  256. package/examples/jspsych-visual-search-circle.html +0 -64
  257. package/examples/jspsych-vsl-animate-occlusion.html +0 -35
  258. package/examples/jspsych-vsl-grid-scene.html +0 -47
  259. package/examples/lexical-decision.html +0 -134
  260. package/examples/manual-preloading.html +0 -59
  261. package/examples/pause-unpause.html +0 -33
  262. package/examples/progress-bar.html +0 -68
  263. package/examples/save-trial-parameters.html +0 -98
  264. package/examples/sound/hammer.mp3 +0 -0
  265. package/examples/sound/sound.mp3 +0 -0
  266. package/examples/sound/speech_blue.mp3 +0 -0
  267. package/examples/sound/speech_green.mp3 +0 -0
  268. package/examples/sound/speech_joke.mp3 +0 -0
  269. package/examples/sound/speech_red.mp3 +0 -0
  270. package/examples/sound/tone.mp3 +0 -0
  271. package/examples/timeline-variables-sampling.html +0 -50
  272. package/examples/timeline-variables.html +0 -64
  273. package/examples/video/sample_video.mp4 +0 -0
  274. package/examples/webgazer.html +0 -162
  275. package/examples/webgazer_image.html +0 -60
  276. package/extensions/jspsych-ext-webgazer.js +0 -185
  277. package/jspsych.js +0 -3015
  278. package/license.txt +0 -21
  279. package/mkdocs.yml +0 -118
  280. package/plugins/jspsych-animation.js +0 -189
  281. package/plugins/jspsych-audio-button-response.js +0 -269
  282. package/plugins/jspsych-audio-keyboard-response.js +0 -212
  283. package/plugins/jspsych-audio-slider-response.js +0 -278
  284. package/plugins/jspsych-call-function.js +0 -58
  285. package/plugins/jspsych-canvas-button-response.js +0 -199
  286. package/plugins/jspsych-canvas-keyboard-response.js +0 -155
  287. package/plugins/jspsych-canvas-slider-response.js +0 -207
  288. package/plugins/jspsych-categorize-animation.js +0 -266
  289. package/plugins/jspsych-categorize-html.js +0 -220
  290. package/plugins/jspsych-categorize-image.js +0 -222
  291. package/plugins/jspsych-cloze.js +0 -112
  292. package/plugins/jspsych-external-html.js +0 -112
  293. package/plugins/jspsych-free-sort.js +0 -478
  294. package/plugins/jspsych-fullscreen.js +0 -106
  295. package/plugins/jspsych-html-button-response.js +0 -188
  296. package/plugins/jspsych-html-keyboard-response.js +0 -149
  297. package/plugins/jspsych-html-slider-response.js +0 -202
  298. package/plugins/jspsych-iat-html.js +0 -284
  299. package/plugins/jspsych-iat-image.js +0 -286
  300. package/plugins/jspsych-image-button-response.js +0 -327
  301. package/plugins/jspsych-image-keyboard-response.js +0 -263
  302. package/plugins/jspsych-image-slider-response.js +0 -369
  303. package/plugins/jspsych-instructions.js +0 -237
  304. package/plugins/jspsych-maxdiff.js +0 -173
  305. package/plugins/jspsych-preload.js +0 -345
  306. package/plugins/jspsych-rdk.js +0 -1373
  307. package/plugins/jspsych-reconstruction.js +0 -134
  308. package/plugins/jspsych-resize.js +0 -166
  309. package/plugins/jspsych-same-different-html.js +0 -168
  310. package/plugins/jspsych-same-different-image.js +0 -169
  311. package/plugins/jspsych-serial-reaction-time-mouse.js +0 -212
  312. package/plugins/jspsych-serial-reaction-time.js +0 -247
  313. package/plugins/jspsych-survey-html-form.js +0 -171
  314. package/plugins/jspsych-survey-likert.js +0 -195
  315. package/plugins/jspsych-survey-multi-choice.js +0 -208
  316. package/plugins/jspsych-survey-multi-select.js +0 -232
  317. package/plugins/jspsych-survey-text.js +0 -185
  318. package/plugins/jspsych-video-button-response.js +0 -335
  319. package/plugins/jspsych-video-keyboard-response.js +0 -279
  320. package/plugins/jspsych-video-slider-response.js +0 -351
  321. package/plugins/jspsych-virtual-chinrest.js +0 -471
  322. package/plugins/jspsych-visual-search-circle.js +0 -259
  323. package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
  324. package/plugins/jspsych-vsl-grid-scene.js +0 -103
  325. package/plugins/jspsych-webgazer-calibrate.js +0 -166
  326. package/plugins/jspsych-webgazer-init-camera.js +0 -95
  327. package/plugins/jspsych-webgazer-validate.js +0 -304
  328. package/plugins/template/jspsych-plugin-template.js +0 -35
  329. package/tests/README.md +0 -7
  330. package/tests/jsPsych/case-sensitive-responses.test.js +0 -53
  331. package/tests/jsPsych/css-classes-parameter.test.js +0 -107
  332. package/tests/jsPsych/default-iti.test.js +0 -51
  333. package/tests/jsPsych/default-parameters.test.js +0 -58
  334. package/tests/jsPsych/endexperiment.test.js +0 -49
  335. package/tests/jsPsych/events.test.js +0 -606
  336. package/tests/jsPsych/functions-as-parameters.test.js +0 -210
  337. package/tests/jsPsych/init.test.js +0 -48
  338. package/tests/jsPsych/loads.test.js +0 -7
  339. package/tests/jsPsych/min-rt.test.js +0 -58
  340. package/tests/jsPsych/progressbar.test.js +0 -202
  341. package/tests/jsPsych/timeline-variables.test.js +0 -531
  342. package/tests/jsPsych/timelines.test.js +0 -569
  343. package/tests/jsPsych.data/data-csv-conversion.test.js +0 -85
  344. package/tests/jsPsych.data/data-json-conversion.test.js +0 -120
  345. package/tests/jsPsych.data/datacollection.test.js +0 -117
  346. package/tests/jsPsych.data/datacolumn.test.js +0 -50
  347. package/tests/jsPsych.data/datamodule.test.js +0 -152
  348. package/tests/jsPsych.data/dataparameter.test.js +0 -251
  349. package/tests/jsPsych.data/interactions.test.js +0 -109
  350. package/tests/jsPsych.data/trialparameters.test.js +0 -175
  351. package/tests/jsPsych.extensions/extensions.test.js +0 -207
  352. package/tests/jsPsych.extensions/test-extension.js +0 -42
  353. package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -341
  354. package/tests/jsPsych.pluginAPI/preloads.test.js +0 -43
  355. package/tests/jsPsych.randomization/randomziation.test.js +0 -27
  356. package/tests/jsPsych.utils/utils.test.js +0 -58
  357. package/tests/plugins/plugin-animation.test.js +0 -34
  358. package/tests/plugins/plugin-audio-button-response.test.js +0 -15
  359. package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
  360. package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
  361. package/tests/plugins/plugin-call-function.test.js +0 -49
  362. package/tests/plugins/plugin-categorize-animation.test.js +0 -263
  363. package/tests/plugins/plugin-categorize-html.test.js +0 -17
  364. package/tests/plugins/plugin-categorize-image.test.js +0 -17
  365. package/tests/plugins/plugin-cloze.test.js +0 -157
  366. package/tests/plugins/plugin-free-sort.test.js +0 -106
  367. package/tests/plugins/plugin-fullscreen.test.js +0 -41
  368. package/tests/plugins/plugin-html-button-response.test.js +0 -161
  369. package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
  370. package/tests/plugins/plugin-html-slider-response.test.js +0 -155
  371. package/tests/plugins/plugin-iat-html.test.js +0 -299
  372. package/tests/plugins/plugin-iat-image.test.js +0 -298
  373. package/tests/plugins/plugin-image-button-response.test.js +0 -174
  374. package/tests/plugins/plugin-image-keyboard-response.test.js +0 -147
  375. package/tests/plugins/plugin-image-slider-response.test.js +0 -174
  376. package/tests/plugins/plugin-instructions.test.js +0 -85
  377. package/tests/plugins/plugin-maxdiff.test.js +0 -39
  378. package/tests/plugins/plugin-preload.test.js +0 -916
  379. package/tests/plugins/plugin-rdk.test.js +0 -61
  380. package/tests/plugins/plugin-reconstruction.test.js +0 -16
  381. package/tests/plugins/plugin-resize.test.js +0 -16
  382. package/tests/plugins/plugin-same-different-html.test.js +0 -17
  383. package/tests/plugins/plugin-same-different-image.test.js +0 -17
  384. package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
  385. package/tests/plugins/plugin-serial-reaction-time.test.js +0 -109
  386. package/tests/plugins/plugin-survey-html-form.test.js +0 -44
  387. package/tests/plugins/plugin-survey-likert.test.js +0 -48
  388. package/tests/plugins/plugin-survey-multi-choice.test.js +0 -47
  389. package/tests/plugins/plugin-survey-multi-select.test.js +0 -71
  390. package/tests/plugins/plugin-survey-text.test.js +0 -115
  391. package/tests/plugins/plugin-video-button-response.test.js +0 -32
  392. package/tests/plugins/plugin-video-keyboard-response.test.js +0 -32
  393. package/tests/plugins/plugin-video-slider-response.test.js +0 -31
  394. package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
  395. package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
  396. package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
  397. package/tests/testing-utils.js +0 -13
@@ -1,457 +0,0 @@
1
- # Creating an Experiment: The Timeline
2
-
3
- To create an experiment using jsPsych, you need to specify a timeline that describes the structure of the experiment. The timeline is an ordered set of trials. You must create the timeline before launching the experiment. Most of the code you will write for an experiment will be code to create the timeline. This page walks through the creation of timelines, including very basic examples and more advanced features.
4
-
5
- ## A single trial
6
-
7
- To create a trial, you need to create an object that describes the trial. The most important feature of this object is the `type` parameter. This tells jsPsych which plugin file to use to run the trial. For example, if you want to use the text plugin to display a short message, the trial object would look like this:
8
-
9
- ```javascript
10
- var trial = {
11
- type: 'html-keyboard-response',
12
- stimulus: 'hello world!'
13
- }
14
- ```
15
-
16
- The parameters for this object will depend on the plugin that you choose. Each plugin defines the set of parameters that are needed to run a trial with that plugin. Visit the documentation for a plugin to learn about the parameters that you can use with that plugin.
17
-
18
- To create a timeline with the single trial and run the experiment, just embed the trial object in an array. A timeline is simply an array of trials.
19
-
20
- ```javascript
21
- var timeline = [trial];
22
-
23
- jsPsych.init({
24
- timeline: timeline
25
- });
26
- ```
27
-
28
- To actually create and run this simple example, complete the [hello world tutorial](../tutorials/hello-world.md).
29
-
30
- ## Multiple trials
31
-
32
- Scaling up to multiple trials is straightforward. Just create an object for each trial, and add each object to the timeline array.
33
-
34
- ```javascript
35
- // with lots of trials, it might be easier to add the trials
36
- // to the timeline array as they are defined.
37
- var timeline = [];
38
-
39
- var trial_1 = {
40
- type: 'html-keyboard-response',
41
- stimulus: 'This is trial 1.'
42
- }
43
- timeline.push(trial_1);
44
-
45
- var trial_2 = {
46
- type: 'html-keyboard-response',
47
- stimulus: 'This is trial 2.'
48
- }
49
- timeline.push(trial_2);
50
-
51
- var trial_3 = {
52
- type: 'html-keyboard-response',
53
- stimulus: 'This is trial 3.'
54
- }
55
- timeline.push(trial_3);
56
- ```
57
-
58
- ## Nested timelines
59
-
60
- Each object on the timeline can also have it's own timeline. This is useful for many reasons. One is that it allows you to define common parameters across trials once and have them apply to all the trials on the nested timeline. The example below creates a series of trials using the image-keyboard-response plugin, where the only thing that changes from trial-to-trial is the image file being displayed on the screen.
61
-
62
- ```javascript
63
- var judgment_trials = {
64
- type: 'image-keyboard-response',
65
- prompt: '<p>Press a number 1-7 to indicate how unusual the image is.</p>',
66
- choices: ['1','2','3','4','5','6','7'],
67
- timeline: [
68
- {stimulus: 'image1.png'},
69
- {stimulus: 'image2.png'},
70
- {stimulus: 'image3.png'}
71
- ]
72
- }
73
- ```
74
-
75
- In the above code, the `type`, `prompt`, and `choices` parameters are automatically applied to all of the objects in the `timeline` array. This creates three trials with the same `type`, `prompt`, and `choices` parameters, but different values for the `stimulus` parameter.
76
-
77
- You can also override the values by declaring a new value in the `timeline` array. In the example below, the second trial will display a different prompt message.
78
-
79
- ```javascript
80
- var judgment_trials = {
81
- type: 'image-keyboard-response',
82
- prompt: '<p>Press a number 1-7 to indicate how unusual the image is.</p>',
83
- choices: ['1','2','3','4','5','6','7'],
84
- timeline: [
85
- {stimulus: 'image1.png'},
86
- {stimulus: 'image2.png', prompt: '<p>Press 1 for this trial.</p>'},
87
- {stimulus: 'image3.png'}
88
- ]
89
- }
90
- ```
91
-
92
- Timelines can be nested any number of times.
93
-
94
- ## Timeline variables
95
-
96
- A common pattern in behavioral experiments is to repeat the same procedure many times with slightly different parameters. A procedure might be a single trial, but it also might be a series of trials. One shortcut to implement this pattern is with the approach described in the previous section, but this only works if all the trials use the same plugin type. Timeline variables are a more general solution. With timeline variables you define the procedure once (as a timeline) and specify a set of parameters and their values for each iteration through the timeline.
97
-
98
- What follows is an example of how to use timeline variables. The [simple reaction time tutorial](../tutorials/rt-task.md) also explains how to use timeline variables.
99
-
100
- Suppose we want to create an experiment where people see a set of faces. Perhaps this is a memory experiment and this is the phase of the experiment where the faces are being presented for the first time. In between each face, a fixation cross is displayed on the screen. Without timeline variables, we would need to add many trials to the timeline, alternating between trials showing the fixation cross and trials showing the face and name. This could be done efficiently using a loop or function, but timeline variables make it even easier - as well as adding extra features like sampling and randomization.
101
-
102
- Here's a basic version of the task with timeline variables.
103
-
104
- ```javascript
105
- var face_name_procedure = {
106
- timeline: [
107
- {
108
- type: 'html-keyboard-response',
109
- stimulus: '+',
110
- choices: jsPsych.NO_KEYS,
111
- trial_duration: 500
112
- },
113
- {
114
- type: 'image-keyboard-response',
115
- stimulus: jsPsych.timelineVariable('face'),
116
- choices: jsPsych.NO_KEYS,
117
- trial_duration: 2500
118
- }
119
- ],
120
- timeline_variables: [
121
- { face: 'person-1.jpg' },
122
- { face: 'person-2.jpg' },
123
- { face: 'person-3.jpg' },
124
- { face: 'person-4.jpg' }
125
- ]
126
- }
127
- ```
128
-
129
- In the above version, there are four separate trials defined in the `timeline_variables` parameter. Each trial has a variable `face` and a variable `name`. The `timeline` defines a procedure of showing a fixation cross for 500ms followed by the face and name for 2500ms. This procedure will repeat four times, with the first trial showing Alex, the second Beth, and so on. The variables are referenced within the procedure by calling the `jsPsych.timelineVariable()` method and passing in the name of the variable.
130
-
131
- What if we wanted the stimuli to be a little more complex, with a name displayed below each face? And let's add an additional step where the name is displayed prior to the face appearing. (Maybe this is one condition of an experiment investigating whether the order of name-face or face-name affects retention.)
132
-
133
- This time, instead of using `jsPsych.timelineVariable()` as the stimulus parameter value, we are going to create a dynamic parameter (function), and place the call to `jsPsych.timelineVariable()` inside this function. This will allow us to create a parameter value that combines multiple bits of information, such as one or more of the values that change across trials (which come from the `timeline_variables` array), and/or anything that doesn't change across trials. In this example, we'll need to switch to using the "html-keyboard-response" plugin so that we can define the stimulus as a custom HTML string that contains an image and text (instead of just an image file). The value of the stimulus parameter will be a function that returns an HTML string that contains both the image and the name.
134
- (Note: in previous versions of jsPsych, there's an extra `true` parameter that you must add when calling `jsPsych.timelineVariable()` from inside a function. As of jsPsych v6.3, `jsPsych.timelineVariable()` automatically detects the context in which it's called, so this additional `true` parameter is not required.)
135
-
136
-
137
- ```javascript
138
- var face_name_procedure = {
139
- timeline: [
140
- {
141
- type: 'html-keyboard-response',
142
- stimulus: '+',
143
- choices: jsPsych.NO_KEYS,
144
- trial_duration: 500
145
- },
146
- {
147
- type: 'html-keyboard-response',
148
- stimulus: jsPsych.timelineVariable('name'),
149
- trial_duration: 1000,
150
- choices: jsPsych.NO_KEYS
151
- },
152
- {
153
- type: 'html-keyboard-response',
154
- stimulus: function(){
155
- var html="<img src='"+jsPsych.timelineVariable('face')+"'>";
156
- html += "<p>"+jsPsych.timelineVariable('name')+"</p>";
157
- return html;
158
- },
159
- choices: jsPsych.NO_KEYS,
160
- trial_duration: 2500
161
- }
162
- ],
163
- timeline_variables: [
164
- { face: 'person-1.jpg', name: 'Alex' },
165
- { face: 'person-2.jpg', name: 'Beth' },
166
- { face: 'person-3.jpg', name: 'Chad' },
167
- { face: 'person-4.jpg', name: 'Dave' }
168
- ]
169
- }
170
- ```
171
- ### Random orders of trials
172
-
173
- If we want to randomize the order of the trials, we can set `randomize_order` to `true`.
174
-
175
- ```javascript
176
- var face_name_procedure = {
177
- // timeline parameter hidden to save space ...
178
- timeline_variables: [
179
- { face: 'person-1.jpg', name: 'Alex' },
180
- { face: 'person-2.jpg', name: 'Beth' },
181
- { face: 'person-3.jpg', name: 'Chad' },
182
- { face: 'person-4.jpg', name: 'Dave' }
183
- ],
184
- randomize_order: true
185
- }
186
- ```
187
-
188
- ### Sampling methods
189
-
190
- There are also a set of sampling methods that can be used to select a set of trials from the timeline_variables. Sampling is declared by creating a `sample` parameter. The `sample` parameter is given an object of arguments. The `type` parameter in this object controls the type of sampling that is done. Valid values for `type` are
191
-
192
- * `"with-replacement"`: Sample `size` items from the timeline variables with the possibility of choosing the same item multiple time.
193
- * `"without-replacement"`: Sample `size` itesm from timeline variables, with each item being selected a maximum of 1 time.
194
- * `"fixed-repetitons"`: Repeat each item in the timeline variables `size` times, in a random order. Unlike using the `repetitons` parameter, this method allows for consecutive trials to use the same timeline variable set.
195
- * `"alternate-groups"`: Sample in an alternating order based on a declared group membership. Groups are defined by the `groups` parameter. This parameter takes an array of arrays, where each inner array is a group and the items in the inner array are the indices of the timeline variables in the `timeline_variables` array that belong to that group.
196
- * `"custom"`: Write a function that returns a custom order of the timeline variables.
197
-
198
- #### Sampling with replacement
199
- ```javascript
200
- var face_name_procedure = {
201
- // timeline parameter hidden to save space ...
202
- timeline_variables: [
203
- { face: 'person-1.jpg', name: 'Alex' },
204
- { face: 'person-2.jpg', name: 'Beth' },
205
- { face: 'person-3.jpg', name: 'Chad' },
206
- { face: 'person-4.jpg', name: 'Dave' }
207
- ],
208
- sample: {
209
- type: 'with-replacement',
210
- size: 10, // 10 trials, with replacement
211
- }
212
- }
213
- ```
214
-
215
- #### Sampling with replacement, unequal probabilities
216
- ```javascript
217
- var face_name_procedure = {
218
- // timeline parameter hidden to save space ...
219
- timeline_variables: [
220
- { face: 'person-1.jpg', name: 'Alex' },
221
- { face: 'person-2.jpg', name: 'Beth' },
222
- { face: 'person-3.jpg', name: 'Chad' },
223
- { face: 'person-4.jpg', name: 'Dave' }
224
- ],
225
- sample: {
226
- type: 'with-replacement',
227
- size: 10, // 10 trials, with replacement
228
- weights: [3, 1, 1, 1], // The Alex trial is three times as likely to be sampled as the others.
229
- }
230
- }
231
- ```
232
-
233
- #### Sampling without replacement
234
- ```javascript
235
- var face_name_procedure = {
236
- // timeline parameter hidden to save space ...
237
- timeline_variables: [
238
- { face: 'person-1.jpg', name: 'Alex' },
239
- { face: 'person-2.jpg', name: 'Beth' },
240
- { face: 'person-3.jpg', name: 'Chad' },
241
- { face: 'person-4.jpg', name: 'Dave' }
242
- ],
243
- sample: {
244
- type: 'without-replacement',
245
- size: 3, // 3 trials, without replacement
246
- }
247
- }
248
- ```
249
-
250
- #### Repeating each trial a fixed number of times in a random order
251
- ```javascript
252
- var face_name_procedure = {
253
- // timeline parameter hidden to save space ...
254
- timeline_variables: [
255
- { face: 'person-1.jpg', name: 'Alex' },
256
- { face: 'person-2.jpg', name: 'Beth' },
257
- { face: 'person-3.jpg', name: 'Chad' },
258
- { face: 'person-4.jpg', name: 'Dave' }
259
- ],
260
- sample: {
261
- type: 'fixed-repetitions',
262
- size: 3, // 3 repetitions of each trial, 12 total trials, order is randomized.
263
- }
264
- }
265
- ```
266
-
267
- #### Alternating groups
268
- ```javascript
269
- var face_name_procedure = {
270
- // timeline parameter hidden to save space ...
271
- timeline_variables: [
272
- { face: 'person-1.jpg', name: 'Alex' },
273
- { face: 'person-2.jpg', name: 'Beth' },
274
- { face: 'person-3.jpg', name: 'Chad' },
275
- { face: 'person-4.jpg', name: 'Dave' }
276
- ],
277
- sample: {
278
- type: 'alternate-groups',
279
- groups: [[0,2],[1,3]], // Alex and Chad are in group 1. Beth and Dave are in group 2.
280
- randomize_group_order: false // The first trial will be an item from group 1.
281
- }
282
- }
283
- ```
284
-
285
- #### Custom sampling function
286
- ```javascript
287
- var face_name_procedure = {
288
- // timeline parameter hidden to save space ...
289
- timeline_variables: [
290
- { face: 'person-1.jpg', name: 'Alex' },
291
- { face: 'person-2.jpg', name: 'Beth' },
292
- { face: 'person-3.jpg', name: 'Chad' },
293
- { face: 'person-4.jpg', name: 'Dave' }
294
- ],
295
- sample: {
296
- type: 'custom',
297
- fn: function(t){
298
- // the first parameter to this function call is an array of integers
299
- // from 0 to n-1, where n is the number of trials.
300
- // the method needs to return an array of integers specifying the order
301
- // that the trials should be executed. this array does not need to
302
- // contain all of the integers.
303
-
304
- return t.reverse(); // show the trials in the reverse order
305
- }
306
- }
307
- }
308
- ```
309
-
310
- ## Repeating a set of trials
311
-
312
- To repeat a timeline multiple times, you can create an object (node) that contains a `timeline`, which is the timeline array to repeat, and `repetitions`, which is the number of times to repeat that timeline.
313
-
314
- ```javascript
315
- var trial = {
316
- type: 'html-keyboard-response',
317
- stimulus: 'This trial will be repeated twice.'
318
- }
319
-
320
- var node = {
321
- timeline: [trial],
322
- repetitions: 2
323
- }
324
- ```
325
-
326
- The `repetitions` parameter can be used alongside other node parameters, such as timeline variables, loop functions, and/or conditional functions. If you are using `timeline_variables` and `randomize_order` is `true`, then the order of the timeline variables will re-randomize before every repetition.
327
-
328
- ```javascript
329
- var face_name_procedure = {
330
- // timeline parameter hidden to save space ...
331
- timeline_variables: [
332
- { face: 'person-1.jpg', name: 'Alex' },
333
- { face: 'person-2.jpg', name: 'Beth' },
334
- { face: 'person-3.jpg', name: 'Chad' },
335
- { face: 'person-4.jpg', name: 'Dave' }
336
- ],
337
- randomize_order: true,
338
- repetitions: 3
339
- }
340
- ```
341
-
342
- ## Looping timelines
343
-
344
- Any timeline can be looped using the `loop_function` option. The loop function should be a function that evaluates to `true` if the timeline should repeat, and `false` if the timeline should end. It receives a single parameter, named `data` by convention. This parameter will be the [DataCollection object](/core_library/jspsych-data/#datacollection) with all of the data from the trials executed in the last iteration of the timeline. The loop function will be evaluated after the timeline is completed.
345
-
346
- ```javascript
347
- var trial = {
348
- type: 'html-keyboard-response',
349
- stimulus: 'This trial is in a loop. Press R to repeat this trial, or C to continue.'
350
- }
351
-
352
- var loop_node = {
353
- timeline: [trial],
354
- loop_function: function(data){
355
- if(jsPsych.pluginAPI.compareKeys(data.values()[0].response, 'r')){
356
- return true;
357
- } else {
358
- return false;
359
- }
360
- }
361
- }
362
- ```
363
-
364
- ## Conditional timelines
365
-
366
- A timeline can be skipped based on the evaluation of a function using the `conditional_function` option. If the conditional function evaluates to `true`, the timeline will execute normally. If the conditional function evaluates to `false`, then the timeline will be skipped. The conditional function is evaluated whenever the timeline is about to run the first trial.
367
-
368
- ```javascript
369
- var pre_if_trial = {
370
- type: 'html-keyboard-response',
371
- stimulus: 'The next trial is in a conditional statement. Press S to skip it, or V to view it.'
372
- }
373
-
374
- var if_trial = {
375
- type: 'html-keyboard-response',
376
- stimulus: 'You chose to view the trial. Press any key to continue.'
377
- }
378
-
379
- var if_node = {
380
- timeline: [if_trial],
381
- conditional_function: function(){
382
- // get the data from the previous trial,
383
- // and check which key was pressed
384
- var data = jsPsych.data.get().last(1).values()[0];
385
- if(jsPsych.pluginAPI.compareKeys(data.response, 's')){
386
- return false;
387
- } else {
388
- return true;
389
- }
390
- }
391
- }
392
-
393
- var after_if_trial = {
394
- type: 'html-keyboard-response',
395
- stimulus: 'This is the trial after the conditional.'
396
- }
397
-
398
- jsPsych.init({
399
- timeline: [pre_if_trial, if_node, after_if_trial],
400
- on_finish: function(){jsPsych.data.displayData(); }
401
- });
402
- ```
403
-
404
- ## Timeline start and finish functions
405
-
406
- You can run a custom function at the start and end of a timeline node using the `on_timeline_start` and `on_timeline_finish` callback function parameters. These are functions that will run when the timeline starts and ends, respectively.
407
-
408
- ```javascript
409
- var procedure = {
410
- timeline: [trial_1, trial_2],
411
- on_timeline_start: function() {
412
- console.log('The trial procedure just started.')
413
- },
414
- on_timeline_finish: function() {
415
- console.log('The trial procedure just finished.')
416
- }
417
- }
418
- ```
419
-
420
- This works the same way with timeline variables. The `on_timeline_start` and `on_timeline_finish` functions will run when timeline variables trials start and end, respectively.
421
-
422
- ```javascript
423
- var face_name_procedure = {
424
- // timeline parameter hidden to save space ...
425
- timeline_variables: [
426
- { face: 'person-1.jpg', name: 'Alex' },
427
- { face: 'person-2.jpg', name: 'Beth' },
428
- { face: 'person-3.jpg', name: 'Chad' },
429
- { face: 'person-4.jpg', name: 'Dave' }
430
- ],
431
- randomize_order: true,
432
- on_timeline_start: function() {
433
- console.log('First trial is starting.')
434
- },
435
- on_timeline_finish: function() {
436
- console.log('Last trial just finished.')
437
- }
438
- }
439
- ```
440
-
441
- When the `repetititons` option is used (and is greater than 1), these functions will run once per repetition of the timeline.
442
-
443
- ```javascript
444
- var repetition_count = 0;
445
-
446
- var procedure = {
447
- timeline: [trial_1, trial_2],
448
- repetitions: 3,
449
- on_timeline_start: function() {
450
- repetition_count++;
451
- console.log('Repetition number ',repetition_count,' has just started.');
452
- },
453
- on_timeline_finish: function() {
454
- console.log('Repetition number ',repetition_count,' has just finished.')
455
- }
456
- }
457
- ```
@@ -1,40 +0,0 @@
1
- # jspsych-animation
2
-
3
- This plugin displays a sequence of images at a fixed frame rate. The sequence can be looped a specified number of times. The subject is free to respond at any point during the animation, and the time of the response is recorded.
4
-
5
- ## Parameters
6
-
7
- In addition to the [parameters available in all plugins](/overview/plugins#parameters-available-in-all-plugins), this plugin accepts the following parameters. Parameters with a default value of *undefined* must be specified. Other parameters can be left unspecified if the default value is acceptable.
8
-
9
- Parameter | Type | Default Value | Description
10
- ----------|------|---------------|------------
11
- stimuli | array | *undefined* | Each element of the array is a path to an image file.
12
- frame_time | numeric | 250 | How long to display each image (in milliseconds).
13
- frame_isi | numeric | 0 | If greater than 0, then a gap will be shown between each image in the sequence. This parameter specifies the length of the gap.
14
- sequence_reps | numeric | 1 | How many times to show the entire sequence. There will be no gap (other than the gap specified by `frame_isi`) between repetitions.
15
- choices | array of strings | `jsPsych.ALL_KEYS` | This array contains the key(s) that the subject is allowed to press in order to respond to the stimulus. Keys should be specified as characters (e.g., `'a'`, `'q'`, `' '`, `'Enter'`, `'ArrowDown'`) - see [this page](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) and [this page (event.key column)](https://www.freecodecamp.org/news/javascript-keycode-list-keypress-event-key-codes/) for more examples. Any key presses that are not listed in the array will be ignored. The default value of `jsPsych.ALL_KEYS` means that all keys will be accepted as valid responses. Specifying `jsPsych.NO_KEYS` will mean that no responses are allowed.
16
- prompt | string | null | This string can contain HTML markup. Any content here will be displayed below the stimulus. The intention is that it can be used to provide a reminder about the action the subject is supposed to take (e.g., which key(s) to press).
17
- render_on_canvas | boolean | true | If true, the images will be drawn onto a canvas element. This prevents a blank screen (white flash) between consecutive images in some browsers, like Firefox and Edge. If false, the image will be shown via an img element, as in previous versions of jsPsych.
18
-
19
- ## Data Generated
20
-
21
- In addition to the [default data collected by all plugins](/overview/plugins#data-collected-by-all-plugins), this plugin collects the following data for each trial.
22
-
23
- Name | Type | Value
24
- -----|------|------
25
- animation_sequence | array | An array, where each element is an object that represents a stimulus in the animation sequence. Each object has a `stimulus` property, which is the image that was displayed, and a `time` property, which is the time in ms, measured from when the sequence began, that the stimulus was displayed. The array will be encoded in JSON format when data is saved using either the `.json()` or `.csv()` functions.
26
- response | array | An array, where each element is an object representing a response given by the subject. Each object has a `stimulus` property, indicating which image was displayed when the key was pressed, an `rt` property, indicating the time of the key press relative to the start of the animation, and a `key_press` property, indicating which key was pressed. The array will be encoded in JSON format when data is saved using either the `.json()` or `.csv()` functions.
27
-
28
- ## Examples
29
-
30
- #### Displaying a single sequence multiple times
31
-
32
- ```javascript
33
- var animation_sequence = ["img/face_1.jpg", "img/face_2.jpg", "img/face_3.jpg", "img/face_4.jpg", "img/face_3.jpg", "img/face_2.jpg"];
34
-
35
- var animation_trial = {
36
- type: 'animation',
37
- stimuli: animation_sequence,
38
- sequence_reps: 3
39
- };
40
- ```
@@ -1,60 +0,0 @@
1
- # jspsych-audio-button-response
2
-
3
- This plugin plays audio files and records responses generated with a button click.
4
-
5
- If the browser supports it, audio files are played using the WebAudio API. This allows for reasonably precise timing of the playback. The timing of responses generated is measured against the WebAudio specific clock, improving the measurement of response times. If the browser does not support the WebAudio API, then the audio file is played with HTML5 audio.
6
-
7
- Audio files can be automatically preloaded by jsPsych using the [`preload` plugin](jspsych-preload.md). However, if you are using timeline variables or another dynamic method to specify the audio stimulus, you will need to [manually preload](/overview/media-preloading/#manual-preloading) the audio.
8
-
9
- The trial can end when the subject responds, when the audio file has finished playing, or if the subject has failed to respond within a fixed length of time. You can also prevent a button response from being made before the audio has finished playing.
10
-
11
- ## Parameters
12
-
13
- In addition to the [parameters available in all plugins](/overview/plugins#parameters-available-in-all-plugins), this plugin accepts the following parameters. Parameters with a default value of *undefined* must be specified. Other parameters can be left unspecified if the default value is acceptable.
14
-
15
- | Parameter | Type | Default Value | Description |
16
- | ------------------------------ | ---------------- | ---------------------------------------- | ---------------------------------------- |
17
- | stimulus | audio file | *undefined* | Path to audio file to be played. |
18
- | choices | array of strings | *undefined* | Labels for the buttons. Each different string in the array will generate a different button. |
19
- | button_html | HTML string | `'<button class="jspsych-btn">%choice%</button>'` | A template of HTML for generating the button elements. You can override this to create customized buttons of various kinds. The string `%choice%` will be changed to the corresponding element of the `choices` array. You may also specify an array of strings, if you need different HTML to render for each button. If you do specify an array, the `choices` array and this array must have the same length. The HTML from position 0 in the `button_html` array will be used to create the button for element 0 in the `choices` array, and so on. |
20
- | prompt | string | null | This string can contain HTML markup. Any content here will be displayed below the stimulus. The intention is that it can be used to provide a reminder about the action the subject is supposed to take (e.g., which key to press). |
21
- | trial_duration | numeric | null | How long to wait for the subject to make a response before ending the trial in milliseconds. If the subject fails to make a response before this timer is reached, the subject's response will be recorded as null for the trial and the trial will end. If the value of this parameter is null, the trial will wait for a response indefinitely. |
22
- | margin_vertical | string | '0px' | Vertical margin of the button(s). |
23
- | margin_horizontal | string | '8px' | Horizontal margin of the button(s). |
24
- | response_ends_trial | boolean | true | If true, then the trial will end whenever the subject makes a response (assuming they make their response before the cutoff specified by the `trial_duration` parameter). If false, then the trial will continue until the value for `trial_duration` is reached. You can set this parameter to `false` to force the subject to listen to the stimulus for a fixed amount of time, even if they respond before the time is complete. |
25
- | trial_ends_after_audio | boolean | false | If true, then the trial will end as soon as the audio file finishes playing. |
26
- | response_allowed_while_playing | boolean | true | If true, then responses are allowed while the audio is playing. If false, then the audio must finish playing before the button choices are enabled and a response is accepted. Once the audio has played all the way through, the buttons are enabled and a response is allowed (including while the audio is being re-played via on-screen playback controls). |
27
-
28
- ## Data Generated
29
-
30
- In addition to the [default data collected by all plugins](/overview/plugins#data-collected-by-all-plugins), this plugin collects the following data for each trial.
31
-
32
- | Name | Type | Value |
33
- | -------------- | ------- | ---------------------------------------- |
34
- | rt | numeric | The response time in milliseconds for the subject to make a response. The time is measured from when the stimulus first began playing until the subject's response. |
35
- | response | numeric | Indicates which button the subject pressed. The first button in the `choices` array is 0, the second is 1, and so on. |
36
-
37
- ## Examples
38
-
39
- #### Displaying question until subject gives a response
40
-
41
- ```javascript
42
- var trial = {
43
- type: 'audio-button-response',
44
- stimulus: 'sound/tone.mp3',
45
- choices: ['Low', 'High'],
46
- prompt: "<p>Is the pitch high or low?</p>"
47
- };
48
- ```
49
-
50
- #### Using custom button HTML to use images as buttons
51
-
52
- ```javascript
53
- var trial = {
54
- type: 'audio-button-response',
55
- stimulus: 'sound/roar.mp3',
56
- choices: ['lion.png', 'elephant.png', 'monkey.png'],
57
- prompt: "<p>Which animal made the sound?</p>",
58
- button_html: '<img src="%choice%" />'
59
- };
60
- ```
@@ -1,58 +0,0 @@
1
- # jspsych-audio-keyboard-response
2
-
3
- This plugin plays audio files and records responses generated with the keyboard.
4
-
5
- If the browser supports it, audio files are played using the WebAudio API. This allows for reasonably precise timing of the playback. The timing of responses generated is measured against the WebAudio specific clock, improving the measurement of response times. If the browser does not support the WebAudio API, then the audio file is played with HTML5 audio.
6
-
7
- Audio files can be automatically preloaded by jsPsych using the [`preload` plugin](jspsych-preload.md). However, if you are using timeline variables or another dynamic method to specify the audio stimulus, then you will need to [manually preload](/overview/media-preloading/#manual-preloading) the audio.
8
-
9
- The trial can end when the subject responds, when the audio file has finished playing, or if the subject has failed to respond within a fixed length of time. You can also prevent a keyboard response from being recorded before the audio has finished playing.
10
-
11
- ## Parameters
12
-
13
- In addition to the [parameters available in all plugins](/overview/plugins#parameters-available-in-all-plugins), this plugin accepts the following parameters. Parameters with a default value of undefined must be specified. Other parameters can be left unspecified if the default value is acceptable.
14
-
15
- | Parameter | Type | Default Value | Description |
16
- | ------------------------------ | ---------------- | ------------------ | ---------------------------------------- |
17
- | stimulus | audio file | undefined | Path to audio file to be played. |
18
- | choices | array of strings | `jsPsych.ALL_KEYS` | This array contains the key(s) that the subject is allowed to press in order to respond to the stimulus. Keys should be specified as characters (e.g., `'a'`, `'q'`, `' '`, `'Enter'`, `'ArrowDown'`) - see [this page](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) and [this page (event.key column)](https://www.freecodecamp.org/news/javascript-keycode-list-keypress-event-key-codes/) for more examples. Any key presses that are not listed in the array will be ignored. The default value of `jsPsych.ALL_KEYS` means that all keys will be accepted as valid responses. Specifying `jsPsych.NO_KEYS` will mean that no responses are allowed. |
19
- | prompt | string | null | This string can contain HTML markup. Any content here will be displayed below the stimulus. The intention is that it can be used to provide a reminder about the action the subject is supposed to take (e.g., which key to press). |
20
- | trial_duration | numeric | null | How long to wait for the subject to make a response before ending the trial in milliseconds. If the subject fails to make a response before this timer is reached, the subject's response will be recorded as null for the trial and the trial will end. If the value of this parameter is null, then the trial will wait for a response indefinitely. |
21
- | response_ends_trial | boolean | true | If true, then the trial will end whenever the subject makes a response (assuming they make their response before the cutoff specified by the `trial_duration` parameter). If false, then the trial will continue until the value for `trial_duration` is reached. You can use set this parameter to `false` to force the subject to listen to the stimulus for a fixed amount of time, even if they respond before the time is complete. |
22
- | trial_ends_after_audio | boolean | false | If true, then the trial will end as soon as the audio file finishes playing. |
23
- | response_allowed_while_playing | boolean | true | If true, then responses are allowed while the audio is playing. If false, then the audio must finish playing before a keyboard response is accepted. Once the audio has played all the way through, a valid keyboard response is allowed (including while the audio is being re-played via on-screen playback controls). |
24
-
25
- ## Data Generated
26
-
27
- In addition to the [default data collected by all plugins](/overview/plugins#data-collected-by-all-plugins), this plugin collects the following data for each trial.
28
-
29
- | Name | Type | Value |
30
- | --------- | ------- | ---------------------------------------- |
31
- | response | string | Indicates which key the subject pressed. If no key was pressed before the trial ended, then the value will be `null`. |
32
- | rt | numeric | The response time in milliseconds for the subject to make a response. The time is measured from when the stimulus first began playing until the subject made a key response. If no key was pressed before the trial ended, then the value will be `null`. |
33
- | stimulus | string | Path to the audio file that played during the trial. |
34
-
35
- ## Examples
36
-
37
- #### Displaying trial until subject gives a response
38
-
39
- ```javascript
40
- var trial = {
41
- type: 'audio-keyboard-response',
42
- stimulus: 'sound/tone.mp3',
43
- choices: ['e', 'i'],
44
- prompt: "<p>Is the pitch high or low? Press 'e' for low and 'i' for high.</p>",
45
- response_ends_trial: false
46
- };
47
- ```
48
-
49
- #### Play a sound with no user response; trial ends after sound plays
50
-
51
- ```javascript
52
- var trial = {
53
- type: 'audio-keyboard-response',
54
- stimulus: 'sound/tone.mp3',
55
- choices: jsPsych.NO_KEYS,
56
- trial_ends_after_audio: true
57
- };
58
- ```