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,259 +0,0 @@
1
- /**
2
- *
3
- * jspsych-visual-search-circle
4
- * Josh de Leeuw
5
- *
6
- * display a set of objects, with or without a target, equidistant from fixation
7
- * subject responds to whether or not the target is present
8
- *
9
- * based on code written for psychtoolbox by Ben Motz
10
- *
11
- * documentation: docs.jspsych.org
12
- *
13
- **/
14
-
15
- jsPsych.plugins["visual-search-circle"] = (function() {
16
-
17
- var plugin = {};
18
-
19
- jsPsych.pluginAPI.registerPreload('visual-search-circle', 'target', 'image');
20
- jsPsych.pluginAPI.registerPreload('visual-search-circle', 'foil', 'image');
21
- jsPsych.pluginAPI.registerPreload('visual-search-circle', 'fixation_image', 'image');
22
-
23
- plugin.info = {
24
- name: 'visual-search-circle',
25
- description: '',
26
- parameters: {
27
- target: {
28
- type: jsPsych.plugins.parameterType.IMAGE,
29
- pretty_name: 'Target',
30
- default: undefined,
31
- description: 'The image to be displayed.'
32
- },
33
- foil: {
34
- type: jsPsych.plugins.parameterType.IMAGE,
35
- pretty_name: 'Foil',
36
- default: undefined,
37
- description: 'Path to image file that is the foil/distractor.'
38
- },
39
- fixation_image: {
40
- type: jsPsych.plugins.parameterType.IMAGE,
41
- pretty_name: 'Fixation image',
42
- default: undefined,
43
- description: 'Path to image file that is a fixation target.'
44
- },
45
- set_size: {
46
- type: jsPsych.plugins.parameterType.INT,
47
- pretty_name: 'Set size',
48
- default: undefined,
49
- description: 'How many items should be displayed?'
50
- },
51
- target_present: {
52
- type: jsPsych.plugins.parameterType.BOOL,
53
- pretty_name: 'Target present',
54
- default: true,
55
- description: 'Is the target present?'
56
- },
57
- target_size: {
58
- type: jsPsych.plugins.parameterType.INT,
59
- pretty_name: 'Target size',
60
- array: true,
61
- default: [50, 50],
62
- description: 'Two element array indicating the height and width of the search array element images.'
63
- },
64
- fixation_size: {
65
- type: jsPsych.plugins.parameterType.INT,
66
- pretty_name: 'Fixation size',
67
- array: true,
68
- default: [16, 16],
69
- description: 'Two element array indicating the height and width of the fixation image.'
70
- },
71
- circle_diameter: {
72
- type: jsPsych.plugins.parameterType.INT,
73
- pretty_name: 'Circle diameter',
74
- default: 250,
75
- description: 'The diameter of the search array circle in pixels.'
76
- },
77
- target_present_key: {
78
- type: jsPsych.plugins.parameterType.KEYCODE,
79
- pretty_name: 'Target present key',
80
- default: 'j',
81
- description: 'The key to press if the target is present in the search array.'
82
- },
83
- target_absent_key: {
84
- type: jsPsych.plugins.parameterType.KEYCODE,
85
- pretty_name: 'Target absent key',
86
- default: 'f',
87
- description: 'The key to press if the target is not present in the search array.'
88
- },
89
- trial_duration: {
90
- type: jsPsych.plugins.parameterType.INT,
91
- pretty_name: 'Trial duration',
92
- default: null,
93
- description: 'The maximum duration to wait for a response.'
94
- },
95
- fixation_duration: {
96
- type: jsPsych.plugins.parameterType.INT,
97
- pretty_name: 'Fixation duration',
98
- default: 1000,
99
- description: 'How long to show the fixation image for before the search array (in milliseconds).'
100
- }
101
- }
102
- }
103
-
104
- plugin.trial = function(display_element, trial) {
105
-
106
- // circle params
107
- var diam = trial.circle_diameter; // pixels
108
- var radi = diam / 2;
109
- var paper_size = diam + trial.target_size[0];
110
-
111
- // stimuli width, height
112
- var stimh = trial.target_size[0];
113
- var stimw = trial.target_size[1];
114
- var hstimh = stimh / 2;
115
- var hstimw = stimw / 2;
116
-
117
- // fixation location
118
- var fix_loc = [Math.floor(paper_size / 2 - trial.fixation_size[0] / 2), Math.floor(paper_size / 2 - trial.fixation_size[1] / 2)];
119
-
120
- // possible stimulus locations on the circle
121
- var display_locs = [];
122
- var possible_display_locs = trial.set_size;
123
- var random_offset = Math.floor(Math.random() * 360);
124
- for (var i = 0; i < possible_display_locs; i++) {
125
- display_locs.push([
126
- Math.floor(paper_size / 2 + (cosd(random_offset + (i * (360 / possible_display_locs))) * radi) - hstimw),
127
- Math.floor(paper_size / 2 - (sind(random_offset + (i * (360 / possible_display_locs))) * radi) - hstimh)
128
- ]);
129
- }
130
-
131
- // get target to draw on
132
- display_element.innerHTML += '<div id="jspsych-visual-search-circle-container" style="position: relative; width:' + paper_size + 'px; height:' + paper_size + 'px"></div>';
133
- var paper = display_element.querySelector("#jspsych-visual-search-circle-container");
134
-
135
- // check distractors - array?
136
- if(!Array.isArray(trial.foil)){
137
- fa = [];
138
- for(var i=0; i<trial.set_size; i++){
139
- fa.push(trial.foil);
140
- }
141
- trial.foil = fa;
142
- }
143
-
144
- show_fixation();
145
-
146
- function show_fixation() {
147
- // show fixation
148
- //var fixation = paper.image(trial.fixation_image, fix_loc[0], fix_loc[1], trial.fixation_size[0], trial.fixation_size[1]);
149
- paper.innerHTML += "<img src='"+trial.fixation_image+"' style='position: absolute; top:"+fix_loc[0]+"px; left:"+fix_loc[1]+"px; width:"+trial.fixation_size[0]+"px; height:"+trial.fixation_size[1]+"px;'></img>";
150
-
151
- // wait
152
- jsPsych.pluginAPI.setTimeout(function() {
153
- // after wait is over
154
- show_search_array();
155
- }, trial.fixation_duration);
156
- }
157
-
158
- function show_search_array() {
159
-
160
- var search_array_images = [];
161
-
162
- var to_present = [];
163
- if(trial.target_present){
164
- to_present.push(trial.target);
165
- }
166
- to_present = to_present.concat(trial.foil);
167
-
168
- for (var i = 0; i < display_locs.length; i++) {
169
-
170
- paper.innerHTML += "<img src='"+to_present[i]+"' style='position: absolute; top:"+display_locs[i][0]+"px; left:"+display_locs[i][1]+"px; width:"+trial.target_size[0]+"px; height:"+trial.target_size[1]+"px;'></img>";
171
-
172
- }
173
-
174
- var trial_over = false;
175
-
176
- var after_response = function(info) {
177
-
178
- trial_over = true;
179
-
180
- var correct = false;
181
-
182
- if (jsPsych.pluginAPI.compareKeys(info.key,trial.target_present_key) && trial.target_present ||
183
- jsPsych.pluginAPI.compareKeys(info.key,trial.target_absent_key) && !trial.target_present) {
184
- correct = true;
185
- }
186
-
187
- clear_display();
188
-
189
- end_trial(info.rt, correct, info.key);
190
-
191
- }
192
-
193
- var valid_keys = [trial.target_present_key, trial.target_absent_key];
194
-
195
- key_listener = jsPsych.pluginAPI.getKeyboardResponse({
196
- callback_function: after_response,
197
- valid_responses: valid_keys,
198
- rt_method: 'performance',
199
- persist: false,
200
- allow_held_key: false
201
- });
202
-
203
- if (trial.trial_duration !== null) {
204
-
205
- jsPsych.pluginAPI.setTimeout(function() {
206
-
207
- if (!trial_over) {
208
-
209
- jsPsych.pluginAPI.cancelKeyboardResponse(key_listener);
210
-
211
- trial_over = true;
212
-
213
- var rt = null;
214
- var correct = 0;
215
- var key_press = null;
216
-
217
- clear_display();
218
-
219
- end_trial(rt, correct, key_press);
220
- }
221
- }, trial.trial_duration);
222
-
223
- }
224
-
225
- function clear_display() {
226
- display_element.innerHTML = '';
227
- }
228
- }
229
-
230
-
231
- function end_trial(rt, correct, key_press) {
232
-
233
- // data saving
234
- var trial_data = {
235
- correct: correct,
236
- rt: rt,
237
- key_press: key_press,
238
- locations: JSON.stringify(display_locs),
239
- target_present: trial.target_present,
240
- set_size: trial.set_size
241
- };
242
-
243
- // go to next trial
244
- jsPsych.finishTrial(trial_data);
245
- }
246
- };
247
-
248
- // helper function for determining stimulus locations
249
-
250
- function cosd(num) {
251
- return Math.cos(num / 180 * Math.PI);
252
- }
253
-
254
- function sind(num) {
255
- return Math.sin(num / 180 * Math.PI);
256
- }
257
-
258
- return plugin;
259
- })();
@@ -1,196 +0,0 @@
1
- /**
2
- * jsPsych plugin for showing animations that mimic the experiment described in
3
- *
4
- * Fiser, J., & Aslin, R. N. (2002). Statistical learning of higher-order
5
- * temporal structure from visual shape sequences. Journal of Experimental
6
- * Psychology: Learning, Memory, and Cognition, 28(3), 458.
7
- *
8
- * Josh de Leeuw
9
- *
10
- * documentation: docs.jspsych.org
11
- *
12
- */
13
-
14
- jsPsych.plugins['vsl-animate-occlusion'] = (function() {
15
-
16
- var plugin = {};
17
-
18
- jsPsych.pluginAPI.registerPreload('vsl-animate-occlusion', 'stimuli', 'image');
19
-
20
- plugin.info = {
21
- name: 'vsl-animate-occlusion',
22
- description: '',
23
- parameters: {
24
- stimuli: {
25
- type: jsPsych.plugins.parameterType.IMAGE,
26
- pretty_name: 'Stimuli',
27
- default: undefined,
28
- array: true,
29
- description: 'A stimulus is a path to an image file.'
30
- },
31
- choices: {
32
- type: jsPsych.plugins.parameterType.KEYCODE,
33
- pretty_name: 'Choices',
34
- array: true,
35
- default: jsPsych.ALL_KEYS,
36
- description: 'This array contains the keys that the subject is allowed to press in order to respond to the stimulus. '
37
- },
38
- canvas_size: {
39
- type: jsPsych.plugins.parameterType.INT,
40
- pretty_name: 'Canvas size',
41
- array: true,
42
- default: [400,400],
43
- description: 'Array specifying the width and height of the area that the animation will display in.'
44
- },
45
- image_size: {
46
- type: jsPsych.plugins.parameterType.INT,
47
- pretty_name: 'Image size',
48
- array: true,
49
- default: [100,100],
50
- description: 'Array specifying the width and height of the images to show.'
51
- },
52
- initial_direction: {
53
- type: jsPsych.plugins.parameterType.SELECT,
54
- pretty_name: 'Initial direction',
55
- choices: ['left','right'],
56
- default: 'left',
57
- description: 'Which direction the stimulus should move first.'
58
- },
59
- occlude_center: {
60
- type: jsPsych.plugins.parameterType.BOOL,
61
- pretty_name: 'Occlude center',
62
- default: true,
63
- description: 'If true, display a rectangle in the center of the screen that is just wide enough to occlude the image completely as it passes behind.'
64
- },
65
- cycle_duration: {
66
- type: jsPsych.plugins.parameterType.INT,
67
- pretty_name: 'Cycle duration',
68
- default: 1000,
69
- description: 'How long it takes for a stimulus in the sequence to make a complete cycle.'
70
- },
71
- pre_movement_duration: {
72
- type: jsPsych.plugins.parameterType.INT,
73
- pretty_name: 'Pre movement duration',
74
- default: 500,
75
- description: 'How long to wait before the stimuli starts moving from behind the center rectangle.'
76
- }
77
- }
78
- }
79
-
80
- plugin.trial = function(display_element, trial) {
81
-
82
- // variable to keep track of timing info and responses
83
- var start_time = 0;
84
- var responses = [];
85
-
86
- var directions = [
87
- [{
88
- params: {
89
- x: trial.canvas_size[0] - trial.image_size[0]
90
- },
91
- ms: trial.cycle_duration / 2
92
- }, {
93
- params: {
94
- x: trial.canvas_size[0] / 2 - trial.image_size[0] / 2
95
- },
96
- ms: trial.cycle_duration / 2
97
- }],
98
- [{
99
- params: {
100
- x: 0
101
- },
102
- ms: trial.cycle_duration / 2
103
- }, {
104
- params: {
105
- x: trial.canvas_size[0] / 2 - trial.image_size[0] / 2
106
- },
107
- ms: trial.cycle_duration / 2
108
- }]
109
- ];
110
-
111
- var which_image = 0;
112
- var next_direction = (trial.initial_direction == "right") ? 0 : 1;
113
-
114
- function next_step() {
115
- if (trial.stimuli.length == which_image) {
116
- endTrial();
117
- } else {
118
-
119
- var d = directions[next_direction];
120
- next_direction === 0 ? next_direction = 1 : next_direction = 0;
121
- var i = trial.stimuli[which_image];
122
- which_image++;
123
-
124
- c.animate(d[0].params, d[0].ms, mina.linear, function() {
125
- c.animate(d[1].params, d[1].ms, mina.linear, function() {
126
- next_step();
127
- });
128
- });
129
-
130
- c.attr({
131
- href: i
132
- });
133
-
134
- // start timer for this trial
135
- start_time = performance.now();
136
- }
137
- }
138
-
139
- display_element.innerHTML = "<svg id='jspsych-vsl-animate-occlusion-canvas' width=" + trial.canvas_size[0] + " height=" + trial.canvas_size[1] + "></svg>";
140
-
141
- var paper = Snap("#jspsych-vsl-animate-occlusion-canvas");
142
-
143
- var c = paper.image(trial.stimuli[which_image], trial.canvas_size[0] / 2 - trial.image_size[0] / 2, trial.canvas_size[1] / 2 - trial.image_size[1] / 2, trial.image_size[0], trial.image_size[1]).attr({
144
- "id": 'jspsych-vsl-animate-occlusion-moving-image'
145
- });
146
-
147
- display_element.querySelector('#jspsych-vsl-animate-occlusion-moving-image').removeAttribute('preserveAspectRatio');
148
-
149
- if (trial.occlude_center) {
150
- paper.rect((trial.canvas_size[0] / 2) - (trial.image_size[0] / 2), 0, trial.image_size[0], trial.canvas_size[1]).attr({
151
- fill: "#000"
152
- });
153
- }
154
-
155
- // add key listener
156
- var after_response = function(info) {
157
- responses.push({
158
- key: info.key,
159
- stimulus: which_image - 1,
160
- rt: info.rt
161
- });
162
- }
163
-
164
- key_listener = jsPsych.pluginAPI.getKeyboardResponse({
165
- callback_function: after_response,
166
- valid_responses: trial.choices,
167
- rt_method: 'performance',
168
- persist: true,
169
- allow_held_key: false
170
- });
171
-
172
- if (trial.pre_movement_duration > 0) {
173
- jsPsych.pluginAPI.setTimeout(function() {
174
- next_step();
175
- }, trial.pre_movement_duration);
176
- } else {
177
- next_step();
178
- }
179
-
180
- function endTrial() {
181
-
182
- display_element.innerHTML = '';
183
-
184
- jsPsych.pluginAPI.cancelKeyboardResponse(key_listener);
185
-
186
- var trial_data = {
187
- "stimuli": JSON.stringify(trial.stimuli),
188
- "responses": JSON.stringify(responses)
189
- };
190
-
191
- jsPsych.finishTrial(trial_data);
192
- }
193
- };
194
-
195
- return plugin;
196
- })();
@@ -1,103 +0,0 @@
1
- /**
2
- * jsPsych plugin for showing scenes that mimic the experiments described in
3
- *
4
- * Fiser, J., & Aslin, R. N. (2001). Unsupervised statistical learning of
5
- * higher-order spatial structures from visual scenes. Psychological science,
6
- * 12(6), 499-504.
7
- *
8
- * Josh de Leeuw
9
- *
10
- * documentation: docs.jspsych.org
11
- *
12
- */
13
-
14
- jsPsych.plugins['vsl-grid-scene'] = (function() {
15
-
16
- var plugin = {};
17
-
18
- jsPsych.pluginAPI.registerPreload('vsl-grid-scene', 'stimuli', 'image');
19
-
20
- plugin.info = {
21
- name: 'vsl-grid-scene',
22
- description: '',
23
- parameters: {
24
- stimuli: {
25
- type: jsPsych.plugins.parameterType.IMAGE,
26
- pretty_name: 'Stimuli',
27
- array: true,
28
- default: undefined,
29
- description: 'An array that defines a grid.'
30
- },
31
- image_size: {
32
- type: jsPsych.plugins.parameterType.INT,
33
- pretty_name: 'Image size',
34
- array: true,
35
- default: [100,100],
36
- description: 'Array specifying the width and height of the images to show.'
37
- },
38
- trial_duration: {
39
- type: jsPsych.plugins.parameterType.INT,
40
- pretty_name: 'Trial duration',
41
- default: 2000,
42
- description: 'How long to show the stimulus for in milliseconds.'
43
- }
44
- }
45
- }
46
-
47
- plugin.trial = function(display_element, trial) {
48
-
49
- display_element.innerHTML = plugin.generate_stimulus(trial.stimuli, trial.image_size);
50
-
51
- jsPsych.pluginAPI.setTimeout(function() {
52
- endTrial();
53
- }, trial.trial_duration);
54
-
55
- function endTrial() {
56
-
57
- display_element.innerHTML = '';
58
-
59
- var trial_data = {
60
- "stimulus": JSON.stringify(trial.stimuli)
61
- };
62
-
63
- jsPsych.finishTrial(trial_data);
64
- }
65
- };
66
-
67
- plugin.generate_stimulus = function(pattern, image_size) {
68
- var nrows = pattern.length;
69
- var ncols = pattern[0].length;
70
-
71
- // create blank element to hold code that we generate
72
- var html = '<div id="jspsych-vsl-grid-scene-dummy" css="display: none;">';
73
-
74
- // create table
75
- html += '<table id="jspsych-vsl-grid-scene table" '+
76
- 'style="border-collapse: collapse; margin-left: auto; margin-right: auto;">';
77
-
78
- for (var row = 0; row < nrows; row++) {
79
- html += '<tr id="jspsych-vsl-grid-scene-table-row-'+row+'" css="height: '+image_size[1]+'px;">';
80
-
81
- for (var col = 0; col < ncols; col++) {
82
- html += '<td id="jspsych-vsl-grid-scene-table-' + row + '-' + col +'" '+
83
- 'style="padding: '+ (image_size[1] / 10) + 'px ' + (image_size[0] / 10) + 'px; border: 1px solid #555;">'+
84
- '<div id="jspsych-vsl-grid-scene-table-cell-' + row + '-' + col + '" style="width: '+image_size[0]+'px; height: '+image_size[1]+'px;">';
85
- if (pattern[row][col] !== 0) {
86
- html += '<img '+
87
- 'src="'+pattern[row][col]+'" style="width: '+image_size[0]+'px; height: '+image_size[1]+'"></img>';
88
- }
89
- html += '</div>';
90
- html += '</td>';
91
- }
92
- html += '</tr>';
93
- }
94
-
95
- html += '</table>';
96
- html += '</div>';
97
-
98
- return html;
99
-
100
- };
101
-
102
- return plugin;
103
- })();
@@ -1,35 +0,0 @@
1
- /*
2
- * Example plugin template
3
- */
4
-
5
- jsPsych.plugins["PLUGIN-NAME"] = (function() {
6
-
7
- var plugin = {};
8
-
9
- plugin.info = {
10
- name: "PLUGIN-NAME",
11
- parameters: {
12
- parameter_name: {
13
- type: jsPsych.plugins.parameterType.INT, // BOOL, STRING, INT, FLOAT, FUNCTION, KEYCODE, SELECT, HTML_STRING, IMAGE, AUDIO, VIDEO, OBJECT, COMPLEX
14
- default: undefined
15
- },
16
- parameter_name: {
17
- type: jsPsych.plugins.parameterType.IMAGE,
18
- default: undefined
19
- }
20
- }
21
- }
22
-
23
- plugin.trial = function(display_element, trial) {
24
-
25
- // data saving
26
- var trial_data = {
27
- parameter_name: 'parameter value'
28
- };
29
-
30
- // end trial
31
- jsPsych.finishTrial(trial_data);
32
- };
33
-
34
- return plugin;
35
- })();
package/tests/README.md DELETED
@@ -1,7 +0,0 @@
1
- # Testing jsPsych
2
-
3
- Tests are written with [Jest](https://facebook.github.io/jest/).
4
-
5
- To run the tests, install Node and npm. Run `npm install` in the root jsPsych directory. Then run `npm test`.
6
-
7
- To add tests, follow examples contained in this folder.
@@ -1,51 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- jest.useFakeTimers();
5
-
6
- beforeEach(function(){
7
- require(root + 'jspsych.js');
8
- require(root + 'plugins/jspsych-html-keyboard-response.js');
9
- });
10
-
11
- describe('default iti parameter', function(){
12
- test('has a default value of 0', function(){
13
- var t = {
14
- type: 'html-keyboard-response',
15
- stimulus: 'foo'
16
- }
17
-
18
- var t2 = {
19
- type: 'html-keyboard-response',
20
- stimulus: 'bar'
21
- }
22
-
23
- jsPsych.init({timeline: [t,t2]});
24
-
25
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
26
- utils.pressKey(32);
27
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
28
- utils.pressKey(32);
29
- });
30
-
31
- test('creates a correct delay when set', function(){
32
- var t = {
33
- type: 'html-keyboard-response',
34
- stimulus: 'foo'
35
- }
36
-
37
- var t2 = {
38
- type: 'html-keyboard-response',
39
- stimulus: 'bar'
40
- }
41
-
42
- jsPsych.init({timeline: [t,t2], default_iti: 100});
43
-
44
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
45
- utils.pressKey(32);
46
- expect(jsPsych.getDisplayElement().innerHTML).not.toMatch('bar');
47
- jest.advanceTimersByTime(100);
48
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
49
- utils.pressKey(32);
50
- });
51
- });