blacklight 7.41.0 → 8.0.0.beta1

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 (425) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +243 -14
  5. data/.rubocop_todo.yml +137 -429
  6. data/Gemfile +11 -6
  7. data/README.md +11 -3
  8. data/VERSION +1 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  11. data/app/assets/javascripts/blacklight/blacklight.js +374 -493
  12. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  13. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  16. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  17. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  18. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  19. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  20. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  22. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  23. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  24. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  25. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  26. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  27. data/app/builders/blacklight/action_builder.rb +18 -9
  28. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  29. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  30. data/app/components/blacklight/constraints_component.rb +27 -37
  31. data/app/components/blacklight/document/action_component.rb +12 -10
  32. data/app/components/blacklight/document/actions_component.rb +2 -2
  33. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  34. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  35. data/app/components/blacklight/document/citation_component.rb +5 -3
  36. data/app/components/blacklight/document/group_component.rb +7 -3
  37. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  38. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  39. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  40. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  41. data/app/components/blacklight/document_component.html.erb +1 -1
  42. data/app/components/blacklight/document_component.rb +16 -78
  43. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  44. data/app/components/blacklight/document_metadata_component.rb +5 -10
  45. data/app/components/blacklight/facet_component.rb +3 -3
  46. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  47. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  48. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  49. data/app/components/blacklight/facet_field_component.rb +9 -2
  50. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  51. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  52. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  53. data/app/components/blacklight/facet_item_component.rb +1 -43
  54. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  55. data/app/components/blacklight/header_component.rb +1 -1
  56. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  57. data/app/components/blacklight/icons/icon_component.rb +4 -9
  58. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  59. data/app/components/blacklight/icons/list_component.rb +16 -0
  60. data/app/components/blacklight/icons/search_component.rb +16 -0
  61. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  62. data/app/components/blacklight/metadata_field_component.rb +24 -8
  63. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  64. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  65. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  66. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  67. data/app/components/blacklight/response/pagination_component.rb +2 -11
  68. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  69. data/app/components/blacklight/response/sort_component.rb +1 -16
  70. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  71. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  72. data/app/components/blacklight/response/view_type_component.rb +4 -6
  73. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  74. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  75. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  76. data/app/components/blacklight/search_bar_component.rb +2 -16
  77. data/app/components/blacklight/search_button_component.rb +3 -3
  78. data/app/components/blacklight/search_context_component.rb +43 -10
  79. data/app/components/blacklight/search_header_component.html.erb +2 -0
  80. data/app/components/blacklight/search_header_component.rb +6 -0
  81. data/app/components/blacklight/start_over_button_component.rb +5 -3
  82. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  83. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  84. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  85. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  86. data/app/components/blacklight/system/modal_component.rb +1 -3
  87. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  88. data/app/components/blacklight/top_navbar_component.rb +0 -4
  89. data/app/controllers/bookmarks_controller.rb +1 -0
  90. data/app/controllers/catalog_controller.rb +1 -0
  91. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  92. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  93. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  94. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  95. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  96. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  97. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  98. data/app/controllers/search_history_controller.rb +1 -0
  99. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  100. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  101. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  102. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  103. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  104. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  105. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  106. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  107. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  108. data/app/helpers/blacklight_helper.rb +1 -0
  109. data/app/helpers/catalog_helper.rb +1 -0
  110. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  111. data/app/javascript/blacklight/button_focus.js +12 -10
  112. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  113. data/app/javascript/blacklight/core.js +5 -7
  114. data/app/javascript/blacklight/index.js +13 -0
  115. data/app/javascript/blacklight/modal.js +99 -164
  116. data/app/javascript/blacklight/modalForm.js +60 -0
  117. data/app/javascript/blacklight/search_context.js +46 -54
  118. data/app/models/blacklight/facet_paginator.rb +3 -2
  119. data/app/models/blacklight/icon.rb +4 -2
  120. data/app/models/bookmark.rb +0 -2
  121. data/app/models/concerns/blacklight/configurable.rb +5 -4
  122. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  123. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  124. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  125. data/app/models/concerns/blacklight/document/email.rb +1 -0
  126. data/app/models/concerns/blacklight/document/export.rb +2 -1
  127. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  128. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  129. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  130. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  131. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  132. data/app/models/concerns/blacklight/user.rb +17 -8
  133. data/app/models/record_mailer.rb +13 -12
  134. data/app/models/search.rb +1 -7
  135. data/app/models/solr_document.rb +1 -0
  136. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  137. data/app/presenters/blacklight/document_presenter.rb +23 -50
  138. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  139. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  140. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  141. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  142. data/app/presenters/blacklight/field_presenter.rb +1 -0
  143. data/app/presenters/blacklight/index_presenter.rb +2 -40
  144. data/app/presenters/blacklight/json_presenter.rb +10 -6
  145. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  146. data/app/presenters/blacklight/show_presenter.rb +1 -9
  147. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  148. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  149. data/app/services/blacklight/field_retriever.rb +12 -21
  150. data/app/services/blacklight/search_service.rb +10 -17
  151. data/app/values/blacklight/types.rb +0 -18
  152. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  153. data/app/views/bookmarks/_tools.html.erb +7 -12
  154. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  155. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  156. data/app/views/catalog/_citation.html.erb +1 -1
  157. data/app/views/catalog/_constraints.html.erb +1 -14
  158. data/app/views/catalog/_document.atom.builder +12 -14
  159. data/app/views/catalog/_document.html.erb +5 -3
  160. data/app/views/catalog/_document.rss.builder +2 -4
  161. data/app/views/catalog/_facet_layout.html.erb +2 -2
  162. data/app/views/catalog/_facets.html.erb +5 -4
  163. data/app/views/catalog/_home_text.html.erb +2 -14
  164. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  165. data/app/views/catalog/_search_form.html.erb +2 -2
  166. data/app/views/catalog/_search_header.html.erb +1 -2
  167. data/app/views/catalog/_search_results.html.erb +2 -2
  168. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  169. data/app/views/catalog/_show_main_content.html.erb +11 -16
  170. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  171. data/app/views/catalog/_show_tools.html.erb +8 -14
  172. data/app/views/catalog/_view_type_group.html.erb +1 -1
  173. data/app/views/catalog/email.html.erb +2 -2
  174. data/app/views/catalog/email_success.html.erb +5 -6
  175. data/app/views/catalog/facet.html.erb +7 -5
  176. data/app/views/catalog/index.atom.builder +12 -14
  177. data/app/views/catalog/index.html.erb +4 -1
  178. data/app/views/catalog/index.json.jbuilder +19 -19
  179. data/app/views/catalog/index.rss.builder +1 -1
  180. data/app/views/catalog/opensearch.xml.builder +1 -1
  181. data/app/views/catalog/sms.html.erb +2 -2
  182. data/app/views/catalog/sms_success.html.erb +5 -6
  183. data/app/views/catalog/suggest.html.erb +3 -0
  184. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  185. data/app/views/layouts/blacklight/base.html.erb +13 -2
  186. data/app/views/search_history/index.html.erb +6 -2
  187. data/app/views/shared/_flash_messages.html.erb +1 -1
  188. data/app/views/shared/_modal.html.erb +3 -3
  189. data/blacklight.gemspec +7 -11
  190. data/config/importmap.rb +3 -0
  191. data/config/locales/blacklight.ar.yml +0 -1
  192. data/config/locales/blacklight.ca.yml +0 -1
  193. data/config/locales/blacklight.de.yml +0 -1
  194. data/config/locales/blacklight.en.yml +0 -2
  195. data/config/locales/blacklight.es.yml +0 -1
  196. data/config/locales/blacklight.fr.yml +0 -1
  197. data/config/locales/blacklight.hu.yml +0 -1
  198. data/config/locales/blacklight.it.yml +0 -1
  199. data/config/locales/blacklight.nl.yml +0 -1
  200. data/config/locales/blacklight.pt-BR.yml +0 -1
  201. data/config/locales/blacklight.sq.yml +0 -1
  202. data/config/locales/blacklight.zh.yml +0 -1
  203. data/config/routes.rb +3 -2
  204. data/db/migrate/20140202020201_create_searches.rb +1 -0
  205. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  206. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  207. data/docker-compose.yml +3 -3
  208. data/lib/blacklight/abstract_repository.rb +1 -6
  209. data/lib/blacklight/component.rb +47 -10
  210. data/lib/blacklight/configuration/context.rb +4 -4
  211. data/lib/blacklight/configuration/display_field.rb +7 -9
  212. data/lib/blacklight/configuration/facet_field.rb +17 -11
  213. data/lib/blacklight/configuration/field.rb +1 -0
  214. data/lib/blacklight/configuration/fields.rb +12 -15
  215. data/lib/blacklight/configuration/index_field.rb +1 -0
  216. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  217. data/lib/blacklight/configuration/search_field.rb +1 -0
  218. data/lib/blacklight/configuration/show_field.rb +1 -0
  219. data/lib/blacklight/configuration/sort_field.rb +1 -0
  220. data/lib/blacklight/configuration/tool_config.rb +1 -0
  221. data/lib/blacklight/configuration/view_config.rb +14 -10
  222. data/lib/blacklight/configuration.rb +310 -365
  223. data/lib/blacklight/engine.rb +8 -24
  224. data/lib/blacklight/exceptions.rb +2 -2
  225. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  226. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  227. data/lib/blacklight/parameters.rb +7 -21
  228. data/lib/blacklight/routes/exportable.rb +1 -0
  229. data/lib/blacklight/routes/searchable.rb +2 -1
  230. data/lib/blacklight/routes.rb +1 -0
  231. data/lib/blacklight/search_builder.rb +10 -10
  232. data/lib/blacklight/search_state/filter_field.rb +8 -25
  233. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  234. data/lib/blacklight/search_state.rb +23 -79
  235. data/lib/blacklight/solr/document.rb +1 -0
  236. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  237. data/lib/blacklight/solr/repository.rb +4 -24
  238. data/lib/blacklight/solr/request.rb +1 -0
  239. data/lib/blacklight/solr/response/facets.rb +21 -5
  240. data/lib/blacklight/solr/response/group.rb +1 -0
  241. data/lib/blacklight/solr/response/group_response.rb +1 -0
  242. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  243. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  244. data/lib/blacklight/solr/response/params.rb +5 -4
  245. data/lib/blacklight/solr/response/response.rb +1 -0
  246. data/lib/blacklight/solr/response/spelling.rb +1 -0
  247. data/lib/blacklight/solr/response.rb +16 -3
  248. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  249. data/lib/blacklight/solr.rb +7 -0
  250. data/lib/blacklight/version.rb +1 -0
  251. data/lib/blacklight.rb +26 -14
  252. data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
  253. data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
  254. data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
  255. data/lib/generators/blacklight/assets_generator.rb +13 -86
  256. data/lib/generators/blacklight/controller_generator.rb +4 -3
  257. data/lib/generators/blacklight/document_generator.rb +1 -0
  258. data/lib/generators/blacklight/install_generator.rb +4 -3
  259. data/lib/generators/blacklight/models_generator.rb +1 -0
  260. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  261. data/lib/generators/blacklight/solr_generator.rb +1 -1
  262. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  263. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
  264. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  265. data/lib/generators/blacklight/user_generator.rb +7 -9
  266. data/lib/railties/blacklight.rake +6 -7
  267. data/package.json +10 -13
  268. data/rollup.config.js +27 -0
  269. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  270. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  271. data/spec/components/blacklight/document_component_spec.rb +22 -131
  272. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  273. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  274. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  275. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  276. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  277. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  278. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  279. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  280. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  281. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  282. data/spec/controllers/catalog_controller_spec.rb +13 -135
  283. data/spec/features/advanced_search_spec.rb +0 -56
  284. data/spec/features/autocomplete_spec.rb +1 -1
  285. data/spec/features/axe_spec.rb +1 -6
  286. data/spec/features/bookmarks_spec.rb +1 -1
  287. data/spec/features/facets_spec.rb +6 -4
  288. data/spec/features/search_context_spec.rb +5 -11
  289. data/spec/features/search_results_spec.rb +0 -33
  290. data/spec/features/sitelinks_search_box.rb +13 -0
  291. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  292. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  293. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  294. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  295. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  296. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  297. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  298. data/spec/helpers/catalog_helper_spec.rb +7 -118
  299. data/spec/i18n_spec.rb +1 -0
  300. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  301. data/spec/lib/blacklight/component_spec.rb +27 -32
  302. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  303. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  304. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  305. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  306. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  307. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  308. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  309. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  310. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  311. data/spec/models/blacklight/configuration_spec.rb +17 -51
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  313. data/spec/models/blacklight/icon_spec.rb +31 -15
  314. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  315. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  316. data/spec/models/blacklight/solr/repository_spec.rb +0 -45
  317. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  318. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  319. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  320. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  321. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  322. data/spec/models/blacklight/user_spec.rb +22 -0
  323. data/spec/models/solr_document_spec.rb +3 -9
  324. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  325. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  326. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  327. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  328. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  329. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  330. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  331. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  333. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  334. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  335. data/spec/requests/load_suggestions_spec.rb +16 -0
  336. data/spec/routing/catalog_routing_spec.rb +2 -1
  337. data/spec/services/blacklight/search_service_spec.rb +39 -76
  338. data/spec/spec_helper.rb +8 -9
  339. data/spec/support/controller_level_helpers.rb +1 -2
  340. data/spec/support/features/search_helpers.rb +39 -0
  341. data/spec/support/features/session_helpers.rb +1 -0
  342. data/spec/support/features.rb +3 -0
  343. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  344. data/spec/test_app_templates/Gemfile.extra +1 -0
  345. data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
  346. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  347. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  348. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  349. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  350. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  351. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  352. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  353. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  354. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  355. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  356. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  357. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  358. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  360. data/tasks/blacklight.rake +11 -9
  361. data/template.demo.rb +7 -7
  362. metadata +77 -189
  363. data/.babelrc +0 -11
  364. data/.github/matrix.json +0 -62
  365. data/.github/workflows/build.yml +0 -16
  366. data/.github/workflows/lint.yml +0 -23
  367. data/.github/workflows/main.yml +0 -23
  368. data/.github/workflows/test.yml +0 -53
  369. data/app/assets/images/blacklight/list.svg +0 -1
  370. data/app/assets/images/blacklight/search.svg +0 -1
  371. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  372. data/app/components/blacklight/content_areas_shim.rb +0 -13
  373. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  374. data/app/components/blacklight/search/per_page_component.rb +0 -50
  375. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  376. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  377. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  378. data/app/controllers/concerns/blacklight/base.rb +0 -12
  379. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  380. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  381. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  382. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  383. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  384. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  385. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  386. data/app/javascript/blacklight/autocomplete.js +0 -36
  387. data/app/javascript/blacklight/facet_load.js +0 -22
  388. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  389. data/app/views/catalog/_constraints_element.html.erb +0 -14
  390. data/app/views/catalog/_document_action.html.erb +0 -5
  391. data/app/views/catalog/_facet_group.html.erb +0 -5
  392. data/app/views/catalog/_facet_limit.html.erb +0 -3
  393. data/app/views/catalog/_index.html.erb +0 -1
  394. data/app/views/catalog/_index_header.html.erb +0 -22
  395. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  396. data/app/views/catalog/_show.html.erb +0 -6
  397. data/app/views/catalog/_show_header.html.erb +0 -2
  398. data/app/views/catalog/_thumbnail.html.erb +0 -1
  399. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  400. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  401. data/spec/components/blacklight/header_component_spec.rb +0 -20
  402. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  403. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  404. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  405. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  406. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  407. data/spec/features/citation_spec.rb +0 -10
  408. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  409. data/spec/features/sms_spec.rb +0 -12
  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 -101
  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/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  416. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  417. data/spec/support/view_component_test_helpers.rb +0 -35
  418. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  419. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  420. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  421. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  422. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  423. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  424. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  425. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  module Suggest
