lcms-engine 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -1
  3. data/.dockerignore +25 -0
  4. data/.env.docker +1 -1
  5. data/.eslintignore +2 -1
  6. data/.eslintrc +23 -73
  7. data/.nvmrc +1 -1
  8. data/.overcommit.yml +8 -2
  9. data/.prettierrc +7 -0
  10. data/.rubocop.yml +12 -8
  11. data/.ruby-version +1 -1
  12. data/.stylelintignore +9 -0
  13. data/.stylelintrc +8 -0
  14. data/CHANGELOG.md +50 -1
  15. data/Dockerfile +3 -3
  16. data/Gemfile.lock +408 -322
  17. data/README.md +20 -17
  18. data/app/assets/config/lcms_engine_manifest.js +4 -2
  19. data/app/assets/javascripts/lcms/engine/admin/{application.js → lcms_engine_application.js} +1 -3
  20. data/app/assets/javascripts/lcms/engine/initializers/foundation.js +1 -1
  21. data/app/assets/javascripts/lcms/engine/{application.js → lcms_engine_application.js} +0 -0
  22. data/app/assets/stylesheets/lcms/engine/admin/collections.scss +2 -1
  23. data/app/assets/stylesheets/lcms/engine/admin/components.scss +60 -19
  24. data/app/assets/stylesheets/lcms/engine/admin/curriculums.scss +12 -10
  25. data/app/assets/stylesheets/lcms/engine/admin/lessons.scss +21 -15
  26. data/app/assets/stylesheets/lcms/engine/admin/materials.scss +25 -17
  27. data/app/assets/stylesheets/lcms/engine/admin/resources.scss +8 -7
  28. data/app/assets/stylesheets/lcms/engine/admin/standards.scss +4 -1
  29. data/app/assets/stylesheets/lcms/engine/admin/users.scss +1 -1
  30. data/app/assets/stylesheets/lcms/engine/base/_colors.scss +8 -10
  31. data/app/assets/stylesheets/lcms/engine/base/_ld-colors.scss +10 -10
  32. data/app/assets/stylesheets/lcms/engine/components/_assoc-picker.scss +4 -5
  33. data/app/assets/stylesheets/lcms/engine/components/lesson/_activity.scss +6 -2
  34. data/app/assets/stylesheets/lcms/engine/components/lesson/_callout.scss +19 -5
  35. data/app/assets/stylesheets/lcms/engine/components/lesson/_columns.scss +4 -3
  36. data/app/assets/stylesheets/lcms/engine/components/lesson/_curriculum-map.scss +16 -7
  37. data/app/assets/stylesheets/lcms/engine/components/lesson/_def.scss +2 -2
  38. data/app/assets/stylesheets/lcms/engine/components/lesson/_expand.scss +9 -9
  39. data/app/assets/stylesheets/lcms/engine/components/lesson/_foundational-divider.scss +0 -1
  40. data/app/assets/stylesheets/lcms/engine/components/lesson/_group.scss +3 -1
  41. data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +1 -1
  42. data/app/assets/stylesheets/lcms/engine/components/lesson/_image-wrap.scss +2 -2
  43. data/app/assets/stylesheets/lcms/engine/components/lesson/_inset.scss +7 -2
  44. data/app/assets/stylesheets/lcms/engine/components/lesson/_materials.scss +1 -1
  45. data/app/assets/stylesheets/lcms/engine/components/lesson/_multiple-choice.scss +4 -1
  46. data/app/assets/stylesheets/lcms/engine/components/lesson/_override.scss +28 -9
  47. data/app/assets/stylesheets/lcms/engine/components/lesson/_pd.scss +7 -7
  48. data/app/assets/stylesheets/lcms/engine/components/lesson/_pv.scss +5 -4
  49. data/app/assets/stylesheets/lcms/engine/components/lesson/_section.scss +10 -3
  50. data/app/assets/stylesheets/lcms/engine/components/lesson/_selection-control.scss +14 -8
  51. data/app/assets/stylesheets/lcms/engine/components/lesson/_sidebar.scss +25 -10
  52. data/app/assets/stylesheets/lcms/engine/components/lesson/_title.scss +3 -1
  53. data/app/assets/stylesheets/lcms/engine/components/lesson/_unit-map.scss +1 -1
  54. data/app/assets/stylesheets/lcms/engine/components/material/_material.scss +3 -3
  55. data/app/assets/stylesheets/lcms/engine/components/material/_overlay.scss +12 -4
  56. data/app/assets/stylesheets/lcms/engine/components/material/_preview.scss +1 -1
  57. data/app/assets/stylesheets/lcms/engine/components/support/_survey.scss +3 -1
  58. data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +29 -11
  59. data/app/assets/stylesheets/lcms/engine/layout/_header.scss +5 -5
  60. data/app/assets/stylesheets/lcms/engine/layout/_navigation.scss +4 -6
  61. data/app/assets/stylesheets/lcms/engine/layout/_page.scss +2 -2
  62. data/app/assets/stylesheets/lcms/engine/{admin.scss → lcms_engine_admin.scss} +26 -15
  63. data/app/assets/stylesheets/lcms/engine/lcms_engine_application.scss +9 -0
  64. data/app/assets/stylesheets/lcms/engine/pdf.scss +5 -26
  65. data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +5 -23
  66. data/app/assets/stylesheets/lcms/engine/print/_base.scss +41 -12
  67. data/app/assets/stylesheets/lcms/engine/print/_cover.scss +12 -12
  68. data/app/assets/stylesheets/lcms/engine/print/_footer.scss +8 -3
  69. data/app/assets/stylesheets/lcms/engine/print/_gdoc-base.scss +10 -37
  70. data/app/assets/stylesheets/lcms/engine/print/_helpers.scss +5 -2
  71. data/app/assets/stylesheets/lcms/engine/print/_lesson-base.scss +2 -14
  72. data/app/assets/stylesheets/lcms/engine/print/_material-base.scss +1 -3
  73. data/app/assets/stylesheets/lcms/engine/print/_print.scss +15 -8
  74. data/app/assets/stylesheets/lcms/engine/print/_toc.scss +24 -9
  75. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base-typography.scss +24 -6
  76. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base.scss +10 -3
  77. data/app/assets/stylesheets/lcms/engine/print/gdoc/_colors.scss +3 -3
  78. data/app/assets/stylesheets/lcms/engine/print/gdoc/_header.scss +2 -2
  79. data/app/assets/stylesheets/lcms/engine/print/gdoc/_helpers.scss +1 -0
  80. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_activity.scss +1 -1
  81. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_agenda.scss +8 -2
  82. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_callout.scss +16 -6
  83. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_def.scss +1 -1
  84. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_dialogue.scss +3 -1
  85. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_expand.scss +5 -2
  86. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image-wrap.scss +5 -3
  87. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image.scss +1 -1
  88. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_optbreak.scss +1 -0
  89. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_section.scss +4 -1
  90. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_smp.scss +1 -0
  91. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_tables.scss +11 -3
  92. data/app/assets/stylesheets/lcms/engine/print/gdoc/material/_header.scss +5 -2
  93. data/app/assets/stylesheets/lcms/engine/print/lesson/_base-typography.scss +33 -9
  94. data/app/assets/stylesheets/lcms/engine/print/lesson/_group.scss +3 -1
  95. data/app/assets/stylesheets/lcms/engine/print/lesson/_image.scss +3 -1
  96. data/app/assets/stylesheets/lcms/engine/print/lesson/_materials.scss +1 -1
  97. data/app/assets/stylesheets/lcms/engine/print/lesson/_pd.scss +8 -4
  98. data/app/assets/stylesheets/lcms/engine/print/lesson/_section.scss +1 -1
  99. data/app/assets/stylesheets/lcms/engine/print/material/_header.scss +4 -1
  100. data/app/assets/stylesheets/lcms/engine/themes/_material.scss +11 -11
  101. data/app/assets/stylesheets/lcms/engine/utils/_colorcodes.scss +15 -5
  102. data/app/assets/stylesheets/lcms/engine/utils/_functions.scss +1 -1
  103. data/app/assets/stylesheets/lcms/engine/utils/_helpers.scss +23 -11
  104. data/app/assets/stylesheets/lcms/engine/utils/_placeholders.scss +1 -1
  105. data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +11 -11
  106. data/app/assets/stylesheets/lcms/engine/vendors/{mathjax.css → mathjax.scss} +0 -0
  107. data/app/assets/stylesheets/lcms/engine/vendors/react-tagsinput.css +48 -0
  108. data/app/controllers/concerns/lcms/engine/reimportable.rb +12 -2
  109. data/app/controllers/lcms/engine/admin/access_codes_controller.rb +8 -3
  110. data/app/controllers/lcms/engine/admin/admin_controller.rb +6 -40
  111. data/app/controllers/lcms/engine/admin/association_picker_controller.rb +4 -1
  112. data/app/controllers/lcms/engine/admin/batch_reimports_controller.rb +2 -2
  113. data/app/controllers/lcms/engine/admin/curriculums_controller.rb +21 -2
  114. data/app/controllers/lcms/engine/admin/documents_controller.rb +41 -14
  115. data/app/controllers/lcms/engine/admin/materials_controller.rb +32 -13
  116. data/app/controllers/lcms/engine/admin/resource_bulk_edits_controller.rb +2 -2
  117. data/app/controllers/lcms/engine/admin/resources_controller.rb +9 -7
  118. data/app/controllers/lcms/engine/admin/settings_controller.rb +1 -1
  119. data/app/controllers/lcms/engine/admin/standards_controller.rb +7 -2
  120. data/app/controllers/lcms/engine/admin/users_controller.rb +15 -7
  121. data/app/controllers/lcms/engine/application_controller.rb +1 -1
  122. data/app/controllers/lcms/engine/resources_controller.rb +5 -5
  123. data/app/controllers/lcms/engine/welcome_controller.rb +11 -0
  124. data/app/entities/lcms/engine/grades.rb +17 -6
  125. data/app/entities/lcms/engine/hierarchical_position.rb +1 -2
  126. data/app/entities/lcms/engine/media_embed.rb +2 -2
  127. data/app/entities/lcms/engine/pagination.rb +14 -10
  128. data/app/entities/lcms/engine/roman_numerals.rb +2 -2
  129. data/app/exceptions/lcms/engine/document_error.rb +8 -0
  130. data/app/exceptions/lcms/engine/material_error.rb +8 -0
  131. data/app/forms/lcms/engine/document_form.rb +19 -14
  132. data/app/forms/lcms/engine/material_form.rb +3 -2
  133. data/app/helpers/admin/components_helper.rb +3 -3
  134. data/app/helpers/lcms/engine/path_helper.rb +32 -0
  135. data/app/helpers/lcms/engine/resource_helper.rb +1 -1
  136. data/app/helpers/lcms/engine/view_helper.rb +1 -9
  137. data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +2 -2
  138. data/app/javascript/components/admin/ImportStatus.jsx +90 -56
  139. data/app/javascript/components/admin/Initializer.jsx +33 -35
  140. data/app/javascript/components/admin/MultiSelectedOperation.jsx +43 -18
  141. data/app/javascript/components/admin/association-picker/AssociationPicker.jsx +68 -47
  142. data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +18 -7
  143. data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +42 -17
  144. data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +47 -27
  145. data/app/javascript/components/admin/curriculum/CurriculumEditor.jsx +54 -32
  146. data/app/javascript/components/admin/curriculum/DirectoryPicker.jsx +80 -53
  147. data/app/javascript/components/admin/picker/PickerButton.jsx +16 -11
  148. data/app/javascript/components/admin/picker/pickerModal.jsx +6 -6
  149. data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +61 -40
  150. data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +54 -39
  151. data/app/javascript/components/admin/resource-picker/ResourcePickerResource.jsx +14 -3
  152. data/app/javascript/components/admin/resource-picker/ResourcePickerWindow.jsx +50 -21
  153. data/app/javascript/components/paginate/PageView.jsx +20 -8
  154. data/app/javascript/components/paginate/PaginationBoxView.jsx +78 -66
  155. data/app/javascript/components/paginate/PaginationListView.jsx +59 -45
  156. data/app/javascript/packs/lcms_engine_admin.js +15 -0
  157. data/app/javascript/packs/{application.js → lcms_engine_application.js} +5 -4
  158. data/app/javascript/packs/server_rendering.js +1 -0
  159. data/app/javascript/vendor/jstree/jstree.min.js +6 -0
  160. data/app/javascript/vendor/jstree/themes/default/32px.png +0 -0
  161. data/app/javascript/vendor/jstree/themes/default/40px.png +0 -0
  162. data/app/javascript/vendor/jstree/themes/default/style.css +1106 -0
  163. data/app/javascript/vendor/jstree/themes/default/style.min.css +1 -0
  164. data/app/javascript/vendor/jstree/themes/default/throbber.gif +0 -0
  165. data/app/javascript/vendor/jstree/themes/default-dark/32px.png +0 -0
  166. data/app/javascript/vendor/jstree/themes/default-dark/40px.png +0 -0
  167. data/app/javascript/vendor/jstree/themes/default-dark/style.css +1150 -0
  168. data/app/javascript/vendor/jstree/themes/default-dark/style.min.css +1 -0
  169. data/app/javascript/vendor/jstree/themes/default-dark/throbber.gif +0 -0
  170. data/app/jobs/concerns/lcms/engine/nested_resque_job.rb +1 -4
  171. data/app/jobs/lcms/engine/document_generate_gdoc_job.rb +2 -2
  172. data/app/jobs/lcms/engine/document_generate_job.rb +2 -2
  173. data/app/jobs/lcms/engine/document_generate_pdf_job.rb +5 -5
  174. data/app/jobs/lcms/engine/document_parse_job.rb +1 -1
  175. data/app/jobs/lcms/engine/material_generate_pdf_job.rb +4 -4
  176. data/app/models/concerns/lcms/engine/navigable.rb +6 -10
  177. data/app/models/concerns/lcms/engine/searchable.rb +7 -0
  178. data/app/models/lcms/engine/document.rb +1 -1
  179. data/app/models/lcms/engine/download.rb +1 -1
  180. data/app/models/lcms/engine/resource.rb +1 -1
  181. data/app/models/lcms/engine/search/document.rb +4 -3
  182. data/app/models/lcms/engine/search/repository.rb +1 -1
  183. data/app/presenters/lcms/engine/content_presenter.rb +1 -1
  184. data/app/presenters/lcms/engine/curriculum_presenter.rb +21 -18
  185. data/app/presenters/lcms/engine/document_presenter.rb +5 -3
  186. data/app/presenters/lcms/engine/resource_presenter.rb +6 -3
  187. data/app/queries/lcms/engine/admin_documents_query.rb +2 -2
  188. data/app/queries/lcms/engine/admin_materials_query.rb +11 -2
  189. data/app/queries/lcms/engine/base_query.rb +1 -1
  190. data/app/serializers/lcms/engine/previews_material_serializer.rb +1 -0
  191. data/app/services/lcms/engine/document_build_service.rb +6 -0
  192. data/app/services/lcms/engine/document_generator.rb +2 -2
  193. data/app/services/lcms/engine/google/drive_service.rb +7 -15
  194. data/app/services/lcms/engine/google/script_service.rb +7 -3
  195. data/app/services/lcms/engine/html_sanitizer.rb +6 -6
  196. data/app/services/lcms/engine/lessons_gdoc_bundler.rb +1 -1
  197. data/app/services/lcms/engine/lti_exporter.rb +1 -1
  198. data/app/services/lcms/engine/material_build_service.rb +6 -2
  199. data/app/services/lcms/engine/material_preview_generator.rb +3 -3
  200. data/app/services/lcms/engine/react_materials_resolver.rb +3 -2
  201. data/app/services/lcms/engine/s3_service.rb +14 -2
  202. data/app/tasks/resource_tasks.rb +2 -2
  203. data/app/views/layouts/lcms/engine/admin.html.erb +3 -3
  204. data/app/views/layouts/lcms/engine/application.html.erb +2 -2
  205. data/app/views/layouts/lcms/engine/lti.html.erb +1 -1
  206. data/app/views/lcms/engine/admin/access_codes/_form.html.erb +1 -1
  207. data/app/views/lcms/engine/admin/access_codes/index.html.erb +3 -3
  208. data/app/views/lcms/engine/admin/batch_reimports/_search_form.html.erb +2 -2
  209. data/app/views/lcms/engine/admin/curriculums/edit.html.erb +5 -5
  210. data/app/views/lcms/engine/admin/documents/_materials_links.html.erb +2 -2
  211. data/app/views/lcms/engine/admin/documents/_reimport.html.erb +1 -1
  212. data/app/views/lcms/engine/admin/documents/_search_form.html.erb +2 -2
  213. data/app/views/lcms/engine/admin/documents/import.html.erb +1 -1
  214. data/app/views/lcms/engine/admin/documents/index.html.erb +7 -5
  215. data/app/views/lcms/engine/admin/documents/new.html.erb +6 -2
  216. data/app/views/lcms/engine/admin/materials/_reimport.html.erb +1 -1
  217. data/app/views/lcms/engine/admin/materials/_search_form.html.erb +2 -2
  218. data/app/views/lcms/engine/admin/materials/import.html.erb +1 -1
  219. data/app/views/lcms/engine/admin/materials/index.html.erb +26 -22
  220. data/app/views/lcms/engine/admin/materials/new.html.erb +5 -1
  221. data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +2 -2
  222. data/app/views/lcms/engine/admin/resources/_fields.html.erb +4 -0
  223. data/app/views/lcms/engine/admin/resources/_form.html.erb +1 -1
  224. data/app/views/lcms/engine/admin/resources/_search_form.html.erb +2 -2
  225. data/app/views/lcms/engine/admin/resources/index.html.erb +7 -5
  226. data/app/views/lcms/engine/admin/shared/_header.html.erb +12 -12
  227. data/app/views/lcms/engine/admin/standards/_form.html.erb +3 -1
  228. data/app/views/lcms/engine/admin/standards/_search_form.html.erb +1 -1
  229. data/app/views/lcms/engine/admin/users/_form.html.erb +1 -1
  230. data/app/views/lcms/engine/admin/users/_search_form.html.erb +1 -1
  231. data/app/views/lcms/engine/admin/users/index.html.erb +6 -6
  232. data/app/views/lcms/engine/documents/gdoc/_agenda.html.erb +1 -1
  233. data/app/views/lcms/engine/documents/show.html.erb +1 -1
  234. data/app/views/lcms/engine/materials/show.html.erb +1 -1
  235. data/app/views/lcms/engine/pages/not_found.html.erb +5 -0
  236. data/app/views/lcms/engine/resources/_download.html.erb +2 -2
  237. data/app/views/lcms/engine/resources/_unit_bundles.html.erb +2 -2
  238. data/app/views/lcms/engine/resources/generic.html.erb +0 -4
  239. data/app/views/lcms/engine/resources/media.html.erb +0 -4
  240. data/app/views/lcms/engine/resources/show.html.erb +0 -2
  241. data/config/initializers/airbrake.rb +62 -10
  242. data/config/initializers/bitly.rb +1 -1
  243. data/config/initializers/carrier_wave.rb +6 -4
  244. data/config/initializers/ckeditor.rb +6 -0
  245. data/config/initializers/elasticsearch.rb +1 -1
  246. data/config/initializers/resque.rb +2 -2
  247. data/config/locales/admin/en.yml +1 -2
  248. data/config/locales/ui/en.yml +1 -0
  249. data/config/routes.rb +5 -2
  250. data/db/migrate/.keep +0 -0
  251. data/db/schema.rb +280 -312
  252. data/db/seeds.rb +0 -1
  253. data/docker-compose.ror4.yml +32 -0
  254. data/docker-compose.yml +6 -3
  255. data/docs/env-variables.md +40 -40
  256. data/docs/google-cloud-platform-setup.md +45 -17
  257. data/docs/how-to-build-and-publish.md +1 -0
  258. data/lcms-engine.gemspec +28 -20
  259. data/lib/doc_template/document.rb +3 -4
  260. data/lib/doc_template/document_toc.rb +2 -2
  261. data/lib/doc_template/objects/activity_metadata.rb +1 -1
  262. data/lib/doc_template/objects/agenda_metadata.rb +1 -1
  263. data/lib/doc_template/objects/metadata_helpers.rb +1 -1
  264. data/lib/doc_template/objects/toc_helpers.rb +4 -4
  265. data/lib/doc_template/objects/toc_metadata.rb +4 -6
  266. data/lib/doc_template/tables/base.rb +3 -2
  267. data/lib/doc_template/tags/activity_metadata_type_tag.rb +1 -1
  268. data/lib/doc_template/tags/answer_space_tag.rb +2 -2
  269. data/lib/doc_template/tags/base_tag.rb +5 -5
  270. data/lib/doc_template/tags/block_tag.rb +1 -1
  271. data/lib/doc_template/tags/columns_tag.rb +1 -1
  272. data/lib/doc_template/tags/def_tag.rb +1 -1
  273. data/lib/doc_template/tags/expand_tag.rb +1 -0
  274. data/lib/doc_template/tags/heading_tag.rb +1 -1
  275. data/lib/doc_template/tags/inset_tag.rb +2 -2
  276. data/lib/doc_template/tags/latex_tag.rb +1 -1
  277. data/lib/doc_template/tags/page_break_tag.rb +1 -1
  278. data/lib/doc_template/tags/pd_tag.rb +4 -4
  279. data/lib/doc_template/tags/section_tag.rb +2 -2
  280. data/lib/doc_template/tags/standard_tag.rb +3 -3
  281. data/lib/doc_template/tags/table_preserve_alignment_tag.rb +1 -1
  282. data/lib/doc_template/tags/table_tag.rb +1 -1
  283. data/lib/doc_template/template.rb +1 -1
  284. data/lib/doc_template.rb +9 -9
  285. data/lib/document_exporter/gdoc/base.rb +6 -3
  286. data/lib/document_exporter/pdf/base.rb +1 -1
  287. data/lib/document_exporter/pdf/document.rb +2 -2
  288. data/lib/document_exporter/pdf/material.rb +2 -2
  289. data/lib/document_exporter/pdf/student_material.rb +2 -2
  290. data/lib/document_exporter/pdf/teacher_material.rb +2 -2
  291. data/lib/document_renderer/part.rb +4 -6
  292. data/lib/elasticsearch/persistence/repository/response/results.rb +1 -1
  293. data/lib/lcms/engine/engine.rb +10 -9
  294. data/lib/lcms/engine/version.rb +1 -1
  295. data/lib/lcms/engine.rb +0 -1
  296. data/lib/lt/lcms/metadata/base_service.rb +2 -1
  297. data/lib/lt/lcms/metadata/context.rb +58 -54
  298. data/lib/lt/lcms/metadata/service.rb +6 -3
  299. data/lib/resque_job.rb +3 -6
  300. data/lib/standard_importer.rb +4 -4
  301. data/lib/tasks/cloud66.rake +8 -6
  302. data/lib/tasks/document.rake +7 -7
  303. data/lib/tasks/google.rake +29 -14
  304. data/lib/tasks/lcms/engine_tasks.rake +1 -1
  305. data/package.json +31 -9
  306. data/postcss.config.js +12 -0
  307. data/spec/controllers/admin/association_picker_controller_spec.rb +6 -8
  308. data/spec/controllers/admin/curriculums_controller_spec.rb +23 -0
  309. data/spec/controllers/admin/documents_controller_spec.rb +25 -3
  310. data/spec/controllers/admin/materials_controller_spec.rb +17 -4
  311. data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +1 -1
  312. data/spec/controllers/admin/resources_controller_spec.rb +3 -3
  313. data/spec/controllers/admin/settings_controller_spec.rb +1 -1
  314. data/spec/controllers/admin/standards_controller_spec.rb +1 -1
  315. data/spec/controllers/admin/welcome_controller_spec.rb +12 -10
  316. data/spec/controllers/resources_controller_spec.rb +3 -3
  317. data/spec/controllers/welcome_controller_spec.rb +38 -0
  318. data/spec/dummy/.env.docker +5 -0
  319. data/spec/dummy/.traceroute.yaml +0 -2
  320. data/spec/dummy/bin/webpack +18 -0
  321. data/spec/dummy/bin/webpack-dev-server +18 -0
  322. data/spec/dummy/config/application.rb +1 -1
  323. data/spec/dummy/config/environments/production.rb +1 -1
  324. data/spec/dummy/config/environments/test.rb +1 -1
  325. data/spec/dummy/config/initializers/assets.rb +6 -0
  326. data/spec/dummy/config/lcms-admin.yml +3 -7
  327. data/spec/dummy/config/puma.rb +3 -3
  328. data/spec/dummy/config/routes.rb +6 -0
  329. data/spec/dummy/db/schema.rb +5 -5
  330. data/spec/entities/grades_spec.rb +12 -0
  331. data/spec/factories/documents.rb +1 -0
  332. data/spec/factories/downloads.rb +1 -1
  333. data/spec/factories/resources.rb +2 -2
  334. data/spec/features/admin/lessons/add_lesson_spec.rb +3 -3
  335. data/spec/features/admin/materials/add_material_spec.rb +5 -3
  336. data/spec/features/admin/users_spec.rb +2 -2
  337. data/spec/forms/document_form_spec.rb +11 -1
  338. data/spec/{controllers/admin/admin_controller_spec.rb → helpers/path_helper_spec.rb} +6 -6
  339. data/spec/lib/doc_template/objects/activity_metadata_spec.rb +1 -1
  340. data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +2 -0
  341. data/spec/lib/doc_template/objects/toc_metadata_spec.rb +1 -1
  342. data/spec/lib/doc_template/tables/shared_examples/remove_table.rb +1 -1
  343. data/spec/lib/doc_template/tags/page_break_tag_spec.rb +1 -1
  344. data/spec/lib/doc_template/tags/pd_tag_spec.rb +1 -1
  345. data/spec/models/document_spec.rb +1 -1
  346. data/spec/models/standard_spec.rb +2 -0
  347. data/spec/queries/lcms/engine/admin_materials_query_spec.rb +34 -0
  348. data/spec/rails_helper.rb +8 -2
  349. data/spec/services/document_build_service_spec.rb +4 -11
  350. data/spec/services/s3_service_spec.rb +31 -0
  351. data/spec/support/concerns/navigable.rb +2 -0
  352. data/spec/support/routes.rb +4 -0
  353. data/spec/support/shared_examples/content_tag.rb +4 -4
  354. data/templates/routes.rb +0 -1
  355. data/yarn.lock +3447 -2993
  356. metadata +208 -303
  357. data/app/assets/stylesheets/lcms/engine/application.scss +0 -36
  358. data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +0 -1
  359. data/app/exceptions/components_api_error.rb +0 -4
  360. data/app/exceptions/document_error.rb +0 -4
  361. data/app/exceptions/material_error.rb +0 -4
  362. data/app/javascript/packs/admin.js +0 -14
  363. data/app/models/lcms/engine/component.rb +0 -88
  364. data/app/presenters/lcms/engine/social_media_presenter.rb +0 -83
  365. data/app/views/lcms/engine/shared/_social_sharing.html.erb +0 -22
  366. data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +0 -36
  367. data/db/migrate/20200218144849_drop_material_parts_table.rb +0 -7
  368. data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +0 -7
  369. data/db/migrate/20200429130353_drop_pages.rb +0 -13
  370. data/db/seeds/pages.seeds.rb +0 -26
  371. data/lib/document_exporter.rb +0 -6
  372. data/lib/lcms/engine/migration.rb +0 -16
  373. data/spec/models/component_spec.rb +0 -60
  374. data/vendor/assets/javascripts/jquery.tagsinput.js +0 -1
