lcms-engine 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (327) 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 +36 -2
  13. data/Dockerfile +3 -3
  14. data/Gemfile.lock +344 -297
  15. data/README.md +20 -18
  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 +1 -0
  238. data/lcms-engine.gemspec +21 -15
  239. data/lib/doc_template/document.rb +3 -4
  240. data/lib/doc_template/document_toc.rb +2 -2
  241. data/lib/doc_template/objects/activity_metadata.rb +1 -1
  242. data/lib/doc_template/objects/toc_helpers.rb +4 -4
  243. data/lib/doc_template/objects/toc_metadata.rb +4 -6
  244. data/lib/doc_template/tags/answer_space_tag.rb +1 -1
  245. data/lib/doc_template/tags/base_tag.rb +2 -2
  246. data/lib/doc_template/tags/block_tag.rb +1 -1
  247. data/lib/doc_template/tags/table_tag.rb +1 -1
  248. data/lib/doc_template/template.rb +1 -1
  249. data/lib/doc_template.rb +9 -9
  250. data/lib/document_exporter/gdoc/base.rb +5 -2
  251. data/lib/document_exporter/pdf/base.rb +1 -1
  252. data/lib/document_exporter/pdf/document.rb +2 -2
  253. data/lib/document_exporter/pdf/material.rb +2 -2
  254. data/lib/document_exporter/pdf/student_material.rb +2 -2
  255. data/lib/document_exporter/pdf/teacher_material.rb +2 -2
  256. data/lib/document_renderer/part.rb +1 -3
  257. data/lib/lcms/engine/engine.rb +10 -9
  258. data/lib/lcms/engine/version.rb +1 -1
  259. data/lib/lcms/engine.rb +0 -1
  260. data/lib/lt/lcms/metadata/context.rb +56 -52
  261. data/lib/lt/lcms/metadata/service.rb +3 -2
  262. data/lib/tasks/cloud66.rake +2 -2
  263. data/lib/tasks/document.rake +4 -4
  264. data/lib/tasks/google.rake +29 -14
  265. data/lib/tasks/lcms/engine_tasks.rake +1 -1
  266. data/package.json +31 -10
  267. data/postcss.config.js +12 -0
  268. data/spec/controllers/admin/curriculums_controller_spec.rb +23 -0
  269. data/spec/controllers/admin/documents_controller_spec.rb +22 -2
  270. data/spec/controllers/admin/materials_controller_spec.rb +16 -3
  271. data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +1 -1
  272. data/spec/controllers/admin/resources_controller_spec.rb +1 -1
  273. data/spec/controllers/admin/settings_controller_spec.rb +1 -1
  274. data/spec/controllers/admin/standards_controller_spec.rb +1 -1
  275. data/spec/controllers/admin/welcome_controller_spec.rb +12 -10
  276. data/spec/controllers/resources_controller_spec.rb +3 -3
  277. data/spec/controllers/welcome_controller_spec.rb +38 -0
  278. data/spec/dummy/.traceroute.yaml +0 -2
  279. data/spec/dummy/bin/webpack +18 -0
  280. data/spec/dummy/bin/webpack-dev-server +18 -0
  281. data/spec/dummy/config/application.rb +1 -1
  282. data/spec/dummy/config/environments/test.rb +1 -1
  283. data/spec/dummy/config/initializers/assets.rb +6 -0
  284. data/spec/dummy/config/lcms-admin.yml +3 -7
  285. data/spec/dummy/config/routes.rb +6 -0
  286. data/spec/dummy/db/schema.rb +5 -5
  287. data/spec/factories/documents.rb +1 -0
  288. data/spec/factories/downloads.rb +1 -1
  289. data/spec/factories/resources.rb +2 -2
  290. data/spec/features/admin/materials/add_material_spec.rb +2 -0
  291. data/spec/features/admin/users_spec.rb +2 -2
  292. data/spec/{controllers/admin/admin_controller_spec.rb → helpers/path_helper_spec.rb} +6 -6
  293. data/spec/lib/doc_template/objects/activity_metadata_spec.rb +1 -1
  294. data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +2 -0
  295. data/spec/lib/doc_template/objects/toc_metadata_spec.rb +1 -1
  296. data/spec/lib/doc_template/tags/page_break_tag_spec.rb +1 -1
  297. data/spec/lib/doc_template/tags/pd_tag_spec.rb +1 -1
  298. data/spec/models/document_spec.rb +1 -1
  299. data/spec/models/standard_spec.rb +2 -0
  300. data/spec/queries/lcms/engine/admin_materials_query_spec.rb +34 -0
  301. data/spec/rails_helper.rb +6 -17
  302. data/spec/services/document_build_service_spec.rb +4 -11
  303. data/spec/services/s3_service_spec.rb +31 -0
  304. data/spec/support/concerns/navigable.rb +2 -0
  305. data/spec/support/routes.rb +4 -0
  306. data/spec/support/shared_examples/content_tag.rb +4 -4
  307. data/templates/routes.rb +0 -1
  308. data/yarn.lock +3412 -2933
  309. metadata +146 -288
  310. data/app/assets/stylesheets/lcms/engine/application.scss +0 -36
  311. data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +0 -1
  312. data/app/exceptions/components_api_error.rb +0 -4
  313. data/app/exceptions/document_error.rb +0 -4
  314. data/app/exceptions/material_error.rb +0 -4
  315. data/app/javascript/packs/admin.js +0 -14
  316. data/app/models/lcms/engine/component.rb +0 -88
  317. data/app/presenters/lcms/engine/social_media_presenter.rb +0 -83
  318. data/app/views/lcms/engine/shared/_social_sharing.html.erb +0 -22
  319. data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +0 -36
  320. data/db/migrate/20200218144849_drop_material_parts_table.rb +0 -7
  321. data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +0 -7
  322. data/db/migrate/20200429130353_drop_pages.rb +0 -13
  323. data/db/seeds/pages.seeds.rb +0 -26
  324. data/lib/document_exporter.rb +0 -6
  325. data/lib/lcms/engine/migration.rb +0 -16
  326. data/spec/models/component_spec.rb +0 -60
  327. data/vendor/assets/javascripts/jquery.tagsinput.js +0 -1
