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,40 @@
1
+ require 'blacklight'
2
+ require 'blacklight/gallery'
3
+ require 'blacklight_advanced_search'
4
+ require 'blacklight/maps'
5
+ require 'bpluser'
6
+ require 'typhoeus'
7
+ require 'devise'
8
+ require 'devise-guests'
9
+ require 'omniauth'
10
+ require 'omniauth-ldap'
11
+ require 'omniauth-facebook'
12
+ require 'omniauth-polaris'
13
+ require 'bootstrap-sass'
14
+ require 'font-awesome-sass'
15
+ require 'unicode'
16
+ require 'madison'
17
+ require 'iiif/presentation'
18
+
19
+ module CommonwealthVlrEngine
20
+
21
+ class Engine < Rails::Engine
22
+
23
+ # for db migrations
24
+ engine_name 'commonwealth_vlr_engine'
25
+
26
+ config.to_prepare do
27
+ CommonwealthVlrEngine.inject!
28
+ end
29
+
30
+ # This makes our rake tasks visible.
31
+ rake_tasks do
32
+ Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))) do
33
+ Dir.glob(File.join('tasks', '*.rake')).each do |railtie|
34
+ load railtie
35
+ end
36
+ end
37
+ #load "#{config.root}/tasks/dc_public.rake"
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,285 @@
1
+ module CommonwealthVlrEngine
2
+ module Finder
3
+
4
+ def get_files(pid)
5
+
6
+ return_hash = {}
7
+ return_hash[:images] = []
8
+ return_hash[:documents] = []
9
+ return_hash[:audio] = []
10
+ return_hash[:ereader] = []
11
+ return_hash[:generic] = []
12
+
13
+ solr_response = repository.search({:q => "is_file_of_ssim:\"info:fedora/#{pid}\"", :rows => 1000})
14
+
15
+ solr_response.documents.each do |solr_doc|
16
+ if solr_doc['has_model_ssim'].include?('info:fedora/afmodel:Bplmodels_AudioFile')
17
+ return_hash[:audio] << solr_doc
18
+ elsif solr_doc['has_model_ssim'].include?('info:fedora/afmodel:Bplmodels_ImageFile')
19
+ return_hash[:images] << solr_doc
20
+ elsif solr_doc['has_model_ssim'].include?('info:fedora/afmodel:Bplmodels_DocumentFile')
21
+ return_hash[:documents] << solr_doc
22
+ elsif solr_doc['has_model_ssim'].include?('info:fedora/afmodel:Bplmodels_EreaderFile')
23
+ return_hash[:ereader] << solr_doc
24
+ else
25
+ return_hash[:generic] << solr_doc
26
+ end
27
+ end
28
+
29
+ return_hash[:images] = sort_files(return_hash[:images])
30
+ return_hash[:documents] = sort_files(return_hash[:documents])
31
+ return_hash[:audio] = sort_files(return_hash[:audio])
32
+ return_hash[:ereader] = sort_files(return_hash[:ereader])
33
+ return_hash[:generic] = sort_files(return_hash[:generic])
34
+
35
+ return return_hash
36
+ end
37
+
38
+
39
+ def sort_files(file_list)
40
+ return file_list if file_list.length <= 1
41
+
42
+ following_key_final = nil
43
+ preceding_key_final = nil
44
+
45
+ ending_item_pid = nil
46
+ next_item_pid = nil
47
+
48
+ return_list = []
49
+ file_list.each do |file|
50
+ preceding_key = file.keys.select { |key| key.include?'preceding'}
51
+ following_key = file.keys.select { |key| key.include?'following'}
52
+
53
+ if following_key.blank?
54
+ return_list.insert(0, file)
55
+ preceding_key_final = preceding_key.first
56
+ next_item_pid = file[preceding_key_final].first
57
+ elsif preceding_key.blank?
58
+ following_key_final = following_key.first
59
+ return_list.insert(-1, file)
60
+ ending_item_pid = "info:fedora/#{file['id']}"
61
+ end
62
+ end
63
+
64
+ while next_item_pid != ending_item_pid
65
+ next_item = file_list.select { |array| "info:fedora/#{array['id'].to_s}" == next_item_pid }.first
66
+ return_list.insert(-2, next_item)
67
+ next_item_pid = next_item[preceding_key_final].first.to_s
68
+ end
69
+
70
+ return return_list
71
+ end
72
+
73
+ def get_volume_objects(pid)
74
+ return_list = []
75
+ volumes_list = []
76
+ solr_response = repository.search({:q => "is_volume_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_Volume\"", :rows => 1000})
77
+
78
+ solr_response.documents.each do |solr_object|
79
+ volumes_list << solr_object
80
+ end
81
+ sort_files(volumes_list).each do |volume|
82
+ volume_files = get_files(volume.id)
83
+ return_list << {vol_doc: volume, vol_files: volume_files.except(:images)}
84
+ end
85
+ return_list
86
+ end
87
+
88
+ def get_image_files(pid)
89
+ return_list = []
90
+ solr_response = repository.search({:q => "is_image_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_ImageFile\"", :rows => 1000})
91
+
92
+ solr_response.documents.each do |solr_object|
93
+ return_list << solr_object
94
+ end
95
+ return sort_files(return_list)
96
+ end
97
+
98
+ def get_audio_files(pid)
99
+ return_list = []
100
+ solr_response = repository.search({:q => "is_audio_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')} AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_AudioFile\"", :rows => 1000})
101
+
102
+ solr_response.documents.each do |solr_object|
103
+ return_list << solr_object
104
+ end
105
+ return sort_files(return_list)
106
+ end
107
+
108
+ def get_document_files(pid)
109
+ return_list = []
110
+ solr_response = repository.search({:q => "is_document_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_DocumentFile\"", :rows => 1000})
111
+
112
+ solr_response.documents.each do |solr_object|
113
+ return_list << solr_object
114
+ end
115
+ return sort_files(return_list)
116
+ end
117
+
118
+ def get_ereader_files(pid)
119
+ return_list = []
120
+ solr_response = repository.search({:q => "is_ereader_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_EreaderFile\"", :rows => 1000})
121
+
122
+ solr_response.documents.each do |solr_object|
123
+ return_list << solr_object
124
+ end
125
+ return sort_files(return_list)
126
+ end
127
+
128
+ def get_first_volume_object(pid)
129
+ return_list = []
130
+ solr_response = repository.search({:q => "-is_following_volume_of_ssim:* AND is_volume_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_Volume\""})
131
+
132
+ solr_response.documents.each do |solr_object|
133
+ return_list << solr_object
134
+ end
135
+ return sort_files(return_list)
136
+ end
137
+
138
+ def get_first_image_file(pid)
139
+ solr_response = repository.search({:q => "-is_following_image_of_ssim:* AND is_image_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_ImageFile\""})
140
+
141
+ solr_response.documents.each do |solr_object|
142
+ return solr_object
143
+ end
144
+ return nil
145
+ end
146
+
147
+ def get_first_audio_file(pid)
148
+ solr_response = repository.search({:q => "-is_following_audio_of_ssim:* AND is_audio_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_AudioFile\""})
149
+
150
+ solr_response.documents.each do |solr_object|
151
+ return solr_object
152
+ end
153
+ return nil
154
+ end
155
+
156
+ def get_first_document_file(pid)
157
+ solr_response = repository.search({:q => "-is_following_document_of_ssim:* AND is_document_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_DocumentFile\""})
158
+
159
+ solr_response.documents.each do |solr_object|
160
+ return solr_object
161
+ end
162
+ return nil
163
+ end
164
+
165
+ def get_first_ereader_file(pid)
166
+ solr_response = repository.search({:q => "-is_following_ereader_of_ssim:* AND is_document_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_EreaderFile\""})
167
+
168
+ solr_response.documents.each do |solr_object|
169
+ return solr_object
170
+ end
171
+ return nil
172
+ end
173
+
174
+ def get_next_volume_object(pid)
175
+ solr_response = repository.search({:q => "is_following_volume_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_Volume\""})
176
+
177
+ solr_response.documents.each do |solr_object|
178
+ return solr_object
179
+ end
180
+ return nil
181
+ end
182
+
183
+ def get_next_image_file(pid)
184
+ solr_response = repository.search({:q => "is_following_image_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_ImageFile\""})
185
+
186
+ solr_response.documents.each do |solr_object|
187
+ return solr_object
188
+ end
189
+ return nil
190
+ end
191
+
192
+ def get_next_audio_file(pid)
193
+ solr_response = repository.search({:q => "is_following_audio_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_AudioFile\""})
194
+
195
+ solr_response.documents.each do |solr_object|
196
+ return solr_object
197
+ end
198
+ return nil
199
+ end
200
+
201
+ def get_next_document_file(pid)
202
+ solr_response = repository.search({:q => "is_following_document_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_DocumentFile\""})
203
+
204
+ solr_response.documents.each do |solr_object|
205
+ return solr_object
206
+ end
207
+ return nil
208
+ end
209
+
210
+ def get_next_ereader_file(pid)
211
+ solr_response = repository.search({:q => "is_following_ereader_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_EreaderFile\""})
212
+
213
+ solr_response.documents.each do |solr_object|
214
+ return solr_object
215
+ end
216
+ return nil
217
+ end
218
+
219
+ def get_prev_volume_object(pid)
220
+ solr_response = repository.search({:q => "is_preceding_volume_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_Volume\""})
221
+
222
+ solr_response.documents.each do |solr_object|
223
+ return solr_object
224
+ end
225
+ return nil
226
+ end
227
+
228
+ def get_prev_image_file(pid)
229
+ solr_response = repository.search({:q => "is_preceding_image_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_ImageFile\""})
230
+
231
+ solr_response.documents.each do |solr_object|
232
+ return solr_object
233
+ end
234
+ return nil
235
+ end
236
+
237
+ def get_prev_audio_file(pid)
238
+ solr_response = repository.search({:q => "is_preceding_audio_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_AudioFile\""})
239
+
240
+ solr_response.documents.each do |solr_object|
241
+ return solr_object
242
+ end
243
+ return nil
244
+ end
245
+
246
+ def get_prev_document_file(pid)
247
+ solr_response = repository.search({:q => "is_preceding_document_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_DocumentFile\""})
248
+
249
+ solr_response.documents.each do |solr_object|
250
+ return solr_object
251
+ end
252
+ return nil
253
+ end
254
+
255
+ def get_prev_ereader_file(pid)
256
+ solr_response = repository.search({:q => "is_preceding_ereader_of_ssim:\"info\:fedora/#{pid.gsub(':', '\:')}\" AND has_model_ssim:\"info\:fedora/afmodel:Bplmodels_EreaderFile\""})
257
+
258
+ solr_response.documents.each do |solr_object|
259
+ return solr_object
260
+ end
261
+ return nil
262
+ end
263
+
264
+ def get_volume_parent_object(volume_pid)
265
+ solr_response = repository.search({:q => "id:\"#{volume_pid}\" AND has_model_ssim:\"info:fedora/afmodel:Bplmodels_Volume\""})
266
+
267
+ solr_response.documents.each do |solr_object|
268
+ return solr_object['is_volume_of_ssim'].first.split('/')[1]
269
+ end
270
+
271
+ return nil
272
+ end
273
+
274
+ def get_file_parent_object(file_pid)
275
+ solr_response = repository.search({:q => "id:\"#{file_pid}\" AND has_model_ssim:\"info:fedora/afmodel:Bplmodels_File\""})
276
+
277
+ solr_response.documents.each do |solr_object|
278
+ return solr_object['is_file_of_ssim'].first.split('/')[1]
279
+ end
280
+
281
+ return nil
282
+ end
283
+
284
+ end
285
+ end
@@ -0,0 +1,189 @@
1
+ # methods used to create IIIF Presentation API manifest
2
+ module CommonwealthVlrEngine
3
+ module IiifManifest
4
+ extend ActiveSupport::Concern
5
+
6
+ include IIIF::Presentation
7
+
8
+ # create an IIIF manifest
9
+ # document = SolrDocument
10
+ # image_files = an array of ImageFile Solr documents
11
+ def create_iiif_manifest(document, image_files)
12
+ manifest = IIIF::Presentation::Manifest.new('@id' => "#{document[:identifier_uri_ss]}/manifest")
13
+ manifest.label = render_main_title(document)
14
+ manifest.viewing_hint = image_files.length > 1 ? 'paged' : 'individuals'
15
+ manifest.metadata = manifest_metadata(document)
16
+ manifest.description = document[:abstract_tsim].first if document[:abstract_tsim]
17
+
18
+ manifest.attribution = manifest_attribution(document).presence
19
+
20
+ if document[:license_ssm]
21
+ document[:license_ssm].each do |license|
22
+ if license.match(/\(CC\s/)
23
+ manifest.license = cc_url(license)
24
+ end
25
+ end
26
+ end
27
+
28
+ manifest.see_also = document[:identifier_uri_ss] if document[:identifier_uri_ss]
29
+
30
+ sequence = IIIF::Presentation::Sequence.new
31
+ image_files.each_with_index do |image, index|
32
+ sequence.canvases << canvas_from_id(image.id, label_for_canvas(image, index), document)
33
+ end
34
+ manifest.sequences << sequence
35
+
36
+ manifest_thumb_svc = manifest.sequences.first.canvases.first.images.first.resource.service
37
+ manifest_thumb_svc['@id'] = manifest_thumb_svc['@id'].gsub(/[\-:\w]+\z/,document[:exemplary_image_ssi]) if document[:exemplary_image_ssi]
38
+ manifest.insert_after(existing_key: 'label',
39
+ new_key: 'thumbnail',
40
+ value: {'@id' => "#{document[:identifier_uri_ss]}/thumbnail",
41
+ 'service' => manifest_thumb_svc})
42
+
43
+ manifest
44
+ end
45
+
46
+ # create an IIIF canvas
47
+ # image_id = id of image object
48
+ # label = the label property of the canvas
49
+ # document = Solr doc of parent object
50
+ def canvas_from_id(image_id, label, document)
51
+ image_id_suffix = image_id.gsub(/\A[\w-]+:/,'/')
52
+ annotation = image_annotation_from_image_id(image_id, document)
53
+ canvas = IIIF::Presentation::Canvas.new('@id' => "#{document[:identifier_uri_ss]}/canvas#{image_id_suffix}")
54
+ canvas.label = label
55
+ canvas.thumbnail = document[:identifier_uri_ss].gsub(/\/[\w]+\z/, image_id_suffix) + "/thumbnail"
56
+ canvas.width = annotation.resource['width']
57
+ canvas.height = annotation.resource['height']
58
+ canvas.images << annotation
59
+ canvas
60
+ end
61
+
62
+ # create an IIIF Annotation
63
+ # image_id = id of image object
64
+ # document = Solr doc of parent object
65
+ def image_annotation_from_image_id(image_id, document)
66
+ image_id_suffix = image_id.gsub(/\A[\w-]+:/,'/')
67
+ annotation = IIIF::Presentation::Annotation.new('@id' => "#{document[:identifier_uri_ss]}/annotation#{image_id_suffix}")
68
+ annotation.resource = image_resource_from_image_id(image_id, document)
69
+ annotation['on'] = "#{document[:identifier_uri_ss]}/canvas#{image_id_suffix}"
70
+ annotation
71
+ end
72
+
73
+ # return an IIIF image resource
74
+ # page_id = id of image object
75
+ # document = SolrDocument of parent object
76
+ def image_resource_from_image_id(page_id, document)
77
+ base_uri = "#{IIIF_SERVER['url']}#{page_id}"
78
+ params = {service_id: base_uri,
79
+ resource_id: document[:identifier_uri_ss].gsub(/\/[\w]+\z/, page_id.gsub(/\A[\w-]+:/,'/')) + "/large_image"}
80
+ image_resource = IIIF::Presentation::ImageResource.create_image_api_image_resource(params)
81
+ image_resource
82
+ end
83
+
84
+ # return an IIIF Collection resource (for multi-part works)
85
+ # document = SolrDocument of series object
86
+ # manifest_docs = Array of SolrDocument of volume-level objects
87
+ def collection_for_manifests(document, manifest_docs)
88
+ collection = IIIF::Presentation::Collection.new('@id' => document[:identifier_uri_ss].gsub(/\/[\w]+\z/,"/collection\\0"))
89
+ collection.label = 'Multi-part work description'
90
+ collection.viewing_hint = 'multi-part'
91
+ collection.attribution = manifest_attribution(document).presence
92
+ collection.metadata = manifest_metadata(document)
93
+ collection.description = 'This document describes an IIIF Collection, which points to a series of IIIF Manifests comprising the individual items in this multi-volume work'
94
+ if document[:license_ssm]
95
+ document[:license_ssm].each do |license|
96
+ if license.match(/\(CC\s/)
97
+ collection.license = cc_url(license)
98
+ end
99
+ end
100
+ end
101
+ collection.thumbnail = "#{document[:identifier_uri_ss]}/thumbnail" if document[:exemplary_image_ssi]
102
+ manifest_docs.each do |manifest_doc|
103
+ manifest_id = document[:identifier_uri_ss].gsub(/\/[\w]+\z/, manifest_doc[:vol_doc].id.gsub(/\A[\w-]+:/,'/')) + "/manifest"
104
+ collection.manifests << {'@id' => manifest_id,
105
+ '@type' => 'sc:Manifest',
106
+ 'label' => render_main_title(manifest_doc[:vol_doc])}
107
+ end
108
+ collection
109
+ end
110
+
111
+ # returns a basic Dublin Core-esque metadata set array
112
+ # document = SolrDocument
113
+ def manifest_metadata(document)
114
+ manifest_metadata = []
115
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.title'), value: render_full_title(document)}
116
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.date'), value: render_mods_dates(document).first} if document[:date_start_tsim]
117
+
118
+ if document[:name_personal_tsim] || document[:name_corporate_tsim] || document[:name_generic_tsim]
119
+ names = setup_names_roles(document).first
120
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.creator'), value: names.length == 1 ? names.first : names}
121
+ end
122
+
123
+ if document[:publisher_tsim]
124
+ pubplace = document[:pubplace_tsim] ? document[:pubplace_tsim].first + ' : ' : ''
125
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.publisher'), value: pubplace + document[:publisher_tsim].first}
126
+ end
127
+
128
+ some_fields = {
129
+ :type_of_resource_ssim => t('blacklight.metadata_display.fields.type_of_resource'),
130
+ :genre_basic_ssim => t('blacklight.metadata_display.fields.genre_basic'),
131
+ :abstract_tsim => t('blacklight.metadata_display.fields.abstract'),
132
+ :lang_term_ssim => t('blacklight.metadata_display.fields.language'),
133
+ :subject_facet_ssim => t('blacklight.metadata_display.fields.subject_topic'),
134
+ :physical_location_ssim => t('blacklight.metadata_display.fields.location'),
135
+ :related_item_host_ssim => t('blacklight.metadata_display.fields.collection')
136
+ }
137
+ some_fields.each do |k,v|
138
+ values = document[k]
139
+ manifest_metadata << {label: v, value: values.length == 1 ? values.first : values} if values
140
+ end
141
+
142
+ if document[:identifier_uri_ss]
143
+ identifiers = [document[:identifier_uri_ss]]
144
+ [:identifier_local_other_tsim, :identifier_local_call_tsim, :identifier_local_barcode_tsim, :identifier_isbn_tsim, :local_accession_id_tsim].each do |k|
145
+ identifiers = identifiers + document[k] if document[k]
146
+ end
147
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.id_local_other'), value: identifiers.length == 1 ? identifiers.first : identifiers}
148
+ end
149
+
150
+ if document[:rights_ssm]
151
+ rights = document[:rights_ssm] + document[:license_ssm].presence.to_a
152
+ manifest_metadata << {label: t('blacklight.metadata_display.fields.rights'), value: rights}
153
+ end
154
+
155
+ manifest_metadata
156
+ end
157
+
158
+ # returns the appropriate attribution statement
159
+ def manifest_attribution(document)
160
+ attribution_array = []
161
+ [:rights_ssm, :license_ssm, :restrictions_on_access_ssm].each do |field|
162
+ attribution_array = attribution_array + document[field].presence.to_a
163
+ end
164
+ attribution_array.blank? ? nil : attribution_array.join(' ')
165
+ end
166
+
167
+ # returns the appropriate label for the page/file
168
+ # image_doc = ImageFile Solr document
169
+ # index = the index of the page in the image_files array
170
+ def label_for_canvas(image_doc, index)
171
+ page_type = image_doc[:page_type_ssi]
172
+ if page_type && page_type != 'Normal'
173
+ case page_type
174
+ when 'Title'
175
+ 'Title page'
176
+ when 'Contents'
177
+ 'Table of Contents'
178
+ else
179
+ page_type
180
+ end
181
+ elsif image_doc[:page_num_label_ssi]
182
+ "page #{image_doc[:page_num_label_ssi]}"
183
+ else
184
+ "image #{(index+1).to_s}"
185
+ end
186
+ end
187
+
188
+ end
189
+ end