lcms-engine 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (328) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +25 -0
  3. data/.eslintignore +2 -1
  4. data/.eslintrc +23 -73
  5. data/.nvmrc +1 -1
  6. data/.overcommit.yml +8 -2
  7. data/.prettierrc +7 -0
  8. data/.rubocop.yml +5 -2
  9. data/.ruby-version +1 -1
  10. data/.stylelintignore +9 -0
  11. data/.stylelintrc +8 -0
  12. data/CHANGELOG.md +42 -2
  13. data/Dockerfile +3 -3
  14. data/Gemfile.lock +345 -298
  15. data/README.md +21 -33
  16. data/app/assets/config/lcms_engine_manifest.js +4 -2
  17. data/app/assets/javascripts/lcms/engine/admin/{application.js → lcms_engine_application.js} +1 -3
  18. data/app/assets/javascripts/lcms/engine/initializers/foundation.js +1 -1
  19. data/app/assets/javascripts/lcms/engine/{application.js → lcms_engine_application.js} +0 -0
  20. data/app/assets/stylesheets/lcms/engine/admin/collections.scss +2 -1
  21. data/app/assets/stylesheets/lcms/engine/admin/components.scss +60 -19
  22. data/app/assets/stylesheets/lcms/engine/admin/curriculums.scss +12 -10
  23. data/app/assets/stylesheets/lcms/engine/admin/lessons.scss +21 -15
  24. data/app/assets/stylesheets/lcms/engine/admin/materials.scss +25 -17
  25. data/app/assets/stylesheets/lcms/engine/admin/resources.scss +8 -7
  26. data/app/assets/stylesheets/lcms/engine/admin/standards.scss +4 -1
  27. data/app/assets/stylesheets/lcms/engine/admin/users.scss +1 -1
  28. data/app/assets/stylesheets/lcms/engine/base/_colors.scss +8 -10
  29. data/app/assets/stylesheets/lcms/engine/base/_ld-colors.scss +10 -10
  30. data/app/assets/stylesheets/lcms/engine/components/_assoc-picker.scss +4 -5
  31. data/app/assets/stylesheets/lcms/engine/components/lesson/_activity.scss +6 -2
  32. data/app/assets/stylesheets/lcms/engine/components/lesson/_callout.scss +19 -5
  33. data/app/assets/stylesheets/lcms/engine/components/lesson/_columns.scss +4 -3
  34. data/app/assets/stylesheets/lcms/engine/components/lesson/_curriculum-map.scss +16 -7
  35. data/app/assets/stylesheets/lcms/engine/components/lesson/_def.scss +2 -2
  36. data/app/assets/stylesheets/lcms/engine/components/lesson/_expand.scss +9 -9
  37. data/app/assets/stylesheets/lcms/engine/components/lesson/_foundational-divider.scss +0 -1
  38. data/app/assets/stylesheets/lcms/engine/components/lesson/_group.scss +3 -1
  39. data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +1 -1
  40. data/app/assets/stylesheets/lcms/engine/components/lesson/_image-wrap.scss +2 -2
  41. data/app/assets/stylesheets/lcms/engine/components/lesson/_inset.scss +7 -2
  42. data/app/assets/stylesheets/lcms/engine/components/lesson/_materials.scss +1 -1
  43. data/app/assets/stylesheets/lcms/engine/components/lesson/_multiple-choice.scss +4 -1
  44. data/app/assets/stylesheets/lcms/engine/components/lesson/_override.scss +28 -9
  45. data/app/assets/stylesheets/lcms/engine/components/lesson/_pd.scss +7 -7
  46. data/app/assets/stylesheets/lcms/engine/components/lesson/_pv.scss +5 -4
  47. data/app/assets/stylesheets/lcms/engine/components/lesson/_section.scss +10 -3
  48. data/app/assets/stylesheets/lcms/engine/components/lesson/_selection-control.scss +14 -8
  49. data/app/assets/stylesheets/lcms/engine/components/lesson/_sidebar.scss +25 -10
  50. data/app/assets/stylesheets/lcms/engine/components/lesson/_title.scss +3 -1
  51. data/app/assets/stylesheets/lcms/engine/components/lesson/_unit-map.scss +1 -1
  52. data/app/assets/stylesheets/lcms/engine/components/material/_material.scss +3 -3
  53. data/app/assets/stylesheets/lcms/engine/components/material/_overlay.scss +12 -4
  54. data/app/assets/stylesheets/lcms/engine/components/material/_preview.scss +1 -1
  55. data/app/assets/stylesheets/lcms/engine/components/support/_survey.scss +3 -1
  56. data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +29 -11
  57. data/app/assets/stylesheets/lcms/engine/layout/_header.scss +5 -5
  58. data/app/assets/stylesheets/lcms/engine/layout/_navigation.scss +4 -6
  59. data/app/assets/stylesheets/lcms/engine/layout/_page.scss +2 -2
  60. data/app/assets/stylesheets/lcms/engine/{admin.scss → lcms_engine_admin.scss} +26 -15
  61. data/app/assets/stylesheets/lcms/engine/lcms_engine_application.scss +9 -0
  62. data/app/assets/stylesheets/lcms/engine/pdf.scss +5 -26
  63. data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +5 -23
  64. data/app/assets/stylesheets/lcms/engine/print/_base.scss +41 -12
  65. data/app/assets/stylesheets/lcms/engine/print/_cover.scss +12 -12
  66. data/app/assets/stylesheets/lcms/engine/print/_footer.scss +8 -3
  67. data/app/assets/stylesheets/lcms/engine/print/_gdoc-base.scss +10 -37
  68. data/app/assets/stylesheets/lcms/engine/print/_helpers.scss +5 -2
  69. data/app/assets/stylesheets/lcms/engine/print/_lesson-base.scss +2 -14
  70. data/app/assets/stylesheets/lcms/engine/print/_material-base.scss +1 -3
  71. data/app/assets/stylesheets/lcms/engine/print/_print.scss +15 -8
  72. data/app/assets/stylesheets/lcms/engine/print/_toc.scss +24 -9
  73. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base-typography.scss +24 -6
  74. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base.scss +10 -3
  75. data/app/assets/stylesheets/lcms/engine/print/gdoc/_colors.scss +3 -3
  76. data/app/assets/stylesheets/lcms/engine/print/gdoc/_header.scss +2 -2
  77. data/app/assets/stylesheets/lcms/engine/print/gdoc/_helpers.scss +1 -0
  78. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_activity.scss +1 -1
  79. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_agenda.scss +8 -2
  80. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_callout.scss +16 -6
  81. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_def.scss +1 -1
  82. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_dialogue.scss +3 -1
  83. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_expand.scss +5 -2
  84. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image-wrap.scss +5 -3
  85. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image.scss +1 -1
  86. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_optbreak.scss +1 -0
  87. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_section.scss +4 -1
  88. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_smp.scss +1 -0
  89. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_tables.scss +11 -3
  90. data/app/assets/stylesheets/lcms/engine/print/gdoc/material/_header.scss +5 -2
  91. data/app/assets/stylesheets/lcms/engine/print/lesson/_base-typography.scss +33 -9
  92. data/app/assets/stylesheets/lcms/engine/print/lesson/_group.scss +3 -1
  93. data/app/assets/stylesheets/lcms/engine/print/lesson/_image.scss +3 -1
  94. data/app/assets/stylesheets/lcms/engine/print/lesson/_materials.scss +1 -1
  95. data/app/assets/stylesheets/lcms/engine/print/lesson/_pd.scss +8 -4
  96. data/app/assets/stylesheets/lcms/engine/print/lesson/_section.scss +1 -1
  97. data/app/assets/stylesheets/lcms/engine/print/material/_header.scss +4 -1
  98. data/app/assets/stylesheets/lcms/engine/themes/_material.scss +11 -11
  99. data/app/assets/stylesheets/lcms/engine/utils/_colorcodes.scss +15 -5
  100. data/app/assets/stylesheets/lcms/engine/utils/_functions.scss +1 -1
  101. data/app/assets/stylesheets/lcms/engine/utils/_helpers.scss +23 -11
  102. data/app/assets/stylesheets/lcms/engine/utils/_placeholders.scss +1 -1
  103. data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +11 -11
  104. data/app/assets/stylesheets/lcms/engine/vendors/{mathjax.css → mathjax.scss} +0 -0
  105. data/app/assets/stylesheets/lcms/engine/vendors/react-tagsinput.css +48 -0
  106. data/app/controllers/concerns/lcms/engine/reimportable.rb +1 -1
  107. data/app/controllers/lcms/engine/admin/access_codes_controller.rb +8 -3
  108. data/app/controllers/lcms/engine/admin/admin_controller.rb +5 -39
  109. data/app/controllers/lcms/engine/admin/association_picker_controller.rb +4 -1
  110. data/app/controllers/lcms/engine/admin/batch_reimports_controller.rb +2 -2
  111. data/app/controllers/lcms/engine/admin/curriculums_controller.rb +21 -2
  112. data/app/controllers/lcms/engine/admin/documents_controller.rb +26 -14
  113. data/app/controllers/lcms/engine/admin/materials_controller.rb +23 -13
  114. data/app/controllers/lcms/engine/admin/resource_bulk_edits_controller.rb +2 -2
  115. data/app/controllers/lcms/engine/admin/resources_controller.rb +9 -7
  116. data/app/controllers/lcms/engine/admin/settings_controller.rb +1 -1
  117. data/app/controllers/lcms/engine/admin/standards_controller.rb +2 -2
  118. data/app/controllers/lcms/engine/admin/users_controller.rb +10 -7
  119. data/app/controllers/lcms/engine/application_controller.rb +1 -1
  120. data/app/controllers/lcms/engine/resources_controller.rb +5 -5
  121. data/app/controllers/lcms/engine/welcome_controller.rb +11 -0
  122. data/app/entities/lcms/engine/hierarchical_position.rb +1 -2
  123. data/app/entities/lcms/engine/media_embed.rb +1 -1
  124. data/app/entities/lcms/engine/pagination.rb +14 -10
  125. data/app/entities/lcms/engine/roman_numerals.rb +1 -1
  126. data/app/exceptions/lcms/engine/document_error.rb +8 -0
  127. data/app/exceptions/lcms/engine/material_error.rb +8 -0
  128. data/app/helpers/admin/components_helper.rb +1 -1
  129. data/app/helpers/lcms/engine/path_helper.rb +32 -0
  130. data/app/helpers/lcms/engine/resource_helper.rb +1 -1
  131. data/app/helpers/lcms/engine/view_helper.rb +0 -8
  132. data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +1 -1
  133. data/app/javascript/components/admin/ImportStatus.jsx +88 -58
  134. data/app/javascript/components/admin/Initializer.jsx +33 -35
  135. data/app/javascript/components/admin/MultiSelectedOperation.jsx +43 -19
  136. data/app/javascript/components/admin/association-picker/AssociationPicker.jsx +68 -48
  137. data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +18 -7
  138. data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +42 -18
  139. data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +47 -28
  140. data/app/javascript/components/admin/curriculum/CurriculumEditor.jsx +54 -33
  141. data/app/javascript/components/admin/curriculum/DirectoryPicker.jsx +80 -53
  142. data/app/javascript/components/admin/picker/PickerButton.jsx +16 -11
  143. data/app/javascript/components/admin/picker/pickerModal.jsx +6 -6
  144. data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +61 -40
  145. data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +54 -40
  146. data/app/javascript/components/admin/resource-picker/ResourcePickerResource.jsx +14 -3
  147. data/app/javascript/components/admin/resource-picker/ResourcePickerWindow.jsx +50 -21
  148. data/app/javascript/components/paginate/PageView.jsx +20 -8
  149. data/app/javascript/components/paginate/PaginationBoxView.jsx +78 -66
  150. data/app/javascript/components/paginate/PaginationListView.jsx +59 -45
  151. data/app/javascript/packs/lcms_engine_admin.js +15 -0
  152. data/app/javascript/packs/{application.js → lcms_engine_application.js} +5 -4
  153. data/app/javascript/packs/server_rendering.js +1 -0
  154. data/app/javascript/vendor/jstree/jstree.min.js +6 -0
  155. data/app/javascript/vendor/jstree/themes/default/32px.png +0 -0
  156. data/app/javascript/vendor/jstree/themes/default/40px.png +0 -0
  157. data/app/javascript/vendor/jstree/themes/default/style.css +1106 -0
  158. data/app/javascript/vendor/jstree/themes/default/style.min.css +1 -0
  159. data/app/javascript/vendor/jstree/themes/default/throbber.gif +0 -0
  160. data/app/javascript/vendor/jstree/themes/default-dark/32px.png +0 -0
  161. data/app/javascript/vendor/jstree/themes/default-dark/40px.png +0 -0
  162. data/app/javascript/vendor/jstree/themes/default-dark/style.css +1150 -0
  163. data/app/javascript/vendor/jstree/themes/default-dark/style.min.css +1 -0
  164. data/app/javascript/vendor/jstree/themes/default-dark/throbber.gif +0 -0
  165. data/app/jobs/lcms/engine/document_generate_job.rb +1 -1
  166. data/app/jobs/lcms/engine/document_generate_pdf_job.rb +5 -5
  167. data/app/jobs/lcms/engine/material_generate_pdf_job.rb +4 -4
  168. data/app/models/concerns/lcms/engine/navigable.rb +6 -10
  169. data/app/models/concerns/lcms/engine/searchable.rb +7 -0
  170. data/app/models/lcms/engine/document.rb +1 -1
  171. data/app/models/lcms/engine/resource.rb +1 -1
  172. data/app/models/lcms/engine/search/repository.rb +1 -1
  173. data/app/presenters/lcms/engine/content_presenter.rb +1 -1
  174. data/app/presenters/lcms/engine/curriculum_presenter.rb +21 -18
  175. data/app/presenters/lcms/engine/document_presenter.rb +3 -1
  176. data/app/presenters/lcms/engine/resource_presenter.rb +6 -3
  177. data/app/queries/lcms/engine/admin_documents_query.rb +1 -1
  178. data/app/queries/lcms/engine/admin_materials_query.rb +11 -2
  179. data/app/queries/lcms/engine/base_query.rb +1 -1
  180. data/app/services/lcms/engine/document_build_service.rb +2 -0
  181. data/app/services/lcms/engine/document_generator.rb +2 -2
  182. data/app/services/lcms/engine/google/drive_service.rb +7 -15
  183. data/app/services/lcms/engine/google/script_service.rb +7 -3
  184. data/app/services/lcms/engine/html_sanitizer.rb +1 -1
  185. data/app/services/lcms/engine/lti_exporter.rb +1 -1
  186. data/app/services/lcms/engine/material_preview_generator.rb +1 -1
  187. data/app/services/lcms/engine/s3_service.rb +14 -2
  188. data/app/tasks/resource_tasks.rb +2 -2
  189. data/app/views/layouts/lcms/engine/admin.html.erb +3 -3
  190. data/app/views/layouts/lcms/engine/application.html.erb +2 -2
  191. data/app/views/layouts/lcms/engine/lti.html.erb +1 -1
  192. data/app/views/lcms/engine/admin/access_codes/_form.html.erb +1 -1
  193. data/app/views/lcms/engine/admin/access_codes/index.html.erb +3 -3
  194. data/app/views/lcms/engine/admin/batch_reimports/_search_form.html.erb +1 -1
  195. data/app/views/lcms/engine/admin/curriculums/edit.html.erb +4 -2
  196. data/app/views/lcms/engine/admin/documents/_reimport.html.erb +1 -1
  197. data/app/views/lcms/engine/admin/documents/_search_form.html.erb +1 -1
  198. data/app/views/lcms/engine/admin/documents/import.html.erb +1 -1
  199. data/app/views/lcms/engine/admin/documents/index.html.erb +5 -3
  200. data/app/views/lcms/engine/admin/documents/new.html.erb +6 -2
  201. data/app/views/lcms/engine/admin/materials/_reimport.html.erb +1 -1
  202. data/app/views/lcms/engine/admin/materials/_search_form.html.erb +1 -1
  203. data/app/views/lcms/engine/admin/materials/import.html.erb +1 -1
  204. data/app/views/lcms/engine/admin/materials/index.html.erb +22 -18
  205. data/app/views/lcms/engine/admin/materials/new.html.erb +5 -1
  206. data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +1 -1
  207. data/app/views/lcms/engine/admin/resources/_fields.html.erb +4 -3
  208. data/app/views/lcms/engine/admin/resources/_form.html.erb +1 -1
  209. data/app/views/lcms/engine/admin/resources/_search_form.html.erb +1 -1
  210. data/app/views/lcms/engine/admin/resources/index.html.erb +7 -5
  211. data/app/views/lcms/engine/admin/shared/_header.html.erb +12 -12
  212. data/app/views/lcms/engine/admin/standards/_form.html.erb +3 -1
  213. data/app/views/lcms/engine/admin/standards/_search_form.html.erb +1 -1
  214. data/app/views/lcms/engine/admin/users/_form.html.erb +1 -1
  215. data/app/views/lcms/engine/admin/users/_search_form.html.erb +1 -1
  216. data/app/views/lcms/engine/admin/users/index.html.erb +6 -6
  217. data/app/views/lcms/engine/pages/not_found.html.erb +5 -0
  218. data/app/views/lcms/engine/resources/generic.html.erb +0 -4
  219. data/app/views/lcms/engine/resources/media.html.erb +0 -4
  220. data/app/views/lcms/engine/resources/show.html.erb +0 -2
  221. data/config/initializers/airbrake.rb +62 -10
  222. data/config/initializers/bitly.rb +1 -1
  223. data/config/initializers/carrier_wave.rb +6 -4
  224. data/config/initializers/ckeditor.rb +6 -0
  225. data/config/initializers/elasticsearch.rb +1 -1
  226. data/config/initializers/resque.rb +2 -2
  227. data/config/locales/admin/en.yml +0 -1
  228. data/config/locales/ui/en.yml +1 -0
  229. data/config/routes.rb +5 -2
  230. data/db/migrate/.keep +0 -0
  231. data/db/schema.rb +279 -311
  232. data/db/seeds.rb +0 -1
  233. data/docker-compose.ror4.yml +32 -0
  234. data/docker-compose.yml +6 -3
  235. data/docs/env-variables.md +40 -40
  236. data/docs/google-cloud-platform-setup.md +45 -17
  237. data/docs/how-to-build-and-publish.md +14 -0
  238. data/docs/pdf-generation.md +31 -0
  239. data/lcms-engine.gemspec +27 -15
  240. data/lib/doc_template/document.rb +3 -4
  241. data/lib/doc_template/document_toc.rb +2 -2
  242. data/lib/doc_template/objects/activity_metadata.rb +1 -1
  243. data/lib/doc_template/objects/toc_helpers.rb +4 -4
  244. data/lib/doc_template/objects/toc_metadata.rb +4 -6
  245. data/lib/doc_template/tags/answer_space_tag.rb +1 -1
  246. data/lib/doc_template/tags/base_tag.rb +2 -2
  247. data/lib/doc_template/tags/block_tag.rb +1 -1
  248. data/lib/doc_template/tags/table_tag.rb +1 -1
  249. data/lib/doc_template/template.rb +1 -1
  250. data/lib/doc_template.rb +9 -9
  251. data/lib/document_exporter/gdoc/base.rb +5 -2
  252. data/lib/document_exporter/pdf/base.rb +1 -1
  253. data/lib/document_exporter/pdf/document.rb +2 -2
  254. data/lib/document_exporter/pdf/material.rb +2 -2
  255. data/lib/document_exporter/pdf/student_material.rb +2 -2
  256. data/lib/document_exporter/pdf/teacher_material.rb +2 -2
  257. data/lib/document_renderer/part.rb +1 -3
  258. data/lib/lcms/engine/engine.rb +10 -9
  259. data/lib/lcms/engine/version.rb +1 -1
  260. data/lib/lcms/engine.rb +0 -1
  261. data/lib/lt/lcms/metadata/context.rb +56 -52
  262. data/lib/lt/lcms/metadata/service.rb +3 -2
  263. data/lib/tasks/cloud66.rake +2 -2
  264. data/lib/tasks/document.rake +4 -4
  265. data/lib/tasks/google.rake +29 -14
  266. data/lib/tasks/lcms/engine_tasks.rake +1 -1
  267. data/package.json +31 -10
  268. data/postcss.config.js +12 -0
  269. data/spec/controllers/admin/curriculums_controller_spec.rb +23 -0
  270. data/spec/controllers/admin/documents_controller_spec.rb +22 -2
  271. data/spec/controllers/admin/materials_controller_spec.rb +16 -3
  272. data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +1 -1
  273. data/spec/controllers/admin/resources_controller_spec.rb +1 -1
  274. data/spec/controllers/admin/settings_controller_spec.rb +1 -1
  275. data/spec/controllers/admin/standards_controller_spec.rb +1 -1
  276. data/spec/controllers/admin/welcome_controller_spec.rb +12 -10
  277. data/spec/controllers/resources_controller_spec.rb +3 -3
  278. data/spec/controllers/welcome_controller_spec.rb +38 -0
  279. data/spec/dummy/.traceroute.yaml +0 -2
  280. data/spec/dummy/bin/webpack +18 -0
  281. data/spec/dummy/bin/webpack-dev-server +18 -0
  282. data/spec/dummy/config/application.rb +1 -1
  283. data/spec/dummy/config/environments/test.rb +1 -1
  284. data/spec/dummy/config/initializers/assets.rb +6 -0
  285. data/spec/dummy/config/lcms-admin.yml +3 -7
  286. data/spec/dummy/config/routes.rb +6 -0
  287. data/spec/dummy/db/schema.rb +5 -5
  288. data/spec/factories/documents.rb +1 -0
  289. data/spec/factories/downloads.rb +1 -1
  290. data/spec/factories/resources.rb +2 -2
  291. data/spec/features/admin/materials/add_material_spec.rb +2 -0
  292. data/spec/features/admin/users_spec.rb +2 -2
  293. data/spec/{controllers/admin/admin_controller_spec.rb → helpers/path_helper_spec.rb} +6 -6
  294. data/spec/lib/doc_template/objects/activity_metadata_spec.rb +1 -1
  295. data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +2 -0
  296. data/spec/lib/doc_template/objects/toc_metadata_spec.rb +1 -1
  297. data/spec/lib/doc_template/tags/page_break_tag_spec.rb +1 -1
  298. data/spec/lib/doc_template/tags/pd_tag_spec.rb +1 -1
  299. data/spec/models/document_spec.rb +1 -1
  300. data/spec/models/standard_spec.rb +2 -0
  301. data/spec/queries/lcms/engine/admin_materials_query_spec.rb +41 -0
  302. data/spec/rails_helper.rb +6 -17
  303. data/spec/services/document_build_service_spec.rb +4 -11
  304. data/spec/services/s3_service_spec.rb +31 -0
  305. data/spec/support/concerns/navigable.rb +2 -0
  306. data/spec/support/routes.rb +4 -0
  307. data/spec/support/shared_examples/content_tag.rb +4 -4
  308. data/templates/routes.rb +0 -1
  309. data/yarn.lock +3412 -2933
  310. metadata +152 -289
  311. data/app/assets/stylesheets/lcms/engine/application.scss +0 -36
  312. data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +0 -1
  313. data/app/exceptions/components_api_error.rb +0 -4
  314. data/app/exceptions/document_error.rb +0 -4
  315. data/app/exceptions/material_error.rb +0 -4
  316. data/app/javascript/packs/admin.js +0 -14
  317. data/app/models/lcms/engine/component.rb +0 -88
  318. data/app/presenters/lcms/engine/social_media_presenter.rb +0 -83
  319. data/app/views/lcms/engine/shared/_social_sharing.html.erb +0 -22
  320. data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +0 -36
  321. data/db/migrate/20200218144849_drop_material_parts_table.rb +0 -7
  322. data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +0 -7
  323. data/db/migrate/20200429130353_drop_pages.rb +0 -13
  324. data/db/seeds/pages.seeds.rb +0 -26
  325. data/lib/document_exporter.rb +0 -6
  326. data/lib/lcms/engine/migration.rb +0 -16
  327. data/spec/models/component_spec.rb +0 -60
  328. data/vendor/assets/javascripts/jquery.tagsinput.js +0 -1
