blacklight-spotlight 2.13.0 → 3.0.0.alpha.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 (282) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/blacklight/add_circle.svg +1 -0
  3. data/app/assets/images/blacklight/arrow_back_ios.svg +1 -0
  4. data/app/assets/images/blacklight/arrow_forward_ios.svg +1 -0
  5. data/app/assets/images/blacklight/check.svg +1 -0
  6. data/app/assets/images/blacklight/check_circle.svg +1 -0
  7. data/app/assets/images/blacklight/chevron_right.svg +1 -0
  8. data/app/assets/images/blacklight/custom_fullscreen.svg +1 -0
  9. data/app/assets/images/blacklight/edit.svg +1 -0
  10. data/app/assets/images/blacklight/error.svg +1 -0
  11. data/app/assets/images/blacklight/info.svg +1 -0
  12. data/app/assets/images/blacklight/remove_circle.svg +1 -0
  13. data/app/assets/images/blacklight/remove_circle_outline.svg +1 -0
  14. data/app/assets/images/blacklight/resize_small.svg +1 -0
  15. data/app/assets/images/blacklight/warning.svg +1 -0
  16. data/app/assets/javascripts/spotlight/admin/block_mixins/autocompleteable.js +1 -1
  17. data/app/assets/javascripts/spotlight/admin/block_mixins/plustextable.js +2 -2
  18. data/app/assets/javascripts/spotlight/admin/blocks/browse_block.js +1 -1
  19. data/app/assets/javascripts/spotlight/admin/blocks/pages_block.js +1 -1
  20. data/app/assets/javascripts/spotlight/admin/blocks/resources_block.js +7 -7
  21. data/app/assets/javascripts/spotlight/admin/blocks/solr_documents_base_block.js +3 -3
  22. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +7 -7
  23. data/app/assets/javascripts/spotlight/admin/catalog_edit.js +2 -2
  24. data/app/assets/javascripts/spotlight/admin/multi_image_selector.js +2 -2
  25. data/app/assets/javascripts/spotlight/admin/reindex_monitor.js +1 -1
  26. data/app/assets/javascripts/spotlight/admin/search_typeahead.js +2 -2
  27. data/app/assets/javascripts/spotlight/admin/sir-trevor/block_controls.js +1 -1
  28. data/app/assets/javascripts/spotlight/admin/users.js +1 -1
  29. data/app/assets/javascripts/spotlight/user/index.js +1 -0
  30. data/app/assets/javascripts/spotlight/user/zpr_links.js.erb +6 -6
  31. data/app/assets/stylesheets/spotlight/_blacklight_configuration.scss +44 -4
  32. data/app/assets/stylesheets/spotlight/_blacklight_overrides.scss +4 -8
  33. data/app/assets/stylesheets/spotlight/_bootstrap_overrides.scss +31 -14
  34. data/app/assets/stylesheets/spotlight/_browse.scss +16 -13
  35. data/app/assets/stylesheets/spotlight/_catalog.scss +13 -7
  36. data/app/assets/stylesheets/spotlight/_collapse_toggle.scss +10 -14
  37. data/app/assets/stylesheets/spotlight/_curation.scss +34 -32
  38. data/app/assets/stylesheets/spotlight/_exhibit_admin.scss +4 -29
  39. data/app/assets/stylesheets/spotlight/_exhibits_index.scss +16 -14
  40. data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +22 -20
  41. data/app/assets/stylesheets/spotlight/_footer.scss +2 -2
  42. data/app/assets/stylesheets/spotlight/_header.scss +18 -39
  43. data/app/assets/stylesheets/spotlight/_item_text_block.scss +1 -24
  44. data/app/assets/stylesheets/spotlight/_mixins.scss +3 -8
  45. data/app/assets/stylesheets/spotlight/_multi_up_item_grid.scss +1 -1
  46. data/app/assets/stylesheets/spotlight/_nestable.scss +1 -2
  47. data/app/assets/stylesheets/spotlight/_pages.scss +33 -54
  48. data/app/assets/stylesheets/spotlight/_report_a_problem.scss +7 -1
  49. data/app/assets/stylesheets/spotlight/_sir-trevor_overrides.scss +9 -9
  50. data/app/assets/stylesheets/spotlight/_slideshow_block.scss +13 -11
  51. data/app/assets/stylesheets/spotlight/_spotlight.scss +0 -1
  52. data/app/assets/stylesheets/spotlight/_translations.scss +12 -12
  53. data/app/assets/stylesheets/spotlight/_variables.scss +14 -15
  54. data/app/assets/stylesheets/spotlight/_variables_bootstrap.scss +7 -7
  55. data/app/assets/stylesheets/spotlight/typeahead.css +1 -1
  56. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +3 -2
  57. data/app/controllers/concerns/spotlight/catalog.rb +1 -1
  58. data/app/controllers/concerns/spotlight/controller.rb +3 -3
  59. data/app/controllers/concerns/spotlight/search_helper.rb +23 -0
  60. data/app/controllers/spotlight/browse_controller.rb +18 -4
  61. data/app/controllers/spotlight/catalog_controller.rb +13 -17
  62. data/app/controllers/spotlight/dashboards_controller.rb +5 -1
  63. data/app/controllers/spotlight/exhibits_controller.rb +1 -1
  64. data/app/controllers/spotlight/home_pages_controller.rb +32 -3
  65. data/app/controllers/spotlight/pages_controller.rb +19 -1
  66. data/app/controllers/spotlight/search_configurations_controller.rb +3 -3
  67. data/app/controllers/spotlight/searches_controller.rb +4 -1
  68. data/app/controllers/spotlight/solr_controller.rb +1 -2
  69. data/app/helpers/spotlight/application_helper.rb +1 -1
  70. data/app/helpers/spotlight/browse_helper.rb +1 -1
  71. data/app/helpers/spotlight/crud_link_helpers.rb +19 -0
  72. data/app/helpers/spotlight/pages_helper.rb +1 -1
  73. data/app/mailers/spotlight/contact_mailer.rb +1 -1
  74. data/app/models/concerns/spotlight/access_controls_enforcement_search_builder.rb +2 -2
  75. data/app/models/concerns/spotlight/exhibit_analytics.rb +1 -3
  76. data/app/models/concerns/spotlight/exhibit_documents.rb +1 -1
  77. data/app/models/sir_trevor_rails/blocks/solr_documents_block.rb +11 -3
  78. data/app/models/spotlight/ability.rb +1 -1
  79. data/app/models/spotlight/analytics/ga.rb +25 -35
  80. data/app/models/spotlight/analytics/ga_model.rb +29 -0
  81. data/app/models/spotlight/blacklight_configuration.rb +5 -3
  82. data/app/models/spotlight/contact_form.rb +11 -4
  83. data/app/models/spotlight/exhibit.rb +0 -4
  84. data/app/models/spotlight/field_metadata.rb +3 -9
  85. data/app/models/spotlight/page.rb +0 -3
  86. data/app/models/spotlight/page_configurations.rb +1 -1
  87. data/app/models/spotlight/role.rb +0 -4
  88. data/app/models/spotlight/search.rb +3 -17
  89. data/app/presenters/spotlight/iiif_manifest_presenter.rb +5 -1
  90. data/app/serializers/spotlight/exhibit_export_serializer.rb +69 -28
  91. data/app/serializers/spotlight/page_representer.rb +1 -1
  92. data/app/views/catalog/_save_search.html.erb +6 -4
  93. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  94. data/app/views/layouts/spotlight/base.html.erb +48 -0
  95. data/app/views/layouts/spotlight/spotlight.html.erb +16 -54
  96. data/app/views/shared/_about_navbar.html.erb +2 -2
  97. data/app/views/shared/_browse_navbar.html.erb +2 -2
  98. data/app/views/shared/_curated_features_navbar.html.erb +4 -4
  99. data/app/views/shared/_exhibit_navbar.html.erb +5 -5
  100. data/app/views/shared/_header_navbar.html.erb +8 -13
  101. data/app/views/shared/_masthead.html.erb +1 -1
  102. data/app/views/shared/_site_sidebar.html.erb +6 -6
  103. data/app/views/shared/_user_util_links.html.erb +47 -0
  104. data/app/views/spotlight/about_pages/_contact.html.erb +3 -4
  105. data/app/views/spotlight/about_pages/_contacts.html.erb +1 -1
  106. data/app/views/spotlight/about_pages/_sidebar.html.erb +3 -5
  107. data/app/views/spotlight/about_pages/index.html.erb +7 -6
  108. data/app/views/spotlight/admin_users/index.html.erb +78 -79
  109. data/app/views/spotlight/appearances/edit.html.erb +26 -23
  110. data/app/views/spotlight/browse/_search.html.erb +2 -2
  111. data/app/views/spotlight/browse/_search_box.html.erb +9 -6
  112. data/app/views/spotlight/browse/_search_title.html.erb +1 -1
  113. data/app/views/spotlight/browse/_sort_and_per_page.html.erb +3 -5
  114. data/app/views/spotlight/browse/index.html.erb +4 -6
  115. data/app/views/spotlight/browse/show.html.erb +1 -1
  116. data/app/views/spotlight/catalog/_admin_header.html.erb +2 -2
  117. data/app/views/spotlight/catalog/_curation_mode_toggle_default.html.erb +1 -1
  118. data/app/views/spotlight/catalog/_document_admin_table.html.erb +4 -4
  119. data/app/views/spotlight/catalog/_edit_sidecar.html.erb +1 -1
  120. data/app/views/spotlight/catalog/_index_compact_default.html.erb +1 -2
  121. data/app/views/spotlight/catalog/_reindex_progress_panel.html.erb +3 -5
  122. data/app/views/spotlight/catalog/admin.html.erb +12 -12
  123. data/app/views/spotlight/contact_forms/new.html.erb +1 -3
  124. data/app/views/spotlight/contacts/edit.html.erb +6 -5
  125. data/app/views/spotlight/contacts/new.html.erb +6 -5
  126. data/app/views/spotlight/custom_fields/edit.html.erb +6 -5
  127. data/app/views/spotlight/custom_fields/new.html.erb +6 -5
  128. data/app/views/spotlight/dashboards/_analytics.html.erb +3 -3
  129. data/app/views/spotlight/dashboards/_page.html.erb +6 -6
  130. data/app/views/spotlight/dashboards/_page_activity.html.erb +5 -5
  131. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +12 -12
  132. data/app/views/spotlight/dashboards/analytics.html.erb +11 -11
  133. data/app/views/spotlight/dashboards/show.html.erb +13 -13
  134. data/app/views/spotlight/exhibits/_confirmation_status.html.erb +3 -4
  135. data/app/views/spotlight/exhibits/_contact.html.erb +3 -3
  136. data/app/views/spotlight/exhibits/_delete.html.erb +7 -5
  137. data/app/views/spotlight/exhibits/_exhibit_card.html.erb +2 -2
  138. data/app/views/spotlight/exhibits/_exhibit_card_front.html.erb +2 -2
  139. data/app/views/spotlight/exhibits/_form.html.erb +5 -5
  140. data/app/views/spotlight/exhibits/_languages.html.erb +2 -2
  141. data/app/views/spotlight/exhibits/_new_exhibit_form.html.erb +0 -2
  142. data/app/views/spotlight/exhibits/edit.html.erb +43 -42
  143. data/app/views/spotlight/exhibits/index.html.erb +40 -41
  144. data/app/views/spotlight/exhibits/new.html.erb +4 -5
  145. data/app/views/spotlight/feature_pages/_header.html.erb +12 -14
  146. data/app/views/spotlight/feature_pages/_sidebar.html.erb +2 -4
  147. data/app/views/spotlight/featured_images/_form.html.erb +4 -4
  148. data/app/views/spotlight/filters/_form.html.erb +1 -1
  149. data/app/views/spotlight/home_pages/_edit_page_link.html.erb +1 -1
  150. data/app/views/spotlight/home_pages/_sidebar.html.erb +1 -3
  151. data/app/views/spotlight/metadata_configurations/_metadata_field.html.erb +4 -4
  152. data/app/views/spotlight/metadata_configurations/edit.html.erb +5 -4
  153. data/app/views/spotlight/pages/_edit_page_link.html.erb +1 -1
  154. data/app/views/spotlight/pages/_form.html.erb +7 -7
  155. data/app/views/spotlight/pages/_order_pages.html.erb +2 -2
  156. data/app/views/spotlight/pages/_page.html.erb +11 -11
  157. data/app/views/spotlight/pages/_view_type_group.html.erb +1 -1
  158. data/app/views/spotlight/pages/edit.html.erb +2 -4
  159. data/app/views/spotlight/pages/index.html.erb +5 -4
  160. data/app/views/spotlight/pages/show.html.erb +5 -4
  161. data/app/views/spotlight/resources/_external_resources_form.html.erb +2 -2
  162. data/app/views/spotlight/resources/_form.html.erb +1 -1
  163. data/app/views/spotlight/resources/csv_upload/_form.html.erb +1 -1
  164. data/app/views/spotlight/resources/iiif/_form.html.erb +1 -1
  165. data/app/views/spotlight/resources/json_upload/_form.html.erb +1 -1
  166. data/app/views/spotlight/resources/new.html.erb +25 -23
  167. data/app/views/spotlight/resources/upload/_form.html.erb +2 -2
  168. data/app/views/spotlight/roles/index.html.erb +60 -57
  169. data/app/views/spotlight/search_configurations/_facet_metadata.html.erb +3 -1
  170. data/app/views/spotlight/search_configurations/_facets.html.erb +19 -18
  171. data/app/views/spotlight/search_configurations/_search_fields.html.erb +6 -6
  172. data/app/views/spotlight/search_configurations/_sort.html.erb +6 -6
  173. data/app/views/spotlight/search_configurations/edit.html.erb +42 -40
  174. data/app/views/spotlight/searches/_form.html.erb +15 -10
  175. data/app/views/spotlight/searches/_search.html.erb +29 -22
  176. data/app/views/spotlight/searches/edit.html.erb +6 -5
  177. data/app/views/spotlight/searches/index.html.erb +32 -31
  178. data/app/views/spotlight/shared/_configuration_sidebar.html.erb +6 -6
  179. data/app/views/spotlight/shared/_curation_sidebar.html.erb +8 -9
  180. data/app/views/spotlight/shared/_exhibit_sidebar.html.erb +6 -8
  181. data/app/views/spotlight/shared/_locale_picker.html.erb +3 -3
  182. data/app/views/spotlight/shared/_report_a_problem.html.erb +2 -2
  183. data/app/views/spotlight/sir_trevor/blocks/_browse_block.html.erb +1 -1
  184. data/app/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb +1 -1
  185. data/app/views/spotlight/sir_trevor/blocks/_oembed_block.html.erb +2 -2
  186. data/app/views/spotlight/sir_trevor/blocks/_search_results_block.html.erb +2 -2
  187. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb +8 -8
  188. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb +8 -8
  189. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb +3 -4
  190. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +32 -31
  191. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb +5 -5
  192. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +8 -10
  193. data/app/views/spotlight/sites/edit.html.erb +31 -34
  194. data/app/views/spotlight/sites/edit_exhibits.html.erb +28 -29
  195. data/app/views/spotlight/tags/index.html.erb +25 -24
  196. data/app/views/spotlight/translations/_browse_categories.html.erb +20 -15
  197. data/app/views/spotlight/translations/_general.html.erb +69 -91
  198. data/app/views/spotlight/translations/_metadata.html.erb +18 -14
  199. data/app/views/spotlight/translations/_page.html.erb +2 -2
  200. data/app/views/spotlight/translations/_search_fields.html.erb +26 -20
  201. data/app/views/spotlight/translations/edit.html.erb +16 -14
  202. data/config/locales/spotlight.en.yml +3 -0
  203. data/config/routes.rb +1 -1
  204. data/lib/generators/spotlight/install_generator.rb +2 -2
  205. data/lib/generators/spotlight/scaffold_resource_generator.rb +1 -1
  206. data/lib/generators/spotlight/templates/spotlight.scss +0 -1
  207. data/lib/spotlight/engine.rb +12 -0
  208. data/lib/spotlight/version.rb +1 -1
  209. data/spec/controllers/application_controller_spec.rb +2 -2
  210. data/spec/controllers/spotlight/browse_controller_spec.rb +1 -1
  211. data/spec/controllers/spotlight/catalog_controller_spec.rb +13 -13
  212. data/spec/controllers/spotlight/dashboards_controller_spec.rb +2 -1
  213. data/spec/controllers/spotlight/search_configurations_controller_spec.rb +1 -1
  214. data/spec/examples.txt +50 -1489
  215. data/spec/features/add_items_spec.rb +2 -2
  216. data/spec/features/browse_category_admin_spec.rb +3 -3
  217. data/spec/features/browse_category_spec.rb +3 -3
  218. data/spec/features/catalog_spec.rb +1 -1
  219. data/spec/features/exhibits/translation_editing_spec.rb +21 -21
  220. data/spec/features/feature_page_spec.rb +1 -1
  221. data/spec/features/home_page_spec.rb +3 -3
  222. data/spec/features/javascript/blocks/featured_browse_categories_block_spec.rb +1 -1
  223. data/spec/features/javascript/blocks/link_to_search_block_spec.rb +1 -1
  224. data/spec/features/javascript/blocks/search_result_block_spec.rb +9 -4
  225. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +23 -15
  226. data/spec/features/javascript/blocks/solr_documents_carousel_block_spec.rb +29 -0
  227. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +2 -2
  228. data/spec/features/javascript/edit_in_place_spec.rb +1 -0
  229. data/spec/features/javascript/feature_page_admin_spec.rb +11 -11
  230. data/spec/features/javascript/locale_selector_spec.rb +0 -1
  231. data/spec/features/javascript/multi_image_select_spec.rb +3 -3
  232. data/spec/features/javascript/reindex_monitor_spec.rb +2 -2
  233. data/spec/features/javascript/roles_admin_spec.rb +2 -2
  234. data/spec/features/javascript/search_context_spec.rb +4 -6
  235. data/spec/features/site_users_management_spec.rb +1 -1
  236. data/spec/helpers/spotlight/application_helper_spec.rb +2 -1
  237. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +19 -0
  238. data/spec/helpers/spotlight/languages_helper_spec.rb +1 -0
  239. data/spec/lib/spotlight/controller_spec.rb +2 -2
  240. data/spec/models/sir_trevor_rails/blocks/solr_documents_block_spec.rb +38 -0
  241. data/spec/models/spotlight/access_controls_enforcement_search_builder_spec.rb +7 -6
  242. data/spec/models/spotlight/analytics/ga_spec.rb +16 -1
  243. data/spec/models/spotlight/contact_form_spec.rb +37 -5
  244. data/spec/models/spotlight/exhibit_spec.rb +8 -4
  245. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +4 -0
  246. data/spec/routing/spotlight/exhibit_catalog_spec.rb +15 -11
  247. data/spec/serializers/spotlight/exhibit_export_serializer_spec.rb +60 -0
  248. data/spec/test_app_templates/Gemfile.extra +3 -0
  249. data/spec/test_app_templates/catalog_controller.rb +4 -0
  250. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -2
  251. data/spec/views/shared/_header_navbar.html.erb_spec.rb +1 -1
  252. data/spec/views/shared/_masthead.html.erb_spec.rb +1 -1
  253. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +1 -1
  254. data/spec/views/spotlight/about_pages/_sidebar.html.erb_spec.rb +2 -2
  255. data/spec/views/spotlight/about_pages/index.html.erb_spec.rb +2 -2
  256. data/spec/views/spotlight/browse/_search.html.erb_spec.rb +1 -1
  257. data/spec/views/spotlight/browse/_sort_and_per_page.html.erb_spec.rb +2 -13
  258. data/spec/views/spotlight/browse/show.html.erb_spec.rb +2 -2
  259. data/spec/views/spotlight/catalog/admin.html.erb_spec.rb +1 -1
  260. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +5 -5
  261. data/spec/views/spotlight/dashboards/analytics.html.erb_spec.rb +1 -1
  262. data/spec/views/spotlight/exhibits/_exhibit_card_front.html.erb_spec.rb +2 -2
  263. data/spec/views/spotlight/exhibits/edit.html.erb_spec.rb +1 -1
  264. data/spec/views/spotlight/exhibits/index.html.erb_spec.rb +1 -1
  265. data/spec/views/spotlight/feature_pages/_sidebar.html.erb_spec.rb +7 -7
  266. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -2
  267. data/spec/views/spotlight/metadata_configurations/edit.html.erb_spec.rb +2 -1
  268. data/spec/views/spotlight/pages/index.html.erb_spec.rb +2 -2
  269. data/spec/views/spotlight/pages/show.html.erb_spec.rb +3 -3
  270. data/spec/views/spotlight/searches/_search.html.erb_spec.rb +1 -1
  271. data/spec/views/spotlight/searches/edit.html.erb_spec.rb +3 -3
  272. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +3 -3
  273. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +1 -1
  274. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +2 -2
  275. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +1 -1
  276. data/spec/views/spotlight/translations/_page.html.erb_spec.rb +2 -2
  277. data/vendor/assets/javascripts/bootstrap-tagsinput.js +1 -1
  278. data/vendor/assets/stylesheets/sir-trevor/_variables.scss +15 -8
  279. metadata +31 -28
  280. data/app/assets/stylesheets/spotlight/_navbar.scss +0 -48
  281. data/app/views/_user_util_links.html.erb +0 -50
  282. data/app/views/shared/_modal.html.erb +0 -6