@@ -13,36 +13,36 @@
13
13
  <div class="o-top-bar__item c-header__menu">
14
14
  <ul class="dropdown menu" data-dropdown-menu>
15
15
  <li class="c-header__link">
16
- <%= link_to t('lcms.engine.admin.nav.curriculum'), edit_admin_curriculum_path %>
16
+ <%= link_to t('lcms.engine.admin.nav.curriculum'), lcms_engine.edit_admin_curriculum_path %>
17
17
  </li>
18
18
 
19
19
  <li class="dropdown c-header__link">
20
- <%= link_to t('lcms.engine.admin.nav.resources'), admin_resources_path %>
20
+ <%= link_to t('lcms.engine.admin.nav.resources'), lcms_engine.admin_resources_path %>
21
21
  <ul class="menu vertical">
22
- <%= nav_link t('lcms.engine.admin.nav.resources'), admin_resources_path %>
23
- <%= nav_link t('lcms.engine.admin.nav.add_resource'), new_admin_resource_path %>
22
+ <%= nav_link t('lcms.engine.admin.nav.resources'), lcms_engine.admin_resources_path %>
23
+ <%= nav_link t('lcms.engine.admin.nav.add_resource'), lcms_engine.new_admin_resource_path %>
24
24
  <%#= nav_link t('lcms.engine.admin.nav.sketch_compilation', version: 'v1'), new_admin_sketch_compiler_path(:v1) %>