@@ -1,9 +1,14 @@
1
1
  @mixin ld-content-dropdown {
2
2
  // rewrite some css rules to meet foundation accordition
3
- .is-accordion-submenu-parent > a::after { display: none; }
4
- li[aria-expanded=true] > a > .o-ld-sidebar-item__icon {
3
+ .is-accordion-submenu-parent > a::after {
4
+ display: none;
5
+ }
6
+
7
+ // stylelint-disable selector-no-qualifying-type
8
+ li[aria-expanded='true'] > a > .o-ld-sidebar-item__icon {
5
9
  transform: rotate(90deg);
6
10
  }
11
+ // stylelint-enable selector-no-qualifying-type
7
12
  }
8
13
 
9
14
  .o-ld-sidebar {
@@ -19,12 +24,12 @@
19
24
  }
20
25
 
21
26
  &.is-stuck:not(.stick-wo-margin) {
22
- margin-top: $ub-nav-height !important;
27
+ margin-top: $ub-nav-height !important; // stylelint-disable-line declaration-no-important
23
28
  }
24
29
  }
25
30
 
26
31
  @include e(item) {
27
- opacity: .7;
32
+ opacity: 0.7;
28
33
  padding: $ub-base-padding / 2 0;
29
34
 
30
35
  @include m(active) {
@@ -42,7 +47,11 @@
42
47
  padding-left: 1.2rem;
43
48
  }
44
49
 
45
- > li.o-ld-sidebar__item:last-child { padding-bottom: 0; }
50
+ // stylelint-disable selector-no-qualifying-type
51
+ > li.o-ld-sidebar__item:last-child {
52
+ padding-bottom: 0;
53
+ }
54
+ // stylelint-enable selector-no-qualifying-type
46
55
  }
