lcms-engine 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. checksums.yaml +4 -4
  2. data/{spec/dummy/.env.docker → .env.docker} +0 -0
  3. data/.env.template +34 -0
  4. data/.gitignore +0 -1
  5. data/CHANGELOG.md +25 -0
  6. data/Dockerfile +1 -0
  7. data/Gemfile +0 -1
  8. data/Gemfile.lock +682 -0
  9. data/README.md +5 -11
  10. data/app/assets/javascripts/lcms/engine/admin/application.js +2 -11
  11. data/app/assets/javascripts/lcms/engine/application.js +1 -44
  12. data/app/assets/javascripts/lcms/engine/application_lti.js +1 -29
  13. data/app/assets/javascripts/lcms/engine/initializers/foundation.js +5 -0
  14. data/app/assets/stylesheets/lcms/engine/admin.scss +0 -1
  15. data/app/assets/stylesheets/lcms/engine/application.scss +6 -61
  16. data/app/assets/stylesheets/lcms/engine/base/_colors.scss +2 -2
  17. data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +0 -25
  18. data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +2 -0
  19. data/app/assets/stylesheets/lcms/engine/layout/_header.scss +1 -210
  20. data/app/assets/stylesheets/lcms/engine/pdf.scss +3 -27
  21. data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +3 -11
  22. data/app/assets/stylesheets/lcms/engine/print/_typography.scss +0 -5
  23. data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +4 -4
  24. data/app/controllers/concerns/lcms/engine/reimportable.rb +9 -0
  25. data/app/controllers/lcms/engine/admin/admin_controller.rb +2 -0
  26. data/app/controllers/lcms/engine/admin/documents_controller.rb +7 -17
  27. data/app/controllers/lcms/engine/admin/materials_controller.rb +16 -19
  28. data/app/controllers/lcms/engine/admin/resources_controller.rb +77 -41
  29. data/app/controllers/lcms/engine/surveys_controller.rb +3 -14
  30. data/app/forms/lcms/engine/material_form.rb +1 -0
  31. data/app/helpers/lcms/engine/application_helper.rb +6 -2
  32. data/app/helpers/lcms/engine/resource_helper.rb +0 -17
  33. data/app/presenters/lcms/engine/content_presenter.rb +1 -1
  34. data/app/presenters/lcms/engine/document_presenter.rb +3 -5
  35. data/app/views/devise/confirmations/new.html.erb +1 -1
  36. data/app/views/devise/passwords/edit.html.erb +1 -1
  37. data/app/views/devise/passwords/new.html.erb +1 -1
  38. data/app/views/devise/registrations/new.html.erb +1 -1
  39. data/app/views/devise/sessions/new.html.erb +2 -2
  40. data/app/views/layouts/lcms/engine/admin.html.erb +1 -3
  41. data/app/views/layouts/lcms/engine/application.html.erb +0 -6
  42. data/app/views/layouts/lcms/engine/cg_pdf.erb +0 -38
  43. data/app/views/layouts/lcms/engine/lti.html.erb +0 -1
  44. data/app/views/lcms/engine/admin/curriculums/edit.html.erb +3 -0
  45. data/app/views/lcms/engine/admin/materials/index.html.erb +1 -1
  46. data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +3 -3
  47. data/app/views/lcms/engine/admin/shared/_header.html.erb +1 -8
  48. data/app/views/lcms/engine/documents/_content.html.erb +0 -1
  49. data/app/views/lcms/engine/documents/_sticky_header.html.erb +1 -1
  50. data/app/views/lcms/engine/documents/_sticky_site_menu.html.erb +0 -1
  51. data/app/views/lcms/engine/resources/_download.html.erb +2 -2
  52. data/app/views/lcms/engine/resources/_unit_bundles.html.erb +2 -2
  53. data/app/views/lcms/engine/resources/show.html.erb +2 -2
  54. data/app/views/lcms/engine/shared/_footer.html.erb +1 -3
  55. data/app/views/lcms/engine/shared/_header.html.erb +2 -36
  56. data/app/views/lcms/engine/surveys/show.html.erb +1 -1
  57. data/app/views/lcms/engine/welcome/index.html.erb +1 -80
  58. data/config/locales/admin/en.yml +1 -0
  59. data/config/routes.rb +2 -36
  60. data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +1 -1
  61. data/db/migrate/20200429130353_drop_pages.rb +13 -0
  62. data/docs/env-variables.md +87 -0
  63. data/docs/google-cloud-platform-setup.md +106 -0
  64. data/lcms-engine.gemspec +50 -59
  65. data/lib/doc_template/document.rb +2 -2
  66. data/lib/doc_template/tables/activity.rb +1 -2
  67. data/lib/doc_template/tables/base.rb +4 -0
  68. data/lib/doc_template/tables/section.rb +1 -2
  69. data/lib/doc_template/xpath_functions.rb +3 -1
  70. data/lib/lcms/engine/engine.rb +0 -8
  71. data/lib/lcms/engine/version.rb +1 -1
  72. data/lib/lt/lcms/metadata/context.rb +5 -7
  73. data/spec/controllers/admin/admin_controller_spec.rb +1 -1
  74. data/spec/controllers/admin/documents_controller_spec.rb +38 -6
  75. data/spec/controllers/admin/materials_controller_spec.rb +64 -0
  76. data/spec/controllers/admin/resources_controller_spec.rb +72 -0
  77. data/spec/dummy/config/lcms-admin.yml +3 -3
  78. data/spec/dummy/db/schema.rb +29 -37
  79. data/spec/features/welcome_spec.rb +1 -1
  80. data/spec/fixtures/tables/activity-metadata-3activities.html +1 -0
  81. data/spec/fixtures/tables/document-metadata-2paragpraphs.html +97 -0
  82. data/spec/fixtures/tables/document-metadata-2spans.html +96 -0
  83. data/spec/fixtures/tables/document-metadata.html +96 -0
  84. data/spec/lib/doc_template/tables/activity_spec.rb +28 -0
  85. data/spec/lib/doc_template/tables/metadata_spec.rb +40 -0
  86. data/spec/lib/doc_template/tables/shared_examples/remove_table.rb +11 -0
  87. data/spec/rails_helper.rb +1 -0
  88. data/spec/support/fixture_helper.rb +16 -0
  89. data/vendor/assets/javascripts/selectize.min.js +4 -0
  90. data/vendor/assets/stylesheets/selectize.scss +333 -0
  91. data/yarn.lock +634 -452
  92. metadata +274 -494
  93. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.eot +0 -0
  94. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.svg +0 -689
  95. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.ttf +0 -0
  96. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.woff +0 -0
  97. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.eot +0 -0
  98. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.svg +0 -697
  99. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.ttf +0 -0
  100. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.woff +0 -0
  101. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.eot +0 -0
  102. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.svg +0 -768
  103. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.ttf +0 -0
  104. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.woff +0 -0
  105. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.eot +0 -0
  106. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.svg +0 -685
  107. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.ttf +0 -0
  108. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.woff +0 -0
  109. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.eot +0 -0
  110. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.svg +0 -5603
  111. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.woff +0 -0
  112. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.eot +0 -0
  113. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.svg +0 -5763
  114. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.woff +0 -0
  115. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.eot +0 -0
  116. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.otf +0 -0
  117. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.svg +0 -5400
  118. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.woff +0 -0
  119. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.eot +0 -0
  120. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.html +0 -15
  121. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.otf +0 -0
  122. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.svg +0 -13061
  123. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.woff +0 -0
  124. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.eot +0 -0
  125. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.html +0 -15
  126. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.otf +0 -0
  127. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.svg +0 -13075
  128. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.woff +0 -0
  129. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.eot +0 -0
  130. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.otf +0 -0
  131. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.svg +0 -13142
  132. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.woff +0 -0
  133. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.eot +0 -0
  134. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.ttf +0 -0
  135. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.woff +0 -0
  136. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.woff2 +0 -0
  137. data/app/assets/fonts/lcms/engine/cursive/Sriracha-Regular.ttf +0 -0
  138. data/app/assets/fonts/lcms/engine/icons/ubicons.eot +0 -0
  139. data/app/assets/fonts/lcms/engine/icons/ubicons.svg +0 -50
  140. data/app/assets/fonts/lcms/engine/icons/ubicons.ttf +0 -0
  141. data/app/assets/fonts/lcms/engine/icons/ubicons.woff +0 -0
  142. data/app/assets/fonts/lcms/engine/ub/UBIcons.eot +0 -0
  143. data/app/assets/fonts/lcms/engine/ub/UBIcons.svg +0 -18
  144. data/app/assets/fonts/lcms/engine/ub/UBIcons.ttf +0 -0
  145. data/app/assets/fonts/lcms/engine/ub/UBIcons.woff +0 -0
  146. data/app/assets/images/lcms/engine/lessons/ld_p1.png +0 -0
  147. data/app/assets/images/lcms/engine/lessons/ld_p2.png +0 -0
  148. data/app/assets/images/lcms/engine/lessons/ld_p3.png +0 -0
  149. data/app/assets/images/lcms/engine/lessons/tens.png +0 -0
  150. data/app/assets/images/lcms/engine/lessons/wp.svg +0 -30
  151. data/app/assets/images/lcms/engine/tile-wide.png +0 -0
  152. data/app/assets/images/lcms/engine/tile.png +0 -0
  153. data/app/assets/javascripts/lcms/engine/components.js +0 -7
  154. data/app/assets/javascripts/lcms/engine/components/.gitkeep +0 -0
  155. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMap.js.jsx +0 -31
  156. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapLesson.js.jsx +0 -18
  157. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapModule.js.jsx +0 -59
  158. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapUnit.js.jsx +0 -56
  159. data/app/assets/javascripts/lcms/engine/components/curriculum-map/ResourceHover.js.jsx +0 -27
  160. data/app/assets/javascripts/lcms/engine/components/curriculum-map/ResourcePreview.js.jsx +0 -29
  161. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/EnhanceInstructionCards.js.jsx +0 -13
  162. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/EnhanceInstructionPage.js.jsx +0 -139
  163. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/GenericResourceCard.js.jsx +0 -20
  164. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumCardItem.js.jsx +0 -152
  165. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumGradeMap.js.jsx +0 -44
  166. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumHeader.js.jsx +0 -10
  167. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumItem.js.jsx +0 -77
  168. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumModuleMap.js.jsx +0 -59
  169. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumOpr.js.jsx +0 -62
  170. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumPage.js.jsx +0 -258
  171. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumUnitMap.js.jsx +0 -50
  172. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterBarResponsive.js.jsx +0 -62
  173. data/app/assets/javascripts/lcms/engine/components/filterbar/Filterbar.js.jsx +0 -258
  174. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarFacet.js.jsx +0 -12
  175. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarGrade.js.jsx +0 -14
  176. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarSearch.js.jsx +0 -48
  177. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarSubject.js.jsx +0 -12
  178. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsCards.js.jsx +0 -11
  179. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsCardsEmpty.js.jsx +0 -17
  180. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsPage.js.jsx +0 -58
  181. data/app/assets/javascripts/lcms/engine/components/helpers/FreshdeskBtn.js.jsx +0 -9
  182. data/app/assets/javascripts/lcms/engine/components/helpers/MediaTime.js.jsx +0 -6
  183. data/app/assets/javascripts/lcms/engine/components/helpers/SearchResultsHeader.js.jsx +0 -41
  184. data/app/assets/javascripts/lcms/engine/components/helpers/TimeToTeach.js.jsx +0 -29
  185. data/app/assets/javascripts/lcms/engine/components/instruction-card/InstructionCard.js.jsx +0 -57
  186. data/app/assets/javascripts/lcms/engine/components/lesson-card/LessonCard.js.jsx +0 -45
  187. data/app/assets/javascripts/lcms/engine/components/materials/CollapsedMaterial.js.jsx +0 -40
  188. data/app/assets/javascripts/lcms/engine/components/materials/DocumentMaterialsList.js.jsx +0 -33
  189. data/app/assets/javascripts/lcms/engine/components/materials/ExpandedMaterial.js.jsx +0 -37
  190. data/app/assets/javascripts/lcms/engine/components/materials/MaterialsContainer.js.jsx +0 -92
  191. data/app/assets/javascripts/lcms/engine/components/materials/MaterialsList.js.jsx +0 -19
  192. data/app/assets/javascripts/lcms/engine/components/modals/DownloadModal.js.jsx +0 -68
  193. data/app/assets/javascripts/lcms/engine/components/related-instruction/RelatedInstruction.js.jsx +0 -72
  194. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdown.js.jsx +0 -159
  195. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdownResult.js.jsx +0 -12
  196. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdownResults.js.jsx +0 -36
  197. data/app/assets/javascripts/lcms/engine/components/search/SearchPage.js.jsx +0 -44
  198. data/app/assets/javascripts/lcms/engine/components/search/SearchResult.js.jsx +0 -22
  199. data/app/assets/javascripts/lcms/engine/components/search/SearchResults.js.jsx +0 -17
  200. data/app/assets/javascripts/lcms/engine/components/search/SearchResultsEmpty.js.jsx +0 -25
  201. data/app/assets/javascripts/lcms/engine/components/search/searchPageWrapper.js.jsx +0 -77
  202. data/app/assets/javascripts/lcms/engine/components/select-activity/SelectActivityConfirmationModal.js.jsx +0 -107
  203. data/app/assets/javascripts/lcms/engine/components/select-activity/SelectActivityToggle.js.jsx +0 -39
  204. data/app/assets/javascripts/lcms/engine/components/stores/ExcludesStore.js.jsx +0 -11
  205. data/app/assets/javascripts/lcms/engine/components/tabs/SimpleTab.js.jsx +0 -130
  206. data/app/assets/javascripts/lcms/engine/components/utils/UrlHistory.js.jsx +0 -113
  207. data/app/assets/javascripts/lcms/engine/components/utils/colorcodecss.js.jsx +0 -4
  208. data/app/assets/javascripts/lcms/engine/components/utils/converttobem.js.jsx +0 -3
  209. data/app/assets/javascripts/lcms/engine/components/utils/filterbarupdate.js.jsx +0 -5
  210. data/app/assets/javascripts/lcms/engine/components/utils/heaptrackpd.js.jsx +0 -5
  211. data/app/assets/javascripts/lcms/engine/components/utils/regexpescape.js.jsx +0 -5
  212. data/app/assets/javascripts/lcms/engine/components/utils/scalenumber.js.jsx +0 -8
  213. data/app/assets/javascripts/lcms/engine/initializers/about_people.js +0 -8
  214. data/app/assets/javascripts/lcms/engine/initializers/analytics.js +0 -10
  215. data/app/assets/javascripts/lcms/engine/initializers/bundles.js +0 -12
  216. data/app/assets/javascripts/lcms/engine/initializers/events.js +0 -3
  217. data/app/assets/javascripts/lcms/engine/initializers/freshdesk.js +0 -18
  218. data/app/assets/javascripts/lcms/engine/initializers/header_dropdown.js +0 -44
  219. data/app/assets/javascripts/lcms/engine/initializers/heap_analytics.js +0 -78
  220. data/app/assets/javascripts/lcms/engine/initializers/leadership.js +0 -22
  221. data/app/assets/javascripts/lcms/engine/initializers/lessons.js +0 -299
  222. data/app/assets/javascripts/lcms/engine/initializers/loadasync.js +0 -30
  223. data/app/assets/javascripts/lcms/engine/initializers/pdf_preview.js +0 -15
  224. data/app/assets/javascripts/lcms/engine/initializers/resource_details.js +0 -21
  225. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SideBar.js.jsx +0 -86
  226. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarCGMenu.js.jsx +0 -37
  227. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarDocMenu.js.jsx +0 -75
  228. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarMobile.js.jsx +0 -43
  229. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarSticky.js.jsx +0 -43
  230. data/app/assets/javascripts/lcms/engine/initializers/sidebar/TopScroll.js.jsx +0 -21
  231. data/app/assets/javascripts/lcms/engine/initializers/social_sharing.js +0 -29
  232. data/app/assets/javascripts/lcms/engine/initializers/soundcloud.js +0 -52
  233. data/app/assets/javascripts/lcms/engine/initializers/subscribe_placeholder.js +0 -12
  234. data/app/assets/javascripts/lcms/engine/initializers/survey.js +0 -31
  235. data/app/assets/stylesheets/lcms/engine/base/_cg-colors.scss +0 -48
  236. data/app/assets/stylesheets/lcms/engine/base/_fonts.scss +0 -103
  237. data/app/assets/stylesheets/lcms/engine/base/_icons.scss +0 -342
  238. data/app/assets/stylesheets/lcms/engine/components/_buttons.scss +0 -200
  239. data/app/assets/stylesheets/lcms/engine/components/_cards.scss +0 -36
  240. data/app/assets/stylesheets/lcms/engine/components/_cg-base.scss +0 -22
  241. data/app/assets/stylesheets/lcms/engine/components/_curriculum-cards.scss +0 -237
  242. data/app/assets/stylesheets/lcms/engine/components/_curriculum-map.scss +0 -214
  243. data/app/assets/stylesheets/lcms/engine/components/_download-modal.scss +0 -56
  244. data/app/assets/stylesheets/lcms/engine/components/_filterbar-modal.scss +0 -20
  245. data/app/assets/stylesheets/lcms/engine/components/_filterbar.scss +0 -184
  246. data/app/assets/stylesheets/lcms/engine/components/_generic-resource.scss +0 -58
  247. data/app/assets/stylesheets/lcms/engine/components/_inputs.scss +0 -12
  248. data/app/assets/stylesheets/lcms/engine/components/_instruction-cards.scss +0 -160
  249. data/app/assets/stylesheets/lcms/engine/components/_lesson-base.scss +0 -31
  250. data/app/assets/stylesheets/lcms/engine/components/_lesson-cards.scss +0 -119
  251. data/app/assets/stylesheets/lcms/engine/components/_ls-post.scss +0 -38
  252. data/app/assets/stylesheets/lcms/engine/components/_material-base.scss +0 -6
  253. data/app/assets/stylesheets/lcms/engine/components/_media-resources.scss +0 -6
  254. data/app/assets/stylesheets/lcms/engine/components/_media.scss +0 -95
  255. data/app/assets/stylesheets/lcms/engine/components/_pagination.scss +0 -84
  256. data/app/assets/stylesheets/lcms/engine/components/_panel-dsc.scss +0 -37
  257. data/app/assets/stylesheets/lcms/engine/components/_panel.scss +0 -7
  258. data/app/assets/stylesheets/lcms/engine/components/_related-instruction.scss +0 -31
  259. data/app/assets/stylesheets/lcms/engine/components/_resource.scss +0 -217
  260. data/app/assets/stylesheets/lcms/engine/components/_search-dropdown.scss +0 -23
  261. data/app/assets/stylesheets/lcms/engine/components/_search-header.scss +0 -45
  262. data/app/assets/stylesheets/lcms/engine/components/_search.scss +0 -57
  263. data/app/assets/stylesheets/lcms/engine/components/_sidebar.scss +0 -159
  264. data/app/assets/stylesheets/lcms/engine/components/_simple-tab.scss +0 -57
  265. data/app/assets/stylesheets/lcms/engine/components/_social-sharing.scss +0 -20
  266. data/app/assets/stylesheets/lcms/engine/components/_titles.scss +0 -33
  267. data/app/assets/stylesheets/lcms/engine/components/_top-scroll-button.scss +0 -28
  268. data/app/assets/stylesheets/lcms/engine/components/_unit-bundles.scss +0 -14
  269. data/app/assets/stylesheets/lcms/engine/components/cg/_annotations.scss +0 -48
  270. data/app/assets/stylesheets/lcms/engine/components/cg/_colorscheme.scss +0 -60
  271. data/app/assets/stylesheets/lcms/engine/components/cg/_contents-modal.scss +0 -20
  272. data/app/assets/stylesheets/lcms/engine/components/cg/_elements.scss +0 -11
  273. data/app/assets/stylesheets/lcms/engine/components/cg/_faq.scss +0 -35
  274. data/app/assets/stylesheets/lcms/engine/components/cg/_footnote.scss +0 -20
  275. data/app/assets/stylesheets/lcms/engine/components/cg/_hacks.scss +0 -11
  276. data/app/assets/stylesheets/lcms/engine/components/cg/_icons.scss +0 -30
  277. data/app/assets/stylesheets/lcms/engine/components/cg/_keywords.scss +0 -5
  278. data/app/assets/stylesheets/lcms/engine/components/cg/_links.scss +0 -3
  279. data/app/assets/stylesheets/lcms/engine/components/cg/_quotes.scss +0 -18
  280. data/app/assets/stylesheets/lcms/engine/components/cg/_standards.scss +0 -23
  281. data/app/assets/stylesheets/lcms/engine/components/cg/_table.scss +0 -50
  282. data/app/assets/stylesheets/lcms/engine/components/cg/_task.scss +0 -43
  283. data/app/assets/stylesheets/lcms/engine/components/cg/_video.scss +0 -10
  284. data/app/assets/stylesheets/lcms/engine/components/support/_helpdesk.scss +0 -25
  285. data/app/assets/stylesheets/lcms/engine/freshdesk/base/_colors.scss +0 -25
  286. data/app/assets/stylesheets/lcms/engine/freshdesk/base/_typography.scss +0 -19
  287. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_block.scss +0 -5
  288. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_buttons.scss +0 -5
  289. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_help-center.scss +0 -59
  290. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_tabs.scss +0 -33
  291. data/app/assets/stylesheets/lcms/engine/freshdesk/freshdesk.scss +0 -42
  292. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_footer.scss +0 -44
  293. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_header.scss +0 -49
  294. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_page.scss +0 -40
  295. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/footer.liquid +0 -14
  296. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/header.liquid +0 -41
  297. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/page.liquid +0 -22
  298. data/app/assets/stylesheets/lcms/engine/freshdesk/pages/_portal-home.scss +0 -18
  299. data/app/assets/stylesheets/lcms/engine/freshdesk/pages/portal.home.liquid +0 -74
  300. data/app/assets/stylesheets/lcms/engine/freshdesk/themes/_settings.scss +0 -19
  301. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_breakpoint.scss +0 -288
  302. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_helpers.scss +0 -22
  303. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_unit.scss +0 -95
  304. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_value.scss +0 -138
  305. data/app/assets/stylesheets/lcms/engine/layout/_connect.scss +0 -63
  306. data/app/assets/stylesheets/lcms/engine/layout/_header-search-form.scss +0 -30
  307. data/app/assets/stylesheets/lcms/engine/layout/_sticky-header.scss +0 -179
  308. data/app/assets/stylesheets/lcms/engine/layout/_sticky-navigation.scss +0 -124
  309. data/app/assets/stylesheets/lcms/engine/layout/_subscribe.scss +0 -68
  310. data/app/assets/stylesheets/lcms/engine/pages/_about-people.scss +0 -115
  311. data/app/assets/stylesheets/lcms/engine/pages/_about.scss +0 -61
  312. data/app/assets/stylesheets/lcms/engine/pages/_content-guide.scss +0 -205
  313. data/app/assets/stylesheets/lcms/engine/pages/_enhance-instruction.scss +0 -19
  314. data/app/assets/stylesheets/lcms/engine/pages/_explore-curriculum.scss +0 -46
  315. data/app/assets/stylesheets/lcms/engine/pages/_find-lessons.scss +0 -1
  316. data/app/assets/stylesheets/lcms/engine/pages/_home.scss +0 -237
  317. data/app/assets/stylesheets/lcms/engine/pages/_leadership.scss +0 -263
  318. data/app/assets/stylesheets/lcms/engine/pages/_lesson-document.scss +0 -138
  319. data/app/assets/stylesheets/lcms/engine/pages/_unsupported.scss +0 -18
  320. data/app/assets/stylesheets/lcms/engine/print/_b64-fonts.scss.erb +0 -65
  321. data/app/assets/stylesheets/lcms/engine/print/_cg-base.scss +0 -4
  322. data/app/assets/stylesheets/lcms/engine/print/_hacks.scss +0 -6
  323. data/app/assets/stylesheets/lcms/engine/print/cg/_base-typography.scss +0 -21
  324. data/app/assets/stylesheets/lcms/engine/print/cg/_breaks.scss +0 -7
  325. data/app/assets/stylesheets/lcms/engine/print/cg/_elements-typography.scss +0 -14
  326. data/app/assets/stylesheets/lcms/engine/vendors/swiper.css +0 -547
  327. data/app/controllers/concerns/lcms/engine/analytics_tracking.rb +0 -51
  328. data/app/controllers/concerns/lcms/engine/heap_notifyable.rb +0 -20
  329. data/app/controllers/lcms/engine/admin/configurable_admin.rb +0 -56
  330. data/app/controllers/lcms/engine/admin/google_oauth2_controller.rb +0 -15
  331. data/app/controllers/lcms/engine/admin/pages_controller.rb +0 -54
  332. data/app/controllers/lcms/engine/analytics_exclusion_controller.rb +0 -14
  333. data/app/controllers/lcms/engine/downloads_controller.rb +0 -50
  334. data/app/controllers/lcms/engine/enhance_instruction_controller.rb +0 -18
  335. data/app/controllers/lcms/engine/explore_curriculum_controller.rb +0 -28
  336. data/app/controllers/lcms/engine/find_lessons_controller.rb +0 -15
  337. data/app/controllers/lcms/engine/pages_controller.rb +0 -26
  338. data/app/controllers/lcms/engine/search_controller.rb +0 -15
  339. data/app/controllers/lcms/engine/sessions_controller.rb +0 -19
  340. data/app/models/lcms/engine/page.rb +0 -13
  341. data/app/services/lcms/engine/generate_thumbnails.rb +0 -54
  342. data/app/services/lcms/engine/svg_social_thumbnail.rb +0 -223
  343. data/app/views/layouts/lcms/engine/ld_docx.html.erb +0 -16
  344. data/app/views/lcms/engine/admin/pages/_form.html.erb +0 -8
  345. data/app/views/lcms/engine/admin/pages/edit.html.erb +0 -9
  346. data/app/views/lcms/engine/admin/pages/index.html.erb +0 -25
  347. data/app/views/lcms/engine/admin/pages/new.html.erb +0 -5
  348. data/app/views/lcms/engine/documents/_helpdesk.html.erb +0 -9
  349. data/app/views/lcms/engine/pages/_about_people_staff.html.erb +0 -27
  350. data/app/views/lcms/engine/pages/_leadership_in_action.html.erb +0 -25
  351. data/app/views/lcms/engine/pages/_leadership_why_i_lead.html.erb +0 -34
  352. data/app/views/lcms/engine/pages/about.html.erb +0 -87
  353. data/app/views/lcms/engine/pages/about_people.html.erb +0 -27
  354. data/app/views/lcms/engine/pages/forthcoming.html.erb +0 -9
  355. data/app/views/lcms/engine/pages/leadership.html.erb +0 -82
  356. data/app/views/lcms/engine/pages/not_found.html.erb +0 -9
  357. data/app/views/lcms/engine/pages/privacy.html.erb +0 -9
  358. data/app/views/lcms/engine/pages/show.html.erb +0 -8
  359. data/app/views/lcms/engine/pages/show_slug.html.erb +0 -0
  360. data/app/views/lcms/engine/pages/tos.html.erb +0 -9
  361. data/app/views/lcms/engine/shared/_connect.html.erb +0 -60
  362. data/app/views/lcms/engine/shared/_freshdesk.html.erb +0 -22
  363. data/app/views/lcms/engine/shared/_google_analytics.html.erb +0 -9
  364. data/app/views/lcms/engine/shared/_heap_analytics.html.erb +0 -7
  365. data/app/views/lcms/engine/shared/_open_graph_meta.html.erb +0 -15
  366. data/app/views/lcms/engine/shared/_open_graph_meta_js.html.erb +0 -39
  367. data/app/views/lcms/engine/shared/_search_form.html.erb +0 -10
  368. data/app/views/lcms/engine/shared/_social_sharing_menu.html.erb +0 -34
  369. data/app/views/lcms/engine/shared/_subscribe.html.erb +0 -30
  370. data/app/views/lcms/engine/shared/_unsupported.html.erb +0 -3
  371. data/app/views/lcms/engine/shared/social_thumbnail.svg.erb +0 -54
  372. data/config/initializers/heap.rb +0 -3
  373. data/lib/tasks/thumbnails.rake +0 -59
  374. data/spec/controllers/admin/pages_controller_spec.rb +0 -19
  375. data/spec/controllers/enhance_instruction_controller_spec.rb +0 -15
  376. data/spec/controllers/explore_curriculum_controller_spec.rb +0 -29
  377. data/spec/controllers/find_lessons_controller_spec.rb +0 -50
  378. data/spec/controllers/pages_controller_spec.rb +0 -32
  379. data/spec/controllers/search_controller_spec.rb +0 -16
  380. data/spec/factories/pages.rb +0 -21
  381. data/spec/features/admin/pages_spec.rb +0 -79
  382. data/spec/features/pages/page_not_found_spec.rb +0 -26
  383. data/spec/features/pages/page_titles_spec.rb +0 -86
  384. data/spec/support/heap.rb +0 -3
  385. data/vendor/assets/javascripts/foundation.initialize.js +0 -115
  386. data/vendor/assets/javascripts/foundation.magellanex.js +0 -335
  387. data/vendor/assets/javascripts/freshwidget.js +0 -1
  388. data/vendor/assets/javascripts/jquery.easytabs.js +0 -704
  389. data/vendor/assets/javascripts/jquery.hashchange.js +0 -9
  390. data/vendor/assets/javascripts/modernizr-custom.js +0 -3
  391. data/vendor/assets/javascripts/smoothscrolling.js +0 -22
  392. data/vendor/assets/javascripts/swiper.jquery.js +0 -3777
  393. data/vendor/assets/javascripts/tabs.js +0 -6
