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,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
- "responses": JSON.stringify(question_data),
182
- "question_order": JSON.stringify(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
- "responses": JSON.stringify(question_data),
196
- "question_order": JSON.stringify(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
- "responses": JSON.stringify(question_data),
219
- "question_order": JSON.stringify(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
- })();