@@ -8,11 +8,13 @@ module Spotlight
8
8
  load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
9
9
 
10
10
  include Spotlight::Base
11
+ include Spotlight::SearchHelper
11
12
 
12
13
  before_action only: [:show] do
13
14
  blacklight_config.view.reject! { |_k, _v| true }
14
15
  blacklight_config.view.admin_table.partials = ['index_compact']
15
16
  blacklight_config.view.admin_table.document_actions = []
17
+ blacklight_config.track_search_session = false
16
18
  end
17
19
 
18
20
  def show
@@ -49,7 +51,9 @@ module Spotlight
49
51
 
50
52
  def load_recent_solr_documents(count)
51
53
  solr_params = { sort: "#{blacklight_config.index.timestamp_field} desc" }
52
- @response, docs = search_results(solr_params)
54
+ @response, docs = search_service.search_results do |builder|
55
+ builder.merge(solr_params)
56
+ end
53
57
  docs.take(count)
54
58
  end
55
59
  end
@@ -4,9 +4,9 @@ module Spotlight
4
4
  ##
5
5
  # Administrative CRUD actions for an exhibit
6
6
  class ExhibitsController < Spotlight::ApplicationController
7
+ include Spotlight::SearchHelper
7
8
  before_action :authenticate_user!, except: [:index]
