lcms-engine 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1191) hide show
  1. checksums.yaml +7 -0
  2. data/.babelrc +6 -0
  3. data/.codeclimate.yml +81 -0
  4. data/.eslintignore +1 -0
  5. data/.eslintrc +92 -0
  6. data/.gitignore +28 -0
  7. data/.nvmrc +1 -0
  8. data/.overcommit.yml +42 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +78 -0
  11. data/.ruby-gemset +1 -0
  12. data/.ruby-version +1 -0
  13. data/CHANGELOG.md +11 -0
  14. data/Gemfile +21 -0
  15. data/LICENSE +201 -0
  16. data/README.md +215 -0
  17. data/Rakefile +33 -0
  18. data/app/assets/config/lcms_engine_manifest.js +16 -0
  19. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.eot +0 -0
  20. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.svg +689 -0
  21. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.ttf +0 -0
  22. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Medium-Web.woff +0 -0
  23. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.eot +0 -0
  24. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.svg +697 -0
  25. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.ttf +0 -0
  26. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Regular-Web.woff +0 -0
  27. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.eot +0 -0
  28. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.svg +768 -0
  29. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.ttf +0 -0
  30. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-RegularItalic-Web.woff +0 -0
  31. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.eot +0 -0
  32. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.svg +685 -0
  33. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.ttf +0 -0
  34. data/app/assets/fonts/lcms/engine/caponi/CaponiSlab-Semibold-Web.woff +0 -0
  35. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.eot +0 -0
  36. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.svg +5603 -0
  37. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Bold.woff +0 -0
  38. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.eot +0 -0
  39. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.svg +5763 -0
  40. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Light.woff +0 -0
  41. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.eot +0 -0
  42. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.otf +0 -0
  43. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.svg +5400 -0
  44. data/app/assets/fonts/lcms/engine/centro/PFCentroSansCond-Medium.woff +0 -0
  45. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.eot +0 -0
  46. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.html +15 -0
  47. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.otf +0 -0
  48. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.svg +13061 -0
  49. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Bold.woff +0 -0
  50. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.eot +0 -0
  51. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.html +15 -0
  52. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.otf +0 -0
  53. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.svg +13075 -0
  54. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Light.woff +0 -0
  55. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.eot +0 -0
  56. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.otf +0 -0
  57. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.svg +13142 -0
  58. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-LightItalic.woff +0 -0
  59. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.eot +0 -0
  60. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.ttf +0 -0
  61. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.woff +0 -0
  62. data/app/assets/fonts/lcms/engine/centro/PFCentroSansPro-Medium.woff2 +0 -0
  63. data/app/assets/fonts/lcms/engine/cursive/Sriracha-Regular.ttf +0 -0
  64. data/app/assets/fonts/lcms/engine/icons/ubicons.eot +0 -0
  65. data/app/assets/fonts/lcms/engine/icons/ubicons.svg +50 -0
  66. data/app/assets/fonts/lcms/engine/icons/ubicons.ttf +0 -0
  67. data/app/assets/fonts/lcms/engine/icons/ubicons.woff +0 -0
  68. data/app/assets/fonts/lcms/engine/ub/UBIcons.eot +0 -0
  69. data/app/assets/fonts/lcms/engine/ub/UBIcons.svg +18 -0
  70. data/app/assets/fonts/lcms/engine/ub/UBIcons.ttf +0 -0
  71. data/app/assets/fonts/lcms/engine/ub/UBIcons.woff +0 -0
  72. data/app/assets/images/lcms/engine/about.jpg +0 -0
  73. data/app/assets/images/lcms/engine/about_hero_bg.jpg +0 -0
  74. data/app/assets/images/lcms/engine/about_partners.jpg +0 -0
  75. data/app/assets/images/lcms/engine/about_standards_institute.jpg +0 -0
  76. data/app/assets/images/lcms/engine/about_who_we_are.jpg +0 -0
  77. data/app/assets/images/lcms/engine/apple-touch-icon.png +0 -0
  78. data/app/assets/images/lcms/engine/bg-for-question@3x.png +0 -0
  79. data/app/assets/images/lcms/engine/cc_logo.png +0 -0
  80. data/app/assets/images/lcms/engine/cc_logo.svg +594 -0
  81. data/app/assets/images/lcms/engine/cg_icon_complexity.png +0 -0
  82. data/app/assets/images/lcms/engine/cg_icon_instruction.png +0 -0
  83. data/app/assets/images/lcms/engine/cg_icon_volume.png +0 -0
  84. data/app/assets/images/lcms/engine/cg_placeholder.jpg +0 -0
  85. data/app/assets/images/lcms/engine/curriculum.jpg +0 -0
  86. data/app/assets/images/lcms/engine/curriculum.svg +24 -0
  87. data/app/assets/images/lcms/engine/favicon.ico +0 -0
  88. data/app/assets/images/lcms/engine/favicon/favicon-128x128.png +0 -0
  89. data/app/assets/images/lcms/engine/favicon/favicon-16x16.png +0 -0
  90. data/app/assets/images/lcms/engine/favicon/favicon-196x196.png +0 -0
  91. data/app/assets/images/lcms/engine/favicon/favicon-32x32.png +0 -0
  92. data/app/assets/images/lcms/engine/favicon/favicon-96x96.png +0 -0
  93. data/app/assets/images/lcms/engine/favicon/favicon.ico +0 -0
  94. data/app/assets/images/lcms/engine/head.svg +14 -0
  95. data/app/assets/images/lcms/engine/home_background.jpeg +0 -0
  96. data/app/assets/images/lcms/engine/hp_advance_leadership.jpg +0 -0
  97. data/app/assets/images/lcms/engine/hp_ela_bg.jpg +0 -0
  98. data/app/assets/images/lcms/engine/hp_enhance_instructions.jpg +0 -0
  99. data/app/assets/images/lcms/engine/hp_find_lessons.jpg +0 -0
  100. data/app/assets/images/lcms/engine/hp_hero_bg.jpg +0 -0
  101. data/app/assets/images/lcms/engine/hp_hero_bg_medium.jpg +0 -0
  102. data/app/assets/images/lcms/engine/hp_hero_bg_small.jpg +0 -0
  103. data/app/assets/images/lcms/engine/hp_math_bg.jpg +0 -0
  104. data/app/assets/images/lcms/engine/hp_si_bg.jpg +0 -0
  105. data/app/assets/images/lcms/engine/ld_p1.svg +1 -0
  106. data/app/assets/images/lcms/engine/ld_p2.svg +1 -0
  107. data/app/assets/images/lcms/engine/ld_p3.svg +1 -0
  108. data/app/assets/images/lcms/engine/lessons/ld_p1.png +0 -0
  109. data/app/assets/images/lcms/engine/lessons/ld_p2.png +0 -0
  110. data/app/assets/images/lcms/engine/lessons/ld_p3.png +0 -0
  111. data/app/assets/images/lcms/engine/lessons/tens.png +0 -0
  112. data/app/assets/images/lcms/engine/lessons/wp.svg +30 -0
  113. data/app/assets/images/lcms/engine/logo-beta.svg +9 -0
  114. data/app/assets/images/lcms/engine/logo_footer.svg +42 -0
  115. data/app/assets/images/lcms/engine/logo_odell.png +0 -0
  116. data/app/assets/images/lcms/engine/logo_odell_footer.png +0 -0
  117. data/app/assets/images/lcms/engine/logo_pdf.svg +7 -0
  118. data/app/assets/images/lcms/engine/ls_curriculum.jpg +0 -0
  119. data/app/assets/images/lcms/engine/ls_hero_bg.jpg +0 -0
  120. data/app/assets/images/lcms/engine/ls_hero_bg_medium.jpg +0 -0
  121. data/app/assets/images/lcms/engine/ls_hero_bg_small.jpg +0 -0
  122. data/app/assets/images/lcms/engine/ls_team.jpg +0 -0
  123. data/app/assets/images/lcms/engine/ls_whyilead.jpg +0 -0
  124. data/app/assets/images/lcms/engine/og_image.png +0 -0
  125. data/app/assets/images/lcms/engine/pd-cg-placeholder.jpg +0 -0
  126. data/app/assets/images/lcms/engine/pd-collapse.svg +14 -0
  127. data/app/assets/images/lcms/engine/pd-expand.svg +12 -0
  128. data/app/assets/images/lcms/engine/pdf-icon.svg +26 -0
  129. data/app/assets/images/lcms/engine/placeholder.svg +10 -0
  130. data/app/assets/images/lcms/engine/placeholder_white_bg.svg +10 -0
  131. data/app/assets/images/lcms/engine/professional_development.jpg +0 -0
  132. data/app/assets/images/lcms/engine/resource_background.jpg +0 -0
  133. data/app/assets/images/lcms/engine/resource_placeholder.jpg +0 -0
  134. data/app/assets/images/lcms/engine/st_icon_a.svg +8 -0
  135. data/app/assets/images/lcms/engine/st_icon_m.svg +7 -0
  136. data/app/assets/images/lcms/engine/st_icon_plus.svg +9 -0
  137. data/app/assets/images/lcms/engine/st_icon_s.svg +7 -0
  138. data/app/assets/images/lcms/engine/tile-wide.png +0 -0
  139. data/app/assets/images/lcms/engine/tile.png +0 -0
  140. data/app/assets/javascripts/lcms/engine/admin/application.js +28 -0
  141. data/app/assets/javascripts/lcms/engine/application.js +51 -0
  142. data/app/assets/javascripts/lcms/engine/application_lti.js +31 -0
  143. data/app/assets/javascripts/lcms/engine/components.js +7 -0
  144. data/app/assets/javascripts/lcms/engine/components/.gitkeep +0 -0
  145. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMap.js.jsx +31 -0
  146. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapLesson.js.jsx +18 -0
  147. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapModule.js.jsx +59 -0
  148. data/app/assets/javascripts/lcms/engine/components/curriculum-map/CurriculumMapUnit.js.jsx +56 -0
  149. data/app/assets/javascripts/lcms/engine/components/curriculum-map/ResourceHover.js.jsx +27 -0
  150. data/app/assets/javascripts/lcms/engine/components/curriculum-map/ResourcePreview.js.jsx +29 -0
  151. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/EnhanceInstructionCards.js.jsx +13 -0
  152. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/EnhanceInstructionPage.js.jsx +139 -0
  153. data/app/assets/javascripts/lcms/engine/components/enhance-instruction/GenericResourceCard.js.jsx +20 -0
  154. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumCardItem.js.jsx +152 -0
  155. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumGradeMap.js.jsx +44 -0
  156. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumHeader.js.jsx +10 -0
  157. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumItem.js.jsx +77 -0
  158. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumModuleMap.js.jsx +59 -0
  159. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumOpr.js.jsx +62 -0
  160. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumPage.js.jsx +258 -0
  161. data/app/assets/javascripts/lcms/engine/components/explore-curriculum/ExploreCurriculumUnitMap.js.jsx +50 -0
  162. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterBarResponsive.js.jsx +62 -0
  163. data/app/assets/javascripts/lcms/engine/components/filterbar/Filterbar.js.jsx +258 -0
  164. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarFacet.js.jsx +12 -0
  165. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarGrade.js.jsx +14 -0
  166. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarSearch.js.jsx +48 -0
  167. data/app/assets/javascripts/lcms/engine/components/filterbar/FilterbarSubject.js.jsx +12 -0
  168. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsCards.js.jsx +11 -0
  169. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsCardsEmpty.js.jsx +17 -0
  170. data/app/assets/javascripts/lcms/engine/components/find-lessons/FindLessonsPage.js.jsx +58 -0
  171. data/app/assets/javascripts/lcms/engine/components/helpers/FreshdeskBtn.js.jsx +9 -0
  172. data/app/assets/javascripts/lcms/engine/components/helpers/MediaTime.js.jsx +6 -0
  173. data/app/assets/javascripts/lcms/engine/components/helpers/SearchResultsHeader.js.jsx +41 -0
  174. data/app/assets/javascripts/lcms/engine/components/helpers/TimeToTeach.js.jsx +29 -0
  175. data/app/assets/javascripts/lcms/engine/components/instruction-card/InstructionCard.js.jsx +57 -0
  176. data/app/assets/javascripts/lcms/engine/components/lesson-card/LessonCard.js.jsx +45 -0
  177. data/app/assets/javascripts/lcms/engine/components/materials/CollapsedMaterial.js.jsx +40 -0
  178. data/app/assets/javascripts/lcms/engine/components/materials/DocumentMaterialsList.js.jsx +33 -0
  179. data/app/assets/javascripts/lcms/engine/components/materials/ExpandedMaterial.js.jsx +37 -0
  180. data/app/assets/javascripts/lcms/engine/components/materials/MaterialsContainer.js.jsx +92 -0
  181. data/app/assets/javascripts/lcms/engine/components/materials/MaterialsList.js.jsx +19 -0
  182. data/app/assets/javascripts/lcms/engine/components/modals/DownloadModal.js.jsx +68 -0
  183. data/app/assets/javascripts/lcms/engine/components/related-instruction/RelatedInstruction.js.jsx +72 -0
  184. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdown.js.jsx +159 -0
  185. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdownResult.js.jsx +12 -0
  186. data/app/assets/javascripts/lcms/engine/components/search-dropdown/SearchDropdownResults.js.jsx +36 -0
  187. data/app/assets/javascripts/lcms/engine/components/search/SearchPage.js.jsx +44 -0
  188. data/app/assets/javascripts/lcms/engine/components/search/SearchResult.js.jsx +22 -0
  189. data/app/assets/javascripts/lcms/engine/components/search/SearchResults.js.jsx +17 -0
  190. data/app/assets/javascripts/lcms/engine/components/search/SearchResultsEmpty.js.jsx +25 -0
  191. data/app/assets/javascripts/lcms/engine/components/search/searchPageWrapper.js.jsx +77 -0
  192. data/app/assets/javascripts/lcms/engine/components/select-activity/SelectActivityConfirmationModal.js.jsx +107 -0
  193. data/app/assets/javascripts/lcms/engine/components/select-activity/SelectActivityToggle.js.jsx +39 -0
  194. data/app/assets/javascripts/lcms/engine/components/stores/ExcludesStore.js.jsx +11 -0
  195. data/app/assets/javascripts/lcms/engine/components/tabs/SimpleTab.js.jsx +130 -0
  196. data/app/assets/javascripts/lcms/engine/components/utils/UrlHistory.js.jsx +113 -0
  197. data/app/assets/javascripts/lcms/engine/components/utils/colorcodecss.js.jsx +4 -0
  198. data/app/assets/javascripts/lcms/engine/components/utils/converttobem.js.jsx +3 -0
  199. data/app/assets/javascripts/lcms/engine/components/utils/filterbarupdate.js.jsx +5 -0
  200. data/app/assets/javascripts/lcms/engine/components/utils/heaptrackpd.js.jsx +5 -0
  201. data/app/assets/javascripts/lcms/engine/components/utils/regexpescape.js.jsx +5 -0
  202. data/app/assets/javascripts/lcms/engine/components/utils/scalenumber.js.jsx +8 -0
  203. data/app/assets/javascripts/lcms/engine/generated/translations.js +40 -0
  204. data/app/assets/javascripts/lcms/engine/initializers/about_people.js +8 -0
  205. data/app/assets/javascripts/lcms/engine/initializers/bundles.js +12 -0
  206. data/app/assets/javascripts/lcms/engine/initializers/events.js +3 -0
  207. data/app/assets/javascripts/lcms/engine/initializers/freshdesk.js +18 -0
  208. data/app/assets/javascripts/lcms/engine/initializers/google_analytics.js +10 -0
  209. data/app/assets/javascripts/lcms/engine/initializers/header_dropdown.js +44 -0
  210. data/app/assets/javascripts/lcms/engine/initializers/heap_analytics.js +78 -0
  211. data/app/assets/javascripts/lcms/engine/initializers/leadership.js +22 -0
  212. data/app/assets/javascripts/lcms/engine/initializers/lessons.js +299 -0
  213. data/app/assets/javascripts/lcms/engine/initializers/loadasync.js +30 -0
  214. data/app/assets/javascripts/lcms/engine/initializers/pdf_preview.js +15 -0
  215. data/app/assets/javascripts/lcms/engine/initializers/resource_details.js +21 -0
  216. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SideBar.js.jsx +86 -0
  217. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarCGMenu.js.jsx +37 -0
  218. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarDocMenu.js.jsx +75 -0
  219. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarMobile.js.jsx +43 -0
  220. data/app/assets/javascripts/lcms/engine/initializers/sidebar/SidebarSticky.js.jsx +43 -0
  221. data/app/assets/javascripts/lcms/engine/initializers/sidebar/TopScroll.js.jsx +21 -0
  222. data/app/assets/javascripts/lcms/engine/initializers/social_sharing.js +29 -0
  223. data/app/assets/javascripts/lcms/engine/initializers/soundcloud.js +52 -0
  224. data/app/assets/javascripts/lcms/engine/initializers/subscribe_placeholder.js +12 -0
  225. data/app/assets/javascripts/lcms/engine/initializers/survey.js +31 -0
  226. data/app/assets/javascripts/lcms/engine/pdf_js_preview.js +52 -0
  227. data/app/assets/stylesheets/lcms/engine/admin.scss +102 -0
  228. data/app/assets/stylesheets/lcms/engine/admin/collections.scss +61 -0
  229. data/app/assets/stylesheets/lcms/engine/admin/components.scss +108 -0
  230. data/app/assets/stylesheets/lcms/engine/admin/curriculums.scss +65 -0
  231. data/app/assets/stylesheets/lcms/engine/admin/lessons.scss +109 -0
  232. data/app/assets/stylesheets/lcms/engine/admin/materials.scss +97 -0
  233. data/app/assets/stylesheets/lcms/engine/admin/resources.scss +55 -0
  234. data/app/assets/stylesheets/lcms/engine/admin/standards.scss +33 -0
  235. data/app/assets/stylesheets/lcms/engine/admin/users.scss +8 -0
  236. data/app/assets/stylesheets/lcms/engine/admin/welcome.scss +3 -0
  237. data/app/assets/stylesheets/lcms/engine/application.scss +90 -0
  238. data/app/assets/stylesheets/lcms/engine/base/_cg-colors.scss +48 -0
  239. data/app/assets/stylesheets/lcms/engine/base/_colors.scss +191 -0
  240. data/app/assets/stylesheets/lcms/engine/base/_fonts.scss +103 -0
  241. data/app/assets/stylesheets/lcms/engine/base/_icons.scss +342 -0
  242. data/app/assets/stylesheets/lcms/engine/base/_ld-colors.scss +26 -0
  243. data/app/assets/stylesheets/lcms/engine/base/_typography.scss +208 -0
  244. data/app/assets/stylesheets/lcms/engine/components/_assoc-picker.scss +63 -0
  245. data/app/assets/stylesheets/lcms/engine/components/_buttons.scss +200 -0
  246. data/app/assets/stylesheets/lcms/engine/components/_cards.scss +36 -0
  247. data/app/assets/stylesheets/lcms/engine/components/_cg-base.scss +22 -0
  248. data/app/assets/stylesheets/lcms/engine/components/_curriculum-cards.scss +237 -0
  249. data/app/assets/stylesheets/lcms/engine/components/_curriculum-map.scss +214 -0
  250. data/app/assets/stylesheets/lcms/engine/components/_download-modal.scss +56 -0
  251. data/app/assets/stylesheets/lcms/engine/components/_filterbar-modal.scss +20 -0
  252. data/app/assets/stylesheets/lcms/engine/components/_filterbar.scss +184 -0
  253. data/app/assets/stylesheets/lcms/engine/components/_generic-resource.scss +58 -0
  254. data/app/assets/stylesheets/lcms/engine/components/_inputs.scss +12 -0
  255. data/app/assets/stylesheets/lcms/engine/components/_instruction-cards.scss +163 -0
  256. data/app/assets/stylesheets/lcms/engine/components/_lesson-base.scss +31 -0
  257. data/app/assets/stylesheets/lcms/engine/components/_lesson-cards.scss +119 -0
  258. data/app/assets/stylesheets/lcms/engine/components/_ls-post.scss +38 -0
  259. data/app/assets/stylesheets/lcms/engine/components/_material-base.scss +6 -0
  260. data/app/assets/stylesheets/lcms/engine/components/_media-resources.scss +6 -0
  261. data/app/assets/stylesheets/lcms/engine/components/_media.scss +95 -0
  262. data/app/assets/stylesheets/lcms/engine/components/_pagination.scss +84 -0
  263. data/app/assets/stylesheets/lcms/engine/components/_panel-dsc.scss +37 -0
  264. data/app/assets/stylesheets/lcms/engine/components/_panel.scss +7 -0
  265. data/app/assets/stylesheets/lcms/engine/components/_related-instruction.scss +31 -0
  266. data/app/assets/stylesheets/lcms/engine/components/_resource.scss +217 -0
  267. data/app/assets/stylesheets/lcms/engine/components/_search-dropdown.scss +23 -0
  268. data/app/assets/stylesheets/lcms/engine/components/_search-header.scss +45 -0
  269. data/app/assets/stylesheets/lcms/engine/components/_search.scss +57 -0
  270. data/app/assets/stylesheets/lcms/engine/components/_sidebar.scss +159 -0
  271. data/app/assets/stylesheets/lcms/engine/components/_simple-tab.scss +57 -0
  272. data/app/assets/stylesheets/lcms/engine/components/_social-sharing.scss +20 -0
  273. data/app/assets/stylesheets/lcms/engine/components/_titles.scss +33 -0
  274. data/app/assets/stylesheets/lcms/engine/components/_top-scroll-button.scss +28 -0
  275. data/app/assets/stylesheets/lcms/engine/components/_unit-bundles.scss +14 -0
  276. data/app/assets/stylesheets/lcms/engine/components/cg/_annotations.scss +48 -0
  277. data/app/assets/stylesheets/lcms/engine/components/cg/_colorscheme.scss +60 -0
  278. data/app/assets/stylesheets/lcms/engine/components/cg/_contents-modal.scss +20 -0
  279. data/app/assets/stylesheets/lcms/engine/components/cg/_elements.scss +11 -0
  280. data/app/assets/stylesheets/lcms/engine/components/cg/_faq.scss +35 -0
  281. data/app/assets/stylesheets/lcms/engine/components/cg/_footnote.scss +20 -0
  282. data/app/assets/stylesheets/lcms/engine/components/cg/_hacks.scss +11 -0
  283. data/app/assets/stylesheets/lcms/engine/components/cg/_icons.scss +30 -0
  284. data/app/assets/stylesheets/lcms/engine/components/cg/_keywords.scss +5 -0
  285. data/app/assets/stylesheets/lcms/engine/components/cg/_links.scss +3 -0
  286. data/app/assets/stylesheets/lcms/engine/components/cg/_quotes.scss +18 -0
  287. data/app/assets/stylesheets/lcms/engine/components/cg/_standards.scss +23 -0
  288. data/app/assets/stylesheets/lcms/engine/components/cg/_table.scss +50 -0
  289. data/app/assets/stylesheets/lcms/engine/components/cg/_task.scss +43 -0
  290. data/app/assets/stylesheets/lcms/engine/components/cg/_video.scss +10 -0
  291. data/app/assets/stylesheets/lcms/engine/components/lesson/_activity.scss +81 -0
  292. data/app/assets/stylesheets/lcms/engine/components/lesson/_callout.scss +39 -0
  293. data/app/assets/stylesheets/lcms/engine/components/lesson/_columns.scss +15 -0
  294. data/app/assets/stylesheets/lcms/engine/components/lesson/_curriculum-map.scss +45 -0
  295. data/app/assets/stylesheets/lcms/engine/components/lesson/_def.scss +33 -0
  296. data/app/assets/stylesheets/lcms/engine/components/lesson/_expand.scss +42 -0
  297. data/app/assets/stylesheets/lcms/engine/components/lesson/_foundational-divider.scss +21 -0
  298. data/app/assets/stylesheets/lcms/engine/components/lesson/_gls.scss +3 -0
  299. data/app/assets/stylesheets/lcms/engine/components/lesson/_group.scss +3 -0
  300. data/app/assets/stylesheets/lcms/engine/components/lesson/_hr.scss +11 -0
  301. data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +62 -0
  302. data/app/assets/stylesheets/lcms/engine/components/lesson/_image-student-worksheet.scss +13 -0
  303. data/app/assets/stylesheets/lcms/engine/components/lesson/_image-wrap.scss +14 -0
  304. data/app/assets/stylesheets/lcms/engine/components/lesson/_image.scss +38 -0
  305. data/app/assets/stylesheets/lcms/engine/components/lesson/_indent.scss +11 -0
  306. data/app/assets/stylesheets/lcms/engine/components/lesson/_inset.scss +6 -0
  307. data/app/assets/stylesheets/lcms/engine/components/lesson/_materials.scss +22 -0
  308. data/app/assets/stylesheets/lcms/engine/components/lesson/_multiple-choice.scss +8 -0
  309. data/app/assets/stylesheets/lcms/engine/components/lesson/_optbreak.scss +20 -0
  310. data/app/assets/stylesheets/lcms/engine/components/lesson/_override.scss +61 -0
  311. data/app/assets/stylesheets/lcms/engine/components/lesson/_pd.scss +188 -0
  312. data/app/assets/stylesheets/lcms/engine/components/lesson/_position.scss +15 -0
  313. data/app/assets/stylesheets/lcms/engine/components/lesson/_pv.scss +15 -0
  314. data/app/assets/stylesheets/lcms/engine/components/lesson/_section.scss +31 -0
  315. data/app/assets/stylesheets/lcms/engine/components/lesson/_selection-control.scss +174 -0
  316. data/app/assets/stylesheets/lcms/engine/components/lesson/_sidebar.scss +190 -0
  317. data/app/assets/stylesheets/lcms/engine/components/lesson/_smp.scss +41 -0
  318. data/app/assets/stylesheets/lcms/engine/components/lesson/_title.scss +29 -0
  319. data/app/assets/stylesheets/lcms/engine/components/lesson/_unit-map.scss +31 -0
  320. data/app/assets/stylesheets/lcms/engine/components/lesson/_white-placeholder.scss +27 -0
  321. data/app/assets/stylesheets/lcms/engine/components/material/_list.scss +9 -0
  322. data/app/assets/stylesheets/lcms/engine/components/material/_material.scss +31 -0
  323. data/app/assets/stylesheets/lcms/engine/components/material/_overlay.scss +46 -0
  324. data/app/assets/stylesheets/lcms/engine/components/material/_preview.scss +24 -0
  325. data/app/assets/stylesheets/lcms/engine/components/material/_thumbnail.scss +4 -0
  326. data/app/assets/stylesheets/lcms/engine/components/support/_helpdesk.scss +25 -0
  327. data/app/assets/stylesheets/lcms/engine/components/support/_survey.scss +5 -0
  328. data/app/assets/stylesheets/lcms/engine/freshdesk/base/_colors.scss +25 -0
  329. data/app/assets/stylesheets/lcms/engine/freshdesk/base/_typography.scss +19 -0
  330. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_block.scss +5 -0
  331. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_buttons.scss +5 -0
  332. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_help-center.scss +59 -0
  333. data/app/assets/stylesheets/lcms/engine/freshdesk/components/_tabs.scss +33 -0
  334. data/app/assets/stylesheets/lcms/engine/freshdesk/freshdesk.scss +42 -0
  335. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_footer.scss +44 -0
  336. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_header.scss +49 -0
  337. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/_page.scss +40 -0
  338. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/footer.liquid +14 -0
  339. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/header.liquid +41 -0
  340. data/app/assets/stylesheets/lcms/engine/freshdesk/layout/page.liquid +22 -0
  341. data/app/assets/stylesheets/lcms/engine/freshdesk/pages/_portal-home.scss +18 -0
  342. data/app/assets/stylesheets/lcms/engine/freshdesk/pages/portal.home.liquid +74 -0
  343. data/app/assets/stylesheets/lcms/engine/freshdesk/themes/_settings.scss +19 -0
  344. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_breakpoint.scss +288 -0
  345. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_helpers.scss +22 -0
  346. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_unit.scss +95 -0
  347. data/app/assets/stylesheets/lcms/engine/freshdesk/utils/_value.scss +138 -0
  348. data/app/assets/stylesheets/lcms/engine/layout/_connect.scss +63 -0
  349. data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +150 -0
  350. data/app/assets/stylesheets/lcms/engine/layout/_header-search-form.scss +30 -0
  351. data/app/assets/stylesheets/lcms/engine/layout/_header.scss +244 -0
  352. data/app/assets/stylesheets/lcms/engine/layout/_navigation.scss +49 -0
  353. data/app/assets/stylesheets/lcms/engine/layout/_page.scss +77 -0
  354. data/app/assets/stylesheets/lcms/engine/layout/_sticky-header.scss +179 -0
  355. data/app/assets/stylesheets/lcms/engine/layout/_sticky-navigation.scss +124 -0
  356. data/app/assets/stylesheets/lcms/engine/layout/_subscribe.scss +68 -0
  357. data/app/assets/stylesheets/lcms/engine/pages/_about-people.scss +115 -0
  358. data/app/assets/stylesheets/lcms/engine/pages/_about.scss +61 -0
  359. data/app/assets/stylesheets/lcms/engine/pages/_content-guide.scss +205 -0
  360. data/app/assets/stylesheets/lcms/engine/pages/_enhance-instruction.scss +19 -0
  361. data/app/assets/stylesheets/lcms/engine/pages/_explore-curriculum.scss +46 -0
  362. data/app/assets/stylesheets/lcms/engine/pages/_find-lessons.scss +1 -0
  363. data/app/assets/stylesheets/lcms/engine/pages/_home.scss +237 -0
  364. data/app/assets/stylesheets/lcms/engine/pages/_leadership.scss +263 -0
  365. data/app/assets/stylesheets/lcms/engine/pages/_lesson-document.scss +138 -0
  366. data/app/assets/stylesheets/lcms/engine/pages/_unsupported.scss +18 -0
  367. data/app/assets/stylesheets/lcms/engine/pdf.scss +54 -0
  368. data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +36 -0
  369. data/app/assets/stylesheets/lcms/engine/print/_b64-fonts.scss.erb +65 -0
  370. data/app/assets/stylesheets/lcms/engine/print/_base.scss +74 -0
  371. data/app/assets/stylesheets/lcms/engine/print/_cg-base.scss +4 -0
  372. data/app/assets/stylesheets/lcms/engine/print/_colorscheme.scss +20 -0
  373. data/app/assets/stylesheets/lcms/engine/print/_cover.scss +83 -0
  374. data/app/assets/stylesheets/lcms/engine/print/_footer.scss +74 -0
  375. data/app/assets/stylesheets/lcms/engine/print/_gdoc-base.scss +46 -0
  376. data/app/assets/stylesheets/lcms/engine/print/_hacks.scss +6 -0
  377. data/app/assets/stylesheets/lcms/engine/print/_header.scss +11 -0
  378. data/app/assets/stylesheets/lcms/engine/print/_helpers.scss +19 -0
  379. data/app/assets/stylesheets/lcms/engine/print/_lesson-base.scss +18 -0
  380. data/app/assets/stylesheets/lcms/engine/print/_material-base.scss +3 -0
  381. data/app/assets/stylesheets/lcms/engine/print/_print.scss +15 -0
  382. data/app/assets/stylesheets/lcms/engine/print/_toc.scss +20 -0
  383. data/app/assets/stylesheets/lcms/engine/print/_typography.scss +63 -0
  384. data/app/assets/stylesheets/lcms/engine/print/cg/_base-typography.scss +21 -0
  385. data/app/assets/stylesheets/lcms/engine/print/cg/_breaks.scss +7 -0
  386. data/app/assets/stylesheets/lcms/engine/print/cg/_elements-typography.scss +14 -0
  387. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base-typography.scss +15 -0
  388. data/app/assets/stylesheets/lcms/engine/print/gdoc/_base.scss +27 -0
  389. data/app/assets/stylesheets/lcms/engine/print/gdoc/_colors.scss +26 -0
  390. data/app/assets/stylesheets/lcms/engine/print/gdoc/_header.scss +17 -0
  391. data/app/assets/stylesheets/lcms/engine/print/gdoc/_helpers.scss +56 -0
  392. data/app/assets/stylesheets/lcms/engine/print/gdoc/_mixins.scss +11 -0
  393. data/app/assets/stylesheets/lcms/engine/print/gdoc/_typography.scss +65 -0
  394. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_activity.scss +21 -0
  395. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_agenda.scss +12 -0
  396. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_callout.scss +32 -0
  397. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_def.scss +12 -0
  398. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_dialogue.scss +3 -0
  399. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_expand.scss +12 -0
  400. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_foundational-divider.scss +15 -0
  401. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_hr.scss +10 -0
  402. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_icons.scss +5 -0
  403. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image-wrap.scss +13 -0
  404. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image.scss +20 -0
  405. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_indent.scss +11 -0
  406. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_inset.scss +4 -0
  407. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_optbreak.scss +6 -0
  408. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_section.scss +37 -0
  409. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_smp.scss +9 -0
  410. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_tables.scss +43 -0
  411. data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_title.scss +27 -0
  412. data/app/assets/stylesheets/lcms/engine/print/gdoc/material/_header.scss +9 -0
  413. data/app/assets/stylesheets/lcms/engine/print/lesson/_base-typography.scss +25 -0
  414. data/app/assets/stylesheets/lcms/engine/print/lesson/_callout.scss +7 -0
  415. data/app/assets/stylesheets/lcms/engine/print/lesson/_def.scss +3 -0
  416. data/app/assets/stylesheets/lcms/engine/print/lesson/_expand.scss +11 -0
  417. data/app/assets/stylesheets/lcms/engine/print/lesson/_group.scss +3 -0
  418. data/app/assets/stylesheets/lcms/engine/print/lesson/_image.scss +5 -0
  419. data/app/assets/stylesheets/lcms/engine/print/lesson/_materials.scss +13 -0
  420. data/app/assets/stylesheets/lcms/engine/print/lesson/_optbreak.scss +5 -0
  421. data/app/assets/stylesheets/lcms/engine/print/lesson/_pd.scss +40 -0
  422. data/app/assets/stylesheets/lcms/engine/print/lesson/_pv.scss +16 -0
  423. data/app/assets/stylesheets/lcms/engine/print/lesson/_section.scss +6 -0
  424. data/app/assets/stylesheets/lcms/engine/print/lesson/_smp.scss +6 -0
  425. data/app/assets/stylesheets/lcms/engine/print/lesson/_title.scss +26 -0
  426. data/app/assets/stylesheets/lcms/engine/print/material/_content.scss +19 -0
  427. data/app/assets/stylesheets/lcms/engine/print/material/_header.scss +14 -0
  428. data/app/assets/stylesheets/lcms/engine/print/material/_list.scss +9 -0
  429. data/app/assets/stylesheets/lcms/engine/themes/_material.scss +89 -0
  430. data/app/assets/stylesheets/lcms/engine/themes/_settings.scss +575 -0
  431. data/app/assets/stylesheets/lcms/engine/utils/_colorcodes.scss +61 -0
  432. data/app/assets/stylesheets/lcms/engine/utils/_functions.scss +5 -0
  433. data/app/assets/stylesheets/lcms/engine/utils/_helpers.scss +216 -0
  434. data/app/assets/stylesheets/lcms/engine/utils/_mixins.scss +194 -0
  435. data/app/assets/stylesheets/lcms/engine/utils/_placeholders.scss +11 -0
  436. data/app/assets/stylesheets/lcms/engine/utils/_styles_override.scss +57 -0
  437. data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +63 -0
  438. data/app/assets/stylesheets/lcms/engine/vendors/foundation_and_overrides-pdf.scss +21 -0
  439. data/app/assets/stylesheets/lcms/engine/vendors/foundation_and_overrides.scss +44 -0
  440. data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +1 -0
  441. data/app/assets/stylesheets/lcms/engine/vendors/mathjax.css +117 -0
  442. data/app/assets/stylesheets/lcms/engine/vendors/swiper.css +547 -0
  443. data/app/controllers/concerns/lcms/engine/analytics_tracking.rb +51 -0
  444. data/app/controllers/concerns/lcms/engine/google_credentials.rb +15 -0
  445. data/app/controllers/concerns/lcms/engine/heap_notifyable.rb +20 -0
  446. data/app/controllers/concerns/lcms/engine/location_storable.rb +27 -0
  447. data/app/controllers/concerns/lcms/engine/nested_reimportable.rb +30 -0
  448. data/app/controllers/concerns/lcms/engine/reimportable.rb +19 -0
  449. data/app/controllers/lcms/engine/admin/access_codes_controller.rb +51 -0
  450. data/app/controllers/lcms/engine/admin/admin_controller.rb +84 -0
  451. data/app/controllers/lcms/engine/admin/association_picker_controller.rb +59 -0
  452. data/app/controllers/lcms/engine/admin/batch_reimports_controller.rb +43 -0
  453. data/app/controllers/lcms/engine/admin/configurable_admin.rb +56 -0
  454. data/app/controllers/lcms/engine/admin/curriculums_controller.rb +23 -0
  455. data/app/controllers/lcms/engine/admin/documents_controller.rb +121 -0
  456. data/app/controllers/lcms/engine/admin/google_oauth2_controller.rb +15 -0
  457. data/app/controllers/lcms/engine/admin/materials_controller.rb +98 -0
  458. data/app/controllers/lcms/engine/admin/pages_controller.rb +54 -0
  459. data/app/controllers/lcms/engine/admin/resource_bulk_edits_controller.rb +40 -0
  460. data/app/controllers/lcms/engine/admin/resource_picker_controller.rb +58 -0
  461. data/app/controllers/lcms/engine/admin/resources_controller.rb +180 -0
  462. data/app/controllers/lcms/engine/admin/settings_controller.rb +15 -0
  463. data/app/controllers/lcms/engine/admin/sketch_compilers_controller.rb +37 -0
  464. data/app/controllers/lcms/engine/admin/standards_controller.rb +40 -0
  465. data/app/controllers/lcms/engine/admin/users_controller.rb +68 -0
  466. data/app/controllers/lcms/engine/admin/welcome_controller.rb +11 -0
  467. data/app/controllers/lcms/engine/analytics_exclusion_controller.rb +14 -0
  468. data/app/controllers/lcms/engine/application_controller.rb +68 -0
  469. data/app/controllers/lcms/engine/documents_controller.rb +95 -0
  470. data/app/controllers/lcms/engine/downloads_controller.rb +50 -0
  471. data/app/controllers/lcms/engine/enhance_instruction_controller.rb +18 -0
  472. data/app/controllers/lcms/engine/explore_curriculum_controller.rb +28 -0
  473. data/app/controllers/lcms/engine/find_lessons_controller.rb +15 -0
  474. data/app/controllers/lcms/engine/materials_controller.rb +49 -0
  475. data/app/controllers/lcms/engine/pages_controller.rb +26 -0
  476. data/app/controllers/lcms/engine/registrations_controller.rb +30 -0
  477. data/app/controllers/lcms/engine/resources_controller.rb +77 -0
  478. data/app/controllers/lcms/engine/search_controller.rb +15 -0
  479. data/app/controllers/lcms/engine/sessions_controller.rb +19 -0
  480. data/app/controllers/lcms/engine/surveys_controller.rb +55 -0
  481. data/app/controllers/lcms/engine/welcome_controller.rb +9 -0
  482. data/app/entities/lcms/engine/breadcrumbs.rb +98 -0
  483. data/app/entities/lcms/engine/curriculum_map.rb +51 -0
  484. data/app/entities/lcms/engine/external_page.rb +23 -0
  485. data/app/entities/lcms/engine/filterbar.rb +95 -0
  486. data/app/entities/lcms/engine/grades.rb +81 -0
  487. data/app/entities/lcms/engine/hierarchical_position.rb +83 -0
  488. data/app/entities/lcms/engine/media_embed.rb +34 -0
  489. data/app/entities/lcms/engine/pagination.rb +44 -0
  490. data/app/entities/lcms/engine/roman_numerals.rb +48 -0
  491. data/app/entities/lcms/engine/slug.rb +27 -0
  492. data/app/exceptions/components_api_error.rb +4 -0
  493. data/app/exceptions/document_error.rb +4 -0
  494. data/app/exceptions/material_error.rb +4 -0
  495. data/app/forms/lcms/engine/curriculum_form.rb +133 -0
  496. data/app/forms/lcms/engine/document_form.rb +81 -0
  497. data/app/forms/lcms/engine/material_form.rb +49 -0
  498. data/app/forms/lcms/engine/survey_form.rb +49 -0
  499. data/app/helpers/admin/components_helper.rb +67 -0
  500. data/app/helpers/admin/documents_helper.rb +11 -0
  501. data/app/helpers/admin/resource_helper.rb +36 -0
  502. data/app/helpers/admin/welcome_helper.rb +6 -0
  503. data/app/helpers/lcms/engine/application_helper.rb +16 -0
  504. data/app/helpers/lcms/engine/documents_helper.rb +11 -0
  505. data/app/helpers/lcms/engine/download_helper.rb +11 -0
  506. data/app/helpers/lcms/engine/media_helper.rb +20 -0
  507. data/app/helpers/lcms/engine/pages_helper.rb +15 -0
  508. data/app/helpers/lcms/engine/resource_helper.rb +93 -0
  509. data/app/helpers/lcms/engine/tags_helper.rb +32 -0
  510. data/app/helpers/lcms/engine/view_helper.rb +150 -0
  511. data/app/interactors/lcms/engine/base_interactor.rb +50 -0
  512. data/app/interactors/lcms/engine/enhance_instruction_interactor.rb +61 -0
  513. data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +81 -0
  514. data/app/interactors/lcms/engine/find_lessons_interactor.rb +46 -0
  515. data/app/interactors/lcms/engine/search_interactor.rb +33 -0
  516. data/app/javascript/components/admin/ImportStatus.jsx +125 -0
  517. data/app/javascript/components/admin/Initializer.jsx +41 -0
  518. data/app/javascript/components/admin/MultiSelectedOperation.jsx +39 -0
  519. data/app/javascript/components/admin/association-picker/AssociationPicker.jsx +104 -0
  520. data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +24 -0
  521. data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +47 -0
  522. data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +73 -0
  523. data/app/javascript/components/admin/curriculum/CurriculumEditor.jsx +125 -0
  524. data/app/javascript/components/admin/curriculum/DirectoryPicker.jsx +98 -0
  525. data/app/javascript/components/admin/picker/PickerButton.jsx +22 -0
  526. data/app/javascript/components/admin/picker/pickerModal.jsx +11 -0
  527. data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +87 -0
  528. data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +92 -0
  529. data/app/javascript/components/admin/resource-picker/ResourcePickerResource.jsx +13 -0
  530. data/app/javascript/components/admin/resource-picker/ResourcePickerWindow.jsx +115 -0
  531. data/app/javascript/components/paginate/PageView.jsx +29 -0
  532. data/app/javascript/components/paginate/PaginationBoxView.jsx +136 -0
  533. data/app/javascript/components/paginate/PaginationListView.jsx +96 -0
  534. data/app/javascript/packs/admin.js +14 -0
  535. data/app/javascript/packs/application.js +24 -0
  536. data/app/javascript/packs/server_rendering.js +5 -0
  537. data/app/jobs/concerns/lcms/engine/nested_resque_job.rb +50 -0
  538. data/app/jobs/concerns/lcms/engine/retry_delayed.rb +31 -0
  539. data/app/jobs/concerns/lcms/engine/retry_simple.rb +15 -0
  540. data/app/jobs/lcms/engine/application_job.rb +8 -0
  541. data/app/jobs/lcms/engine/document_bundle_generate_job.rb +18 -0
  542. data/app/jobs/lcms/engine/document_generate_gdoc_job.rb +49 -0
  543. data/app/jobs/lcms/engine/document_generate_job.rb +132 -0
  544. data/app/jobs/lcms/engine/document_generate_pdf_job.rb +33 -0
  545. data/app/jobs/lcms/engine/document_parse_job.rb +53 -0
  546. data/app/jobs/lcms/engine/material_generate_gdoc_job.rb +41 -0
  547. data/app/jobs/lcms/engine/material_generate_job.rb +21 -0
  548. data/app/jobs/lcms/engine/material_generate_pdf_job.rb +56 -0
  549. data/app/jobs/lcms/engine/material_parse_job.rb +33 -0
  550. data/app/mailers/lcms/engine/application_mailer.rb +11 -0
  551. data/app/middleware/remove_session.rb +56 -0
  552. data/app/models/concerns/lcms/engine/navigable.rb +43 -0
  553. data/app/models/concerns/lcms/engine/searchable.rb +53 -0
  554. data/app/models/lcms/engine/access_code.rb +12 -0
  555. data/app/models/lcms/engine/author.rb +10 -0
  556. data/app/models/lcms/engine/component.rb +88 -0
  557. data/app/models/lcms/engine/copyright_attribution.rb +10 -0
  558. data/app/models/lcms/engine/curriculum.rb +16 -0
  559. data/app/models/lcms/engine/document.rb +162 -0
  560. data/app/models/lcms/engine/document_bundle.rb +52 -0
  561. data/app/models/lcms/engine/document_part.rb +17 -0
  562. data/app/models/lcms/engine/download.rb +60 -0
  563. data/app/models/lcms/engine/download_category.rb +30 -0
  564. data/app/models/lcms/engine/leadership_post.rb +16 -0
  565. data/app/models/lcms/engine/material.rb +58 -0
  566. data/app/models/lcms/engine/material_part.rb +14 -0
  567. data/app/models/lcms/engine/page.rb +13 -0
  568. data/app/models/lcms/engine/reading_assignment_author.rb +9 -0
  569. data/app/models/lcms/engine/reading_assignment_text.rb +13 -0
  570. data/app/models/lcms/engine/resource.rb +343 -0
  571. data/app/models/lcms/engine/resource_additional_resource.rb +10 -0
  572. data/app/models/lcms/engine/resource_download.rb +17 -0
  573. data/app/models/lcms/engine/resource_reading_assignment.rb +10 -0
  574. data/app/models/lcms/engine/resource_related_resource.rb +10 -0
  575. data/app/models/lcms/engine/resource_standard.rb +10 -0
  576. data/app/models/lcms/engine/search/document.rb +154 -0
  577. data/app/models/lcms/engine/search/elastic_search_document.rb +59 -0
  578. data/app/models/lcms/engine/search/repository.rb +223 -0
  579. data/app/models/lcms/engine/settings.rb +23 -0
  580. data/app/models/lcms/engine/social_thumbnail.rb +16 -0
  581. data/app/models/lcms/engine/staff_member.rb +20 -0
  582. data/app/models/lcms/engine/standard.rb +99 -0
  583. data/app/models/lcms/engine/standard_link.rb +10 -0
  584. data/app/models/lcms/engine/tag.rb +11 -0
  585. data/app/models/lcms/engine/tagging.rb +13 -0
  586. data/app/models/lcms/engine/user.rb +56 -0
  587. data/app/presenters/lcms/engine/base_presenter.rb +24 -0
  588. data/app/presenters/lcms/engine/content_presenter.rb +74 -0
  589. data/app/presenters/lcms/engine/curriculum_presenter.rb +45 -0
  590. data/app/presenters/lcms/engine/document_presenter.rb +216 -0
  591. data/app/presenters/lcms/engine/generic_presenter.rb +25 -0
  592. data/app/presenters/lcms/engine/material_presenter.rb +158 -0
  593. data/app/presenters/lcms/engine/media_presenter.rb +31 -0
  594. data/app/presenters/lcms/engine/resource_presenter.rb +40 -0
  595. data/app/presenters/lcms/engine/social_media_presenter.rb +83 -0
  596. data/app/queries/lcms/engine/admin_documents_query.rb +43 -0
  597. data/app/queries/lcms/engine/admin_materials_query.rb +52 -0
  598. data/app/queries/lcms/engine/base_query.rb +27 -0
  599. data/app/serializers/lcms/engine/association_item_serializer.rb +10 -0
  600. data/app/serializers/lcms/engine/curriculum_resource_serializer.rb +74 -0
  601. data/app/serializers/lcms/engine/document_material_serializer.rb +28 -0
  602. data/app/serializers/lcms/engine/material_serializer.rb +17 -0
  603. data/app/serializers/lcms/engine/previews_material_serializer.rb +57 -0
  604. data/app/serializers/lcms/engine/resource_details_serializer.rb +55 -0
  605. data/app/serializers/lcms/engine/resource_instruction_serializer.rb +55 -0
  606. data/app/serializers/lcms/engine/resource_picker_serializer.rb +11 -0
  607. data/app/serializers/lcms/engine/resource_serializer.rb +51 -0
  608. data/app/serializers/lcms/engine/search_document_serializer.rb +54 -0
  609. data/app/serializers/lcms/engine/search_resource_serializer.rb +12 -0
  610. data/app/services/lcms/engine/bulk_edit_resources_service.rb +43 -0
  611. data/app/services/lcms/engine/bundle_generator.rb +11 -0
  612. data/app/services/lcms/engine/document_build_service.rb +203 -0
  613. data/app/services/lcms/engine/document_generator.rb +96 -0
  614. data/app/services/lcms/engine/embed_equations.rb +81 -0
  615. data/app/services/lcms/engine/generate_hierarchical_positions.rb +21 -0
  616. data/app/services/lcms/engine/generate_thumbnails.rb +54 -0
  617. data/app/services/lcms/engine/google/drive_service.rb +86 -0
  618. data/app/services/lcms/engine/google/script_service.rb +61 -0
  619. data/app/services/lcms/engine/html_sanitizer.rb +448 -0
  620. data/app/services/lcms/engine/lessons_gdoc_bundler.rb +88 -0
  621. data/app/services/lcms/engine/lessons_pdf_bundler.rb +74 -0
  622. data/app/services/lcms/engine/lti_exporter.rb +62 -0
  623. data/app/services/lcms/engine/material_build_service.rb +111 -0
  624. data/app/services/lcms/engine/material_preview_generator.rb +63 -0
  625. data/app/services/lcms/engine/react_materials_resolver.rb +43 -0
  626. data/app/services/lcms/engine/related_instructions_service.rb +57 -0
  627. data/app/services/lcms/engine/s3_service.rb +26 -0
  628. data/app/services/lcms/engine/sketch_compiler.rb +33 -0
  629. data/app/services/lcms/engine/svg_social_thumbnail.rb +223 -0
  630. data/app/tasks/resource_tasks.rb +54 -0
  631. data/app/uploaders/backup_uploader.rb +7 -0
  632. data/app/uploaders/document_bundle_uploader.rb +11 -0
  633. data/app/uploaders/download_uploader.rb +11 -0
  634. data/app/uploaders/resource_image_uploader.rb +7 -0
  635. data/app/uploaders/social_thumbnail_uploader.rb +11 -0
  636. data/app/uploaders/staff_image_uploader.rb +7 -0
  637. data/app/views/devise/confirmations/new.html.erb +23 -0
  638. data/app/views/devise/mailer/confirmation_instructions.html.erb +9 -0
  639. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  640. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  641. data/app/views/devise/passwords/edit.html.erb +25 -0
  642. data/app/views/devise/passwords/new.html.erb +23 -0
  643. data/app/views/devise/registrations/edit.html.erb +45 -0
  644. data/app/views/devise/registrations/new.html.erb +40 -0
  645. data/app/views/devise/sessions/new.html.erb +29 -0
  646. data/app/views/devise/shared/_links.html.erb +21 -0
  647. data/app/views/devise/unlocks/new.html.erb +16 -0
  648. data/app/views/layouts/lcms/engine/admin.html.erb +29 -0
  649. data/app/views/layouts/lcms/engine/application.html.erb +37 -0
  650. data/app/views/layouts/lcms/engine/cg_pdf.erb +50 -0
  651. data/app/views/layouts/lcms/engine/cg_plain_pdf.erb +34 -0
  652. data/app/views/layouts/lcms/engine/ld_docx.html.erb +16 -0
  653. data/app/views/layouts/lcms/engine/ld_gdoc.html.erb +14 -0
  654. data/app/views/layouts/lcms/engine/lti.html.erb +26 -0
  655. data/app/views/lcms/engine/admin/access_codes/_form.html.erb +5 -0
  656. data/app/views/lcms/engine/admin/access_codes/edit.html.erb +8 -0
  657. data/app/views/lcms/engine/admin/access_codes/index.html.erb +37 -0
  658. data/app/views/lcms/engine/admin/access_codes/new.html.erb +4 -0
  659. data/app/views/lcms/engine/admin/batch_reimports/_search_form.html.erb +32 -0
  660. data/app/views/lcms/engine/admin/batch_reimports/import.html.erb +10 -0
  661. data/app/views/lcms/engine/admin/batch_reimports/new.html.erb +11 -0
  662. data/app/views/lcms/engine/admin/curriculums/edit.html.erb +13 -0
  663. data/app/views/lcms/engine/admin/documents/_content.html.erb +11 -0
  664. data/app/views/lcms/engine/admin/documents/_header.html.erb +30 -0
  665. data/app/views/lcms/engine/admin/documents/_materials_links.html.erb +14 -0
  666. data/app/views/lcms/engine/admin/documents/_reimport.html.erb +7 -0
  667. data/app/views/lcms/engine/admin/documents/_search_form.html.erb +52 -0
  668. data/app/views/lcms/engine/admin/documents/import.html.erb +11 -0
  669. data/app/views/lcms/engine/admin/documents/index.html.erb +86 -0
  670. data/app/views/lcms/engine/admin/documents/new.html.erb +8 -0
  671. data/app/views/lcms/engine/admin/materials/_import_results.html.erb +18 -0
  672. data/app/views/lcms/engine/admin/materials/_reimport.html.erb +5 -0
  673. data/app/views/lcms/engine/admin/materials/_search_form.html.erb +85 -0
  674. data/app/views/lcms/engine/admin/materials/import.html.erb +11 -0
  675. data/app/views/lcms/engine/admin/materials/index.html.erb +98 -0
  676. data/app/views/lcms/engine/admin/materials/new.html.erb +9 -0
  677. data/app/views/lcms/engine/admin/pages/_form.html.erb +8 -0
  678. data/app/views/lcms/engine/admin/pages/edit.html.erb +9 -0
  679. data/app/views/lcms/engine/admin/pages/index.html.erb +25 -0
  680. data/app/views/lcms/engine/admin/pages/new.html.erb +5 -0
  681. data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +21 -0
  682. data/app/views/lcms/engine/admin/resources/_download_categories.html.erb +19 -0
  683. data/app/views/lcms/engine/admin/resources/_fields.html.erb +73 -0
  684. data/app/views/lcms/engine/admin/resources/_form.html.erb +15 -0
  685. data/app/views/lcms/engine/admin/resources/_search_form.html.erb +21 -0
  686. data/app/views/lcms/engine/admin/resources/edit.html.erb +13 -0
  687. data/app/views/lcms/engine/admin/resources/index.html.erb +60 -0
  688. data/app/views/lcms/engine/admin/resources/new.html.erb +4 -0
  689. data/app/views/lcms/engine/admin/shared/_header.html.erb +59 -0
  690. data/app/views/lcms/engine/admin/sketch_compilers/_compiler_v1.html.erb +4 -0
  691. data/app/views/lcms/engine/admin/sketch_compilers/_compiler_v2.html.erb +2 -0
  692. data/app/views/lcms/engine/admin/sketch_compilers/new.html.erb +9 -0
  693. data/app/views/lcms/engine/admin/standards/_form.html.erb +16 -0
  694. data/app/views/lcms/engine/admin/standards/_search_form.html.erb +8 -0
  695. data/app/views/lcms/engine/admin/standards/edit.html.erb +9 -0
  696. data/app/views/lcms/engine/admin/standards/index.html.erb +36 -0
  697. data/app/views/lcms/engine/admin/users/_form.html.erb +24 -0
  698. data/app/views/lcms/engine/admin/users/_search_form.html.erb +10 -0
  699. data/app/views/lcms/engine/admin/users/edit.html.erb +9 -0
  700. data/app/views/lcms/engine/admin/users/index.html.erb +50 -0
  701. data/app/views/lcms/engine/admin/users/new.html.erb +5 -0
  702. data/app/views/lcms/engine/admin/welcome/index.html.erb +8 -0
  703. data/app/views/lcms/engine/analytics_exclusion/exclude.html.erb +31 -0
  704. data/app/views/lcms/engine/documents/_attribution.html.erb +9 -0
  705. data/app/views/lcms/engine/documents/_content.html.erb +19 -0
  706. data/app/views/lcms/engine/documents/_header.html.erb +38 -0
  707. data/app/views/lcms/engine/documents/_helpdesk.html.erb +9 -0
  708. data/app/views/lcms/engine/documents/_nav.html.erb +17 -0
  709. data/app/views/lcms/engine/documents/_nav_contents.html.erb +16 -0
  710. data/app/views/lcms/engine/documents/_nav_item.html.erb +28 -0
  711. data/app/views/lcms/engine/documents/_nav_opt_break.html.erb +5 -0
  712. data/app/views/lcms/engine/documents/_nav_resources.html.erb +15 -0
  713. data/app/views/lcms/engine/documents/_nav_resources_item.html.erb +9 -0
  714. data/app/views/lcms/engine/documents/_print_export.html.erb +50 -0
  715. data/app/views/lcms/engine/documents/_sticky_header.html.erb +55 -0
  716. data/app/views/lcms/engine/documents/_sticky_site_menu.html.erb +11 -0
  717. data/app/views/lcms/engine/documents/_sticky_unit_map.html.erb +6 -0
  718. data/app/views/lcms/engine/documents/export_gdoc.html.erb +13 -0
  719. data/app/views/lcms/engine/documents/gdoc/_agenda.html.erb +70 -0
  720. data/app/views/lcms/engine/documents/gdoc/_content.html.erb +5 -0
  721. data/app/views/lcms/engine/documents/gdoc/_header.html.erb +22 -0
  722. data/app/views/lcms/engine/documents/gdoc/materials/_header.html.erb +29 -0
  723. data/app/views/lcms/engine/documents/gdoc/materials/show.html.erb +20 -0
  724. data/app/views/lcms/engine/documents/gdoc/show.html.erb +3 -0
  725. data/app/views/lcms/engine/documents/pdf/_content.html.erb +13 -0
  726. data/app/views/lcms/engine/documents/pdf/_footer.erb +27 -0
  727. data/app/views/lcms/engine/documents/pdf/_header.html.erb +20 -0
  728. data/app/views/lcms/engine/documents/pdf/materials/_header.html.erb +20 -0
  729. data/app/views/lcms/engine/documents/pdf/materials/show.html.erb +26 -0
  730. data/app/views/lcms/engine/documents/pdf/show.html.erb +12 -0
  731. data/app/views/lcms/engine/documents/show.html.erb +31 -0
  732. data/app/views/lcms/engine/documents/show_lti.html.erb +15 -0
  733. data/app/views/lcms/engine/downloads/preview.html.erb +16 -0
  734. data/app/views/lcms/engine/enhance_instruction/index.html.erb +1 -0
  735. data/app/views/lcms/engine/explore_curriculum/index.html.erb +3 -0
  736. data/app/views/lcms/engine/find_lessons/index.html.erb +1 -0
  737. data/app/views/lcms/engine/materials/show.html.erb +35 -0
  738. data/app/views/lcms/engine/pages/_about_people_staff.html.erb +27 -0
  739. data/app/views/lcms/engine/pages/_leadership_in_action.html.erb +25 -0
  740. data/app/views/lcms/engine/pages/_leadership_why_i_lead.html.erb +34 -0
  741. data/app/views/lcms/engine/pages/about.html.erb +87 -0
  742. data/app/views/lcms/engine/pages/about_people.html.erb +27 -0
  743. data/app/views/lcms/engine/pages/forthcoming.html.erb +9 -0
  744. data/app/views/lcms/engine/pages/leadership.html.erb +82 -0
  745. data/app/views/lcms/engine/pages/not_found.html.erb +9 -0
  746. data/app/views/lcms/engine/pages/privacy.html.erb +9 -0
  747. data/app/views/lcms/engine/pages/show.html.erb +8 -0
  748. data/app/views/lcms/engine/pages/show_slug.html.erb +0 -0
  749. data/app/views/lcms/engine/pages/tos.html.erb +9 -0
  750. data/app/views/lcms/engine/resources/_children_list.html.erb +25 -0
  751. data/app/views/lcms/engine/resources/_copyright_icons_generic.html.erb +9 -0
  752. data/app/views/lcms/engine/resources/_download.html.erb +28 -0
  753. data/app/views/lcms/engine/resources/_download_form.html.erb +24 -0
  754. data/app/views/lcms/engine/resources/_downloads.html.erb +43 -0
  755. data/app/views/lcms/engine/resources/_engageny.html.erb +28 -0
  756. data/app/views/lcms/engine/resources/_engageny_generic.html.erb +6 -0
  757. data/app/views/lcms/engine/resources/_header.html.erb +5 -0
  758. data/app/views/lcms/engine/resources/_prerequisites_standards.html.erb +13 -0
  759. data/app/views/lcms/engine/resources/_tags.html.erb +18 -0
  760. data/app/views/lcms/engine/resources/_unit_bundles.html.erb +29 -0
  761. data/app/views/lcms/engine/resources/generic.html.erb +68 -0
  762. data/app/views/lcms/engine/resources/media.html.erb +59 -0
  763. data/app/views/lcms/engine/resources/show.html.erb +128 -0
  764. data/app/views/lcms/engine/search/index.html.erb +1 -0
  765. data/app/views/lcms/engine/shared/_additional_resources.html.erb +7 -0
  766. data/app/views/lcms/engine/shared/_connect.html.erb +60 -0
  767. data/app/views/lcms/engine/shared/_favicon.html.erb +6 -0
  768. data/app/views/lcms/engine/shared/_flash.html.erb +13 -0
  769. data/app/views/lcms/engine/shared/_footer.html.erb +11 -0
  770. data/app/views/lcms/engine/shared/_freshdesk.html.erb +22 -0
  771. data/app/views/lcms/engine/shared/_google_analytics.html.erb +9 -0
  772. data/app/views/lcms/engine/shared/_header.html.erb +79 -0
  773. data/app/views/lcms/engine/shared/_heap_analytics.html.erb +7 -0
  774. data/app/views/lcms/engine/shared/_lesson_svg.html +3 -0
  775. data/app/views/lcms/engine/shared/_open_graph_meta.html.erb +15 -0
  776. data/app/views/lcms/engine/shared/_open_graph_meta_js.html.erb +39 -0
  777. data/app/views/lcms/engine/shared/_search_form.html.erb +10 -0
  778. data/app/views/lcms/engine/shared/_social_sharing.html.erb +22 -0
  779. data/app/views/lcms/engine/shared/_social_sharing_menu.html.erb +34 -0
  780. data/app/views/lcms/engine/shared/_subscribe.html.erb +30 -0
  781. data/app/views/lcms/engine/shared/_unsupported.html.erb +3 -0
  782. data/app/views/lcms/engine/shared/social_thumbnail.svg.erb +54 -0
  783. data/app/views/lcms/engine/surveys/show.html.erb +94 -0
  784. data/app/views/lcms/engine/welcome/index.html.erb +80 -0
  785. data/bin/overcommit +29 -0
  786. data/bin/rails +22 -0
  787. data/bin/rspec +29 -0
  788. data/bin/webpack +15 -0
  789. data/bin/webpack-dev-server +15 -0
  790. data/config/initializers/active_record.rb +3 -0
  791. data/config/initializers/airbrake.rb +39 -0
  792. data/config/initializers/bitly.rb +10 -0
  793. data/config/initializers/carrier_wave.rb +20 -0
  794. data/config/initializers/devise.rb +291 -0
  795. data/config/initializers/elasticsearch.rb +8 -0
  796. data/config/initializers/form_tag.rb +17 -0
  797. data/config/initializers/heap.rb +3 -0
  798. data/config/initializers/mime_types.rb +8 -0
  799. data/config/initializers/rack_profiler.rb +22 -0
  800. data/config/initializers/resque.rb +12 -0
  801. data/config/initializers/simple_form.rb +169 -0
  802. data/config/initializers/simple_form_foundation.rb +110 -0
  803. data/config/initializers/wicked_pdf.rb +9 -0
  804. data/config/initializers/will_paginate.rb +3 -0
  805. data/config/locales/admin/en.yml +276 -0
  806. data/config/locales/devise.en.yml +64 -0
  807. data/config/locales/documents/en.yml +23 -0
  808. data/config/locales/en.yml +60 -0
  809. data/config/locales/models/en.yml +30 -0
  810. data/config/locales/pages/en.yml +127 -0
  811. data/config/locales/simple_form.en.yml +31 -0
  812. data/config/locales/ui/en.yml +171 -0
  813. data/config/routes.rb +114 -0
  814. data/config/spring.rb +3 -0
  815. data/config/webpack/development.js +5 -0
  816. data/config/webpack/environment.js +3 -0
  817. data/config/webpack/production.js +5 -0
  818. data/config/webpack/test.js +5 -0
  819. data/config/webpacker.yml +96 -0
  820. data/db/schema.rb +452 -0
  821. data/db/seeds.rb +15 -0
  822. data/db/seeds/authors.seeds.rb +3 -0
  823. data/db/seeds/curriculums.seeds.rb +16 -0
  824. data/db/seeds/development/grades.seeds.rb +38 -0
  825. data/db/seeds/development/users.seeds.rb +4 -0
  826. data/db/seeds/download_categories.seeds.rb +4 -0
  827. data/db/seeds/pages.seeds.rb +26 -0
  828. data/db/seeds/subjects.seeds.rb +14 -0
  829. data/lcms-engine.gemspec +131 -0
  830. data/lib/asset_helper.rb +51 -0
  831. data/lib/doc_template.rb +71 -0
  832. data/lib/doc_template/document.rb +213 -0
  833. data/lib/doc_template/document_toc.rb +17 -0
  834. data/lib/doc_template/objects/activity_metadata.rb +62 -0
  835. data/lib/doc_template/objects/agenda_metadata.rb +93 -0
  836. data/lib/doc_template/objects/base_metadata.rb +48 -0
  837. data/lib/doc_template/objects/material_metadata.rb +55 -0
  838. data/lib/doc_template/objects/metadata_helpers.rb +27 -0
  839. data/lib/doc_template/objects/sections_metadata.rb +58 -0
  840. data/lib/doc_template/objects/toc_helpers.rb +52 -0
  841. data/lib/doc_template/objects/toc_metadata.rb +107 -0
  842. data/lib/doc_template/tables/activity.rb +52 -0
  843. data/lib/doc_template/tables/agenda.rb +93 -0
  844. data/lib/doc_template/tables/base.rb +137 -0
  845. data/lib/doc_template/tables/foundational_metadata.rb +10 -0
  846. data/lib/doc_template/tables/material_metadata.rb +26 -0
  847. data/lib/doc_template/tables/metadata.rb +16 -0
  848. data/lib/doc_template/tables/section.rb +49 -0
  849. data/lib/doc_template/tables/target.rb +51 -0
  850. data/lib/doc_template/tags.rb +14 -0
  851. data/lib/doc_template/tags/activity_metadata_section_tag.rb +76 -0
  852. data/lib/doc_template/tags/activity_metadata_type_tag.rb +77 -0
  853. data/lib/doc_template/tags/answer_space_tag.rb +26 -0
  854. data/lib/doc_template/tags/base_tag.rb +191 -0
  855. data/lib/doc_template/tags/block_tag.rb +48 -0
  856. data/lib/doc_template/tags/callout_tag.rb +49 -0
  857. data/lib/doc_template/tags/columns_tag.rb +117 -0
  858. data/lib/doc_template/tags/core_content_objectives_tag.rb +24 -0
  859. data/lib/doc_template/tags/def_tag.rb +51 -0
  860. data/lib/doc_template/tags/default_tag.rb +19 -0
  861. data/lib/doc_template/tags/dialogue_tag.rb +49 -0
  862. data/lib/doc_template/tags/expand_tag.rb +41 -0
  863. data/lib/doc_template/tags/gls_tag.rb +19 -0
  864. data/lib/doc_template/tags/group_tag.rb +49 -0
  865. data/lib/doc_template/tags/heading_tag.rb +90 -0
  866. data/lib/doc_template/tags/helpers.rb +32 -0
  867. data/lib/doc_template/tags/image_student_worksheet_tag.rb +53 -0
  868. data/lib/doc_template/tags/image_tag.rb +32 -0
  869. data/lib/doc_template/tags/indent_tag.rb +45 -0
  870. data/lib/doc_template/tags/inset_tag.rb +45 -0
  871. data/lib/doc_template/tags/language_arts_objectives_tag.rb +24 -0
  872. data/lib/doc_template/tags/latex_tag.rb +84 -0
  873. data/lib/doc_template/tags/link_tag.rb +70 -0
  874. data/lib/doc_template/tags/materials_tag.rb +19 -0
  875. data/lib/doc_template/tags/multiple_choice_tag.rb +22 -0
  876. data/lib/doc_template/tags/opt_break_tag.rb +25 -0
  877. data/lib/doc_template/tags/page_break_tag.rb +24 -0
  878. data/lib/doc_template/tags/pd_tag.rb +127 -0
  879. data/lib/doc_template/tags/position_tag.rb +26 -0
  880. data/lib/doc_template/tags/pv_tag.rb +24 -0
  881. data/lib/doc_template/tags/section_tag.rb +69 -0
  882. data/lib/doc_template/tags/smp_tag.rb +26 -0
  883. data/lib/doc_template/tags/source_tag.rb +22 -0
  884. data/lib/doc_template/tags/standard_tag.rb +70 -0
  885. data/lib/doc_template/tags/table_preserve_alignment_tag.rb +39 -0
  886. data/lib/doc_template/tags/table_tag.rb +22 -0
  887. data/lib/doc_template/tags/task_tag.rb +17 -0
  888. data/lib/doc_template/tags/vocab_tag.rb +24 -0
  889. data/lib/doc_template/tags/vocabulary_tag.rb +38 -0
  890. data/lib/doc_template/tags/white_placeholder_tag.rb +46 -0
  891. data/lib/doc_template/template.rb +132 -0
  892. data/lib/doc_template/templates/activity.html.erb +81 -0
  893. data/lib/doc_template/templates/callout.html.erb +6 -0
  894. data/lib/doc_template/templates/columns.html.erb +13 -0
  895. data/lib/doc_template/templates/core_content_objectives.html.erb +2 -0
  896. data/lib/doc_template/templates/def.html.erb +19 -0
  897. data/lib/doc_template/templates/dialogue.html.erb +5 -0
  898. data/lib/doc_template/templates/ela-teacher-guidance.html.erb +25 -0
  899. data/lib/doc_template/templates/expand.html.erb +10 -0
  900. data/lib/doc_template/templates/gdoc/activity.html.erb +73 -0
  901. data/lib/doc_template/templates/gdoc/callout.html.erb +13 -0
  902. data/lib/doc_template/templates/gdoc/def.html.erb +7 -0
  903. data/lib/doc_template/templates/gdoc/dialogue.html.erb +3 -0
  904. data/lib/doc_template/templates/gdoc/expand.html.erb +8 -0
  905. data/lib/doc_template/templates/gdoc/group-ela.html.erb +16 -0
  906. data/lib/doc_template/templates/gdoc/group-math.html.erb +48 -0
  907. data/lib/doc_template/templates/gdoc/image.html.erb +10 -0
  908. data/lib/doc_template/templates/gdoc/indent.html.erb +1 -0
  909. data/lib/doc_template/templates/gdoc/opt_break.html.erb +14 -0
  910. data/lib/doc_template/templates/gdoc/pd.html.erb +21 -0
  911. data/lib/doc_template/templates/gdoc/section.html.erb +44 -0
  912. data/lib/doc_template/templates/gdoc/smp.html.erb +11 -0
  913. data/lib/doc_template/templates/gdoc/source.html.erb +3 -0
  914. data/lib/doc_template/templates/gdoc/standard.html.erb +7 -0
  915. data/lib/doc_template/templates/gdoc/white-placeholder.html.erb +15 -0
  916. data/lib/doc_template/templates/gls.html.erb +1 -0
  917. data/lib/doc_template/templates/group-ela.html.erb +16 -0
  918. data/lib/doc_template/templates/group-math.html.erb +59 -0
  919. data/lib/doc_template/templates/heading.html.erb +4 -0
  920. data/lib/doc_template/templates/image-student-worksheet.html.erb +3 -0
  921. data/lib/doc_template/templates/image.html.erb +9 -0
  922. data/lib/doc_template/templates/indent.html.erb +3 -0
  923. data/lib/doc_template/templates/language_arts_objectives.html.erb +2 -0
  924. data/lib/doc_template/templates/materials.html.erb +7 -0
  925. data/lib/doc_template/templates/opt_break.html.erb +9 -0
  926. data/lib/doc_template/templates/pd.html.erb +70 -0
  927. data/lib/doc_template/templates/position.html.erb +3 -0
  928. data/lib/doc_template/templates/pv.html.erb +20 -0
  929. data/lib/doc_template/templates/section.html.erb +51 -0
  930. data/lib/doc_template/templates/smp.html.erb +13 -0
  931. data/lib/doc_template/templates/source.html.erb +3 -0
  932. data/lib/doc_template/templates/standard.html.erb +20 -0
  933. data/lib/doc_template/templates/target-table.html.erb +15 -0
  934. data/lib/doc_template/templates/vocab.html.erb +2 -0
  935. data/lib/doc_template/templates/vocabulary.html.erb +15 -0
  936. data/lib/doc_template/templates/white-placeholder.html.erb +8 -0
  937. data/lib/doc_template/xpath_functions.rb +17 -0
  938. data/lib/document_exporter.rb +6 -0
  939. data/lib/document_exporter/base.rb +68 -0
  940. data/lib/document_exporter/docx.rb +26 -0
  941. data/lib/document_exporter/gdoc/base.rb +143 -0
  942. data/lib/document_exporter/gdoc/document.rb +12 -0
  943. data/lib/document_exporter/gdoc/material.rb +41 -0
  944. data/lib/document_exporter/gdoc/student_material.rb +17 -0
  945. data/lib/document_exporter/gdoc/teacher_material.rb +17 -0
  946. data/lib/document_exporter/pdf/base.rb +76 -0
  947. data/lib/document_exporter/pdf/document.rb +19 -0
  948. data/lib/document_exporter/pdf/material.rb +13 -0
  949. data/lib/document_exporter/pdf/student_material.rb +16 -0
  950. data/lib/document_exporter/pdf/teacher_material.rb +17 -0
  951. data/lib/document_exporter/thumbnail.rb +22 -0
  952. data/lib/document_renderer/part.rb +40 -0
  953. data/lib/elasticsearch/persistence/repository/response/results.rb +78 -0
  954. data/lib/generators/lcms/engine/install/install_generator.rb +27 -0
  955. data/lib/generators/lcms/engine/install/templates/config/lcms-admin.yml +32 -0
  956. data/lib/generators/lcms/engine/install/templates/config/lcms.yml +51 -0
  957. data/lib/generators/lcms/engine/install/templates/config/materials_rules.yml +20 -0
  958. data/lib/generators/lcms/engine/install/templates/config/pdf.yml +21 -0
  959. data/lib/generators/lcms/engine/install/templates/config/tags.yml +176 -0
  960. data/lib/lcms/engine.rb +26 -0
  961. data/lib/lcms/engine/engine.rb +154 -0
  962. data/lib/lcms/engine/migration.rb +14 -0
  963. data/lib/lcms/engine/test/resource_helpers.rb +83 -0
  964. data/lib/lcms/engine/version.rb +8 -0
  965. data/lib/lt/lcms/metadata/base_service.rb +43 -0
  966. data/lib/lt/lcms/metadata/context.rb +302 -0
  967. data/lib/lt/lcms/metadata/service.rb +97 -0
  968. data/lib/lti/thin_common_cartridge.rb +96 -0
  969. data/lib/lti/xml/imsmanifest.xml +38 -0
  970. data/lib/lti/xml/lti_link.xml +15 -0
  971. data/lib/resque_job.rb +90 -0
  972. data/lib/standard_importer.rb +102 -0
  973. data/lib/tasks/cache.rake +12 -0
  974. data/lib/tasks/cleanup.rake +61 -0
  975. data/lib/tasks/cloud66.rake +48 -0
  976. data/lib/tasks/db.rake +79 -0
  977. data/lib/tasks/document.rake +74 -0
  978. data/lib/tasks/elasticsearch.rake +49 -0
  979. data/lib/tasks/google.rake +25 -0
  980. data/lib/tasks/lcms/engine_tasks.rake +81 -0
  981. data/lib/tasks/oneoff.rake +36 -0
  982. data/lib/tasks/pages.rake +10 -0
  983. data/lib/tasks/resources.rake +29 -0
  984. data/lib/tasks/resque.rake +20 -0
  985. data/lib/tasks/standards.rake +17 -0
  986. data/lib/tasks/thumbnails.rake +59 -0
  987. data/lib/text_to_image.rb +40 -0
  988. data/package.json +43 -0
  989. data/spec/controllers/admin/association_picker_controller_spec.rb +21 -0
  990. data/spec/controllers/admin/curriculums_controller_spec.rb +16 -0
  991. data/spec/controllers/admin/documents_controller_spec.rb +61 -0
  992. data/spec/controllers/admin/materials_controller_spec.rb +44 -0
  993. data/spec/controllers/admin/pages_controller_spec.rb +19 -0
  994. data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +31 -0
  995. data/spec/controllers/admin/settings_controller_spec.rb +16 -0
  996. data/spec/controllers/admin/sketch_compilers_controller_spec.rb +94 -0
  997. data/spec/controllers/admin/standards_controller_spec.rb +77 -0
  998. data/spec/controllers/admin/users_controller_spec.rb +19 -0
  999. data/spec/controllers/admin/welcome_controller_spec.rb +21 -0
  1000. data/spec/controllers/documents_controller_spec.rb +123 -0
  1001. data/spec/controllers/enhance_instruction_controller_spec.rb +15 -0
  1002. data/spec/controllers/explore_curriculum_controller_spec.rb +29 -0
  1003. data/spec/controllers/find_lessons_controller_spec.rb +50 -0
  1004. data/spec/controllers/pages_controller_spec.rb +35 -0
  1005. data/spec/controllers/resources_controller_spec.rb +67 -0
  1006. data/spec/controllers/search_controller_spec.rb +16 -0
  1007. data/spec/dummy/.env +6 -0
  1008. data/spec/dummy/.ruby-gemset +1 -0
  1009. data/spec/dummy/.ruby-version +1 -0
  1010. data/spec/dummy/.traceroute.yaml +16 -0
  1011. data/spec/dummy/Rakefile +8 -0
  1012. data/spec/dummy/app/assets/config/manifest.js +4 -0
  1013. data/spec/dummy/app/assets/images/.keep +0 -0
  1014. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  1015. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  1016. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  1017. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  1018. data/spec/dummy/app/helpers/application_helper.rb +4 -0
  1019. data/spec/dummy/app/jobs/application_job.rb +4 -0
  1020. data/spec/dummy/app/mailers/application_mailer.rb +6 -0
  1021. data/spec/dummy/app/models/concerns/.keep +0 -0
  1022. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  1023. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  1024. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  1025. data/spec/dummy/bin/bundle +5 -0
  1026. data/spec/dummy/bin/rails +11 -0
  1027. data/spec/dummy/bin/rake +11 -0
  1028. data/spec/dummy/bin/rspec +8 -0
  1029. data/spec/dummy/bin/setup +38 -0
  1030. data/spec/dummy/bin/spring +17 -0
  1031. data/spec/dummy/bin/update +33 -0
  1032. data/spec/dummy/bin/yarn +11 -0
  1033. data/spec/dummy/config.ru +7 -0
  1034. data/spec/dummy/config/application.rb +31 -0
  1035. data/spec/dummy/config/boot.rb +14 -0
  1036. data/spec/dummy/config/database.yml +14 -0
  1037. data/spec/dummy/config/environment.rb +7 -0
  1038. data/spec/dummy/config/environments/development.rb +51 -0
  1039. data/spec/dummy/config/environments/production.rb +97 -0
  1040. data/spec/dummy/config/environments/test.rb +44 -0
  1041. data/spec/dummy/config/initializers/application_controller_renderer.rb +10 -0
  1042. data/spec/dummy/config/initializers/assets.rb +16 -0
  1043. data/spec/dummy/config/initializers/backtrace_silencers.rb +11 -0
  1044. data/spec/dummy/config/initializers/content_security_policy.rb +29 -0
  1045. data/spec/dummy/config/initializers/cookies_serializer.rb +7 -0
  1046. data/spec/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  1047. data/spec/dummy/config/initializers/inflections.rb +18 -0
  1048. data/spec/dummy/config/initializers/mime_types.rb +6 -0
  1049. data/spec/dummy/config/initializers/wrap_parameters.rb +16 -0
  1050. data/spec/dummy/config/lcms-admin.yml +32 -0
  1051. data/spec/dummy/config/lcms.yml +36 -0
  1052. data/spec/dummy/config/locales/en.yml +33 -0
  1053. data/spec/dummy/config/materials_rules.yml +20 -0
  1054. data/spec/dummy/config/pdf.yml +21 -0
  1055. data/spec/dummy/config/puma.rb +36 -0
  1056. data/spec/dummy/config/routes.rb +6 -0
  1057. data/spec/dummy/config/secrets.yml +17 -0
  1058. data/spec/dummy/config/spring.rb +9 -0
  1059. data/spec/dummy/config/tags.yml +176 -0
  1060. data/spec/dummy/db/schema.rb +452 -0
  1061. data/spec/dummy/lib/assets/.keep +0 -0
  1062. data/spec/dummy/log/.keep +0 -0
  1063. data/spec/dummy/package.json +5 -0
  1064. data/spec/dummy/public/404.html +67 -0
  1065. data/spec/dummy/public/422.html +67 -0
  1066. data/spec/dummy/public/500.html +66 -0
  1067. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  1068. data/spec/dummy/public/apple-touch-icon.png +0 -0
  1069. data/spec/dummy/public/favicon.ico +0 -0
  1070. data/spec/entities/breadcrumbs_spec.rb +100 -0
  1071. data/spec/entities/filterbar_spec.rb +93 -0
  1072. data/spec/entities/grades_spec.rb +76 -0
  1073. data/spec/entities/pagination_spec.rb +25 -0
  1074. data/spec/factories/access_code.rb +7 -0
  1075. data/spec/factories/authors.rb +8 -0
  1076. data/spec/factories/curriculums.rb +9 -0
  1077. data/spec/factories/document_bundles.rb +9 -0
  1078. data/spec/factories/document_parts.rb +10 -0
  1079. data/spec/factories/documents.rb +6 -0
  1080. data/spec/factories/downloads.rb +8 -0
  1081. data/spec/factories/leadership_posts.rb +8 -0
  1082. data/spec/factories/materials.rb +8 -0
  1083. data/spec/factories/pages.rb +21 -0
  1084. data/spec/factories/resource_additional_resources.rb +8 -0
  1085. data/spec/factories/resources.rb +26 -0
  1086. data/spec/factories/settings.rb +7 -0
  1087. data/spec/factories/social_thumbnails.rb +8 -0
  1088. data/spec/factories/staff_members.rb +8 -0
  1089. data/spec/factories/standard_links.rb +6 -0
  1090. data/spec/factories/standards.rb +8 -0
  1091. data/spec/factories/taggings.rb +8 -0
  1092. data/spec/factories/tags.rb +7 -0
  1093. data/spec/factories/users.rb +18 -0
  1094. data/spec/features/admin/lessons/add_lesson_spec.rb +55 -0
  1095. data/spec/features/admin/lessons/sample-lessons/ela-g2.html +1 -0
  1096. data/spec/features/admin/lessons/sample-lessons/ela-g6.html +1 -0
  1097. data/spec/features/admin/lessons/sample-lessons/math-g4.html +1 -0
  1098. data/spec/features/admin/lessons/sample-lessons/math-g7.html +1 -0
  1099. data/spec/features/admin/materials/add_material_spec.rb +73 -0
  1100. data/spec/features/admin/materials/sample-materials/vocabulary-chart.html +1 -0
  1101. data/spec/features/admin/materials/sample-materials/vocabulary-chart.pdf +1 -0
  1102. data/spec/features/admin/pages_spec.rb +79 -0
  1103. data/spec/features/admin/users_spec.rb +137 -0
  1104. data/spec/features/pages/page_not_found_spec.rb +26 -0
  1105. data/spec/features/pages/page_titles_spec.rb +86 -0
  1106. data/spec/features/users/login_logout_spec.rb +27 -0
  1107. data/spec/features/welcome_spec.rb +18 -0
  1108. data/spec/forms/document_form_spec.rb +75 -0
  1109. data/spec/lib/doc_template/objects/activity_metadata_spec.rb +120 -0
  1110. data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +120 -0
  1111. data/spec/lib/doc_template/objects/base_metadata_spec.rb +17 -0
  1112. data/spec/lib/doc_template/objects/toc_metadata_spec.rb +76 -0
  1113. data/spec/lib/doc_template/tables/base_spec.rb +98 -0
  1114. data/spec/lib/doc_template/tags/answer_space_tag_spec.rb +27 -0
  1115. data/spec/lib/doc_template/tags/columns_tag_spec.rb +57 -0
  1116. data/spec/lib/doc_template/tags/dialogue_tag_spec.rb +15 -0
  1117. data/spec/lib/doc_template/tags/gls_tag_spec.rb +34 -0
  1118. data/spec/lib/doc_template/tags/inset_tag_spec.rb +47 -0
  1119. data/spec/lib/doc_template/tags/language_arts_objectives_tag_spec.rb +15 -0
  1120. data/spec/lib/doc_template/tags/latex_tag_spec.rb +60 -0
  1121. data/spec/lib/doc_template/tags/materials_tag_spec.rb +31 -0
  1122. data/spec/lib/doc_template/tags/multiple_choice_tag_spec.rb +37 -0
  1123. data/spec/lib/doc_template/tags/opt_break_spec.rb +35 -0
  1124. data/spec/lib/doc_template/tags/page_break_tag_spec.rb +33 -0
  1125. data/spec/lib/doc_template/tags/pd_tag_spec.rb +63 -0
  1126. data/spec/lib/doc_template/tags/pv_tag_spec.rb +31 -0
  1127. data/spec/lib/doc_template/tags/smp_tag_spec.rb +44 -0
  1128. data/spec/lib/doc_template/tags/stadard_tag_spec.rb +41 -0
  1129. data/spec/lib/doc_template/tags/table_preserve_alignment_tag_spec.rb +21 -0
  1130. data/spec/lib/doc_template/tags/task_tag_spec.rb +17 -0
  1131. data/spec/lib/doc_template/tags/vocab_tag_spec.rb +15 -0
  1132. data/spec/lib/doc_template/tags/white_placeholder_tag_spec.rb +15 -0
  1133. data/spec/lib/doc_template/tags_spec.rb +11 -0
  1134. data/spec/lib/doc_template/template_spec.rb +21 -0
  1135. data/spec/lib/doc_template_spec.rb +81 -0
  1136. data/spec/lib/document_exporter/docx_spec.rb +27 -0
  1137. data/spec/lib/document_exporter/gdoc_spec.rb +70 -0
  1138. data/spec/lib/lt/lcms/metadata/context_spec.rb +50 -0
  1139. data/spec/lib/lt/lcms/metadata/service_spec.rb +142 -0
  1140. data/spec/lib/text_to_image_spec.rb +17 -0
  1141. data/spec/models/component_spec.rb +60 -0
  1142. data/spec/models/document_bundle_spec.rb +125 -0
  1143. data/spec/models/document_part_spec.rb +7 -0
  1144. data/spec/models/document_spec.rb +154 -0
  1145. data/spec/models/download_spec.rb +111 -0
  1146. data/spec/models/material_spec.rb +71 -0
  1147. data/spec/models/resource_additional_resource_spec.rb +9 -0
  1148. data/spec/models/resource_spec.rb +118 -0
  1149. data/spec/models/search/document_spec.rb +22 -0
  1150. data/spec/models/search/elastic_search_document_spec.rb +79 -0
  1151. data/spec/models/settings_spec.rb +34 -0
  1152. data/spec/models/social_thumbnail_spec.rb +19 -0
  1153. data/spec/models/standard_link_spec.rb +9 -0
  1154. data/spec/models/standard_spec.rb +29 -0
  1155. data/spec/models/tag_spec.rb +9 -0
  1156. data/spec/models/tagging_spec.rb +9 -0
  1157. data/spec/rails_helper.rb +34 -0
  1158. data/spec/services/document_build_service_spec.rb +68 -0
  1159. data/spec/services/embed_equations_spec.rb +116 -0
  1160. data/spec/services/html_sanitizer_spec.rb +180 -0
  1161. data/spec/spec_helper.rb +96 -0
  1162. data/spec/support/bullet.rb +14 -0
  1163. data/spec/support/capybara.rb +21 -0
  1164. data/spec/support/concerns/navigable.rb +73 -0
  1165. data/spec/support/concerns/searchable.rb +47 -0
  1166. data/spec/support/database_cleaner.rb +27 -0
  1167. data/spec/support/devise.rb +11 -0
  1168. data/spec/support/factory_bot.rb +11 -0
  1169. data/spec/support/feature_helper.rb +19 -0
  1170. data/spec/support/heap.rb +3 -0
  1171. data/spec/support/resources.rb +5 -0
  1172. data/spec/support/routes.rb +19 -0
  1173. data/spec/support/shared_examples/content_tag.rb +51 -0
  1174. data/spec/support/shoulda_matchers.rb +10 -0
  1175. data/templates/routes.rb +107 -0
  1176. data/vendor/assets/javascripts/foundation.initialize.js +115 -0
  1177. data/vendor/assets/javascripts/foundation.magellanex.js +335 -0
  1178. data/vendor/assets/javascripts/freshwidget.js +1 -0
  1179. data/vendor/assets/javascripts/html.sortable.min.js +1 -0
  1180. data/vendor/assets/javascripts/jquery.easytabs.js +704 -0
  1181. data/vendor/assets/javascripts/jquery.hashchange.js +9 -0
  1182. data/vendor/assets/javascripts/jquery.tagsinput.js +1 -0
  1183. data/vendor/assets/javascripts/modernizr-custom.js +3 -0
  1184. data/vendor/assets/javascripts/pdf.js +10902 -0
  1185. data/vendor/assets/javascripts/pdf.worker.js +43104 -0
  1186. data/vendor/assets/javascripts/pdfobject.js +254 -0
  1187. data/vendor/assets/javascripts/smoothscrolling.js +22 -0
  1188. data/vendor/assets/javascripts/swiper.jquery.js +3777 -0
  1189. data/vendor/assets/javascripts/tabs.js +6 -0
  1190. data/yarn.lock +8184 -0
  1191. metadata +2930 -0