47
56
 
48
57
  @include e(toc-customizer) {
@@ -68,7 +77,9 @@
68
77
  cursor: pointer;
69
78
  flex: 0 0 auto;
70
79
 
71
- @include m(hide) { display: none; }
80
+ @include m(hide) {
81
+ display: none;
82
+ }
72
83
  }
73
84
 
74
85
  @include e(sep) {
@@ -84,8 +95,8 @@
84
95
 
85
96
  .o-ld-sidebar-item {
86
97
  // rewrite foundation accordition styles
87
- outline: none !important;
88
- padding: 0 !important;
98
+ outline: none !important; // stylelint-disable-line declaration-no-important
99
+ padding: 0 !important; // stylelint-disable-line declaration-no-important
89
100
 
90
101
  @include e(content) {
91
102
  @include flex;
@@ -117,9 +128,11 @@
117
128
  color: map-get($ub-colorcodes, math-base);
118
129
  }
119
130
 
131
+ // stylelint-disable declaration-no-important
120
132
  .o-ld-sidebar-foundational-skills .o-ld-sidebar__item--active & {
121
133
  color: map-get($ub-ld-colorcodes, math-activity-foundational) !important;
122
134
  }
135
+ // stylelint-enable declaration-no-important
123
136
  }
124
137
 
125
138
  @include m(summary) {
@@ -136,7 +149,7 @@
136
149
  @include e(icon) {
137
150
  cursor: pointer;
138
151
  float: left;
139
- margin-right: .4rem;
152
+ margin-right: 0.4rem;
140
153
 
141
154
  @include m(blank) {
142
155
  cursor: none;
@@ -144,7 +157,9 @@
144
157
  width: map-get(map-get($ub-element-typography, ld-sidebar-icon), font-size);
145
158
  }
146
159
 
147
- i { @include txt-element(ld-sidebar-icon); }
160
+ i {
161
+ @include txt-element(ld-sidebar-icon);
162
+ }
148
163
  }
149
164
 
150
165
  @include e(time) {
@@ -21,9 +21,11 @@
21
21
  }
22
22
  }
23
23
 
24
+ // stylelint-disable selector-max-id
24
25
  &#foundational-skills:not(.c-foundational-section) {
25
26
  border-top: 25px solid #00a699;
26
- margin-top: 40px !important;
27
+ margin-top: 40px !important; // stylelint-disable-line declaration-no-important
27
28
  padding-top: 30px;
28
29
  }
