qti 0.9.18 → 0.9.19

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 (598) hide show
  1. checksums.yaml +4 -4
  2. data/lib/qti/models/base.rb +5 -65
  3. data/lib/qti/models/manifest.rb +0 -1
  4. data/lib/qti/sanitizer.rb +125 -0
  5. data/lib/qti/v1/models/interactions/fill_blank_interaction.rb +1 -1
  6. data/lib/qti/version.rb +1 -1
  7. data/spec/fixtures/items_1.2/fib_feedback.xml +117 -0
  8. data/spec/lib/qti/models/base_spec.rb +44 -0
  9. data/spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb +15 -0
  10. metadata +5 -1240
  11. data/spec/fixtures/certica/images/145222.jpg +0 -0
  12. data/spec/fixtures/certica/images/151492.jpg +0 -0
  13. data/spec/fixtures/certica/images/152778.jpg +0 -0
  14. data/spec/fixtures/certica/images/161098.jpg +0 -0
  15. data/spec/fixtures/certica/images/162043.jpg +0 -0
  16. data/spec/fixtures/certica/images/162044.jpg +0 -0
  17. data/spec/fixtures/certica/images/174455.jpg +0 -0
  18. data/spec/fixtures/certica/images/180170.jpg +0 -0
  19. data/spec/fixtures/certica/images/182122.jpg +0 -0
  20. data/spec/fixtures/certica/images/182649.jpg +0 -0
  21. data/spec/fixtures/certica/images/186287.png +0 -0
  22. data/spec/fixtures/certica/images/186288.png +0 -0
  23. data/spec/fixtures/certica/images/186289.png +0 -0
  24. data/spec/fixtures/certica/images/186747.jpg +0 -0
  25. data/spec/fixtures/certica/images/187382.png +0 -0
  26. data/spec/fixtures/certica/images/187383.png +0 -0
  27. data/spec/fixtures/certica/images/187384.png +0 -0
  28. data/spec/fixtures/certica/images/187593.png +0 -0
  29. data/spec/fixtures/certica/images/194343.jpg +0 -0
  30. data/spec/fixtures/certica/images/194354.png +0 -0
  31. data/spec/fixtures/certica/imsmanifest.xml +0 -1
  32. data/spec/fixtures/certica/passages/4336.htm +0 -1
  33. data/spec/fixtures/certica/passages/6428.htm +0 -2
  34. data/spec/fixtures/certica/passages/6546.htm +0 -1
  35. data/spec/fixtures/certica/qti_013823.xml +0 -1
  36. data/spec/fixtures/certica/qti_037457.xml +0 -1
  37. data/spec/fixtures/certica/qti_037468.xml +0 -1
  38. data/spec/fixtures/certica/qti_037478.xml +0 -1
  39. data/spec/fixtures/certica/qti_037498.xml +0 -1
  40. data/spec/fixtures/certica/qti_037995.xml +0 -1
  41. data/spec/fixtures/certica/qti_038003.xml +0 -1
  42. data/spec/fixtures/certica/qti_038630.xml +0 -1
  43. data/spec/fixtures/certica/qti_038881.xml +0 -1
  44. data/spec/fixtures/certica/qti_038907.xml +0 -1
  45. data/spec/fixtures/certica/qti_039251.xml +0 -1
  46. data/spec/fixtures/certica/qti_039354.xml +0 -1
  47. data/spec/fixtures/certica/qti_039441.xml +0 -1
  48. data/spec/fixtures/certica/qti_204657.xml +0 -1
  49. data/spec/fixtures/certica/qti_213769.xml +0 -4
  50. data/spec/fixtures/certica/qti_215227.xml +0 -6
  51. data/spec/fixtures/certica/qti_217622.xml +0 -1
  52. data/spec/fixtures/certica/qti_227383.xml +0 -1
  53. data/spec/fixtures/certica/qti_227419.xml +0 -1
  54. data/spec/fixtures/certica/qti_228253.xml +0 -1
  55. data/spec/fixtures/certica/qti_228444.xml +0 -1
  56. data/spec/fixtures/certica/qti_228820.xml +0 -1
  57. data/spec/fixtures/certica/qti_229874.xml +0 -1
  58. data/spec/fixtures/certica/qti_400240.xml +0 -1
  59. data/spec/fixtures/certica/qti_600842.xml +0 -1
  60. data/spec/fixtures/certica/qti_600940.xml +0 -1
  61. data/spec/fixtures/certica/qti_EMP000001.xml +0 -1
  62. data/spec/fixtures/certica/qti_LBS10884.xml +0 -4
  63. data/spec/fixtures/certica/qti_MMP000006.xml +0 -3
  64. data/spec/fixtures/certica/qti_MMP000007.xml +0 -9
  65. data/spec/fixtures/certica/stylesheet/scip.css +0 -42
  66. data/spec/fixtures/items_1.2/canvas_multiple_fib2.xml +0 -156
  67. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078.html +0 -4
  68. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078.xml +0 -51
  69. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078_choice_A.html +0 -1
  70. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078_choice_B.html +0 -1
  71. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078_choice_C.html +0 -1
  72. data/spec/fixtures/passages_qti_2.1/a4f3621a-195c-4847-a72c-69388250a078_choice_D.html +0 -1
  73. data/spec/fixtures/passages_qti_2.1/imsmanifest.xml +0 -478
  74. data/spec/fixtures/passages_qti_2.1/passages/0cfd5cf7-2c91-4b35-a57a-9f5d1709f68f.html +0 -21
  75. data/spec/fixtures/passages_qti_2.1/passages/0cfd5cf7-2c91-4b35-a57a-9f5d1709f68f_instructions.html +0 -7
  76. data/spec/fixtures/test_imscc/course_settings/assignment_groups.xml +0 -58
  77. data/spec/fixtures/test_imscc/course_settings/canvas_export.txt +0 -2
  78. data/spec/fixtures/test_imscc/course_settings/course_settings.xml +0 -30
  79. data/spec/fixtures/test_imscc/course_settings/files_meta.xml +0 -582
  80. data/spec/fixtures/test_imscc/course_settings/media_tracks.xml +0 -3
  81. data/spec/fixtures/test_imscc/course_settings/module_meta.xml +0 -1061
  82. data/spec/fixtures/test_imscc/course_settings/rubrics.xml +0 -979
  83. data/spec/fixtures/test_imscc/course_settings/syllabus.html +0 -9
  84. data/spec/fixtures/test_imscc/i033a1526c31905bf964879f68cdc2fb8.xml +0 -10
  85. data/spec/fixtures/test_imscc/i045ff2165d2aace6cb0b8b15f3463276/assignment_settings.xml +0 -25
  86. data/spec/fixtures/test_imscc/i045ff2165d2aace6cb0b8b15f3463276/build-your-module-draft.html +0 -59
  87. data/spec/fixtures/test_imscc/i0991c0dc0750b182047b167ab517c10e.xml +0 -5
  88. data/spec/fixtures/test_imscc/i0b1ec9f5eaa45f39d1013975760acc8e/assessment_meta.xml +0 -54
  89. data/spec/fixtures/test_imscc/i0b1ec9f5eaa45f39d1013975760acc8e/assessment_qti.xml +0 -694
  90. data/spec/fixtures/test_imscc/i0f291e2e1da3a13729c11e344c4882af/assignment_settings.xml +0 -25
  91. data/spec/fixtures/test_imscc/i0f291e2e1da3a13729c11e344c4882af/build-your-module-outline.html +0 -19
  92. data/spec/fixtures/test_imscc/i0faea24b64788cd4d0e884fa31102d33.xml +0 -16
  93. data/spec/fixtures/test_imscc/i1011a672a86d0ff5219b6104bd0f6bb9/assignment_settings.xml +0 -25
  94. data/spec/fixtures/test_imscc/i1011a672a86d0ff5219b6104bd0f6bb9/build-your-course-schedule.html +0 -26
  95. data/spec/fixtures/test_imscc/i1099d6061b56cad4ce90c739e2be9a89.xml +0 -15
  96. data/spec/fixtures/test_imscc/i10b38ab18cdd5d01c88f59fecfd83d0a.xml +0 -10
  97. data/spec/fixtures/test_imscc/i10c1b5af1670f894b0b7f3fea8122bbe.xml +0 -16
  98. data/spec/fixtures/test_imscc/i11dcfaf4fdaff4a9353683e4977c860a/assessment_meta.xml +0 -26
  99. data/spec/fixtures/test_imscc/i11dcfaf4fdaff4a9353683e4977c860a/assessment_qti.xml +0 -1525
  100. data/spec/fixtures/test_imscc/i1809dc0b99f46eface80409e370e3da0.xml +0 -16
  101. data/spec/fixtures/test_imscc/i18fc47c4a9e19a851f67220608641260/assignment_settings.xml +0 -25
  102. data/spec/fixtures/test_imscc/i18fc47c4a9e19a851f67220608641260/consultation-2.html +0 -12
  103. data/spec/fixtures/test_imscc/i1ce8b78cf165d6da2da63639f47576da.xml +0 -17
  104. data/spec/fixtures/test_imscc/i21bc0bd5a4e67e3d328e65f847405137.xml +0 -5
  105. data/spec/fixtures/test_imscc/i2243bf73b2220f841ff09460f8ff70ec.xml +0 -17
  106. data/spec/fixtures/test_imscc/i235d76b998f1f003212aed73884ce7bd/assignment_settings.xml +0 -25
  107. data/spec/fixtures/test_imscc/i235d76b998f1f003212aed73884ce7bd/copyright-group-discussion-initial-response.html +0 -10
  108. data/spec/fixtures/test_imscc/i24c38e88d2d3fd3ac12c1f08ccc720a0.xml +0 -16
  109. data/spec/fixtures/test_imscc/i26b23454f2db3650da013af880f3fa65/assignment_settings.xml +0 -25
  110. data/spec/fixtures/test_imscc/i26b23454f2db3650da013af880f3fa65/build-your-instructor-slash-course-introduction.html +0 -36
  111. data/spec/fixtures/test_imscc/i26eb6c3ad24668ae794caa4c5557b424.xml +0 -41
  112. data/spec/fixtures/test_imscc/i2d53aef28016032757d2d5f6f0112225.xml +0 -18
  113. data/spec/fixtures/test_imscc/i33845c44c6aaf69d7c9aebb53ad9c357.xml +0 -16
  114. data/spec/fixtures/test_imscc/i36860de13a4a1c203e7d0dc264b30795/assessment_meta.xml +0 -50
  115. data/spec/fixtures/test_imscc/i36860de13a4a1c203e7d0dc264b30795/assessment_qti.xml +0 -523
  116. data/spec/fixtures/test_imscc/i369bc774fff91c8d81e1f5e7764bedec.xml +0 -19
  117. data/spec/fixtures/test_imscc/i394606f0c30e07c67e690e3373da7c7e.xml +0 -16
  118. data/spec/fixtures/test_imscc/i3b67d80e3251a6647bda7833c5882bb1.xml +0 -19
  119. data/spec/fixtures/test_imscc/i3de5d5f3abb81d69a74b050dbaff1d32.xml +0 -16
  120. data/spec/fixtures/test_imscc/i3dfb8fce13dcfda142a7aa3bf378e729.xml +0 -12
  121. data/spec/fixtures/test_imscc/i3ef0dd4a136b8b57780accb79118a8fe.xml +0 -36
  122. data/spec/fixtures/test_imscc/i429271f6bd9eec51a757630adf128779.xml +0 -16
  123. data/spec/fixtures/test_imscc/i4e2219adb917cb30a232c69100a21af2.xml +0 -33
  124. data/spec/fixtures/test_imscc/i50bb3b9a57626d8d77c92ba75d9e876a.xml +0 -16
  125. data/spec/fixtures/test_imscc/i5526a7b4b8f2fcca07c1d5f3f26c2aeb.xml +0 -37
  126. data/spec/fixtures/test_imscc/i57efd644055b2ee0a96e82431e74e8fb.xml +0 -16
  127. data/spec/fixtures/test_imscc/i5c26e16f0e3a39cae357551643650387.xml +0 -16
  128. data/spec/fixtures/test_imscc/i5f6025e34a80ab246477c251ce26faa6.xml +0 -16
  129. data/spec/fixtures/test_imscc/i6051cfbcc55a17af76bf8d453f01bfc3/assignment_settings.xml +0 -25
  130. data/spec/fixtures/test_imscc/i6051cfbcc55a17af76bf8d453f01bfc3/submit-your-showcase-module.html +0 -19
  131. data/spec/fixtures/test_imscc/i6212e34da017313c3bba88d8989f3d1a/assignment_settings.xml +0 -25
  132. data/spec/fixtures/test_imscc/i6212e34da017313c3bba88d8989f3d1a/consultation-3.html +0 -12
  133. data/spec/fixtures/test_imscc/i64495d32b5edc39686ae496b2156da02.xml +0 -15
  134. data/spec/fixtures/test_imscc/i6beba5b24f54cda0d4a88bed07b80b6b.xml +0 -39
  135. data/spec/fixtures/test_imscc/i6ef3cbd856de71e3b3ec74cb6d08729b.xml +0 -33
  136. data/spec/fixtures/test_imscc/i744349ce6d38243771274f5a196e3788/assignment_settings.xml +0 -25
  137. data/spec/fixtures/test_imscc/i744349ce6d38243771274f5a196e3788/build-your-course-expectations.html +0 -33
  138. data/spec/fixtures/test_imscc/i75402a2ad7c835d244c7c62f87dfc27b.xml +0 -32
  139. data/spec/fixtures/test_imscc/i76a7e1e9f571d1c0bfa4d321e0d589ec.xml +0 -16
  140. data/spec/fixtures/test_imscc/i7989eafd6abf85769f8f5b6b2bcd4f7b.xml +0 -16
  141. data/spec/fixtures/test_imscc/i7ef6c34bb846b4382e79ffbb14cb659b.xml +0 -11
  142. data/spec/fixtures/test_imscc/i82c46c767613c02b959c159368d22a97.xml +0 -5
  143. data/spec/fixtures/test_imscc/i836dcee2ca063769c631893f64fd23f2/assignment_settings.xml +0 -25
  144. data/spec/fixtures/test_imscc/i836dcee2ca063769c631893f64fd23f2/build-your-assessment-activity.html +0 -32
  145. data/spec/fixtures/test_imscc/i84ce4a9bfe735f17eadcd766b9b058dc/assignment_settings.xml +0 -24
  146. data/spec/fixtures/test_imscc/i84ce4a9bfe735f17eadcd766b9b058dc/participant-survey.html +0 -24
  147. data/spec/fixtures/test_imscc/i85663d32860acae3920e1a05e7f08479.xml +0 -16
  148. data/spec/fixtures/test_imscc/i85e0eed7ba68228303c6d7e6b0e9dd88.xml +0 -5
  149. data/spec/fixtures/test_imscc/i864c477a1a12cdf50822eb9800529fc5.xml +0 -16
  150. data/spec/fixtures/test_imscc/i8a43b89d4440b84b022596f51ab6f34a.xml +0 -15
  151. data/spec/fixtures/test_imscc/i8bc9d8342e89a3b75561d5bb67e28f71/assessment_meta.xml +0 -21
  152. data/spec/fixtures/test_imscc/i8bc9d8342e89a3b75561d5bb67e28f71/assessment_qti.xml +0 -1525
  153. data/spec/fixtures/test_imscc/i8da4408cdee4a968a52f88c1b33f551c/assignment_settings.xml +0 -24
  154. data/spec/fixtures/test_imscc/i8da4408cdee4a968a52f88c1b33f551c/faculty-course-completion-plan.html +0 -16
  155. data/spec/fixtures/test_imscc/i8ecb00a1a50f68a478718aa9b370a98e.xml +0 -20
  156. data/spec/fixtures/test_imscc/i9191117165a71fb0696035f7c5f16ff6.xml +0 -41
  157. data/spec/fixtures/test_imscc/i9b5a2a17342e3edd1e8d306521478496.xml +0 -29
  158. data/spec/fixtures/test_imscc/ia4490b91363b3fc8b03cd4b07f5fad43/assignment_settings.xml +0 -26
  159. data/spec/fixtures/test_imscc/ia4490b91363b3fc8b03cd4b07f5fad43/peer-review-of-module-template.html +0 -21
  160. data/spec/fixtures/test_imscc/ia5aebdacd2206c0d3ef82700c92c8349.xml +0 -16
  161. data/spec/fixtures/test_imscc/ia72306310ca90562e512c863423daab8.xml +0 -9
  162. data/spec/fixtures/test_imscc/ia9b2494179ee5d8efc470b43b2421cef.xml +0 -16
  163. data/spec/fixtures/test_imscc/iab664028b4eb3015f5b74e2667cce944/assignment_settings.xml +0 -25
  164. data/spec/fixtures/test_imscc/iab664028b4eb3015f5b74e2667cce944/build-your-syllabus.html +0 -39
  165. data/spec/fixtures/test_imscc/iad613d2a09d2404d0cf61c6ce3dde78c.xml +0 -15
  166. data/spec/fixtures/test_imscc/ib006d8b953a8c5c8ad7007228c36c574/assessment_meta.xml +0 -26
  167. data/spec/fixtures/test_imscc/ib006d8b953a8c5c8ad7007228c36c574/assessment_qti.xml +0 -594
  168. data/spec/fixtures/test_imscc/ib4217f034211df3d18b356316cc5b557.xml +0 -23
  169. data/spec/fixtures/test_imscc/ib4539ecbdc01300515cb2f3c6a90c48d.xml +0 -21
  170. data/spec/fixtures/test_imscc/ib8a7fff00cc37327c29293896e87d56e/assignment_settings.xml +0 -24
  171. data/spec/fixtures/test_imscc/ib8a7fff00cc37327c29293896e87d56e/consultation-1.html +0 -24
  172. data/spec/fixtures/test_imscc/ib8cc168573890e9c8a9697568c31fd12/assessment_meta.xml +0 -26
  173. data/spec/fixtures/test_imscc/ib8cc168573890e9c8a9697568c31fd12/assessment_qti.xml +0 -476
  174. data/spec/fixtures/test_imscc/ibe4de8d3b157272b108912aca0466c88.xml +0 -10
  175. data/spec/fixtures/test_imscc/ic67c759ad7bdf05212a812e87fc9c422.xml +0 -11
  176. data/spec/fixtures/test_imscc/ic93020f51fb4a6eb52b2ceda908e1137.xml +0 -16
  177. data/spec/fixtures/test_imscc/icde9c8441b0c109cc4e53de25123193c.xml +0 -14
  178. data/spec/fixtures/test_imscc/icf859ac052123291fcb01e87a0770e47.xml +0 -28
  179. data/spec/fixtures/test_imscc/id405da883914ba5cc68a0c7f185e61df.xml +0 -15
  180. data/spec/fixtures/test_imscc/id48f3761a8bbada610fe4b1199ce215b.xml +0 -12
  181. data/spec/fixtures/test_imscc/id7b4b57ed267b5be2ee9e3f1bde2f883.xml +0 -16
  182. data/spec/fixtures/test_imscc/id872393e5331029cb544591ee3ed1f47/assignment_settings.xml +0 -24
  183. data/spec/fixtures/test_imscc/id872393e5331029cb544591ee3ed1f47/week-10-showcase-presentation.html +0 -17
  184. data/spec/fixtures/test_imscc/idb8941e34fb2a55a24b096eeb6c92fbd.xml +0 -16
  185. data/spec/fixtures/test_imscc/ie01484d9815a80ea39f1c0c071575b1a.xml +0 -26
  186. data/spec/fixtures/test_imscc/ie3a05153f4713372d016bc639e617029.xml +0 -11
  187. data/spec/fixtures/test_imscc/ie3e8f9d0dfa0a2b0860c1ce2ec1266e1/assignment_settings.xml +0 -25
  188. data/spec/fixtures/test_imscc/ie3e8f9d0dfa0a2b0860c1ce2ec1266e1/consultation-4.html +0 -12
  189. data/spec/fixtures/test_imscc/ie47afd73cabc3e4a467a51bd79b248e0.xml +0 -41
  190. data/spec/fixtures/test_imscc/iedb31ebbba116f2b75283cc3982992ea.xml +0 -5
  191. data/spec/fixtures/test_imscc/if0a2e175cfd9daebe951916e87269065.xml +0 -14
  192. data/spec/fixtures/test_imscc/if10afd7c88c9d078811334fcc5747da0/assignment_settings.xml +0 -25
  193. data/spec/fixtures/test_imscc/if10afd7c88c9d078811334fcc5747da0/objectives-and-interaction-activity.html +0 -26
  194. data/spec/fixtures/test_imscc/if24603ef8143ce1fe51eb02b59aa253c.xml +0 -32
  195. data/spec/fixtures/test_imscc/if34fecec56d608f150f3f16ba42a926a/assessment_meta.xml +0 -26
  196. data/spec/fixtures/test_imscc/if34fecec56d608f150f3f16ba42a926a/assessment_qti.xml +0 -358
  197. data/spec/fixtures/test_imscc/if41bd52525c03629c2a03f24df1ee74a.xml +0 -8
  198. data/spec/fixtures/test_imscc/if4f90f2347057a68b22da7fd231941df.xml +0 -16
  199. data/spec/fixtures/test_imscc/if5799556491364ea0ea802c8cd02c5cf.xml +0 -15
  200. data/spec/fixtures/test_imscc/if6223ff3050be84d41c4178c867ac307.xml +0 -12
  201. data/spec/fixtures/test_imscc/ifba113937c2c6219ed755cc1bc9ff2bf.xml +0 -18
  202. data/spec/fixtures/test_imscc/imsmanifest.xml +0 -1707
  203. data/spec/fixtures/test_imscc/non_cc_assessments/i0a0a2e898e1da54d580e75d8d4a20a84.xml.qti +0 -1217
  204. data/spec/fixtures/test_imscc/non_cc_assessments/i0b1ec9f5eaa45f39d1013975760acc8e.xml.qti +0 -762
  205. data/spec/fixtures/test_imscc/non_cc_assessments/i11dcfaf4fdaff4a9353683e4977c860a.xml.qti +0 -1721
  206. data/spec/fixtures/test_imscc/non_cc_assessments/i2d7380c07483345e6640a5cfa00a0ecf.xml.qti +0 -1962
  207. data/spec/fixtures/test_imscc/non_cc_assessments/i2eccc23777b8201b714fe1a3b310b536.xml.qti +0 -1591
  208. data/spec/fixtures/test_imscc/non_cc_assessments/i36860de13a4a1c203e7d0dc264b30795.xml.qti +0 -591
  209. data/spec/fixtures/test_imscc/non_cc_assessments/i4ad792297071d2710c918f6db332fcdf.xml.qti +0 -727
  210. data/spec/fixtures/test_imscc/non_cc_assessments/i513c9990b68d62a0b6cc4a5a626d1fb3.xml.qti +0 -546
  211. data/spec/fixtures/test_imscc/non_cc_assessments/i5e253f4c2b10b9d27d00a45f157918e6.xml.qti +0 -500
  212. data/spec/fixtures/test_imscc/non_cc_assessments/i844647af22c2ba3f2c1a112f8f20b395.xml.qti +0 -350
  213. data/spec/fixtures/test_imscc/non_cc_assessments/i8bc9d8342e89a3b75561d5bb67e28f71.xml.qti +0 -1721
  214. data/spec/fixtures/test_imscc/non_cc_assessments/i94936ca54bf0a2978b53701dc2002215.xml.qti +0 -6013
  215. data/spec/fixtures/test_imscc/non_cc_assessments/ia2db9bdda4743d5450e76cc8ae481dd1.xml.qti +0 -255
  216. data/spec/fixtures/test_imscc/non_cc_assessments/ib006d8b953a8c5c8ad7007228c36c574.xml.qti +0 -658
  217. data/spec/fixtures/test_imscc/non_cc_assessments/ib8cc168573890e9c8a9697568c31fd12.xml.qti +0 -528
  218. data/spec/fixtures/test_imscc/non_cc_assessments/if34fecec56d608f150f3f16ba42a926a.xml.qti +0 -390
  219. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/ADDIE.pdf +0 -0
  220. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/CanvasInstructorCheatSheet.pdf +0 -0
  221. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/Consultation_1_checklist.docx +0 -0
  222. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/ID e-mail.docx +0 -0
  223. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/IDL_Evaluation and Grading.docx +0 -0
  224. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 1/LMS support_flyer.docx +0 -0
  225. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 2/BlueWheel.png +0 -0
  226. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 2/CDL_Bloom_revised_taxonomy.pdf +0 -0
  227. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 2/Consultation_2_checklist.docx +0 -0
  228. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 2/IDL6543 ModuleRubric.pdf +0 -0
  229. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 2/provost_syllabus.pdf +0 -0
  230. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 3/Consultation 3 Checklist.docx +0 -0
  231. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 3/CourseRubric.pdf +0 -0
  232. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 3/ModuleRubric.pdf +0 -0
  233. data/spec/fixtures/test_imscc/web_resources/Consultations/Consultation 4/Consultation 4 Checklist.docx +0 -0
  234. data/spec/fixtures/test_imscc/web_resources/Learning-to-Adapt_Report_Supplier-Landscape_Education-Growth-Advisors_April-2013.pdf +0 -0
  235. data/spec/fixtures/test_imscc/web_resources/Showcase/showcase script.doc +0 -0
  236. data/spec/fixtures/test_imscc/web_resources/images/2015-IDL6543 Course Images-mod2-86188-1.jpg +0 -0
  237. data/spec/fixtures/test_imscc/web_resources/images/2015-IDL6543 Course Images-mod2-86188.jpg +0 -0
  238. data/spec/fixtures/test_imscc/web_resources/images/ASK.jpg +0 -0
  239. data/spec/fixtures/test_imscc/web_resources/images/AppStore.png +0 -0
  240. data/spec/fixtures/test_imscc/web_resources/images/Chicago_Boats_at_Monroe_Harbor.jpg +0 -0
  241. data/spec/fixtures/test_imscc/web_resources/images/Courses Icon May 2016.png +0 -0
  242. data/spec/fixtures/test_imscc/web_resources/images/Courses_Menu.png +0 -0
  243. data/spec/fixtures/test_imscc/web_resources/images/EduApp.png +0 -0
  244. data/spec/fixtures/test_imscc/web_resources/images/Help icon.png +0 -0
  245. data/spec/fixtures/test_imscc/web_resources/images/Help options screenshot.png +0 -0
  246. data/spec/fixtures/test_imscc/web_resources/images/Help_Corner.png +0 -0
  247. data/spec/fixtures/test_imscc/web_resources/images/Help_Window.png +0 -0
  248. data/spec/fixtures/test_imscc/web_resources/images/LowVision.png +0 -0
  249. data/spec/fixtures/test_imscc/web_resources/images/Record_Icon.png +0 -0
  250. data/spec/fixtures/test_imscc/web_resources/images/Save_button.png +0 -0
  251. data/spec/fixtures/test_imscc/web_resources/images/Screen Shot 2016-04-24 at 4.53.50 PM.png +0 -0
  252. data/spec/fixtures/test_imscc/web_resources/images/Syllabus.png +0 -0
  253. data/spec/fixtures/test_imscc/web_resources/images/TopKit.jpg +0 -0
  254. data/spec/fixtures/test_imscc/web_resources/images/Tranquil_Roman_road-1.jpg +0 -0
  255. data/spec/fixtures/test_imscc/web_resources/images/Tranquil_Roman_road.jpg +0 -0
  256. data/spec/fixtures/test_imscc/web_resources/images/URL_Picture.png +0 -0
  257. data/spec/fixtures/test_imscc/web_resources/images/UseOfColor.png +0 -0
  258. data/spec/fixtures/test_imscc/web_resources/images/building_your_course_course_blueprint.png +0 -0
  259. data/spec/fixtures/test_imscc/web_resources/images/colorblind1.png +0 -0
  260. data/spec/fixtures/test_imscc/web_resources/images/colorblind2.png +0 -0
  261. data/spec/fixtures/test_imscc/web_resources/images/construction_model-1.png +0 -0
  262. data/spec/fixtures/test_imscc/web_resources/images/construction_model.png +0 -0
  263. data/spec/fixtures/test_imscc/web_resources/images/dbsk_bar.jpg +0 -0
  264. data/spec/fixtures/test_imscc/web_resources/images/dbsk_idl_banner.jpg +0 -0
  265. data/spec/fixtures/test_imscc/web_resources/images/dbskicon_chooseyourpath.jpg +0 -0
  266. data/spec/fixtures/test_imscc/web_resources/images/dbskicon_teachingonlinestartegies.jpg +0 -0
  267. data/spec/fixtures/test_imscc/web_resources/images/god.copyright.jpg +0 -0
  268. data/spec/fixtures/test_imscc/web_resources/images/icon_activities.jpg +0 -0
  269. data/spec/fixtures/test_imscc/web_resources/images/icon_assessments.jpg +0 -0
  270. data/spec/fixtures/test_imscc/web_resources/images/icon_assignment.jpg +0 -0
  271. data/spec/fixtures/test_imscc/web_resources/images/icon_discussion.png +0 -0
  272. data/spec/fixtures/test_imscc/web_resources/images/icon_dothis.jpg +0 -0
  273. data/spec/fixtures/test_imscc/web_resources/images/icon_explore.jpg +0 -0
  274. data/spec/fixtures/test_imscc/web_resources/images/icon_groupwork.jpg +0 -0
  275. data/spec/fixtures/test_imscc/web_resources/images/icon_info.jpg +0 -0
  276. data/spec/fixtures/test_imscc/web_resources/images/icon_infolit.jpg +0 -0
  277. data/spec/fixtures/test_imscc/web_resources/images/icon_listen.jpg +0 -0
  278. data/spec/fixtures/test_imscc/web_resources/images/icon_practice.jpg +0 -0
  279. data/spec/fixtures/test_imscc/web_resources/images/icon_presentation.png +0 -0
  280. data/spec/fixtures/test_imscc/web_resources/images/icon_project.jpg +0 -0
  281. data/spec/fixtures/test_imscc/web_resources/images/icon_quiz.jpg +0 -0
  282. data/spec/fixtures/test_imscc/web_resources/images/icon_readthis.jpg +0 -0
  283. data/spec/fixtures/test_imscc/web_resources/images/icon_reminder.jpg +0 -0
  284. data/spec/fixtures/test_imscc/web_resources/images/icon_resources.jpg +0 -0
  285. data/spec/fixtures/test_imscc/web_resources/images/icon_review.jpg +0 -0
  286. data/spec/fixtures/test_imscc/web_resources/images/icon_schedule.png +0 -0
  287. data/spec/fixtures/test_imscc/web_resources/images/icon_strategies.jpg +0 -0
  288. data/spec/fixtures/test_imscc/web_resources/images/icon_test.jpg +0 -0
  289. data/spec/fixtures/test_imscc/web_resources/images/icon_think.jpg +0 -0
  290. data/spec/fixtures/test_imscc/web_resources/images/icon_tips.jpg +0 -0
  291. data/spec/fixtures/test_imscc/web_resources/images/icon_trythis.jpg +0 -0
  292. data/spec/fixtures/test_imscc/web_resources/images/icon_video.jpg +0 -0
  293. data/spec/fixtures/test_imscc/web_resources/images/icon_watchthis.jpg +0 -0
  294. data/spec/fixtures/test_imscc/web_resources/images/icon_webresources.jpg +0 -0
  295. data/spec/fixtures/test_imscc/web_resources/images/idl6543_module3-1.jpg +0 -0
  296. data/spec/fixtures/test_imscc/web_resources/images/idl6543_module3.jpg +0 -0
  297. data/spec/fixtures/test_imscc/web_resources/images/mod-0-BYOC.jpg +0 -0
  298. data/spec/fixtures/test_imscc/web_resources/images/modulesix-introductionbanner-1.jpg +0 -0
  299. data/spec/fixtures/test_imscc/web_resources/images/modulesix-introductionbanner.jpg +0 -0
  300. data/spec/fixtures/test_imscc/web_resources/weekly_content/IDL Rubrics/IDL6543_CourseRubric.pdf +0 -0
  301. data/spec/fixtures/test_imscc/web_resources/weekly_content/IDL Rubrics/IDL6543_Module_Rubric.pdf +0 -0
  302. data/spec/fixtures/test_imscc/web_resources/weekly_content/week00/Personalized Learning Usage Agreement-fccp-fa15.pdf +0 -0
  303. data/spec/fixtures/test_imscc/web_resources/weekly_content/week00/fccp04_12_11.pdf +0 -0
  304. data/spec/fixtures/test_imscc/web_resources/weekly_content/week00/fccp_education.pdf +0 -0
  305. data/spec/fixtures/test_imscc/web_resources/weekly_content/week00/scholarship.pdf +0 -0
  306. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/CDLAVP Letter.pdf +0 -0
  307. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Going_Mobile_with_Canvas_SU16.pdf +0 -0
  308. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/IDL FA 2014 Online Teaching Persona.pptx +0 -0
  309. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/IDL6543_CourseRubric.pdf +0 -0
  310. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Online InitiativeSp16.pdf +0 -0
  311. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Online_Persona_Reference_Sheet.docx +0 -0
  312. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Online_Persona_Worksheet.docx +0 -0
  313. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Web Vet Examples/1_Ch2_3ed_SPSS.swf +0 -0
  314. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Web Vet Examples/4_3ed_SPSS_explore.swf +0 -0
  315. data/spec/fixtures/test_imscc/web_resources/weekly_content/week01/Web Vet Examples/Mod2_pt1_rev.swf +0 -0
  316. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Course Expectations.docx +0 -0
  317. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Course Expectations.pdf +0 -0
  318. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Course Schedule.docx +0 -0
  319. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Course Schedule.pdf +0 -0
  320. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 1.docx +0 -0
  321. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 1.pdf +0 -0
  322. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 2.docx +0 -0
  323. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 2.pdf +0 -0
  324. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 3.docx +0 -0
  325. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Instructor Introduction Option 3.pdf +0 -0
  326. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Syllabus Templater.docx +0 -0
  327. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/BYCA Word Files & PDFs/BYCA Syllabus Templater.pdf +0 -0
  328. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Fair Use Guidelines for Educational Multimedia for the UCF Library.pdf +0 -0
  329. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Introduction_template.docx +0 -0
  330. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Model Copyright Permission Letter.docx +0 -0
  331. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Provost Message 2013.pdf +0 -0
  332. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Provost_Letter.pdf +0 -0
  333. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Schedule Examples/Mixed Mode Schedule Example 1.htm +0 -315
  334. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Schedule Examples/Mixed Mode Schedule Example 2.htm +0 -286
  335. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Schedule Examples/Web Class Course Schedule.htm +0 -252
  336. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Section 508 Standards Guide.doc +0 -0
  337. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/Syllabus_template.docx +0 -0
  338. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/Dickson.html +0 -61
  339. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/Franco.html +0 -54
  340. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/Groff.htm +0 -61
  341. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/Kalfin.html +0 -45
  342. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image1.4d102.jpeg +0 -0
  343. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image1.9a7df.jpeg +0 -0
  344. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image1.b45ab.jpeg +0 -0
  345. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image2.597be.jpeg +0 -0
  346. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image2.6be45.png +0 -0
  347. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image2.e750a.png +0 -0
  348. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image3.00bf8.png +0 -0
  349. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image3.893be.png +0 -0
  350. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image4.48c64.gif +0 -0
  351. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image4.c69ff.png +0 -0
  352. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image5.e94e6.png +0 -0
  353. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image6.33b0d.png +0 -0
  354. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image7.96a90.jpeg +0 -0
  355. data/spec/fixtures/test_imscc/web_resources/weekly_content/week02/intro examples/image8.9d348.png +0 -0
  356. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/BYCA Course Schedule.docx +0 -0
  357. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/BYCA Course Schedule.pdf +0 -0
  358. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/Blooms_Adapted_Model.pdf +0 -0
  359. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/IDL6543_Discussion_Rubric.docx +0 -0
  360. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/IDL6543_Discussion_Rubric.pdf +0 -0
  361. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/Interaction Matrix.docx +0 -0
  362. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/Obj_Int_Worksheet-1.docx +0 -0
  363. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/OnlineGroupActivities.pdf +0 -0
  364. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/Sample_discussion_post.docx +0 -0
  365. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/Sample_discussion_post.pdf +0 -0
  366. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/course_blueprint-1.docx +0 -0
  367. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/course_blueprint.docx +0 -0
  368. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/interactionmatrix.doc +0 -0
  369. data/spec/fixtures/test_imscc/web_resources/weekly_content/week03/interactionmatrix.pdf +0 -0
  370. data/spec/fixtures/test_imscc/web_resources/weekly_content/week04/10-Examples-of-Question-Improvements.rtf +0 -2090
  371. data/spec/fixtures/test_imscc/web_resources/weekly_content/week04/Effective-Assessment-Examples.rtf +0 -1967
  372. data/spec/fixtures/test_imscc/web_resources/weekly_content/week04/WCET_Academic Integrity Checklist 052013.pdf +0 -0
  373. data/spec/fixtures/test_imscc/web_resources/weekly_content/week04/module outline.jpg +0 -0
  374. data/spec/fixtures/test_imscc/web_resources/weekly_content/week04/module_outline-1.docx +0 -0
  375. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/CDL-Graphics Flyer.pdf +33 -8417
  376. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/CDLgraphics_presentation.pptx +0 -0
  377. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/LST Presentation Site.docx +0 -0
  378. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/Online Support Prezi Presentation.docx +0 -0
  379. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/Video Best Practices.pdf +0 -0
  380. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/Video Services Guide.pdf +0 -0
  381. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/materia-page-design-front-back-3.compressed.pdf +0 -0
  382. data/spec/fixtures/test_imscc/web_resources/weekly_content/week05/materia-page-text-only.txt +0 -20
  383. data/spec/fixtures/test_imscc/web_resources/weekly_content/week06/IMG_5641.jpg +0 -0
  384. data/spec/fixtures/test_imscc/web_resources/weekly_content/week06/Module_Template.docx +0 -0
  385. data/spec/fixtures/test_imscc/web_resources/weekly_content/week06/Transcript - Blogs in Plain English.txt +0 -1
  386. data/spec/fixtures/test_imscc/web_resources/weekly_content/week06/Transcript - Mobile Learning.txt +0 -1
  387. data/spec/fixtures/test_imscc/web_resources/weekly_content/week06/Transcript - Wikis in Plain English.txt +0 -1
  388. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/Missing Students.html +0 -7
  389. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/Student Assistant from Hell.html +0 -9
  390. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/Uh-Oh, UFO.html +0 -9
  391. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/Unsteady Landing.html +0 -9
  392. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/group5.html +0 -8
  393. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/group6.html +0 -8
  394. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/group7.html +0 -8
  395. data/spec/fixtures/test_imscc/web_resources/weekly_content/week07/group8.html +0 -8
  396. data/spec/fixtures/test_imscc/web_resources/weekly_content/week08/RITE Fall 2015.pptx +0 -0
  397. data/spec/fixtures/test_imscc/web_resources/weekly_content/week08/RITE Presentation_IDL Spring 2016.pdf +0 -0
  398. data/spec/fixtures/test_imscc/web_resources/weekly_content/week08/Techrangers Presentation_IDL_Sp2016.pdf +0 -0
  399. data/spec/fixtures/test_imscc/web_resources/weekly_content/week08/canvas_apps_handout.docx +0 -0
  400. data/spec/fixtures/test_imscc/wiki_content/accessibility-and-online-course-content.html +0 -83
  401. data/spec/fixtures/test_imscc/wiki_content/accessing-your-development-course.html +0 -47
  402. data/spec/fixtures/test_imscc/wiki_content/adding-a-grading-rubric-and-using-speedgrader.html +0 -22
  403. data/spec/fixtures/test_imscc/wiki_content/assessment-tool-number-2-the-discussions-tool.html +0 -90
  404. data/spec/fixtures/test_imscc/wiki_content/assessment-tool-number-3-the-quizzes-tool.html +0 -68
  405. data/spec/fixtures/test_imscc/wiki_content/assignment-course-orientation.html +0 -46
  406. data/spec/fixtures/test_imscc/wiki_content/assignment-tool.html +0 -30
  407. data/spec/fixtures/test_imscc/wiki_content/assignments-tool-number-1-the-assignments-tool.html +0 -92
  408. data/spec/fixtures/test_imscc/wiki_content/blogs.html +0 -48
  409. data/spec/fixtures/test_imscc/wiki_content/blooms-taxonomy-and-objectives.html +0 -65
  410. data/spec/fixtures/test_imscc/wiki_content/build-your-module-draft-reminder.html +0 -17
  411. data/spec/fixtures/test_imscc/wiki_content/bycp1-developing-your-syllabus.html +0 -13
  412. data/spec/fixtures/test_imscc/wiki_content/bycp2-introduction.html +0 -30
  413. data/spec/fixtures/test_imscc/wiki_content/canvas-apps-and-integrations.html +0 -24
  414. data/spec/fixtures/test_imscc/wiki_content/collaborations-tool.html +0 -24
  415. data/spec/fixtures/test_imscc/wiki_content/conferences-tool.html +0 -24
  416. data/spec/fixtures/test_imscc/wiki_content/content-delivery-and-logistics.html +0 -77
  417. data/spec/fixtures/test_imscc/wiki_content/copyright-and-intellectual-property.html +0 -120
  418. data/spec/fixtures/test_imscc/wiki_content/course-expectations-template.html +0 -57
  419. data/spec/fixtures/test_imscc/wiki_content/course-expectations.html +0 -67
  420. data/spec/fixtures/test_imscc/wiki_content/course-introduction.html +0 -34
  421. data/spec/fixtures/test_imscc/wiki_content/course-orientation-activities.html +0 -40
  422. data/spec/fixtures/test_imscc/wiki_content/course-scenario-activity-final.html +0 -61
  423. data/spec/fixtures/test_imscc/wiki_content/create-a-long-quiz-10-or-more-questions-using-respondus.html +0 -35
  424. data/spec/fixtures/test_imscc/wiki_content/create-a-short-quiz-1-5-questions-in.html +0 -32
  425. data/spec/fixtures/test_imscc/wiki_content/creating-content.html +0 -15
  426. data/spec/fixtures/test_imscc/wiki_content/creating-online-syllabus-from-word.html +0 -53
  427. data/spec/fixtures/test_imscc/wiki_content/designing-content.html +0 -28
  428. data/spec/fixtures/test_imscc/wiki_content/digital-textbooks.html +0 -36
  429. data/spec/fixtures/test_imscc/wiki_content/directions-to-face-to-face-sessions.html +0 -39
  430. data/spec/fixtures/test_imscc/wiki_content/discussion-tool-assignment.html +0 -43
  431. data/spec/fixtures/test_imscc/wiki_content/etextbook-essentials.html +0 -27
  432. data/spec/fixtures/test_imscc/wiki_content/examples-of-multiple-choice-items-at-the-levels-of-blooms-taxonomy.html +0 -53
  433. data/spec/fixtures/test_imscc/wiki_content/explanation-of-research-letter.html +0 -24
  434. data/spec/fixtures/test_imscc/wiki_content/exploring-communication-tools.html +0 -64
  435. data/spec/fixtures/test_imscc/wiki_content/faculty-course-completion-plan-fccp.html +0 -32
  436. data/spec/fixtures/test_imscc/wiki_content/fair-use-guidelines-for-educational-multimedia.html +0 -44
  437. data/spec/fixtures/test_imscc/wiki_content/ferpa.html +0 -36
  438. data/spec/fixtures/test_imscc/wiki_content/front-page.html +0 -34
  439. data/spec/fixtures/test_imscc/wiki_content/grading-assessments-optional-activity.html +0 -27
  440. data/spec/fixtures/test_imscc/wiki_content/grading-your-assignments.html +0 -22
  441. data/spec/fixtures/test_imscc/wiki_content/important-reminders.html +0 -40
  442. data/spec/fixtures/test_imscc/wiki_content/instructional-strategies-and-best-practices.html +0 -61
  443. data/spec/fixtures/test_imscc/wiki_content/interaction-collaboration-and-group-work.html +0 -121
  444. data/spec/fixtures/test_imscc/wiki_content/introduction-to-building-course-schedule.html +0 -51
  445. data/spec/fixtures/test_imscc/wiki_content/introduction-to-building-your-course-activities.html +0 -24
  446. data/spec/fixtures/test_imscc/wiki_content/introduction-to-building-your-module-draft.html +0 -35
  447. data/spec/fixtures/test_imscc/wiki_content/library-services.html +0 -47
  448. data/spec/fixtures/test_imscc/wiki_content/managing-academic-integrity-and-honesty-in-the-online-environment.html +0 -60
  449. data/spec/fixtures/test_imscc/wiki_content/managing-grades.html +0 -38
  450. data/spec/fixtures/test_imscc/wiki_content/mixed-mode-schedule-example-1.html +0 -331
  451. data/spec/fixtures/test_imscc/wiki_content/mixed-module-schedule-example-2.html +0 -307
  452. data/spec/fixtures/test_imscc/wiki_content/mobile-devices-and-apps.html +0 -64
  453. data/spec/fixtures/test_imscc/wiki_content/model-copyright-permission-letter.html +0 -43
  454. data/spec/fixtures/test_imscc/wiki_content/module-1-sample.html +0 -98
  455. data/spec/fixtures/test_imscc/wiki_content/module-rubric.html +0 -211
  456. data/spec/fixtures/test_imscc/wiki_content/module-template.html +0 -33
  457. data/spec/fixtures/test_imscc/wiki_content/online-assessments.html +0 -107
  458. data/spec/fixtures/test_imscc/wiki_content/online-at-ucf-support-presentation.html +0 -13
  459. data/spec/fixtures/test_imscc/wiki_content/online-course-dynamics.html +0 -106
  460. data/spec/fixtures/test_imscc/wiki_content/online-teaching-persona-worksheet.html +0 -324
  461. data/spec/fixtures/test_imscc/wiki_content/open-educational-resources.html +0 -63
  462. data/spec/fixtures/test_imscc/wiki_content/options-for-building-course-content.html +0 -42
  463. data/spec/fixtures/test_imscc/wiki_content/options-for-building-instructor-slash-course-introductions.html +0 -72
  464. data/spec/fixtures/test_imscc/wiki_content/options-for-creating-and-delivering-content.html +0 -68
  465. data/spec/fixtures/test_imscc/wiki_content/orientation-to-the-build-your-course-activities-byca.html +0 -38
  466. data/spec/fixtures/test_imscc/wiki_content/participant-survey.html +0 -109
  467. data/spec/fixtures/test_imscc/wiki_content/question-improvement-suggestions.html +0 -156
  468. data/spec/fixtures/test_imscc/wiki_content/quizzes-tool-assignment.html +0 -24
  469. data/spec/fixtures/test_imscc/wiki_content/sample-scenarios.html +0 -17
  470. data/spec/fixtures/test_imscc/wiki_content/schedule.html +0 -93
  471. data/spec/fixtures/test_imscc/wiki_content/scholarship-of-teaching-and-learning.html +0 -86
  472. data/spec/fixtures/test_imscc/wiki_content/screencasting.html +0 -59
  473. data/spec/fixtures/test_imscc/wiki_content/services-2.html +0 -50
  474. data/spec/fixtures/test_imscc/wiki_content/services.html +0 -89
  475. data/spec/fixtures/test_imscc/wiki_content/social-bookmarking.html +0 -40
  476. data/spec/fixtures/test_imscc/wiki_content/social-networking.html +0 -40
  477. data/spec/fixtures/test_imscc/wiki_content/strategies-for-blip-no-radar-screen.html +0 -18
  478. data/spec/fixtures/test_imscc/wiki_content/strategies-for-take-off-approval.html +0 -16
  479. data/spec/fixtures/test_imscc/wiki_content/student-groups.html +0 -39
  480. data/spec/fixtures/test_imscc/wiki_content/submit-quiz-questions-to-online-at-ucf-support-to-build-your-quiz.html +0 -37
  481. data/spec/fixtures/test_imscc/wiki_content/syllabus-template.html +0 -283
  482. data/spec/fixtures/test_imscc/wiki_content/syllabus.html +0 -581
  483. data/spec/fixtures/test_imscc/wiki_content/teaching-modalities.html +0 -31
  484. data/spec/fixtures/test_imscc/wiki_content/techrangers-and-accessibility.html +0 -110
  485. data/spec/fixtures/test_imscc/wiki_content/templates.html +0 -17
  486. data/spec/fixtures/test_imscc/wiki_content/tools-for-assessing-student-progress-in.html +0 -59
  487. data/spec/fixtures/test_imscc/wiki_content/top-ten-copyright-and-fair-use-questions.html +0 -64
  488. data/spec/fixtures/test_imscc/wiki_content/using-speedgrader.html +0 -40
  489. data/spec/fixtures/test_imscc/wiki_content/using-the-gradebook.html +0 -55
  490. data/spec/fixtures/test_imscc/wiki_content/video-conferencing.html +0 -44
  491. data/spec/fixtures/test_imscc/wiki_content/web-based-schedule-example.html +0 -172
  492. data/spec/fixtures/test_imscc/wiki_content/web-links.html +0 -42
  493. data/spec/fixtures/test_imscc/wiki_content/web-vet-sample-videos.html +0 -18
  494. data/spec/fixtures/test_imscc/wiki_content/week-0-getting-started.html +0 -58
  495. data/spec/fixtures/test_imscc/wiki_content/week-0-summary-and-looking-ahead.html +0 -56
  496. data/spec/fixtures/test_imscc/wiki_content/week-1-going-mobile-with.html +0 -229
  497. data/spec/fixtures/test_imscc/wiki_content/week-1-introductions.html +0 -31
  498. data/spec/fixtures/test_imscc/wiki_content/week-1-navigating-the-online-environment.html +0 -49
  499. data/spec/fixtures/test_imscc/wiki_content/week-1-overview.html +0 -34
  500. data/spec/fixtures/test_imscc/wiki_content/week-1-summary-and-looking-ahead.html +0 -26
  501. data/spec/fixtures/test_imscc/wiki_content/week-1-the-online-teaching-persona-develop-and-deliver-your-persona.html +0 -70
  502. data/spec/fixtures/test_imscc/wiki_content/week-1-web-vet-strategies.html +0 -30
  503. data/spec/fixtures/test_imscc/wiki_content/week-2-content-in-the-online-environment.html +0 -53
  504. data/spec/fixtures/test_imscc/wiki_content/week-2-summary-and-looking-ahead.html +0 -32
  505. data/spec/fixtures/test_imscc/wiki_content/week-3-designing-interactive-course-activities.html +0 -49
  506. data/spec/fixtures/test_imscc/wiki_content/week-3-sample-discussion-post.html +0 -14
  507. data/spec/fixtures/test_imscc/wiki_content/week-3-summary-and-looking-ahead.html +0 -26
  508. data/spec/fixtures/test_imscc/wiki_content/week-4-effective-online-assessments.html +0 -40
  509. data/spec/fixtures/test_imscc/wiki_content/week-4-summary-and-looking-ahead.html +0 -26
  510. data/spec/fixtures/test_imscc/wiki_content/week-5-introduction.html +0 -38
  511. data/spec/fixtures/test_imscc/wiki_content/week-5-overview.html +0 -33
  512. data/spec/fixtures/test_imscc/wiki_content/week-5-summary-and-looking-ahead.html +0 -24
  513. data/spec/fixtures/test_imscc/wiki_content/week-6-enhancing-your-course-with-emerging-technology.html +0 -66
  514. data/spec/fixtures/test_imscc/wiki_content/week-6-summary-and-looking-ahead.html +0 -26
  515. data/spec/fixtures/test_imscc/wiki_content/week-7-managing-your-online-course.html +0 -40
  516. data/spec/fixtures/test_imscc/wiki_content/week-7-summary-and-looking-ahead.html +0 -24
  517. data/spec/fixtures/test_imscc/wiki_content/week-8-overview.html +0 -31
  518. data/spec/fixtures/test_imscc/wiki_content/week-8-summary-and-looking-ahead.html +0 -23
  519. data/spec/fixtures/test_imscc/wiki_content/week-8-support-scholarship-and-peer-review.html +0 -37
  520. data/spec/fixtures/test_imscc/wiki_content/week-9-production-week.html +0 -57
  521. data/spec/fixtures/test_imscc/wiki_content/wikis.html +0 -47
  522. data/spec/fixtures/test_qti_2.1.check/images/145222.jpg +0 -0
  523. data/spec/fixtures/test_qti_2.1.check/images/151492.jpg +0 -0
  524. data/spec/fixtures/test_qti_2.1.check/images/152778.jpg +0 -0
  525. data/spec/fixtures/test_qti_2.1.check/images/161098.jpg +0 -0
  526. data/spec/fixtures/test_qti_2.1.check/images/162043.jpg +0 -0
  527. data/spec/fixtures/test_qti_2.1.check/images/162044.jpg +0 -0
  528. data/spec/fixtures/test_qti_2.1.check/images/174455.jpg +0 -0
  529. data/spec/fixtures/test_qti_2.1.check/images/180170.jpg +0 -0
  530. data/spec/fixtures/test_qti_2.1.check/images/182122.jpg +0 -0
  531. data/spec/fixtures/test_qti_2.1.check/images/182649.jpg +0 -0
  532. data/spec/fixtures/test_qti_2.1.check/images/186287.png +0 -0
  533. data/spec/fixtures/test_qti_2.1.check/images/186288.png +0 -0
  534. data/spec/fixtures/test_qti_2.1.check/images/186289.png +0 -0
  535. data/spec/fixtures/test_qti_2.1.check/images/186747.jpg +0 -0
  536. data/spec/fixtures/test_qti_2.1.check/images/187382.png +0 -0
  537. data/spec/fixtures/test_qti_2.1.check/images/187383.png +0 -0
  538. data/spec/fixtures/test_qti_2.1.check/images/187384.png +0 -0
  539. data/spec/fixtures/test_qti_2.1.check/images/187593.png +0 -0
  540. data/spec/fixtures/test_qti_2.1.check/images/194343.jpg +0 -0
  541. data/spec/fixtures/test_qti_2.1.check/images/194354.png +0 -0
  542. data/spec/fixtures/test_qti_2.1.check/imsmanifest.xml +0 -1
  543. data/spec/fixtures/test_qti_2.1.check/passages/4336.htm +0 -1
  544. data/spec/fixtures/test_qti_2.1.check/passages/6428.htm +0 -2
  545. data/spec/fixtures/test_qti_2.1.check/passages/6546.htm +0 -1
  546. data/spec/fixtures/test_qti_2.1.check/qti_013823.xml +0 -1
  547. data/spec/fixtures/test_qti_2.1.check/qti_037457.xml +0 -1
  548. data/spec/fixtures/test_qti_2.1.check/qti_037468.xml +0 -1
  549. data/spec/fixtures/test_qti_2.1.check/qti_037478.xml +0 -1
  550. data/spec/fixtures/test_qti_2.1.check/qti_037498.xml +0 -1
  551. data/spec/fixtures/test_qti_2.1.check/qti_037995.xml +0 -1
  552. data/spec/fixtures/test_qti_2.1.check/qti_038003.xml +0 -1
  553. data/spec/fixtures/test_qti_2.1.check/qti_038630.xml +0 -1
  554. data/spec/fixtures/test_qti_2.1.check/qti_038881.xml +0 -1
  555. data/spec/fixtures/test_qti_2.1.check/qti_038907.xml +0 -1
  556. data/spec/fixtures/test_qti_2.1.check/qti_039251.xml +0 -1
  557. data/spec/fixtures/test_qti_2.1.check/qti_039354.xml +0 -1
  558. data/spec/fixtures/test_qti_2.1.check/qti_039441.xml +0 -1
  559. data/spec/fixtures/test_qti_2.1.check/qti_204657.xml +0 -1
  560. data/spec/fixtures/test_qti_2.1.check/qti_213769.xml +0 -4
  561. data/spec/fixtures/test_qti_2.1.check/qti_215227.xml +0 -6
  562. data/spec/fixtures/test_qti_2.1.check/qti_217622.xml +0 -1
  563. data/spec/fixtures/test_qti_2.1.check/qti_227383.xml +0 -1
  564. data/spec/fixtures/test_qti_2.1.check/qti_227419.xml +0 -1
  565. data/spec/fixtures/test_qti_2.1.check/qti_228253.xml +0 -1
  566. data/spec/fixtures/test_qti_2.1.check/qti_228444.xml +0 -1
  567. data/spec/fixtures/test_qti_2.1.check/qti_228820.xml +0 -1
  568. data/spec/fixtures/test_qti_2.1.check/qti_229874.xml +0 -1
  569. data/spec/fixtures/test_qti_2.1.check/qti_400240.xml +0 -1
  570. data/spec/fixtures/test_qti_2.1.check/qti_600842.xml +0 -1
  571. data/spec/fixtures/test_qti_2.1.check/qti_600940.xml +0 -1
  572. data/spec/fixtures/test_qti_2.1.check/qti_EMP000001.xml +0 -1
  573. data/spec/fixtures/test_qti_2.1.check/qti_LBS10884.xml +0 -4
  574. data/spec/fixtures/test_qti_2.1.check/qti_MMP000006.xml +0 -3
  575. data/spec/fixtures/test_qti_2.1.check/qti_MMP000007.xml +0 -9
  576. data/spec/fixtures/test_qti_2.1.check/stylesheet/scip.css +0 -42
  577. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_01/qtiv2p1_EntryTest_VE_IP_01.xml +0 -67
  578. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_02/apip_VE_IP_02.css +0 -38
  579. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_02/apip_VE_IP_02.svg +0 -28
  580. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_02/qtiv2p1_EntryTest_VE_IP_02.xml +0 -121
  581. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_03/qtiv2p1_EntryTest_VE_IP_03.xml +0 -129
  582. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_04/qtiv2p1_EntryTest_VE_IP_04.xml +0 -69
  583. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_05/apip_VE_IP_05_croc.png +0 -0
  584. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_05/apip_VE_IP_05_flamingos.png +0 -0
  585. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_05/apip_VE_IP_05_title.png +0 -0
  586. data/spec/fixtures/test_qti_2.1.old/Items/Item_VE_IP_05/qtiv2p1_EntryTest_VE_IP_05.xml +0 -139
  587. data/spec/fixtures/test_qti_2.1.old/Tests/Test_VE_TP_06/qtiv2p1_EntryTest_VE_TP_06.xml +0 -200
  588. data/spec/fixtures/test_qti_2.1.old/imsmanifest.xml +0 -264
  589. data/spec/fixtures/test_qti_2.1.zip.old +0 -0
  590. data/spec/fixtures/test_qti_2.1/example/graphicOrder.xml +0 -32
  591. data/spec/fixtures/test_qti_2.1/example/hotspot.xml +0 -26
  592. data/spec/gemfiles/nokogiri-1.6.gemfile.lock +0 -149
  593. data/spec/gemfiles/nokogiri-1.8.gemfile.lock +0 -149
  594. data/spec/gemfiles/rails-4.2.gemfile.lock +0 -208
  595. data/spec/gemfiles/rails-5.0.gemfile.lock +0 -214
  596. data/spec/gemfiles/rails-5.1.gemfile.lock +0 -214
  597. data/spec/gemfiles/sanitize-4.2.gemfile.lock +0 -149
  598. data/spec/gemfiles/sanitize-4.5.gemfile.lock +0 -149
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f98b966174234c785257c789cdd6130cc59abb20
4
- data.tar.gz: 58464a2cbc399e5c63e6d5209165fed1da5c7e81
3
+ metadata.gz: f08961302e59741f56b51aabcb16edb63f901be4
4
+ data.tar.gz: f9c74f21b63ee84c5049f5e4c7ea2f38cb99a621
5
5
  SHA512:
