blacklight 7.33.0 → 8.0.0

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 (427) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -2
  3. data/.github/workflows/ruby.yml +38 -107
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +243 -2
  6. data/.rubocop_todo.yml +216 -270
  7. data/Gemfile +7 -6
  8. data/README.md +12 -4
  9. data/Rakefile +18 -0
  10. data/VERSION +1 -1
  11. data/app/assets/config/blacklight/manifest.js +3 -0
  12. data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
  13. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +332 -485
  15. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  16. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  20. data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
  21. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  22. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  23. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  24. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  25. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  26. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  27. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  28. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  29. data/app/builders/blacklight/action_builder.rb +18 -9
  30. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  31. data/app/components/blacklight/advanced_search_form_component.rb +7 -9
  32. data/app/components/blacklight/constraints_component.rb +27 -37
  33. data/app/components/blacklight/document/action_component.html.erb +2 -9
  34. data/app/components/blacklight/document/action_component.rb +26 -8
  35. data/app/components/blacklight/document/actions_component.rb +2 -2
  36. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  37. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  38. data/app/components/blacklight/document/citation_component.rb +5 -3
  39. data/app/components/blacklight/document/group_component.rb +7 -3
  40. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  41. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  42. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  43. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  44. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  45. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  46. data/app/components/blacklight/document_component.html.erb +4 -0
  47. data/app/components/blacklight/document_component.rb +54 -42
  48. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  49. data/app/components/blacklight/document_metadata_component.rb +11 -6
  50. data/app/components/blacklight/document_title_component.rb +4 -1
  51. data/app/components/blacklight/facet_component.rb +1 -1
  52. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
  53. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  54. data/app/components/blacklight/facet_field_component.html.erb +5 -5
  55. data/app/components/blacklight/facet_field_component.rb +9 -2
  56. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  57. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  58. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  59. data/app/components/blacklight/facet_item_component.rb +1 -43
  60. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  61. data/app/components/blacklight/header_component.html.erb +2 -0
  62. data/app/components/blacklight/header_component.rb +26 -0
  63. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  64. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  65. data/app/components/blacklight/icons/list_component.rb +16 -0
  66. data/app/components/blacklight/icons/search_component.rb +16 -0
  67. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  68. data/app/components/blacklight/metadata_field_component.rb +24 -8
  69. data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
  70. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  71. data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
  72. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  73. data/app/components/blacklight/response/sort_component.rb +2 -2
  74. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  75. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  76. data/app/components/blacklight/response/view_type_component.rb +4 -6
  77. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  78. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  79. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  80. data/app/components/blacklight/search_bar_component.rb +2 -16
  81. data/app/components/blacklight/search_button_component.rb +3 -3
  82. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  83. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  84. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  85. data/app/components/blacklight/search_header_component.html.erb +2 -0
  86. data/app/components/blacklight/search_header_component.rb +6 -0
  87. data/app/components/blacklight/search_navbar_component.html.erb +5 -0
  88. data/app/components/blacklight/search_navbar_component.rb +34 -0
  89. data/app/components/blacklight/start_over_button_component.rb +5 -3
  90. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  91. data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
  92. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  93. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  94. data/app/components/blacklight/system/modal_component.rb +1 -3
  95. data/app/components/blacklight/top_navbar_component.html.erb +12 -0
  96. data/app/components/blacklight/top_navbar_component.rb +17 -0
  97. data/app/controllers/bookmarks_controller.rb +1 -0
  98. data/app/controllers/catalog_controller.rb +1 -0
  99. data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
  100. data/app/controllers/concerns/blacklight/catalog.rb +21 -72
  101. data/app/controllers/concerns/blacklight/controller.rb +6 -43
  102. data/app/controllers/concerns/blacklight/search_context.rb +71 -13
  103. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  104. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  105. data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
  106. data/app/controllers/search_history_controller.rb +1 -0
  107. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
  108. data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
  109. data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
  110. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
  111. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  112. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  113. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
  114. data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
  115. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
  116. data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
  117. data/app/helpers/blacklight_helper.rb +1 -0
  118. data/app/helpers/catalog_helper.rb +1 -0
  119. data/app/javascript/blacklight/bookmark_toggle.js +9 -22
  120. data/app/javascript/blacklight/button_focus.js +9 -7
  121. data/app/javascript/blacklight/checkbox_submit.js +68 -122
  122. data/app/javascript/blacklight/core.js +6 -5
  123. data/app/javascript/blacklight/index.js +14 -0
  124. data/app/javascript/blacklight/modal.js +100 -165
  125. data/app/javascript/blacklight/modalForm.js +60 -0
  126. data/app/javascript/blacklight/search_context.js +13 -29
  127. data/app/models/blacklight/facet_paginator.rb +3 -2
  128. data/app/models/blacklight/icon.rb +4 -2
  129. data/app/models/bookmark.rb +0 -2
  130. data/app/models/concerns/blacklight/configurable.rb +5 -4
  131. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
  132. data/app/models/concerns/blacklight/document/attributes.rb +50 -0
  133. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  134. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  135. data/app/models/concerns/blacklight/document/export.rb +2 -1
  136. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  137. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  138. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
  139. data/app/models/concerns/blacklight/document.rb +23 -20
  140. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  141. data/app/models/concerns/blacklight/user.rb +17 -8
  142. data/app/models/record_mailer.rb +23 -18
  143. data/app/models/search.rb +0 -1
  144. data/app/models/solr_document.rb +1 -0
  145. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  146. data/app/presenters/blacklight/document_presenter.rb +24 -30
  147. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  148. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  149. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  150. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  151. data/app/presenters/blacklight/field_presenter.rb +1 -0
  152. data/app/presenters/blacklight/index_presenter.rb +2 -40
  153. data/app/presenters/blacklight/json_presenter.rb +7 -5
  154. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  155. data/app/presenters/blacklight/rendering/join.rb +7 -1
  156. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
  157. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  158. data/app/presenters/blacklight/show_presenter.rb +1 -9
  159. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  160. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  161. data/app/services/blacklight/field_retriever.rb +1 -8
  162. data/app/services/blacklight/search_service.rb +9 -7
  163. data/app/values/blacklight/types.rb +95 -11
  164. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  165. data/app/views/bookmarks/_tools.html.erb +7 -12
  166. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  167. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  168. data/app/views/catalog/_constraints.html.erb +1 -14
  169. data/app/views/catalog/_document.atom.builder +12 -14
  170. data/app/views/catalog/_document.html.erb +3 -6
  171. data/app/views/catalog/_document.rss.builder +2 -4
  172. data/app/views/catalog/_document_list.html.erb +2 -1
  173. data/app/views/catalog/_facet_layout.html.erb +2 -2
  174. data/app/views/catalog/_facets.html.erb +5 -4
  175. data/app/views/catalog/_home_text.html.erb +2 -14
  176. data/app/views/catalog/_search_form.html.erb +3 -3
  177. data/app/views/catalog/_search_header.html.erb +1 -2
  178. data/app/views/catalog/_search_results.html.erb +2 -2
  179. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  180. data/app/views/catalog/_show_main_content.html.erb +8 -19
  181. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  182. data/app/views/catalog/_show_tools.html.erb +1 -19
  183. data/app/views/catalog/_view_type_group.html.erb +1 -1
  184. data/app/views/catalog/email_success.html.erb +5 -6
  185. data/app/views/catalog/facet.html.erb +7 -5
  186. data/app/views/catalog/index.atom.builder +12 -14
  187. data/app/views/catalog/index.html.erb +7 -1
  188. data/app/views/catalog/index.json.jbuilder +19 -19
  189. data/app/views/catalog/index.rss.builder +1 -1
  190. data/app/views/catalog/opensearch.xml.builder +1 -1
  191. data/app/views/catalog/show.html.erb +1 -6
  192. data/app/views/catalog/sms_success.html.erb +5 -6
  193. data/app/views/catalog/suggest.html.erb +3 -0
  194. data/app/views/layouts/blacklight/base.html.erb +19 -9
  195. data/app/views/record_mailer/email_record.text.erb +4 -3
  196. data/app/views/record_mailer/sms_record.text.erb +4 -4
  197. data/app/views/search_history/index.html.erb +6 -2
  198. data/app/views/shared/_header_navbar.html.erb +1 -22
  199. data/app/views/shared/_modal.html.erb +3 -3
  200. data/blacklight.gemspec +8 -10
  201. data/config/importmap.rb +3 -0
  202. data/config/locales/blacklight.ar.yml +209 -233
  203. data/config/locales/blacklight.ca.yml +0 -7
  204. data/config/locales/blacklight.de.yml +197 -216
  205. data/config/locales/blacklight.en.yml +2 -7
  206. data/config/locales/blacklight.es.yml +196 -216
  207. data/config/locales/blacklight.fr.yml +196 -220
  208. data/config/locales/blacklight.hu.yml +193 -213
  209. data/config/locales/blacklight.it.yml +197 -216
  210. data/config/locales/blacklight.nl.yml +193 -213
  211. data/config/locales/blacklight.pt-BR.yml +195 -216
  212. data/config/locales/blacklight.sq.yml +193 -213
  213. data/config/locales/blacklight.zh.yml +194 -214
  214. data/config/routes.rb +3 -2
  215. data/db/migrate/20140202020201_create_searches.rb +1 -0
  216. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  217. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  218. data/docker-compose.yml +1 -0
  219. data/lib/blacklight/abstract_repository.rb +1 -0
  220. data/lib/blacklight/configuration/context.rb +4 -4
  221. data/lib/blacklight/configuration/display_field.rb +7 -9
  222. data/lib/blacklight/configuration/facet_field.rb +17 -11
  223. data/lib/blacklight/configuration/field.rb +1 -0
  224. data/lib/blacklight/configuration/fields.rb +12 -15
  225. data/lib/blacklight/configuration/index_field.rb +1 -0
  226. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  227. data/lib/blacklight/configuration/search_field.rb +1 -0
  228. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  229. data/lib/blacklight/configuration/show_field.rb +1 -0
  230. data/lib/blacklight/configuration/sort_field.rb +1 -0
  231. data/lib/blacklight/configuration/tool_config.rb +1 -0
  232. data/lib/blacklight/configuration/view_config.rb +16 -10
  233. data/lib/blacklight/configuration.rb +322 -341
  234. data/lib/blacklight/engine.rb +13 -15
  235. data/lib/blacklight/exceptions.rb +2 -2
  236. data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
  237. data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
  238. data/lib/blacklight/parameters.rb +7 -21
  239. data/lib/blacklight/routes/exportable.rb +1 -0
  240. data/lib/blacklight/routes/searchable.rb +3 -1
  241. data/lib/blacklight/routes.rb +1 -0
  242. data/lib/blacklight/search_builder.rb +10 -10
  243. data/lib/blacklight/search_state/filter_field.rb +8 -25
  244. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  245. data/lib/blacklight/search_state.rb +23 -79
  246. data/lib/blacklight/solr/document.rb +1 -0
  247. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  248. data/lib/blacklight/solr/repository.rb +1 -0
  249. data/lib/blacklight/solr/request.rb +3 -0
  250. data/lib/blacklight/solr/response/facets.rb +21 -5
  251. data/lib/blacklight/solr/response/group.rb +1 -0
  252. data/lib/blacklight/solr/response/group_response.rb +1 -0
  253. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  254. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  255. data/lib/blacklight/solr/response/params.rb +5 -4
  256. data/lib/blacklight/solr/response/response.rb +1 -0
  257. data/lib/blacklight/solr/response/spelling.rb +1 -0
  258. data/lib/blacklight/solr/response.rb +4 -3
  259. data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
  260. data/lib/blacklight/solr.rb +1 -0
  261. data/lib/blacklight/version.rb +1 -0
  262. data/lib/blacklight.rb +8 -11
  263. data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
  264. data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
  265. data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
  266. data/lib/generators/blacklight/assets_generator.rb +14 -88
  267. data/lib/generators/blacklight/controller_generator.rb +3 -2
  268. data/lib/generators/blacklight/document_generator.rb +1 -0
  269. data/lib/generators/blacklight/install_generator.rb +7 -4
  270. data/lib/generators/blacklight/models_generator.rb +1 -0
  271. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  272. data/lib/generators/blacklight/solr_generator.rb +1 -1
  273. data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
  274. data/lib/generators/blacklight/templates/solr_document.rb +1 -7
  275. data/lib/generators/blacklight/test_support_generator.rb +4 -2
  276. data/lib/generators/blacklight/user_generator.rb +7 -9
  277. data/lib/railties/blacklight.rake +2 -3
  278. data/package.json +10 -10
  279. data/rollup.config.js +37 -0
  280. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  281. data/spec/components/blacklight/document_component_spec.rb +74 -33
  282. data/spec/components/blacklight/facet_component_spec.rb +2 -7
  283. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  284. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  285. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
  286. data/spec/components/blacklight/header_component_spec.rb +20 -0
  287. data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
  288. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  289. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  290. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
  291. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  292. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  293. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  294. data/spec/controllers/catalog_controller_spec.rb +24 -126
  295. data/spec/features/autocomplete_spec.rb +1 -1
  296. data/spec/features/axe_spec.rb +1 -1
  297. data/spec/features/bookmarks_spec.rb +1 -1
  298. data/spec/features/component_template_override_spec.rb +8 -0
  299. data/spec/features/facets_spec.rb +1 -1
  300. data/spec/features/modal_spec.rb +12 -0
  301. data/spec/features/search_context_spec.rb +4 -10
  302. data/spec/features/search_results_spec.rb +0 -33
  303. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  304. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  305. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  306. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  307. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  308. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
  309. data/spec/helpers/blacklight_helper_spec.rb +3 -298
  310. data/spec/helpers/catalog_helper_spec.rb +60 -115
  311. data/spec/i18n_spec.rb +1 -0
  312. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  313. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  314. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  315. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  316. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  317. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
  318. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  319. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  320. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  321. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  322. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  323. data/spec/models/blacklight/configuration_spec.rb +41 -53
  324. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  325. data/spec/models/blacklight/icon_spec.rb +29 -15
  326. data/spec/models/blacklight/search_builder_spec.rb +12 -12
  327. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  328. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  329. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  330. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  331. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  332. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  333. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
  334. data/spec/models/blacklight/user_spec.rb +22 -0
  335. data/spec/models/record_mailer_spec.rb +36 -23
  336. data/spec/models/solr_document_spec.rb +21 -3
  337. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  338. data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
  339. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  340. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  341. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  342. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
  343. data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
  344. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  345. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  346. data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
  347. data/spec/presenters/pipeline_spec.rb +13 -2
  348. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  349. data/spec/requests/load_suggestions_spec.rb +16 -0
  350. data/spec/routing/catalog_routing_spec.rb +6 -1
  351. data/spec/services/blacklight/search_service_spec.rb +31 -68
  352. data/spec/spec_helper.rb +4 -3
  353. data/spec/support/controller_level_helpers.rb +1 -2
  354. data/spec/support/features/search_helpers.rb +39 -0
  355. data/spec/support/features/session_helpers.rb +1 -0
  356. data/spec/support/features.rb +3 -0
  357. data/spec/support/view_component_test_helpers.rb +21 -0
  358. data/spec/test_app_templates/Gemfile.extra +4 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
  360. data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
  361. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  362. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  363. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
  366. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  367. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  368. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  369. data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
  370. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  371. data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
  372. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  373. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  374. data/tasks/blacklight.rake +7 -5
  375. metadata +95 -123
  376. data/.babelrc +0 -11
  377. data/app/assets/images/blacklight/list.svg +0 -1
  378. data/app/assets/images/blacklight/search.svg +0 -1
  379. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  380. data/app/components/blacklight/content_areas_shim.rb +0 -13
  381. data/app/components/blacklight/search_context_component.rb +0 -34
  382. data/app/controllers/concerns/blacklight/base.rb +0 -7
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/models/concerns/blacklight/document/email.rb +0 -26
  393. data/app/models/concerns/blacklight/document/sms.rb +0 -24
  394. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  395. data/app/views/catalog/_constraints_element.html.erb +0 -14
  396. data/app/views/catalog/_document_action.html.erb +0 -5
  397. data/app/views/catalog/_facet_group.html.erb +0 -5
  398. data/app/views/catalog/_facet_limit.html.erb +0 -3
  399. data/app/views/catalog/_index.html.erb +0 -1
  400. data/app/views/catalog/_index_header.html.erb +0 -22
  401. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  402. data/app/views/catalog/_show.html.erb +0 -6
  403. data/app/views/catalog/_show_header.html.erb +0 -2
  404. data/app/views/catalog/_thumbnail.html.erb +0 -1
  405. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  406. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  407. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  408. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  409. data/spec/features/sitelinks_search_box.rb +0 -13
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -108
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/models/blacklight/document/email_spec.rb +0 -57
  416. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  417. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  418. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  419. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  420. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  421. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  422. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  423. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  424. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  425. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  426. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
  427. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -1,37 +1,29 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight::Catalog
