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/README.md CHANGED
@@ -1,48 +1,62 @@
1
- ![logo](http://www.jspsych.org/img/jspsych-logo.jpg)
1
+ ![jspsych logo](http://www.jspsych.org/7.0/img/jspsych-logo.jpg)
2
2
 
3
- jsPsych is a JavaScript library for creating behavioral experiments that run in a web browser. jsPsych provides a framework for defining experiments using a set of flexible plugins that create different kinds of tasks a subject could complete during an experiment. By assembling these different plugins together it is possible to create many different types of experiments.
3
+ jsPsych is a JavaScript framework for creating behavioral experiments that run in a web browser.
4
4
 
5
- Examples
6
- ----------
5
+ Experiments in jsPsych are created using [plugins](https://www.jspsych.org/latest/overview/plugins).
6
+ Each plugin defines different kinds of events, like showing an image on the screen, and collects different kinds of data, like recording which key was pressed at which time.
7
+ By assembling different plugins together into [a timeline](https://www.jspsych.org/latest/overview/timeline), it is possible to create a wide range of online experiments.
7
8
 
8
- Several example experiments and plugin demonstrations are available in the `/examples` folder.
9
+ ## What can I do with jsPsych?
9
10
 
10
- Documentation
11
- -------------
11
+ jsPsych comes with a number of plugins that you can use create tasks and collect data.
12
+ Some plugins do general things, like present a stimulus (text, image, audio, video) and record a key press or button response along with a response time.
13
+ Other plugins do more specific things, like show a set of instructions pages, run a drag-and-drop image sorting task, or calibrate the WebGazer eye-tracking extension.
14
+ See the [list of all plugins](https://www.jspsych.org/latest/plugins/list-of-plugins/) to see what each plugin can do.
12
15
 
13
- Documentation is available at [docs.jspsych.org](http://docs.jspsych.org).
16
+ Often people can create their experiment by combining these plugins together.
17
+ But if that's not possible for your experiment, you can also modify a plugin file or [create your own plugin](https://www.jspsych.org/latest/developers/plugin-development).
18
+ This gives you the flexibility to do exactly what you want, while still taking advantage of jsPsych's general experiment-building framework.
19
+ The plugin template is *extremely* flexible. If a task is possible to do in a web browser, you can almost certainly implement it as a plugin.
14
20
 
15
- Need help?
16
- ----------
21
+ ## Getting started
17
22
 
18
- For questions about using the library, please use the [Discussions forum](https://github.com/jspsych/jsPsych/discussions).
23
+ jsPsych can be loaded into a project in a variety of ways, including via CDNs and through NPM.
24
+ You can learn more about setting up a project by following the [hello world tutorial](https://www.jspsych.org/latest/tutorials/hello-world/) on the jsPsych website.
19
25
 
20
- Contributing
21
- ------------
26
+ Once you've got a project set up, the [reaction time task tutorial](https://www.jspsych.org/latest/tutorials/rt-task/) is a great next step, since it covers many core topics and features.
22
27
 
23
- Contributions to the code are welcome. Please use the [Issue tracker system](https://github.com/jodeleeuw/jsPsych/issues) to report bugs or discuss suggestions for new features and improvements. If you would like to contribute code, [submit a Pull request](https://help.github.com/articles/using-pull-requests).
28
+ There are also a number of [video tutorials](https://www.jspsych.org/latest/tutorials/video-tutorials) available on the website.
24
29
 
25
- Citation
26
- --------
30
+ ## Examples
27
31
 
28
- If you use this library in academic work, please cite the [paper that describes jsPsych](http://link.springer.com/article/10.3758%2Fs13428-014-0458-y):
32
+ Several example experiments and plugin demonstrations are available in the `/examples` folder.
33
+ After you've downloaded the [latest release](https://github.com/jspsych/jsPsych/releases), double-click on an example HTML file to run it in your web browser, and open it with a programming-friendly text editor to see how it works.
29
34
 
30
- de Leeuw, J.R. (2015). jsPsych: A JavaScript library for creating behavioral experiments in a Web browser. *Behavior Research Methods*, _47_(1), 1-12. doi:10.3758/s13428-014-0458-y
35
+ ## Documentation
36
+
37
+ Documentation is available at [https://www.jspsych.org](https://www.jspsych.org/).
38
+
39
+ ## Getting help
40
+
41
+ For questions about using the library, please use the GitHub [discussions forum](https://github.com/jspsych/jsPsych/discussions).
42
+ You can also browse through the history of Q&A on the forum to find related questions.
31
43
 
32
- Response times
33
- --------------
44
+ ## Contributing
34
45
 
35
- Wondering if jsPsych can be used for research that depends on accurate response time measurement? For most purposes, the answer is yes. Response time measurements in jsPsych (and JavaScript in general) are comparable to those taken in standard lab software like Psychophysics Toolbox and E-Prime. Response times measured in JavaScript tend to be a little bit longer (10-40ms), but have similar variance. See the following references for extensive work on this topic.
46
+ We :heart: contributions!
47
+ See the [contributing to jsPsych](https://www.jspsych.org/latest/developers/contributing/) documentation page for more information about how you can help.
36
48
 
37
- * [de Leeuw, J. R., & Motz, B. A. (2016). Psychophysics in a Web browser? Comparing response times collected with JavaScript and Psychophysics Toolbox in a visual search task. *Behavior Research Methods*, *48*(1), 1-12.](http://link.springer.com/article/10.3758%2Fs13428-015-0567-2)
38
- * [Hilbig, B. E. (2016). Reaction time effects in lab- versus web-based research: Experimental evidence. *Behavior Research Methods*, *48*(4), 1718-1724.](http://dx.doi.org/10.3758/s13428-015-0678-9)
39
- * [Pinet, S., Zielinski, C., Mathôt, S. et al. (2017). Measuring sequences of keystrokes with jsPsych: Reliability of response times and interkeystroke intervals. *Behavior Research Methods*, *49*(3), 1163-1176.](http://link.springer.com/article/10.3758/s13428-016-0776-3)
40
- * [Reimers, S., & Stewart, N. (2015). Presentation and response time accuracy in Adobe Flash and HTML5/JavaScript Web experiments. *Behavior Research Methods*, *47*(2), 309-327.](http://link.springer.com/article/10.3758%2Fs13428-014-0471-1)
49
+ ## Citation
50
+
51
+ If you use this library in academic work, please cite the [paper that describes jsPsych](http://link.springer.com/article/10.3758%2Fs13428-014-0458-y):
52
+
53
+ de Leeuw, J.R. (2015). jsPsych: A JavaScript library for creating behavioral experiments in a Web browser. *Behavior Research Methods*, _47_(1), 1-12. doi:10.3758/s13428-014-0458-y
41
54
 
55
+ ## Contributors
42
56
 
43
- Credits
44
- -------
57
+ jsPsych is open source project with [numerous contributors](https://github.com/jspsych/jsPsych/graphs/contributors).
58
+ The project is currently managed by the core team of Josh de Leeuw ([@jodeleeuw](https://github.com/jodeleeuw)), Becky Gilbert ([@becky-gilbert](https://github.com/becky-gilbert)), and Björn Luchterhandt ([@bjoluc](https://github.com/bjoluc)).
45
59
 
46
- jsPsych was created by Josh de Leeuw ([@jodeleeuw](https://github.com/jodeleeuw)).
60
+ jsPsych was created by [Josh de Leeuw](http://www.twitter.com/joshdeleeuw).
47
61
 
48
- There have been many [contributors](https://github.com/jodeleeuw/jsPsych/blob/master/contributors.md) to the library. Thank you!
62
+ We're also grateful for the generous support from a [Mozilla Open Source Support award](https://www.mozilla.org/en-US/moss/), which funded development of the library from 2020-2021.
package/css/jspsych.css CHANGED
@@ -5,45 +5,45 @@
5
5
  * experiments look polished without any additional styles.
6
6
  */
7
7
 
8
- @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
8
+ @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
9
9
 
10
10
  /* Container holding jsPsych content */
11
11
 
12
- .jspsych-display-element {
13
- display: flex;
14
- flex-direction: column;
15
- overflow-y: auto;
16
- }
17
-
18
- .jspsych-display-element:focus {
19
- outline: none;
20
- }
21
-
22
- .jspsych-content-wrapper {
23
- display: flex;
24
- margin: auto;
25
- flex: 1 1 100%;
26
- width: 100%;
27
- }
28
-
29
- .jspsych-content {
30
- max-width: 95%; /* this is mainly an IE 10-11 fix */
31
- text-align: center;
32
- margin: auto; /* this is for overflowing content */
33
- }
34
-
35
- .jspsych-top {
36
- align-items: flex-start;
37
- }
38
-
39
- .jspsych-middle {
40
- align-items: center;
41
- }
12
+ .jspsych-display-element {
13
+ display: flex;
14
+ flex-direction: column;
15
+ overflow-y: auto;
16
+ }
17
+
18
+ .jspsych-display-element:focus {
19
+ outline: none;
20
+ }
21
+
22
+ .jspsych-content-wrapper {
23
+ display: flex;
24
+ margin: auto;
25
+ flex: 1 1 100%;
26
+ width: 100%;
27
+ }
28
+
29
+ .jspsych-content {
30
+ max-width: 95%; /* this is mainly an IE 10-11 fix */
31
+ text-align: center;
32
+ margin: auto; /* this is for overflowing content */
33
+ }
34
+
35
+ .jspsych-top {
36
+ align-items: flex-start;
37
+ }
38
+
39
+ .jspsych-middle {
40
+ align-items: center;
41
+ }
42
42
 
43
43
  /* fonts and type */
44
44
 
45
45
  .jspsych-display-element {
46
- font-family: 'Open Sans', 'Arial', sans-serif;
46
+ font-family: "Open Sans", "Arial", sans-serif;
47
47
  font-size: 18px;
48
48
  line-height: 1.6em;
49
49
  }
@@ -51,7 +51,7 @@
51
51
  /* Form elements like input fields and buttons */
52
52
 
53
53
  .jspsych-display-element input[type="text"] {
54
- font-family: 'Open Sans', 'Arial', sans-serif;
54
+ font-family: "Open Sans", "Arial", sans-serif;
55
55
  font-size: 14px;
56
56
  }
57
57
 
@@ -62,7 +62,7 @@
62
62
  margin: 0px;
63
63
  font-size: 14px;
64
64
  font-weight: 400;
65
- font-family: 'Open Sans', 'Arial', sans-serif;
65
+ font-family: "Open Sans", "Arial", sans-serif;
66
66
  cursor: pointer;
67
67
  line-height: 1.4;
68
68
  text-align: center;
@@ -86,7 +86,7 @@
86
86
 
87
87
  .jspsych-btn:active {
88
88
  background-color: #ddd;
89
- border-color:#000000;
89
+ border-color: #000000;
90
90
  }
91
91
 
92
92
  .jspsych-btn:disabled {
@@ -100,10 +100,10 @@
100
100
 
101
101
  .jspsych-slider {
102
102
  appearance: none;
103
- -webkit-appearance: none;
103
+ -webkit-appearance: none;
104
104
  -moz-appearance: none;
105
- width: 100%;
106
- background: transparent;
105
+ width: 100%;
106
+ background: transparent;
107
107
  }
108
108
  .jspsych-slider:focus {
109
109
  outline: none;
@@ -192,7 +192,7 @@
192
192
  height: 14px;
193
193
  display: inline-block;
194
194
  vertical-align: middle;
195
- box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
195
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
196
196
  }
197
197
  #jspsych-progressbar-inner {
198
198
  background-color: #aaa;
@@ -0,0 +1,112 @@
1
+ import { JsPsychData } from "./modules/data";
2
+ import { PluginAPI } from "./modules/plugin-api";
3
+ import * as randomization from "./modules/randomization";
4
+ import * as turk from "./modules/turk";
5
+ import * as utils from "./modules/utils";
6
+ export declare class JsPsych {
7
+ extensions: any;
8
+ turk: typeof turk;
9
+ randomization: typeof randomization;
10
+ utils: typeof utils;
11
+ data: JsPsychData;
12
+ pluginAPI: PluginAPI;
13
+ version(): any;
14
+ /**
15
+ * options
16
+ */
17
+ private opts;
18
+ /**
19
+ * experiment timeline
20
+ */
21
+ private timeline;
22
+ private timelineDescription;
23
+ private global_trial_index;
24
+ private current_trial;
25
+ private current_trial_finished;
26
+ private DOM_container;
27
+ private DOM_target;
28
+ /**
29
+ * time that the experiment began
30
+ */
31
+ private exp_start_time;
32
+ /**
33
+ * is the experiment paused?
34
+ */
35
+ private paused;
36
+ private waiting;
37
+ /**
38
+ * is the page retrieved directly via file:// protocol (true) or hosted on a server (false)?
39
+ */
40
+ private file_protocol;
41
+ /**
42
+ * Promise that is resolved when `finishExperiment()` is called
43
+ */
44
+ private finished;
45
+ private resolveFinishedPromise;
46
+ /**
47
+ * is the experiment running in `simulate()` mode
48
+ */
49
+ private simulation_mode;
50
+ /**
51
+ * simulation options passed in via `simulate()`
52
+ */
53
+ private simulation_options;
54
+ webaudio_context: AudioContext;
55
+ internal: {
56
+ /**
57
+ * this flag is used to determine whether we are in a scope where
58
+ * jsPsych.timelineVariable() should be executed immediately or
59
+ * whether it should return a function to access the variable later.
60
+ *
61
+ **/
62
+ call_immediate: boolean;
63
+ };
64
+ constructor(options?: any);
65
+ /**
66
+ * Starts an experiment using the provided timeline and returns a promise that is resolved when
67
+ * the experiment is finished.
68
+ *
69
+ * @param timeline The timeline to be run
70
+ */
71
+ run(timeline: any[]): Promise<void>;
72
+ simulate(timeline: any[], simulation_mode: "data-only" | "visual", simulation_options?: {}): Promise<void>;
73
+ getProgress(): {
74
+ total_trials: number;
75
+ current_trial_global: number;
76
+ percent_complete: number;
77
+ };
78
+ getStartTime(): any;
79
+ getTotalTime(): number;
80
+ getDisplayElement(): HTMLElement;
81
+ getDisplayContainerElement(): HTMLElement;
82
+ finishTrial(data?: {}): void;
83
+ endExperiment(end_message?: string, data?: {}): void;
84
+ endCurrentTimeline(): void;
85
+ getCurrentTrial(): any;
86
+ getInitSettings(): any;
87
+ getCurrentTimelineNodeID(): any;
88
+ timelineVariable(varname: string, immediate?: boolean): any;
89
+ getAllTimelineVariables(): any;
90
+ addNodeToEndOfTimeline(new_timeline: any, preload_callback?: any): void;
91
+ pauseExperiment(): void;
92
+ resumeExperiment(): void;
93
+ loadFail(message: any): void;
94
+ getSafeModeStatus(): boolean;
95
+ getTimeline(): any[];
96
+ private prepareDom;
97
+ private loadExtensions;
98
+ private startExperiment;
99
+ private finishExperiment;
100
+ private nextTrial;
101
+ private doTrial;
102
+ private evaluateTimelineVariables;
103
+ private evaluateFunctionParameters;
104
+ private replaceFunctionsWithValues;
105
+ private setDefaultValues;
106
+ private checkExclusions;
107
+ private drawProgressBar;
108
+ private updateProgressBar;
109
+ private progress_bar_amount;
110
+ setProgressBar(proportion_complete: any): void;
111
+ getProgressBarCompleted(): number;
112
+ }
@@ -0,0 +1,34 @@
1
+ import { JsPsych } from "./JsPsych";
2
+ export declare class TimelineNode {
3
+ private jsPsych;
4
+ relative_id: any;
5
+ parent_node: any;
6
+ trial_parameters: any;
7
+ timeline_parameters: any;
8
+ node_trial_data: any;
9
+ progress: any;
10
+ end_message?: string;
11
+ constructor(jsPsych: JsPsych, parameters: any, parent?: any, relativeID?: any);
12
+ trial(): any;
13
+ markCurrentTrialComplete(): void;
14
+ nextRepetiton(): void;
15
+ setTimelineVariablesOrder(): void;
16
+ nextSet(): void;
17
+ advance(): any;
18
+ isComplete(): any;
19
+ getTimelineVariableValue(variable_name: string): any;
20
+ findTimelineVariable(variable_name: any): any;
21
+ timelineVariable(variable_name: string): any;
22
+ allTimelineVariables(): any;
23
+ allTimelineVariablesNames(so_far?: any[]): any;
24
+ length(): number;
25
+ percentComplete(): number;
26
+ reset(): void;
27
+ end(): void;
28
+ endActiveNode(): void;
29
+ ID(): string;
30
+ activeID(): any;
31
+ generatedData(): import("./modules/data/DataCollection").DataCollection;
32
+ trialsOfType(type: any): any;
33
+ insert(parameters: any): void;
34
+ }