@@ -1,6 +1,6 @@
1
1
  .o-ld-section {
2
2
  @include e(quote) {
3
- @include txt-pdf-element(pullquote);
4
3
  @extend %u-pdf-nobreak;
4
+ @include txt-pdf-element(pullquote);
5
5
  }
6
6
  }
@@ -1,6 +1,5 @@
1
1
  .o-m-header {
2
2
  border-bottom: 1px solid $ub-pdf-black;
3
- td { padding: 0 0 5px; }
4
3
 
5
4
  @include e(title) {
6
5
  width: 10%;
@@ -11,4 +10,8 @@
11
10
  @include e(name-date) {
12
11
  width: 30%;
13
12
  }
13
+
14
+ td {
15
+ padding: 0 0 5px;
16
+ }
14
17
  }
@@ -11,7 +11,7 @@ $ub-material-card-margin: 2px;
11
11
  @if $depth < 1 {
12
12
  box-shadow: none;
13
13
  } @else if $depth > 5 {
14
- @warn "Invalid $depth `#{$depth}` for mixin `card`.";
14
+ @warn 'Invalid $depth `#{$depth}` for mixin `card`.';
15
15
  } @else {
16
16
  box-shadow: bottom-shadow($depth), top-shadow($depth);
17
17
  }
@@ -22,7 +22,7 @@ $ub-material-card-margin: 2px;
22
22
  @function top-shadow($depth) {
23
23
  $primary-offset: nth(1.5 3 10 14 19, $depth) * 1px;
24
24
  $blur: nth(1.5 3 10 14 19, $depth) * 4px;
25
- $color: rgba(#000, nth(.12 .16 .19 .25 3, $depth));
25
+ $color: rgba(#000, nth(0.12 0.16 0.19 0.25 3, $depth));
26
26
 
27
27
  @return 0 $primary-offset $blur $color;
28
28
  }
@@ -33,7 +33,7 @@ $ub-material-card-margin: 2px;
33
33
  @function bottom-shadow($depth) {
34
34
  $primary-offset: nth(1.5 3 6 10 15, $depth) * 1px;
35
35
  $blur: nth(1 3 3 5 6, $depth) * 4px;
36
- $color: rgba(#000, nth(.24 .23 .23 .22 .22, $depth));
36
+ $color: rgba(#000, nth(0.24 0.23 0.23 0.22 0.22, $depth));
37
37
 
38
38
  @return 0 $primary-offset $blur $color;
39
39
  }
@@ -41,37 +41,37 @@ $ub-material-card-margin: 2px;
41
41
  %material-card {
42
42
  //box-shadow: 0 $ub-material-card-margin $ub-material-card-margin rgba(0, 0, 0, .12);
43
43
  border-radius: $ub-material-radius;
44
- box-shadow: 1px 2px 8px rgba(0, 0, 0, .08);
44
+ box-shadow: 1px 2px 8px rgba(0, 0, 0, 0.08);
45
45
  margin-bottom: $ub-material-card-margin;
46
46
  }
47
47
 
48
48
  %map-transition {
49
- transition-duration: .4s;
49
+ transition-duration: 0.4s;
50
50
  transition-property: width, height, min-height, padding;
51
51
  transition-timing-function: ease;
52
52
  }
53
53
 
54
54
  %btn-transition {
55
- transition-duration: .4s;
55
+ transition-duration: 0.4s;
56
56
  transition-property: min-width;
57
57
  transition-timing-function: ease-out;
58
58
  }
59
59
 
60
60
  %btn-shadow {
61
61
  //@include card(1);
62
- box-shadow: 0 1px 1px rgba(0, 0, 0, .08);
62
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.08);
63
63
  }
64
64
 
65
65
  %tooltip-shadow {
66
- box-shadow: 0 1px 1px rgba(0, 0, 0, .08);
66
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.08);
67
67
  }
68
68
 
69
69
  @mixin base-shadow {
70
- box-shadow: 1px 2px 8px rgba(0, 0, 0, .08);
70
+ box-shadow: 1px 2px 8px rgba(0, 0, 0, 0.08);
71
71
  }
72
72
 
73
73
  %popup-shadow {
74
- box-shadow: 1px 2px 8px rgba(0, 0, 0, .35);
74
+ box-shadow: 1px 2px 8px rgba(0, 0, 0, 0.35);
75
75
  }
76
76
 
77
77
  %base-shadow {
@@ -80,7 +80,7 @@ $ub-material-card-margin: 2px;
80
80
 
81
81
  // fadeIn transition
82
82
  .m-fadeIn-enter {
83
- opacity: .01;
83
+ opacity: 0.01;
84
84
  }
85
85
 
86
86
  .m-fadeIn-enter.m-fadeIn-enter-active {
@@ -15,7 +15,7 @@
15
15
  .cs-rgba-bg {
16
16
  @each $code, $color in $ub-colorcodes {
17
17
  @include m(#{$code}) {
18
- background-color: rgba($color, .8);
18
+ background-color: rgba($color, 0.8);
19
19
  }
20
20
  }
21
21
  }
@@ -25,7 +25,10 @@
25
25
  @include m(#{$code}) {
26
26
  $tint-color: scale-color($color, $lightness: 90%);
27
27
  background-color: $tint-color;
28
- &:before { border-bottom-color: $tint-color; }
28
+
29
+ &::before {
30
+ border-bottom-color: $tint-color;
31
+ }
29
32
  }
30
33
  }
31
34
  }
@@ -41,7 +44,9 @@
41
44
  .cs-txt-link {
42
45
  @each $code, $color in $ub-colorcodes {
43
46
  @include m(#{$code}) {
44
- &, &:hover, &:focus {
47
+ &,
48
+ &:hover,
49
+ &:focus {
45
50
  color: $color;
46
51
  }
47
52
  }
@@ -51,10 +56,15 @@
51
56
  .cs-link-bg {
52
57
  @each $code, $color in $ub-colorcodes {
53
58
  @include m(#{$code}) {
54
- &, &:hover, &:focus {
59
+ &,
60
+ &:hover,
61
+ &:focus {
55
62
  background: none;
56
63
  color: $ub-white;
57
- > div { background-color: $color; }
64
+
65
+ > div {
66
+ background-color: $color;
67
+ }
58
68
  }
59
69
  }
60
70
  }
@@ -1,5 +1,5 @@
1
1
  @function computed-height($typo, $lines) {
2
2
  $font-size: map-get($typo, font-size);
3
3
  $line-height: map-get($typo, line-height);
4
- @return $font-size * ( $line-height / $font-size ) * $lines;
4
+ @return $font-size * ($line-height / $font-size) * $lines;
5
5
  }
@@ -1,7 +1,8 @@
1
+ // stylelint-disable declaration-no-important
1
2
  $text-sizes: (
2
3
  'base': $global-font-size,
3
4
  'large': $lead-font-size,
4
- 'small': $small-font-size
5
+ 'small': $small-font-size,
5
6
  );
6
7
 
7
8
  .u-text {
@@ -12,7 +13,9 @@ $text-sizes: (
12
13
  }
13
14
  }
14
15
 
15
- .u-color--base { color: $ub-txt !important; }
16
+ .u-color--base {
17
+ color: $ub-txt !important;
18
+ }
16
19
 
17
20
  .u-text--capitalized {
18
21
  text-transform: capitalize;
@@ -42,13 +45,21 @@ $text-sizes: (
42
45
  font-weight: bold !important;
43
46
  }
44
47
 
45
- .u-flex { display: flex; }
48
+ .u-flex {
49
+ display: flex;
50
+ }
46
51
 
47
- .u-show { display: block !important; }
52
+ .u-show {
53
+ display: block !important;
54
+ }
48
55
 
49
- .u-hidden { display: none !important; }
56
+ .u-hidden {
57
+ display: none !important;
58
+ }
50
59
 
51
- .u-float-none { float: none !important;}
60
+ .u-float-none {
61
+ float: none !important;
62
+ }
52
63
 
53
64
  $border-radius-aligns: (top-left, bottom-left, top-right, bottom-right);
54
65
  @each $border-radius-align in $border-radius-aligns {
@@ -70,7 +81,7 @@ $border-radius-sides: (top, bottom);
70
81
 
71
82
  $margins: (
72
83
  'zero': 0,
73
- 'xs': $ub-small-margin * .7,
84
+ 'xs': $ub-small-margin * 0.7,
74
85
  'small': $ub-small-margin,
75
86
  'base': $ub-base-margin,
76
87
  'large': $ub-large-margin,
@@ -100,7 +111,7 @@ $margins-align: (top, bottom, right, left);
100
111
  $paddings: (
101
112
  'zero': 0,
102
113
  'tiny': 5px,
103
- 'xs': $ub-small-margin * .7,
114
+ 'xs': $ub-small-margin * 0.7,
104
115
  'small': $ub-small-margin,
105
116
  'base': $ub-base-margin,
106
117
  'large': $ub-large-margin,
@@ -127,7 +138,7 @@ $align-types: (padding, margin);
127
138
  @each $align-dir in $align-directions {
128
139
  @each $align-type in $align-types {
129
140
  .u-#{$align-type}-#{$align-dir}--gutter-half {
130
- @include add-gutter($type: #{$align-type}, $subtype: #{$align-dir}, $x: .5);
141
+ @include add-gutter($type: #{$align-type}, $subtype: #{$align-dir}, $x: 0.5);
131
142
  }
132
143
 
133
144
  .u-#{$align-type}-#{$align-dir}--gutter {
@@ -162,7 +173,7 @@ $bg: (
162
173
  .u-wrap {
163
174
  @each $bg-type, $bg-color in $bg {
164
175
  @include m($bg-type) {
165
- @extend .u-bg--#{$bg-type};
176
+ @extend .u-bg--#{$bg-type}; // stylelint-disable-line scss/at-extend-no-missing-placeholder
166
177
  padding: $ub-base-padding;
167
178
  }
168
179
  }
@@ -177,7 +188,8 @@ $bg: (
177
188
  }
178
189
 
179
190
  .u-link--disabled {
180
- &, a {
191
+ &,
192
+ a {
181
193
  color: $medium-gray;
182
194
  cursor: not-allowed;
183
195
  }
@@ -1,4 +1,4 @@
1
- %u-ph-img--light{
1
+ %u-ph-img--light {
2
2
  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxNDBweCIgaGVpZ2h0PSIxNDBweCIgdmlld0JveD0iMCAwIDE0MCAxNDAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPgo8Zz4KCTxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Y1ZjVmNSIgc3Ryb2tlLXdpZHRoPSIuNSIgeDE9IjAiIHkxPSIxNDAiIHgyPSIxNDAiIHkyPSIwIi8+CiAgPGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZjVmNWY1IiBzdHJva2Utd2lkdGg9Ii41IiB4MT0iMCIgeTE9IjAiIHgyPSIxNDAiIHkyPSIxNDAiLz4KPC9nPgo8L3N2Zz4K');
3
3
  background-repeat: no-repeat;
4
4
  background-size: 100% 100%;
@@ -15,18 +15,18 @@ $ub-base-padding: 1rem;
15
15
  $ub-large-margin: $ub-base-margin * 1.5;
16
16
  $ub-xlarge-margin: $ub-base-margin * 2;
17
17
  $ub-xxlarge-margin: $ub-base-margin * 3;
18
- $ub-small-margin: $ub-base-margin * .75;
19
- $ub-tiny-margin: 1rem * .06;
18
+ $ub-small-margin: $ub-base-margin * 0.75;
19
+ $ub-tiny-margin: 1rem * 0.06;
20
20
  $ub-large-padding: $ub-base-padding * 1.5;
21
21
  $ub-xlarge-padding: $ub-base-padding * 2;
22
- $ub-small-padding: $ub-base-padding * .75;
23
- $ub-xs-padding: $ub-small-padding * .7;
24
- $ub-tiny-padding: $ub-base-padding * .06;
22
+ $ub-small-padding: $ub-base-padding * 0.75;
23
+ $ub-xs-padding: $ub-small-padding * 0.7;
24
+ $ub-tiny-padding: $ub-base-padding * 0.06;
25
25
 
26
26
  // Base element sizes
27
27
  $curriculum-map-width: (
28
28
  base: 230px,
29
- medium: 180px
29
+ medium: 180px,
30
30
  );
31
31
  $curriculum-card-short-top: -6px;
32
32
 
@@ -37,24 +37,24 @@ $filterbar-xs-3: (($filterbar-square + 1) * 5 - 1) / 3;
37
37
  $filterbar-rectangle-2: (
38
38
  small: $filterbar-xs,
39
39
  ipad: 218px,
40
- large: 115px
40
+ large: 115px,
41
41
  );
42
42
  $filterbar-rectangle-3: (
43
43
  small: $filterbar-xs-3 - 1px,
44
44
  ipad: 108px,
45
- large: 75px
45
+ large: 75px,
46
46
  );
47
47
  $filterbar-rectangle-big: (
48
48
  small: $filterbar-xs - 1px,
49
- ipad: 157px
49
+ ipad: 157px,
50
50
  );
51
51
  $ld-sticky-header-height: (
52
52
  small: 75px,
53
- large: $ub-nav-height
53
+ large: $ub-nav-height,
54
54
  );
55
55
  $ld-sticky-header-padding: (
56
56
  small: 1rem,
57
- large: .5rem
57
+ large: 0.5rem,
58
58
  );
59
59
  $ld-tooltip-offset: 1.5rem;
60
60
 
@@ -0,0 +1,48 @@
1
+ .react-tagsinput {
2
+ background-color: #fff;
3
+ border: 1px solid #ccc;
4
+ overflow: hidden;
5
+ padding-left: 5px;
6
+ padding-top: 5px;
7
+ }
8
+
9
+ .react-tagsinput--focused {
10
+ border-color: #a5d24a;
11
+ }
12
+
13
+ .react-tagsinput-tag {
14
+ background-color: #cde69c;
15
+ border-radius: 2px;
16
+ border: 1px solid #a5d24a;
17
+ color: #638421;
18
+ display: inline-block;
19
+ font-family: sans-serif;
20
+ font-size: 13px;
21
+ font-weight: 400;
22
+ margin-bottom: 5px;
23
+ margin-right: 5px;
24
+ padding: 5px;
25
+ }
26
+
27
+ .react-tagsinput-remove {
28
+ cursor: pointer;
29
+ font-weight: bold;
30
+ }
31
+
32
+ .react-tagsinput-tag a::before {
33
+ content: " ×";
34
+ }
35
+
36
+ .react-tagsinput-input {
37
+ background: transparent;
38
+ border: 0;
39
+ color: #777;
40
+ font-family: sans-serif;
41
+ font-size: 13px;
42
+ font-weight: 400;
43
+ margin-bottom: 6px;
44
+ margin-top: 1px;
45
+ outline: none;
46
+ padding: 5px;
47
+ width: 80px;
48
+ }
@@ -5,7 +5,7 @@ module Lcms
5
5
  module Reimportable
6
6
  private
7
7
 
8
- def create_from_folder
8
+ def create_multiple
9
9
  # Import all from a folder
10
10
  file_ids = gdoc_files_from form_params[:link]
11
11
  return bulk_import(file_ids) && render(:import) if file_ids.any?
@@ -9,7 +9,7 @@ module Lcms
9
9
  def create
10
10
  @access_code = AccessCode.new(permitted_params)
11
11
  if @access_code.save
12
- redirect_to({ action: :index }, notice: t('.success'))
12
+ redirect_to lcms_engine.admin_access_codes_path, notice: t('.success')
13
13
  else
14
14
  render :new
15
15
  end
@@ -17,7 +17,11 @@ module Lcms
17
17
 
18
18
  def destroy
19
19
  @access_code.destroy
20
- redirect_to({ action: :index }, notice: t('.success'))
20
+ redirect_to lcms_engine.admin_access_codes_path, notice: t('.success')
21
+ end
22
+
23
+ def edit
24
+ @url = lcms_engine.admin_access_code_path(@access_code)
21
25
  end
22
26
 
23
27
  def index
@@ -30,8 +34,9 @@ module Lcms
30
34
 
31
35
  def update
32
36
  if @access_code.update(permitted_params)
33
- redirect_to({ action: :index }, notice: t('.success'))
37
+ redirect_to lcms_engine.admin_access_codes_path, notice: t('.success')
34
38
  else
39
+ @url = lcms_engine.admin_access_code_path(@access_code)
35
40
  render :edit
36
41
  end
37
42
  end
@@ -4,6 +4,8 @@ module Lcms
4
4
  module Engine
5
5
  module Admin
6
6
  class AdminController < Lcms::Engine::ApplicationController
7
+ include Lcms::Engine::PathHelper
8
+
7
9
  CONFIG_PATH ||= Rails.root.join('config', 'lcms-admin.yml')
8
10
 
9
11
  DEFAULTS ||= {
@@ -17,50 +19,14 @@ module Lcms
17
19
 
18
20
  before_action :authenticate_admin!
19
21
 
20
- class << self
21
- def settings
22
- @settings ||= DEFAULTS.merge((YAML.load_file(CONFIG_PATH) || {}).deep_symbolize_keys)
23
- end
24
-
25
- def engine_klass
26
- @engine_klass ||= settings[:engine]&.constantize || ::Lcms::Engine::Engine
27
- end
28
-
29
- def document_path(*args)
30
- host_engine_path(:document_path, *args).presence || url_helpers.document_path(*args)
31
- end
32
-
33
- def material_path(*args)
34
- host_engine_path(:material_path, *args).presence || url_helpers.material_path(*args)
35
- end
36
-
37
- def root_path
38
- host_engine_path(:root_path).presence || url_helpers.root_path
39
- end
40
-
41
- def host_engine_path(key, *args)
42
- if (host_route = settings.dig(:redirect, :host, key)).present?
43
- Rails.application.routes.url_helpers.send(host_route, *args)
44
- elsif (engine_route = settings.dig(:redirect, :engine, key)).present?
45
- engine_klass.routes.url_helpers.send(engine_route, *args)
46
- end
47
- end
48
-
49
- private
50
-
51
- def url_helpers
52
- Rails.application.routes.url_helpers
53
- end
54
- end
55
-
56
- def whoami
57
- render text: "stack=#{ENV['CLOUD66_STACK_NAME']}<br/>env=#{ENV['CLOUD66_STACK_ENVIRONMENT']}"
22
+ def self.settings
23
+ @settings ||= DEFAULTS.merge((YAML.load_file(CONFIG_PATH) || {}).deep_symbolize_keys)
58
24
  end
59
25
 
60
26
  private
61
27
 
62
28
  def authenticate_admin!
63
- redirect_to self.class.root_path, alert: 'Access denied' unless current_user&.admin?
29
+ redirect_to dynamic_path(:root_path), alert: 'Access denied' unless current_user&.admin?
64
30
  end
65
31
 
66
32
  def customized_layout
@@ -29,7 +29,10 @@ module Lcms
29
29
  def index_params
30
30
  @index_params ||=
31
31
  begin
32
- expected_params = params.permit(:association, :q).to_h.symbolize_keys
32
+ expected_params = params
33
+ .permit(:association, :page, :pagination, :allowCreate, :allowMultiple,
34
+ :onClickDone, :onSelectItem, :q)
35
+ .to_h.symbolize_keys
33
36
  index_p = { q: nil }.merge(expected_params)
34
37
 
35
38
  raise StandardError unless VALID_ASSOCIATIONS.include?(index_p[:association])
@@ -5,11 +5,11 @@ module Lcms
5
5
  module Admin
6
6
  class BatchReimportsController < AdminController
7
7
  def new
8
- @query = OpenStruct.new(params[:query])
8
+ @query = OpenStruct.new(params[:query]) # rubocop:disable Style/OpenStructUse
9
9
  end
10
10
 
11
11
  def create
12
- @query = OpenStruct.new params[:query].except(:type)
12
+ @query = OpenStruct.new params[:query].except(:type) # rubocop:disable Style/OpenStructUse
13
13
  entries = if materials?
14
14
  DocTemplate.config['queries']['material'].constantize.call(@query)
15
15
  else
@@ -8,15 +8,34 @@ module Lcms
8
8
  @curriculum = CurriculumPresenter.new
9
9
  end
10
10
 
11
+ def children
12
+ id = params[:id]
13
+ resources =
14
+ if id == '#'
15
+ Lcms::Engine::Resource.tree.ordered.roots
16
+ else
17
+ Array.wrap(Lcms::Engine::Resource.tree.find(id)&.children)
18
+ end
19
+
20
+ render json: resources.map { |res| CurriculumPresenter.new.parse_jstree_node(res) }
21
+ end
22
+
11
23
  def update
12
- @form = CurriculumForm.new(params[:curriculum])
24
+ @form = CurriculumForm.new(curriculum_update_params)
13
25
  if @form.save
14
- redirect_to admin_path, notice: t('.success')
26
+ redirect_to lcms_engine.edit_admin_curriculum_path,
27
+ notice: t('.success')
15
28
  else
16
29
  @curriculum = CurriculumPresenter.new
17
30
  render :edit, alert: t('.error')
18
31
  end
19
32
  end
33
+
34
+ private
35
+
36
+ def curriculum_update_params
37
+ params.require(:curriculum).permit(:change_log)
38
+ end
20
39
  end
21
40
  end
22
41
  end
@@ -1,44 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'lt/lcms/lesson/downloader/gdoc'
4
-
5
3
  module Lcms
6
4
  module Engine
7
5
  module Admin
8
6
  class DocumentsController < AdminController
9
7
  include Lcms::Engine::GoogleCredentials
8
+ include Lcms::Engine::PathHelper
10
9
  include Reimportable
11
10
 
12
11
  before_action :find_selected, only: %i(destroy_selected reimport_selected)
13
12
  before_action :set_query_params
14
13
 
15
14
  def index
16
- @query = OpenStruct.new @query_params
15
+ @query = OpenStruct.new @query_params # rubocop:disable Style/OpenStructUse
17
16
  @documents = DocTemplate.config['queries']['document'].constantize.call(@query, page: params[:page])
18
17
  render_customized_view
19
18
  end
20
19
 
21
20
  def create
22
- return create_from_folder if form_params[:link].match?(RE_GOOGLE_FOLDER)
21
+ @document = DocumentForm.new(form_params.except(:async, :with_materials))
23
22
 
24
- @document = reimport_lesson
25
- if @document.save
26
- redirect_to AdminController.document_path(@document.document),
27
- notice: t('.success', name: @document.document.name, errors: collect_errors)
28
- else
29
- render :new
30
- end
23
+ return create_multiple if form_params[:link].match?(RE_GOOGLE_FOLDER)
24
+
25
+ form_params[:async].to_i.zero? ? create_sync : create_async
31
26
  end
32
27
 
33
28
  def destroy
34
29
  @document = Document.find(params[:id])
35
30
  @document.destroy
36
- redirect_to admin_documents_path(query: @query_params), notice: t('.success')
31
+ redirect_to lcms_engine.admin_documents_path(query: @query_params), notice: t('.success')
37
32
  end
38
33
 
39
34
  def destroy_selected
40
35
  count = @documents.destroy_all.count
41
- redirect_to admin_documents_path(query: @query_params), notice: t('.success', count: count)
36
+ redirect_to lcms_engine.admin_documents_path(query: @query_params), notice: t('.success', count: count)
42
37
  end
43
38
 
44
39
  def import_status
@@ -57,6 +52,23 @@ module Lcms
57
52
 
58
53
  private
59
54
 
55
+ def create_async
56
+ bulk_import(Array.wrap(form_params[:link]))
57
+ render :import
58
+ end
59
+
60
+ def create_sync
61
+ reimport_lesson_materials if form_params[:with_materials].present?
62
+ if @document.save
63
+ notice = t('lcms.engine.admin.documents.create.success',
64
+ name: @document.document.name,
65
+ errors: collect_errors)
66
+ redirect_to dynamic_document_path(@document.document), notice: notice
67
+ else
68
+ render :new
69
+ end
70
+ end
71
+
60
72
  def bulk_import(docs)
61
73
  reimport_materials = params[:with_materials].to_i.nonzero?
62
74
  jobs = docs.each_with_object({}) do |doc, jobs_|
@@ -91,7 +103,7 @@ module Lcms
91
103
  def form_params
92
104
  @form_params ||=
93
105
  begin
94
- data = params.require(:document_form).permit(:link, :link_fs, :reimport, :with_materials).to_h
106
+ data = params.require(:document_form).permit(:async, :link, :link_fs, :reimport, :with_materials).to_h
95
107
  data.delete(:with_materials) if data[:with_materials].to_i.zero?
96
108
  data
97
109
  end