30
+ // stylelint-enable selector-max-id
29
31
  }
@@ -12,7 +12,7 @@
12
12
  background-color: $ub-white;
13
13
  height: $ld-lesson;
14
14
  margin: $ld-padding;
15
- opacity: .3;
15
+ opacity: 0.3;
16
16
  width: $ld-lesson;
17
17
 
18
18
  @include m(active) {
@@ -1,11 +1,11 @@
1
1
  .o-material-wrapper {
2
+ @include m(ela) {
3
+ // keep
4
+ }
2
5
  @include m(math) {
3
6
  background-color: map-get($ub-ld-colorcodes, math-activity-bg);
4
7
  }
5
8
 
6
- @include m(ela) {
7
- }
8
-
9
9
  @include m(bg-color) {
10
10
  background-color: map-get($ub-ld-colorcodes, ela6-section-bg);
11
11
  }
@@ -6,7 +6,7 @@
6
6
  display: none;
7
7
  flex-direction: column;
8
8
  left: 0;
9
- opacity: .9;
9
+ opacity: 0.9;
10
10
  position: absolute;
11
11
  right: 0;
12
12
  top: 0;
@@ -18,8 +18,15 @@
18
18
  height: 40px;
19
19
  width: 100%;
20
20
 
21
- > ul { margin: 0 !important; }
22
- > ul > li > a { padding: 0 .5rem; }
21
+ > ul {
22
+ margin: 0 !important; // stylelint-disable-line declaration-no-important
23
+ }
24
+
25
+ // stylelint-disable selector-max-compound-selectors
26
+ > ul > li > a {
27
+ padding: 0 0.5rem;
28
+ }
29
+ // stylelint-enable selector-max-compound-selectors
23
30
  }
24
31
 
25
32
  @include e(preview) {
@@ -32,7 +39,8 @@
32
39
  @include e(wrap) {
33
40
  position: relative;
34
41
 
35
- &:hover, &:focus {
42
+ &:hover,
43
+ &:focus {
36
44
  .o-m-overlay {
37
45
  @include flex;
38
46
  z-index: 9999;
@@ -6,7 +6,7 @@ $pdf-toolbar-height: 50;
6
6
  @extend %map-transition;
7
7
  border: 1px solid map-get($ub-buttons, show-more);
8
8
  overflow-y: hidden;
9
- position: absolute !important;
9
+ position: absolute !important; // stylelint-disable-line declaration-no-important
10
10
 
11
11
  @include m(portrait) {
12
12
  @include aspect-ratio($letter-width, $letter-height + $pdf-toolbar-height);
@@ -1,5 +1,7 @@
1
1
  .o-survey-form {
2
2
  @include e(other) {
3
- @include m(hide) { display: none; }
3
+ @include m(hide) {
4
+ display: none;
5
+ }
4
6
  }
5
7
  }
@@ -17,7 +17,7 @@ $footer-breakpoint-down: ipad;
17
17
  @include txt-element-strict(ld-tooltip);
18
18
  background: map-get($ub-ld-colorcodes, tooltip-bg);
19
19
  border: 0;
20
- box-shadow: 0 0 8px 0 rgba(0, 0, 0, .25);
20
+ box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.25);
21
21
  margin-top: $tooltip-pip-width;
22
22
  padding: 1rem;
23
23
 
@@ -49,8 +49,8 @@ $footer-breakpoint-down: ipad;
49
49
  [data-close] {
50
50
  float: right;
51
51
  position: relative;
52
- right: -.5rem;
53
- top: -.5rem;
52
+ right: -0.5rem;
53
+ top: -0.5rem;
54
54
  }
55
55
  }
56
56
 
@@ -83,8 +83,18 @@ $footer-breakpoint-down: ipad;
83
83
  }
84
84
 
85
85
  @include e(link) {
86
- &, a { color: $ub-nav-link; }
87
- &:hover, &:focus, a:hover, a:focus { color: $ub-white; text-decoration: none; }
86
+ &,
87
+ a {
88
+ color: $ub-nav-link;
89
+ }
90
+
91
+ &:hover,
92
+ &:focus,
93
+ a:hover,
94
+ a:focus {
95
+ color: $ub-white;
96
+ text-decoration: none;
97
+ }
88
98
  }
89
99
 
90
100
  @include e(logo) {
@@ -94,7 +104,9 @@ $footer-breakpoint-down: ipad;
94
104
  padding-bottom: $logo-padding;
95
105
  }
96
106
 
97
- img { width: $logo-width; }
107
+ img {
108
+ width: $logo-width;
109
+ }
98
110
  }
99
111
 
100
112
  @include e(item) {
@@ -120,10 +132,6 @@ $footer-breakpoint-down: ipad;
120
132
  @include menu-direction(horizontal);
121
133
  color: $ub-whitesmoke;
122
134
 
123
- li {
124
- a, span { padding: 0 $footer-padding; }
125
- }
126
-
127
135
  @include breakpoint($footer-breakpoint-down down) {
128
136
  display: inline-flex;
129
137
  flex-wrap: wrap;
@@ -131,16 +139,26 @@ $footer-breakpoint-down: ipad;
131
139
  li {
132
140
  flex: 0 0 auto;
133
141
 
134
- a, span {
142
+ a,
143
+ span {
135
144
  line-height: 1.5;
136
145
  padding: 0;
137
146
  }
138
147
 
148
+ // stylelint-disable selector-no-qualifying-type
139
149
  &.t-bullet {
150
+ // stylelint-enable selector-no-qualifying-type
140
151
  padding: 0 $footer-padding;
141
152
  }
142
153
  }
143
154
  }
155
+
156
+ li {
157
+ a,
158
+ span {
159
+ padding: 0 $footer-padding;
160
+ }
161
+ }
144
162
  }
145
163
  }
146
164
 
@@ -12,18 +12,18 @@
12
12
  }
13
13
 
14
14
  @media screen and #{breakpoint(large)} and (max-width: 1110px) {
15
- padding-left: .8rem;
16
- padding-right: .8rem;
15
+ padding-left: 0.8rem;
16
+ padding-right: 0.8rem;
17
17
  }
18
18
  }
