commonwealth-vlr-engine 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +91 -0
  3. data/.gitmodules +3 -0
  4. data/Gemfile +20 -0
  5. data/LICENSE +202 -0
  6. data/README.md +38 -0
  7. data/Rakefile +43 -0
  8. data/app/assets/images/commonwealth-vlr-engine/bplLoginButton.png +0 -0
  9. data/app/assets/images/commonwealth-vlr-engine/dc_audio-icon.png +0 -0
  10. data/app/assets/images/commonwealth-vlr-engine/dc_collection-icon.png +0 -0
  11. data/app/assets/images/commonwealth-vlr-engine/dc_image-icon.png +0 -0
  12. data/app/assets/images/commonwealth-vlr-engine/dc_institution-icon.png +0 -0
  13. data/app/assets/images/commonwealth-vlr-engine/dc_moving-image-icon.png +0 -0
  14. data/app/assets/images/commonwealth-vlr-engine/dc_text-icon.png +0 -0
  15. data/app/assets/images/commonwealth-vlr-engine/facebookLoginButton.png +0 -0
  16. data/app/assets/images/commonwealth-vlr-engine/loading-wdl-grid.gif +0 -0
  17. data/app/assets/images/commonwealth-vlr-engine/loading-wdl.gif +0 -0
  18. data/app/assets/images/commonwealth-vlr-engine/loading.gif +0 -0
  19. data/app/assets/images/commonwealth-vlr-engine/openseadragon/fullpage_grouphover.png +0 -0
  20. data/app/assets/images/commonwealth-vlr-engine/openseadragon/fullpage_hover.png +0 -0
  21. data/app/assets/images/commonwealth-vlr-engine/openseadragon/fullpage_pressed.png +0 -0
  22. data/app/assets/images/commonwealth-vlr-engine/openseadragon/fullpage_rest.png +0 -0
  23. data/app/assets/images/commonwealth-vlr-engine/openseadragon/home_grouphover.png +0 -0
  24. data/app/assets/images/commonwealth-vlr-engine/openseadragon/home_hover.png +0 -0
  25. data/app/assets/images/commonwealth-vlr-engine/openseadragon/home_pressed.png +0 -0
  26. data/app/assets/images/commonwealth-vlr-engine/openseadragon/home_rest.png +0 -0
  27. data/app/assets/images/commonwealth-vlr-engine/openseadragon/next_grouphover.png +0 -0
  28. data/app/assets/images/commonwealth-vlr-engine/openseadragon/next_hover.png +0 -0
  29. data/app/assets/images/commonwealth-vlr-engine/openseadragon/next_pressed.png +0 -0
  30. data/app/assets/images/commonwealth-vlr-engine/openseadragon/next_rest.png +0 -0
  31. data/app/assets/images/commonwealth-vlr-engine/openseadragon/previous_grouphover.png +0 -0
  32. data/app/assets/images/commonwealth-vlr-engine/openseadragon/previous_hover.png +0 -0
  33. data/app/assets/images/commonwealth-vlr-engine/openseadragon/previous_pressed.png +0 -0
  34. data/app/assets/images/commonwealth-vlr-engine/openseadragon/previous_rest.png +0 -0
  35. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateleft_grouphover.png +0 -0
  36. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateleft_hover.png +0 -0
  37. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateleft_pressed.png +0 -0
  38. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateleft_rest.png +0 -0
  39. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateright_grouphover.png +0 -0
  40. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateright_hover.png +0 -0
  41. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateright_pressed.png +0 -0
  42. data/app/assets/images/commonwealth-vlr-engine/openseadragon/rotateright_rest.png +0 -0
  43. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomin_grouphover.png +0 -0
  44. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomin_hover.png +0 -0
  45. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomin_pressed.png +0 -0
  46. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomin_rest.png +0 -0
  47. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomout_grouphover.png +0 -0
  48. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomout_hover.png +0 -0
  49. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomout_pressed.png +0 -0
  50. data/app/assets/images/commonwealth-vlr-engine/openseadragon/zoomout_rest.png +0 -0
  51. data/app/assets/images/commonwealth-vlr-engine/vlr_logo_img.png +0 -0
  52. data/app/assets/javascripts/blacklight_gallery.js +1 -0
  53. data/app/assets/javascripts/blacklight_google_analytics/blacklight_google_analytics.js.erb +165 -0
  54. data/app/assets/javascripts/bootstrap-accessibility-plugin/bootstrap-accessibility.js +586 -0
  55. data/app/assets/javascripts/commonwealth-vlr-engine.js +22 -0
  56. data/app/assets/javascripts/commonwealth-vlr-engine/collection_facets.js +5 -0
  57. data/app/assets/javascripts/commonwealth-vlr-engine/disable_dropdown_nav.js +21 -0
  58. data/app/assets/javascripts/commonwealth-vlr-engine/feedback_alerts.js.erb +19 -0
  59. data/app/assets/javascripts/commonwealth-vlr-engine/folder_tools.js +26 -0
  60. data/app/assets/javascripts/commonwealth-vlr-engine/multi_img_viewer.js.erb +20 -0
  61. data/app/assets/javascripts/commonwealth-vlr-engine/ocr_search_utils.js.erb +32 -0
  62. data/app/assets/javascripts/commonwealth-vlr-engine/volumes_list.js +5 -0
  63. data/app/assets/javascripts/openseadragon.js +2 -0
  64. data/app/assets/javascripts/respond/respond.min.js +6 -0
  65. data/app/assets/javascripts/wdl-viewer/fd-slider.js +1303 -0
  66. data/app/assets/javascripts/wdl-viewer/jquery-deparam.js +113 -0
  67. data/app/assets/javascripts/wdl-viewer/jquery.ba-throttle-debounce.min.js +9 -0
  68. data/app/assets/javascripts/wdl-viewer/jquery.hammer.min.js +7 -0
  69. data/app/assets/javascripts/wdl-viewer/modernizr-wdl.min.js +3 -0
  70. data/app/assets/javascripts/wdl-viewer/wdl-search.js +33 -0
  71. data/app/assets/javascripts/wdl-viewer/wdl-viewer_commonwealth.js +1147 -0
  72. data/app/assets/stylesheets/blacklight_advanced_search.css +5 -0
  73. data/app/assets/stylesheets/blacklight_gallery.css +1 -0
  74. data/app/assets/stylesheets/blacklight_maps.css +1 -0
  75. data/app/assets/stylesheets/bootstrap-accessibility-plugin/bootstrap-accessibility.css +105 -0
  76. data/app/assets/stylesheets/commonwealth-vlr-engine/advanced_search.scss +139 -0
  77. data/app/assets/stylesheets/commonwealth-vlr-engine/basic_search.scss +47 -0
  78. data/app/assets/stylesheets/commonwealth-vlr-engine/book_viewer.scss +576 -0
  79. data/app/assets/stylesheets/commonwealth-vlr-engine/carousel.scss +94 -0
  80. data/app/assets/stylesheets/commonwealth-vlr-engine/cmmnwlth_defaults.scss +45 -0
  81. data/app/assets/stylesheets/commonwealth-vlr-engine/cmmnwlth_shared.scss +75 -0
  82. data/app/assets/stylesheets/commonwealth-vlr-engine/collections.scss +563 -0
  83. data/app/assets/stylesheets/commonwealth-vlr-engine/commonwealth-vlr-engine.css +32 -0
  84. data/app/assets/stylesheets/commonwealth-vlr-engine/facets.scss +111 -0
  85. data/app/assets/stylesheets/commonwealth-vlr-engine/feedback.scss +10 -0
  86. data/app/assets/stylesheets/commonwealth-vlr-engine/folders.scss +276 -0
  87. data/app/assets/stylesheets/commonwealth-vlr-engine/footer.scss +47 -0
  88. data/app/assets/stylesheets/commonwealth-vlr-engine/header.scss +329 -0
  89. data/app/assets/stylesheets/commonwealth-vlr-engine/home.scss +269 -0
  90. data/app/assets/stylesheets/commonwealth-vlr-engine/index.scss +580 -0
  91. data/app/assets/stylesheets/commonwealth-vlr-engine/institutions.scss +246 -0
  92. data/app/assets/stylesheets/commonwealth-vlr-engine/pages.scss +31 -0
  93. data/app/assets/stylesheets/commonwealth-vlr-engine/search_inside.scss +172 -0
  94. data/app/assets/stylesheets/commonwealth-vlr-engine/searches.scss +55 -0
  95. data/app/assets/stylesheets/commonwealth-vlr-engine/show.scss +840 -0
  96. data/app/assets/stylesheets/commonwealth-vlr-engine/signin.scss +43 -0
  97. data/app/assets/stylesheets/commonwealth-vlr-engine/users.scss +18 -0
  98. data/app/assets/stylesheets/commonwealth-vlr-engine/vlr_dependencies.css +8 -0
  99. data/app/assets/stylesheets/ie_fixes.css +16 -0
  100. data/app/assets/stylesheets/openseadragon.css +1 -0
  101. data/app/assets/stylesheets/wdl-viewer/fd-slider.min.css +2 -0
  102. data/app/controllers/blacklight_advanced_search/advanced_controller.rb +66 -0
  103. data/app/controllers/bookmarks_controller.rb +38 -0
  104. data/app/controllers/collections_controller.rb +128 -0
  105. data/app/controllers/commonwealth_vlr_engine/application_controller.rb +8 -0
  106. data/app/controllers/feedback_controller.rb +39 -0
  107. data/app/controllers/folder_items_actions_controller.rb +72 -0
  108. data/app/controllers/folder_items_controller.rb +90 -0
  109. data/app/controllers/folders_controller.rb +132 -0
  110. data/app/controllers/iiif_manifest_controller.rb +74 -0
  111. data/app/controllers/image_viewer_controller.rb +34 -0
  112. data/app/controllers/institutions_controller.rb +62 -0
  113. data/app/controllers/ocr_search_controller.rb +78 -0
  114. data/app/controllers/pages_controller.rb +5 -0
  115. data/app/controllers/users/omniauth_callbacks_controller.rb +10 -0
  116. data/app/controllers/users/registrations_controller.rb +3 -0
  117. data/app/controllers/users/sessions_controller.rb +3 -0
  118. data/app/controllers/users_controller.rb +27 -0
  119. data/app/helpers/blacklight_maps_helper.rb +3 -0
  120. data/app/helpers/collections_helper.rb +3 -0
  121. data/app/helpers/commonwealth_vlr_engine/application_helper.rb +200 -0
  122. data/app/helpers/commonwealth_vlr_engine/blacklight_helper.rb +35 -0
  123. data/app/helpers/commonwealth_vlr_engine/blacklight_url_helper.rb +53 -0
  124. data/app/helpers/commonwealth_vlr_engine/catalog_helper.rb +414 -0
  125. data/app/helpers/commonwealth_vlr_engine/collections_helper_behavior.rb +19 -0
  126. data/app/helpers/commonwealth_vlr_engine/component_helper.rb +22 -0
  127. data/app/helpers/commonwealth_vlr_engine/facets_helper.rb +20 -0
  128. data/app/helpers/commonwealth_vlr_engine/feedback_helper_behavior.rb +14 -0
  129. data/app/helpers/commonwealth_vlr_engine/folders_helper_behavior.rb +9 -0
  130. data/app/helpers/commonwealth_vlr_engine/image_viewer_helper_behavior.rb +14 -0
  131. data/app/helpers/commonwealth_vlr_engine/institutions_helper_behavior.rb +31 -0
  132. data/app/helpers/commonwealth_vlr_engine/layout_helper.rb +22 -0
  133. data/app/helpers/commonwealth_vlr_engine/ocr_search_helper_behavior.rb +48 -0
  134. data/app/helpers/commonwealth_vlr_engine/pages_helper_behavior.rb +38 -0
  135. data/app/helpers/commonwealth_vlr_engine/vlr_blacklight_maps_helper_behavior.rb +59 -0
  136. data/app/helpers/feedback_helper.rb +3 -0
  137. data/app/helpers/folders_helper.rb +3 -0
  138. data/app/helpers/image_viewer_helper.rb +3 -0
  139. data/app/helpers/institutions_helper.rb +3 -0
  140. data/app/helpers/ocr_search_helper.rb +3 -0
  141. data/app/helpers/pages_helper.rb +3 -0
  142. data/app/mailers/notifier.rb +5 -0
  143. data/app/models/carousel_slide.rb +7 -0
  144. data/app/models/record_mailer.rb +18 -0
  145. data/app/models/user.rb +15 -0
  146. data/app/views/advanced/_advanced_search_date.html.erb +23 -0
  147. data/app/views/advanced/_advanced_search_facets.html.erb +5 -0
  148. data/app/views/advanced/_advanced_search_fields.html.erb +39 -0
  149. data/app/views/advanced/_advanced_search_form.html.erb +51 -0
  150. data/app/views/advanced/_advanced_search_help.html.erb +13 -0
  151. data/app/views/advanced/_facet_layout.html.erb +9 -0
  152. data/app/views/advanced/_facet_limit.html.erb +15 -0
  153. data/app/views/advanced/index.html.erb +29 -0
  154. data/app/views/blacklight_advanced_search/_facet_limit.html.erb +12 -0
  155. data/app/views/bookmarks/_tools.html.erb +25 -0
  156. data/app/views/bookmarks/index.html.erb +64 -0
  157. data/app/views/bookmarks/update.js.erb +1 -0
  158. data/app/views/bpluser/folders/_folder.html.erb +36 -0
  159. data/app/views/catalog/_add_this.html.erb +10 -0
  160. data/app/views/catalog/_az_links.html.erb +15 -0
  161. data/app/views/catalog/_basic_search.html.erb +67 -0
  162. data/app/views/catalog/_citation.html.erb +50 -0
  163. data/app/views/catalog/_constraints.html.erb +26 -0
  164. data/app/views/catalog/_document_collections_gallery.html.erb +7 -0
  165. data/app/views/catalog/_facet_limit_series.html.erb +21 -0
  166. data/app/views/catalog/_facets.html.erb +31 -0
  167. data/app/views/catalog/_facets_series.html.erb +4 -0
  168. data/app/views/catalog/_folder_item_control.html.erb +64 -0
  169. data/app/views/catalog/_index_collections_gallery.html.erb +12 -0
  170. data/app/views/catalog/_index_gallery.html.erb +11 -0
  171. data/app/views/catalog/_index_header_default.html.erb +22 -0
  172. data/app/views/catalog/_index_list_collection.html.erb +33 -0
  173. data/app/views/catalog/_index_list_default.html.erb +13 -0
  174. data/app/views/catalog/_index_map_institutions.html.erb +10 -0
  175. data/app/views/catalog/_index_masonry.html.erb +8 -0
  176. data/app/views/catalog/_index_slideshow.html.erb +18 -0
  177. data/app/views/catalog/_more_like_this.html.erb +9 -0
  178. data/app/views/catalog/_opengraph.html.erb +16 -0
  179. data/app/views/catalog/_previous_next_doc.html.erb +22 -0
  180. data/app/views/catalog/_results_pagination.html.erb +9 -0
  181. data/app/views/catalog/_search_form.html.erb +23 -0
  182. data/app/views/catalog/_search_header.html.erb +5 -0
  183. data/app/views/catalog/_show_default.html.erb +75 -0
  184. data/app/views/catalog/_show_main_content.html.erb +27 -0
  185. data/app/views/catalog/_show_more_like_this.html.erb +15 -0
  186. data/app/views/catalog/_show_partials/_show_book_viewer_link.html.erb +25 -0
  187. data/app/views/catalog/_show_partials/_show_default_img.html.erb +32 -0
  188. data/app/views/catalog/_show_partials/_show_default_metadata.html.erb +486 -0
  189. data/app/views/catalog/_show_partials/_show_default_simple_img_viewer.html.erb +45 -0
  190. data/app/views/catalog/_show_partials/_show_downloads.html.erb +14 -0
  191. data/app/views/catalog/_show_partials/_show_flagged_notice.html.erb +29 -0
  192. data/app/views/catalog/_show_partials/_show_multi_img.html.erb +42 -0
  193. data/app/views/catalog/_show_partials/_show_multi_img_pagination.html.erb +20 -0
  194. data/app/views/catalog/_show_partials/_show_oai_item_img.html.erb +5 -0
  195. data/app/views/catalog/_show_partials/_show_oai_item_link.html.erb +8 -0
  196. data/app/views/catalog/_show_partials/_show_prev_next_carousel_links.html.erb +17 -0
  197. data/app/views/catalog/_show_partials/_show_volumes.html.erb +52 -0
  198. data/app/views/catalog/_show_sidebar.html.erb +1 -0
  199. data/app/views/catalog/_show_tools.html.erb +42 -0
  200. data/app/views/catalog/_zero_results.html.erb +20 -0
  201. data/app/views/catalog/email.html.erb +6 -0
  202. data/app/views/catalog/index.html.erb +17 -0
  203. data/app/views/catalog/metadata_view.html.erb +7 -0
  204. data/app/views/catalog/show.html.erb +13 -0
  205. data/app/views/collections/_search_form_collection.html.erb +23 -0
  206. data/app/views/collections/index.html.erb +30 -0
  207. data/app/views/collections/show.html.erb +116 -0
  208. data/app/views/devise/confirmations/new.html.erb +14 -0
  209. data/app/views/devise/mailer/reset_password_instructions.html.erb +13 -0
  210. data/app/views/devise/passwords/edit.html.erb +33 -0
  211. data/app/views/devise/passwords/new.html.erb +31 -0
  212. data/app/views/devise/registrations/edit.html.erb +83 -0
  213. data/app/views/devise/registrations/new.html.erb +53 -0
  214. data/app/views/devise/sessions/new.html.erb +75 -0
  215. data/app/views/devise/shared/_links.erb +29 -0
  216. data/app/views/feedback/complete.html.erb +9 -0
  217. data/app/views/feedback/show.html.erb +61 -0
  218. data/app/views/folder_items/create.js.erb +1 -0
  219. data/app/views/folder_items/destroy.js.erb +1 -0
  220. data/app/views/folder_items/item_actions.js.erb +2 -0
  221. data/app/views/folder_items/update.js.erb +1 -0
  222. data/app/views/folders/_in_folder.html.erb +2 -0
  223. data/app/views/folders/_new_edit_form_fields.html.erb +36 -0
  224. data/app/views/folders/edit.html.erb +25 -0
  225. data/app/views/folders/index.html.erb +73 -0
  226. data/app/views/folders/new.html.erb +27 -0
  227. data/app/views/folders/public_list.html.erb +44 -0
  228. data/app/views/folders/show.html.erb +98 -0
  229. data/app/views/image_viewer/_book_viewer_help.html.erb +125 -0
  230. data/app/views/image_viewer/_render_book_viewer.html.erb +185 -0
  231. data/app/views/image_viewer/book_viewer.html.erb +57 -0
  232. data/app/views/image_viewer/show.js.erb +19 -0
  233. data/app/views/institutions/_intro_text.html.erb +1 -0
  234. data/app/views/institutions/_map_institutions_search.html.erb +9 -0
  235. data/app/views/institutions/_search_form_institution.html.erb +24 -0
  236. data/app/views/institutions/index.html.erb +31 -0
  237. data/app/views/institutions/show.html.erb +104 -0
  238. data/app/views/layouts/_google_analytics.html.erb +9 -0
  239. data/app/views/layouts/book_viewer.html.erb +37 -0
  240. data/app/views/layouts/commonwealth-vlr-engine.html.erb +59 -0
  241. data/app/views/notifier/feedback.text.erb +6 -0
  242. data/app/views/ocr_search/_index_ocr_list.html.erb +17 -0
  243. data/app/views/ocr_search/_search_form_ocr.html.erb +23 -0
  244. data/app/views/ocr_search/_snippets_more.html.erb +15 -0
  245. data/app/views/ocr_search/_zero_results_ocr.html.erb +9 -0
  246. data/app/views/ocr_search/index.html.erb +49 -0
  247. data/app/views/pages/_carousel.html.erb +46 -0
  248. data/app/views/pages/_home_partials/_banner.html.erb +23 -0
  249. data/app/views/pages/_home_partials/_browse.html.erb +55 -0
  250. data/app/views/pages/_home_partials/_context.html.erb +24 -0
  251. data/app/views/pages/_home_partials/_home_content.html.erb +14 -0
  252. data/app/views/pages/about.html.erb +10 -0
  253. data/app/views/pages/about_site.html.erb +6 -0
  254. data/app/views/pages/explore.html.erb +32 -0
  255. data/app/views/pages/home.html.erb +3 -0
  256. data/app/views/record_mailer/email_record.text.erb +7 -0
  257. data/app/views/saved_searches/index.html.erb +60 -0
  258. data/app/views/search_history/index.html.erb +59 -0
  259. data/app/views/shared/_error_messages.html.erb +9 -0
  260. data/app/views/shared/_flash_msg_maintenance.html.erb +6 -0
  261. data/app/views/shared/_folder_item_actions.html.erb +66 -0
  262. data/app/views/shared/_folder_tools.html.erb +4 -0
  263. data/app/views/shared/_footer.html.erb +14 -0
  264. data/app/views/shared/_header_navbar.html.erb +34 -0
  265. data/app/views/shared/_nav_links.html.erb +58 -0
  266. data/app/views/shared/_search_form_header.html.erb +16 -0
  267. data/app/views/shared/_tools.html.erb +14 -0
  268. data/app/views/shared/_user_util_links.html.erb +43 -0
  269. data/app/views/users/show.html.erb +33 -0
  270. data/commonwealth-vlr-engine.gemspec +47 -0
  271. data/config/initializers/patch_blacklight_advanced_search.rb +74 -0
  272. data/config/initializers/patch_blacklight_maps.rb +20 -0
  273. data/config/jetty.yml +7 -0
  274. data/config/locales/commonwealth-vlr-engine.en.yml +463 -0
  275. data/config/routes.rb +92 -0
  276. data/lib/commonwealth-vlr-engine.rb +55 -0
  277. data/lib/commonwealth-vlr-engine/commonwealth_search_builder.rb +66 -0
  278. data/lib/commonwealth-vlr-engine/controller.rb +69 -0
  279. data/lib/commonwealth-vlr-engine/controller_override.rb +238 -0
  280. data/lib/commonwealth-vlr-engine/engine.rb +40 -0
  281. data/lib/commonwealth-vlr-engine/finder.rb +285 -0
  282. data/lib/commonwealth-vlr-engine/iiif_manifest.rb +189 -0
  283. data/lib/commonwealth-vlr-engine/notifier.rb +33 -0
  284. data/lib/commonwealth-vlr-engine/pages.rb +33 -0
  285. data/lib/commonwealth-vlr-engine/render_constraints_override.rb +57 -0
  286. data/lib/commonwealth-vlr-engine/route_sets.rb +49 -0
  287. data/lib/commonwealth-vlr-engine/routes.rb +21 -0
  288. data/lib/commonwealth-vlr-engine/version.rb +3 -0
  289. data/lib/generators/commonwealth_vlr_engine/controller_generator.rb +92 -0
  290. data/lib/generators/commonwealth_vlr_engine/environment_generator.rb +49 -0
  291. data/lib/generators/commonwealth_vlr_engine/install_generator.rb +57 -0
  292. data/lib/generators/commonwealth_vlr_engine/localassets_generator.rb +29 -0
  293. data/lib/generators/commonwealth_vlr_engine/model_generator.rb +65 -0
  294. data/lib/generators/commonwealth_vlr_engine/routes_generator.rb +39 -0
  295. data/lib/generators/commonwealth_vlr_engine/templates/commonwealth_vlr_engine.css.scss +4 -0
  296. data/lib/generators/commonwealth_vlr_engine/templates/config/contact_emails.yml.sample +13 -0
  297. data/lib/generators/commonwealth_vlr_engine/templates/config/fedora.yml.sample +6 -0
  298. data/lib/generators/commonwealth_vlr_engine/templates/config/geojson_static_file.yml.sample +11 -0
  299. data/lib/generators/commonwealth_vlr_engine/templates/config/google_analytics.yml.sample +10 -0
  300. data/lib/generators/commonwealth_vlr_engine/templates/config/iiif_server.yml.sample +10 -0
  301. data/lib/generators/commonwealth_vlr_engine/templates/config/initializers/a_load_commonwealth_vlr_configs.rb +14 -0
  302. data/lib/generators/commonwealth_vlr_engine/templates/config/initializers/devise.rb +269 -0
  303. data/lib/generators/commonwealth_vlr_engine/templates/config/initializers/secret_token.rb +8 -0
  304. data/lib/generators/commonwealth_vlr_engine/templates/config/locales/blacklight.en.yml +44 -0
  305. data/lib/generators/commonwealth_vlr_engine/templates/config/locales/devise.en.yml +12 -0
  306. data/lib/generators/commonwealth_vlr_engine/templates/config/omniauth-facebook.yml.sample +14 -0
  307. data/lib/generators/commonwealth_vlr_engine/templates/config/omniauth-polaris.yml.sample +20 -0
  308. data/lib/generators/commonwealth_vlr_engine/templates/config/vlr.yml +13 -0
  309. data/lib/generators/commonwealth_vlr_engine/yml_generator.rb +29 -0
  310. data/lib/railties/commonwealth_vlr_engine.rake +6 -0
  311. data/solr_conf/conf/schema.xml +476 -0
  312. data/solr_conf/conf/solrconfig.xml +286 -0
  313. data/spec/controllers/catalog_controller_spec.rb +67 -0
  314. data/spec/controllers/collections_controller_spec.rb +127 -0
  315. data/spec/controllers/feedback_controller_spec.rb +51 -0
  316. data/spec/controllers/folder_items_actions_controller_spec.rb +99 -0
  317. data/spec/controllers/folder_items_controller_spec.rb +90 -0
  318. data/spec/controllers/folders_controller_spec.rb +368 -0
  319. data/spec/controllers/iiif_manifest_controller_spec.rb +85 -0
  320. data/spec/controllers/image_viewer_controller_spec.rb +50 -0
  321. data/spec/controllers/institutions_controller_spec.rb +64 -0
  322. data/spec/controllers/ocr_search_controller_spec.rb +71 -0
  323. data/spec/controllers/pages_controller_spec.rb +58 -0
  324. data/spec/controllers/users_controller_spec.rb +62 -0
  325. data/spec/features/catalog/_az_links_spec.rb +27 -0
  326. data/spec/features/catalog/_show_partials/_show_book_viewer_link_spec.rb +47 -0
  327. data/spec/features/catalog/_show_partials/_show_default_simple_img_viewer_spec.rb +19 -0
  328. data/spec/features/catalog/_show_partials/_show_flagged_notice_spec.rb +23 -0
  329. data/spec/features/catalog/_show_partials/_show_multi_img_spec.rb +18 -0
  330. data/spec/features/catalog/_show_partials/_show_volumes_spec.rb +24 -0
  331. data/spec/features/collections/index_spec.rb +35 -0
  332. data/spec/features/feedback/show_spec.rb +47 -0
  333. data/spec/features/image_viewer/book_viewer_spec.rb +67 -0
  334. data/spec/features/institutions/index_spec.rb +31 -0
  335. data/spec/features/institutions/map_view_spec.rb +37 -0
  336. data/spec/features/more_like_this_search_spec.rb +23 -0
  337. data/spec/features/ocr_search/index_spec.rb +89 -0
  338. data/spec/fixtures/sample_rss_feed.xml +56 -0
  339. data/spec/fixtures/sample_solr_documents.yml +2748 -0
  340. data/spec/helpers/application_helper_spec.rb +114 -0
  341. data/spec/helpers/catalog_helper_spec.rb +386 -0
  342. data/spec/helpers/collections_helper_spec.rb +28 -0
  343. data/spec/helpers/component_helper_spec.rb +34 -0
  344. data/spec/helpers/folders_helper_spec.rb +31 -0
  345. data/spec/helpers/image_viewer_helper_spec.rb +15 -0
  346. data/spec/helpers/institutions_helper_spec.rb +53 -0
  347. data/spec/helpers/ocr_search_helper_spec.rb +70 -0
  348. data/spec/helpers/pages_helper_spec.rb +21 -0
  349. data/spec/lib/commonwealth-vlr-engine/commonwealth_search_builder_spec.rb +101 -0
  350. data/spec/lib/commonwealth-vlr-engine/controller_override_spec.rb +41 -0
  351. data/spec/lib/commonwealth-vlr-engine/controller_spec.rb +33 -0
  352. data/spec/lib/commonwealth-vlr-engine/finder_spec.rb +140 -0
  353. data/spec/lib/commonwealth-vlr-engine/iiif_manifest_spec.rb +157 -0
  354. data/spec/lib/commonwealth-vlr-engine/render_constraints_override_spec.rb +97 -0
  355. data/spec/mailers/notifier_spec.rb +31 -0
  356. data/spec/models/carousel_slide_spec.rb +38 -0
  357. data/spec/spec_helper.rb +40 -0
  358. data/spec/tasks/vlr_engine_rake_spec.rb +28 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +23 -0
  360. data/tasks/vlr_engine.rake +46 -0
  361. metadata +788 -0