25
25
  <%#= nav_link t('lcms.engine.admin.nav.sketch_compilation', version: 'v2'), new_admin_sketch_compiler_path(:v2) %>
26
- <%= nav_link t('lcms.engine.admin.nav.lessons'), admin_documents_path %>
27
- <%= nav_link t('lcms.engine.admin.nav.materials'), admin_materials_path %>
28
- <%= nav_link t('lcms.engine.admin.nav.batch_reimport'), new_admin_batch_reimport_path %>
26
+ <%= nav_link t('lcms.engine.admin.nav.lessons'), lcms_engine.admin_documents_path %>
27
+ <%= nav_link t('lcms.engine.admin.nav.materials'), lcms_engine.admin_materials_path %>
28
+ <%= nav_link t('lcms.engine.admin.nav.batch_reimport'), lcms_engine.new_admin_batch_reimport_path %>
29
29
  </ul>
30
30
  </li>
31
31
 
32
32
  <li class="c-header__link">
33
- <%= link_to t('lcms.engine.admin.nav.standards'), admin_standards_path %>
33
+ <%= link_to t('lcms.engine.admin.nav.standards'), lcms_engine.admin_standards_path %>
34
34
  </li>
35
35
 
36
36
  <li class="dropdown c-header__link">
37
- <%= link_to t('lcms.engine.admin.nav.users'), admin_users_path %>
37
+ <%= link_to t('lcms.engine.admin.nav.users'), lcms_engine.admin_users_path %>
38
38
  <ul class="menu vertical">
