jspsych 6.3.1 → 7.1.2

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 (401) hide show
  1. package/README.md +36 -37
  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 +3171 -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 +3165 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +3159 -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 +136 -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 +165 -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 -719
  59. package/docs/core_library/jspsych-data.md +0 -587
  60. package/docs/core_library/jspsych-pluginAPI.md +0 -624
  61. package/docs/core_library/jspsych-randomization.md +0 -389
  62. package/docs/core_library/jspsych-turk.md +0 -98
  63. package/docs/extensions/extensions.md +0 -83
  64. package/docs/extensions/jspsych-ext-webgazer.md +0 -137
  65. package/docs/img/blue.png +0 -0
  66. package/docs/img/devtools-change-css.png +0 -0
  67. package/docs/img/devtools-css-errors.png +0 -0
  68. package/docs/img/devtools-inspect-element.png +0 -0
  69. package/docs/img/folder-setup.png +0 -0
  70. package/docs/img/folder-with-html.png +0 -0
  71. package/docs/img/githubreleases.jpg +0 -0
  72. package/docs/img/jspsych-favicon.png +0 -0
  73. package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
  74. package/docs/img/jspsych-logo.jpg +0 -0
  75. package/docs/img/orange.png +0 -0
  76. package/docs/img/palmer_stim.png +0 -0
  77. package/docs/img/progress_bar.png +0 -0
  78. package/docs/img/prolific-study-completion.png +0 -0
  79. package/docs/img/prolific-study-link.png +0 -0
  80. package/docs/img/visual_search_example.jpg +0 -0
  81. package/docs/index.md +0 -9
  82. package/docs/overview/browser-device-support.md +0 -35
  83. package/docs/overview/callbacks.md +0 -180
  84. package/docs/overview/data.md +0 -281
  85. package/docs/overview/dynamic-parameters.md +0 -147
  86. package/docs/overview/exclude-browser.md +0 -32
  87. package/docs/overview/experiment-options.md +0 -149
  88. package/docs/overview/eye-tracking.md +0 -271
  89. package/docs/overview/fullscreen.md +0 -36
  90. package/docs/overview/media-preloading.md +0 -369
  91. package/docs/overview/mturk.md +0 -77
  92. package/docs/overview/plugins.md +0 -320
  93. package/docs/overview/progress-bar.md +0 -110
  94. package/docs/overview/prolific.md +0 -78
  95. package/docs/overview/record-browser-interactions.md +0 -23
  96. package/docs/overview/running-experiments.md +0 -95
  97. package/docs/overview/style.md +0 -293
  98. package/docs/overview/timeline.md +0 -457
  99. package/docs/plugins/jspsych-animation.md +0 -40
  100. package/docs/plugins/jspsych-audio-button-response.md +0 -60
  101. package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
  102. package/docs/plugins/jspsych-audio-slider-response.md +0 -53
  103. package/docs/plugins/jspsych-call-function.md +0 -81
  104. package/docs/plugins/jspsych-canvas-button-response.md +0 -66
  105. package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
  106. package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
  107. package/docs/plugins/jspsych-categorize-animation.md +0 -60
  108. package/docs/plugins/jspsych-categorize-html.md +0 -53
  109. package/docs/plugins/jspsych-categorize-image.md +0 -53
  110. package/docs/plugins/jspsych-cloze.md +0 -45
  111. package/docs/plugins/jspsych-external-html.md +0 -70
  112. package/docs/plugins/jspsych-free-sort.md +0 -56
  113. package/docs/plugins/jspsych-fullscreen.md +0 -57
  114. package/docs/plugins/jspsych-html-button-response.md +0 -42
  115. package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
  116. package/docs/plugins/jspsych-html-slider-response.md +0 -45
  117. package/docs/plugins/jspsych-iat-html.md +0 -64
  118. package/docs/plugins/jspsych-iat-image.md +0 -64
  119. package/docs/plugins/jspsych-image-button-response.md +0 -48
  120. package/docs/plugins/jspsych-image-keyboard-response.md +0 -58
  121. package/docs/plugins/jspsych-image-slider-response.md +0 -54
  122. package/docs/plugins/jspsych-instructions.md +0 -58
  123. package/docs/plugins/jspsych-maxdiff.md +0 -41
  124. package/docs/plugins/jspsych-preload.md +0 -128
  125. package/docs/plugins/jspsych-rdk.md +0 -119
  126. package/docs/plugins/jspsych-reconstruction.md +0 -48
  127. package/docs/plugins/jspsych-resize.md +0 -39
  128. package/docs/plugins/jspsych-same-different-html.md +0 -53
  129. package/docs/plugins/jspsych-same-different-image.md +0 -66
  130. package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -52
  131. package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
  132. package/docs/plugins/jspsych-survey-html-form.md +0 -50
  133. package/docs/plugins/jspsych-survey-likert.md +0 -70
  134. package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
  135. package/docs/plugins/jspsych-survey-multi-select.md +0 -53
  136. package/docs/plugins/jspsych-survey-text.md +0 -63
  137. package/docs/plugins/jspsych-video-button-response.md +0 -54
  138. package/docs/plugins/jspsych-video-keyboard-response.md +0 -50
  139. package/docs/plugins/jspsych-video-slider-response.md +0 -60
  140. package/docs/plugins/jspsych-virtual-chinrest.md +0 -105
  141. package/docs/plugins/jspsych-visual-search-circle.md +0 -52
  142. package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
  143. package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
  144. package/docs/plugins/jspsych-webgazer-calibrate.md +0 -61
  145. package/docs/plugins/jspsych-webgazer-init-camera.md +0 -30
  146. package/docs/plugins/jspsych-webgazer-validate.md +0 -44
  147. package/docs/plugins/list-of-plugins.md +0 -54
  148. package/docs/tutorials/hello-world.md +0 -162
  149. package/docs/tutorials/rt-task.md +0 -1334
  150. package/docs/tutorials/video-tutorials.md +0 -11
  151. package/examples/add-to-end-of-timeline.html +0 -38
  152. package/examples/case-sensitive-responses.html +0 -45
  153. package/examples/conditional-and-loop-functions.html +0 -64
  154. package/examples/css/jquery-ui.css +0 -1225
  155. package/examples/css-classes-parameter.html +0 -145
  156. package/examples/data-add-properties.html +0 -44
  157. package/examples/data-as-function.html +0 -39
  158. package/examples/data-from-timeline.html +0 -52
  159. package/examples/data-from-url.html +0 -21
  160. package/examples/demo-flanker.html +0 -117
  161. package/examples/demo-simple-rt-task.html +0 -120
  162. package/examples/demos/demo_1.html +0 -35
  163. package/examples/demos/demo_2.html +0 -50
  164. package/examples/demos/demo_3.html +0 -63
  165. package/examples/display-element-to-embed-experiment.html +0 -79
  166. package/examples/end-active-node.html +0 -52
  167. package/examples/end-experiment.html +0 -45
  168. package/examples/exclusions.html +0 -32
  169. package/examples/external_html/simple_consent.html +0 -4
  170. package/examples/img/1.gif +0 -0
  171. package/examples/img/10.gif +0 -0
  172. package/examples/img/11.gif +0 -0
  173. package/examples/img/12.gif +0 -0
  174. package/examples/img/2.gif +0 -0
  175. package/examples/img/3.gif +0 -0
  176. package/examples/img/4.gif +0 -0
  177. package/examples/img/5.gif +0 -0
  178. package/examples/img/6.gif +0 -0
  179. package/examples/img/7.gif +0 -0
  180. package/examples/img/8.gif +0 -0
  181. package/examples/img/9.gif +0 -0
  182. package/examples/img/age/of1.jpg +0 -0
  183. package/examples/img/age/of2.jpg +0 -0
  184. package/examples/img/age/of3.jpg +0 -0
  185. package/examples/img/age/om1.jpg +0 -0
  186. package/examples/img/age/om2.jpg +0 -0
  187. package/examples/img/age/om3.jpg +0 -0
  188. package/examples/img/age/yf1.jpg +0 -0
  189. package/examples/img/age/yf4.jpg +0 -0
  190. package/examples/img/age/yf5.jpg +0 -0
  191. package/examples/img/age/ym2.jpg +0 -0
  192. package/examples/img/age/ym3.jpg +0 -0
  193. package/examples/img/age/ym5.jpg +0 -0
  194. package/examples/img/backwardN.gif +0 -0
  195. package/examples/img/blue.png +0 -0
  196. package/examples/img/card.png +0 -0
  197. package/examples/img/con1.png +0 -0
  198. package/examples/img/con2.png +0 -0
  199. package/examples/img/fixation.gif +0 -0
  200. package/examples/img/happy_face_1.jpg +0 -0
  201. package/examples/img/happy_face_2.jpg +0 -0
  202. package/examples/img/happy_face_3.jpg +0 -0
  203. package/examples/img/happy_face_4.jpg +0 -0
  204. package/examples/img/inc1.png +0 -0
  205. package/examples/img/inc2.png +0 -0
  206. package/examples/img/normalN.gif +0 -0
  207. package/examples/img/orange.png +0 -0
  208. package/examples/img/redX.png +0 -0
  209. package/examples/img/ribbon.jpg +0 -0
  210. package/examples/img/sad_face_1.jpg +0 -0
  211. package/examples/img/sad_face_2.jpg +0 -0
  212. package/examples/img/sad_face_3.jpg +0 -0
  213. package/examples/img/sad_face_4.jpg +0 -0
  214. package/examples/js/snap.svg-min.js +0 -21
  215. package/examples/js/webgazer/ridgeWorker.mjs +0 -135
  216. package/examples/js/webgazer/webgazer.js +0 -88909
  217. package/examples/js/webgazer/worker_scripts/mat.js +0 -306
  218. package/examples/js/webgazer/worker_scripts/util.js +0 -398
  219. package/examples/jspsych-RDK.html +0 -58
  220. package/examples/jspsych-animation.html +0 -39
  221. package/examples/jspsych-audio-button-response.html +0 -58
  222. package/examples/jspsych-audio-keyboard-response.html +0 -68
  223. package/examples/jspsych-audio-slider-response.html +0 -61
  224. package/examples/jspsych-call-function.html +0 -32
  225. package/examples/jspsych-canvas-button-response.html +0 -95
  226. package/examples/jspsych-canvas-keyboard-response.html +0 -78
  227. package/examples/jspsych-canvas-slider-response.html +0 -67
  228. package/examples/jspsych-categorize-animation.html +0 -49
  229. package/examples/jspsych-categorize-html.html +0 -33
  230. package/examples/jspsych-categorize-image.html +0 -44
  231. package/examples/jspsych-cloze.html +0 -37
  232. package/examples/jspsych-free-sort.html +0 -109
  233. package/examples/jspsych-fullscreen.html +0 -45
  234. package/examples/jspsych-html-button-response.html +0 -43
  235. package/examples/jspsych-html-keyboard-response.html +0 -42
  236. package/examples/jspsych-html-slider-response.html +0 -53
  237. package/examples/jspsych-iat.html +0 -520
  238. package/examples/jspsych-image-button-response.html +0 -91
  239. package/examples/jspsych-image-keyboard-response.html +0 -85
  240. package/examples/jspsych-image-slider-response.html +0 -85
  241. package/examples/jspsych-instructions.html +0 -37
  242. package/examples/jspsych-maxdiff.html +0 -33
  243. package/examples/jspsych-preload.html +0 -140
  244. package/examples/jspsych-reconstruction.html +0 -43
  245. package/examples/jspsych-resize.html +0 -34
  246. package/examples/jspsych-same-different-html.html +0 -28
  247. package/examples/jspsych-same-different-image.html +0 -39
  248. package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
  249. package/examples/jspsych-serial-reaction-time.html +0 -54
  250. package/examples/jspsych-survey-html-form.html +0 -33
  251. package/examples/jspsych-survey-likert.html +0 -42
  252. package/examples/jspsych-survey-multi-choice.html +0 -40
  253. package/examples/jspsych-survey-multi-select.html +0 -42
  254. package/examples/jspsych-survey-text.html +0 -34
  255. package/examples/jspsych-video-button-response.html +0 -65
  256. package/examples/jspsych-video-keyboard-response.html +0 -61
  257. package/examples/jspsych-video-slider-response.html +0 -63
  258. package/examples/jspsych-virtual-chinrest.html +0 -69
  259. package/examples/jspsych-visual-search-circle.html +0 -64
  260. package/examples/jspsych-vsl-animate-occlusion.html +0 -35
  261. package/examples/jspsych-vsl-grid-scene.html +0 -47
  262. package/examples/lexical-decision.html +0 -134
  263. package/examples/manual-preloading.html +0 -59
  264. package/examples/pause-unpause.html +0 -33
  265. package/examples/progress-bar.html +0 -68
  266. package/examples/save-trial-parameters.html +0 -98
  267. package/examples/sound/hammer.mp3 +0 -0
  268. package/examples/sound/sound.mp3 +0 -0
  269. package/examples/sound/speech_blue.mp3 +0 -0
  270. package/examples/sound/speech_green.mp3 +0 -0
  271. package/examples/sound/speech_joke.mp3 +0 -0
  272. package/examples/sound/speech_red.mp3 +0 -0
  273. package/examples/sound/tone.mp3 +0 -0
  274. package/examples/timeline-variables-sampling.html +0 -50
  275. package/examples/timeline-variables.html +0 -64
  276. package/examples/video/sample_video.mp4 +0 -0
  277. package/examples/webgazer.html +0 -174
  278. package/examples/webgazer_audio.html +0 -90
  279. package/examples/webgazer_image.html +0 -60
  280. package/extensions/jspsych-ext-webgazer.js +0 -265
  281. package/jspsych.js +0 -3023
  282. package/license.txt +0 -21
  283. package/mkdocs.yml +0 -118
  284. package/plugins/jspsych-animation.js +0 -189
  285. package/plugins/jspsych-audio-button-response.js +0 -269
  286. package/plugins/jspsych-audio-keyboard-response.js +0 -209
  287. package/plugins/jspsych-audio-slider-response.js +0 -278
  288. package/plugins/jspsych-call-function.js +0 -58
  289. package/plugins/jspsych-canvas-button-response.js +0 -199
  290. package/plugins/jspsych-canvas-keyboard-response.js +0 -155
  291. package/plugins/jspsych-canvas-slider-response.js +0 -207
  292. package/plugins/jspsych-categorize-animation.js +0 -266
  293. package/plugins/jspsych-categorize-html.js +0 -220
  294. package/plugins/jspsych-categorize-image.js +0 -222
  295. package/plugins/jspsych-cloze.js +0 -112
  296. package/plugins/jspsych-external-html.js +0 -112
  297. package/plugins/jspsych-free-sort.js +0 -478
  298. package/plugins/jspsych-fullscreen.js +0 -106
  299. package/plugins/jspsych-html-button-response.js +0 -188
  300. package/plugins/jspsych-html-keyboard-response.js +0 -149
  301. package/plugins/jspsych-html-slider-response.js +0 -202
  302. package/plugins/jspsych-iat-html.js +0 -284
  303. package/plugins/jspsych-iat-image.js +0 -286
  304. package/plugins/jspsych-image-button-response.js +0 -327
  305. package/plugins/jspsych-image-keyboard-response.js +0 -263
  306. package/plugins/jspsych-image-slider-response.js +0 -369
  307. package/plugins/jspsych-instructions.js +0 -237
  308. package/plugins/jspsych-maxdiff.js +0 -173
  309. package/plugins/jspsych-preload.js +0 -345
  310. package/plugins/jspsych-rdk.js +0 -1373
  311. package/plugins/jspsych-reconstruction.js +0 -134
  312. package/plugins/jspsych-resize.js +0 -166
  313. package/plugins/jspsych-same-different-html.js +0 -168
  314. package/plugins/jspsych-same-different-image.js +0 -169
  315. package/plugins/jspsych-serial-reaction-time-mouse.js +0 -212
  316. package/plugins/jspsych-serial-reaction-time.js +0 -247
  317. package/plugins/jspsych-survey-html-form.js +0 -171
  318. package/plugins/jspsych-survey-likert.js +0 -195
  319. package/plugins/jspsych-survey-multi-choice.js +0 -208
  320. package/plugins/jspsych-survey-multi-select.js +0 -232
  321. package/plugins/jspsych-survey-text.js +0 -185
  322. package/plugins/jspsych-video-button-response.js +0 -335
  323. package/plugins/jspsych-video-keyboard-response.js +0 -279
  324. package/plugins/jspsych-video-slider-response.js +0 -351
  325. package/plugins/jspsych-virtual-chinrest.js +0 -471
  326. package/plugins/jspsych-visual-search-circle.js +0 -259
  327. package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
  328. package/plugins/jspsych-vsl-grid-scene.js +0 -103
  329. package/plugins/jspsych-webgazer-calibrate.js +0 -161
  330. package/plugins/jspsych-webgazer-init-camera.js +0 -139
  331. package/plugins/jspsych-webgazer-validate.js +0 -314
  332. package/plugins/template/jspsych-plugin-template.js +0 -35
  333. package/tests/README.md +0 -7
  334. package/tests/jsPsych/case-sensitive-responses.test.js +0 -53
  335. package/tests/jsPsych/css-classes-parameter.test.js +0 -107
  336. package/tests/jsPsych/default-iti.test.js +0 -51
  337. package/tests/jsPsych/default-parameters.test.js +0 -58
  338. package/tests/jsPsych/endexperiment.test.js +0 -49
  339. package/tests/jsPsych/events.test.js +0 -606
  340. package/tests/jsPsych/functions-as-parameters.test.js +0 -210
  341. package/tests/jsPsych/init.test.js +0 -48
  342. package/tests/jsPsych/loads.test.js +0 -7
  343. package/tests/jsPsych/min-rt.test.js +0 -58
  344. package/tests/jsPsych/progressbar.test.js +0 -202
  345. package/tests/jsPsych/timeline-variables.test.js +0 -531
  346. package/tests/jsPsych/timelines.test.js +0 -569
  347. package/tests/jsPsych.data/data-csv-conversion.test.js +0 -85
  348. package/tests/jsPsych.data/data-json-conversion.test.js +0 -120
  349. package/tests/jsPsych.data/datacollection.test.js +0 -117
  350. package/tests/jsPsych.data/datacolumn.test.js +0 -50
  351. package/tests/jsPsych.data/datamodule.test.js +0 -152
  352. package/tests/jsPsych.data/dataparameter.test.js +0 -251
  353. package/tests/jsPsych.data/interactions.test.js +0 -109
  354. package/tests/jsPsych.data/trialparameters.test.js +0 -175
  355. package/tests/jsPsych.extensions/extensions.test.js +0 -207
  356. package/tests/jsPsych.extensions/test-extension.js +0 -42
  357. package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -365
  358. package/tests/jsPsych.pluginAPI/preloads.test.js +0 -43
  359. package/tests/jsPsych.randomization/randomziation.test.js +0 -27
  360. package/tests/jsPsych.utils/utils.test.js +0 -58
  361. package/tests/plugins/plugin-animation.test.js +0 -34
  362. package/tests/plugins/plugin-audio-button-response.test.js +0 -15
  363. package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
  364. package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
  365. package/tests/plugins/plugin-call-function.test.js +0 -49
  366. package/tests/plugins/plugin-categorize-animation.test.js +0 -263
  367. package/tests/plugins/plugin-categorize-html.test.js +0 -17
  368. package/tests/plugins/plugin-categorize-image.test.js +0 -17
  369. package/tests/plugins/plugin-cloze.test.js +0 -157
  370. package/tests/plugins/plugin-free-sort.test.js +0 -106
  371. package/tests/plugins/plugin-fullscreen.test.js +0 -41
  372. package/tests/plugins/plugin-html-button-response.test.js +0 -161
  373. package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
  374. package/tests/plugins/plugin-html-slider-response.test.js +0 -155
  375. package/tests/plugins/plugin-iat-html.test.js +0 -299
  376. package/tests/plugins/plugin-iat-image.test.js +0 -298
  377. package/tests/plugins/plugin-image-button-response.test.js +0 -174
  378. package/tests/plugins/plugin-image-keyboard-response.test.js +0 -147
  379. package/tests/plugins/plugin-image-slider-response.test.js +0 -174
  380. package/tests/plugins/plugin-instructions.test.js +0 -85
  381. package/tests/plugins/plugin-maxdiff.test.js +0 -39
  382. package/tests/plugins/plugin-preload.test.js +0 -916
  383. package/tests/plugins/plugin-rdk.test.js +0 -61
  384. package/tests/plugins/plugin-reconstruction.test.js +0 -16
  385. package/tests/plugins/plugin-resize.test.js +0 -16
  386. package/tests/plugins/plugin-same-different-html.test.js +0 -17
  387. package/tests/plugins/plugin-same-different-image.test.js +0 -17
  388. package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
  389. package/tests/plugins/plugin-serial-reaction-time.test.js +0 -109
  390. package/tests/plugins/plugin-survey-html-form.test.js +0 -44
  391. package/tests/plugins/plugin-survey-likert.test.js +0 -48
  392. package/tests/plugins/plugin-survey-multi-choice.test.js +0 -47
  393. package/tests/plugins/plugin-survey-multi-select.test.js +0 -71
  394. package/tests/plugins/plugin-survey-text.test.js +0 -115
  395. package/tests/plugins/plugin-video-button-response.test.js +0 -32
  396. package/tests/plugins/plugin-video-keyboard-response.test.js +0 -32
  397. package/tests/plugins/plugin-video-slider-response.test.js +0 -31
  398. package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
  399. package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
  400. package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
  401. package/tests/testing-utils.js +0 -13