6
- metadata.gz: bcad0a6d3725624c35e51ed164c347505870f49340eefdb020b0b3769211ac5f74efc6efef046d7336376c47cb8b3c9d4fd152c6a5a0c162a6fe7b625652feb9
7
- data.tar.gz: d5713beb9bdb67e3bb00c0b875db8b9011a9eb964b703861023b5812edffa11fdebc37c6baa6444193530bf59de999f1eaa253b2501419e635a277262f0b9f56
6
+ metadata.gz: dd55d71f3a2d3da8630cb395f84e785b601a0d810445299788dcf8fa3d744655ebe9d0806422a81e68e7a60dfeba7325eea3fb005d33951573d443619ff2b7b6
7
+ data.tar.gz: '08526dd39ab4c10f740762c017cb5148855c00e5bc0c9eced6d91eccd6ad8d7962dc38941d5eba7cf163e32a50ca18b943c836a3793f8ce4d9c9422fc78ac066'
@@ -1,7 +1,7 @@
1
1
  require 'nokogiri'
2
- require 'sanitize'
3
2
  require 'pathname'
4
3
  require 'mathml2latex'
4
+ require 'qti/sanitizer'
5
5
 
6
6
  module Qti
7
7
  class ParseError < StandardError; end
@@ -13,45 +13,8 @@ module Qti
13
13
  attr_reader :doc, :path, :package_root