39
- <%= nav_link t('lcms.engine.admin.nav.users'), admin_users_path %>
40
- <%= nav_link t('lcms.engine.admin.nav.access_codes'), admin_access_codes_path %>
39
+ <%= nav_link t('lcms.engine.admin.nav.users'), lcms_engine.admin_users_path %>
40
+ <%= nav_link t('lcms.engine.admin.nav.access_codes'), lcms_engine.admin_access_codes_path %>
41
41
  </ul>
42
42
  </li>
43
43
 
44
44
  <li class="c-header__link">
45
- <%= link_to t('lcms.engine.admin.nav.sign_out'), destroy_user_session_path %>
45
+ <%= link_to t('lcms.engine.admin.nav.sign_out'), lcms_engine.destroy_user_session_path %>
46
46
  </li>
47
47
  </ul>
48
48
  </div>
@@ -1,4 +1,6 @@
1
- <%= simple_form_for @standard, as: :standard, url: admin_standard_path(@standard), html: { class: 'o-standard-form' } do |f| %>
1
+ <%= javascript_include_tag Ckeditor.cdn_url %>
2
+
3
+ <%= simple_form_for @standard, as: :standard, url: lcms_engine.admin_standard_path(@standard), html: { class: 'o-standard-form' } do |f| %>
2
4
 