3
4
  extend ActiveSupport::Concern
4
5
 
5
6
  # MimeResponds is part of ActionController::Base, but not ActionController::API
6
7
  include ActionController::MimeResponds
7
8
 
8
- include Blacklight::Base
9
- include Blacklight::Facet
9
+ include Blacklight::Configurable
10
+ include Blacklight::SearchContext
10
11
  include Blacklight::Searchable
11
12
 
12
- extend Deprecation
13
-
14
13
  # The following code is executed when someone includes blacklight::catalog in their
15
14
  # own controller.
16
15
  included do
17
16
  if respond_to? :helper_method
18
- helper_method :sms_mappings, :has_search_parameters?, :facet_limit_for
17
+ helper_method :sms_mappings, :has_search_parameters?
18
+ helper_method :search_facet_path
19
19
  end
20
20
 
21
- helper Blacklight::Facet if respond_to? :helper
22
-
23
- # The index action will more than likely throw this one.
24
- # Example: when the standard query parser is used, and a user submits a "bad" query.
25
- rescue_from Blacklight::Exceptions::InvalidRequest, with: :handle_request_error
26
-
27
21
  record_search_parameters
28
22
  end
29
23
 
30
24
  # get search results from the solr index
31
25
  def index
32
- (@response, deprecated_document_list) = search_service.search_results
33
-
34
- @document_list = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(deprecated_document_list, 'The @document_list instance variable is deprecated; use @response.documents instead.')
26
+ @response = search_service.search_results
35
27
 
