qti 0.9.18 → 0.9.19

Sign up to get free protection for your applications and to get access to all the features.
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') }