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