36
28
  respond_to do |format|
37
29
  format.html { store_preferred_view }
@@ -49,8 +41,7 @@ module Blacklight::Catalog
49
41
  # get a single document from the index
50
42
  # to add responses for formats other than html or json see _Blacklight::Document::Export_
51
43
  def show
52
- deprecated_response, @document = search_service.fetch(params[:id])
53
- @response = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(deprecated_response, 'The @response instance variable is deprecated; use @document.response instead.')
44
+ @document = search_service.fetch(params[:id])
54
45
 
55
46
  respond_to do |format|
56
47
  format.html { @search_context = setup_next_and_previous_documents }
@@ -67,7 +58,7 @@ module Blacklight::Catalog
67
58
  def raw
68
59
  raise(ActionController::RoutingError, 'Not Found') unless blacklight_config.raw_endpoint.enabled
69
60
 
70
- _, @document = search_service.fetch(params[:id])
61
+ @document = search_service.fetch(params[:id])
71
62
  render json: @document
72
63
  end
73
64
 
@@ -95,7 +86,7 @@ module Blacklight::Catalog
95
86
  @response = search_service.facet_field_response(@facet.key)
96
87
  @display_facet = @response.aggregations[@facet.field]
97
88
 
98
- @presenter = (@facet.presenter || Blacklight::FacetFieldPresenter).new(@facet, @display_facet, view_context)
89
+ @presenter = @facet.presenter.new(@facet, @display_facet, view_context)
99
90
  @pagination = @presenter.paginator
