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
  # SearchService returns search results from the repository
3
4
  module Blacklight
4
5
  class SearchService
@@ -33,17 +34,17 @@ module Blacklight
33
34
  response = repository.search(builder)
34
35
 
35
36
  if response.grouped? && grouped_key_for_results
36
- [response.group(grouped_key_for_results), []]
37
+ response.group(grouped_key_for_results)
37
38
  elsif response.grouped? && response.grouped.length == 1
38
- [response.grouped.first, []]
39
+ response.grouped.first
39
40
  else
40
- [response, response.documents]
41
+ response
41
42
  end
42
43
  end
43
44
 
44
45
  # retrieve a document, given the doc id
45
46
  # @param [Array{#to_s},#to_s] id
46
- # @return [Blacklight::Solr::Response, Blacklight::SolrDocument] the solr response object and the first document
47
+ # @return [Blacklight::SolrDocument] the solr response object and the first document
47
48
  def fetch(id = nil, extra_controller_params = {})
48
49
  if id.is_a? Array
49
50
  fetch_many(id, extra_controller_params)
@@ -123,7 +124,7 @@ module Blacklight
123
124
 
124
125
  if index > 0
125
126
  solr_params[:start] = index - window # get one before
126
- solr_params[:rows] = 2 * window + 1 # and one after
127
+ solr_params[:rows] = (2 * window) + 1 # and one after
127
128
  else
128
129
  solr_params[:start] = 0 # there is no previous doc
129
130
  solr_params[:rows] = 2 * window # but there should be one after
@@ -146,22 +147,14 @@ module Blacklight
146
147
  .merge(blacklight_config.fetch_many_document_params)
147
148
  .merge(extra_controller_params)
148
149
 
149
- # find_many was introduced in Blacklight 8.4. Before that, we used the
150
- # regular search method (possibly with a find-many specific `qt` parameter).
151
- # In order to support Repository implementations that may not have a find_many,
152
- # we'll fall back to search if find_many isn't available.
153
- solr_response = if repository.respond_to?(:find_many)
154
- repository.find_many(query)
155
- else
156
- repository.search(query)
157
- end
158
-
159
- [solr_response, solr_response.documents]
150
+ solr_response = repository.search(query)
151
+
152
+ solr_response.documents
160
153
  end
161
154
 
162
155
  def fetch_one(id, extra_controller_params)
163
156
  solr_response = repository.find id, extra_controller_params
164
- [solr_response, solr_response.documents.first]
157
+ solr_response.documents.first
165
158
  end
166
159
  end
167
160
  end
@@ -16,10 +16,6 @@ module Blacklight
16
16
  new.cast(input)
17
17
  end
18
18
 
19
- def initialize(**kwargs)
20
- @kwargs = kwargs
21
- end
22
-
23
19
  def cast(input)
24
20
  if input.is_a?(::Array)
25
21
  input.first
@@ -69,19 +65,6 @@ module Blacklight
69
65
  end
70
66
  end
71
67
 
72
- class Time < Value
73
- def cast(input)
74
- value = super
75
- return if value.blank?
76
-
77
- begin
78
- ::Time.parse(value.to_s) # rubocop:disable Rails/TimeZone
79
- rescue ArgumentError
80
- Rails.logger&.info "Unable to parse time: #{value.inspect}"
81
- end
82
- end
83
- end
84
-
85
68
  class Boolean < Value
86
69
  def cast(input)
87
70
  ActiveModel::Type::Boolean.new.cast(super)
@@ -123,7 +106,6 @@ module Blacklight
123
106
  register :boolean, Boolean
124
107
  register :string, String
125
108
  register :date, Date
126
- register :time, Time
127
109
  register :array, Array
128
110
  register :json, JsonValue
129
111
  register :html, Html
