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,134 +0,0 @@
1
- /**
2
- * jspsych-reconstruction
3
- * a jspsych plugin for a reconstruction task where the subject recreates
4
- * a stimulus from memory
5
- *
6
- * Josh de Leeuw
7
- *
8
- * documentation: docs.jspsych.org
9
- *
10
- */
11
-
12
-
13
- jsPsych.plugins['reconstruction'] = (function() {
14
-
15
- var plugin = {};
16
-
17
- plugin.info = {
18
- name: 'reconstruction',
19
- description: '',
20
- parameters: {
21
- stim_function: {
22
- type: jsPsych.plugins.parameterType.FUNCTION,
23
- pretty_name: 'Stimulus function',
24
- default: undefined,
25
- description: 'A function with a single parameter that returns an HTML-formatted string representing the stimulus.'
26
- },
27
- starting_value: {
28
- type: jsPsych.plugins.parameterType.FLOAT,
29
- pretty_name: 'Starting value',
30
- default: 0.5,
31
- description: 'The starting value of the stimulus parameter.'
32
- },
33
- step_size: {
34
- type: jsPsych.plugins.parameterType.FLOAT,
35
- pretty_name: 'Step size',
36
- default: 0.05,
37
- description: 'The change in the stimulus parameter caused by pressing one of the modification keys.'
38
- },
39
- key_increase: {
40
- type: jsPsych.plugins.parameterType.KEYCODE,
41
- pretty_name: 'Key increase',
42
- default: 'h',
43
- description: 'The key to press for increasing the parameter value.'
44
- },
45
- key_decrease: {
46
- type: jsPsych.plugins.parameterType.KEYCODE,
47
- pretty_name: 'Key decrease',
48
- default: 'g',
49
- description: 'The key to press for decreasing the parameter value.'
50
- },
51
- button_label: {
52
- type: jsPsych.plugins.parameterType.STRING,
53
- pretty_name: 'Button label',
54
- default: 'Continue',
55
- description: 'The text that appears on the button to finish the trial.'
56
- }
57
- }
58
- }
59
-
60
- plugin.trial = function(display_element, trial) {
61
-
62
- // current param level
63
- var param = trial.starting_value;
64
-
65
- // set-up key listeners
66
- var after_response = function(info) {
67
-
68
- //console.log('fire');
69
-
70
- var key_i = (typeof trial.key_increase == 'string') ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.key_increase) : trial.key_increase;
71
- var key_d = (typeof trial.key_decrease == 'string') ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.key_decrease) : trial.key_decrease;
72
-
73
- // get new param value
74
- if (info.key == key_i) {
75
- param = param + trial.step_size;
76
- } else if (info.key == key_d) {
77
- param = param - trial.step_size;
78
- }
79
- param = Math.max(Math.min(1, param), 0);
80
-
81
- // refresh the display
82
- draw(param);
83
- }
84
-
85
- // listen for responses
86
- var key_listener = jsPsych.pluginAPI.getKeyboardResponse({
87
- callback_function: after_response,
88
- valid_responses: [trial.key_increase, trial.key_decrease],
89
- rt_method: 'performance',
90
- persist: true,
91
- allow_held_key: true
92
- });
93
- // draw first iteration
94
- draw(param);
95
-
96
- function draw(param) {
97
-
98
- //console.log(param);
99
-
100
- display_element.innerHTML = '<div id="jspsych-reconstruction-stim-container">'+trial.stim_function(param)+'</div>';
101
-
102
- // add submit button
103
- display_element.innerHTML += '<button id="jspsych-reconstruction-next" class="jspsych-btn jspsych-reconstruction">'+trial.button_label+'</button>';
104
-
105
- display_element.querySelector('#jspsych-reconstruction-next').addEventListener('click', endTrial);
106
- }
107
-
108
- function endTrial() {
109
- // measure response time
110
- var endTime =performance.now();
111
- var response_time = endTime - startTime;
112
-
113
- // clear keyboard response
114
- jsPsych.pluginAPI.cancelKeyboardResponse(key_listener);
115
-
116
- // save data
117
- var trial_data = {
118
- "rt": response_time,
119
- "final_value": param,
120
- "start_value": trial.starting_value
121
- };
122
-
123
- display_element.innerHTML = '';
124
-
125
- // next trial
126
- jsPsych.finishTrial(trial_data);
127
- }
128
-
129
- var startTime = performance.now();
130
-
131
- };
132
-
133
- return plugin;
134
- })();
@@ -1,166 +0,0 @@
1
- /**
2
- * jspsych-resize
3
- * Steve Chao
4
- *
5
- * plugin for controlling the real world size of the display
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- **/
10
-
11
- jsPsych.plugins["resize"] = (function() {
12
-
13
- var plugin = {};
14
-
15
- plugin.info = {
16
- name: 'resize',
17
- description: '',
18
- parameters: {
19
- item_height: {
20
- type: jsPsych.plugins.parameterType.INT,
21
- pretty_name: 'Item height',
22
- default: 1,
23
- description: 'The height of the item to be measured.'
24
- },
25
- item_width: {
26
- type: jsPsych.plugins.parameterType.INT,
27
- pretty_name: 'Item width',
28
- default: 1,
29
- description: 'The width of the item to be measured.'
30
- },
31
- prompt: {
32
- type: jsPsych.plugins.parameterType.STRING,
33
- pretty_name: 'Prompt',
34
- default: null,
35
- description: 'The content displayed below the resizable box and above the button.'
36
- },
37
- pixels_per_unit: {
38
- type: jsPsych.plugins.parameterType.INT,
39
- pretty_name: 'Pixels per unit',
40
- default: 100,
41
- description: 'After the scaling factor is applied, this many pixels will equal one unit of measurement.'
42
- },
43
- starting_size: {
44
- type: jsPsych.plugins.parameterType.INT,
45
- pretty_name: 'Starting size',
46
- default: 100,
47
- description: 'The initial size of the box, in pixels, along the larget dimension.'
48
- },
49
- button_label: {
50
- type: jsPsych.plugins.parameterType.STRING,
51
- pretty_name: 'Button label',
52
- default: 'Continue',
53
- description: 'Label to display on the button to complete calibration.'
54
- },
55
- }
56
- }
57
-
58
- plugin.trial = function(display_element, trial) {
59
-
60
- var aspect_ratio = trial.item_width / trial.item_height;
61
-
62
- // variables to determine div size
63
- if(trial.item_width >= trial.item_height){
64
- var start_div_width = trial.starting_size;
65
- var start_div_height = Math.round(trial.starting_size / aspect_ratio);
66
- } else {
67
- var start_div_height = trial.starting_size;
68
- var start_div_width = Math.round(trial.starting_size * aspect_ratio);
69
- }
70
-
71
- // create html for display
72
- var html ='<div id="jspsych-resize-div" style="border: 2px solid steelblue; height: '+start_div_height+'px; width:'+start_div_width+'px; margin: 7px auto; background-color: lightsteelblue; position: relative;">';
73
- html += '<div id="jspsych-resize-handle" style="cursor: nwse-resize; background-color: steelblue; width: 10px; height: 10px; border: 2px solid lightsteelblue; position: absolute; bottom: 0; right: 0;"></div>';
74
- html += '</div>';
75
- if (trial.prompt !== null){
76
- html += trial.prompt;
77
- }
78
- html += '<a class="jspsych-btn" id="jspsych-resize-btn">'+trial.button_label+'</a>';
79
-
80
- // render
81
- display_element.innerHTML = html;
82
-
83
- // listens for the click
84
- document.getElementById("jspsych-resize-btn").addEventListener('click', function() {
85
- scale();
86
- end_trial();
87
- });
88
-
89
- var dragging = false;
90
- var origin_x, origin_y;
91
- var cx, cy;
92
-
93
- var mousedownevent = function(e){
94
- e.preventDefault();
95
- dragging = true;
96
- origin_x = e.pageX;
97
- origin_y = e.pageY;
98
- cx = parseInt(scale_div.style.width);
99
- cy = parseInt(scale_div.style.height);
100
- }
101
-
102
- display_element.querySelector('#jspsych-resize-handle').addEventListener('mousedown', mousedownevent);
103
-
104
- var mouseupevent = function(e){
105
- dragging = false;
106
- }
107
-
108
- document.addEventListener('mouseup', mouseupevent);
109
-
110
- var scale_div = display_element.querySelector('#jspsych-resize-div');
111
-
112
- var resizeevent = function(e){
113
- if(dragging){
114
- var dx = (e.pageX - origin_x);
115
- var dy = (e.pageY - origin_y);
116
-
117
- if(Math.abs(dx) >= Math.abs(dy)){
118
- scale_div.style.width = Math.round(Math.max(20, cx+dx*2)) + "px";
119
- scale_div.style.height = Math.round(Math.max(20, cx+dx*2) / aspect_ratio ) + "px";
120
- } else {
121
- scale_div.style.height = Math.round(Math.max(20, cy+dy*2)) + "px";
122
- scale_div.style.width = Math.round(aspect_ratio * Math.max(20, cy+dy*2)) + "px";
123
- }
124
- }
125
- }
126
-
127
- document.addEventListener('mousemove', resizeevent);
128
-
129
- // scales the stimulus
130
- var scale_factor;
131
- var final_height_px, final_width_px;
132
- function scale() {
133
- final_width_px = scale_div.offsetWidth;
134
- //final_height_px = scale_div.offsetHeight;
135
-
136
- var pixels_unit_screen = final_width_px / trial.item_width;
137
-
138
- scale_factor = pixels_unit_screen / trial.pixels_per_unit;
139
- document.getElementById("jspsych-content").style.transform = "scale(" + scale_factor + ")";
140
- };
141
-
142
-
143
- // function to end trial
144
- function end_trial() {
145
-
146
- // clear document event listeners
147
- document.removeEventListener('mousemove', resizeevent);
148
- document.removeEventListener('mouseup', mouseupevent);
149
-
150
- // clear the screen
151
- display_element.innerHTML = '';
152
-
153
- // finishes trial
154
-
155
- var trial_data = {
156
- 'final_height_px': final_height_px,
157
- 'final_width_px': final_width_px,
158
- 'scale_factor': scale_factor
159
- }
160
-
161
- jsPsych.finishTrial(trial_data);
162
- }
163
- };
164
-
165
- return plugin;
166
- })();
@@ -1,168 +0,0 @@
1
- /**
2
- * jspsych-same-different
3
- * Josh de Leeuw
4
- *
5
- * plugin for showing two stimuli sequentially and getting a same / different judgment
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- */
10
-
11
- jsPsych.plugins['same-different-html'] = (function() {
12
-
13
- var plugin = {};
14
-
15
- plugin.info = {
16
- name: 'same-different-html',
17
- description: '',
18
- parameters: {
19
- stimuli: {
20
- type: jsPsych.plugins.parameterType.HTML_STRING,
21
- pretty_name: 'Stimuli',
22
- default: undefined,
23
- array: true,
24
- description: 'The HTML content to be displayed.'
25
- },
26
- answer: {
27
- type: jsPsych.plugins.parameterType.SELECT,
28
- pretty_name: 'Answer',
29
- options: ['same', 'different'],
30
- default: undefined,
31
- description: 'Either "same" or "different".'
32
- },
33
- same_key: {
34
- type: jsPsych.plugins.parameterType.KEYCODE,
35
- pretty_name: 'Same key',
36
- default: 'Q',
37
- description: ''
38
- },
39
- different_key: {
40
- type: jsPsych.plugins.parameterType.KEYCODE,
41
- pretty_name: 'Different key',
42
- default: 'P',
43
- description: 'The key that subjects should press to indicate that the two stimuli are the same.'
44
- },
45
- first_stim_duration: {
46
- type: jsPsych.plugins.parameterType.INT,
47
- pretty_name: 'First stimulus duration',
48
- default: null,
49
- description: 'How long to show the first stimulus for in milliseconds. If null, then the stimulus will remain on the screen until any keypress is made.'
50
- },
51
- gap_duration: {
52
- type: jsPsych.plugins.parameterType.INT,
53
- pretty_name: 'Gap duration',
54
- default: 500,
55
- description: 'How long to show a blank screen in between the two stimuli.'
56
- },
57
- second_stim_duration: {
58
- type: jsPsych.plugins.parameterType.INT,
59
- pretty_name: 'Second stimulus duration',
60
- default: null,
61
- description: 'How long to show the second stimulus for in milliseconds. If null, then the stimulus will remain on the screen until a valid response is made.'
62
- },
63
- prompt: {
64
- type: jsPsych.plugins.parameterType.STRING,
65
- pretty_name: 'Prompt',
66
- default: null,
67
- description: 'Any content here will be displayed below the stimulus.'
68
- }
69
- }
70
- }
71
-
72
- plugin.trial = function(display_element, trial) {
73
-
74
- display_element.innerHTML = '<div class="jspsych-same-different-stimulus">'+trial.stimuli[0]+'</div>';
75
-
76
- var first_stim_info;
77
- if (trial.first_stim_duration > 0) {
78
- jsPsych.pluginAPI.setTimeout(function() {
79
- showBlankScreen();
80
- }, trial.first_stim_duration);
81
- } else {
82
- function afterKeyboardResponse(info) {
83
- first_stim_info = info;
84
- showBlankScreen();
85
- }
86
- jsPsych.pluginAPI.getKeyboardResponse({
87
- callback_function: afterKeyboardResponse,
88
- valid_responses: trial.advance_key,
89
- rt_method: 'performance',
90
- persist: false,
91
- allow_held_key: false
92
- });
93
- }
94
-
95
- function showBlankScreen() {
96
- display_element.innerHTML = '';
97
-
98
- jsPsych.pluginAPI.setTimeout(function() {
99
- showSecondStim();
100
- }, trial.gap_duration);
101
- }
102
-
103
- function showSecondStim() {
104
-
105
- var html = '<div class="jspsych-same-different-stimulus">'+trial.stimuli[1]+'</div>';
106
- //show prompt here
107
- if (trial.prompt !== null) {
108
- html += trial.prompt;
109
- }
110
- display_element.innerHTML = html;
111
-
112
- if (trial.second_stim_duration > 0) {
113
- jsPsych.pluginAPI.setTimeout(function() {
114
- display_element.querySelector('.jspsych-same-different-stimulus').style.visibility = 'hidden';
115
- }, trial.second_stim_duration);
116
- }
117
-
118
-
119
-
120
- var after_response = function(info) {
121
-
122
- // kill any remaining setTimeout handlers
123
- jsPsych.pluginAPI.clearAllTimeouts();
124
-
125
- var correct = false;
126
-
127
- var skey = typeof trial.same_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.same_key) : trial.same_key;
128
- var dkey = typeof trial.different_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.different_key) : trial.different_key;
129
-
130
- if (info.key == skey && trial.answer == 'same') {
131
- correct = true;
132
- }
133
-
134
- if (info.key == dkey && trial.answer == 'different') {
135
- correct = true;
136
- }
137
-
138
- var trial_data = {
139
- "rt": info.rt,
140
- "answer": trial.answer,
141
- "correct": correct,
142
- "stimulus": JSON.stringify([trial.stimuli[0], trial.stimuli[1]]),
143
- "key_press": info.key
144
- };
145
- if (first_stim_info) {
146
- trial_data["rt_stim1"] = first_stim_info.rt;
147
- trial_data["key_press_stim1"] = first_stim_info.key;
148
- }
149
-
150
- display_element.innerHTML = '';
151
-
152
- jsPsych.finishTrial(trial_data);
153
- }
154
-
155
- jsPsych.pluginAPI.getKeyboardResponse({
156
- callback_function: after_response,
157
- valid_responses: [trial.same_key, trial.different_key],
158
- rt_method: 'performance',
159
- persist: false,
160
- allow_held_key: false
161
- });
162
-
163
- }
164
-
165
- };
166
-
167
- return plugin;
168
- })();
@@ -1,169 +0,0 @@
1
- /**
2
- * jspsych-same-different
3
- * Josh de Leeuw
4
- *
5
- * plugin for showing two stimuli sequentially and getting a same / different judgment
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- */
10
-
11
- jsPsych.plugins['same-different-image'] = (function() {
12
-
13
- var plugin = {};
14
-
15
- jsPsych.pluginAPI.registerPreload('same-different-image', 'stimuli', 'image')
16
-
17
- plugin.info = {
18
- name: 'same-different-image',
19
- description: '',
20
- parameters: {
21
- stimuli: {
22
- type: jsPsych.plugins.parameterType.IMAGE,
23
- pretty_name: 'Stimuli',
24
- default: undefined,
25
- array: true,
26
- description: 'The images to be displayed.'
27
- },
28
- answer: {
29
- type: jsPsych.plugins.parameterType.SELECT,
30
- pretty_name: 'Answer',
31
- options: ['same', 'different'],
32
- default: undefined,
33
- description: 'Either "same" or "different".'
34
- },
35
- same_key: {
36
- type: jsPsych.plugins.parameterType.KEYCODE,
37
- pretty_name: 'Same key',
38
- default: 'Q',
39
- description: ''
40
- },
41
- different_key: {
42
- type: jsPsych.plugins.parameterType.KEYCODE,
43
- pretty_name: 'Different key',
44
- default: 'P',
45
- description: 'The key that subjects should press to indicate that the two stimuli are the same.'
46
- },
47
- first_stim_duration: {
48
- type: jsPsych.plugins.parameterType.INT,
49
- pretty_name: 'First stimulus duration',
50
- default: null,
51
- description: 'How long to show the first stimulus for in milliseconds. If null, then the stimulus will remain on the screen until any keypress is made.'
52
- },
53
- gap_duration: {
54
- type: jsPsych.plugins.parameterType.INT,
55
- pretty_name: 'Gap duration',
56
- default: 500,
57
- description: 'How long to show a blank screen in between the two stimuli.'
58
- },
59
- second_stim_duration: {
60
- type: jsPsych.plugins.parameterType.INT,
61
- pretty_name: 'Second stimulus duration',
62
- default: null,
63
- description: 'How long to show the second stimulus for in milliseconds. If null, then the stimulus will remain on the screen until a valid response is made.'
64
- },
65
- prompt: {
66
- type: jsPsych.plugins.parameterType.STRING,
67
- pretty_name: 'Prompt',
68
- default: null,
69
- description: 'Any content here will be displayed below the stimulus.'
70
- }
71
- }
72
- }
73
-
74
- plugin.trial = function(display_element, trial) {
75
-
76
- display_element.innerHTML = '<img class="jspsych-same-different-stimulus" src="'+trial.stimuli[0]+'"></img>';
77
-
78
- var first_stim_info;
79
- if (trial.first_stim_duration > 0) {
80
- jsPsych.pluginAPI.setTimeout(function() {
81
- showBlankScreen();
82
- }, trial.first_stim_duration);
83
- } else {
84
- function afterKeyboardResponse(info) {
85
- first_stim_info = info;
86
- showBlankScreen();
87
- }
88
- jsPsych.pluginAPI.getKeyboardResponse({
89
- callback_function: afterKeyboardResponse,
90
- valid_responses: trial.advance_key,
91
- rt_method: 'performance',
92
- persist: false,
93
- allow_held_key: false
94
- });
95
- }
96
-
97
- function showBlankScreen() {
98
- display_element.innerHTML = '';
99
-
100
- jsPsych.pluginAPI.setTimeout(function() {
101
- showSecondStim();
102
- }, trial.gap_duration);
103
- }
104
-
105
- function showSecondStim() {
106
-
107
- var html = '<img class="jspsych-same-different-stimulus" src="'+trial.stimuli[1]+'"></img>';
108
- //show prompt
109
- if (trial.prompt !== null) {
110
- html += trial.prompt;
111
- }
112
-
113
- display_element.innerHTML = html;
114
-
115
- if (trial.second_stim_duration > 0) {
116
- jsPsych.pluginAPI.setTimeout(function() {
117
- display_element.querySelector('.jspsych-same-different-stimulus').style.visibility = 'hidden';
118
- }, trial.second_stim_duration);
119
- }
120
-
121
- var after_response = function(info) {
122
-
123
- // kill any remaining setTimeout handlers
124
- jsPsych.pluginAPI.clearAllTimeouts();
125
-
126
- var correct = false;
127
-
128
- var skey = typeof trial.same_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.same_key) : trial.same_key;
129
- var dkey = typeof trial.different_key == 'string' ? jsPsych.pluginAPI.convertKeyCharacterToKeyCode(trial.different_key) : trial.different_key;
130
-
131
- if (info.key == skey && trial.answer == 'same') {
132
- correct = true;
133
- }
134
-
135
- if (info.key == dkey && trial.answer == 'different') {
136
- correct = true;
137
- }
138
-
139
- var trial_data = {
140
- "rt": info.rt,
141
- "answer": trial.answer,
142
- "correct": correct,
143
- "stimulus": JSON.stringify([trial.stimuli[0], trial.stimuli[1]]),
144
- "key_press": info.key
145
- };
146
- if (first_stim_info) {
147
- trial_data["rt_stim1"] = first_stim_info.rt;
148
- trial_data["key_press_stim1"] = first_stim_info.key;
149
- }
150
-
151
- display_element.innerHTML = '';
152
-
153
- jsPsych.finishTrial(trial_data);
154
- }
155
-
156
- jsPsych.pluginAPI.getKeyboardResponse({
157
- callback_function: after_response,
158
- valid_responses: [trial.same_key, trial.different_key],
159
- rt_method: 'performance',
160
- persist: false,
161
- allow_held_key: false
162
- });
163
-
164
- }
165
-
166
- };
167
-
168
- return plugin;
169
- })();