14
14
  attr_accessor :manifest
15
15
 
16
- ELEMENTS_REMAP = {
17
- 'prompt' => 'div',
18
- 'simpleBlock' => 'div',
19
- 'simpleInline' => 'span',
20
- 'atomicBlock' => 'div',
21
- 'atomicInline' => 'span'
22
- }.freeze
23
-
24
16
  def sanitize_content!(html)
25
- Sanitize.fragment(html, sanitize_config)
26
- end
27
-
28
- def object_tag_transformer
29
- lambda do |env|
30
- return unless env[:node_name] == 'object'
31
- return if env[:is_whitelisted] || !env[:node].element?
32
- replace_object_node(env[:node])
33
- end
34
- end
35
-
36
- def remap_unknown_tags_transformer
37
- lambda do |env|
38
- node_name = env[:node_name]
39
- node = env[:node]
40
-
41
- return if env[:is_whitelisted] || !node.element?
42
- return unless ELEMENTS_REMAP.keys.include? node_name
43
-
44
- new_name = ELEMENTS_REMAP[node_name]
45
- env[:node].name = new_name
46
- env[:node_name] = new_name
47
- end
48
- end
49
-
50
- def sanitize_config(import_objects: true)
51
- transformers = []
52
- transformers << object_tag_transformer if import_objects
53
- transformers << remap_unknown_tags_transformer
54
- Sanitize::Config::RELAXED.merge transformers: transformers
17
+ sanitizer.clean(html)
55
18
  end