@@ -1 +1,8 @@
1
- <%= link_to t('blacklight.bookmarks.clear.action_title'), clear_bookmarks_path, :method => :delete, :data => { :confirm => t('blacklight.bookmarks.clear.action_confirm') }, :class => 'clear-bookmarks btn btn-danger' %>
1
+ <%= link_to t('blacklight.bookmarks.clear.action_title'), clear_bookmarks_path,
2
+ method: :delete, # for rails-UJS
3
+ data: {
4
+ confirm: t('blacklight.bookmarks.clear.action_confirm'), # for rails-UJS
5
+ turbo_method: :delete,
6
+ turbo_confirm: t('blacklight.bookmarks.clear.action_confirm')
7
+ },
8
+ class: 'clear-bookmarks btn btn-danger' %>
@@ -1,12 +1,7 @@
1
- <% if render_show_doc_actions_method_from_blacklight? %>
2
- <%= render(Blacklight::Document::ActionsComponent.new(document: nil, tag: 'div', classes: "#{controller_name}Tools", link_classes: 'btn btn-outline-primary', actions: document_actions(document_list, options: { document: nil }), options: { document_list: @response.documents }, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h))) %>
3
- <% else %>
4
- <% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %>
5
- <ul class="<%= controller_name %>Tools nav nav-pills">
6
- <%= render_show_doc_actions document_list, document: nil, document_list: @response.documents, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h) do |config, inner| %>
7
- <li class="nav-item">
8
- <%= inner %>
9
- </li>
10
- <% end %>
11
- </ul>
12
- <% end %>
1
+ <%= render Blacklight::Document::ActionsComponent.new(document: nil,
2
+ tag: 'div',
3
+ classes: "#{controller_name}Tools",
4
+ link_classes: 'btn btn-outline-primary',
5
+ actions: document_actions(document_list, options: { document: nil }),
6
+ options: { document_list: @response.documents },
7
+ url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h)) %>
@@ -2,6 +2,5 @@
2
2
  url: search_action_url,
3
3
  classes: ['advanced', 'form-horizontal'],
4
4
  params: search_state.params_for_search.except(:qt),
5
- search_fields: Deprecation.silence(Blacklight::ConfigurationHelperBehavior) { search_fields },
6
5
  response: @response
7
6
  )) %>
@@ -1 +1 @@
1
- <%= render Blacklight::Document::BookmarkComponent.new(document: document) if current_or_guest_user %>
1
+ <%= render Blacklight::Document::BookmarkComponent.new(document: document, action: document_action_config) %>
@@ -1,5 +1,5 @@
1
1
  <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.with_title { t('blacklight.tools.citation') } %>
2
+ <% component.title { t('blacklight.tools.citation') } %>
3
3
 
4
4
  <%= render Blacklight::Document::CitationComponent.with_collection(@documents) if @documents.present? %>
5
5
  <% end %>
@@ -1,14 +1 @@
1
- <% if constraints_helpers_and_partials_from_blacklight? || blacklight_config&.view_config(document_index_view_type)&.constraints_component %>
2
- <%= render((blacklight_config&.view_config(document_index_view_type)&.constraints_component || Blacklight::ConstraintsComponent).new(search_state: convert_to_search_state(controller.params != params ? params : search_state))) %>
3
- <% else %>
4
- <% Deprecation.warn(Blacklight::RenderConstraintsHelperBehavior, 'Constraints helpers or partials were overridden; not using components') %>
5
- <% if Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) { query_has_constraints? } %>
6
- <div id="appliedParams" class="clearfix constraints-container">
7
- <h2 class="sr-only visually-hidden"><%= t('blacklight.search.search_constraints_header') %></h2>
8
-
9
- <%= render 'start_over' %>
10
- <span class="constraints-label sr-only visually-hidden"><%= t('blacklight.search.filters.title') %></span>
11
- <%= render_constraints(controller.params != params ? params : search_state) %>
12
- </div>
13
- <% end %>
14
- <% end %>
1
+ <%= render (blacklight_config&.view_config(document_index_view_type)&.constraints_component || Blacklight::ConstraintsComponent).new(search_state: search_state) %>
@@ -7,14 +7,12 @@ xml.entry do
7
7
  # updated is required, for now we'll just set it to now, sorry
8
8
  xml.updated Time.current.iso8601
9
9
 
