blacklight-spotlight 2.13.0 → 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
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,