8
9
  before_action :set_tab, only: [:edit, :update]
9
- include Blacklight::SearchHelper
10
10
 
11
11
  load_and_authorize_resource
12
12
 
@@ -4,13 +4,14 @@ module Spotlight
4
4
  ##
5
5
  # CRUD actions for the exhibit home page
6
6
  class HomePagesController < Spotlight::PagesController
7
- include Blacklight::SearchHelper
8
7
  include Spotlight::Catalog
9
8
 
10
9
  load_and_authorize_resource through: :exhibit, singleton: true, instance_name: 'page'
11
10
 
12
11
  before_action :attach_breadcrumbs, except: :show
13
12
 
13
+ helper_method :facet_limit_for
14
+
14
15
  def edit
15
16
  add_breadcrumb t(:'spotlight.curation.sidebar.feature_pages'), exhibit_feature_pages_path(@exhibit)
16
17
  add_breadcrumb @page.title, [:edit, @exhibit, @page]
@@ -22,7 +23,7 @@ module Spotlight
22
23
  end
23
24
 
24
25
  def show
25
- @response, @document_list = search_results({}) if @page.display_sidebar?
26
+ @response, @document_list = search_service.search_results if @page.display_sidebar?
26
27
 
27
28
  if @page.nil? || !@page.published?