10
- Deprecation.silence(Blacklight::UrlHelperBehavior) do
11
- xml.link "rel" => "alternate", "type" => "text/html", "href" => polymorphic_url(url_for_document(document))
12
- # add other doc-specific formats, atom only lets us have one per
13
- # content type, so the first one in the list wins.
14
- xml << presenter.link_rel_alternates(unique: true)
10
+ xml.link "rel" => "alternate", "type" => "text/html", "href" => polymorphic_url(search_state.url_for_document(document))
11
+ # add other doc-specific formats, atom only lets us have one per
12
+ # content type, so the first one in the list wins.
13
+ xml << presenter.link_rel_alternates(unique: true)
15
14
 
16
- xml.id polymorphic_url(url_for_document(document))
17
- end
15
+ xml.id polymorphic_url(search_state.url_for_document(document))
18
16
 
19
17
  if document.to_semantic_values.key? :author
20
18
  xml.author { xml.name(document.to_semantic_values[:author].first) }
@@ -22,13 +20,12 @@ xml.entry do
22
20
 
23
21
  with_format(:html) do
24
22
  xml.summary "type" => "html" do
25
- xml.text! render_document_partials(document,
26
- blacklight_config.view_config(:atom).summary_partials,
27
- document_counter: document_counter)
23
+ document_component = blacklight_config.view_config(:atom).summary_component
24
+ xml.text! render document_component.new(presenter: document_presenter(document), component: :div, show: true)
28
25
  end
29
26
  end
30
27
 
31
- #If they asked for a format, give it to them.
28
+ # If they asked for a format, give it to them.
32
29
  if (params["content_format"] &&
33
30
  document.export_formats[params["content_format"].to_sym])
34
31
 
@@ -40,14 +37,15 @@ xml.entry do
40
37
  # encode properly. See:
41
38
  # http://tools.ietf.org/html/rfc4287#section-4.1.3.3
42
39
  type = type.downcase
43
- if (type.downcase =~ %r{\+|/xml$})
40
+ case type.downcase
41
+ when %r{\+|/xml$}
44
42
  # xml, just put it right in
45
43
  content_element << data
46
- elsif (type.downcase =~ %r{text/})
44
+ when %r{text/}
47
45
  # text, escape
48
46
  content_element.text! data
49
47
  else
50
- #something else, base64 encode it
48
+ # something else, base64 encode it
51
49
  content_element << Base64.encode64(data)
52
50
  end
53
51
  end
@@ -1,7 +1,9 @@
1
1
  <% # container for a single doc -%>
2
2
  <% view_config = local_assigns[:view_config] || blacklight_config.view_config(document_index_view_type) %>
3
- <%= render (view_config.document_component || Blacklight::DocumentComponent).new(presenter: document_presenter(document), counter: document_counter_with_offset(document_counter)) do |component| %>
4
- <% component.public_send(view_config.document_component.blank? && view_config.partials.any? ? :with_body : :with_partial) do %>
5
- <%= render_document_partials document, view_config.partials, component: component, document_counter: document_counter %>
3
+ <%= render view_config.document_component.new(presenter: document_presenter(document), counter: document_counter_with_offset(document_counter)) do |component| %>
4
+ <% view_config.partials.each do |partial| %>
5
+ <% component.partial do %>
6
+ <%= render_document_partial document, partial, component: component, document_counter: document_counter %>
7
+ <% end %>
6
8
  <% end %>
7
9
  <% end %>
@@ -2,8 +2,6 @@
2
2
 
3
3
  xml.item do
4
4
  xml.title(document_presenter(document).heading || (document.to_semantic_values[:title].first if document.to_semantic_values.key?(:title)))
5
- Deprecation.silence(Blacklight::UrlHelperBehavior) do
6
- xml.link(polymorphic_url(url_for_document(document)))
7
- end
8
- xml.author( document.to_semantic_values[:author].first ) if document.to_semantic_values.key? :author
5
+ xml.link(polymorphic_url(search_state.url_for_document(document)))
6
+ xml.author(document.to_semantic_values[:author].first) if document.to_semantic_values.key? :author
9
7
  end
@@ -1,8 +1,8 @@
1
1
  <%= render(Blacklight::FacetFieldComponent.new(facet_field: facet_field_presenter(facet_field, nil))) do |component| %>
2
- <% component.with_label do %>
2
+ <% component.label do %>
3
3
  <%= facet_field_label(facet_field.key) %>
4
4
  <% end %>
5
- <% component.with_body do %>
5
+ <% component.body do %>
6
6
  <%= yield %>