100
91
  respond_to do |format|
101
92
  format.html do
@@ -115,21 +106,19 @@ module Blacklight::Catalog
115
106
  end
116
107
  end
117
108
 
109
+ # Returns the dropdown list for autocomplete
118
110
  def suggest
119
- respond_to do |format|
120
- format.json do
121
- render json: suggestions_service.suggestions
122
- end
123
- end
111
+ @suggestions = suggestions_service.suggestions
112
+ render 'suggest', layout: false
124
113
  end
125
114
 
126
115
  # @return [Array] first value is a Blacklight::Solr::Response and the second
127
116
  # is a list of documents
128
117
  def action_documents
129
- deprecated_response, @documents = search_service.fetch(Array(params[:id]))
118
+ @documents = search_service.fetch(Array(params[:id]))
130
119
  raise Blacklight::Exceptions::RecordNotFound if @documents.blank?
131
120
 
132
- [deprecated_response, @documents]
121
+ @documents
133
122
  end
134
123
 
135
124
  def action_success_redirect_path
@@ -143,34 +132,14 @@ module Blacklight::Catalog
143
132
  params[:search_field].present? || search_state.has_constraints?
144
133
  end
145
134
 
146
- # TODO: deprecate this constant with #facet_limit_for
147
- DEFAULT_FACET_LIMIT = 10
148
-
149
- # Look up facet limit for given facet_field. Will look at config, and
150
- # if config is 'true' will look up from Solr @response if available. If
151
- # no limit is available, returns nil. Used from #add_facetting_to_solr
152
- # to supply f.fieldname.facet.limit values in solr request (no @response
153
- # available), and used in display (with @response available) to create
154
- # a facet paginator with the right limit.
155
- def facet_limit_for(facet_field)
156
- facet = blacklight_config.facet_fields[facet_field]
157
- return if facet.blank?
158
-
159
- if facet.limit && @response && @response.aggregations[facet.field]
160
- limit = @response.aggregations[facet.field].limit
161
-
162
- if limit.nil? # we didn't get or a set a limit, so infer one.
163
- facet.limit if facet.limit != true
164
- elsif limit == -1 # limit -1 is solr-speak for unlimited
165
- nil
166
- else
167
- limit.to_i - 1 # we added 1 to find out if we needed to paginate
168
- end
169
- elsif facet.limit
170
- facet.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
171
- end
135
+ def search_facet_path(options = {})
136
+ opts = search_state
137
+ .to_h
138
+ .merge(action: "facet", only_path: true)
139
+ .merge(options)
140
+ .except(:page)
141
+ url_for opts
172
142
  end