28
29
  render '/catalog/index'
@@ -37,10 +38,38 @@ module Spotlight
37
38
  super
38
39
  end
39
40
 
41
+ # Copied from blacklight to avoid bringing in all of Blacklight::Catalog
42
+ DEFAULT_FACET_LIMIT = 10
43
+
44
+ # Look up facet limit for given facet_field. Will look at config, and
45
+ # if config is 'true' will look up from Solr @response if available. If
46
+ # no limit is available, returns nil. Used from #add_facetting_to_solr
47
+ # to supply f.fieldname.facet.limit values in solr request (no @response
48
+ # available), and used in display (with @response available) to create
49
+ # a facet paginator with the right limit.
50
+ def facet_limit_for(facet_field)
51
+ facet = blacklight_config.facet_fields[facet_field]
52
+ return if facet.blank?
53
+
54
+ if facet.limit && @response && @response.aggregations[facet.field]
55
+ limit = @response.aggregations[facet.field].limit
56
+
57
+ if limit.nil? # we didn't get or a set a limit, so infer one.
58
+ facet.limit if facet.limit != true
59
+ elsif limit == -1 # limit -1 is solr-speak for unlimited
60
+ nil
61
+ else
62
+ limit.to_i - 1 # we added 1 to find out if we needed to paginate
63
+ end
64
+ elsif facet.limit
65
+ facet.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
66
+ end
67
+ end
68
+
40
69
  private