@@ -0,0 +1,335 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Foundation plugin
5
+ * Based on foundation Maggelan plugin
6
+ * for changing hash while scrolling
7
+ * Each method contatin DIFFERENCE with original Maggelan in description
8
+ */
9
+
10
+ function _instanceof(left, right) {
11
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
12
+ return !!right[Symbol.hasInstance](left);
13
+ } else {
14
+ return left instanceof right;
15
+ }
16
+ }
17
+
18
+ function _classCallCheck(instance, Constructor) {
19
+ if (!_instanceof(instance, Constructor)) {
20
+ throw new TypeError("Cannot call a class as a function");
21
+ }
22
+ }
23
+
24
+ function _defineProperties(target, props) {
25
+ for (var i = 0; i < props.length; i++) {
26
+ var descriptor = props[i];
27
+ descriptor.enumerable = descriptor.enumerable || false;
28
+ descriptor.configurable = true;
29
+ if ("value" in descriptor) descriptor.writable = true;
30
+ Object.defineProperty(target, descriptor.key, descriptor);
31
+ }
32
+ }
33
+
34
+ function _createClass(Constructor, protoProps, staticProps) {
35
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
36
+ if (staticProps) _defineProperties(Constructor, staticProps);
37
+ return Constructor;
38
+ }
39
+
40
+ !function ($) {
41
+ /**
42
+ * MaggelanHash module.
43
+ * @module foundation.magellanhash
44
+ */
45
+ var MaggelanHash =
46
+ /*#__PURE__*/
47
+ function () {
48
+ /**
49
+ * Creates a new instance of MaggelanHash.
50
+ * DIFFERENCE: same as original Maggelan
51
+ * @class
52
+ * @fires MaggelanHash#init
53
+ * @param {Object} element - jQuery object to add the trigger to.
54
+ * @param {Object} options - Overrides to the default plugin settings.
55
+ */
56
+ function MaggelanHash(element, options) {
57
+ _classCallCheck(this, MaggelanHash);
58
+
59
+ this.$element = element;
60
+ this.options = $.extend({}, MaggelanHash.defaults, this.$element.data(), options);
61
+
62
+ this._init();
63
+
64
+ Foundation.registerPlugin(this, 'MaggelanHash');
65
+ }
66
+
67
+ /**
68
+ * Initializes the MaggelanHash plugin and calls functions to get equalizer functioning on load.
69
+ * DIFFERENCE: no need in $links array with a to change style on scrolling
70
+ * @private
71
+ */
72
+
73
+
74
+ _createClass(MaggelanHash, [{
75
+ key: "_init",
76
+ value: function _init() {
77
+ var id = this.$element[0].id || Foundation.GetYoDigits(6, 'magellanhash');
78
+
79
+ var _this = this;
80
+
81
+ this.$targets = $('[data-magellanhash-target]');
82
+ this.$element.attr({
83
+ 'data-resize': id,
84
+ 'data-scroll': id,
85
+ 'id': id
86
+ });
87
+ this.$active = $();
88
+ this.scrollPos = parseInt(window.pageYOffset, 10);
89
+ this.isScrolling = false;
90
+ this.calcPoints();
91
+
92
+ this._events();
93
+ }
94
+ /**
95
+ * Calculates an array of pixel values that are the demarcation lines between locations on the page.
96
+ * Can be invoked if new elements are added or the size of a location changes.
97
+ * DIFFERENCE: same as original Maggelan
98
+ * @function
99
+ */
100
+
101
+ }, {
102
+ key: "calcPoints",
103
+ value: function calcPoints() {
104
+ var _this = this,
105
+ body = document.body,
106
+ html = document.documentElement;
107
+
108
+ this.points = [];
109
+ this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight));
110
+ this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight));
111
+ this.$targets.each(function () {
112
+ var $tar = $(this),
113
+ pt = Math.round($tar.offset().top - _this.options.threshold);
114
+ $tar.targetPoint = pt;
115
+
116
+ _this.points.push(pt);
117
+ });
118
+ }
119
+ /**
120
+ * Initializes events for MaggelanHash.
121
+ * DIFFERENCE: no scroll to loc on window load, this should be handeled by plugin user
122
+ * @private
123
+ */
124
+
125
+ }, {
126
+ key: "_events",
127
+ value: function _events() {
128
+ var _this = this,
129
+ $body = $('html, body'),
130
+ opts = {
131
+ duration: _this.options.animationDuration,
132
+ easing: _this.options.animationEasing
133
+ };
134
+
135
+ this.$element.on({
136
+ 'resizeme.zf.trigger': this.reflow.bind(this),
137
+ 'scrollme.zf.trigger': this._updateActive.bind(this)
138
+ });
139
+ }
140
+ /**
141
+ * Function to scroll to a given location on the page.
142
+ * DIFFERENCE: callback on finish + recalculating on each step
143
+ * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo'
144
+ * @function
145
+ */
146
+
147
+ }, {
148
+ key: "scrollToLoc",
149
+ value: function scrollToLoc(loc) {
150
+ var _this2 = this;
151
+
152
+ var $loc = $(loc);
153
+ var optOffset = this.options.threshold / 2 + this.options.barOffset;
154
+ var scrollPos = Math.round($loc.offset().top - optOffset);
155
+ $('html, body').stop(true).animate({
156
+ scrollTop: scrollPos
157
+ }, {
158
+ duration: this.options.animationDuration,
159
+ easing: this.options.animationEasing,
160
+ step: function step(now, fx) {
161
+ fx.end = Math.round($loc.offset().top - optOffset);
162
+ }
163
+ }).promise().always(function () {
164
+ _this2.options.onScrollFinished(loc);
165
+ });
166
+ }
167
+ /*
168
+ * DIFFERENCE: Kind of mutex functions to lock chaging hash on scrolling
169
+ */
170
+
171
+ }, {
172
+ key: "mutexScrollLock",
173
+ value: function mutexScrollLock() {
174
+ this.isScrolling = true;
175
+ }
176
+ }, {
177
+ key: "mutexScrollUnlock",
178
+ value: function mutexScrollUnlock() {
179
+ this.isScrolling = false;
180
+ }
181
+ }, {
182
+ key: "mutexScrollLocked",
183
+ value: function mutexScrollLocked() {
184
+ return this.isScrolling;
185
+ }
186
+ /**
187
+ * Calls necessary functions to update MaggelanHash upon DOM change
188
+ * DIFFERENCE: recalculating
189
+ * @function
190
+ */
191
+
192
+ }, {
193
+ key: "reflow",
194
+ value: function reflow() {
195
+ if (this.mutexScrollLocked()) return;
196
+ this.$targets = $('[data-magellanhash-target]');
197
+ this.calcPoints();
198
+
199
+ this._updateActive();
200
+ }
201
+ /**
202
+ * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled.
203
+ * DIFFERENCE: deepLinking calls callback to handle history changes
204
+ * @private
205
+ * @function
206
+ * @fires MaggelanHash#update
207
+ */
208
+
209
+ }, {
210
+ key: "_updateActive",
211
+ value: function _updateActive()
212
+ /*evt, elem, scrollPos*/ {
213
+ if (this.mutexScrollLocked()) return;
214
+ var winPos =
215
+ /*scrollPos ||*/
216
+ parseInt(window.pageYOffset, 10),
217
+ curIdx;
218
+
219
+ if (winPos + this.winHeight === this.docHeight) {
220
+ curIdx = this.points.length - 1;
221
+ } else if (winPos < this.points[0]) {
222
+ curIdx = -1;
223
+ } else {
224
+ var isDown = this.scrollPos < winPos,
225
+ _this = this,
226
+ curVisible = this.points.filter(function (p, i) {
227
+ return isDown ? p <= winPos : p - _this.options.threshold <= winPos; //&& winPos >= _this.points[i -1] - _this.options.threshold;
228
+ });
229
+
230
+ curIdx = curVisible.length ? curVisible.length - 1 : 0;
231
+ }
232
+
233
+ this.$active.removeClass(this.options.activeClass);
234
+ this.scrollPos = winPos;
235
+
236
+ if (curIdx >= 0) {
237
+ this.$active = this.$targets.eq(curIdx).addClass(this.options.activeClass);
238
+
239
+ if (this.options.deepLinking) {
240
+ this.options.updateUrl(this.$active);
241
+ }
242
+ } else {
243
+ this.$active = $();
244
+ this.options.updateUrl(null);
245
+ }
246
+ /**
247
+ * Fires when magellanhash is finished updating to the new active element.
248
+ * DIFFERENCE: no need in this
249
+ * @event MaggelanHash#update
250
+ */
251
+ //this.$element.trigger('update.zf.magellanhash', [this.$active]);
252
+
253
+ }
254
+ /**
255
+ * Destroys an instance of MaggelanHash and resets the url of the window.
256
+ * DIFFERENCE: removed url update
257
+ * @function
258
+ */
259
+
260
+ }, {
261
+ key: "destroy",
262
+ value: function destroy() {
263
+ this.$element.off('.zf.trigger .zf.magellanhash').find(".".concat(this.options.activeClass)).removeClass(this.options.activeClass);
264
+ Foundation.unregisterPlugin(this);
265
+ }
266
+ }]);
267
+
268
+ return MaggelanHash;
269
+ }();
270
+ /**
271
+ * Default settings for plugin
272
+ * DIFFERENCE: updateUrl and onScrollFinished callbacks
273
+ */
274
+
275
+
276
+ MaggelanHash.defaults = {
277
+ /**
278
+ * Amount of time, in ms, the animated scrolling should take between locations.
279
+ * @option
280
+ * @example 500
281
+ */
282
+ animationDuration: 500,
283
+
284
+ /**
285
+ * Animation style to use when scrolling between locations.
286
+ * @option
287
+ * @example 'ease-in-out'
288
+ */
289
+ animationEasing: 'linear',
290
+
291
+ /**
292
+ * Number of pixels to use as a marker for location changes.
293
+ * @option
294
+ * @example 50
295
+ */
296
+ threshold: 50,
297
+
298
+ /**
299
+ * Class applied to the active locations link on the magellanhash container.
300
+ * @option
301
+ * @example 'active'
302
+ */
303
+ activeClass: 'active',
304
+
305
+ /**
306
+ * Allows the script to manipulate the url of the current page, and if supported, alter the history.
307
+ * @option
308
+ * @example true
309
+ */
310
+ deepLinking: false,
311
+
312
+ /**
313
+ * Callback to function where url will be updated
314
+ * @option
315
+ * @example
316
+ */
317
+ updateUrl: null,
318
+
319
+ /**
320
+ * Callback to function on scroll finished
321
+ * @option
322
+ * @example
323
+ */
324
+ onScrollFinished: null,
325
+
326
+ /**
327
+ * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.
328
+ * @option
329
+ * @example 25
330
+ */
331
+ barOffset: 0
332
+ }; // Window exports
333
+
334
+ Foundation.plugin(MaggelanHash, 'MaggelanHash');
335
+ }(jQuery);
@@ -0,0 +1 @@
1
+ !function(){function t(t){try{return t()}catch(e){window.console&&window.console.log&&window.console.log.apply&&window.console.log("Freshdesk Error: ",e)}}function e(t){return t&&!x.test(t)?$.location.protocol+"//"+t:t}function n(t){var e=$.createElement("link");e.setAttribute("rel","stylesheet"),e.setAttribute("type","text/css"),e.setAttribute("href",t),"undefined"!=typeof e&&$.getElementsByTagName("head")[0].appendChild(e)}function i(t){var e=$.createElement("script");e.setAttribute("type","text/javascript"),e.setAttribute("src",t),"undefined"!=typeof e&&$.getElementsByTagName("head")[0].appendChild(e)}function o(t,e,n){t&&t.addEventListener?t.addEventListener(e,n,!1):t&&t.attachEvent&&t.attachEvent("on"+e,n)}function r(t){var n;for(n in t)B.hasOwnProperty(n)&&("url"===n||"assetUrl"===n?B[n]=e(t[n]):B[n]=t[n])}function a(t){var e=t.src,n=window.navigator&&window.navigator.appVersion.split("MSIE"),i=parseFloat(n[1]);return i>=5.5&&7>i&&$.body.filters&&(t.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+e+"', sizingMethod='crop')"),t}function d(){null==$widget_attr.button&&"popup"==B.widgetType&&(class_name=k[B.alignment]||"left",$widget_attr.button=$.createElement("div"),$widget_attr.button.setAttribute("id","freshwidget-button"),$widget_attr.button.setAttribute("data-html2canvas-ignore","true"),$widget_attr.button.style.display="none",$widget_attr.button.className="freshwidget-button fd-btn-"+class_name,I.Version()<=10&&($widget_attr.button.className+=" ie"+I.Version()),link=$.createElement("a"),link.setAttribute("href","javascript:void(0)"),text=null,proxyLink=$.createElement("a"),proxyLink.setAttribute("href","javascript:void(0)"),null==B.backgroundImage||""==B.backgroundImage||"text"==B.buttonType?(link.className="freshwidget-theme",link.style.color=B.buttonColor,link.style.backgroundColor=B.buttonBg,link.style.borderColor=B.buttonColor,proxyLink.className="proxy-link",text=$.createTextNode(B.buttonText)):(link.className="freshwidget-customimage",text=$.createElement("img"),text.src=B.backgroundImage,text.alt=B.buttonText,text=a(text)),"top"==class_name||"bottom"==class_name?$widget_attr.button.style.left=B.offset:$widget_attr.button.style.top=B.offset,$.body.insertBefore($widget_attr.button,$.body.childNodes[0]),$widget_attr.button.appendChild(link),link.appendChild(text),(null==B.backgroundImage||""==B.backgroundImage)&&I.Version()<=10&&($widget_attr.button.appendChild(proxyLink),o(proxyLink,"click",function(){window.FreshWidget.show()}),proxyLink.style.height=link.offsetHeight+"px",proxyLink.style.width=link.offsetWidth+"px"),o(link,"click",function(){window.FreshWidget.show()}))}function s(){null!=$widget_attr.button&&($.body.removeChild($widget_attr.button),$widget_attr.button=null)}function l(){null!=$widget_attr.container&&($.body.removeChild($widget_attr.container),$widget_attr.container=null)}function c(){null==$widget_attr.container&&($widget_attr.container=$.createElement("div"),$widget_attr.container.className="freshwidget-container",$widget_attr.container.id="FreshWidget",""==B.responsive&&($widget_attr.container.className+=" responsive"),$widget_attr.container.setAttribute("data-html2canvas-ignore","true"),$widget_attr.container.style.display="none",$.body.insertBefore($widget_attr.container,$.body.childNodes[0]),$widget_attr.container.innerHTML='<div class="widget-ovelay" id="freshwidget-overlay">&nbsp;</div><div class="freshwidget-dialog" id="freshwidget-dialog"> <img alt="Close Feedback Form" id="freshwidget-close" class="widget-close" src="'+B.assetUrl+"/widget_close.png?ver="+E+'" /><div class="mobile-widget-close" id="mobile-widget-close"></div> <div class="frame-container"> <iframe title="Feedback Form" id="freshwidget-frame" src="about:blank" frameborder="0" scrolling="auto" allowTransparency="true" style="height: '+B.formHeight+'"/> </div>',$widget_attr.container=$.getElementById("FreshWidget"),$widget_attr.closeButton=$.getElementById("freshwidget-close"),$widget_attr.closeButton=a($widget_attr.closeButton),$widget_attr.mobileCloseButton=$.getElementById("mobile-widget-close"),$widget_attr.dialog=$.getElementById("freshwidget-dialog"),$widget_attr.iframe=$.getElementById("freshwidget-frame"),$widget_attr.overlay=$.getElementById("freshwidget-overlay"),$widget_attr.dialog.appendChild($widget_attr.iframe),g(),o($widget_attr.closeButton,"click",function(){window.FreshWidget.close()}),o($widget_attr.mobileCloseButton,"click",function(){window.FreshWidget.close()}),o($widget_attr.overlay,"click",function(){window.FreshWidget.close()}),o($widget_attr.iframe,"load",function(){$widget_attr.iframeLoaded||-1==$widget_attr.iframe.src.indexOf("/widgets/feedback_widget/new?")||($widget_attr.iframeLoaded=!0)}),y())}function g(){$widget_attr.iframe.src=B.url+"/loading.html?ver="+E}function u(){$widget_attr.iframe.src=B.url+"/widgets/feedback_widget/new?"+B.queryString}function w(){scroll(0,0),$widget_attr.container.style.display="block",B.responsive||(v=$.body.style.overflow,$.body.style.overflow="hidden"),$widget_attr.iframeLoaded||u()}function f(){$widget_attr.container.style.display="none",B.responsive||($.body.style.overflow=v||"auto"),u()}function m(t){switch(r(t),I.Version()>8&&"undefined"==typeof html2canvas&&""==B.screenshot&&i(B.assetUrl+"/html2canvas.js?ver="+E),B.loadOnEvent){case"windowLoad":o(window,"load",p);break;case"documentReady":o($,"ready",p);break;case"immediate":p()}n(B.assetUrl+"/freshwidget.css?ver="+E)}function p(){d(),c()}function h(t){r(t),s(),l(),$widget_attr.iframeLoaded=!1,d(),c()}function b(){s(),l(),delete window.FreshWidget}function y(){o(window,"message",function(t){var e=t.data;"screenshot"==e&&_(t)})}function _(t){I.Version()>8&&""==B.screenshot&&(html2canvas([$.body],{proxy:!1,onrendered:function(t){var e=t.toDataURL(),n={type:"screenshot",img:e};$.getElementById("freshwidget-frame").contentWindow.postMessage(n,"*")}}),t.stopImmediatePropagation())}var v,$=window.document,k={1:"top",2:"right",3:"bottom",4:"left",top:"top",right:"right",bottom:"bottom",left:"left"},x=/^[a-zA-Z]+:\/\//,E=2,B={widgetId:0,buttonText:"Support",buttonBg:"#7eb600",buttonColor:"white",backgroundImage:null,alignment:"left",offset:"35%",url:"http://support.freshdesk.com",assetUrl:"https://s3.amazonaws.com/assets.freshdesk.com/widget",queryString:"",screenshot:"",formHeight:"500px",responsive:"",widgetType:"popup",buttonType:"text",captcha:"",loadOnEvent:"windowLoad"};$widget_attr={button:null,dialog:null,container:null,overlay:null,iframe:null,iframeLoaded:!1,closeButton:null,mobileCloseButton:null};var I={Version:function(){var t=999;return-1!=navigator.appVersion.indexOf("MSIE")&&(t=parseFloat(navigator.appVersion.split("MSIE")[1])),t}},L={init:function(e,n){t(function(){return m(n)})},create:function(){t(function(){return p()})},show:function(){t(function(){return w()})},close:function(){t(function(){return f()})},iframe:function(){return $widget_attr.iframe},update:function(e){t(function(){return h(e)})},destroy:function(){t(function(){return b()})}};window.FreshWidget||(window.FreshWidget=L)}();
@@ -0,0 +1 @@
1
+ !function(e,t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?module.exports=t(require("jquery")):e.sortable=t(e.jQuery)}(this,function(e){"use strict";var t,a,r=e(),n=[],i=function(e){e.off("dragstart.h5s"),e.off("dragend.h5s"),e.off("selectstart.h5s"),e.off("dragover.h5s"),e.off("dragenter.h5s"),e.off("drop.h5s")},o=function(e){e.off("dragover.h5s"),e.off("dragenter.h5s"),e.off("drop.h5s")},d=function(e,t){e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text",""),e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(t.item,t.x,t.y)},s=function(e,t){return t.x||(t.x=parseInt(e.pageX-t.draggedItem.offset().left)),t.y||(t.y=parseInt(e.pageY-t.draggedItem.offset().top)),t},l=function(e){return{item:e[0],draggedItem:e}},f=function(e,t){var a=l(t);a=s(e,a),d(e,a)},h=function(e,t){return"undefined"==typeof e?t:e},g=function(e){e.removeData("opts"),e.removeData("connectWith"),e.removeData("items"),e.removeAttr("aria-dropeffect")},c=function(e){e.removeAttr("aria-grabbed"),e.removeAttr("draggable"),e.removeAttr("role")},u=function(e,t){return e[0]===t[0]?!0:void 0!==e.data("connectWith")?e.data("connectWith")===t.data("connectWith"):!1},p=function(e){var t=e.data("opts")||{},a=e.children(t.items),r=t.handle?a.find(t.handle):a;o(e),g(e),r.off("mousedown.h5s"),i(a),c(a)},m=function(t){var a=t.data("opts"),r=t.children(a.items),n=a.handle?r.find(a.handle):r;t.attr("aria-dropeffect","move"),n.attr("draggable","true");var i=(document||window.document).createElement("span");"function"!=typeof i.dragDrop||a.disableIEFix||n.on("mousedown.h5s",function(){-1!==r.index(this)?this.dragDrop():e(this).parents(a.items)[0].dragDrop()})},v=function(e){var t=e.data("opts"),a=e.children(t.items),r=t.handle?a.find(t.handle):a;e.attr("aria-dropeffect","none"),r.attr("draggable",!1),r.off("mousedown.h5s")},b=function(e){var t=e.data("opts"),a=e.children(t.items),r=t.handle?a.find(t.handle):a;i(a),r.off("mousedown.h5s"),o(e)},x=function(i,o){var s=e(i),l=String(o);return o=e.extend({connectWith:!1,placeholder:null,dragImage:null,disableIEFix:!1,placeholderClass:"sortable-placeholder",draggingClass:"sortable-dragging",hoverClass:!1},o),s.each(function(){var i=e(this);if(/enable|disable|destroy/.test(l))return void x[l](i);o=h(i.data("opts"),o),i.data("opts",o),b(i);var s,g,c,p=i.children(o.items),v=null===o.placeholder?e("<"+(/^ul|ol$/i.test(this.tagName)?"li":"div")+' class="'+o.placeholderClass+'"/>'):e(o.placeholder).addClass(o.placeholderClass);if(!i.attr("data-sortable-id")){var I=n.length;n[I]=i,i.attr("data-sortable-id",I),p.attr("data-item-sortable-id",I)}if(i.data("items",o.items),r=r.add(v),o.connectWith&&i.data("connectWith",o.connectWith),m(i),p.attr("role","option"),p.attr("aria-grabbed","false"),o.hoverClass){var C="sortable-over";"string"==typeof o.hoverClass&&(C=o.hoverClass),p.hover(function(){e(this).addClass(C)},function(){e(this).removeClass(C)})}p.on("dragstart.h5s",function(r){r.stopImmediatePropagation(),o.dragImage?(d(r.originalEvent,{item:o.dragImage,x:0,y:0}),console.log("WARNING: dragImage option is deprecated and will be removed in the future!")):f(r.originalEvent,e(this),o.dragImage),t=e(this),t.addClass(o.draggingClass),t.attr("aria-grabbed","true"),s=t.index(),a=t.height(),g=e(this).parent(),t.parent().triggerHandler("sortstart",{item:t,placeholder:v,startparent:g})}),p.on("dragend.h5s",function(){t&&(t.removeClass(o.draggingClass),t.attr("aria-grabbed","false"),t.show(),r.detach(),c=e(this).parent(),t.parent().triggerHandler("sortstop",{item:t,startparent:g}),(s!==t.index()||g.get(0)!==c.get(0))&&t.parent().triggerHandler("sortupdate",{item:t,index:c.children(c.data("items")).index(t),oldindex:p.index(t),elementIndex:t.index(),oldElementIndex:s,startparent:g,endparent:c}),t=null,a=null)}),e(this).add([v]).on("drop.h5s",function(a){return u(i,e(t).parent())?(a.stopPropagation(),r.filter(":visible").after(t),t.trigger("dragend.h5s"),!1):void 0}),p.add([this]).on("dragover.h5s dragenter.h5s",function(n){if(u(i,e(t).parent())){if(n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="move",p.is(this)){var d=e(this).height();if(o.forcePlaceholderSize&&v.height(a),d>a){var s=d-a,l=e(this).offset().top;if(v.index()<e(this).index()&&n.originalEvent.pageY<l+s)return!1;if(v.index()>e(this).index()&&n.originalEvent.pageY>l+d-s)return!1}t.hide(),v.index()<e(this).index()?e(this).after(v):e(this).before(v),r.not(v).detach()}else r.is(this)||e(this).children(o.items).length||(r.detach(),e(this).append(v));return!1}})})};return x.destroy=function(e){p(e)},x.enable=function(e){m(e)},x.disable=function(e){v(e)},e.fn.sortable=function(e){return x(this,e)},x});
@@ -0,0 +1,704 @@
1
+ /*
2
+ * jQuery EasyTabs plugin 3.2.0
3
+ *
4
+ * Copyright (c) 2010-2011 Steve Schwartz (JangoSteve)
5
+ *
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ * http://www.gnu.org/licenses/gpl.html
9
+ *
10
+ * Date: Thu May 09 17:30:00 2013 -0500
11
+ */
12
+ ( function($) {
13
+
14
+ $.easytabs = function(container, options) {
15
+
16
+ // Attach to plugin anything that should be available via
17
+ // the $container.data('easytabs') object
18
+ var plugin = this,
19
+ $container = $(container),
20
+
21
+ defaults = {
22
+ animate: true,
23
+ panelActiveClass: "active",
24
+ tabActiveClass: "active",
25
+ defaultTab: "li:first-child",
26
+ animationSpeed: "normal",
27
+ tabs: "> ul > li",
28
+ updateHash: true,
29
+ cycle: false,
30
+ collapsible: false,
31
+ collapsedClass: "collapsed",
32
+ collapsedByDefault: true,
33
+ uiTabs: false,
34
+ transitionIn: 'fadeIn',
35
+ transitionOut: 'fadeOut',
36
+ transitionInEasing: 'swing',
37
+ transitionOutEasing: 'swing',
38
+ transitionCollapse: 'slideUp',
39
+ transitionUncollapse: 'slideDown',
40
+ transitionCollapseEasing: 'swing',
41
+ transitionUncollapseEasing: 'swing',
42
+ containerClass: "",
43
+ tabsClass: "",
44
+ tabClass: "",
45
+ panelClass: "",
46
+ cache: true,
47
+ event: 'click',
48
+ panelContext: $container
49
+ },
50
+
51
+ // Internal instance variables
52
+ // (not available via easytabs object)
53
+ $defaultTab,
54
+ $defaultTabLink,
55
+ transitions,
56
+ lastHash,
57
+ skipUpdateToHash,
58
+ animationSpeeds = {
59
+ fast: 200,
60
+ normal: 400,
61
+ slow: 600
62
+ },
63
+
64
+ // Shorthand variable so that we don't need to call
65
+ // plugin.settings throughout the plugin code
66
+ settings;
67
+
68
+ // =============================================================
69
+ // Functions available via easytabs object
70
+ // =============================================================
71
+
72
+ plugin.init = function() {
73
+
74
+ plugin.settings = settings = $.extend({}, defaults, options);
75
+ settings.bind_str = settings.event+".easytabs";
76
+
77
+ // Add jQuery UI's crazy class names to markup,
78
+ // so that markup will match theme CSS
79
+ if ( settings.uiTabs ) {
80
+ settings.tabActiveClass = 'ui-tabs-selected';
81
+ settings.containerClass = 'ui-tabs ui-widget ui-widget-content ui-corner-all';
82
+ settings.tabsClass = 'ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all';
83
+ settings.tabClass = 'ui-state-default ui-corner-top';
84
+ settings.panelClass = 'ui-tabs-panel ui-widget-content ui-corner-bottom';
85
+ }
86
+
87
+ // If collapsible is true and defaultTab specified, assume user wants defaultTab showing (not collapsed)
88
+ if ( settings.collapsible && options.defaultTab !== undefined && options.collpasedByDefault === undefined ) {
89
+ settings.collapsedByDefault = false;
90
+ }
91
+
92
+ // Convert 'normal', 'fast', and 'slow' animation speed settings to their respective speed in milliseconds
93
+ if ( typeof(settings.animationSpeed) === 'string' ) {
94
+ settings.animationSpeed = animationSpeeds[settings.animationSpeed];
95
+ }
96
+
97
+ $('a.anchor').remove().prependTo('body');
98
+
99
+ // Store easytabs object on container so we can easily set
100
+ // properties throughout
101
+ $container.data('easytabs', {});
102
+
103
+ plugin.setTransitions();
104
+
105
+ plugin.getTabs();
106
+
107
+ addClasses();
108
+
109
+ setDefaultTab();
110
+
111
+ bindToTabClicks();
112
+
113
+ initHashChange();
114
+
115
+ initCycle();
116
+
117
+ // Append data-easytabs HTML attribute to make easy to query for
118
+ // easytabs instances via CSS pseudo-selector
119
+ $container.attr('data-easytabs', true);
120
+ };
121
+
122
+ // Set transitions for switching between tabs based on options.
123
+ // Could be used to update transitions if settings are changes.
124
+ plugin.setTransitions = function() {
125
+ transitions = ( settings.animate ) ? {
126
+ show: settings.transitionIn,
127
+ hide: settings.transitionOut,
128
+ speed: settings.animationSpeed,
129
+ collapse: settings.transitionCollapse,
130
+ uncollapse: settings.transitionUncollapse,
131
+ halfSpeed: settings.animationSpeed / 2
132
+ } :
133
+ {
134
+ show: "show",
135
+ hide: "hide",
136
+ speed: 0,
137
+ collapse: "hide",
138
+ uncollapse: "show",
139
+ halfSpeed: 0
140
+ };
141
+ };
142
+
143
+ // Find and instantiate tabs and panels.
144
+ // Could be used to reset tab and panel collection if markup is
145
+ // modified.
146
+ plugin.getTabs = function() {
147
+ var $matchingPanel;
148
+
149
+ // Find the initial set of elements matching the setting.tabs
150
+ // CSS selector within the container
151
+ plugin.tabs = $container.find(settings.tabs),
152
+
153
+ // Instantiate panels as empty jquery object
154
+ plugin.panels = $(),
155
+
156
+ plugin.tabs.each(function(){
157
+ var $tab = $(this),
158
+ $a = $tab.children('a'),
159
+
160
+ // targetId is the ID of the panel, which is either the
161
+ // `href` attribute for non-ajax tabs, or in the
162
+ // `data-target` attribute for ajax tabs since the `href` is
163
+ // the ajax URL
164
+ targetId = $tab.children('a').data('target');
165
+
166
+ $tab.data('easytabs', {});
167
+
168
+ // If the tab has a `data-target` attribute, and is thus an ajax tab
169
+ if ( targetId !== undefined && targetId !== null ) {
170
+ $tab.data('easytabs').ajax = $a.attr('href');
171
+ } else {
172
+ targetId = $a.attr('href');
173
+ }
174
+ targetId = targetId.match(/#([^\?]+)/)[1];
175
+
176
+ $matchingPanel = settings.panelContext.find("#" + targetId);
177
+
178
+ // If tab has a matching panel, add it to panels
179
+ if ( $matchingPanel.length ) {
180
+
181
+ // Store panel height before hiding
182
+ $matchingPanel.data('easytabs', {
183
+ position: $matchingPanel.css('position'),
184
+ visibility: $matchingPanel.css('visibility')
185
+ });
186
+
187
+ // Don't hide panel if it's active (allows `getTabs` to be called manually to re-instantiate tab collection)
188
+ $matchingPanel.not(settings.panelActiveClass).hide();
189
+
190
+ plugin.panels = plugin.panels.add($matchingPanel);
191
+
192
+ $tab.data('easytabs').panel = $matchingPanel;
193
+
194
+ // Otherwise, remove tab from tabs collection
195
+ } else {
196
+ plugin.tabs = plugin.tabs.not($tab);
197
+ if ('console' in window) {
198
+ console.warn('Warning: tab without matching panel for selector \'#' + targetId +'\' removed from set');
199
+ }
200
+ }
201
+ });
202
+ };
203
+
204
+ // Select tab and fire callback
205
+ plugin.selectTab = function($clicked, callback) {
206
+ var url = window.location,
207
+ hash = url.hash.match(/^[^\?]*/)[0],
208
+ $targetPanel = $clicked.parent().data('easytabs').panel,
209
+ ajaxUrl = $clicked.parent().data('easytabs').ajax;
210
+
211
+ // Tab is collapsible and active => toggle collapsed state
212
+ if( settings.collapsible && ! skipUpdateToHash && ($clicked.hasClass(settings.tabActiveClass) || $clicked.hasClass(settings.collapsedClass)) ) {
213
+ plugin.toggleTabCollapse($clicked, $targetPanel, ajaxUrl, callback);
214
+
215
+ // Tab is not active and panel is not active => select tab
216
+ } else if( ! $clicked.hasClass(settings.tabActiveClass) || ! $targetPanel.hasClass(settings.panelActiveClass) ){
217
+ activateTab($clicked, $targetPanel, ajaxUrl, callback);
218
+
219
+ // Cache is disabled => reload (e.g reload an ajax tab).
220
+ } else if ( ! settings.cache ){
221
+ activateTab($clicked, $targetPanel, ajaxUrl, callback);
222
+ }
223
+
224
+ };
225
+
226
+ // Toggle tab collapsed state and fire callback
227
+ plugin.toggleTabCollapse = function($clicked, $targetPanel, ajaxUrl, callback) {
228
+ plugin.panels.stop(true,true);
229
+
230
+ if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
231
+ plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
232
+
233
+ // If panel is collapsed, uncollapse it
234
+ if( $clicked.hasClass(settings.collapsedClass) ){
235
+
236
+ // If ajax panel and not already cached
237
+ if( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
238
+ $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
239
+
240
+ $targetPanel.load(ajaxUrl, function(response, status, xhr){
241
+ $clicked.parent().data('easytabs').cached = true;
242
+ $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
243
+ });
244
+ }
245
+
246
+ // Update CSS classes of tab and panel
247
+ $clicked.parent()
248
+ .removeClass(settings.collapsedClass)
249
+ .addClass(settings.tabActiveClass)
250
+ .children()
251
+ .removeClass(settings.collapsedClass)
252
+ .addClass(settings.tabActiveClass);
253
+
254
+ $targetPanel
255
+ .addClass(settings.panelActiveClass)
256
+ [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, function(){
257
+ $container.trigger('easytabs:midTransition', [$clicked, $targetPanel, settings]);
258
+ if(typeof callback == 'function') callback();
259
+ });
260
+
261
+ // Otherwise, collapse it
262
+ } else {
263
+
264
+ // Update CSS classes of tab and panel
265
+ $clicked.addClass(settings.collapsedClass)
266
+ .parent()
267
+ .addClass(settings.collapsedClass);
268
+
269
+ $targetPanel
270
+ .removeClass(settings.panelActiveClass)
271
+ [transitions.collapse](transitions.speed, settings.transitionCollapseEasing, function(){
272
+ $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
273
+ if(typeof callback == 'function') callback();
274
+ });
275
+ }
276
+ }
277
+ };
278
+
279
+
280
+ // Find tab with target panel matching value
281
+ plugin.matchTab = function(hash) {
282
+ return plugin.tabs.find("[href='" + hash + "'],[data-target='" + hash + "']").first();
283
+ };
284
+
285
+ // Find panel with `id` matching value
286
+ plugin.matchInPanel = function(hash) {
287
+ return ( hash && plugin.validId(hash) ? plugin.panels.filter(':has(' + hash + ')').first() : [] );
288
+ };
289
+
290
+ // Make sure hash is a valid id value (admittedly strict in that HTML5 allows almost anything without a space)
291
+ // but jQuery has issues with such id values anyway, so we can afford to be strict here.
292
+ plugin.validId = function(id) {
293
+ return id.substr(1).match(/^[A-Za-z]+[A-Za-z0-9\-_:\.].$/);
294
+ };
295
+
296
+ // Select matching tab when URL hash changes
297
+ plugin.selectTabFromHashChange = function() {
298
+ var hash = window.location.hash.match(/^[^\?]*/)[0],
299
+ $tab = plugin.matchTab(hash),
300
+ $panel;
301
+
302
+ if ( settings.updateHash ) {
303
+
304
+ // If hash directly matches tab
305
+ if( $tab.length ){
306
+ skipUpdateToHash = true;
307
+ plugin.selectTab( $tab );
308
+
309
+ } else {
310
+ $panel = plugin.matchInPanel(hash);
311
+
312
+ // If panel contains element matching hash
313
+ if ( $panel.length ) {
314
+ hash = '#' + $panel.attr('id');
315
+ $tab = plugin.matchTab(hash);
316
+ skipUpdateToHash = true;
317
+ plugin.selectTab( $tab );
318
+
319
+ // If default tab is not active...
320
+ } else if ( ! $defaultTab.hasClass(settings.tabActiveClass) && ! settings.cycle ) {
321
+
322
+ // ...and hash is blank or matches a parent of the tab container or
323
+ // if the last tab (before the hash updated) was one of the other tabs in this container.
324
+ if ( hash === '' || plugin.matchTab(lastHash).length || $container.closest(hash).length ) {
325
+ skipUpdateToHash = true;
326
+ plugin.selectTab( $defaultTabLink );
327
+ }
328
+ }
329
+ }
330
+ }
331
+ };
332
+
333
+ // Cycle through tabs
334
+ plugin.cycleTabs = function(tabNumber){
335
+ if(settings.cycle){
336
+ tabNumber = tabNumber % plugin.tabs.length;
337
+ $tab = $( plugin.tabs[tabNumber] ).children("a").first();
338
+ skipUpdateToHash = true;
339
+ plugin.selectTab( $tab, function() {
340
+ setTimeout(function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
341
+ });
342
+ }
343
+ };
344
+
345
+ // Convenient public methods
346
+ plugin.publicMethods = {
347
+ select: function(tabSelector){
348
+ var $tab;
349
+
350
+ // Find tab container that matches selector (like 'li#tab-one' which contains tab link)
351
+ if ( ($tab = plugin.tabs.filter(tabSelector)).length === 0 ) {
352
+
353
+ // Find direct tab link that matches href (like 'a[href="#panel-1"]')
354
+ if ( ($tab = plugin.tabs.find("a[href='" + tabSelector + "']")).length === 0 ) {
355
+
356
+ // Find direct tab link that matches selector (like 'a#tab-1')
357
+ if ( ($tab = plugin.tabs.find("a" + tabSelector)).length === 0 ) {
358
+
359
+ // Find direct tab link that matches data-target (lik 'a[data-target="#panel-1"]')
360
+ if ( ($tab = plugin.tabs.find("[data-target='" + tabSelector + "']")).length === 0 ) {
361
+
362
+ // Find direct tab link that ends in the matching href (like 'a[href$="#panel-1"]', which would also match http://example.com/currentpage/#panel-1)
363
+ if ( ($tab = plugin.tabs.find("a[href$='" + tabSelector + "']")).length === 0 ) {
364
+
365
+ $.error('Tab \'' + tabSelector + '\' does not exist in tab set');
366
+ }
367
+ }
368
+ }
369
+ }
370
+ } else {
371
+ // Select the child tab link, since the first option finds the tab container (like <li>)
372
+ $tab = $tab.children("a").first();
373
+ }
374
+ plugin.selectTab($tab);
375
+ }
376
+ };
377
+
378
+ // =============================================================
379
+ // Private functions
380
+ // =============================================================
381
+
382
+ // Triggers an event on an element and returns the event result
383
+ var fire = function(obj, name, data) {
384
+ var event = $.Event(name);
385
+ obj.trigger(event, data);
386
+ return event.result !== false;
387
+ }
388
+
389
+ // Add CSS classes to markup (if specified), called by init
390
+ var addClasses = function() {
391
+ $container.addClass(settings.containerClass);
392
+ plugin.tabs.parent().addClass(settings.tabsClass);
393
+ plugin.tabs.addClass(settings.tabClass);
394
+ plugin.panels.addClass(settings.panelClass);
395
+ };
396
+
397
+ // Set the default tab, whether from hash (bookmarked) or option,
398
+ // called by init
399
+ var setDefaultTab = function(){
400
+ var hash = window.location.hash.match(/^[^\?]*/)[0],
401
+ $selectedTab = plugin.matchTab(hash).parent(),
402
+ $panel;
403
+
404
+ // If hash directly matches one of the tabs, active on page-load
405
+ if( $selectedTab.length === 1 ){
406
+ $defaultTab = $selectedTab;
407
+ settings.cycle = false;
408
+
409
+ } else {
410
+ $panel = plugin.matchInPanel(hash);
411
+
412
+ // If one of the panels contains the element matching the hash,
413
+ // make it active on page-load
414
+ if ( $panel.length ) {
415
+ hash = '#' + $panel.attr('id');
416
+ $defaultTab = plugin.matchTab(hash).parent();
417
+
418
+ // Otherwise, make the default tab the one that's active on page-load
419
+ } else {
420
+ $defaultTab = plugin.tabs.parent().find(settings.defaultTab);
421
+ if ( $defaultTab.length === 0 ) {
422
+ $.error("The specified default tab ('" + settings.defaultTab + "') could not be found in the tab set ('" + settings.tabs + "') out of " + plugin.tabs.length + " tabs.");
423
+ }
424
+ }
425
+ }
426
+
427
+ $defaultTabLink = $defaultTab.children("a").first();
428
+
429
+ activateDefaultTab($selectedTab);
430
+ };
431
+
432
+ // Activate defaultTab (or collapse by default), called by setDefaultTab
433
+ var activateDefaultTab = function($selectedTab) {
434
+ var defaultPanel,
435
+ defaultAjaxUrl;
436
+
437
+ if ( settings.collapsible && $selectedTab.length === 0 && settings.collapsedByDefault ) {
438
+ $defaultTab
439
+ .addClass(settings.collapsedClass)
440
+ .children()
441
+ .addClass(settings.collapsedClass);
442
+
443
+ } else {
444
+
445
+ defaultPanel = $( $defaultTab.data('easytabs').panel );
446
+ defaultAjaxUrl = $defaultTab.data('easytabs').ajax;
447
+
448
+ if ( defaultAjaxUrl && (!settings.cache || !$defaultTab.data('easytabs').cached) ) {
449
+ $container.trigger('easytabs:ajax:beforeSend', [$defaultTabLink, defaultPanel]);
450
+ defaultPanel.load(defaultAjaxUrl, function(response, status, xhr){
451
+ $defaultTab.data('easytabs').cached = true;
452
+ $container.trigger('easytabs:ajax:complete', [$defaultTabLink, defaultPanel, response, status, xhr]);
453
+ });
454
+ }
455
+
456
+ $defaultTab.data('easytabs').panel
457
+ .show()
458
+ .addClass(settings.panelActiveClass);
459
+
460
+ $defaultTab
461
+ .addClass(settings.tabActiveClass)
462
+ .children()
463
+ .addClass(settings.tabActiveClass);
464
+ }
465
+
466
+ // Fire event when the plugin is initialised
467
+ $container.trigger("easytabs:initialised", [$defaultTabLink, defaultPanel]);
468
+ };
469
+
470
+ // Bind tab-select funtionality to namespaced click event, called by
471
+ // init
472
+ var bindToTabClicks = function() {
473
+ plugin.tabs.children("a").bind(settings.bind_str, function(e) {
474
+
475
+ // Stop cycling when a tab is clicked
476
+ settings.cycle = false;
477
+
478
+ // Hash will be updated when tab is clicked,
479
+ // don't cause tab to re-select when hash-change event is fired
480
+ skipUpdateToHash = false;
481
+
482
+ // Select the panel for the clicked tab
483
+ plugin.selectTab( $(this) );
484
+
485
+ // Don't follow the link to the anchor
486
+ e.preventDefault ? e.preventDefault() : e.returnValue = false;
487
+ });
488
+ };
489
+
490
+ // Activate a given tab/panel, called from plugin.selectTab:
491
+ //
492
+ // * fire `easytabs:before` hook
493
+ // * get ajax if new tab is an uncached ajax tab
494
+ // * animate out previously-active panel
495
+ // * fire `easytabs:midTransition` hook
496
+ // * update URL hash
497
+ // * animate in newly-active panel
498
+ // * update CSS classes for inactive and active tabs/panels
499
+ //
500
+ // TODO: This could probably be broken out into many more modular
501
+ // functions
502
+ var activateTab = function($clicked, $targetPanel, ajaxUrl, callback) {
503
+ plugin.panels.stop(true,true);
504
+
505
+ if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
506
+ var $visiblePanel = plugin.panels.filter(":visible"),
507
+ $panelContainer = $targetPanel.parent(),
508
+ targetHeight,
509
+ visibleHeight,
510
+ heightDifference,
511
+ showPanel,
512
+ hash = window.location.hash.match(/^[^\?]*/)[0];
513
+
514
+ if (settings.animate) {
515
+ targetHeight = getHeightForHidden($targetPanel);
516
+ visibleHeight = $visiblePanel.length ? setAndReturnHeight($visiblePanel) : 0;
517
+ heightDifference = targetHeight - visibleHeight;
518
+ }
519
+
520
+ // Set lastHash to help indicate if defaultTab should be
521
+ // activated across multiple tab instances.
522
+ lastHash = hash;
523
+
524
+ // TODO: Move this function elsewhere
525
+ showPanel = function() {
526
+ // At this point, the previous panel is hidden, and the new one will be selected
527
+ $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
528
+
529
+ // Gracefully animate between panels of differing heights, start height change animation *after* panel change if panel needs to contract,
530
+ // so that there is no chance of making the visible panel overflowing the height of the target panel
531
+ if (settings.animate && settings.transitionIn == 'fadeIn') {
532
+ if (heightDifference < 0)
533
+ $panelContainer.animate({
534
+ height: $panelContainer.height() + heightDifference
535
+ }, transitions.halfSpeed ).css({ 'min-height': '' });
536
+ }
537
+
538
+ if ( settings.updateHash && ! skipUpdateToHash ) {
539
+ //window.location = url.toString().replace((url.pathname + hash), (url.pathname + $clicked.attr("href")));
540
+ // Not sure why this behaves so differently, but it's more straight forward and seems to have less side-effects
541
+ window.location.hash = '#' + $targetPanel.attr('id');
542
+ } else {
543
+ skipUpdateToHash = false;
544
+ }
545
+
546
+ $targetPanel
547
+ [transitions.show](transitions.speed, settings.transitionInEasing, function(){
548
+ $panelContainer.css({height: '', 'min-height': ''}); // After the transition, unset the height
549
+ $container.trigger("easytabs:after", [$clicked, $targetPanel, settings]);
550
+ // callback only gets called if selectTab actually does something, since it's inside the if block
551
+ if(typeof callback == 'function'){
552
+ callback();
553
+ }
554
+ });
555
+ };
556
+
557
+ if ( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
558
+ $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
559
+ $targetPanel.load(ajaxUrl, function(response, status, xhr){
560
+ $clicked.parent().data('easytabs').cached = true;
561
+ $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
562
+ });
563
+ }
564
+
565
+ // Gracefully animate between panels of differing heights, start height change animation *before* panel change if panel needs to expand,
566
+ // so that there is no chance of making the target panel overflowing the height of the visible panel
567
+ if( settings.animate && settings.transitionOut == 'fadeOut' ) {
568
+ if( heightDifference > 0 ) {
569
+ $panelContainer.animate({
570
+ height: ( $panelContainer.height() + heightDifference )
571
+ }, transitions.halfSpeed );
572
+ } else {
573
+ // Prevent height jumping before height transition is triggered at midTransition
574
+ $panelContainer.css({ 'min-height': $panelContainer.height() });
575
+ }
576
+ }
577
+
578
+ // Change the active tab *first* to provide immediate feedback when the user clicks
579
+ plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
580
+ plugin.tabs.filter("." + settings.collapsedClass).removeClass(settings.collapsedClass).children().removeClass(settings.collapsedClass);
581
+ $clicked.parent().addClass(settings.tabActiveClass).children().addClass(settings.tabActiveClass);
582
+
583
+ plugin.panels.filter("." + settings.panelActiveClass).removeClass(settings.panelActiveClass);
584
+ $targetPanel.addClass(settings.panelActiveClass);
585
+
586
+ if( $visiblePanel.length ) {
587
+ $visiblePanel
588
+ [transitions.hide](transitions.speed, settings.transitionOutEasing, showPanel);
589
+ } else {
590
+ $targetPanel
591
+ [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, showPanel);
592
+ }
593
+ }
594
+ };
595
+
596
+ // Get heights of panels to enable animation between panels of
597
+ // differing heights, called by activateTab
598
+ var getHeightForHidden = function($targetPanel){
599
+
600
+ if ( $targetPanel.data('easytabs') && $targetPanel.data('easytabs').lastHeight ) {
601
+ return $targetPanel.data('easytabs').lastHeight;
602
+ }
603
+
604
+ // this is the only property easytabs changes, so we need to grab its value on each tab change
605
+ var display = $targetPanel.css('display'),
606
+ outerCloak,
607
+ height;
608
+
609
+ // Workaround with wrapping height, because firefox returns wrong
610
+ // height if element itself has absolute positioning.
611
+ // but try/catch block needed for IE7 and IE8 because they throw
612
+ // an "Unspecified error" when trying to create an element
613
+ // with the css position set.
614
+ try {
615
+ outerCloak = $('<div></div>', {'position': 'absolute', 'visibility': 'hidden', 'overflow': 'hidden'});
616
+ } catch (e) {
617
+ outerCloak = $('<div></div>', {'visibility': 'hidden', 'overflow': 'hidden'});
618
+ }
619
+ height = $targetPanel
620
+ .wrap(outerCloak)
621
+ .css({'position':'relative','visibility':'hidden','display':'block'})
622
+ .outerHeight();
623
+
624
+ $targetPanel.unwrap();
625
+
626
+ // Return element to previous state
627
+ $targetPanel.css({
628
+ position: $targetPanel.data('easytabs').position,
629
+ visibility: $targetPanel.data('easytabs').visibility,
630
+ display: display
631
+ });
632
+
633
+ // Cache height
634
+ $targetPanel.data('easytabs').lastHeight = height;
635
+
636
+ return height;
637
+ };
638
+
639
+ // Since the height of the visible panel may have been manipulated due to interaction,
640
+ // we want to re-cache the visible height on each tab change, called
641
+ // by activateTab
642
+ var setAndReturnHeight = function($visiblePanel) {
643
+ var height = $visiblePanel.outerHeight();
644
+
645
+ if( $visiblePanel.data('easytabs') ) {
646
+ $visiblePanel.data('easytabs').lastHeight = height;
647
+ } else {
648
+ $visiblePanel.data('easytabs', {lastHeight: height});
649
+ }
650
+ return height;
651
+ };
652
+
653
+ // Setup hash-change callback for forward- and back-button
654
+ // functionality, called by init
655
+ var initHashChange = function(){
656
+
657
+ // enabling back-button with jquery.hashchange plugin
658
+ // http://benalman.com/projects/jquery-hashchange-plugin/
659
+ if(typeof $(window).hashchange === 'function'){
660
+ $(window).hashchange( function(){
661
+ plugin.selectTabFromHashChange();
662
+ });
663
+ } else if ($.address && typeof $.address.change === 'function') { // back-button with jquery.address plugin http://www.asual.com/jquery/address/docs/
664
+ $.address.change( function(){
665
+ plugin.selectTabFromHashChange();
666
+ });
667
+ }
668
+ };
669
+
670
+ // Begin cycling if set in options, called by init
671
+ var initCycle = function(){
672
+ var tabNumber;
673
+ if (settings.cycle) {
674
+ tabNumber = plugin.tabs.index($defaultTab);
675
+ setTimeout( function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
676
+ }
677
+ };
678
+
679
+
680
+ plugin.init();
681
+
682
+ };
683
+
684
+ $.fn.easytabs = function(options) {
685
+ var args = arguments;
686
+
687
+ return this.each(function() {
688
+ var $this = $(this),
689
+ plugin = $this.data('easytabs');
690
+
691
+ // Initialization was called with $(el).easytabs( { options } );
692
+ if (undefined === plugin) {
693
+ plugin = new $.easytabs(this, options);
694
+ $this.data('easytabs', plugin);
695
+ }
696
+
697
+ // User called public method
698
+ if ( options && plugin.publicMethods[options] ){
699
+ return plugin.publicMethods[options](Array.prototype.slice.call( args, 1 ));
700
+ }
701
+ });
702
+ };
703
+
704
+ })(jQuery);