3
5
  <div class="row o-admin-standard-readonly">
4
6
  <label>Name: </label>
@@ -1,4 +1,4 @@
1
- <%= simple_form_for :query, url: :admin_standards, html: { class: 'form-inline well o-admin-standards-search', method: :get } do |f| %>
1
+ <%= simple_form_for :query, url: lcms_engine.admin_standards_path, html: { class: 'form-inline well o-admin-standards-search', method: :get } do |f| %>
2
2
 
3
3
  <div class='row align-bottom align-justify'>
4
4
  <%= f.input :name, label: 'Name', required: false, wrapper_html: { class: 'resource-search-title' } %>
@@ -1,4 +1,4 @@
1
- <%= simple_form_for [:admin, @user], html: { id: 'user_form' } do |f| %>
1
+ <%= simple_form_for @user, url: @url.presence || lcms_engine.admin_users_path, html: { id: 'user_form' } do |f| %>
2
2
  <%= f.input :id, disabled: true %>
3
3
  <%= f.input :name %>
4
4
  <%= f.input :email %>
@@ -1,4 +1,4 @@
1
- <%= simple_form_for :query, url: :admin_users, html: { class: 'form-inline well o-admin-users-search', method: :get } do |f| %>
1
+ <%= simple_form_for :query, url: lcms_engine.admin_users_path, html: { class: 'form-inline well o-admin-users-search', method: :get } do |f| %>
2
2
 