41
70
 
42
71
  alias search_action_url exhibit_search_action_url
43
- alias search_facet_url exhibit_search_facet_url
72
+ alias search_facet_path exhibit_search_facet_path
44
73
 
45
74
  def load_locale_specific_page
46
75
  @page = Spotlight::HomePage.for_locale.find_by(exhibit: current_exhibit)
@@ -13,10 +13,15 @@ module Spotlight
13
13
  load_and_authorize_resource through: :exhibit, instance_name: 'page', only: [:index]
14
14
 
15
15
  helper Openseadragon::OpenseadragonHelper
16
+ include Spotlight::SearchHelper
16
17
  include Spotlight::Base
17
18
  include Blacklight::SearchContext
18
19
 
19
- helper_method :get_search_results, :search_results, :fetch, :page_collection_name
20
+ helper_method :get_search_results, :search_results, :fetch, :page_collection_name, :presenter
21
+
22
+ before_action do
23
+ blacklight_config.track_search_session = false
24
+ end
20
25
 
21
26
  # GET /exhibits/1/pages
22
27
  def index
@@ -111,8 +116,17 @@ module Spotlight
111
116
  @_prefixes ||= super + ['catalog']
112
117
  end
113
118
 
119
+ # Add a Page specific search_results method that takes user params as
120
+ # an option and passes that off to the search service to get results
121
+ # @param [Hash] the query parameters
122
+ # @return [Object] the search results object from the configured search service
123
+ def search_results(user_params)
124
+ search_service(user_params).search_results
125
+ end
126
+
114
127
  def undo_link