4
5
  class Response
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight::User
3
- # This gives us an is_blacklight_user method that can be included in
4
- # the containing applications models.
5
- # SEE ALSO: The /lib/blacklight/engine.rb class for how when this
6
- # is injected into the hosting application through ActiveRecord::Base extend
7
- def self.included(base)
8
- return unless base.respond_to? :has_many
4
+ extend ActiveSupport::Concern
5
+ # SEE ALSO: The lib/blacklight/generator/user_generator.rb class for where this
6
+ # is generated into the hosting application.
7
+ included do
8
+ class_attribute :string_display_key
9
9
 
10
- base.send :has_many, :bookmarks, dependent: :destroy, as: :user
11
- base.send :has_many, :searches, dependent: :destroy, as: :user
10
+ has_many :bookmarks, dependent: :destroy, as: :user
11
+ has_many :searches, dependent: :destroy, as: :user
12
12
  end
13
13
 
14
14
  def bookmarks_for_documents documents = []
@@ -28,4 +28,13 @@ module Blacklight::User
28
28
  def existing_bookmark_for(document)
29
29
  bookmarks_for_documents([document]).first
30
30
  end
31
+
32
+ ##
33
+ # @return [String] a user-displayable login/identifier for the user account
34
+ def to_s
35
+ string_display_key = self.class.string_display_key
36
+ return send(string_display_key) if respond_to?(string_display_key)
37
+
38
+ super
39
+ end
31
40
  end