173
- deprecation_deprecate facet_limit_for: 'moving to private logic in Blacklight::FacetFieldPresenter'
174
143
 
175
144
  private
176
145
 
@@ -314,26 +283,6 @@ module Blacklight::Catalog
314
283
  action_name == 'show' ? 'catalog_result' : super
315
284
  end
316
285
 
317
- # when a method throws a Blacklight::Exceptions::InvalidRequest, this method is executed.
318
- def handle_request_error(exception)
319
- # Rails own code will catch and give usual Rails error page with stack trace
320
- raise exception if Rails.env.development? || Rails.env.test?
321
-
322
- flash_notice = I18n.t('blacklight.search.errors.request_error')
323
-
324
- # If there are errors coming from the index page, we want to trap those sensibly
325
-
326
- if flash[:notice] == flash_notice
327
- logger&.error "Cowardly aborting rsolr_request_error exception handling, because we redirected to a page that raises another exception"
328
- raise exception
329
- end
330
-
331
- logger&.error exception
332
-
333
- flash[:notice] = flash_notice
334
- redirect_to search_action_url
335
- end
336
-
337
286
  def blacklight_advanced_search_form_search_service
338
287
  form_search_state = search_state_class.new(blacklight_advanced_search_form_params, blacklight_config, self)
339
288
 