56
19
 
57
20
  def self.from_path!(path, package_root = nil)
@@ -131,33 +94,10 @@ module Qti
131
94
  @path = other_item.path
132
95
  end
133
96
 
134
- def replace_object_node(node)
135
- path = remap_href_path(node[:data])
136
- if path
137
- case node[:type]
138
- when %r{^image\/}
139
- return replace_with_image(node, node[:data])
140
- when 'text/html'
141
- return replace_with_html(node, path)
142
- end
143
- end
144
- # remove unrecognized or invalid objects from the sanitized document
145
- node.unlink
146
- end
147
-
148
- def replace_with_image(node, src)
149
- node.name = 'img'
150
- node[:src] = src
151
- end
97
+ private
152
98
 
153
- def replace_with_html(node, path)
154
- content = File.read(path)
155
- html_content = Sanitize.fragment(content, sanitize_config(import_objects: false))
156
- node.name = 'div'
157
- node.add_child(Nokogiri::HTML.fragment(html_content))
158
- rescue StandardError => e
159
- warn "failed to import html object #{path}: #{e.message}"
160
- node.unlink
99
+ def sanitizer
100
+ @sanitizer ||= Sanitizer.new
161
101
  end
162
102
  end
163
103
  end
@@ -75,7 +75,6 @@ module Qti
75
75
  canvas_extra_file(identifier, '.xml.qti')