@@ -1,17 +1,18 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Only works for documents with a #to_marc right now.
3
- class RecordMailer < ActionMailer::Base
4
+ class RecordMailer < ApplicationMailer
4
5
  def email_record(documents, details, url_gen_params)
5
6
  title = begin
6
- title_field = details[:config].email.title_field
7
- if title_field
8
- [documents.first[title_field]].flatten.first
9
- else
10
- documents.first.to_semantic_values[:title]
11
- end
12
- rescue
13
- I18n.t('blacklight.email.text.default_title')
14
- end
7
+ title_field = details[:config].email.title_field
8
+ if title_field
9
+ [documents.first[title_field]].flatten.first
10
+ else
11
+ documents.first.to_semantic_values[:title]
12
+ end
13
+ rescue
14
+ I18n.t('blacklight.email.text.default_title')
15
+ end
15
16
 
16
17
  subject = I18n.t('blacklight.email.text.subject',
17
18
  count: documents.length,
@@ -22,7 +23,7 @@ class RecordMailer < ActionMailer::Base
22
23
  @config = details[:config]
23
24
  @url_gen_params = url_gen_params
24
25
 
25
- mail(to: details[:to], subject: subject)
26
+ mail(to: details[:to], subject: subject)
26
27
  end
27
28
 
28
29
  def sms_record(documents, details, url_gen_params)
@@ -30,6 +31,6 @@ class RecordMailer < ActionMailer::Base
30
31
  @config = details[:config]
31
32
  @url_gen_params = url_gen_params
32
33
 
33
- mail(to: details[:to], subject: "")
34
+ mail(to: details[:to], subject: "") # rubocop:disable Rails/I18nLocaleTexts
34
35
  end
35
36
  end
data/app/models/search.rb CHANGED
@@ -3,13 +3,7 @@
3
3
  class Search < ApplicationRecord
4
4
  belongs_to :user, optional: true
5
5
 
6
- # use a backwards-compatible serializer until the Rails API stabilizes and we can evaluate for major-revision compatibility
7
- if ::Rails.version.to_f >= 7.1
8
- # non-deprecated coder: keyword arg for Rails 7.1+
9
- serialize :query_params, coder: Blacklight::SearchParamsYamlCoder
10
- else
11
- serialize :query_params, Blacklight::SearchParamsYamlCoder
12
- end
6
+ serialize :query_params, Blacklight::SearchParamsYamlCoder
13
7
 
14
8
  # A Search instance is considered a saved search if it has a user_id.
15
9
  def saved?
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class SolrDocument
3
4
  include Blacklight::Solr::Document
4
5
  end
@@ -29,7 +29,7 @@ module Blacklight
29
29
  end
30
30
 
31
31
  def remove_href(path = search_state)
32
- view_context.search_action_path(path.reset_search(clause: path.clause_params.except(key)).to_h)
32
+ view_context.search_action_path(path.reset_search(clause: path.clause_params.except(key)))
33
33
  end
34
34
 
35
35
  private
@@ -11,26 +11,18 @@ module Blacklight
11
11
  # @param [SolrDocument] document
12
12
  # @param [ActionView::Base] view_context scope for linking and generating urls
13
13
  # @param [Blacklight::Configuration] configuration
14
- def initialize(document, view_context, configuration = view_context.blacklight_config, view_config: nil, field_presenter_options: {})
14
+ def initialize(document, view_context, configuration = view_context.blacklight_config)
15
15
  @document = document
16
16
  @view_context = view_context
17
17
  @configuration = configuration
18
- @view_config = view_config
19
- @field_presenter_options = field_presenter_options
20
18
  end
21
19
 
22
20
  # @return [Hash<String,Configuration::Field>] all the fields for this index view that should be rendered
23
- def fields_to_render(document_fields = fields, **kwargs)
24
- unless block_given?
25
- return to_enum(:fields_to_render, document_fields, **kwargs) unless method(:fields_to_render).arity.zero?
21
+ def fields_to_render
22
+ return to_enum(:fields_to_render) unless block_given?
26
23
 
27
- Deprecation.warn(self.class, 'In Blacklight 8, Blacklight::DocumentPresenter#fields_to_render accepts additional arguments')
28
-
29
- return to_enum(:fields_to_render)
30
- end
31
-
32
- document_fields.each do |name, field_config|
33
- field_presenter = field_presenter(field_config, kwargs)
24
+ fields.each do |name, field_config|
25
+ field_presenter = field_presenter(field_config)
34
26
 
35
27
  next unless field_presenter.render_field? && field_presenter.any?
36
28
 
@@ -38,21 +30,10 @@ module Blacklight
38
30
  end
39
31
  end
40
32
 
41
- def field_presenters(document_fields = fields, **kwargs)
42
- unless block_given?
43
- return to_enum(:field_presenters, document_fields, **kwargs) unless method(:field_presenters).arity.zero?
44
-
45
- Deprecation.warn(self.class, 'In Blacklight 8, Blacklight::DocumentPresenter#field_presenters accepts additional arguments')
46
-
47
- return to_enum(:field_presenters)
48
- end
33
+ def field_presenters
34
+ return to_enum(:field_presenters) unless block_given?
49
35
 
50
- if method(:fields_to_render).arity.zero?
51
- Deprecation.warn(self.class, 'In Blacklight 8, Blacklight::DocumentPresenter#fields_to_render accept additional arguments')
52
- fields_to_render.each { |_, _, config| yield config }
53
- else
54
- fields_to_render(document_fields, **kwargs).each { |_, _, config| yield config }
55
- end
36
+ fields_to_render.each { |_, _, config| yield config }
56
37
  end
57
38
 
58
39
  ##
@@ -98,10 +79,8 @@ module Blacklight
98
79
 
99
80
  fields += ['format'] if fields.empty? # backwards compatibility with the old default value for display_type_field
100
81
 
101
- display_type = fields.lazy.map { |field| field_presenter(field_config(field)) }.detect(&:any?)&.values
102
- display_type ||= Array(default) if default
103
-
104
- display_type || []
82
+ display_type = fields.lazy.map { |field| field_presenter(display_fields[field] || Configuration::NullDisplayField.new(field)) }.detect(&:any?)&.values
83
+ display_type || Array(default)
105
84
  end
106
85
 
107
86
  ##
@@ -137,11 +116,11 @@ module Blacklight
137
116
  end
138
117
 
139
118
  def view_config
140
- @view_config ||= show_view_config
119
+ show_view_config
141
120
  end
142
121
 
143
122
  def show_view_config
144
- configuration.view_config(:show, action_name: view_context.action_name)
123
+ configuration.view_config(:show)
145
124
  end
146
125
 
147
126
  def inspect
@@ -151,33 +130,27 @@ module Blacklight
151
130
 
152
131
  private
153
132
 
154
- def render_field?(field_config)
155
- field_presenter(field_config).render_field?
156
- end
157
- deprecation_deprecate render_field?: 'Use FieldPresenter#render_field?'
158
-
159
- def has_value?(field_config)
160
- field_presenter(field_config).any?
133
+ # @return [Hash<String,Configuration::Field>]
134
+ def fields
135
+ @fields ||= Array(display_type).inject(display_fields) do |fields, display_type|
136
+ fields.merge(display_fields(configuration.for_display_type(display_type)))
137
+ end
161
138
  end
162
- deprecation_deprecate has_value?: 'Use FieldPresenter#any?'
163
139
 
164
- def field_values(field_config, options = {})
165
- field_value(field_config, options)
140
+ def display_fields(config = configuration)
141
+ config[view_config.document_fields_key || :index_fields]
166
142
  end
167
- deprecation_deprecate field_values: 'Use #field_value'
168
143
 
169
- def retrieve_values(field_config)
170
- field_presenter(field_config).values
144
+ def field_config(field)
145
+ fields.fetch(field) { Configuration::NullDisplayField.new(field) }
171
146
  end
172
- deprecation_deprecate retrieve_values: 'Use FieldPresenter#values'
173
147
 
174
148
  def field_presenter(field_config, options = {})
175
- presenter_class = field_config.presenter || Blacklight::FieldPresenter
176
- presenter_class.new(view_context, document, field_config, options.merge(field_presenter_options))
149
+ field_config.presenter.new(view_context, document, field_config, field_presenter_options.merge(options))
177
150
  end
178
151
 
179
152
  def field_presenter_options
180
- @field_presenter_options ||= {}
153
+ {}
181
154
  end
182
155
  end
183
156
  end
@@ -15,15 +15,11 @@ module Blacklight
15
15
  end
16
16
 
17
17
  def collapsed?
18
- Deprecation.silence(Blacklight::FacetsHelperBehavior) do
19
- view_context.should_collapse_facet?(facet_field)
20
- end
18
+ !active? && facet_field.collapse
21
19
  end
22
20
 
23
21
  def active?
24
- Deprecation.silence(Blacklight::FacetsHelperBehavior) do
25
- view_context.facet_field_in_params?(key)
26
- end
22
+ search_state.filter(facet_field).any?
27
23
  end
28
24
 
29
25
  def in_modal?
@@ -44,20 +40,49 @@ module Blacklight
44
40
  search_state&.filter(facet_field)&.values || []
45
41
  end
46
42
 
47
- # @private
48
- # @deprecated
49
- def html_id
50
- Deprecation.silence(Blacklight::FacetsHelperBehavior) do
51
- view_context.facet_field_id(facet_field)
52
- end
43
+ # Appease rubocop rules by implementing #each_value
44
+ def each_value(&block)
45
+ values.each(&block)
53
46
  end
54
47
 
55
48
  def paginator
56
49
  return unless display_facet
57
50
 
58
- Deprecation.silence(Blacklight::Facet) do
59
- @paginator ||= view_context.facet_paginator(facet_field, display_facet)
51
+ @paginator ||= blacklight_config.facet_paginator_class.new(
52
+ display_facet.items,
53
+ sort: display_facet.sort,
54
+ offset: display_facet.offset,
55
+ prefix: display_facet.prefix,
56
+ limit: facet_limit
57
+ )
58
+ end
59
+
60
+ DEFAULT_FACET_LIMIT = 10
61
+
62
+ # Look up facet limit for given facet_field. Will look at config, and
63
+ # if config is 'true' will look up from Solr @response if available. If
64
+ # no limit is available, returns nil. Used from #add_facetting_to_solr
65
+ # to supply f.fieldname.facet.limit values in solr request (no @response
66
+ # available), and used in display (with @response available) to create
67
+ # a facet paginator with the right limit.
68
+ def facet_limit
69
+ return unless facet_field.limit
70
+
71
+ if @display_facet
72
+ limit = @display_facet.limit
73
+
74
+ if limit.nil? # we didn't get or a set a limit, so infer one.
75
+ facet_field.limit if facet_field.limit != true
76
+ elsif limit == -1 # limit -1 is solr-speak for unlimited
77
+ nil
78
+ else
79
+ limit.to_i - 1 # we added 1 to find out if we needed to paginate
80
+ end
81
+ else
82
+ facet_field.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
60
83
  end
61
84
  end
85
+
86
+ delegate :blacklight_config, to: :search_state
62
87
  end
63
88
  end
@@ -7,12 +7,8 @@ module Blacklight
7
7
  delegate :key, to: :facet_config
8
8
 
9
9
  def initialize(group, facet_item, facet_config, view_context, facet_field, search_state = view_context.search_state)
10
+ super(facet_item, facet_config, view_context, facet_field, search_state)
10
11
  @group = group
11
- @facet_item = facet_item
12
- @facet_config = facet_config
13
- @view_context = view_context
14
- @facet_field = facet_field
15
- @search_state = search_state
16
12
  end
17
13
 
18
14
  ##
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetItemPivotPresenter < FacetItemPresenter
5
+ ##
6
+ # Check if the query parameters have the given facet field with the
7
+ # given value.
8
+ def selected?
9
+ search_state.filter(facet_config).include?(facet_item)
10
+ end
11
+
12
+ def shown?
13
+ selected? || facet_item_presenters.any? { |x| x.try(:shown?) }
14
+ end
15
+
16
+ def field_label
17
+ facet_field_presenter.label
18
+ end
19
+
20
+ def facet_item_presenters
21
+ return to_enum(:facet_item_presenters) unless block_given?
22
+ return [] unless items
23
+
24
+ items.each { |i| yield facet_item_presenter(i) }
25
+ end
26
+
27
+ def facet_item_presenter(facet_item)
28
+ facet_config.item_presenter.new(facet_item, facet_config, view_context, facet_field, search_state)
29
+ end
30
+
31
+ ##
32
+ # Get the displayable version of a facet's value
33
+ #
34
+ # @return [String]
35
+ def label
36
+ label_source = facet_item.respond_to?(:label) ? facet_item.label : facet_item
37
+ if facet_config.helper_method
38
+ view_context.public_send(facet_config.helper_method, label_source)
39
+ else
40
+ item_fq = label_source.respond_to?(:fq) ? label_source.fq : {}
41
+ item_fq = item_fq.symbolize_keys
42
+ label_value = facet_config.pivot.map(&:to_sym).map { |k| item_fq[k] }
43
+ if label_source.respond_to?(:field)
44
+ label_value << value
45
+ else
46
+ label_value.unshift value
47
+ end
48
+ label_value.compact.join(" » ")
49
+ end
50
+ end
51
+
52
+ def value
53
+ if facet_item.respond_to? :value
54
+ facet_item.value
55
+ else
56
+ facet_item
57
+ end
58
+ end
59
+ end
60
+ end
@@ -30,9 +30,7 @@ module Blacklight
30
30
  # Check if the query parameters have the given facet field with the
31
31
  # given value.
32
32
  def selected?
33
- Deprecation.silence(Blacklight::SearchState) do
34
- search_state.has_facet? facet_config, value: value
35
- end
33
+ search_state.filter(facet_config).include?(value)
36
34
  end
37
35
 
38
36
  def field_label
@@ -44,8 +42,6 @@ module Blacklight
44
42
  #
45
43
  # @return [String]
46
44
  def label
47
- return @view_context.facet_display_value(@facet_field, @facet_item) unless @view_context.method(:facet_display_value).owner == Blacklight::FacetsHelperBehavior
48
-
49
45
  label_value = if facet_item.respond_to? :label
50
46
  facet_item.label
51
47
  else
@@ -62,7 +58,7 @@ module Blacklight
62
58
  localization_options = facet_config.date == true ? {} : facet_config.date
63
59
  I18n.l(Time.zone.parse(label_value), **localization_options)
64
60
  else
65
- label_value
61
+ label_value.to_s
66
62
  end
67
63
  end
68
64
 
@@ -92,9 +88,7 @@ module Blacklight
92
88
 
93
89
  # @private
94
90
  def remove_href(path = search_state)
95
- Deprecation.silence(Blacklight::SearchState) do
96
- view_context.search_action_path(path.remove_facet_params(facet_config.key, facet_item))
97
- end
91
+ view_context.search_action_path(path.filter(facet_config.key).remove(facet_item))
98
92
  end
99
93
 
100
94
  # @private
@@ -30,6 +30,7 @@ module Blacklight
30
30
  end
31
31
 
32
32
  attr_reader :view_context, :document, :field_config, :except_operations, :options
33
+
33
34
  delegate :key, :component, to: :field_config
34
35
 
35
36
  # @return [String]
@@ -1,47 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class IndexPresenter < DocumentPresenter
4
- ##
5
- # Render the document index heading. This is used when making a link to a
6
- # document, where we don't want any HTML markup added from the pipeline.
7
- #
8
- # @param [Symbol, Proc, String] field_or_string_or_proc Render the given field or evaluate the proc or render the given string
9
- # @param [Hash] opts
10
- def label(field_or_string_or_proc, opts = {})
11
- config = Configuration::NullField.new
12
- value = case field_or_string_or_proc
13
- when Symbol
14
- config = field_config(field_or_string_or_proc)
15
- field_presenter(config).values
16
- when Proc
17
- Deprecation.warn(self, "calling IndexPresenter.label with a Proc is deprecated. " \
18
- "First argument must be a symbol. This will be removed in Blacklight 8")
19
- field_or_string_or_proc.call(document, opts)
20
- when String
21
- Deprecation.warn(self, "calling IndexPresenter.label with a String is deprecated. " \
22
- "First argument must be a symbol. This will be removed in Blacklight 8")
23
- field_or_string_or_proc
24
- end
25
-
26
- value = document.id if value.blank?
27
- field_value(config, values: Array.wrap(value), except_operations: [Rendering::HelperMethod])
28
- end
29
-
30
- deprecation_deprecate label: 'Use #heading'
31
-
32
5
  def view_config
33
- @view_config ||= configuration.view_config(view_context.document_index_view_type, action_name: view_context.action_name)
34
- end
35
-
36
- private
37
-
38
- # @return [Hash<String,Configuration::Field>] all the fields for this index view
39
- def fields
40
- configuration.index_fields_for(display_type)
41
- end
42
-
43
- def field_config(field)
44
- configuration.index_fields.fetch(field) { Configuration::NullField.new(field) }
6
+ configuration.view_config(view_context.document_index_view_type)
45
7
  end
46
8
  end
47
9
  end
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class JsonPresenter
4
- include Blacklight::Facet
5
-
6
5
  # @param [Solr::Response] response raw solr response.
7
6
  # @param [Configuration] blacklight_config the configuration
8
7
  def initialize(response, blacklight_config)
@@ -12,13 +11,18 @@ module Blacklight
12
11
 
13
12
  attr_reader :blacklight_config
14
13
 
15
- delegate :documents, to: :@response
14
+ delegate :facet_field_names, :facet_configuration_for_field, to: :blacklight_config
15
+
16
+ def documents
17
+ @response.documents
18
+ end
16
19
 
17
20
  # @return [Array<Blacklight::Solr::Response::Facets::FacetField>]
18
21
  def search_facets
19
- Deprecation.silence(Blacklight::Facet) do
20
- facets_from_request(facet_field_names, @response).select { |display_facet| display_facet.items.present? }
21
- end
22
+ facet_field_names
23
+ .map { |field| @response.aggregations[facet_configuration_for_field(field).field] }
24
+ .compact
25
+ .select { |display_facet| display_facet.items.present? }
22
26
  end
23
27
 
24
28
  # extract the pagination info from the response object
@@ -3,7 +3,6 @@
3
3
  module Blacklight
4
4
  module Rendering
5
5
  class LinkToFacet < AbstractStep
6
- extend Deprecation
7
6
  def render
8
7
  return next_step(values) unless config.link_to_facet
9
8
 
@@ -31,10 +30,8 @@ module Blacklight
31
30
  context.search_action_path(facet_params(field, v))
32
31
  end
33
32
 
34
- def facet_params(field, v)
35
- Deprecation.silence(Blacklight::SearchState) do
36
- context.search_state.reset.add_facet_params(field, v)
37
- end
33
+ def facet_params(field, item)
34
+ context.search_state.reset.filter(field).add(item).params
38
35
  end
39
36
  end
40
37
  end
@@ -1,17 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class ShowPresenter < DocumentPresenter
4
5
  private
5
6
 
6
- # @return [Hash<String,Configuration::Field>]
7
- def fields
8
- configuration.show_fields_for(display_type)
9
- end
10
-
11
- def field_config(field)
12
- configuration.show_fields.fetch(field) { Configuration::NullField.new(field) }
13
- end
14
-
15
7
  def field_presenter_options
16
8
  { context: 'show' }
17
9
  end
@@ -72,7 +72,7 @@ module Blacklight
72
72
  end
73
73
 
74
74
  def thumbnail_value_from_document
75
- Array(thumbnail_field).lazy.map { |field| retrieve_values(field_config(field)).first }.reject(&:blank?).first
75
+ Array(thumbnail_field).lazy.map { |field| retrieve_values(field_config(field)).first }.compact_blank.first
76
76
  end
77
77
 
78
78
  def retrieve_values(field_config)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ # Extends the search Builders to add bookmarks
5
+ class BookmarksSearchBuilder < ::SearchBuilder
6
+ ##
7
+ # Filters the query to only include the bookmarked items
8
+ #
9
+ # @param [Hash] solr_parameters
10
+ #
11
+ # @return [void]
12
+ def bookmarked(solr_parameters)
13
+ solr_parameters[:fq] ||= []
14
+ bookmarks = @scope.context.fetch(:bookmarks)
15
+ return unless bookmarks
16
+
17
+ document_ids = bookmarks.collect { |b| b.document_id.to_s }
18
+ solr_parameters[:fq] += ["{!terms f=id}#{document_ids.join(',')}"]
19
+ end
20
+ self.default_processor_chain += [:bookmarked]
21
+ end
22
+ end
@@ -22,19 +22,17 @@ module Blacklight
22
22
 
23
23
  # @return [Array]
24
24
  def fetch
25
- if field_config.highlight
26
- value = retrieve_highlight
27
- end
28
- if value.blank?
29
- value = if field_config.accessor
30
- retieve_using_accessor
31
- elsif field_config.values
32
- retrieve_values
33
- else
34
- retrieve_simple
35
- end
36
- end
37
- Array.wrap(value)
25
+ Array.wrap(
26
+ if field_config.highlight
27
+ retrieve_highlight
28
+ elsif field_config.accessor
29
+ retieve_using_accessor
30
+ elsif field_config.values
31
+ retrieve_values
32
+ else
33
+ retrieve_simple
34
+ end
35
+ )
38
36
  end
39
37
 
40
38
  private
@@ -69,14 +67,7 @@ module Blacklight
69
67
  end
70
68
 
71
69
  def retrieve_values
72
- values_method = field_config.values
73
-
74
- if values_method.respond_to?(:arity) && values_method.arity.abs == 2
75
- Deprecation.warn(self, ":values parameter for field #{field_config.key} only accepts 2 arguments; should accept 3")
76
- values_method.call(field_config, document)
77
- else
78
- values_method.call(field_config, document, view_context)
79
- end
70
+ field_config.values.call(field_config, document, view_context)
80
71
  end
81
72
  end
82
73
  end