@@ -1,195 +0,0 @@
1
- /**
2
- * jspsych-survey-likert
3
- * a jspsych plugin for measuring items on a likert scale
4
- *
5
- * Josh de Leeuw
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- */
10
-
11
- jsPsych.plugins['survey-likert'] = (function() {
12
-
13
- var plugin = {};
14
-
15
- plugin.info = {
16
- name: 'survey-likert',
17
- description: '',
18
- parameters: {
19
- questions: {
20
- type: jsPsych.plugins.parameterType.COMPLEX,
21
- array: true,
22
- pretty_name: 'Questions',
23
- nested: {
24
- prompt: {
25
- type: jsPsych.plugins.parameterType.STRING,
26
- pretty_name: 'Prompt',
27
- default: undefined,
28
- description: 'Questions that are associated with the slider.'
29
- },
30
- labels: {
31
- type: jsPsych.plugins.parameterType.STRING,
32
- array: true,
33
- pretty_name: 'Labels',
34
- default: undefined,
35
- description: 'Labels to display for individual question.'
36
- },
37
- required: {
38
- type: jsPsych.plugins.parameterType.BOOL,
39
- pretty_name: 'Required',
40
- default: false,
41
- description: 'Makes answering the question required.'
42
- },
43
- name: {
44
- type: jsPsych.plugins.parameterType.STRING,
45
- pretty_name: 'Question Name',
46
- default: '',
47
- description: 'Controls the name of data values associated with this question'
48
- }
49
- }
50
- },
51
- randomize_question_order: {
52
- type: jsPsych.plugins.parameterType.BOOL,
53
- pretty_name: 'Randomize Question Order',
54
- default: false,
55
- description: 'If true, the order of the questions will be randomized'
56
- },
57
- preamble: {
58
- type: jsPsych.plugins.parameterType.STRING,
59
- pretty_name: 'Preamble',
60
- default: null,
61
- description: 'String to display at top of the page.'
62
- },
63
- scale_width: {
64
- type: jsPsych.plugins.parameterType.INT,
65
- pretty_name: 'Scale width',
66
- default: null,
67
- description: 'Width of the likert scales in pixels.'
68
- },
69
- button_label: {
70
- type: jsPsych.plugins.parameterType.STRING,
71
- pretty_name: 'Button label',
72
- default: 'Continue',
73
- description: 'Label of the button.'
74
- },
75
- autocomplete: {
76
- type: jsPsych.plugins.parameterType.BOOL,
77
- pretty_name: 'Allow autocomplete',
78
- default: false,
79
- description: "Setting this to true will enable browser auto-complete or auto-fill for the form."
80
- }
81
- }
82
- }
83
-
84
- plugin.trial = function(display_element, trial) {
85
-
86
- if(trial.scale_width !== null){
87
- var w = trial.scale_width + 'px';
88
- } else {
89
- var w = '100%';
90
- }
91
-
92
- var html = "";
93
- // inject CSS for trial
94
- html += '<style id="jspsych-survey-likert-css">';
95
- html += ".jspsych-survey-likert-statement { display:block; font-size: 16px; padding-top: 40px; margin-bottom:10px; }"+
96
- ".jspsych-survey-likert-opts { list-style:none; width:"+w+"; margin:auto; padding:0 0 35px; display:block; font-size: 14px; line-height:1.1em; }"+
97
- ".jspsych-survey-likert-opt-label { line-height: 1.1em; color: #444; }"+
98
- ".jspsych-survey-likert-opts:before { content: ''; position:relative; top:11px; /*left:9.5%;*/ display:block; background-color:#efefef; height:4px; width:100%; }"+
99
- ".jspsych-survey-likert-opts:last-of-type { border-bottom: 0; }"+
100
- ".jspsych-survey-likert-opts li { display:inline-block; /*width:19%;*/ text-align:center; vertical-align: top; }"+
101
- ".jspsych-survey-likert-opts li input[type=radio] { display:block; position:relative; top:0; left:50%; margin-left:-6px; }"
102
- html += '</style>';
103
-
104
- // show preamble text
105
- if(trial.preamble !== null){
106
- html += '<div id="jspsych-survey-likert-preamble" class="jspsych-survey-likert-preamble">'+trial.preamble+'</div>';
107
- }
108
-
109
- if ( trial.autocomplete ) {
110
- html += '<form id="jspsych-survey-likert-form">';
111
- } else {
112
- html += '<form id="jspsych-survey-likert-form" autocomplete="off">';
113
- }
114
-
115
- // add likert scale questions ///
116
- // generate question order. this is randomized here as opposed to randomizing the order of trial.questions
117
- // so that the data are always associated with the same question regardless of order
118
- var question_order = [];
119
- for(var i=0; i<trial.questions.length; i++){
120
- question_order.push(i);
121
- }
122
- if(trial.randomize_question_order){
123
- question_order = jsPsych.randomization.shuffle(question_order);
124
- }
125
-
126
- for (var i = 0; i < trial.questions.length; i++) {
127
- var question = trial.questions[question_order[i]];
128
- // add question
129
- html += '<label class="jspsych-survey-likert-statement">' + question.prompt + '</label>';
130
- // add options
131
- var width = 100 / question.labels.length;
132
- var options_string = '<ul class="jspsych-survey-likert-opts" data-name="'+question.name+'" data-radio-group="Q' + question_order[i] + '">';
133
- for (var j = 0; j < question.labels.length; j++) {
134
- options_string += '<li style="width:' + width + '%"><label class="jspsych-survey-likert-opt-label"><input type="radio" name="Q' + question_order[i] + '" value="' + j + '"';
135
- if(question.required){
136
- options_string += ' required';
137
- }
138
- options_string += '>' + question.labels[j] + '</label></li>';
139
- }
140
- options_string += '</ul>';
141
- html += options_string;
142
- }
143
-
144
- // add submit button
145
- html += '<input type="submit" id="jspsych-survey-likert-next" class="jspsych-survey-likert jspsych-btn" value="'+trial.button_label+'"></input>';
146
-
147
- html += '</form>'
148
-
149
- display_element.innerHTML = html;
150
-
151
- display_element.querySelector('#jspsych-survey-likert-form').addEventListener('submit', function(e){
152
- e.preventDefault();
153
- // measure response time
154
- var endTime = performance.now();
155
- var response_time = endTime - startTime;
156
-
157
- // create object to hold responses
158
- var question_data = {};
159
- var matches = display_element.querySelectorAll('#jspsych-survey-likert-form .jspsych-survey-likert-opts');
160
- for(var index = 0; index < matches.length; index++){
161
- var id = matches[index].dataset['radioGroup'];
162
- var el = display_element.querySelector('input[name="' + id + '"]:checked');
163
- if (el === null) {
164
- var response = "";
165
- } else {
166
- var response = parseInt(el.value);
167
- }
168
- var obje = {};
169
- if(matches[index].attributes['data-name'].value !== ''){
170
- var name = matches[index].attributes['data-name'].value;
171
- } else {
172
- var name = id;
173
- }
174
- obje[name] = response;
175
- Object.assign(question_data, obje);
176
- }
177
-
178
- // save data
179
- var trial_data = {
180
- rt: response_time,
181
- response: question_data,
182
- question_order: question_order
183
- };
184
-
185
- display_element.innerHTML = '';
186
-
187
- // next trial
188
- jsPsych.finishTrial(trial_data);
189
- });
190
-
191
- var startTime = performance.now();
192
- };
193
-
194
- return plugin;
195
- })();
@@ -1,208 +0,0 @@
1
- /**
2
- * jspsych-survey-multi-choice
3
- * a jspsych plugin for multiple choice survey questions
4
- *
5
- * Shane Martin
6
- *
7
- * documentation: docs.jspsych.org
8
- *
9
- */
10
-
11
-
12
- jsPsych.plugins['survey-multi-choice'] = (function() {
13
- var plugin = {};
14
-
15
- plugin.info = {
16
- name: 'survey-multi-choice',
17
- description: '',
18
- parameters: {
19
- questions: {
20
- type: jsPsych.plugins.parameterType.COMPLEX,
21
- array: true,
22
- pretty_name: 'Questions',
23
- nested: {
24
- prompt: {
25
- type: jsPsych.plugins.parameterType.STRING,
26
- pretty_name: 'Prompt',
27
- default: undefined,
28
- description: 'The strings that will be associated with a group of options.'
29
- },
30
- options: {
31
- type: jsPsych.plugins.parameterType.STRING,
32
- pretty_name: 'Options',
33
- array: true,
34
- default: undefined,
35
- description: 'Displays options for an individual question.'
36
- },
37
- required: {
38
- type: jsPsych.plugins.parameterType.BOOL,
39
- pretty_name: 'Required',
40
- default: false,
41
- description: 'Subject will be required to pick an option for each question.'
42
- },
43
- horizontal: {
44
- type: jsPsych.plugins.parameterType.BOOL,
45
- pretty_name: 'Horizontal',
46
- default: false,
47
- description: 'If true, then questions are centered and options are displayed horizontally.'
48
- },
49
- name: {
50
- type: jsPsych.plugins.parameterType.STRING,
51
- pretty_name: 'Question Name',
52
- default: '',
53
- description: 'Controls the name of data values associated with this question'
54
- }
55
- }
56
- },
57
- randomize_question_order: {
58
- type: jsPsych.plugins.parameterType.BOOL,
59
- pretty_name: 'Randomize Question Order',
60
- default: false,
61
- description: 'If true, the order of the questions will be randomized'
62
- },
63
- preamble: {
64
- type: jsPsych.plugins.parameterType.STRING,
65
- pretty_name: 'Preamble',
66
- default: null,
67
- description: 'HTML formatted string to display at the top of the page above all the questions.'
68
- },
69
- button_label: {
70
- type: jsPsych.plugins.parameterType.STRING,
71
- pretty_name: 'Button label',
72
- default: 'Continue',
73
- description: 'Label of the button.'
74
- },
75
- autocomplete: {
76
- type: jsPsych.plugins.parameterType.BOOL,
77
- pretty_name: 'Allow autocomplete',
78
- default: false,
79
- description: "Setting this to true will enable browser auto-complete or auto-fill for the form."
80
- }
81
- }
82
- }
83
- plugin.trial = function(display_element, trial) {
84
- var plugin_id_name = "jspsych-survey-multi-choice";
85
-
86
- var html = "";
87
-
88
- // inject CSS for trial
89
- html += '<style id="jspsych-survey-multi-choice-css">';
90
- html += ".jspsych-survey-multi-choice-question { margin-top: 2em; margin-bottom: 2em; text-align: left; }"+
91
- ".jspsych-survey-multi-choice-text span.required {color: darkred;}"+
92
- ".jspsych-survey-multi-choice-horizontal .jspsych-survey-multi-choice-text { text-align: center;}"+
93
- ".jspsych-survey-multi-choice-option { line-height: 2; }"+
94
- ".jspsych-survey-multi-choice-horizontal .jspsych-survey-multi-choice-option { display: inline-block; margin-left: 1em; margin-right: 1em; vertical-align: top;}"+
95
- "label.jspsych-survey-multi-choice-text input[type='radio'] {margin-right: 1em;}";
96
- html += '</style>';
97
-
98
- // show preamble text
99
- if(trial.preamble !== null){
100
- html += '<div id="jspsych-survey-multi-choice-preamble" class="jspsych-survey-multi-choice-preamble">'+trial.preamble+'</div>';
101
- }
102
-
103
- // form element
104
- if ( trial.autocomplete ) {
105
- html += '<form id="jspsych-survey-multi-choice-form">';
106
- } else {
107
- html += '<form id="jspsych-survey-multi-choice-form" autocomplete="off">';
108
- }
109
- // generate question order. this is randomized here as opposed to randomizing the order of trial.questions
110
- // so that the data are always associated with the same question regardless of order
111
- var question_order = [];
112
- for(var i=0; i<trial.questions.length; i++){
113
- question_order.push(i);
114
- }
115
- if(trial.randomize_question_order){
116
- question_order = jsPsych.randomization.shuffle(question_order);
117
- }
118
-
119
- // add multiple-choice questions
120
- for (var i = 0; i < trial.questions.length; i++) {
121
-
122
- // get question based on question_order
123
- var question = trial.questions[question_order[i]];
124
- var question_id = question_order[i];
125
-
126
- // create question container
127
- var question_classes = ['jspsych-survey-multi-choice-question'];
128
- if (question.horizontal) {
129
- question_classes.push('jspsych-survey-multi-choice-horizontal');
130
- }
131
-
132
- html += '<div id="jspsych-survey-multi-choice-'+question_id+'" class="'+question_classes.join(' ')+'" data-name="'+question.name+'">';
133
-
134
- // add question text
135
- html += '<p class="jspsych-survey-multi-choice-text survey-multi-choice">' + question.prompt
136
- if(question.required){
137
- html += "<span class='required'>*</span>";
138
- }
139
- html += '</p>';
140
-
141
- // create option radio buttons
142
- for (var j = 0; j < question.options.length; j++) {
143
- // add label and question text
144
- var option_id_name = "jspsych-survey-multi-choice-option-"+question_id+"-"+j;
145
- var input_name = 'jspsych-survey-multi-choice-response-'+question_id;
146
- var input_id = 'jspsych-survey-multi-choice-response-'+question_id+'-'+j;
147
-
148
- var required_attr = question.required ? 'required' : '';
149
-
150
- // add radio button container
151
- html += '<div id="'+option_id_name+'" class="jspsych-survey-multi-choice-option">';
152
- html += '<label class="jspsych-survey-multi-choice-text" for="'+input_id+'">';
153
- html += '<input type="radio" name="'+input_name+'" id="'+input_id+'" value="'+question.options[j]+'" '+required_attr+'></input>';
154
- html += question.options[j]+'</label>';
155
- html += '</div>';
156
- }
157
-
158
- html += '</div>';
159
- }
160
-
161
- // add submit button
162
- html += '<input type="submit" id="'+plugin_id_name+'-next" class="'+plugin_id_name+' jspsych-btn"' + (trial.button_label ? ' value="'+trial.button_label + '"': '') + '></input>';
163
- html += '</form>';
164
-
165
- // render
166
- display_element.innerHTML = html;
167
-
168
- document.querySelector('form').addEventListener('submit', function(event) {
169
- event.preventDefault();
170
- // measure response time
171
- var endTime = performance.now();
172
- var response_time = endTime - startTime;
173
-
174
- // create object to hold responses
175
- var question_data = {};
176
- for(var i=0; i<trial.questions.length; i++){
177
- var match = display_element.querySelector('#jspsych-survey-multi-choice-'+i);
178
- var id = "Q" + i;
179
- if(match.querySelector("input[type=radio]:checked") !== null){
180
- var val = match.querySelector("input[type=radio]:checked").value;
181
- } else {
182
- var val = "";
183
- }
184
- var obje = {};
185
- var name = id;
186
- if(match.attributes['data-name'].value !== ''){
187
- name = match.attributes['data-name'].value;
188
- }
189
- obje[name] = val;
190
- Object.assign(question_data, obje);
191
- }
192
- // save data
193
- var trial_data = {
194
- rt: response_time,
195
- response: question_data,
196
- question_order: question_order
197
- };
198
- display_element.innerHTML = '';
199
-
200
- // next trial
201
- jsPsych.finishTrial(trial_data);
202
- });
203
-
204
- var startTime = performance.now();
205
- };
206
-
207
- return plugin;
208
- })();
@@ -1,232 +0,0 @@
1
- /**
2
- * jspsych-survey-multi-select
3
- * a jspsych plugin for multiple choice survey questions
4
- *
5
- * documentation: docs.jspsych.org
6
- *
7
- */
8
-
9
-
10
- jsPsych.plugins['survey-multi-select'] = (function() {
11
- var plugin = {};
12
-
13
- plugin.info = {
14
- name: 'survey-multi-select',
15
- description: '',
16
- parameters: {
17
- questions: {
18
- type: jsPsych.plugins.parameterType.COMPLEX,
19
- array: true,
20
- pretty_name: 'Questions',
21
- nested: {
22
- prompt: {
23
- type: jsPsych.plugins.parameterType.STRING,
24
- pretty_name: 'Prompt',
25
- default: undefined,
26
- description: 'The strings that will be associated with a group of options.'
27
- },
28
- options: {
29
- type: jsPsych.plugins.parameterType.STRING,
30
- pretty_name: 'Options',
31
- array: true,
32
- default: undefined,
33
- description: 'Displays options for an individual question.'
34
- },
35
- horizontal: {
36
- type: jsPsych.plugins.parameterType.BOOL,
37
- pretty_name: 'Horizontal',
38
- default: false,
39
- description: 'If true, then questions are centered and options are displayed horizontally.'
40
- },
41
- required: {
42
- type: jsPsych.plugins.parameterType.BOOL,
43
- pretty_name: 'Required',
44
- default: false,
45
- description: 'Subject will be required to pick at least one option for this question.'
46
- },
47
- name: {
48
- type: jsPsych.plugins.parameterType.STRING,
49
- pretty_name: 'Question Name',
50
- default: '',
51
- description: 'Controls the name of data values associated with this question'
52
- }
53
- }
54
- },
55
- randomize_question_order: {
56
- type: jsPsych.plugins.parameterType.BOOL,
57
- pretty_name: 'Randomize Question Order',
58
- default: false,
59
- description: 'If true, the order of the questions will be randomized'
60
- },
61
- preamble: {
62
- type: jsPsych.plugins.parameterType.STRING,
63
- pretty_name: 'Preamble',
64
- default: null,
65
- description: 'HTML formatted string to display at the top of the page above all the questions.'
66
- },
67
- button_label: {
68
- type: jsPsych.plugins.parameterType.STRING,
69
- pretty_name: 'Button label',
70
- default: 'Continue',
71
- description: 'Label of the button.'
72
- },
73
- required_message: {
74
- type: jsPsych.plugins.parameterType.STRING,
75
- pretty_name: 'Required message',
76
- default: 'You must choose at least one response for this question',
77
- description: 'Message that will be displayed if required question is not answered.'
78
- },
79
- autocomplete: {
80
- type: jsPsych.plugins.parameterType.BOOL,
81
- pretty_name: 'Allow autocomplete',
82
- default: false,
83
- description: "Setting this to true will enable browser auto-complete or auto-fill for the form."
84
- }
85
- }
86
- }
87
- plugin.trial = function(display_element, trial) {
88
- var plugin_id_name = "jspsych-survey-multi-select";
89
- var plugin_id_selector = '#' + plugin_id_name;
90
- var _join = function( /*args*/ ) {
91
- var arr = Array.prototype.slice.call(arguments, _join.length);
92
- return arr.join(separator = '-');
93
- }
94
-
95
- // inject CSS for trial
96
- var cssstr = ".jspsych-survey-multi-select-question { margin-top: 2em; margin-bottom: 2em; text-align: left; }"+
97
- ".jspsych-survey-multi-select-text span.required {color: darkred;}"+
98
- ".jspsych-survey-multi-select-horizontal .jspsych-survey-multi-select-text { text-align: center;}"+
99
- ".jspsych-survey-multi-select-option { line-height: 2; }"+
100
- ".jspsych-survey-multi-select-horizontal .jspsych-survey-multi-select-option { display: inline-block; margin-left: 1em; margin-right: 1em; vertical-align: top;}"+
101
- "label.jspsych-survey-multi-select-text input[type='checkbox'] {margin-right: 1em;}"
102
- display_element.innerHTML = '<style id="jspsych-survey-multi-select-css">' + cssstr + '</style>';
103
-
104
- // form element
105
- var trial_form_id = _join(plugin_id_name, "form");
106
- display_element.innerHTML += '<form id="'+trial_form_id+'"></form>';
107
- var trial_form = display_element.querySelector("#" + trial_form_id);
108
- if ( !trial.autocomplete ) {
109
- trial_form.setAttribute('autocomplete',"off");
110
- }
111
- // show preamble text
112
- var preamble_id_name = _join(plugin_id_name, 'preamble');
113
- if(trial.preamble !== null){
114
- trial_form.innerHTML += '<div id="'+preamble_id_name+'" class="'+preamble_id_name+'">'+trial.preamble+'</div>';
115
- }
116
- // generate question order. this is randomized here as opposed to randomizing the order of trial.questions
117
- // so that the data are always associated with the same question regardless of order
118
- var question_order = [];
119
- for(var i=0; i<trial.questions.length; i++){
120
- question_order.push(i);
121
- }
122
- if(trial.randomize_question_order){
123
- question_order = jsPsych.randomization.shuffle(question_order);
124
- }
125
- // add multiple-select questions
126
- for (var i = 0; i < trial.questions.length; i++) {
127
- var question = trial.questions[question_order[i]];
128
- var question_id = question_order[i];
129
- // create question container
130
- var question_classes = [_join(plugin_id_name, 'question')];
131
- if (question.horizontal) {
132
- question_classes.push(_join(plugin_id_name, 'horizontal'));
133
- }
134
-
135
- trial_form.innerHTML += '<div id="'+_join(plugin_id_name, question_id)+'" data-name="'+question.name+'" class="'+question_classes.join(' ')+'"></div>';
136
-
137
- var question_selector = _join(plugin_id_selector, question_id);
138
-
139
- // add question text
140
- display_element.querySelector(question_selector).innerHTML += '<p id="survey-question" class="' + plugin_id_name + '-text survey-multi-select">' + question.prompt + '</p>';
141
-
142
- // create option check boxes
143
- for (var j = 0; j < question.options.length; j++) {
144
- var option_id_name = _join(plugin_id_name, "option", question_id, j);
145
-
146
- // add check box container
147
- display_element.querySelector(question_selector).innerHTML += '<div id="'+option_id_name+'" class="'+_join(plugin_id_name, 'option')+'"></div>';
148
-
149
- // add label and question text
150
- var form = document.getElementById(option_id_name)
151
- var input_name = _join(plugin_id_name, 'response', question_id);
152
- var input_id = _join(plugin_id_name, 'response', question_id, j);
153
- var label = document.createElement('label');
154
- label.setAttribute('class', plugin_id_name+'-text');
155
- label.innerHTML = question.options[j];
156
- label.setAttribute('for', input_id)
157
-
158
- // create checkboxes
159
- var input = document.createElement('input');
160
- input.setAttribute('type', "checkbox");
161
- input.setAttribute('name', input_name);
162
- input.setAttribute('id', input_id);
163
- input.setAttribute('value', question.options[j])
164
- form.appendChild(label)
165
- label.insertBefore(input, label.firstChild)
166
- }
167
- }
168
- // add submit button
169
- trial_form.innerHTML += '<div class="fail-message"></div>'
170
- trial_form.innerHTML += '<button id="'+plugin_id_name+'-next" class="'+plugin_id_name+' jspsych-btn">'+trial.button_label+'</button>';
171
-
172
- // validation check on the data first for custom validation handling
173
- // then submit the form
174
- display_element.querySelector('#jspsych-survey-multi-select-next').addEventListener('click', function(){
175
- for(var i=0; i<trial.questions.length; i++){
176
- if(trial.questions[i].required){
177
- if(display_element.querySelector('#jspsych-survey-multi-select-'+i+' input:checked') == null){
178
- display_element.querySelector('#jspsych-survey-multi-select-'+i+' input').setCustomValidity(trial.required_message);
179
- } else {
180
- display_element.querySelector('#jspsych-survey-multi-select-'+i+' input').setCustomValidity('');
181
- }
182
- }
183
- }
184
- trial_form.reportValidity();
185
- })
186
-
187
- trial_form.addEventListener('submit', function(event) {
188
- event.preventDefault();
189
- // measure response time
190
- var endTime = performance.now();
191
- var response_time = endTime - startTime;
192
-
193
- // create object to hold responses
194
- var question_data = {};
195
- var has_response = [];
196
- for(var index=0; index<trial.questions.length; index++){
197
- var match = display_element.querySelector('#jspsych-survey-multi-select-'+index);
198
- var val = [];
199
- var inputboxes = match.querySelectorAll("input[type=checkbox]:checked")
200
- for(var j=0; j<inputboxes.length; j++){
201
- currentChecked = inputboxes[j];
202
- val.push(currentChecked.value)
203
- }
204
- var id = 'Q' + index
205
- var obje = {};
206
- var name = id;
207
- if(match.attributes['data-name'].value !== ''){
208
- name = match.attributes['data-name'].value;
209
- }
210
- obje[name] = val;
211
- Object.assign(question_data, obje);
212
- if(val.length == 0){ has_response.push(false); } else { has_response.push(true); }
213
- }
214
-
215
- // save data
216
- var trial_data = {
217
- rt: response_time,
218
- response: question_data,
219
- question_order: question_order
220
- };
221
- display_element.innerHTML = '';
222
-
223
- // next trial
224
- jsPsych.finishTrial(trial_data);
225
-
226
- });
227
-
228
- var startTime = performance.now();
229
- };
230
-
231
- return plugin;
232
- })();