@@ -1,20 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- function GenericResourceCard(props) {
3
- const item = props.item;
4
- const mainClass = 'o-generic-card';
5
- const bemClass = _.partial(convertToBEM, mainClass);
6
- const cssGeneric = classNames(
7
- mainClass,
8
- `cs-link-bg--${colorCodeCss(item.subject, item.grade_avg)}`
9
- );
10
-
11
- return (
12
- // eslint-disable-next-line no-undef
13
- <a className={cssGeneric} href={item.path} onClick={heapTrackPd.bind(null, item)}>
14
- <div className={bemClass('wrap')}>
15
- <div className={bemClass('title')}>{item.title}</div>
16
- <div className={bemClass('teaser')}>{item.teaser}</div>
17
- </div>
18
- </a>
19
- );
20
- }
@@ -1,152 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- class ExploreCurriculumCardItem extends React.Component {
3
- componentDidMount() {
4
- if (this._dropdown) {
5
- new Foundation.DropdownMenu($(this._dropdown),
6
- { 'alignment': 'right',
7
- 'forceFollow': false,
8
- 'closingTime': Modernizr.touchevents ? 0 : 5000 });
9
- }
10
- }
11
-
12
- componentWillUnmount() {
13
- if (this._dropdown) {
14
- $(this._dropdown).foundation('destroy');
15
- }
16
- }
17
-
18
- render() {
19
- const props = this.props;
20
- const resource = props.curriculum.resource;
21
- const hasDownloads = resource.downloads && resource.downloads.length > 0;
22
- const hasRelated = resource.has_related;
23
- const colorCode = props.colorCode;
24
-
25
- const curriculumComponent = {
26
- // eslint-disable-next-line no-undef
27
- 'grade': ExploreCurriculumGradeMap,
28
- // eslint-disable-next-line no-undef
29
- 'module': ExploreCurriculumModuleMap,
30
- // eslint-disable-next-line no-undef
31
- 'unit': ExploreCurriculumUnitMap,
32
- // eslint-disable-next-line no-undef
33
- 'lesson': ExploreCurriculumGradeMap
34
- }[props.curriculum.type];
35
-
36
- const curriculumMap = React.createElement(curriculumComponent, {
37
- expanded: props.shouldItemExpand,
38
- curriculum: props.curriculum,
39
- colorCode: colorCode
40
- });
41
-
42
- const cssClasses = classNames(
43
- 'o-cur-card',
44
- `o-cur-card-hover--${props.colorCode}`,
45
- { [`o-cur-card-active--${props.colorCode}`]: props.isActive},
46
- { 'o-cur-card--short': !props.shouldItemExpand },
47
- `o-cur-card--${props.curriculum.type}`
48
- );
49
-
50
- const cssBodyClasses = classNames(
51
- 'o-cur-card__body',
52
- { 'o-cur-card__body--medium': props.shouldItemExpand },
53
- { 'o-cur-card__body--short': !props.shouldItemExpand }
54
- );
55
-
56
- const cssActionClasses = classNames(
57
- 'o-cur-card__actions',
58
- {'o-cur-card__actions--short': !props.shouldItemExpand },
59
- {'u-hidden': _.includes(['grade', 'module'], props.curriculum.type) || resource.is_assessment}
60
- );
61
-
62
- const cssActionDropdownClasses = classNames(
63
- 'o-cur-card__menu o-cur-card__menu--short o-cur-card--show-short',
64
- {'u-hidden': _.includes(['grade', 'module'], props.curriculum.type)}
65
- );
66
-
67
- const cssDownloadBtnClasses = classNames(
68
- 'o-ub-btn', 'o-ub-btn--bordered', 'o-ub-btn--curriculum',
69
- {'o-ub-btn--disabled': !hasDownloads }
70
- );
71
-
72
- const cssRelatedBtnClasses = classNames(
73
- 'o-ub-btn', 'o-ub-btn--bordered', 'o-ub-btn--curriculum',
74
- {'o-ub-btn--disabled': !hasRelated }
75
- );
76
-
77
- const cssDownloadLinkClasses = classNames(
78
- {'u-link--disabled': !hasDownloads }
79
- );
80
-
81
- const cssHeaderClasses = classNames(
82
- `cs-txt--${colorCode}`,
83
- {'o-title__type o-title__type--top-align': props.shouldItemExpand},
84
- {'o-title__type--short': !props.shouldItemExpand },
85
- {'u-hidden': resource.is_assessment}
86
- );
87
-
88
- const cssTitleClasses = classNames(
89
- {'u-txt--card-title-medium': props.shouldItemExpand && !resource.is_assessment },
90
- {'u-txt--card-title-short': !props.shouldItemExpand && !resource.is_assessment },
91
- {'u-txt--card-assesment-medium': props.shouldItemExpand && resource.is_assessment },
92
- {'u-txt--card-assesment-short': !props.shouldItemExpand && resource.is_assessment }
93
- );
94
-
95
- const cssShow = classNames(
96
- 'u-hidden'
97
- );
98
-
99
- const resourceType = resource.type.name === 'grade' ? 'curriculum' : resource.type.name;
100
- const downloadBtnLabel = `Download ${_.capitalize(resourceType)}`;
101
- const downloadModalId = `downloads-modal-${resource.id}`;
102
-
103
- return (
104
- <div id={props.curriculum.id} name={resource.path} onClick={props.onClickElement} className={cssClasses} data-magellanhash-target>
105
- {curriculumMap}
106
- <div className={cssBodyClasses}>
107
- <div className="o-title u-text--uppercase show-for-ipad">
108
- <span className={cssHeaderClasses}>{resource.short_title}</span>
109
- <span className={`${cssShow} o-title__duration o-cur-card--show-medium`}><TimeToTeach duration={resource.time_to_teach} /></span>
110
- </div>
111
- <h3 className={cssTitleClasses}>{resource.title}</h3>
112
- <div className={`${cssShow} o-title u-text--uppercase hide-for-ipad u-padding-top--xs`}>
113
- <span className="o-title__duration u-float-none"><TimeToTeach duration={resource.time_to_teach} /></span>
114
- </div>
115
- <div className="o-cur-card--show-medium o-cur-card__dsc">{resource.teaser}</div>
116
- </div>
117
- <div className={cssActionClasses}>
118
- <ul className="o-cur-card__menu o-cur-card__menu--medium o-cur-card--show-medium">
119
- <li>
120
- <a className="o-ub-btn o-ub-btn--yellow o-ub-btn--subtle" href={resource.path}>
121
- View Details
122
- </a>
123
- </li>
124
- <li>
125
- <a className={cssDownloadBtnClasses} data-open={downloadModalId}>
126
- {downloadBtnLabel}
127
- </a>
128
- </li>
129
- <li>
130
- <a className={cssRelatedBtnClasses} href={`${resource.path}#related-instruction`}>
131
- Related Resources
132
- </a>
133
- </li>
134
- </ul>
135
- <div className={`${cssHeaderClasses} u-text--uppercase hide-for-ipad`}>
136
- {resource.short_title}
137
- </div>
138
- <ul className={cssActionDropdownClasses} ref={(ref) => this._dropdown = ref}>
139
- <li>
140
- <a href="" data-turbolinks="false" className="o-cur-card__ellipsis"><i className="ub-ellipsis fa-3x"></i></a>
141
- <ul className="menu">
142
- <li><a href={resource.path}>View Details</a></li>
143
- <li><a className={cssDownloadLinkClasses} data-open={downloadModalId}>{downloadBtnLabel}</a></li>
144
- <li><a className="u-link--disabled">Related Instruction</a></li>
145
- </ul>
146
- </li>
147
- </ul>
148
- </div>
149
- </div>
150
- );
151
- }
152
- }
@@ -1,44 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- function ExploreCurriculumGradeMap(props) {
3
- const mapClass = classNames({
4
- 'o-cur-card__map': true,
5
- 'o-cur-card__map--medium': props.expanded,
6
- 'o-cur-card__map--short': !props.expanded
7
- });
8
-
9
- const mainClass = classNames({
10
- 'o-ch-map': true,
11
- 'o-ch-map--medium': props.expanded,
12
- 'o-ch-map--short': !props.expanded
13
- });
14
-
15
- const details = props.expanded ?
16
- <div className="o-ch-map__details">
17
- <span>Show Modules</span>
18
- </div> : '';
19
-
20
- const min = Math.min(...props.curriculum.module_sizes),
21
- max = Math.max(...props.curriculum.module_sizes);
22
-
23
- // eslint-disable-next-line no-undef
24
- const scale = _.curry(scaleNumber)(70, 100, min, max);
25
- const bemClass = _.partial(convertToBEM, mainClass);
26
-
27
- const grades = props.curriculum.module_sizes.map((size, i) => {
28
- const styles = { width: `${scale(size)}%` };
29
- return (
30
- <div key={i} className={bemClass('module-wrap')}>
31
- <div className={classNames(bemClass('module'), `cs-bg--${props.colorCode}`)} style={styles}></div>
32
- </div>
33
- );
34
- });
35
-
36
- return (
37
- <div className={mapClass}>
38
- <div className={mainClass}>
39
- {grades}
40
- </div>
41
- {details}
42
- </div>
43
- );
44
- }
@@ -1,10 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- function ExploreCurriculumHeader(props) {
3
- return (
4
- <div className="o-s-header o-page__wrap--row-nest">
5
- <div className="o-s-header__item">
6
- <p>Showing {props.totalItems} items</p>
7
- </div>
8
- </div>
9
- );
10
- }
@@ -1,77 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- class ExploreCurriculumItem extends React.Component {
3
- curriculum() {
4
- return this.props.index[this.props.id];
5
- }
6
-
7
- downloadModal() {
8
- const resource = this.curriculum().resource;
9
- return (resource.downloads && resource.downloads.length > 0) ?
10
- <DownloadModal resource={resource} /> : '';
11
- }
12
-
13
- render() {
14
- const props = this.props;
15
- const curriculum = this.curriculum();
16
- const colorCode = colorCodeCss(curriculum.resource.subject, curriculum.resource.grade);
17
-
18
- // An item should expand if its parent is the last parent in the active branch.
19
- // Collapsed Grade -> Collapsed Mod -> Expanded Unit 1, Unit 2, Unit 3
20
- const activeParent = props.index[props.active[props.active.length - 2]];
21
- const shouldItemExpand = props.active.length === 1 ||
22
- _.some(activeParent.children, c => c.id === props.id);
23
- const isItemActive = props.active.length > 1 && props.active[props.active.length - 2] === props.id;
24
-
25
- let onClickItem = shouldItemExpand ? props.onClickViewDetails.bind(this, props.parentage) : props.onClickExpand.bind(this, props.parentage);
26
- if (curriculum.resource.is_assessment) {
27
- onClickItem = function() { location.href = curriculum.resource.path; };
28
- }
29
-
30
- const item =
31
- <ExploreCurriculumCardItem
32
- curriculum={curriculum}
33
- onClickElement={onClickItem}
34
- shouldItemExpand={shouldItemExpand}
35
- isActive={isItemActive}
36
- colorCode={colorCode} />;
37
-
38
- // Children should be rendered if the item is a parent in the active branch.
39
- const shouldRenderChildren = props.active.length > 1 &&
40
- _.includes(props.active, props.id) &&
41
- _.last(props.active) !== props.id;
42
-
43
- const cssClasses = classNames( 'c-ec-cards__children',
44
- { 'c-ec-cards__children--lessons': curriculum.type === 'unit',
45
- 'c-ec-cards__children--expanded': shouldRenderChildren });
46
-
47
- const children = _.filter(curriculum.children, x => !x.resource.is_opr);
48
-
49
- const childrenElements = shouldRenderChildren ?
50
- children.map(c => (
51
- c.type === 'lesson' ?
52
- <LessonCard key={c.resource.id} lesson={c.resource} with_breadcrumb={false} colorCode={colorCode} /> :
53
- <ExploreCurriculumItem
54
- key={c.id}
55
- id={c.id}
56
- index={props.index}
57
- onClickExpand={props.onClickExpand}
58
- onClickViewDetails={props.onClickViewDetails}
59
- parentage={[...props.parentage, c.id]}
60
- active={props.active} />
61
- )) : [];
62
-
63
- const shouldRenderOpr = shouldRenderChildren && curriculum.type === 'unit';
64
- const opr = shouldRenderOpr ? <ExploreCurriculumOpr colorCode={colorCode} curriculum={curriculum}/> : [];
65
-
66
- return (
67
- <div>
68
- {item}
69
- {opr}
70
- <div className={cssClasses}>
71
- {childrenElements}
72
- </div>
73
- {this.downloadModal()}
74
- </div>
75
- );
76
- }
77
- }
@@ -1,59 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- function ExploreCurriculumModuleMap(props) {
3
- const mapClass = classNames({
4
- 'o-cur-card__map': true,
5
- 'o-cur-card__map--medium': props.expanded,
6
- 'o-cur-card__map--short': !props.expanded
7
- });
8
-
9
- const mainClass = classNames({
10
- 'o-ch-map': true,
11
- 'o-ch-map--medium': props.expanded,
12
- 'o-ch-map--short': !props.expanded
13
- });
14
-
15
- const bemClass = _.partial(convertToBEM, mainClass);
16
- const colorCodeClass = `cs-bg--${props.colorCode}`;
17
-
18
- const details = props.expanded ?
19
- <div className="o-ch-map__details">
20
- <span>Show Units</span>
21
- </div> : '';
22
-
23
- const units = props.curriculum.unit_sizes.map((size, i) => {
24
- const lessons = [];
25
- const unit = props.curriculum.children[i];
26
-
27
- for (let j = 0; j < size; j++) {
28
- const child = unit ? unit.children[j] : null;
29
- if (child && child.resource.is_opr) continue;
30
- const prereqClass = child && child.resource.is_prerequisite ? 'o-ch-unit-map__prerequisite' : '';
31
- const assessmentClass = unit && unit.resource.is_assessment ? `o-ch-unit-map__assessment--${props.colorCode}` : '';
32
- lessons.push((
33
- <div key={j} className={classNames(bemClass('lesson'), colorCodeClass, assessmentClass, prereqClass)}></div>
34
- ));
35
- }
36
-
37
- return (
38
- <div key={i} className={bemClass('unit')}>
39
- {lessons}
40
- </div>
41
- );
42
- });
43
-
44
- return (
45
- <div className={mapClass}>
46
- <div className={mainClass}>
47
- <div className={bemClass('module-wrap')}>
48
- <div className={classNames(bemClass('module'), colorCodeClass)}></div>
49
- </div>
50
- <div className={bemClass('units-wrap')}>
51
- <div className={bemClass('units')}>
52
- {units}
53
- </div>
54
- </div>
55
- </div>
56
- {details}
57
- </div>
58
- );
59
- }
@@ -1,62 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- class ExploreCurriculumOpr extends React.Component {
3
- constructor(props) {
4
- super(props);
5
- this.children = _
6
- .filter(this.props.curriculum.children, x => x.resource.is_opr)
7
- .sort((a, b) => parseInt(a.resource.short_title.split(' ')[1]) - parseInt(b.resource.short_title.split(' ')[1]));
8
- this.state = { renderChildren: false };
9
- this.oprDescription = this.props.curriculum.resource.opr_description;
10
-
11
- // Amount of OPR lessons to show in the expanded version of the block
12
- this.numLessonsToTake = 5;
13
- }
14
-
15
- onClick() {
16
- this.setState({renderChildren: !this.state.renderChildren});
17
- }
18
-
19
- render() {
20
- if (this.children.length === 0) return (null);
21
-
22
- const operationLabel = this.state.renderChildren ? 'Hide' : 'View';
23
-
24
- const containerClasses = 'c-ec-cards__children c-ec-cards__children--expanded c-ec-cards-opr';
25
- const titleClasses = 'c-ec-cards-opr__title';
26
- const wrapperClasses = 'c-ec-cards-opr__wrapper';
27
-
28
- const childrenComponents = () => {
29
- const childrenElements = _.take(this.children, this.numLessonsToTake).map(c => {
30
- return <LessonCard key={c.resource.id} lesson={c.resource} with_breadcrumb={false}
31
- colorCode={this.props.colorCode}/>;
32
- });
33
-
34
- const lessonClasses = 'c-ec-cards__children--lessons';
35
-
36
- const oprDescElement = (this.oprDescription && this.oprDescription.length) ?
37
- <div className="c-ec-cards__children c-ec-cards-opr">{this.props.curriculum.resource.opr_description}</div>
38
- : null;
39
-
40
- return (
41
- <div>
42
- {oprDescElement}
43
- <div className={lessonClasses}>
44
- {childrenElements}
45
- </div>
46
- </div>
47
- );
48
- };
49
-
50
- return (
51
- <div className={wrapperClasses}>
52
- <div className={containerClasses}>
53
- <div className={titleClasses}>Need additional Prerequisite Lessons to help students access core learning?</div>
54
- <div>
55
- <button className="button" type="button" onClick={this.onClick.bind(this)}>{operationLabel} Recommendations</button>
56
- </div>
57
- </div>
58
- {this.state.renderChildren ? childrenComponents() : null}
59
- </div>
60
- );
61
- }
62
- }
@@ -1,258 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- class ExploreCurriculumPage extends React.Component {
3
- constructor(props) {
4
- super(props);
5
-
6
- this.state = this.buildStateFromProps(props);
7
- this.ANIMATION_DURATION = 400;
8
- this._curriculumList = null;
9
- }
10
-
11
- updateUrl($active) {
12
- if (!$active && !/p=/.test(location.search)) return;
13
- if ($active && !$active.length) return;
14
-
15
- let query = { p: null, e: null };
16
- if ($active) {
17
- query['p'] = $active[0].getAttribute('name');
18
- if ( this.state.active[this.state.active.length - 2] === $active[0].id ) {
19
- query['e'] = '1';
20
- }
21
- }
22
-
23
- urlHistory.update(query, { replace: true });
24
- }
25
-
26
- componentDidMount() {
27
- this._curriculumList = $('#curriculumList');
28
- new Foundation.MaggelanHash(this._curriculumList,
29
- { deepLinking: true,
30
- updateUrl: this.updateUrl.bind(this),
31
- threshold: 20,
32
- animationDuration: this.ANIMATION_DURATION,
33
- onScrollFinished: this.onScrollFinished.bind(this)
34
- });
35
- let elm;
36
- if (this.scrollImmediately === 'item') {
37
- elm = document.getElementById(this.state.active[this.state.active.length-1]);
38
- if (!elm) {
39
- elm = document.getElementById(this.state.active[this.state.active.length-2]);
40
- }
41
- this.scrollToActive(elm);
42
- } else if (this.scrollImmediately === 'expanded') {
43
- elm = document.getElementById(this.state.active[this.state.active.length-2]);
44
- this.scrollToActive(elm);
45
- }
46
- }
47
-
48
- componentWillUnmount() {
49
- if (this._curriculumList) {
50
- this._curriculumList.foundation('destroy');
51
- }
52
- }
53
-
54
- componentWillUpdate(_nextProps, _nextState) {
55
- if (this._curriculumList) {
56
- this._curriculumList.foundation('mutexScrollLock');
57
- }
58
- }
59
-
60
- componentDidUpdate(_prevProps, _prevState) {
61
- if (this._curriculumList) {
62
- this._curriculumList.foundation('mutexScrollUnlock');
63
- }
64
- }
65
-
66
- onScrollFinished(el) {
67
- _.delay(() => { if (el && $(el).length) {
68
- const yOffset = $(el).offset().top;
69
- // fix animation sync, will get inside in very rare cases
70
- if (Math.abs($(document).scrollTop() - yOffset) > 25) {
71
- $('html, body').scrollTop(yOffset);
72
- }
73
- }
74
- this._curriculumList.foundation('mutexScrollUnlock');
75
- this._curriculumList.foundation('reflow');
76
- }, this.ANIMATION_DURATION / 4);
77
- }
78
-
79
- scrollToActive(el) {
80
- if (el && $(el).length) {
81
- this._curriculumList.foundation('mutexScrollLock');
82
- this._curriculumList.foundation('scrollToLoc', el);
83
- }
84
- else {
85
- this.updateUrl(null);
86
- }
87
- }
88
-
89
- reflow() {
90
- this._curriculumList.foundation('reflow');
91
- }
92
-
93
- buildStateFromProps(props) {
94
- let active;
95
-
96
- if (props.active) {
97
- active = props.active;
98
-
99
- if (props.expanded) {
100
- this.scrollImmediately = 'expanded';
101
- } else {
102
- this.scrollImmediately = 'item';
103
- }
104
- } else {
105
- active = props.results.length ? [props.results[0].id] : null;
106
- }
107
-
108
- return {
109
- curriculums: props.results,
110
- curriculumsIndex: this.buildIndex(props.results),
111
- filterbar: props.filterbar,
112
- active: active
113
- };
114
- }
115
-
116
- buildIndex(curriculums, zip = {}) {
117
- _.forEach(curriculums, curriculum => {
118
- zip[curriculum.id] = curriculum;
119
-
120
- if (curriculum.children.length) {
121
- this.buildIndex(curriculum.children, zip);
122
- }
123
- });
124
-
125
- return zip;
126
- }
127
-
128
- createQuery(state) {
129
- return {
130
- format: 'json',
131
- ...state.filterbar
132
- };
133
- }
134
-
135
- fetch(state) {
136
- const query = this.createQuery(state);
137
- const url = Routes.lcms_engine_explore_curriculum_index_path(query);
138
- return $.getJSON(url);
139
- }
140
-
141
- fetchOne(id) {
142
- const url = Routes.lcms_engine_explore_curriculum_path(id);
143
- return $.getJSON(url);
144
- }
145
-
146
- getActive(parentage, cur) {
147
- return cur.children.length > 0 ?
148
- [...parentage, cur.children[0].id] :
149
- [...parentage];
150
- }
151
-
152
- setActive(parentage, cur, el) {
153
- this.setState({
154
- ...this.state,
155
- active: this.getActive(parentage, cur)
156
- }, this.scrollToActive.bind(this, el));
157
- }
158
-
159
- handleClickExpand(parentage, e) {
160
- if (e.target.nodeName === 'A') return;
161
- e.preventDefault();
162
- const currentTarget = `#${e.currentTarget.id}`;
163
- if (parentage[parentage.length-1] === this.state.active[parentage.length-1]) {
164
- this.setState({
165
- ...this.state,
166
- active: parentage
167
- }, this.scrollToActive.bind(this, currentTarget));
168
- } else {
169
- this.handleClickViewDetails(parentage, e);
170
- }
171
- }
172
-
173
- handleClickViewDetails(parentage, e) {
174
- if ((e.target.nodeName === 'A') || (e.target.nodeName === 'I')) return;
175
- e.preventDefault();
176
- const currentTarget = `#${e.currentTarget.id}`;
177
- const id = _.last(parentage);
178
- const cur = this.state.curriculumsIndex[id];
179
- const hasCached = cur &&
180
- (cur.requested ||
181
- (cur.children.length &&
182
- this.state.curriculumsIndex[cur.children[0].id]));
183
-
184
- if (hasCached) {
185
- this.setActive(parentage, cur, currentTarget);
186
- } else {
187
- this.fetchOne(id).then(response => {
188
- response.requested = true;
189
- const newIndex = { ...this.state.curriculumsIndex };
190
- this.buildIndex([response], newIndex);
191
- this.setState({
192
- ...this.state,
193
- curriculumsIndex: newIndex,
194
- active: this.getActive(parentage, response)
195
- }, this.scrollToActive.bind(this, currentTarget));
196
- });
197
- }
198
- }
199
-
200
- handleFilterbarUpdate(filterbar) {
201
- const newFilterbar = _.omit(filterbar, 'search_term');
202
- const oldFilterbar = _.omit(this.state.filterbar, 'search_term');
203
- const onlyChangedSearchTerm = $.param(newFilterbar) === $.param(oldFilterbar);
204
-
205
- const newState = _.assign({}, this.state, { filterbar: filterbar });
206
-
207
- if (onlyChangedSearchTerm) {
208
- this.setState(newState);
209
- } else {
210
- this.fetch(newState).then(response => {
211
- this.setState(this.buildStateFromProps(response),
212
- this.reflow.bind(this));
213
- });
214
- }
215
- }
216
-
217
- render() {
218
- const curriculums = this.state.curriculums.map(
219
- c => <ExploreCurriculumItem
220
- key={c.id}
221
- id={c.id}
222
- index={this.state.curriculumsIndex}
223
- onClickExpand={this.handleClickExpand.bind(this)}
224
- onClickViewDetails={this.handleClickViewDetails.bind(this)}
225
- parentage={[c.id]}
226
- active={this.state.active} />
227
- );
228
-
229
- return (
230
- <div>
231
- <div className="u-bg--base-gradient">
232
- <div className="o-page">
233
- <div className="o-page__module">
234
- <div className="o-filterbar-title">
235
- <h2>Explore Curriculum</h2>
236
- <div className="o-filterbar-title__subheader">
237
- Explore ELA and Math lessons for the grades below. Review, adapt, download, and share.
238
- </div>
239
- </div>
240
- <FilterbarResponsive
241
- onUpdate={this.handleFilterbarUpdate.bind(this)}
242
- searchLabel='What do you want to teach?'
243
- withSearch={true}
244
- withDropdown={true}
245
- {...this.state.filterbar} />
246
- </div>
247
- </div>
248
- </div>
249
- <div className="o-page o-page--margin-bottom">
250
- <div className="o-page__module">
251
- <ExploreCurriculumHeader totalItems={this.state.curriculums.length} />
252
- {curriculums}
253
- </div>
254
- </div>
255
- </div>
256
- );
257
- }
258
- }