@@ -1,14 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Filters added to this controller apply to all controllers in the hosting application
3
4
  # as this module is mixed-in to the application controller in the hosting app on installation.
4
5
  module Blacklight::Controller
5
6
  extend ActiveSupport::Concern
6
- extend Deprecation
7
7
 
8
8
  included do
9
- include Blacklight::SearchFields
10
- helper Blacklight::SearchFields if respond_to? :helper
11
-
12
9
  include ActiveSupport::Callbacks
13
10
 
14
11
  # now in application.rb file under config.filter_parameters
@@ -16,6 +13,7 @@ module Blacklight::Controller
16
13
 
17
14
  # handle basic authorization exception with #access_denied
18
15
  rescue_from Blacklight::Exceptions::AccessDenied, with: :access_denied
16
+ helper BlacklightHelper
19
17
 
20
18
  if respond_to? :helper_method
21
19
  helper_method :current_user_session, :current_user, :current_or_guest_user
@@ -24,8 +22,7 @@ module Blacklight::Controller
24
22
  helper_method :has_user_authentication_provider?
25
23
  helper_method :blacklight_config, :blacklight_configuration_context # move to Catalog
26
24
  helper_method :search_action_url, :search_action_path
27
- helper_method :search_facet_path # move to catalog? deprecate?
28
- helper_method :search_state # move to catalog?
25
+ helper_method :search_state
29
26
  end
30
27
 
31
28
  # Which class to use for the search state. You can subclass SearchState if you
@@ -33,12 +30,6 @@ module Blacklight::Controller
33
30
  # TODO: move to Searchable
34
31
  class_attribute :search_state_class
35
32
  self.search_state_class = Blacklight::SearchState
36
-
37
- # Which class to use for the search service. You can subclass SearchService if you
38
- # want to override any of the methods (e.g. SearchService#fetch)
39
- # TODO: move to Searchable
40
- class_attribute :search_service_class
41
- self.search_service_class = Blacklight::SearchService
42
33
  end
43
34
 
44
35
  # @private
@@ -64,8 +55,9 @@ module Blacklight::Controller
64
55
  has_user_authentication_provider? && current_or_guest_user.present?
65
56
  end
66
57
 
58
+ # This must be on every controller that uses the layout, because it is used in
59
+ # the header to draw Blacklight::SearchNavbarComponent (via the shared/header_navbar template)
67
60
  # @return [Blacklight::SearchState] a memoized instance of the parameter state.
68
- # TODO: move to catalog?
69
61
  def search_state
70
62
  @search_state ||= search_state_class.new(params, blacklight_config, self)
71
63
  end
@@ -75,7 +67,7 @@ module Blacklight::Controller
75
67
  # which action the search form should use
76
68
  def search_action_url options = {}
77
69
  # Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
78
- search_catalog_url(options.except(:controller, :action))
70
+ search_catalog_url(options.to_h.except(:controller, :action))
79
71
  end
80
72
 
81
73
  def search_action_path *args