@@ -0,0 +1,90 @@
1
+ class FolderItemsController < CatalogController
2
+
3
+ # give controller access to useful BL/Solr methods
4
+ #include Blacklight::Configurable
5
+ #include Blacklight::SearchHelper
6
+
7
+ before_action :verify_user
8
+
9
+ def update
10
+ create
11
+ end
12
+
13
+ def create
14
+ @response, @document = fetch(params[:id])
15
+ if params[:folder_items]
16
+ @folder_items = params[:folder_items]
17
+ else
18
+ @folder_items = [{ :document_id => params[:id], :folder_id => params[:folder_id] }]
19
+ end
20
+
21
+ success = @folder_items.all? do |f_item|
22
+ folder_to_update = current_user.folders.find(f_item[:folder_id])
23
+ folder_to_update.folder_items.create!(:document_id => f_item[:document_id]) and folder_to_update.touch unless folder_to_update.has_folder_item(f_item[:document_id])
24
+ end
25
+
26
+ unless request.xhr?
27
+ flash[:notice] = t('blacklight.folder_items.add.success')
28
+ end
29
+
30
+ respond_to do |format|
31
+ format.html { redirect_to :back }
32
+ format.js
33
+ end
34
+
35
+ end
36
+
37
+
38
+ # Beware, :id is the Solr document_id, not the actual Bookmark id.
39
+ # idempotent, as DELETE is supposed to be.
40
+ # PRETTY SURE THIS METHOD IS NEVER USED!
41
+ def destroy
42
+ @response, @document = fetch(params[:id])
43
+ folder_item = current_user.existing_folder_item_for(params[:id])
44
+
45
+ # success = (!folder_item) || FolderItem.find(folder_item).destroy
46
+
47
+ Bpluser::Folder.find(folder_item.folder_id).touch
48
+ Bpluser::FolderItem.find(folder_item.id).destroy
49
+
50
+ respond_to do |format|
51
+ format.html { redirect_to :back }
52
+ format.js
53
+ end
54
+
55
+ end
56
+
57
+ def clear
58
+ @folder = Bpluser::Folder.find(params[:id])
59
+ if current_user.folders.find(@folder.id).folder_items.clear
60
+ @folder.touch
61
+ flash[:notice] = I18n.t('blacklight.folder_items.clear.success')
62
+ else
63
+ flash[:error] = I18n.t('blacklight.folder_items.clear.failure')
64
+ end
65
+ redirect_to :controller => "folders", :action => "show", :id => @folder
66
+ end
67
+
68
+ # PRETTY SURE THIS METHOD IS NEVER USED!
69
+ def delete_selected
70
+ @folder = Bpluser::Folder.find(params[:id])
71
+ if params[:selected]
72
+ if @folder.folder_items.where(:document_id => params[:selected]).delete_all
73
+ @folder.touch
74
+ flash[:notice] = t('blacklight.folders.update_items.remove.success')
75
+ else
76
+ flash[:error] = t('blacklight.folders.update_items.remove.failure')
77
+ end
78
+ redirect_to :controller => "folders", :action => "show", :id => @folder
79
+ else
80
+ redirect_to :back
81
+ flash[:error] = t('blacklight.folders.update_items.remove.no_items')
82
+ end
83
+ end
84
+
85
+ protected
86
+ def verify_user
87
+ flash[:notice] = I18n.t('blacklight.folders.need_login') and raise Blacklight::Exceptions::AccessDenied unless current_user
88
+ end
89
+
90
+ end
@@ -0,0 +1,132 @@
1
+ class FoldersController < CatalogController
2
+
3
+ ##
4
+ # Give Bookmarks access to the CatalogController configuration
5
+ include Blacklight::Configurable
6
+ include Blacklight::SearchHelper
7
+
8
+ copy_blacklight_config_from(CatalogController)
9
+
10
+ # Blacklight uses #search_action_url to figure out the right URL for
11
+ # the global search box
12
+ def search_action_url options = {}
13
+ catalog_index_url(options.except(:controller, :action))
14
+ end
15
+ helper_method :search_action_url
16
+
17
+ before_filter :verify_user, :except => [:index, :show, :public_list]
18
+ before_filter :check_visibility, :only => [:show]
19
+ before_filter :correct_user_for_folder, :only => [:update, :destroy]
20
+
21
+ def index
22
+ if current_user
23
+ @folders = current_user.folders
24
+ end
25
+ end
26
+
27
+ def show
28
+ # @folder is set by correct_user_for_folder
29
+ @folder_items = @folder.folder_items
30
+ folder_items_ids = @folder_items.collect { |f_item| f_item.document_id.to_s }
31
+ params[:sort] ||= 'title_info_primary_ssort asc, date_start_dtsi asc'
32
+ @response, @document_list = fetch(folder_items_ids)
33
+
34
+ # have to declare this so view uses catalog/index partials
35
+ # uh, maybe not? default templates won't get invoked if below is set
36
+ #@partial_path_templates = ["catalog/%{action_name}_%{index_view_type}_%{format}"]
37
+ end
38
+
39
+ def new
40
+ @folder = current_user.folders.new
41
+ end
42
+
43
+ def create
44
+ @folder = current_user.folders.build(folder_params)
45
+ if @folder.save
46
+ flash[:notice] = "Folder created."
47
+ redirect_to :action => "index"
48
+ else
49
+ render :action => "new"
50
+ end
51
+ end
52
+
53
+ # create a folder in a modal window in the item show view
54
+ #def create_folder_catalog
55
+ # if request.post?
56
+ # unless params[:title].empty?
57
+ # @folder = current_user.folders.build(:title => params[:title], :description => params[:description])
58
+ # if @folder.save
59
+ # flash[:success] = "Folder created; " + t('blacklight.folder_items.add.success')
60
+ # current_user.folders.first.folder_items.create!(:document_id => params['id'].first)
61
+ # redirect_to catalog_path(params['id']) unless request.xhr?
62
+ # else
63
+ # flash[:error] = t('blacklight.folders.create.error.no_save')
64
+ # end
65
+ # else
66
+ # flash[:error] = t('blacklight.folders.create.error.no_title')
67
+ # end
68
+ # end
69
+
70
+ # unless !request.xhr? && flash[:success]
71
+ # respond_to do |format|
72
+ # format.js { render :layout => false }
73
+ # format.html { redirect_to :action => "new" }
74
+ # end
75
+ # end
76
+
77
+ #end
78
+
79
+ def edit
80
+ @folder = Bpluser::Folder.find(params[:id])
81
+ end
82
+
83
+ def update
84
+ # @folder is set by correct_user_for_folder
85
+ if @folder.update_attributes(folder_params)
86
+ flash[:notice] = "Folder updated."
87
+ redirect_to @folder
88
+ else
89
+ render :action => "edit"
90
+ end
91
+ end
92
+
93
+ def destroy
94
+ # @folder is set by correct_user_for_folder
95
+ @folder.destroy
96
+ flash[:notice] = t('blacklight.folders.delete.success')
97
+ redirect_to :action => "index"
98
+ end
99
+
100
+ # return a list of publicly visible folders that have items
101
+ def public_list
102
+ # TODO create a named scope for this query in Bplmodels::Folder?
103
+ @folders = Bpluser::Folder.where(:visibility => 'public').joins(:folder_items).uniq.order('updated_at DESC')
104
+ end
105
+
106
+ private
107
+
108
+ def folder_params
109
+ params.require(:folder).permit(:id, :title, :description, :visibility)
110
+ end
111
+
112
+ def verify_user
113
+ flash[:notice] = t('blacklight.folders.need_login') and raise Blacklight::Exceptions::AccessDenied unless current_user
114
+ end
115
+
116
+ def check_visibility
117
+ @folder = Bpluser::Folder.find(params[:id])
118
+ if @folder.visibility != 'public'
119
+ correct_user_for_folder
120
+ end
121
+ end
122
+
123
+ def correct_user_for_folder
124
+ @folder ||= Bpluser::Folder.find(params[:id])
125
+ if current_user
126
+ flash[:notice] = t('blacklight.folders.private') and redirect_to root_path unless current_user.folders.include?(@folder)
127
+ else
128
+ flash[:notice] = t('blacklight.folders.private') and redirect_to root_path
129
+ end
130
+ end
131
+
132
+ end
@@ -0,0 +1,74 @@
1
+ # use to render new image in multi image viewer in catalog#show
2
+ class IiifManifestController < CatalogController
3
+
4
+ include CommonwealthVlrEngine::CatalogHelper
5
+ include CommonwealthVlrEngine::IiifManifest
6
+
7
+ def manifest
8
+ response, document = fetch(params[:id])
9
+ image_files = get_image_files(params[:id])
10
+ if image_files.length > 0
11
+ iiif_manifest = create_iiif_manifest(document, image_files)
12
+ render :json => iiif_manifest.to_json
13
+ elsif get_volume_objects(params[:id]).length > 0
14
+ redirect_to iiif_collection_path(params[:id])
15
+ else
16
+ not_found
17
+ end
18
+ end
19
+
20
+ def canvas
21
+ canvas_response, canvas_document = fetch(params[:canvas_object_id])
22
+ if canvas_document[:is_file_of_ssim]
23
+ response, document = fetch(params[:id])
24
+ image_files = has_image_files?(get_files(params[:id]))
25
+ if image_files
26
+ image_index = Hash[image_files.map.with_index.to_a][params[:canvas_object_id]]
27
+ iiif_canvas = canvas_from_id(params[:canvas_object_id],
28
+ label_for_canvas(canvas_document, image_index),
29
+ document)
30
+ render :json => iiif_canvas.to_json
31
+ else
32
+ not_found
33
+ end
34
+ else
35
+ not_found
36
+ end
37
+ end
38
+
39
+ def annotation
40
+ response, document = fetch(params[:id])
41
+ if has_image_files?(get_files(params[:id])).include?(params[:annotation_object_id])
42
+ annotation = image_annotation_from_image_id(params[:annotation_object_id], document)
43
+ render :json => annotation.to_json
44
+ else
45
+ not_found
46
+ end
47
+ end
48
+
49
+ def collection
50
+ response, document = fetch(params[:id])
51
+ volumes = get_volume_objects(params[:id])
52
+ if volumes.length > 0
53
+ iiif_collection = collection_for_manifests(document, volumes)
54
+ render :json => iiif_collection.to_json
55
+ else
56
+ not_found
57
+ end
58
+ end
59
+
60
+ after_action :set_access_control_headers, :only => [:manifest, :canvas, :annotation, :collection]
61
+
62
+ private
63
+
64
+ # to allow apps to load manifest JSON received from a remote server
65
+ def set_access_control_headers
66
+ headers['Access-Control-Allow-Origin'] = "*"
67
+ end
68
+
69
+ def not_found
70
+ raise ActionController::RoutingError.new('Not Found')
71
+ end
72
+
73
+
74
+ end
@@ -0,0 +1,34 @@
1
+ # use to render new image in multi image viewer in catalog#show
2
+ class ImageViewerController < CatalogController
3
+
4
+ include CommonwealthVlrEngine::CatalogHelper
5
+
6
+ def show
7
+ @response, @document = fetch(params[:id])
8
+ #@img_to_show = params[:view]
9
+ @title = @document[blacklight_config.index.title_field.to_sym]
10
+ @page_sequence = get_page_sequence(@document.id, params[:view])
11
+ respond_to do |format|
12
+ format.js
13
+ format.html { redirect_to catalog_path(@document.id,
14
+ :view => params[:view]) }
15
+ end
16
+ end
17
+
18
+ def book_viewer
19
+ @response, @document = fetch(params[:id])
20
+ @image_files = has_image_files?(get_files(params[:id]))
21
+ render(:layout => 'book_viewer')
22
+ end
23
+
24
+ private
25
+
26
+ def get_page_sequence(document_id, current_img_id)
27
+ image_files = []
28
+ get_image_files(document_id).each do |img_file|
29
+ image_files << img_file['id']
30
+ end
31
+ create_img_sequence(image_files, current_img_id)
32
+ end
33
+
34
+ end
@@ -0,0 +1,62 @@
1
+ class InstitutionsController < CatalogController
2
+
3
+ ##
4
+ # Give Bookmarks access to the CatalogController configuration
5
+ include Blacklight::Configurable
6
+ include Blacklight::SearchHelper
7
+
8
+ copy_blacklight_config_from(CatalogController)
9
+
10
+ # Blacklight uses #search_action_url to figure out the right URL for
11
+ # the global search box
12
+ def search_action_url options = {}
13
+ catalog_index_url(options.except(:controller, :action))
14
+ end
15
+ helper_method :search_action_url
16
+
17
+ def index
18
+ @nav_li_active = 'explore'
19
+ self.search_params_logic += [:institutions_filter]
20
+ params[:per_page] = params[:per_page].presence || '50'
21
+ (@response, @document_list) = search_results(params, search_params_logic)
22
+ params[:view] ||= 'list' # still need this or grid view is invoked
23
+ params[:sort] = 'title_info_primary_ssort asc'
24
+
25
+ respond_to do |format|
26
+ format.html
27
+ end
28
+ end
29
+
30
+ def show
31
+ @nav_li_active = 'explore'
32
+ @show_response, @document = fetch(params[:id])
33
+ @institution_title = @document[blacklight_config.index.title_field.to_sym]
34
+
35
+ # get the response for collection objects
36
+ @collex_response, @collex_documents = search_results({:f => {'active_fedora_model_suffix_ssi' => 'Collection','institution_pid_ssi' => params[:id]},:rows => 100, :sort => 'title_info_primary_ssort asc'}, search_params_logic)
37
+
38
+ # add params[:f] for proper facet links
39
+ params[:f] = {blacklight_config.institution_field => [@institution_title]}
40
+
41
+ # get the response for the facets representing items in collection
42
+ (@response, @document_list) = search_results({:f => params[:f]}, search_params_logic)
43
+
44
+ respond_to do |format|
45
+ format.html
46
+ end
47
+
48
+ end
49
+
50
+ # remove grid view from blacklight_config for index view
51
+ def remove_unwanted_views
52
+ blacklight_config.view.delete(:gallery)
53
+ blacklight_config.view.delete(:masonry)
54
+ blacklight_config.view.delete(:slideshow)
55
+ end
56
+
57
+ before_filter :remove_unwanted_views, :only => [:index]
58
+
59
+ # remove collection facet and collapse others
60
+ before_filter :relation_base_blacklight_config, :only => [:show]
61
+
62
+ end
@@ -0,0 +1,78 @@
1
+ class OcrSearchController < CatalogController
2
+
3
+ ##
4
+ # access to the CatalogController configuration
5
+ include Blacklight::Configurable
6
+ include Blacklight::SearchHelper
7
+ include CommonwealthVlrEngine::CatalogHelper
8
+
9
+ copy_blacklight_config_from(CatalogController)
10
+
11
+ before_filter :modify_config_for_ocr, :only => [:index]
12
+ before_filter :modify_search_params_logic_for_ocr, :only => [:index]
13
+
14
+ def index
15
+ @doc_response, @document = fetch(params[:id])
16
+ if params[:ocr_q]
17
+ @image_pid_list = has_image_files?(get_files(params[:id]))
18
+ ocr_search_params = {q: params[:ocr_q],
19
+ f: {'is_file_of_ssim' => "info:fedora/#{params[:id]}"}}
20
+ ocr_search_params[:page] = params[:page] if params[:page]
21
+ ocr_search_params[:sort] = params[:sort] if params[:sort]
22
+ # for some reason, have to set :fl here, or gets scrubbed out of ocr_search_params somehow
23
+ blacklight_config.default_solr_params[:fl] =
24
+ "id,#{blacklight_config.page_num_field},#{termfreq_query(params[:ocr_q])}"
25
+ (@response, @document_list) = search_results(ocr_search_params, search_params_logic)
26
+ else
27
+ (@response, @document_list) = {},[]
28
+ end
29
+
30
+ respond_to do |format|
31
+ # Draw the facet selector for users who have javascript disabled:
32
+ format.html
33
+ # Draw the partial for the ocr search results modal window:
34
+ format.js { render :layout => false }
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ # modify Solr query/response for OCR searches
41
+ def modify_config_for_ocr
42
+ blacklight_config.sort_fields = {}
43
+ blacklight_config.add_sort_field 'score desc, system_create_dtsi asc', label: 'relevance'
44
+ blacklight_config.add_sort_field 'system_create_dtsi asc', label: 'page #'
45
+ blacklight_config.add_facet_fields_to_solr_request = false
46
+ blacklight_config.add_index_field blacklight_config.ocr_search_field,
47
+ highlight: true,
48
+ helper_method: 'render_ocr_snippets'
49
+ blacklight_config.default_per_page = 5
50
+ end
51
+
52
+ # modify Solr search_params_logic for OCR searches
53
+ def modify_search_params_logic_for_ocr
54
+ self.search_params_logic -= [:exclude_unwanted_models, :institution_limit]
55
+ self.search_params_logic += [:ocr_search_params] unless self.search_params_logic.include?(:ocr_search_params)
56
+ end
57
+
58
+ # create the Solr function query to return term frequency
59
+ def termfreq_query(ocr_search_terms)
60
+ search_terms = if ocr_search_terms =~ (/\A"[\s\S]*"\z/) # phrase search
61
+ [ocr_search_terms.gsub(/"/,'')]
62
+ else
63
+ ocr_search_terms.gsub(/"/,'').split(' ')
64
+ end
65
+ if search_terms.length == 1
66
+ "term_freq:termfreq(#{blacklight_config.ocr_search_field},\"#{search_terms.first}\")"
67
+ else
68
+ termfreq_array = search_terms.map { |v| "termfreq(#{blacklight_config.ocr_search_field},\"#{v}\")" }
69
+ "term_freq:sum(#{termfreq_array.join(',')})"
70
+ end
71
+ end
72
+
73
+ # don't add OCR searches to Blacklight's search history/session
74
+ def start_new_search_session?
75
+ false
76
+ end
77
+
78
+ end