7
7
  <% end %>
8
8
  <% end %>
@@ -1,4 +1,5 @@
1
- <% # container for facet groups -%>
2
- <% Deprecation.silence(Blacklight::Facet) { facet_group_names }.each do |groupname| %>
3
- <%= render 'facet_group', groupname: groupname %>
4
- <% end %>
1
+ <% # this partial is deprecated. catalog/index now renders the component %>
2
+ <% conf = blacklight_config.view_config(document_index_view_type) %>
3
+ <%= render conf.sidebar_component.new(blacklight_config: blacklight_config,
4
+ response: @response,
5
+ view_config: conf) %>
@@ -5,7 +5,7 @@
5
5
 
6
6
  <p>
7
7
  <%= link_to 'Read the Documentation', 'https://github.com/projectblacklight/blacklight/wiki', class: 'btn btn-primary' %>
8
- <%= link_to 'See Examples', 'http://projectblacklight.org', class: 'btn btn-light' %>
8
+ <%= link_to 'See Examples', 'http://projectblacklight.org', class: 'btn btn-secondary' %>
9
9
  </p>
10
10
  </div>
11
11
 
@@ -29,16 +29,4 @@
29
29
  </p>
30
30
  </div>
31
31
 
32
- <%# This is the same panel shown in the Rails welcome template %>
33
- <div id="about" class="card">
34
- <h2 class='card-header collapsed collapse-toggle' data-toggle="collapse" data-bs-toggle="collapse" data-bs-target="#about-content" data-target="#about-content"><a href="/rails/info/properties">About your application&rsquo;s environment</a></h2>
35
- <div id="about-content" class="card-body collapse"></div>
36
- </div>
37
-
38
- <script>
39
- Blacklight.onLoad(function() {
40
- $('#about .card-header').one('click', function() {
41
- $($(this).data('target')).load($(this).find('a').attr('href'));
42
- });
43
- });
44
- </script>
32
+ <p>Blacklight <%= Blacklight::VERSION %></p>
@@ -1 +1,10 @@
1
- <%= render Blacklight::Search::PerPageComponent.new(search_state: search_state, blacklight_config: blacklight_config, response: @response) %>
1
+ <% if show_sort_and_per_page? %>
2
+ <span class="sr-only visually-hidden"><%= t('blacklight.search.per_page.title') %></span>
3
+ <%= render(Blacklight::System::DropdownComponent.new(
4
+ param: :per_page,
5
+ choices: per_page_options_for_select,
6
+ id: 'per_page-dropdown',
7
+ search_state: search_state,
8
+ selected: current_per_page,
9
+ interpolation: :count)) %>
10
+ <% end %>
@@ -1,7 +1,7 @@
1
- <%= warn "#{__FILE__} is a deprecated partial." %>
1
+ <%= warn "#{__file__} is a deprecated partial." %>
2
2
  <%= render((blacklight_config&.view_config(document_index_view_type)&.search_bar_component || Blacklight::SearchBarComponent).new(
3
3
  url: search_action_url,
4
4
  advanced_search_url: search_action_url(action: 'advanced_search'),
5
5
  params: search_state.params_for_search.except(:qt),
6
- search_fields: Deprecation.silence(Blacklight::ConfigurationHelperBehavior) { search_fields },
6
+ presenter: presenter,
7
7
  autocomplete_path: suggest_index_catalog_path)) %>
@@ -1,2 +1 @@
1
- <%= render 'did_you_mean' %>
2
- <%= render 'sort_and_per_page' %>
1
+ <%= render blacklight_config.view_config(document_index_view_type).search_header_component.new %>
@@ -1,4 +1,4 @@
1
- <% @page_title = t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name) %>
1
+ <% @page_title = t('blacklight.search.page_title.title', constraints: render_search_to_page_title(search_state), application_name: application_name) %>
2
2
 
3
3
  <% content_for(:head) do -%>
4
4
  <%= render 'catalog/opensearch_response_metadata', response: @response %>
@@ -23,7 +23,7 @@
23
23
  <%- if @response.empty? %>
24
24
  <%= render "zero_results" %>
25
25
  <%- elsif render_grouped_response? %>