76
76
  end
77
77
 
78
-
79
78
  def asset_resource_for_ims(identifier, qti_type)
80
79
  base_xpath = "[@identifier='#{identifier}' and starts-with(@type, '#{qti_type}')]"
81
80
  xmlns_resource(base_xpath + '/@href') || xmlns_resource(base_xpath + '/xmlns:file/@href')
@@ -0,0 +1,125 @@
1
+ require 'nokogiri'
2
+ require 'sanitize'
3
+ require 'uri'
4
+
5
+ module Qti
6
+ class Sanitizer
7
+ ELEMENTS_REMAP = {
8
+ 'prompt' => 'div',
9
+ 'simpleBlock' => 'div',
10
+ 'simpleInline' => 'span',
11
+ 'atomicBlock' => 'div',
12
+ 'atomicInline' => 'span'
13
+ }.freeze
14
+
15
+ PROTOCOLS = ['http', 'https', :relative].freeze
16
+ FILTER_TAGS = %w[iframe object embed].freeze
17
+
18
+ CONFIG =
19
+ {
20
+ elements: FILTER_TAGS,
21
+ protocols:
22
+ {
23
+ 'iframe' => { 'src' => PROTOCOLS },
24
+ 'object' => { 'src' => PROTOCOLS },
25
+ 'embed' => { 'src' => PROTOCOLS }
26
+ }.freeze,
27
+ attributes:
28
+ {
29
+ 'object' => %w[src width height style data type classid codebase],
30
+ 'embed' => %w[name src type allowfullscreen pluginspage wmode
31
+ allowscriptaccess width height],
32
+ 'iframe' => %w[src width height name align frameborder scrolling sandbox
33
+ allowfullscreen webkitallowfullscreen mozallowfullscreen
34
+ allow] # TODO: remove explicit allow with domain whitelist account setting
35
+ }.freeze
36
+ }.freeze
37
+
38
+ def clean(html)
39
+ Sanitize.fragment(html, sanitize_config)
40
+ end
41
+
42
+ private
43
+
44
+ def object_tag_transformer
45
+ lambda do |env|
46
+ return unless env[:node_name] == 'object'
47
+ return if env[:is_whitelisted] || !env[:node].element?
48
+ replace_object_node(env[:node])
49
+ end
50
+ end
51
+
52
+ def remap_unknown_tags_transformer
53
+ lambda do |env|
54
+ node_name = env[:node_name]
55
+ node = env[:node]
56
+
57
+ return if env[:is_whitelisted] || !node.element?
58
+ return unless ELEMENTS_REMAP.keys.include? node_name
59
+
60
+ new_name = ELEMENTS_REMAP[node_name]
61
+ env[:node].name = new_name
62
+ env[:node_name] = new_name
63
+ end
64
+ end
65
+
66
+ def src_transformers
67
+ lambda do |env|
68
+ return unless FILTER_TAGS.include?(env[:node_name])
69
+ return if env[:is_whitelisted] || !env[:node].element?
70
+ Sanitize.node!(env[:node], CONFIG)
71
+ { node_whitelist: [env[:node]] }
72
+ end
73
+ end
74
+
75
+ def sanitize_config(import_objects: true)
76
+ transformers = []
77
+ transformers << src_transformers
78
+ transformers << object_tag_transformer if import_objects
79
+ transformers << remap_unknown_tags_transformer
80
+ Sanitize::Config::RELAXED.merge transformers: transformers
81
+ end
82
+
83
+ def remap_href_path(href)
84
+ return nil unless href
85
+ path = File.join(File.dirname(@path), href)
86
+ if @package_root.nil?
87
+ raise Qti::ParseError, "Potentially unsafe href '#{href}'" if href.split('/').include?('..')
88
+ else
89
+ unless Pathname.new(path).cleanpath.to_s.start_with?(@package_root)
90
+ raise Qti::ParseError, "Unsafe href '#{href}'"
91
+ end
92
+ end
93
+ path
94
+ end
95
+
96
+ def replace_object_node(node)
97
+ path = remap_href_path(node[:data])
98
+ if path
99
+ case node[:type]
100
+ when %r{^image\/}
101
+ return replace_with_image(node, node[:data])
102
+ when 'text/html'
103
+ return replace_with_html(node, path)
104
+ end
105
+ end
106
+ # remove unrecognized or invalid objects from the sanitized document
107
+ node.unlink
108
+ end
109
+
110
+ def replace_with_image(node, src)
111
+ node.name = 'img'
112
+ node[:src] = src
113
+ end
114
+
115
+ def replace_with_html(node, path)
116
+ content = File.read(path)
117
+ html_content = Sanitize.fragment(content, sanitize_config(import_objects: false))
118
+ node.name = 'div'
119
+ node.add_child(Nokogiri::HTML.fragment(html_content))
120
+ rescue StandardError => e
121
+ warn "failed to import html object #{path}: #{e.message}"
122
+ node.unlink
123
+ end
124
+ end
125
+ end
@@ -92,7 +92,7 @@ module Qti
92
92
  if canvas_multiple_fib?
