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
package/license.txt DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2014-2018 Joshua R. de Leeuw
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
package/mkdocs.yml DELETED
@@ -1,104 +0,0 @@
1
- site_name: jsPsych
2
- theme:
3
- name: 'material'
4
- language: 'en'
5
- palette:
6
- primary: 'green'
7
- accent: 'orange'
8
- logo: 'img/jspsych-logo-no-text-mono.svg'
9
- favicon: 'img/jspsych-favicon.png'
10
- extra:
11
- social:
12
- - icon: 'fontawesome/brands/github'
13
- link: 'https://github.com/jspsych'
14
- - icon: 'fontawesome/brands/twitter'
15
- link: 'https://twitter.com/joshdeleeuw'
16
- copyright: 'Copyright © 2012-2020 Josh de Leeuw'
17
- google_analytics:
18
- - 'UA-50563838-1'
19
- - 'auto'
20
- markdown_extensions:
21
- - admonition
22
- - codehilite:
23
- guess_lang: false
24
- - toc:
25
- permalink: true
26
- repo_url: 'https://github.com/jspsych/jsPsych'
27
- repo_name: 'jspsych/jspsych'
28
- docs_dir: docs
29
- nav:
30
- - Introduction: 'index.md'
31
- - Tutorials:
32
- - 'The Basics: Hello World': 'tutorials/hello-world.md'
33
- - 'Demo Experiment: Simple Reaction Time Task': 'tutorials/rt-task.md'
34
- - Overview:
35
- - 'Creating an Experiment: The Timeline': 'overview/timeline.md'
36
- - 'Advanced Options for Trials': 'overview/trial.md'
37
- - 'Data Storage, Aggregation, and Manipulation': 'overview/data.md'
38
- - 'Running Experiments': 'overview/running-experiments.md'
39
- - 'Experiment Settings': 'overview/experiment-options.md'
40
- - 'Event-related Callback Functions': 'overview/callbacks.md'
41
- - 'Record Browser Interactions': 'overview/record-browser-interactions.md'
42
- - 'Media Preloading': 'overview/media-preloading.md'
43
- - 'Fullscreen Experiments': 'overview/fullscreen.md'
44
- - 'Exclude Participants Based on Browser Features': 'overview/exclude-browser.md'
45
- - 'Automatic Progress Bar': 'overview/progress-bar.md'
46
- - 'Integrating with Mechanical Turk': 'overview/mturk.md'
47
- - 'Browser and Device Support': 'overview/browser-device-support.md'
48
- - Reference:
49
- - 'jsPsych': 'core_library/jspsych-core.md'
50
- - 'jsPsych.data': 'core_library/jspsych-data.md'
51
- - 'jsPsych.randomization': 'core_library/jspsych-randomization.md'
52
- - 'jsPsych.turk': 'core_library/jspsych-turk.md'
53
- - 'jsPsych.pluginAPI': 'core_library/jspsych-pluginAPI.md'
54
- - Plugins:
55
- - 'Overview': 'plugins/overview.md'
56
- - 'Creating a New Plugin': 'plugins/creating-a-plugin.md'
57
- - 'jspsych-animation': 'plugins/jspsych-animation.md'
58
- - 'jspsych-audio-button-response': 'plugins/jspsych-audio-button-response.md'
59
- - 'jspsych-audio-keyboard-response': 'plugins/jspsych-audio-keyboard-response.md'
60
- - 'jspsych-audio-slider-response': 'plugins/jspsych-audio-slider-response.md'
61
- - 'jspsych-canvas-button-response': 'plugins/jspsych-canvas-button-response.md'
62
- - 'jspsych-canvas-keyboard-response': 'plugins/jspsych-canvas-keyboard-response.md'
63
- - 'jspsych-canvas-slider-response': 'plugins/jspsych-canvas-slider-response.md'
64
- - 'jspsych-call-function': 'plugins/jspsych-call-function.md'
65
- - 'jspsych-categorize-animation': 'plugins/jspsych-categorize-animation.md'
66
- - 'jspsych-categorize-html': 'plugins/jspsych-categorize-html.md'
67
- - 'jspsych-categorize-image': 'plugins/jspsych-categorize-image.md'
68
- - 'jspsych-cloze' : 'plugins/jspsych-cloze.md'
69
- - 'jspsych-external-html': 'plugins/jspsych-external-html.md'
70
- - 'jspsych-free-sort': 'plugins/jspsych-free-sort.md'
71
- - 'jspsych-fullscreen': 'plugins/jspsych-fullscreen.md'
72
- - 'jspsych-html-button-response': 'plugins/jspsych-html-button-response.md'
73
- - 'jspsych-html-keyboard-response': 'plugins/jspsych-html-keyboard-response.md'
74
- - 'jspsych-html-slider-response': 'plugins/jspsych-html-slider-response.md'
75
- - 'jspsych-iat-html': 'plugins/jspsych-iat-html.md'
76
- - 'jspsych-iat-image': 'plugins/jspsych-iat-image.md'
77
- - 'jspsych-image-button-response': 'plugins/jspsych-image-button-response.md'
78
- - 'jspsych-image-keyboard-response': 'plugins/jspsych-image-keyboard-response.md'
79
- - 'jspsych-image-slider-response': 'plugins/jspsych-image-slider-response.md'
80
- - 'jspsych-instructions': 'plugins/jspsych-instructions.md'
81
- - 'jspsych-maxdiff': 'plugins/jspsych-maxdiff.md'
82
- - 'jspsych-rdk': 'plugins/jspsych-rdk.md'
83
- - 'jspsych-reconstruction': 'plugins/jspsych-reconstruction.md'
84
- - 'jspsych-resize': 'plugins/jspsych-resize.md'
85
- - 'jspsych-same-different-html': 'plugins/jspsych-same-different-html.md'
86
- - 'jspsych-same-different-image': 'plugins/jspsych-same-different-image.md'
87
- - 'jspsych-serial-reaction-time': 'plugins/jspsych-serial-reaction-time.md'
88
- - 'jspsych-serial-reaction-time-mouse': 'plugins/jspsych-serial-reaction-time-mouse.md'
89
- - 'jspsych-survey-html-form' : 'plugins/jspsych-survey-html-form.md'
90
- - 'jspsych-survey-likert': 'plugins/jspsych-survey-likert.md'
91
- - 'jspsych-survey-multi-choice': 'plugins/jspsych-survey-multi-choice.md'
92
- - 'jspsych-survey-multi-select': 'plugins/jspsych-survey-multi-select.md'
93
- - 'jspsych-survey-text': 'plugins/jspsych-survey-text.md'
94
- - 'jspsych-video-button-response': 'plugins/jspsych-video-button-response.md'
95
- - 'jspsych-video-keyboard-response': 'plugins/jspsych-video-keyboard-response.md'
96
- - 'jspsych-video-slider-response': 'plugins/jspsych-video-slider-response.md'
97
- - 'jspsych-visual-search-circle': 'plugins/jspsych-visual-search-circle.md'
98
- - 'jspsych-vsl-animate-occlusion': 'plugins/jspsych-vsl-animate-occlusion.md'
99
- - 'jspsych-vsl-grid-scene': 'plugins/jspsych-vsl-grid-scene.md'
100
- - About:
101
- - 'About jsPsych': 'about/about.md'
102
- - 'Getting Help': 'about/support.md'
103
- - 'Contributing to jsPsych': 'about/contributing.md'
104
- - 'License': 'about/license.md'
@@ -1,189 +0,0 @@
1
- /**
2
- * jsPsych plugin for showing animations and recording keyboard responses
3
- * Josh de Leeuw
4
- *
5
- * documentation: docs.jspsych.org
6
- */
7
-
8
- jsPsych.plugins.animation = (function() {
9
-
10
- var plugin = {};
11
-
12
- jsPsych.pluginAPI.registerPreload('animation', 'stimuli', 'image');
13
-
14
- plugin.info = {
15
- name: 'animation',
16
- description: '',
17
- parameters: {
18
- stimuli: {
19
- type: jsPsych.plugins.parameterType.STRING,
20
- pretty_name: 'Stimuli',
21
- default: undefined,
22
- array: true,
23
- description: 'The images to be displayed.'
24
- },
25
- frame_time: {
26
- type: jsPsych.plugins.parameterType.INT,
27
- pretty_name: 'Frame time',
28
- default: 250,
29
- description: 'Duration to display each image.'
30
- },
31
- frame_isi: {
32
- type: jsPsych.plugins.parameterType.INT,
33
- pretty_name: 'Frame gap',
34
- default: 0,
35
- description: 'Length of gap to be shown between each image.'
36
- },
37
- sequence_reps: {
38
- type: jsPsych.plugins.parameterType.INT,
39
- pretty_name: 'Sequence repetitions',
40
- default: 1,
41
- description: 'Number of times to show entire sequence.'
42
- },
43
- choices: {
44
- type: jsPsych.plugins.parameterType.KEYCODE,
45
- pretty_name: 'Choices',
46
- default: jsPsych.ALL_KEYS,
47
- array: true,
48
- description: 'Keys subject uses to respond to stimuli.'
49
- },
50
- prompt: {
51
- type: jsPsych.plugins.parameterType.STRING,
52
- pretty_name: 'Prompt',
53
- default: null,
54
- description: 'Any content here will be displayed below stimulus.'
55
- },
56
- render_on_canvas: {
57
- type: jsPsych.plugins.parameterType.BOOL,
58
- pretty_name: 'Render on canvas',
59
- default: true,
60
- description: 'If true, the images will be drawn onto a canvas element (prevents blank screen between consecutive images in some browsers).'+
61
- 'If false, the image will be shown via an img element.'
62
- }
63
- }
64
- }
65
-
66
- plugin.trial = function(display_element, trial) {
67
-
68
- var interval_time = trial.frame_time + trial.frame_isi;
69
- var animate_frame = -1;
70
- var reps = 0;
71
- var startTime = performance.now();
72
- var animation_sequence = [];
73
- var responses = [];
74
- var current_stim = "";
75
-
76
- if (trial.render_on_canvas) {
77
- // first clear the display element (because the render_on_canvas method appends to display_element instead of overwriting it with .innerHTML)
78
- if (display_element.hasChildNodes()) {
79
- // can't loop through child list because the list will be modified by .removeChild()
80
- while (display_element.firstChild) {
81
- display_element.removeChild(display_element.firstChild);
82
- }
83
- }
84
- var canvas = document.createElement("canvas");
85
- canvas.id = "jspsych-animation-image";
86
- canvas.style.margin = 0;
87
- canvas.style.padding = 0;
88
- display_element.insertBefore(canvas, null);
89
- var ctx = canvas.getContext("2d");
90
- }
91
-
92
- var animate_interval = setInterval(function() {
93
- var showImage = true;
94
- if (!trial.render_on_canvas) {
95
- display_element.innerHTML = ''; // clear everything
96
- }
97
- animate_frame++;
98
- if (animate_frame == trial.stimuli.length) {
99
- animate_frame = 0;
100
- reps++;
101
- if (reps >= trial.sequence_reps) {
102
- endTrial();
103
- clearInterval(animate_interval);
104
- showImage = false;
105
- }
106
- }
107
- if (showImage) {
108
- show_next_frame();
109
- }
110
- }, interval_time);
111
-
112
- function show_next_frame() {
113
- if (trial.render_on_canvas) {
114
- display_element.querySelector('#jspsych-animation-image').style.visibility = 'visible';
115
- var img = new Image();
116
- img.src = trial.stimuli[animate_frame];
117
- canvas.height = img.naturalHeight;
118
- canvas.width = img.naturalWidth;
119
- ctx.drawImage(img,0,0);
120
- if (trial.prompt !== null & animate_frame == 0 & reps == 0) {
121
- display_element.insertAdjacentHTML('beforeend', trial.prompt);
122
- }
123
- } else {
124
- // show image
125
- display_element.innerHTML = '<img src="'+trial.stimuli[animate_frame]+'" id="jspsych-animation-image"></img>';
126
- if (trial.prompt !== null) {
127
- display_element.innerHTML += trial.prompt;
128
- }
129
- }
130
- current_stim = trial.stimuli[animate_frame];
131
-
132
- // record when image was shown
133
- animation_sequence.push({
134
- "stimulus": trial.stimuli[animate_frame],
135
- "time": performance.now() - startTime
136
- });
137
-
138
- if (trial.frame_isi > 0) {
139
- jsPsych.pluginAPI.setTimeout(function() {
140
- display_element.querySelector('#jspsych-animation-image').style.visibility = 'hidden';
141
- current_stim = 'blank';
142
- // record when blank image was shown
143
- animation_sequence.push({
144
- "stimulus": 'blank',
145
- "time": performance.now() - startTime
146
- });
147
- }, trial.frame_time);
148
- }
149
- }
150
-
151
- var after_response = function(info) {
152
-
153
- responses.push({
154
- key_press: info.key,
155
- rt: info.rt,
156
- stimulus: current_stim
157
- });
158
-
159
- // after a valid response, the stimulus will have the CSS class 'responded'
160
- // which can be used to provide visual feedback that a response was recorded
161
- display_element.querySelector('#jspsych-animation-image').className += ' responded';
162
- }
163
-
164
- // hold the jspsych response listener object in memory
165
- // so that we can turn off the response collection when
166
- // the trial ends
167
- var response_listener = jsPsych.pluginAPI.getKeyboardResponse({
168
- callback_function: after_response,
169
- valid_responses: trial.choices,
170
- rt_method: 'performance',
171
- persist: true,
172
- allow_held_key: false
173
- });
174
-
175
- function endTrial() {
176
-
177
- jsPsych.pluginAPI.cancelKeyboardResponse(response_listener);
178
-
179
- var trial_data = {
180
- "animation_sequence": JSON.stringify(animation_sequence),
181
- "responses": JSON.stringify(responses)
182
- };
183
-
184
- jsPsych.finishTrial(trial_data);
185
- }
186
- };
187
-
188
- return plugin;
189
- })();
@@ -1,247 +0,0 @@
1
- /**
2
- * jspsych-audio-button-response
3
- * Kristin Diep
4
- *
5
- * plugin for playing an audio file and getting a keyboard response
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- **/
10
-
11
- jsPsych.plugins["audio-button-response"] = (function() {
12
- var plugin = {};
13
-
14
- jsPsych.pluginAPI.registerPreload('audio-button-response', 'stimulus', 'audio');
15
-
16
- plugin.info = {
17
- name: 'audio-button-response',
18
- description: '',
19
- parameters: {
20
- stimulus: {
21
- type: jsPsych.plugins.parameterType.AUDIO,
22
- pretty_name: 'Stimulus',
23
- default: undefined,
24
- description: 'The audio to be played.'
25
- },
26
- choices: {
27
- type: jsPsych.plugins.parameterType.STRING,
28
- pretty_name: 'Choices',
29
- default: undefined,
30
- array: true,
31
- description: 'The button labels.'
32
- },
33
- button_html: {
34
- type: jsPsych.plugins.parameterType.HTML_STRING,
35
- pretty_name: 'Button HTML',
36
- default: '<button class="jspsych-btn">%choice%</button>',
37
- array: true,
38
- description: 'Custom button. Can make your own style.'
39
- },
40
- prompt: {
41
- type: jsPsych.plugins.parameterType.STRING,
42
- pretty_name: 'Prompt',
43
- default: null,
44
- description: 'Any content here will be displayed below the stimulus.'
45
- },
46
- trial_duration: {
47
- type: jsPsych.plugins.parameterType.INT,
48
- pretty_name: 'Trial duration',
49
- default: null,
50
- description: 'The maximum duration to wait for a response.'
51
- },
52
- margin_vertical: {
53
- type: jsPsych.plugins.parameterType.STRING,
54
- pretty_name: 'Margin vertical',
55
- default: '0px',
56
- description: 'Vertical margin of button.'
57
- },
58
- margin_horizontal: {
59
- type: jsPsych.plugins.parameterType.STRING,
60
- pretty_name: 'Margin horizontal',
61
- default: '8px',
62
- description: 'Horizontal margin of button.'
63
- },
64
- response_ends_trial: {
65
- type: jsPsych.plugins.parameterType.BOOL,
66
- pretty_name: 'Response ends trial',
67
- default: true,
68
- description: 'If true, the trial will end when user makes a response.'
69
- },
70
- trial_ends_after_audio: {
71
- type: jsPsych.plugins.parameterType.BOOL,
72
- pretty_name: 'Trial ends after audio',
73
- default: false,
74
- description: 'If true, then the trial will end as soon as the audio file finishes playing.'
75
- },
76
- response_allowed_while_playing: {
77
- type: jsPsych.plugins.parameterType.BOOL,
78
- pretty_name: 'Response allowed while playing',
79
- default: true,
80
- description: 'If true, then responses are allowed while the audio is playing. '+
81
- 'If false, then the audio must finish playing before a response is accepted.'
82
- }
83
- }
84
- }
85
-
86
- plugin.trial = function(display_element, trial) {
87
-
88
- // setup stimulus
89
- var context = jsPsych.pluginAPI.audioContext();
90
- if(context !== null){
91
- var source = context.createBufferSource();
92
- source.buffer = jsPsych.pluginAPI.getAudioBuffer(trial.stimulus);
93
- source.connect(context.destination);
94
- } else {
95
- var audio = jsPsych.pluginAPI.getAudioBuffer(trial.stimulus);
96
- audio.currentTime = 0;
97
- }
98
-
99
- // set up end event if trial needs it
100
- if(trial.trial_ends_after_audio){
101
- if(context !== null){
102
- source.addEventListener('ended', end_trial);
103
- } else {
104
- audio.addEventListener('ended', end_trial);
105
- }
106
- }
107
-
108
- // enable buttons after audio ends if necessary
109
- if ((!trial.response_allowed_while_playing) & (!trial.trial_ends_after_audio)) {
110
- if (context !== null) {
111
- source.addEventListener('ended', enable_buttons);
112
- } else {
113
- audio.addEventListener('ended', enable_buttons);
114
- }
115
- }
116
-
117
- //display buttons
118
- var buttons = [];
119
- if (Array.isArray(trial.button_html)) {
120
- if (trial.button_html.length == trial.choices.length) {
121
- buttons = trial.button_html;
122
- } else {
123
- console.error('Error in image-button-response plugin. The length of the button_html array does not equal the length of the choices array');
124
- }
125
- } else {
126
- for (var i = 0; i < trial.choices.length; i++) {
127
- buttons.push(trial.button_html);
128
- }
129
- }
130
-
131
- var html = '<div id="jspsych-audio-button-response-btngroup">';
132
- for (var i = 0; i < trial.choices.length; i++) {
133
- var str = buttons[i].replace(/%choice%/g, trial.choices[i]);
134
- html += '<div class="jspsych-audio-button-response-button" style="cursor: pointer; display: inline-block; margin:'+trial.margin_vertical+' '+trial.margin_horizontal+'" id="jspsych-audio-button-response-button-' + i +'" data-choice="'+i+'">'+str+'</div>';
135
- }
136
- html += '</div>';
137
-
138
- //show prompt if there is one
139
- if (trial.prompt !== null) {
140
- html += trial.prompt;
141
- }
142
-
143
- display_element.innerHTML = html;
144
-
145
- for (var i = 0; i < trial.choices.length; i++) {
146
- display_element.querySelector('#jspsych-audio-button-response-button-' + i).addEventListener('click', function(e){
147
- var choice = e.currentTarget.getAttribute('data-choice'); // don't use dataset for jsdom compatibility
148
- after_response(choice);
149
- });
150
- if (!trial.response_allowed_while_playing) {
151
- display_element.querySelector('#jspsych-audio-button-response-button-' + i).querySelector('button').disabled = true;
152
- }
153
- }
154
-
155
- // store response
156
- var response = {
157
- rt: null,
158
- button: null
159
- };
160
-
161
- // function to handle responses by the subject
162
- function after_response(choice) {
163
-
164
- // measure rt
165
- var endTime = performance.now();
166
- var rt = endTime - startTime;
167
- if(context !== null){
168
- endTime = context.currentTime;
169
- rt = Math.round((endTime - startTime) * 1000);
170
- }
171
- response.button = parseInt(choice);
172
- response.rt = rt;
173
-
174
- // disable all the buttons after a response
175
- var btns = document.querySelectorAll('.jspsych-audio-button-response-button button');
176
- for(var i=0; i<btns.length; i++){
177
- //btns[i].removeEventListener('click');
178
- btns[i].setAttribute('disabled', 'disabled');
179
- }
180
-
181
- if (trial.response_ends_trial) {
182
- end_trial();
183
- }
184
- }
185
-
186
- // function to end trial when it is time
187
- function end_trial() {
188
-
189
- // kill any remaining setTimeout handlers
190
- jsPsych.pluginAPI.clearAllTimeouts();
191
-
192
- // stop the audio file if it is playing
193
- // remove end event listeners if they exist
194
- if(context !== null){
195
- source.stop();
196
- source.removeEventListener('ended', end_trial);
197
- source.removeEventListener('ended', enable_buttons);
198
- } else {
199
- audio.pause();
200
- audio.removeEventListener('ended', end_trial);
201
- audio.removeEventListener('ended', enable_buttons);
202
- }
203
-
204
- // gather the data to store for the trial
205
- var trial_data = {
206
- "rt": response.rt,
207
- "stimulus": trial.stimulus,
208
- "button_pressed": response.button
209
- };
210
-
211
- // clear the display
212
- display_element.innerHTML = '';
213
-
214
- // move on to the next trial
215
- jsPsych.finishTrial(trial_data);
216
- }
217
-
218
- // function to enable buttons after audio ends
219
- function enable_buttons() {
220
- var btns = document.querySelectorAll('.jspsych-audio-button-response-button button');
221
- for (var i=0; i<btns.length; i++) {
222
- btns[i].disabled = false;
223
- }
224
- }
225
-
226
- // start time
227
- var startTime = performance.now();
228
-
229
- // start audio
230
- if(context !== null){
231
- startTime = context.currentTime;
232
- source.start(startTime);
233
- } else {
234
- audio.play();
235
- }
236
-
237
- // end trial if time limit is set
238
- if (trial.trial_duration !== null) {
239
- jsPsych.pluginAPI.setTimeout(function() {
240
- end_trial();
241
- }, trial.trial_duration);
242
- }
243
-
244
- };
245
-
246
- return plugin;
247
- })();