26
- <%= Deprecation.silence(Blacklight::RenderPartialsHelperBehavior) { render_grouped_document_index } %>
26
+ <%= render 'catalog/group' %>
27
27
  <%- else %>
28
28
  <%= render_document_index @response.documents %>
29
29
  <%- end %>
@@ -1 +1,5 @@
1
- <%= render 'facets' %>
1
+ <% # this partial is deprecated. catalog/index now renders the component %>
2
+ <% conf = blacklight_config.view_config(document_index_view_type) %>
3
+ <%= render conf.sidebar_component.new(blacklight_config: blacklight_config,
4
+ response: @response,
5
+ view_config: conf) %>
@@ -1,25 +1,20 @@
1
1
  <%= render(Blacklight::SearchContextComponent.new(search_context: @search_context, search_session: search_session)) if search_session['document_id'] == @document.id %>
2
2
 
3
- <% @page_title = t('blacklight.search.show.title', document_title: Deprecation.silence(Blacklight::BlacklightHelperBehavior) { document_show_html_title }, application_name: application_name).html_safe %>
3
+ <% @page_title = t('blacklight.search.show.title', document_title: document_presenter(@document).html_title, application_name: application_name).html_safe %>
4
4
  <% content_for(:head) { render_link_rel_alternates } %>
5
5
 
6
- <%= render (blacklight_config.view_config(:show).document_component || Blacklight::DocumentComponent).new(presenter: document_presenter(@document), component: :div, title_component: :h1, show: true) do |component| %>
7
- <% component.with_footer do %>
6
+ <%= render (blacklight_config.view_config(:show).document_component).new(presenter: document_presenter(@document), component: :div, show: true) do |component| %>
7
+ <% component.title(as: 'h1', classes: '', link_to_document: false, actions: false) %>
8
+ <% component.footer do %>
8
9
  <% if @document.respond_to?(:export_as_openurl_ctx_kev) %>
9
- <!--
10
- // COinS, for Zotero among others.
11
- // This document_partial_name(@document) business is not quite right,
12
- // but has been there for a while.
13
- -->
14
- <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(Deprecation.silence(Blacklight::RenderPartialsHelperBehavior) { document_partial_name(@document) }) %>"></span>
10
+ <!-- COinS, for Zotero among others. -->
11
+ <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(document_presenter(@document).display_type) %>"></span>
15
12
  <% end %>
16
- <% end %>
13
+ <% end %>
17
14
 
18
- <%# Use :body for complete backwards compatibility (overriding the component body markup),
19
- but if the app explicitly opted-in to components, make the partials data available as :partials to ease migrations pain %>
20
- <% component.public_send(blacklight_config.view_config(:show).document_component.blank? && blacklight_config.view_config(:show).partials.any? ? :with_body : :with_partial) do %>
21
- <div id="doc_<%= @document.id.to_s.parameterize %>">
22
- <%= render_document_partials @document, blacklight_config.view_config(:show).partials, component: component %>
23
- </div>
15
+ <% blacklight_config.view_config(:show).partials.each do |partial| %>
16
+ <% component.partial do %>
17
+ <%= render_document_partial @document, partial, component: component %>
18
+ <% end %>
24
19
  <% end %>
25
20
  <% end %>
@@ -1,2 +1,2 @@
1
- <%= render 'show_tools', document: document %>
2
- <%= render(Blacklight::Document::MoreLikeThisComponent.new(document: document)) %>
1
+ <% presenter = document_presenter(document) %>
2
+ <%= render presenter.view_config.sidebar_component.new(presenter: presenter) %>
@@ -1,20 +1,14 @@
1
- <% document = @document if local_assigns[:document].nil? %>
2
- <% if show_doc_actions? document %>
1
+ <% if show_doc_actions? %>
3
2
  <div class="card show-tools">
4
3
  <div class="card-header">
5
4
  <h2 class="mb-0 h6"><%= t('blacklight.tools.title') %></h2>
6
5
  </div>