93
93
  @node.xpath('.//xmlns:response_label')
94
94
  else
95
- @node.xpath('.//xmlns:varequal')
95
+ @node.xpath('.//xmlns:respcondition/xmlns:setvar/../xmlns:conditionvar/xmlns:varequal')
96
96
  end
97
97
  end
98
98
 
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '0.9.18'.freeze
2
+ VERSION = '0.9.19'.freeze
3
3
  end
@@ -0,0 +1,117 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <questestinterop xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/ims_qtiasiv1p2 http://www.imsglobal.org/xsd/ims_qtiasiv1p2p1.xsd">
3
+ <item ident="i35ee28d5beb1008a385457c8ceb7d7fa" title="FITB question type. Stuff-N-Things">
4
+ <itemmetadata>
5
+ <qtimetadata>
6
+ <qtimetadatafield>
7
+ <fieldlabel>question_type</fieldlabel>
8
+ <fieldentry>short_answer_question</fieldentry>
9
+ </qtimetadatafield>
10
+ <qtimetadatafield>
11
+ <fieldlabel>points_possible</fieldlabel>
12
+ <fieldentry>3.5</fieldentry>
13
+ </qtimetadatafield>
14
+ <qtimetadatafield>
15
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
16
+ <fieldentry>i83cfb4f7f8eb35b6c4c52c78e989362a</fieldentry>
17
+ </qtimetadatafield>
18
+ </qtimetadata>
19
+ </itemmetadata>
20
+ <presentation>
21
+ <material>
22
+ <mattext texttype="text/html">&lt;div&gt;&lt;p style="text-align: center;"&gt;Fill in the blank.&lt;/p&gt;&lt;/div&gt;</mattext>
23
+ </material>
24
+ <response_str ident="response1" rcardinality="Single">
25
+ <render_fib>
26
+ <response_label ident="answer1" rshuffle="No"/>
27
+ </render_fib>
28
+ </response_str>
29
+ </presentation>
30
+ <resprocessing>
31
+ <outcomes>
32
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
33
+ </outcomes>
34
+ <respcondition continue="Yes">
35
+ <conditionvar>
36
+ <other/>
37
+ </conditionvar>
38
+ <displayfeedback feedbacktype="Response" linkrefid="general_fb"/>
39
+ </respcondition>
40
+ <respcondition continue="Yes">
41
+ <conditionvar>
42
+ <varequal respident="response1">blank</varequal>
43
+ </conditionvar>
44
+ <displayfeedback feedbacktype="Response" linkrefid="1226_fb"/>
45
+ </respcondition>
46
+ <respcondition continue="Yes">
47
+ <conditionvar>
48
+ <varequal respident="response1">Blank</varequal>
49
+ </conditionvar>
50
+ <displayfeedback feedbacktype="Response" linkrefid="5344_fb"/>
51
+ </respcondition>
52
+ <respcondition continue="Yes">
53
+ <conditionvar>
54
+ <varequal respident="response1">BLANK</varequal>
55
+ </conditionvar>
56
+ <displayfeedback feedbacktype="Response" linkrefid="3391_fb"/>
57
+ </respcondition>
58
+ <respcondition continue="No">
59
+ <conditionvar>
60
+ <varequal respident="response1">blank</varequal>
61
+ <varequal respident="response1">Blank</varequal>
62
+ <varequal respident="response1">BLANK</varequal>
63
+ </conditionvar>
64
+ <setvar action="Set" varname="SCORE">100</setvar>
65
+ <displayfeedback feedbacktype="Response" linkrefid="correct_fb"/>
66
+ </respcondition>
67
+ <respcondition continue="Yes">
68
+ <conditionvar>
69
+ <other/>
70
+ </conditionvar>
71
+ <displayfeedback feedbacktype="Response" linkrefid="general_incorrect_fb"/>
72
+ </respcondition>
73
+ </resprocessing>
74
+ <itemfeedback ident="general_fb">
75
+ <flow_mat>
76
+ <material>
77
+ <mattext texttype="text/html">&lt;p&gt;Generic feedback&lt;/p&gt;</mattext>
78
+ </material>
79
+ </flow_mat>
80
+ </itemfeedback>
81
+ <itemfeedback ident="correct_fb">
82
+ <flow_mat>
83
+ <material>
84
+ <mattext texttype="text/html">&lt;p&gt;Correct Feedback&lt;/p&gt;</mattext>
85
+ </material>
86
+ </flow_mat>
87
+ </itemfeedback>
88
+ <itemfeedback ident="general_incorrect_fb">
89
+ <flow_mat>
90
+ <material>
91
+ <mattext texttype="text/html">&lt;p&gt;Incorrect Feedback&lt;/p&gt;</mattext>
92
+ </material>
93
+ </flow_mat>
94
+ </itemfeedback>
95
+ <itemfeedback ident="1226_fb">
96
+ <flow_mat>
97
+ <material>
98
+ <mattext texttype="text/html">&lt;p&gt;Feedback on response 1226&lt;/p&gt;</mattext>
99
+ </material>
100
+ </flow_mat>
101
+ </itemfeedback>
102
+ <itemfeedback ident="5344_fb">
103
+ <flow_mat>
104
+ <material>
105
+ <mattext texttype="text/html">&lt;p&gt;Feedback on response 5344&lt;/p&gt;</mattext>
106
+ </material>
107
+ </flow_mat>
108
+ </itemfeedback>
109
+ <itemfeedback ident="3391_fb">
110
+ <flow_mat>
111
+ <material>
112
+ <mattext texttype="text/html">&lt;p&gt;Feedback on response 3391&lt;/p&gt;</mattext>
113
+ </material>
114
+ </flow_mat>
115
+ </itemfeedback>
116
+ </item>
117
+ </questestinterop>
@@ -59,6 +59,50 @@ describe Qti::Models::Base do
59
59
  end.to raise_error(Qti::ParseError)