19
19
 
20
20
  .c-header {
21
- background-color: rgba($ub-primary, .9);
21
+ background-color: rgba($ub-primary, 0.9);
22
22
 
23
23
  @include m(documents) {
24
- background-color: rgba($ub-primary, .9);
24
+ background-color: rgba($ub-primary, 0.9);
25
25
  min-height: $ub-nav-height;
26
- opacity: .9;
26
+ opacity: 0.9;
27
27
  position: absolute;
28
28
  width: 100%;
29
29
  z-index: 1;
@@ -1,5 +1,8 @@
1
1
  .o-top-bar {
2
2
  @include top-bar-container;
3
+
4
+ // Stack on small screens by default
5
+ @include top-bar-stacked;
3
6
  min-height: $ub-nav-height;
4
7
  width: 100%;
5
8
  z-index: $reveal-zindex;
@@ -9,9 +12,6 @@
9
12
  max-width: 100%;
10
13
  }
11
14
 
12
- // Stack on small screens by default
13
- @include top-bar-stacked;
14
-
15
15
  @include breakpoint($topbar-unstack-breakpoint) {
16
16
  @include top-bar-unstack;
17
17
 
@@ -23,16 +23,14 @@
23
23
  @include e(wrapper) {
24
24
  @include breakpoint($topbar-unstack-breakpoint) {
25
25
  align-items: center;
26
- display: flex !important;
26
+ display: flex !important; // stylelint-disable-line declaration-no-important
27
27
  flex-wrap: nowrap;
28
28
  justify-content: space-between;
29
29
  width: 100%;
30
30
  }
31
31
  }
32
-
33
32
  }
34
33
 
35
-
36
34
  /* To prevent FOUC */
37
35
  .no-js {
38
36
  @include breakpoint($topbar-unstack-breakpoint down) {
@@ -3,7 +3,8 @@ body {
3
3
  width: 100%;
4
4
  }
5
5
 
6
- body, html {
6
+ body,
7
+ html {
7
8
  height: 100%;
8
9
  }
9
10
 
@@ -73,5 +74,4 @@ body, html {
73
74
  @include e(section) {
74
75
  @include flex-grid-column(12, $grid-column-2xgutter);
75
76
  }
76
-
77
77
  }
@@ -1,6 +1,7 @@
1
- @import 'application';
1
+ // stylelint-disable max-nesting-depth, selector-no-qualifying-type, selector-max-compound-selectors, selector-class-pattern
2
+
3
+ @import 'lcms_engine_application';
2
4
  @import 'selectize';
3
- @import 'vendors/jquery.tagsinput.css';
4
5
  @import 'admin/resources';
5
6
  @import 'admin/curriculums';
6
7
  @import 'admin/standards';
@@ -8,29 +9,33 @@
8
9
  @import 'admin/lessons';
9
10
  @import 'admin/materials';
10
11
  @import 'admin/users';
12
+ @import 'vendors/react-tagsinput';
11
13
 
12
14
  .button {
13
15
  white-space: nowrap;
14
16
  }
15
17
 
16
18
  .c-admin {
19
+ @include breakpoint($topbar-unstack-breakpoint) {
20
+ .c-header-title__h-menu {
21
+ display: none;
22
+ }
23
+ }
24
+
17
25
  .menu {
18
26
  &.vertical:not(.is-dropdown-submenu) {
19
- display: none !important;
27
+ display: none !important; // stylelint-disable-line declaration-no-important
20
28
  }
21
29
 
22
- .active > a { background: inherit; }
30
+ .active > a {
31
+ background: inherit;
32
+ }
23
33
  }
34
+
24
35
  .menu > li > a {
25
36
  line-height: inherit;
26
37
  white-space: nowrap;
27
38
  }
28
-
29
- @include breakpoint($topbar-unstack-breakpoint) {
30
- .c-header-title__h-menu {
31
- display: none;
32
- }
33
- }
34
39
  }
35
40
 
36
41
  .c-admin .o-page {
@@ -42,7 +47,7 @@
42
47
  color: #ec5840;
43
48
  display: block;
44
49
  font-weight: bold;
45
- margin: -.5rem 0 1rem;
50
+ margin: -0.5rem 0 1rem;
46
51
  }
47
52
 
48
53
  .input.error {
@@ -75,7 +80,7 @@
75
80
  color: #ec5840;
76
81
  display: block;
77
82
  font-weight: bold;
78
- margin: -.5rem 0 1rem;
83
+ margin: -0.5rem 0 1rem;
79
84
  }
80
85
 
81
86
  .input.error {
@@ -94,8 +99,14 @@
94
99
  }
95
100
  }
96
101
 
97
- .flex-pull-right { margin-left: auto; }
102
+ .flex-pull-right {
103
+ margin-left: auto;
104
+ }
98
105
 
99
- .inline-form-btn { display: inline; }
106
+ .inline-form-btn {
107
+ display: inline;
108
+ }
100
109
 
101
- .c-multi-selected-btn { display: inline-block; }
110
+ .c-multi-selected-btn {
111
+ display: inline-block;
112
+ }
@@ -0,0 +1,9 @@
1
+ @charset "utf-8";
2
+
3
+ @import 'utils/variables', 'utils/mixins', 'utils/placeholders', 'base/colors', 'base/ld-colors';
4
+ @import 'themes/settings', 'themes/material';
5
+ @import 'font-awesome-sprockets', 'font-awesome', 'vendors/foundation_and_overrides', 'vendors/mathjax';
6
+ @import 'utils/styles_override', 'utils/helpers', 'utils/colorcodes', 'utils/functions';
7
+ @import 'base/typography', 'print/print';
8
+ @import 'components/assoc-picker';
9
+ @import 'layout/footer', 'layout/header', 'layout/navigation', 'layout/page';
@@ -1,30 +1,9 @@
1
1
  @charset "utf-8";
2
2
 
3
- @import
4
- 'utils/variables',
5
- 'utils/mixins';
6
-
7
- @import
8
- 'themes/settings';
9
-
10
- @import
11
- 'vendors/foundation_and_overrides-pdf',
12
- 'vendors/mathjax.css';
13
-
14
- @import
15
- 'utils/styles_override',
16
- 'utils/helpers',
17
- 'utils/colorcodes',
18
- 'utils/functions';
19
-
3
+ @import 'utils/variables', 'utils/mixins';
4
+ @import 'themes/settings';
5
+ @import 'vendors/foundation_and_overrides-pdf', 'vendors/mathjax.css';
6
+ @import 'utils/styles_override', 'utils/helpers', 'utils/colorcodes', 'utils/functions';
20
7
  @import 'print/typography';
21
-
22
8
  @import 'components/material/material';
23
-
24
- @import
25
- 'print/base',
26
- 'print/colorscheme',
27
- 'print/header',
28
- 'print/helpers',
29
- 'print/lesson-base',
30
- 'print/material-base';
9
+ @import 'print/base', 'print/colorscheme', 'print/header', 'print/helpers', 'print/lesson-base', 'print/material-base';
@@ -1,28 +1,10 @@
1
1
  @charset "utf-8";
2
2
 
3
- @import
4
- 'utils/variables',
5
- 'utils/mixins';
6
-
7
- @import
8
- 'themes/settings';
9
-
10
- @import
11
- 'vendors/foundation_and_overrides-pdf';
12
-
13
- @import
14
- 'utils/colorcodes',
15
- 'utils/helpers';
16
-
3
+ @import 'utils/variables', 'utils/mixins';
4
+ @import 'themes/settings';
5
+ @import 'vendors/foundation_and_overrides-pdf';
6
+ @import 'utils/colorcodes', 'utils/helpers';
17
7
  @import 'print/typography';
18
-
19
8
  @import 'components/lesson/override';
20
-
21
- @import
22
- 'print/base',
23
- 'print/cover',
24
- 'print/colorscheme',
25
- 'print/footer',
26
- 'print/header',
27
- 'print/helpers',
9
+ @import 'print/base', 'print/cover', 'print/colorscheme', 'print/footer', 'print/header', 'print/helpers',
28
10
  'print/lesson-base';
@@ -1,5 +1,8 @@
1
+ // stylelint-disable scss/selector-no-redundant-nesting-selector
2
+
1
3
  // Unbounded specific
2
- html, body {
4
+ html,
5
+ body {
3
6
  background: none;
4
7
  height: 100%;
5
8
  }
@@ -15,16 +18,34 @@ html, body {
15
18
  }
16
19
  }
17
20
 
18
- header, footer, o-sidebar-nav {
21
+ header,
22
+ footer,
23
+ o-sidebar-nav {
19
24
  display: none;
20
25
  }
21
26
 
22
- tr, img, table, pre, blockquote, .callout { page-break-inside: avoid; }
27
+ tr,
28
+ img,
29
+ table,
30
+ pre,
31
+ blockquote,
32
+ .callout {
33
+ page-break-inside: avoid;
34
+ }
23
35
 
24
36
  // Avoid page breaks after a heading
25
- h1, h2, h3, h4, h5 { page-break-after: avoid; }
37
+ h1,
38
+ h2,
39
+ h3,
40
+ h4,
41
+ h5 {
42
+ page-break-after: avoid;
43
+ }
26
44
 
27
- h1, h2, h3, h4 {
45
+ h1,
46
+ h2,
47
+ h3,
48
+ h4 {
28
49
  font-weight: bold;
29
50
  }
30
51
 
@@ -34,10 +55,13 @@ h1 {
34
55
  padding-top: 1.25rem;
35
56
 
36
57
  & + h2 {
37
- padding-top: 0 !important;
58
+ padding-top: 0 !important; // stylelint-disable-line declaration-no-important
38
59
  }
39
60
 
40
- * { line-height: 1.1; margin-bottom: 0; }
61
+ * {
62
+ line-height: 1.1;
63
+ margin-bottom: 0;
64
+ }
41
65
  }
42
66
 
43
67
  h2 {
@@ -45,7 +69,7 @@ h2 {
45
69
  padding-top: 1.25rem;
46
70
 
47
71
  & + h3 {
48
- padding-top: 0 !important;
72
+ padding-top: 0 !important; // stylelint-disable-line declaration-no-important
49
73
  }
50
74
  }
51
75
 
@@ -54,7 +78,7 @@ h3 {
54
78
  padding-top: 1.25rem;
55
79
 
56
80
  & + h4 {
57
- padding-top: 0 !important;
81
+ padding-top: 0 !important; // stylelint-disable-line declaration-no-important
58
82
  }
59
83
  }
60
84
 
@@ -64,11 +88,16 @@ h4 {
64
88
  }
65
89
 
66
90
  ul li {
67
- text-indent: 0 !important;
91
+ text-indent: 0 !important; // stylelint-disable-line declaration-no-important
68
92
  }
69
93
 
70
- img, td, span, table {
94
+ img,
95
+ td,
96
+ span,
97
+ table {
71
98
  max-width: 100%;
72
99
  }
73
100
 
74
- img { height: auto !important; }
101
+ img {
102
+ height: auto !important; // stylelint-disable-line declaration-no-important
103
+ }
@@ -31,15 +31,8 @@ body {
31
31
 
32
32
  .c-pdf-cover {
33
33
  height: 100%;
34
-
35
- h1 {
36
- @include txt-pdf-element(h1);
37
- padding-top: 0;
38
- }
39
-
40
- h2 {
41
- @include txt-pdf-element(h2);
42
- padding-top: 0;
34
+ @include e(title) {
35
+ // keep
43
36
  }
44
37
 
45
38
  @include m(ela) {
@@ -73,11 +66,18 @@ body {
73
66
  padding: 30px;
74
67
  }
75
68
 
76
- @include e(title) {
77
- }
78
-
79
69
  @include e(logo) {
80
70
  bottom: 30px;
81
71
  position: absolute;
82
72
  }
73
+
74
+ h1 {
75
+ @include txt-pdf-element(h1);
76
+ padding-top: 0;
77
+ }
78
+
79
+ h2 {
80
+ @include txt-pdf-element(h2);
81
+ padding-top: 0;
82
+ }
83
83
  }
@@ -1,7 +1,10 @@
1
1
  .pdf-bullet {
2
2
  padding-left: $ub-xs-padding / 2;
3
3
  padding-right: $ub-xs-padding / 2;
4
- &:after { content: '\2022'; }
4
+
5
+ &::after {
6
+ content: '\2022';
7
+ }
5
8
  }
6
9
 
7
10
  .c-pdf-footer {
@@ -24,7 +27,10 @@
24
27
  }
25
28
 
26
29
  @include m(ld) {
27
- &, a { @include txt-pdf-element(ld-footer); }
30
+ &,
31
+ a {
32
+ @include txt-pdf-element(ld-footer);
33
+ }
28
34
  }
29
35
 
30
36
  @include m(material) {
@@ -70,5 +76,4 @@
70
76
  padding: 0;
71
77
  text-align: right;
72
78
  }
73
-
74
79
  }