7
- <% if render_show_doc_actions_method_from_blacklight? %>
8
- <%= render(Blacklight::Document::ActionsComponent.new(document: document, tag: 'ul', classes: 'list-group list-group-flush', wrapping_tag: 'li', wrapping_classes: 'list-group-item', actions: document_actions(document), url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h))) %>
9
- <% else %>
10
- <% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %>
11
- <ul class="list-group list-group-flush">
12
- <%= render_show_doc_actions document do |config, inner| %>
13
- <li class="list-group-item <%= config.key %>">
14
- <%= inner %>
15
- </li>
16
- <% end %>
17
- </ul>
18
- <% end %>
6
+ <%= render Blacklight::Document::ActionsComponent.new(document: document,
7
+ tag: 'ul',
8
+ classes: 'list-group list-group-flush',
9
+ wrapping_tag: 'li',
10
+ wrapping_classes: 'list-group-item list-group-item-action',
11
+ actions: document_actions(document),
12
+ url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h)) %>
19
13
  </div>
20
14
  <% end %>
@@ -2,4 +2,4 @@
2
2
  response: @response,
3
3
  views: document_index_view_controls,
4
4
  search_state: search_state,
5
- selected: document_index_view_type)) if show_sort_and_per_page? -%>
5
+ selected: document_index_view_type)) -%>
@@ -1,7 +1,7 @@
1
1
  <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.with_title { t('blacklight.email.form.title') } %>
2
+ <% component.title { t('blacklight.email.form.title') } %>
3
3
 
4
- <% component.with_body do %>
4
+ <% component.body do %>
5
5
  <%= render 'email_form' %>
6
6
  <% end %>
7
7
  <% end %>
@@ -1,6 +1,5 @@
1
- <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.title { t('blacklight.email.form.title') } %>
3
-
4
- <%= render partial: '/shared/flash_msg' %>
5
- <span data-blacklight-modal="close"></span>
6
- <% end %>
1
+ <turbo-stream action="append" target="main-flashes">
2
+ <template>
3
+ <%= render '/shared/flash_msg' %>
4
+ </template>
5
+ </turbo-stream>
@@ -1,20 +1,22 @@
1
1
  <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.with_prefix do %>
2
+ <% component.prefix do %>
3
3
  <div class="facet-pagination top row justify-content-between">
4
4
  <%= render :partial=>'facet_pagination' %>
5
5
  </div>
6
6
  <% end %>
7
7
 
8
- <% component.with_title { facet_field_label(@facet.key) } %>
8
+ <% component.title { facet_field_label(@facet.key) } %>
9
9
 
10
10
  <%= render partial: 'facet_index_navigation' if @facet.index_range && @display_facet.index? %>
11
11
 
12
12
  <div class="facet-extended-list">
13
- <%= render_facet_limit(@display_facet, layout: false) %>
13
+ <%= render Blacklight::FacetComponent.new(display_facet: @display_facet,
14
+ blacklight_config: blacklight_config,
15
+ layout: false) %>
14
16
  </div>
15
17
 
16
- <% component.with_footer do %>
17
- <div class="facet-pagination bottom row justify-content-between">
18
+ <% component.footer do %>
19
+ <div class="facet-pagination bottom flex-row justify-content-between">
18
20
  <%= render :partial=>'facet_pagination' %>
19
21
  </div>
20
22
  <% end %>
@@ -6,7 +6,7 @@ xml.instruct!(:xml, encoding: "UTF-8")
6
6
 
7
7
  xml.feed("xmlns" => "http://www.w3.org/2005/Atom",
8
8
  "xmlns:opensearch" => "http://a9.com/-/spec/opensearch/1.1/") do
9
- xml.title t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name)
9
+ xml.title t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name)
10
10
  # an author is required, so we'll just use the app name
11
11
  xml.author { xml.name application_name }
12
12
 