115
128
  return unless can? :manage, @page
129
+ return if @page.versions.blank?
116
130
 
117
131
  view_context.link_to(t(:'spotlight.versions.undo'), revert_version_path(@page.versions.last), method: :post)
118
132
  end
@@ -197,6 +211,10 @@ module Spotlight
197
211
  raise ActiveRecord::RecordNotFound
198
212
  end
199
213
  end
214
+
215
+ def presenter(document)
216
+ view_context.index_presenter(document)
217
+ end
200
218
  end
201
219
  # rubocop:enable Metrics/ClassLength
202
220
  end
@@ -4,12 +4,12 @@ module Spotlight
4
4
  ##
5
5
  # CRUD actions for Blacklight search configuration
6
6
  class SearchConfigurationsController < Spotlight::ApplicationController
7
+ include Spotlight::SearchHelper
8
+
7
9
  before_action :authenticate_user!
8
10
  load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
9
11
  load_and_authorize_resource :blacklight_configuration, through: :exhibit, singleton: true, parent: false
10
12
 
11
- include Blacklight::SearchHelper
12
-
13
13
  def show
14
14
  respond_to do |format|
15
15
  format.json do
@@ -23,7 +23,7 @@ module Spotlight
23
23
  add_breadcrumb t(:'spotlight.configuration.sidebar.header'), exhibit_dashboard_path(@exhibit)
24
24
  add_breadcrumb t(:'spotlight.configuration.sidebar.search_configuration'), edit_exhibit_search_configuration_path(@exhibit)
25
25
 
26
- @field_metadata = Spotlight::FieldMetadata.new(current_exhibit, repository, @blacklight_configuration.blacklight_config)
26
+ @field_metadata = Spotlight::FieldMetadata.new(current_exhibit, blacklight_config.repository, @blacklight_configuration.blacklight_config)
27
27
  end
28
28
 
29
29
  def update
@@ -13,6 +13,7 @@ module Spotlight
13
13
  before_action :attach_breadcrumbs, only: [:index, :edit], unless: -> { request.format.json? }
14
14
 
15
15
  include Spotlight::Base
16
+ include Spotlight::SearchHelper
16
17
 
17
18
  def create
18
19
  @search.assign_attributes(search_params.except((:title unless @search.new_record?)))
@@ -37,7 +38,9 @@ module Spotlight
37
38
 
38
39
  def autocomplete
39
40
  search_params = autocomplete_params.merge(search_field: Spotlight::Engine.config.autocomplete_search_field)
40
- (_, document_list) = search_results(search_params)
41
+ (_, document_list) = search_service.search_results do |builder|
42
+ builder.with(search_params)
43
+ end
41
44
 
42
45
  respond_to do |format|
43
46
  format.json do
@@ -8,8 +8,7 @@ module Spotlight
8
8
  # This is an example of how you could integrate external indexing
9
9
  # workflows with exhibit-specific content
10
10
  class SolrController < Spotlight::ApplicationController
11
- include Blacklight::SearchHelper
12
-
11
+ include Spotlight::SearchHelper
13
12
  before_action :authenticate_user!
14
13
  before_action :validate_writable_index!
15
14
 
@@ -121,7 +121,7 @@ module Spotlight
121
121
  def select_deselect_button