3
3
  <div class='row align-bottom align-justify'>
4
4
  <%= f.input :email, label: false, required: false, placeholder: 'Search by E-mail', wrapper_html: { class: 'o-admin-search-term' } %>
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div class="row">
9
9
  <div class="flex-pull-right">
10
- <%= link_to t('.new_user'), :new_admin_user, class: 'button success' %>
10
+ <%= link_to t('.new_user'), lcms_engine.new_admin_user_path, class: 'button success' %>
11
11
  </div>
12
12
  <table class="table">
13
13
  <tr>
@@ -27,17 +27,17 @@
27
27
  <% @users.each do |user| %>
28
28
  <% cache user do %>
29
29
  <tr id="user_<%= user.id %>">
30
- <td><%= link_to user.id, edit_admin_user_path(user) %>
31
- <td><%= link_to user.survey&.fetch('first_name', nil) || user.name, edit_admin_user_path(user) %>
30
+ <td><%= link_to user.id, lcms_engine.edit_admin_user_path(user) %>
31
+ <td><%= link_to user.survey&.fetch('first_name', nil) || user.name, lcms_engine.edit_admin_user_path(user) %>
32
32
  <td><%= raw user.survey&.fetch('last_name', nil) %>
33
33
  <td><%= user.email %>
34
34
  <td><%= user.role %>
35
35
  <td><%= user.access_code.presence || '-' %>
36
36
  <td><%= user.confirmed? ? 'YES' : 'NO' %>
37
37
  <td class="u-txt--small"><%= user.created_at.to_s %>
38
- <td><%= link_to content_tag(:i, nil, class: 'fas fa-pencil-alt').html_safe, edit_admin_user_path(user), class: 'button small primary' %>
39
- <td><%= button_to t('.reset_password_btn'), reset_password_admin_user_path(user), class: 'button small', data: { confirm: t('ui.are_you_sure') }, form_class: 'inline', method: :post %>
40
- <td><%= button_to t('ui.delete'), admin_user_path(user), class: 'button small alert', data: { confirm: t('ui.are_you_sure') }, form_class: 'inline', method: :delete %></td>
38
+ <td><%= link_to content_tag(:i, nil, class: 'fas fa-pencil-alt').html_safe, lcms_engine.edit_admin_user_path(user), class: 'button small primary' %>
39
+ <td><%= button_to t('.reset_password_btn'), lcms_engine.reset_password_admin_user_path(user), class: 'button small', data: { confirm: t('ui.are_you_sure') }, form_class: 'inline', method: :post %>
40
+ <td><%= button_to t('ui.delete'), lcms_engine.admin_user_path(user), class: 'button small alert', data: { confirm: t('ui.are_you_sure') }, form_class: 'inline', method: :delete %></td>
41
41
  </tr>
42
42
  <% end %>
43
43
  <% end %>
@@ -11,7 +11,7 @@
11
11
  <td class="u-text--right o-agenda__item"><p>TIME</p></td>
12
12
  </tr>
13
13
  <% document.toc.children.each do |l1| %>
14
- <% l1_excluded = l1.excluded?(excludes, document.ela?) %>
14
+ <% l1_excluded = l1.excluded?(excludes, ela: document.ela?) %>
15
15
  <% l1_time = l1_excluded ? l1.time : l1.time_with(excludes) %>
16
16
  <tr class="<%= 'u-text--strikethrough' if l1_excluded %>">
17
17
  <td colspan="3" class="u-txt--agenda-l1-title o-agenda__item">
@@ -14,7 +14,7 @@
14
14
  Go to Lessons Admin
15
15
  <% end %>
16
16
  <%= link_to @document.file_url, class: 'o-ub-ld-btn o-ub-ld-btn--bordered', target: '_blank' do %>
17
- <i class="ub-icon ub-file-gdoc"></i> Google Doc
17
+ <i class="fab fa-google"></i> Google Doc
18
18
  <% end %>
19
19
  <%= render partial: 'lcms/engine/admin/documents/reimport', locals: { lesson: @document, btn_class: 'o-ub-ld-btn o-ub-ld-btn--bordered' } %>
20
20
 
@@ -6,7 +6,7 @@
6
6
  <div>
7
7
  <%= link_to 'Go to Materials Admin', admin_materials_path(request.query_parameters), class: 'button primary u-margin-right--base' %>
8
8
  <%= link_to @material.file_url, class: 'button primary u-margin-right--base', target: '_blank' do %>
9
- <i class="ub-icon ub-file-gdoc"></i> Google Doc
9
+ <i class="fab fa-google"></i> Google Doc
10
10
  <% end %>
11
11
  <%= render partial: 'lcms/engine/admin/materials/reimport', locals: { material: @material, btn_size: 'default' } %>
12
12
  </div>
@@ -0,0 +1,5 @@
1
+ <% set_page_title t('lcms.engine.pages.not_found.page_title') %>
2
+
3
+ <div class="o-filterbar-title">
4
+ <h2><%= t('lcms.engine.pages.not_found.page_header') %></h2>
5
+ </div>
@@ -3,14 +3,14 @@
3
3
  <span>
4
4
  <%= link_to preview_download_path(id: download, slug: resource.slug), class: 'resource-attachment',
5
5
  data: { no_turbolink: true }, target: '_blank' do %>
6
- <i class="ub-icon ub-eye" aria-hidden="true"></i>
6
+ <i class="fas fa-eye" aria-hidden="true"></i>
7
7
  <% end %>
8
8
  </span>
9
9
  <% end %>
10
10
  <% id = SecureRandom.hex(4) %>
11
11
  <span data-toggle="<%= id %>">
12
12
  <%= link_to download_path(download, slug: resource.slug), class: 'resource-attachment', data: { no_turbolink: true } do %>
13
- <i class="ub-icon fa-lg file-<%= "#{file_icon(download.download.attachment_content_type)} #{indent}" %>"></i>
13
+ <i class="far fa-file-<%= "#{file_icon(download.download.attachment_content_type)} #{indent}" %>"></i>
14
14
  <%= download.download.title %>
15
15
  <% end %>
16
16
  </span>