@@ -86,22 +78,6 @@ module Blacklight::Controller
86
78
  search_action_url(*args)
87
79
  end
88
80
 
89
- # TODO: move to catalog? deprecate?
90
- def search_facet_path(options = {})
91
- opts = search_state
92
- .to_h
93
- .merge(action: "facet", only_path: true)
94
- .merge(options)
95
- .except(:page)
96
- url_for opts
97
- end
98
-
99
- # Returns a list of Searches from the ids in the user's history.
100
- # TODO: move to catalog? SearchHistory?
101
- def searches_from_history
102
- session[:history].blank? ? ::Search.none : ::Search.where(id: session[:history]).order("updated_at desc")
103
- end
104
-
105
81
  # Should be provided by authentication provider
106
82
  # def current_user
107
83
  # end
@@ -125,21 +101,9 @@ module Blacklight::Controller
125
101
  respond_to? :current_user
126
102
  end
127
103
 
128
- def require_user_authentication_provider
129
- raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
130
- end
131
- deprecation_deprecate require_user_authentication_provider: 'removed without replacement'
132
-
133
104
  ##
134
105
  # When a user logs in, transfer any saved searches or bookmarks to the current_user
135
106
  def transfer_guest_to_user
136
- Deprecation.silence(Blacklight::Controller) do
137
- transfer_guest_user_actions_to_current_user
138
- end
139
- end
140
-
141
- # @deprecated use canonical `transfer_guest_to_user` method instead
142
- def transfer_guest_user_actions_to_current_user
143
107
  return unless respond_to?(:current_user) && respond_to?(:guest_user) && current_user && guest_user
144
108
 
145
109
  current_user_searches = current_user.searches.pluck(:query_params)
@@ -158,7 +122,6 @@ module Blacklight::Controller
158
122
  # let guest_user know we've moved some bookmarks from under it
159
123
  guest_user.reload if guest_user.persisted?
160
124
  end
161
- deprecation_deprecate :transfer_guest_user_actions_to_current_user
162
125
 
163
126
  ##
164
127
  # To handle failed authorization attempts, redirect the user to the
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight::SearchContext
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -17,6 +18,38 @@ module Blacklight::SearchContext
17
18
  end
18
19
  end
19
20
 
21
+ # The current search session
22
+ def current_search_session
23
+ @current_search_session ||= find_search_session
24
+ end
25
+
26
+ # Returns a list of Searches from the ids in the user's history.
27
+ def searches_from_history
28
+ session[:history].blank? ? ::Search.none : ::Search.where(id: session[:history]).order("updated_at desc")
29
+ end
30
+
31
+ # GET previous and next document json for the document specified by
32
+ # the counter param in current search
33
+ def page_links
34
+ counter_param = params.delete(:counter)
35
+ @page_link_data = {}
36
+ if counter_param
37
+ index = counter_param.to_i - 1
38
+ response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset_search
39
+ if documents.detect(&:present?)
40
+ @page_link_data[:prev] = page_links_document_path(documents.first, index)
41
+ @page_link_data[:next] = page_links_document_path(documents.last, index + 2)
42
+ end
43
+ if response&.total && response.total.positive?
44
+ @page_link_data[:counterRaw] = counter_param
45
+ @page_link_data[:counterDelimited] = helpers.number_with_delimiter(counter_param.to_i)
46
+ @page_link_data[:totalRaw] = response.total
47
+ @page_link_data[:totalDelimited] = helpers.number_with_delimiter(response.total)
48
+ end
49
+ end
50
+ render json: @page_link_data
51
+ end
52
+
20
53
  private
21
54
 
22
55
  # sets up the session[:search] hash if it doesn't already exist
@@ -27,11 +60,6 @@ module Blacklight::SearchContext
27
60
  session[:search]
28
61
  end
29
62
 
30
- # The current search session
31
- def current_search_session
32
- @current_search_session ||= find_search_session
33
- end
34
-
35
63
  # Persist the current search session id to the user's session
36
64
  def set_current_search_session
37
65
  search_session['id'] = current_search_session.id if current_search_session
@@ -79,7 +107,9 @@ module Blacklight::SearchContext
79
107
  end
80
108
 
81
109
  def find_or_initialize_search_session_from_params params
82
- params_copy = params.reject { |k, v| blacklisted_search_session_params.include?(k.to_sym) || v.blank? }
110
+ return unless blacklight_config.track_search_session.storage == 'server'
111
+
112
+ params_copy = params.reject { |k, v| nonpersisted_search_session_params.include?(k.to_sym) || v.blank? }
83
113
 