122
122
  button_tag(
123
123
  t(:".deselect_all"),
124
- class: 'btn btn-default btn-xs metadata-select',
124
+ class: 'btn btn-secondary btn-sm metadata-select',
125
125
  data: {
126
126
  behavior: 'metadata-select',
127
127
  'deselect-text' => t(:".deselect_all"),
@@ -4,7 +4,7 @@ module Spotlight
4
4
  ##
5
5
  # Helper for browse views
6
6
  module BrowseHelper
7
- include ::BlacklightConfigurationHelper
7
+ include Blacklight::ConfigurationHelperBehavior
8
8
  include Spotlight::RenderingHelper
9
9
 
10
10
  ##
@@ -62,6 +62,25 @@ module Spotlight
62
62
  action_default_value model, action
63
63
  end
64
64
 
65
+ def nav_link(name = nil, options = nil, html_options = nil, &block)
66
+ # rubocop:disable Style/ParallelAssignment
67
+ # (Note: this is copied from upstream in Rails)
68
+ html_options, options, name = options, name, block if block_given?
69
+ # rubocop:enable Style/ParallelAssignment
70
+
71
+ html_options ||= {}
72
+
73
+ nav_link_html_options = html_options.merge(class: [html_options[:class], 'nav-link', ('active' if current_page?(options))].join(' '))
74
+
75
+ content_tag(:li, class: 'nav-item') do
76
+ if block_given?
77
+ link_to(options, nav_link_html_options, &block)
78
+ else
79
+ link_to(name, options, nav_link_html_options, &block)
80
+ end
81
+ end
82
+ end
83
+
65
84
  private
66
85
 
67
86
  # rubocop:disable Metrics/MethodLength
@@ -30,7 +30,7 @@ module Spotlight
30
30
  end
31
31
 
32
32
  def available_index_fields
33
- fields = blacklight_config.index_fields.map { |k, _v| { key: k, label: index_field_label(nil, k) } }
33
+ fields = blacklight_config.index_fields.map { |k, _v| { key: k, label: index_field_label(blacklight_config.document_model.new, k) } }
34
34
  fields.unshift(key: document_show_link_field, label: t(:'spotlight.pages.form.title_placeholder')) unless index_fields.include? document_show_link_field
35
35
 
36
36
  fields
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Spotlight
4
4
  # Mailer for reporting problems to the application contact and/or exhibit administrator
5
- class ContactMailer < ActionMailer::Base
5
+ class ContactMailer < ApplicationMailer
6
6
  def report_problem(contact_form)
7
7
  @contact_form = contact_form
8
8
  mail(@contact_form.headers)
@@ -12,7 +12,7 @@ module Spotlight
12
12
  # Adds a filter that excludes resources that have been marked as not-visible
13
13
  def apply_permissive_visibility_filter(solr_params)
14
14
  return unless current_exhibit
15
- return if scope.respond_to?(:can?) && scope.can?(:curate, current_exhibit) && !blacklight_params[:public]
15
+ return if !blacklight_params[:public] && scope&.context&.key?(:current_ability) && scope.context[:current_ability].can?(:curate, current_exhibit)
16
16
 
17
17
  solr_params.append_filter_query "-#{blacklight_config.document_model.visibility_field(current_exhibit)}:false"
18
18
  end
@@ -30,7 +30,7 @@ module Spotlight
30
30
  private
31
31
 
32
32
  def current_exhibit
33
- scope.current_exhibit
33
+ blacklight_config.current_exhibit
34
34
  end
35
35
  end
36
36
  end
@@ -22,10 +22,8 @@ module Spotlight
22
22
  end
23
23
  end
24
24
 
25
- private
26
-
27
25
  def analytics_provider
28
- Spotlight::Engine.config.analytics_provider
26
+ @analytics_provider ||= Spotlight::Engine.config.analytics_provider.new
29
27
  end
30
28
  end
31
29
  end
@@ -30,7 +30,7 @@ module Spotlight
30
30
  end
31
31
 
32
32
  def exhibit_search_builder_context
33
- OpenStruct.new(blacklight_config: blacklight_config, current_exhibit: self)
33
+ OpenStruct.new(blacklight_config: blacklight_config.tap { |x| x.current_exhibit = self })
34
34
  end
35
35
 
36
36
  def repository
@@ -26,7 +26,7 @@ module SirTrevorRails
26
26
  def documents
27
27
  @documents ||= begin
28
28
  doc_ids = items.map { |v| v[:id] }
29
- _, documents = solr_helper.fetch(doc_ids)
29
+ _, documents = solr_helper.controller.send(:search_service).fetch(doc_ids)
30
30
  documents
31
31
  end
32
32
  end
@@ -36,11 +36,19 @@ module SirTrevorRails
36
36
  end
37
37
 
38
38
  def primary_caption?
39
- primary_caption_field.present? && send(:'show-primary-caption')
39
+ primary_caption_field.present? && show_primary_caption?
40
+ end
41
+
42
+ def show_primary_caption?
43
+ ActiveModel::Type::Boolean.new.cast(send(:'show-primary-caption'))
40
44
  end
41
45
 
42
46
  def secondary_caption?
43
- secondary_caption_field.present? && send(:'show-secondary-caption')
47
+ secondary_caption_field.present? && show_secondary_caption?
48
+ end
49
+
50
+ def show_secondary_caption?
51
+ ActiveModel::Type::Boolean.new.cast(send(:'show-secondary-caption'))
44
52
  end
45
53
 
46
54
  def zpr_link?
@@ -19,7 +19,7 @@ module Spotlight
19
19
  can :manage, [Spotlight::BlacklightConfiguration, Spotlight::ContactEmail, Spotlight::Language], exhibit_id: user.admin_roles.pluck(:resource_id)
20
20
  can :manage, Spotlight::Role, resource_id: user.admin_roles.pluck(:resource_id), resource_type: 'Spotlight::Exhibit'
21
21
 
22
- can :manage, PaperTrail::Version if user.roles.any?
22
+ can :manage, [PaperTrail::Version, Spotlight::FeaturedImage] if user.roles.any?
23
23
 
24
24
  # exhibit curator
25
25
  can :manage, [
@@ -10,21 +10,26 @@ module Spotlight
10
10
  class Ga
11
11
  extend Legato::Model
12
12
 
13
- cattr_writer :user, :site
14
-
15
- metrics :sessions, :users, :pageviews
16
-
17
- def self.enabled?
13
+ def enabled?
18
14
  user && site
19
15
  end
20
16
 
21
- def self.for_exhibit(exhibit)
22
- path(Spotlight::Engine.routes.url_helpers.exhibit_path(exhibit))
17
+ delegate :metrics, to: :model
18
+
19
+ def exhibit_data(exhibit, options)
20
+ model.context(exhibit).results(site, Spotlight::Engine.config.ga_analytics_options.merge(options)).to_a.first || exhibit_data_unavailable
23
21
  end
24
22
 
25
- filter :path, &->(path) { contains(:pagePath, "^#{path}") }
23
+ def page_data(exhibit, options)
24
+ options[:sort] ||= '-pageviews'
25
+ query = model.context(exhibit).results(site, Spotlight::Engine.config.ga_page_analytics_options.merge(options))
26
+ query.dimensions << :page_path
27
+ query.dimensions << :page_title
28
+
29
+ query.to_a
30
+ end
26
31
 
27
- def self.user(scope = 'https://www.googleapis.com/auth/analytics.readonly')
32
+ def user(scope = 'https://www.googleapis.com/auth/analytics.readonly')
28
33
  @user ||= begin
29
34
  Legato::User.new(oauth_token(scope))
30
35
  rescue => e
@@ -33,52 +38,37 @@ module Spotlight
33
38
  end
34
39
  end
35
40
 
36
- def self.site
37
- @site ||= user.accounts.first.profiles.first { |x| x.web_property_id = Spotlight::Engine.config.ga_web_property_id }
41
+ def site
42
+ @site ||= user.accounts.first.profiles.find { |x| x.web_property_id == Spotlight::Engine.config.ga_web_property_id }
38
43
  end
39
44
 
40
- def self.exhibit_data(exhibit, options)
41
- context(exhibit).results(site, Spotlight::Engine.config.ga_analytics_options.merge(options)).to_a.first || exhibit_data_unavailable
42
- end
45
+ private
43
46
 
44
- def self.exhibit_data_unavailable
45
- OpenStruct.new(pageviews: 'n/a', users: 'n/a', sessions: 'n/a')
47
+ def model
48
+ Spotlight::Analytics::GaModel
46
49
  end
47
50
 
48
- def self.page_data(exhibit, options)
49
- options[:sort] ||= '-pageviews'
50
- query = context(exhibit).results(site, Spotlight::Engine.config.ga_page_analytics_options.merge(options))
51
- query.dimensions << :page_path
52
- query.dimensions << :page_title
53
-
54
- query.to_a
55
- end
56
-
57
- def self.context(exhibit)
58
- if exhibit.is_a? Spotlight::Exhibit
59
- for_exhibit(exhibit)
60
- else
61
- path(exhibit)
62
- end
51
+ def exhibit_data_unavailable
52
+ OpenStruct.new(pageviews: 'n/a', users: 'n/a', sessions: 'n/a')
63
53
  end
64
54
 
65
- def self.oauth_token(scope)
55
+ def oauth_token(scope)
66
56
  require 'oauth2'
67
57
 
68
58
  access_token = auth_client(scope).fetch_access_token!
69
59
  OAuth2::AccessToken.new(oauth_client, access_token['access_token'], expires_in: access_token['expires_in'])
70
60
  end
71
61
 
72
- def self.oauth_client
62
+ def oauth_client
73
63
  OAuth2::Client.new('', '', authorize_url: 'https://accounts.google.com/o/oauth2/auth',
74
64
  token_url: 'https://accounts.google.com/o/oauth2/token')
75
65
  end
76
66
 
77
- def self.signing_key
67
+ def signing_key
78
68
  @signing_key ||= OpenSSL::PKCS12.new(File.read(Spotlight::Engine.config.ga_pkcs12_key_path), 'notasecret').key
79
69
  end
80
70
 
81
- def self.auth_client(scope)
71
+ def auth_client(scope)
82
72
  Signet::OAuth2::Client.new token_credential_uri: 'https://accounts.google.com/o/oauth2/token',
83
73
  audience: 'https://accounts.google.com/o/oauth2/token',
84
74
  scope: scope,