@@ -9,12 +9,12 @@
9
9
  <li class="o-unit-bundles__item">
10
10
  <div class="o-unit-bundles__item--links">
11
11
  <%= link_to bundle.file&.url, data: { no_turbolink: true } do %>
12
- <i class="ub-icon fa-lg ub-file-zip"></i>
12
+ <i class="far fa-file-archive"></i>
13
13
  <% end %>
14
14
  <% if (gdoc_bundle = resource.document_bundles.detect { |b| b.content_type == 'gdoc' }) %>
15
15
  <% if cat == 'full' %>
16
16
  <%= link_to gdoc_bundle.url, target: '_blank', data: { no_turbolink: true } do %>
17
- <i class="ub-icon fa-lg ub-file-gdoc"></i>
17
+ <i class="fab fa-google"></i>
18
18
  <% end %>
19
19
  <% else %>
20
20
  <span class="o-unit-bundles__item--placeholder"></span>
@@ -1,5 +1,4 @@
1
1
  <% set_page_title @resource.title %>
2
- <% set_social_media_sharing @resource %>
3
2
 
4
3
  <div class="o-page o-page--margin-to-bottom">
5
4
  <div class="o-page__module u-margin-bottom--gutter">
@@ -30,9 +29,6 @@
30
29
  </div>
31
30
  <hr class="o-resource-hr">
32
31
  <div class="o-resource-summary u-padding-bottom--gutter">
33
- <div class="o-resource-summary__map">
34
- <%= render partial: 'lcms/engine/shared/social_sharing', locals: { resource: @resource, cl: '' } %>
35
- </div>
36
32
  <div class="o-resource-summary__content">
37
33
  <% if @resource.preview? %>
38
34
  <div class="o-generic-preview">
@@ -1,5 +1,4 @@
1
1
  <% set_page_title @resource.title %>
2
- <% set_social_media_sharing @resource %>
3
2
 
4
3
  <div class="o-page o-page--margin-to-bottom">
5
4
  <div class="o-page__module u-margin-bottom--gutter">
@@ -26,9 +25,6 @@
26
25
  </div>
27
26
  <hr class="o-resource-hr">
28
27
  <div class="o-resource-summary u-padding-bottom--gutter">
29
- <div class="o-resource-summary__map">
30
- <%= render partial: 'lcms/engine/shared/social_sharing', locals: { resource: @resource, cl: '' } %>
31
- </div>
32
28
  <div class="o-resource-summary__content">
33
29
  <div class="o-resource__item o-resource-summary__content--media">
34
30
  <div class="o-media-<%= @resource.resource_type %>">
@@ -1,5 +1,4 @@
1
1
  <% set_page_title @resource.page_title %>
2
- <% set_social_media_sharing @resource %>
3
2
 
4
3
  <% set_canonical_url(show_with_slug_path @resource.slug) if @resource.slug %>
5
4
 
@@ -65,7 +64,6 @@
65
64
  <strong><%= @resource.subject_and_grade_title %> Curriculum Map</strong>
66
65
  </div>
67
66
  <%= react_component('CurriculumMap', @props.merge(mapType: 'cs')) %>
68
- <%= render partial: 'lcms/engine/shared/social_sharing', locals: { resource: @resource, cl: 'u-margin-top--base' } %>
69
67
  </div>
70
68
  <div class="o-resource-summary__content">
71
69
  <div class="o-resource__item o-resource__item--description">
@@ -1,27 +1,79 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- project_id = ENV['AIR_BRAKE_PROJECT_ID']
4
- project_key = ENV['AIR_BRAKE_PROJECT_KEY']
3
+ project_id = ENV.fetch('AIR_BRAKE_PROJECT_ID', nil)
4
+ project_key = ENV.fetch('AIR_BRAKE_PROJECT_KEY', nil)
5
5
 
6
6
  AIRBRAKE_ENABLED = project_id.present? && project_key.present?
7
7
 
8
+ # Airbrake is an online tool that provides robust exception tracking in your
9
+ # Rails applications. In doing so, it allows you to easily review errors, tie an
10
+ # error to an individual piece of code, and trace the cause back to recent
11
+ # changes. Airbrake enables for easy categorization, searching, and
12
+ # prioritization of exceptions so that when errors occur, your team can quickly
13
+ # determine the root cause.
14
+ #
15
+ # Configuration details:
16
+ # https://github.com/airbrake/airbrake-ruby#configuration
8
17
  if AIRBRAKE_ENABLED
9
18
  require 'airbrake'
10
19
 
11
20
  Airbrake.configure do |c|
21
+ # You must set both project_id & project_key. To find your project_id and
22
+ # project_key navigate to your project's General Settings and copy the
23
+ # values from the right sidebar.
24
+ # https://github.com/airbrake/airbrake-ruby#project_id--project_key
12
25
  c.project_id = project_id
13
26
  c.project_key = project_key
14
27
 
28
+ # Configures the root directory of your project. Expects a String or a
29
+ # Pathname, which represents the path to your project. Providing this option
30
+ # helps us to filter out repetitive data from backtrace frames and link to
31
+ # GitHub files from our dashboard.
32
+ # https://github.com/airbrake/airbrake-ruby#root_directory
15
33
  c.root_directory = Rails.root
16
- c.logger = Rails.logger
34
+
35
+ # By default, Airbrake Ruby outputs to STDOUT. In Rails apps it makes sense
36
+ # to use the Rails' logger.
37
+ # https://github.com/airbrake/airbrake-ruby#logger
38
+ c.logger = Airbrake::Rails.logger
39
+
40
+ # Configures the environment the application is running in. Helps the
41
+ # Airbrake dashboard to distinguish between exceptions occurring in
42
+ # different environments.
43
+ # NOTE: This option must be set in order to make the 'ignore_environments'
44
+ # option work.
45
+ # https://github.com/airbrake/airbrake-ruby#environment
17
46
  c.environment = Rails.env
18
- c.blacklist_keys = Rails.application.config.filter_parameters
19
47
 
48
+ # Setting this option allows Airbrake to filter exceptions occurring in
49
+ # unwanted environments such as :test. NOTE: This option *does not* work if
50
+ # you don't set the 'environment' option.
51
+ # https://github.com/airbrake/airbrake-ruby#ignore_environments
20
52
  c.ignore_environments = %w(test)
21
53
 
22
- c.performance_stats = true
54
+ # A list of parameters that should be filtered out of what is sent to
55
+ # Airbrake. By default, all "password" attributes will have their contents
56
+ # replaced.
57
+ # https://github.com/airbrake/airbrake-ruby#blocklist_keys
58
+ c.blocklist_keys = [/password/i, /authorization/i]
59
+
60
+ # Alternatively, you can integrate with Rails' filter_parameters.
61
+ # Read more: https://goo.gl/gqQ1xS
62
+ # c.blocklist_keys = Rails.application.config.filter_parameters
23
63
  end