84
114
  return if params_copy.reject { |k, _v| [:action, :controller].include? k.to_sym }.blank?
85
115
 
@@ -102,22 +132,50 @@ module Blacklight::SearchContext
102
132
  end
103
133
 
104
134
  # A list of query parameters that should not be persisted for a search
105
- def blacklisted_search_session_params
135
+ def nonpersisted_search_session_params
136
+ unless method(:blacklisted_search_session_params).source_location.first.end_with?('deprecation/method_wrappers.rb')
137
+ # The blacklisted_search_session_params was overridden, so call it.
138
+ Blacklight.deprecation.warn(self, "blacklisted_search_session_params was overriden in your app, " \
139
+ "but that method should be renamed to `nonpersisted_search_session_params'. " \
140
+ "The original behavior will be removed in the next major release.")
141
+ return blacklisted_search_session_params
142
+ end
106
143
  [:commit, :counter, :total, :search_id, :page, :per_page]
107
144
  end
108
145
 
146
+ def blacklisted_search_session_params
147
+ nonpersisted_search_session_params
148
+ end
149
+ Blacklight.deprecation.deprecate_methods(self, blacklisted_search_session_params: 'use nonpersisted_search_session_params instead')
150
+
109
151
  # calls setup_previous_document then setup_next_document.
110
152
  # used in the show action for single view pagination.
111
153
  def setup_next_and_previous_documents
112
- if search_session['counter'] && current_search_session
113
- index = search_session['counter'].to_i - 1
114
- response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params)
154
+ return { counter: params[:counter] } if setup_next_and_previous_on_client?
155
+ return nil unless setup_next_and_previous_on_server?
115
156
 
116
- search_session['total'] = response.total
117
- { prev: documents.first, next: documents.last }
118
- end
157
+ index = search_session['counter'].to_i - 1
158
+ response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params)
159
+
160
+ search_session['total'] = response.total
161
+ { prev: documents.first, next: documents.last }
119
162
  rescue Blacklight::Exceptions::InvalidRequest => e
120
163
  logger&.warn "Unable to setup next and previous documents: #{e}"
121
164
  nil
122
165
  end
166
+
167
+ def setup_next_and_previous_on_server?
168
+ search_session['counter'] && current_search_session && blacklight_config.track_search_session.storage == 'server'
169
+ end
170
+
171
+ def setup_next_and_previous_on_client?
172
+ params[:counter] && blacklight_config.track_search_session.storage == 'client'
173
+ end
174
+
175
+ def page_links_document_path(document, counter)
176
+ return nil unless document
177
+ return search_state.url_for_document(document, counter: counter) if blacklight_config.view_config(:show).route
178
+
179
+ solr_document_path(document, counter: counter)
180
+ end
123
181
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  module SearchHistory
4
5
  extend ActiveSupport::Concern
5
6
  include Blacklight::Configurable
7
+ include Blacklight::SearchContext
6
8
 
7
9
  included do
8
10
  copy_blacklight_config_from(CatalogController)
@@ -5,17 +5,28 @@
5
5
  # would be provided by Blacklight::Controller
6
6
  # 1. search_state
7
7
  # 2. blacklight_config
8
- # 3. search_service_class
9
8
  #
10
9
  # Additionally, the including class may override the search_service_context method to provide
11
10
  # further context to the SearchService. For example you could override this to provide the
12
11
  # currently signed in user.
13
12
  module Blacklight::Searchable
13
+ extend ActiveSupport::Concern
14
+
15
+ included do
16
+ # Which class to use for the search service. You can subclass SearchService if you
17
+ # want to override any of the methods (e.g. SearchService#fetch)
18
+ class_attribute :search_service_class
19
+ self.search_service_class = Blacklight::SearchService
20
+ end
21
+
14
22
  # @return [Blacklight::SearchService]
15
23
  def search_service
16
24
  search_service_class.new(config: blacklight_config, search_state: search_state, user_params: search_state.to_h, **search_service_context)
17
25
  end
18
26
 
27
+ # Override this method on the class that includes Blacklight::Searchable to provide more context to the search service if necessary.
28
+ # For example, if your search builder needs to be aware of the current user, override this method to return a hash including the current user.
29
+ # Then the search builder could use some property about the current user to construct a constraint on the search.
19
30
  # @return [Hash] a hash of context information to pass through to the search service
20
31
  def search_service_context
21
32
  {}
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight::TokenBasedUser
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class SearchHistoryController < ApplicationController
3
4
  include Blacklight::SearchHistory
4
5
  end