60
60
  end
61
61
 
62
+ describe 'sanitize of href/src in html' do
63
+ let(:ftp) { 'ftp://foo.bar/' }
64
+ let(:http) { 'http://foo.bar/' }
65
+ let(:https) { 'https://foo.bar' }
66
+
67
+ shared_examples_for 'specific html elements' do
68
+ it 'removes a src with a bad protocol' do
69
+ ftp_tag = "<#{tag_name} #{src_attr}=\"#{ftp}\"></#{tag_name}>"
70
+ expect(loaded_class.sanitize_content!(ftp_tag)).to eq "<#{tag_name}></#{tag_name}>"
71
+ end
72
+
73
+ it 'removes a src with a valid http protocol' do
74
+ http_tag = "<#{tag_name} #{src_attr}=\"#{http}\"></#{tag_name}>"
75
+ expect(loaded_class.sanitize_content!(http_tag)).to eq(http_tag)
76
+ end
77
+
78
+ it 'removes a src with a valid https protocol' do
79
+ https_tag = "<#{tag_name} #{src_attr}=\"#{https}\"></#{tag_name}>"
80
+ expect(loaded_class.sanitize_content!(https_tag)).to eq(https_tag)
81
+ end
82
+ end
83
+
84
+ describe 'iframe elements' do
85
+ let(:tag_name) { 'iframe' }
86
+ let(:src_attr) { 'src' }
87
+
88
+ include_examples('specific html elements')
89
+ end
90
+
91
+ describe 'object elements' do
92
+ let(:tag_name) { 'object' }
93
+ let(:src_attr) { 'src' }
94
+
95
+ include_examples('specific html elements')
96
+ end
97
+
98
+ describe 'embed elements' do
99
+ let(:tag_name) { 'embed' }
100
+ let(:src_attr) { 'src' }
101
+
102
+ include_examples('specific html elements')
103
+ end
104
+ end
105
+
62
106
  context 'with explicit package root' do
63
107
  let(:package_root) { File.join('spec', 'fixtures', 'test_qti_2.2') }
64
108
  let(:item_path) { File.join(package_root, 'true-false', 'true-false.xml') }
@@ -123,6 +123,21 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
123
123
  end
124
124
  end
125
125
 
126
+ context 'fib_feedback.xml' do
127
+ let(:file_path) { File.join(fixtures_path, 'fib_feedback.xml') }
128
+ let(:shuffle_value) { false }
129
+ let(:scoring_data_ids) { %w[response1 response1 response1] }
130
+ let(:scoring_data_values) { %w[blank Blank BLANK] }
131
+ let(:scoring_data_case) { %w[no no no] }
132
+ let(:answer_count) { 3 }
133
+ let(:expected_blanks) { [{ id: 'response1' }] }
134
+
135
+ include_examples 'shuffled?'
136
+ include_examples 'answers'
137
+ include_examples 'scoring_data_structs'
138
+ include_examples 'blanks'
139
+ end
140
+
126
141
  describe '#scoring_data_structs' do
127
142
  let(:nodexml) { double }
128
143
  let(:test_object) { double(package_root: 'dummy', path: 'dummy/blah') }