24
64
 
65
+ # A filter that collects request body information. Enable it if you are sure you
66
+ # don't send sensitive information to Airbrake in your body (such as passwords).
67
+ # https://github.com/airbrake/airbrake#requestbodyfilter
68
+ # Airbrake.add_filter(Airbrake::Rack::RequestBodyFilter.new)
69
+
70
+ # Attaches thread & fiber local variables along with general thread information.
71
+ # Airbrake.add_filter(Airbrake::Filters::ThreadFilter.new)
72
+
73
+ # Attaches loaded dependencies to the notice object
74
+ # (under context/versions/dependencies).
75
+ # Airbrake.add_filter(Airbrake::Filters::DependencyFilter.new)
76
+
25
77
  ignore_errors = %w(
26
78
  AbstractController::ActionNotFound
27
79
  ActiveRecord::RecordNotFound
@@ -31,9 +83,9 @@ if AIRBRAKE_ENABLED
31
83
  Airbrake.add_filter do |notice|
32
84
  notice.ignore! if notice[:errors].any? { |error| ignore_errors.include?(error[:type]) }
33
85
  end
34
- end
35
86
 
36
- # If Airbrake doesn't send any expected exceptions, we suggest to uncomment the
37
- # line below. It might simplify debugging of background Airbrake workers, which
38
- # can silently die.
39
- # Thread.abort_on_exception = ['test', 'development'].include?(Rails.env)
87
+ # If you want to convert your log messages to Airbrake errors, we offer an
88
+ # integration with the Logger class from stdlib.
89
+ # https://github.com/airbrake/airbrake#logger
90
+ # Rails.logger = Airbrake::AirbrakeLogger.new(Rails.logger)
91
+ end
@@ -6,5 +6,5 @@ Bitly.use_api_version_3
6
6
 
7
7
  Bitly.configure do |config|
8
8
  config.api_version = 3
9
- config.access_token = ENV['BITLY_API_TOKEN']
9
+ config.access_token = ENV.fetch('BITLY_API_TOKEN', nil)
10
10
  end
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'fog/aws'
4
+
3
5
  CarrierWave.configure do |config|
4
6
  if (Rails.env.development? && ENV['AWS_ACCESS_KEY_ID'].blank?) || Rails.env.test?
5
7
  config.storage = :file
6
8
  else
7
9
  config.fog_credentials = {
8
10
  provider: 'AWS',
9
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
10
- aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
11
- region: ENV['AWS_REGION']
11
+ aws_access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID', nil),
12
+ aws_secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY', nil),
13
+ region: ENV.fetch('AWS_REGION', nil)
12
14
  }
13
- config.fog_directory = ENV['AWS_S3_BUCKET_NAME']
15
+ config.fog_directory = ENV.fetch('AWS_S3_BUCKET_NAME', nil)
14
16
  config.fog_public = true
15
17
  config.storage = :fog
16
18
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ Ckeditor.setup do |config|
4
+ # //cdn.ckeditor.com/<version.number>/<distribution>/ckeditor.js
5
+ config.cdn_url = '//cdn.ckeditor.com/4.6.1/basic/ckeditor.js'
6
+ end
@@ -3,6 +3,6 @@
3
3
  require 'elasticsearch/model'
4
4
 
5
5
  Elasticsearch::Model.client = Elasticsearch::Client.new(
6
- host: ENV['ELASTICSEARCH_ADDRESS']
6
+ host: ENV.fetch('ELASTICSEARCH_ADDRESS', nil)
7
7
  )
8
8
  Hashie.logger = Logger.new('/dev/null')
@@ -3,8 +3,8 @@
3
3
  Resque.redis = ENV.fetch('REDIS_URL', 'redis://localhost:6379')
4
4
  Resque.redis.namespace = ENV.fetch('RESQUE_NAMESPACE', 'resque:development')
5
5
 
6
- project_id = ENV['AIR_BRAKE_PROJECT_ID']
7
- project_key = ENV['AIR_BRAKE_PROJECT_KEY']
6
+ project_id = ENV.fetch('AIR_BRAKE_PROJECT_ID', nil)
7
+ project_key = ENV.fetch('AIR_BRAKE_PROJECT_KEY', nil)
8
8
 
9
9
  if project_id.present? && project_key.present?
10
10
  require 'airbrake/resque'
@@ -216,7 +216,7 @@ en:
216
216
  unit_bundles: Generate Unit Bundles
217
217
  create:
218
218
  error: Error
219
- success: Lesson %{name} parsed successfully.
219
+ success: Lesson %{name} parsed successfully. %{errors}
220
220
  new:
221
221
  page_title: Add a lesson
222
222
  submit: Parse
@@ -268,7 +268,6 @@ en:
268
268
  import_glossary: Import Glossary
269
269
  sign_out: Sign out
270
270
  standards: Standards
271
- component_search: Search Component
272
271
  sketch_compilation: Compile lesson sketch %{version}
273
272
  import_lesson: Import Lesson
274
273
  lessons: Lessons
@@ -124,6 +124,7 @@ en:
124
124
  add: Add
125
125
  all: All
126
126
  are_you_sure: Are you sure?
127
+ async: Asynchronously
127
128
  close: Close
128
129
  contents: Contents
129
130
  delete: Delete
data/config/routes.rb CHANGED
@@ -32,7 +32,6 @@ Lcms::Engine::Engine.routes.draw do
32
32
 
33
33
  namespace :admin do
34
34
  get '/' => 'welcome#index'
35
- get '/whoami' => 'admin#whoami'
36
35
  get '/association_picker' => 'association_picker#index'
37
36
  resource :resource_bulk_edits, only: %i(new create)
38
37
  get '/resource_picker' => 'resource_picker#index'
@@ -69,11 +68,15 @@ Lcms::Engine::Engine.routes.draw do
69
68
  get :import_status, to: 'materials#import_status'
70
69
  end
71
70
  end
72
- resource :curriculum, only: %i(edit update)
71
+ resource :curriculum, only: %i(edit update) do
72
+ get :children
73
+ end
73
74
  resources :access_codes, except: :show
74
75
  resource :batch_reimport, only: %i(new create)
75
76
  end
76
77
 
78
+ get '/oauth2callback' => 'welcome#oauth2callback'
79
+
77
80
  get '/*slug' => 'resources#show', as: :show_with_slug
78
81
 
79
82
  root to: 'welcome#index'
data/db/migrate/.keep ADDED
File without changes