@@ -16,25 +16,23 @@ xml.feed("xmlns" => "http://www.w3.org/2005/Atom",
16
16
 
17
17
  # Navigational and context links
18
18
 
19
- xml.link( "rel" => "next",
20
- "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.next_page.to_s))
21
- ) if @response.next_page
19
+ xml.link("rel" => "next",
20
+ "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.next_page.to_s))) if @response.next_page
22
21
 
23
- xml.link( "rel" => "previous",
24
- "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s))
25
- ) if @response.prev_page
22
+ xml.link("rel" => "previous",
23
+ "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s))) if @response.prev_page
26
24
 
27
- xml.link( "rel" => "first",
28
- "href" => url_for(search_state.to_h.merge(only_path: false, page: "1")))
25
+ xml.link("rel" => "first",
26
+ "href" => url_for(search_state.to_h.merge(only_path: false, page: "1")))
29
27
 
30
- xml.link( "rel" => "last",
31
- "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.total_pages.to_s)))
28
+ xml.link("rel" => "last",
29
+ "href" => url_for(search_state.to_h.merge(only_path: false, page: @response.total_pages.to_s)))
32
30
 
33
31
  # "search" doesn't seem to actually be legal, but is very common, and
34
32
  # used as an example in opensearch docs
35
- xml.link( "rel" => "search",
36
- "type" => "application/opensearchdescription+xml",
37
- "href" => url_for(controller: 'catalog',action: 'opensearch', format: 'xml', only_path: false))
33
+ xml.link("rel" => "search",
34
+ "type" => "application/opensearchdescription+xml",
35
+ "href" => url_for(controller: 'catalog', action: 'opensearch', format: 'xml', only_path: false))
38
36
 
39
37
  # opensearch response elements
40
38
  xml.opensearch :totalResults, @response.total.to_s
@@ -1,5 +1,8 @@
1
1
  <% content_for(:sidebar) do %>
2
- <%= render 'search_sidebar' %>
2
+ <% conf = blacklight_config.view_config(document_index_view_type) %>
3
+ <%= render conf.sidebar_component.new(blacklight_config: blacklight_config,
4
+ response: @response,
5
+ view_config: conf) %>
3
6
  <% end %>
4
7
 
5
8
  <% unless has_search_parameters? %>
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  json.links do
3
4
  json.self url_for(search_state.to_h.merge(only_path: false))
4
5
  json.prev url_for(search_state.to_h.merge(only_path: false, page: @response.prev_page.to_s)) if @response.prev_page
@@ -13,7 +14,7 @@ end
13
14
  json.data do
14
15
  json.array! @presenter.documents do |document|
15
16
  doc_presenter = document_presenter(document)
16
- document_url = Deprecation.silence(Blacklight::UrlHelperBehavior) { polymorphic_url(url_for_document(document)) }
17
+ document_url = polymorphic_url(search_state.url_for_document(document))
17
18
  json.id document.id
18
19
  json.type doc_presenter.display_type.first
19
20
  json.attributes do
@@ -51,14 +52,10 @@ json.included do
51
52
  json.hits item.hits
52
53
  end
53
54
  json.links do
54
- Deprecation.silence(Blacklight::FacetsHelperBehavior) do
55
- if facet_in_params?(facet.name, item.value)
56
- Deprecation.silence(Blacklight::SearchState) do
57
- json.remove search_action_path(search_state.remove_facet_params(facet.name, item.value))
58
- end
59
- else
60
- json.self path_for_facet(facet.name, item.value, only_path: false)
61
- end
55
+ if search_state.filter(facet_config).include?(facet_value_for_facet_item(item.value))
56
+ json.remove search_action_path(search_state.filter(facet.name).remove(item.value))
57
+ else
58
+ json.self facet_item_presenter(facet_config, item.value, facet.name).href(only_path: false)
62
59
  end
63
60
  end
64
61
  end
@@ -69,16 +66,19 @@ json.included do
69
66
  end
70
67
  end
71
68
 
72
- Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
73
- json.array! search_fields do |(label, key)|
74
- json.type 'search_field'
75
- json.id key
76
- json.attributes do
77
- json.label label
78
- end
79
- json.links do
80
- json.self url_for(search_state.to_h.merge(search_field: key, only_path: false))
81
- end
69
+ search_fields = blacklight_config.search_fields
70
+ .values
71
+ .select { |field_def| should_render_field?(field_def) }
72
+ .collect { |field_def| [label_for_search_field(field_def.key), field_def.key] }
73
+
74
+ json.array! search_fields do |(label, key)|
75
+ json.type 'search_field'
76
+ json.id key
77
+ json.attributes do
78
+ json.label label
79
+ end
80
+ json.links do
81
+ json.self url_for(search_state.to_h.merge(search_field: key, only_path: false))
82
82
  end
83
83
  end
84
84