blacklight 7.43.1 → 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 (432) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +244 -15
  5. data/.rubocop_todo.yml +137 -429
  6. data/.solr_wrapper.yml +1 -3
  7. data/Gemfile +11 -6
  8. data/README.md +11 -3
  9. data/VERSION +1 -1
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js +162 -374
  11. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  12. data/app/assets/javascripts/blacklight/blacklight.js +374 -488
  13. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  14. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  15. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  16. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  17. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  18. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  19. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  20. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  21. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  22. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  23. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  24. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  25. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  26. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  27. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  28. data/app/builders/blacklight/action_builder.rb +18 -9
  29. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  30. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  31. data/app/components/blacklight/constraints_component.rb +27 -37
  32. data/app/components/blacklight/document/action_component.rb +12 -10
  33. data/app/components/blacklight/document/actions_component.rb +2 -2
  34. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  35. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  36. data/app/components/blacklight/document/citation_component.rb +5 -3
  37. data/app/components/blacklight/document/group_component.rb +7 -3
  38. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  39. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  40. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  41. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  42. data/app/components/blacklight/document_component.html.erb +1 -1
  43. data/app/components/blacklight/document_component.rb +16 -78
  44. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  45. data/app/components/blacklight/document_metadata_component.rb +5 -10
  46. data/app/components/blacklight/facet_component.rb +3 -3
  47. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  48. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  49. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  50. data/app/components/blacklight/facet_field_component.rb +9 -2
  51. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  52. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  53. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  54. data/app/components/blacklight/facet_item_component.rb +1 -43
  55. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  56. data/app/components/blacklight/header_component.rb +1 -1
  57. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  58. data/app/components/blacklight/icons/icon_component.rb +4 -9
  59. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  60. data/app/components/blacklight/icons/list_component.rb +16 -0
  61. data/app/components/blacklight/icons/search_component.rb +16 -0
  62. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  63. data/app/components/blacklight/metadata_field_component.rb +24 -8
  64. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  65. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  66. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  67. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  68. data/app/components/blacklight/response/pagination_component.rb +2 -11
  69. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  70. data/app/components/blacklight/response/sort_component.rb +1 -16
  71. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  72. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  73. data/app/components/blacklight/response/view_type_component.rb +4 -6
  74. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  75. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  76. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  77. data/app/components/blacklight/search_bar_component.rb +2 -16
  78. data/app/components/blacklight/search_button_component.rb +3 -3
  79. data/app/components/blacklight/search_context_component.rb +43 -10
  80. data/app/components/blacklight/search_header_component.html.erb +2 -0
  81. data/app/components/blacklight/search_header_component.rb +6 -0
  82. data/app/components/blacklight/start_over_button_component.rb +5 -3
  83. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  84. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  85. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  86. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  87. data/app/components/blacklight/system/modal_component.rb +1 -3
  88. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  89. data/app/components/blacklight/top_navbar_component.rb +0 -4
  90. data/app/controllers/bookmarks_controller.rb +1 -0
  91. data/app/controllers/catalog_controller.rb +1 -0
  92. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  93. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  94. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  95. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  96. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  97. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  98. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  99. data/app/controllers/search_history_controller.rb +1 -0
  100. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  101. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  102. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  103. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  104. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  105. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  106. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  107. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  108. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  109. data/app/helpers/blacklight_helper.rb +1 -0
  110. data/app/helpers/catalog_helper.rb +1 -0
  111. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  112. data/app/javascript/blacklight/button_focus.js +12 -10
  113. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  114. data/app/javascript/blacklight/core.js +5 -7
  115. data/app/javascript/blacklight/index.js +13 -0
  116. data/app/javascript/blacklight/modal.js +99 -164
  117. data/app/javascript/blacklight/modalForm.js +60 -0
  118. data/app/javascript/blacklight/search_context.js +46 -54
  119. data/app/models/blacklight/facet_paginator.rb +3 -2
  120. data/app/models/blacklight/icon.rb +4 -2
  121. data/app/models/bookmark.rb +0 -2
  122. data/app/models/concerns/blacklight/configurable.rb +5 -4
  123. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  124. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  125. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  126. data/app/models/concerns/blacklight/document/email.rb +1 -0
  127. data/app/models/concerns/blacklight/document/export.rb +2 -1
  128. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  129. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  130. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  131. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  132. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  133. data/app/models/concerns/blacklight/user.rb +17 -8
  134. data/app/models/record_mailer.rb +13 -12
  135. data/app/models/search.rb +1 -7
  136. data/app/models/solr_document.rb +1 -0
  137. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  138. data/app/presenters/blacklight/document_presenter.rb +23 -50
  139. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  140. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  141. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  142. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  143. data/app/presenters/blacklight/field_presenter.rb +1 -0
  144. data/app/presenters/blacklight/index_presenter.rb +2 -40
  145. data/app/presenters/blacklight/json_presenter.rb +10 -6
  146. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  147. data/app/presenters/blacklight/show_presenter.rb +1 -9
  148. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  149. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  150. data/app/services/blacklight/field_retriever.rb +12 -21
  151. data/app/services/blacklight/search_service.rb +10 -17
  152. data/app/values/blacklight/types.rb +0 -18
  153. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  154. data/app/views/bookmarks/_tools.html.erb +7 -12
  155. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  156. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  157. data/app/views/catalog/_citation.html.erb +1 -1
  158. data/app/views/catalog/_constraints.html.erb +1 -14
  159. data/app/views/catalog/_document.atom.builder +12 -14
  160. data/app/views/catalog/_document.html.erb +5 -3
  161. data/app/views/catalog/_document.rss.builder +2 -4
  162. data/app/views/catalog/_facet_layout.html.erb +2 -2
  163. data/app/views/catalog/_facets.html.erb +5 -4
  164. data/app/views/catalog/_home_text.html.erb +2 -14
  165. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  166. data/app/views/catalog/_search_form.html.erb +2 -2
  167. data/app/views/catalog/_search_header.html.erb +1 -2
  168. data/app/views/catalog/_search_results.html.erb +2 -2
  169. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  170. data/app/views/catalog/_show_main_content.html.erb +11 -16
  171. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  172. data/app/views/catalog/_show_tools.html.erb +8 -14
  173. data/app/views/catalog/_view_type_group.html.erb +1 -1
  174. data/app/views/catalog/email.html.erb +2 -2
  175. data/app/views/catalog/email_success.html.erb +5 -6
  176. data/app/views/catalog/facet.html.erb +7 -5
  177. data/app/views/catalog/index.atom.builder +12 -14
  178. data/app/views/catalog/index.html.erb +4 -1
  179. data/app/views/catalog/index.json.jbuilder +19 -19
  180. data/app/views/catalog/index.rss.builder +1 -1
  181. data/app/views/catalog/opensearch.xml.builder +1 -1
  182. data/app/views/catalog/sms.html.erb +2 -2
  183. data/app/views/catalog/sms_success.html.erb +5 -6
  184. data/app/views/catalog/suggest.html.erb +3 -0
  185. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  186. data/app/views/layouts/blacklight/base.html.erb +13 -2
  187. data/app/views/search_history/index.html.erb +6 -2
  188. data/app/views/shared/_flash_messages.html.erb +1 -1
  189. data/app/views/shared/_modal.html.erb +3 -3
  190. data/blacklight.gemspec +7 -13
  191. data/config/importmap.rb +1 -1
  192. data/config/locales/blacklight.ar.yml +0 -1
  193. data/config/locales/blacklight.ca.yml +0 -1
  194. data/config/locales/blacklight.de.yml +0 -1
  195. data/config/locales/blacklight.en.yml +0 -2
  196. data/config/locales/blacklight.es.yml +0 -1
  197. data/config/locales/blacklight.fr.yml +0 -1
  198. data/config/locales/blacklight.hu.yml +0 -1
  199. data/config/locales/blacklight.it.yml +0 -1
  200. data/config/locales/blacklight.nl.yml +0 -1
  201. data/config/locales/blacklight.pt-BR.yml +0 -1
  202. data/config/locales/blacklight.sq.yml +0 -1
  203. data/config/locales/blacklight.zh.yml +0 -1
  204. data/config/routes.rb +3 -2
  205. data/db/migrate/20140202020201_create_searches.rb +1 -0
  206. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  207. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  208. data/docker-compose.yml +3 -3
  209. data/lib/blacklight/abstract_repository.rb +1 -8
  210. data/lib/blacklight/component.rb +47 -10
  211. data/lib/blacklight/configuration/context.rb +4 -4
  212. data/lib/blacklight/configuration/display_field.rb +7 -9
  213. data/lib/blacklight/configuration/facet_field.rb +17 -11
  214. data/lib/blacklight/configuration/field.rb +7 -6
  215. data/lib/blacklight/configuration/fields.rb +12 -15
  216. data/lib/blacklight/configuration/index_field.rb +1 -0
  217. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  218. data/lib/blacklight/configuration/search_field.rb +1 -0
  219. data/lib/blacklight/configuration/show_field.rb +1 -0
  220. data/lib/blacklight/configuration/sort_field.rb +3 -2
  221. data/lib/blacklight/configuration/tool_config.rb +1 -0
  222. data/lib/blacklight/configuration/view_config.rb +14 -10
  223. data/lib/blacklight/configuration.rb +310 -365
  224. data/lib/blacklight/engine.rb +8 -38
  225. data/lib/blacklight/exceptions.rb +2 -2
  226. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  227. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  228. data/lib/blacklight/parameters.rb +7 -21
  229. data/lib/blacklight/routes/exportable.rb +1 -0
  230. data/lib/blacklight/routes/searchable.rb +2 -1
  231. data/lib/blacklight/routes.rb +1 -0
  232. data/lib/blacklight/runtime_registry.rb +0 -24
  233. data/lib/blacklight/search_builder.rb +10 -10
  234. data/lib/blacklight/search_state/filter_field.rb +8 -25
  235. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  236. data/lib/blacklight/search_state.rb +23 -79
  237. data/lib/blacklight/solr/document.rb +1 -0
  238. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  239. data/lib/blacklight/solr/repository.rb +14 -39
  240. data/lib/blacklight/solr/request.rb +1 -0
  241. data/lib/blacklight/solr/response/facets.rb +21 -5
  242. data/lib/blacklight/solr/response/group.rb +1 -0
  243. data/lib/blacklight/solr/response/group_response.rb +1 -0
  244. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  245. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  246. data/lib/blacklight/solr/response/params.rb +5 -4
  247. data/lib/blacklight/solr/response/response.rb +1 -0
  248. data/lib/blacklight/solr/response/spelling.rb +1 -0
  249. data/lib/blacklight/solr/response.rb +16 -3
  250. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  251. data/lib/blacklight/solr.rb +7 -0
  252. data/lib/blacklight/version.rb +1 -0
  253. data/lib/blacklight.rb +26 -14
  254. data/lib/generators/blacklight/assets/importmap_generator.rb +8 -9
  255. data/lib/generators/blacklight/assets/propshaft_generator.rb +2 -11
  256. data/lib/generators/blacklight/assets/sprockets_generator.rb +17 -51
  257. data/lib/generators/blacklight/assets_generator.rb +11 -7
  258. data/lib/generators/blacklight/controller_generator.rb +4 -3
  259. data/lib/generators/blacklight/document_generator.rb +1 -0
  260. data/lib/generators/blacklight/install_generator.rb +3 -5
  261. data/lib/generators/blacklight/models_generator.rb +1 -0
  262. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  263. data/lib/generators/blacklight/solr_generator.rb +1 -1
  264. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  265. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +6 -71
  266. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  267. data/lib/generators/blacklight/user_generator.rb +7 -9
  268. data/lib/railties/blacklight.rake +6 -7
  269. data/package.json +10 -13
  270. data/rollup.config.js +27 -0
  271. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  272. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  273. data/spec/components/blacklight/document_component_spec.rb +22 -131
  274. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  275. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  276. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  277. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  278. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  279. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  280. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  281. data/spec/controllers/application_controller_spec.rb +0 -23
  282. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  283. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  284. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  285. data/spec/controllers/catalog_controller_spec.rb +13 -135
  286. data/spec/features/advanced_search_spec.rb +0 -56
  287. data/spec/features/autocomplete_spec.rb +1 -1
  288. data/spec/features/axe_spec.rb +1 -6
  289. data/spec/features/bookmarks_spec.rb +1 -1
  290. data/spec/features/facets_spec.rb +6 -4
  291. data/spec/features/search_context_spec.rb +5 -11
  292. data/spec/features/search_results_spec.rb +0 -33
  293. data/spec/features/sitelinks_search_box.rb +13 -0
  294. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  295. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -386
  296. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  297. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  298. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  299. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  300. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  301. data/spec/helpers/catalog_helper_spec.rb +7 -118
  302. data/spec/i18n_spec.rb +1 -0
  303. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  304. data/spec/lib/blacklight/component_spec.rb +27 -32
  305. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  306. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  307. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  308. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  309. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  310. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  311. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  312. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  313. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  314. data/spec/models/blacklight/configuration_spec.rb +17 -51
  315. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  316. data/spec/models/blacklight/document/dublin_core_spec.rb +2 -2
  317. data/spec/models/blacklight/icon_spec.rb +31 -15
  318. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  319. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  320. data/spec/models/blacklight/solr/repository_spec.rb +0 -114
  321. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  322. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  323. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  324. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  325. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  326. data/spec/models/blacklight/user_spec.rb +22 -0
  327. data/spec/models/solr_document_spec.rb +3 -9
  328. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  329. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  330. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  331. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  333. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  334. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  335. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  336. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  337. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  338. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  339. data/spec/requests/load_suggestions_spec.rb +16 -0
  340. data/spec/routing/catalog_routing_spec.rb +2 -1
  341. data/spec/services/blacklight/search_service_spec.rb +39 -76
  342. data/spec/spec_helper.rb +8 -9
  343. data/spec/support/controller_level_helpers.rb +1 -2
  344. data/spec/support/features/search_helpers.rb +39 -0
  345. data/spec/support/features/session_helpers.rb +1 -0
  346. data/spec/support/features.rb +3 -0
  347. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  348. data/spec/test_app_templates/Gemfile.extra +1 -0
  349. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -1
  350. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  351. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  352. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  353. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  354. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  355. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  356. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  357. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  358. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  359. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  360. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  361. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  362. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  363. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  364. data/tasks/blacklight.rake +11 -9
  365. data/template.demo.rb +7 -7
  366. metadata +68 -219
  367. data/.babelrc +0 -11
  368. data/.github/matrix.json +0 -71
  369. data/.github/workflows/build.yml +0 -16
  370. data/.github/workflows/lint.yml +0 -23
  371. data/.github/workflows/main.yml +0 -23
  372. data/.github/workflows/test.yml +0 -52
  373. data/app/assets/images/blacklight/list.svg +0 -1
  374. data/app/assets/images/blacklight/search.svg +0 -1
  375. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  376. data/app/components/blacklight/content_areas_shim.rb +0 -13
  377. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  378. data/app/components/blacklight/search/per_page_component.rb +0 -50
  379. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  380. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  381. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  382. data/app/controllers/concerns/blacklight/base.rb +0 -12
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  393. data/app/views/catalog/_constraints_element.html.erb +0 -14
  394. data/app/views/catalog/_document_action.html.erb +0 -5
  395. data/app/views/catalog/_facet_group.html.erb +0 -5
  396. data/app/views/catalog/_facet_limit.html.erb +0 -3
  397. data/app/views/catalog/_index.html.erb +0 -1
  398. data/app/views/catalog/_index_header.html.erb +0 -22
  399. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  400. data/app/views/catalog/_show.html.erb +0 -6
  401. data/app/views/catalog/_show_header.html.erb +0 -2
  402. data/app/views/catalog/_thumbnail.html.erb +0 -1
  403. data/lib/blacklight/controller_runtime.rb +0 -42
  404. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  405. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  406. data/lib/blacklight/log_subscriber.rb +0 -25
  407. data/spec/components/blacklight/header_component_spec.rb +0 -20
  408. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  409. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  410. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  411. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  412. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  413. data/spec/features/citation_spec.rb +0 -10
  414. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  415. data/spec/features/sms_spec.rb +0 -12
  416. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  417. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  418. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  419. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  420. data/spec/lib/blacklight/engine_spec.rb +0 -41
  421. data/spec/lib/blacklight/runtime_registry_spec.rb +0 -46
  422. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  423. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  424. data/spec/support/view_component_test_helpers.rb +0 -35
  425. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  426. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  427. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  428. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  429. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  430. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  431. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  432. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -27,19 +27,28 @@ module Blacklight
27
27
  validator = opts.fetch(:validator, nil).inspect
28
28
  klass.class_eval <<EORUBY, __FILE__, __LINE__ + 1
29
29
  def #{name}
30
- @response, @documents = action_documents
30
+ @documents = action_documents
31
31
 
32
- if request.post? && #{callback} &&
33
- (#{validator}.blank? || send(#{validator}))
32
+ if request.post? && #{callback}
33
+ if #{validator}.blank? || send(#{validator})
34
34
 
35
- send(#{callback}, @documents)
35
+ send(#{callback}, @documents)
36
36
 
37
- flash.now[:success] ||= I18n.t("blacklight.#{name}.success", default: nil)
37
+ flash[:success] ||= I18n.t("blacklight.#{name}.success", default: nil)
38
38
 
39
- respond_to do |format|
40
- format.html do
41
- return render "#{name}_success" if request.xhr?
42
- redirect_to action_success_redirect_path
39
+ respond_to do |format|
40
+ format.html do
41
+ return render "#{name}_success", layout: false if request.xhr?
42
+ redirect_to action_success_redirect_path
43
+ end
44
+ end
45
+ else
46
+ # Not valid
47
+ respond_to do |format|
48
+ format.html do
49
+ return render layout: false, status: :unprocessable_entity if request.xhr?
50
+ # Otherwise draw the full page
51
+ end
43
52
  end
44
53
  end
45
54
  else
@@ -8,7 +8,7 @@
8
8
  <% end %>
9
9
 
10
10
  <%= form_tag @url, method: @method, class: @classes.join(' '), role: 'search', 'aria-label' => t('blacklight.search.form.submit') do %>
11
- <%= render_hash_as_hidden_fields(@params) %>
11
+ <%= render Blacklight::HiddenSearchStateComponent.new(params: @params) %>
12
12
 
13
13
  <div class="input-criteria">
14
14
  <div class="query-criteria mb-4">
@@ -40,8 +40,8 @@
40
40
 
41
41
  <% if sort_fields_select %>
42
42
  <div class="form-group row mb-4">
43
- <%= content_tag :h2, t('blacklight.advanced_search.form.sort_label'), id: 'advanced-search-sort-label', class: 'col-md-3 text-md-right' %>
44
- <div class="col-md-9">
43
+ <%= content_tag :h2, t('blacklight.advanced_search.form.sort_label'), class: 'col-md-3 col-form-label text-md-right' %>
44
+ <div class="col">
45
45
  <%= sort_fields_select %>
46
46
  </div>
47
47
  </div>
@@ -2,13 +2,11 @@
2
2
 
3
3
  module Blacklight
4
4
  class AdvancedSearchFormComponent < SearchBarComponent
5
- include Blacklight::ContentAreasShim
6
-
7
5
  renders_many :constraints
8
6
  renders_many :search_field_controls
9
7
  renders_many :search_filter_controls, (lambda do |config:, display_facet:, presenter: nil, component: nil, **kwargs|
10
- presenter ||= (config.presenter || Blacklight::FacetFieldPresenter).new(config, display_facet, helpers)
11
- component = component || config.advanced_search_component || Blacklight::FacetFieldCheckboxesComponent
8
+ presenter ||= config.presenter.new(config, display_facet, helpers)
9
+ component ||= config.advanced_search_component
12
10
 
13
11
  component.new(facet_field: presenter, **kwargs)
14
12
  end)
@@ -26,23 +24,23 @@ module Blacklight
26
24
 
27
25
  def default_operator_menu
28
26
  options_with_labels = [:must, :should].index_by { |op| t(op, scope: 'blacklight.advanced_search.op') }
29
- label_tag(:op, t('blacklight.advanced_search.op.label'), class: 'sr-only visually-hidden') + select_tag(:op, options_for_select(options_with_labels, params[:op]), class: 'input-small')
27
+ select_tag(:op, options_for_select(options_with_labels, params[:op]), class: 'input-small')
30
28
  end
31
29
 
32
30
  def sort_fields_select
33
31
  options = sort_fields.values.map { |field_config| [helpers.sort_field_label(field_config.key), field_config.key] }
34
32
  return unless options.any?
35
33
 
36
- select_tag(:sort, options_for_select(options, params[:sort]), class: "form-select custom-select sort-select w-auto", aria: { labelledby: 'advanced-search-sort-label' })
34
+ select_tag(:sort, options_for_select(options, params[:sort]), class: "form-select custom-select sort-select w-auto")
37
35
  end
38
36
 
39
37
  private
40
38
 
41
39
  def initialize_search_field_controls
42
40
  search_fields.values.each.with_index do |field, i|
43
- with_search_field_control do
41
+ search_field_control do
44
42
  fields_for('clause[]', i, include_id: false) do |f|
45
- content_tag(:div, class: 'form-group advanced-search-field row') do
43
+ content_tag(:div, class: 'form-group advanced-search-field row mb-3') do
46
44
  f.label(:query, field.display_label('search'), class: "col-sm-3 col-form-label text-md-right") +
47
45
  content_tag(:div, class: 'col-sm-9') do
48
46
  f.hidden_field(:field, value: field.key) +
@@ -59,7 +57,7 @@ module Blacklight
59
57
 
60
58
  fields.each do |_k, config|
61
59
  display_facet = @response.aggregations[config.field]
62
- with_search_filter_control(config: config, display_facet: display_facet)
60
+ search_filter_control(config: config, display_facet: display_facet)
63
61
  end
64
62
  end
65
63
 
@@ -72,7 +70,7 @@ module Blacklight
72
70
 
73
71
  return if constraints_text.blank?
74
72
 
75
- with_constraint do
73
+ constraint do
76
74
  constraints_text
77
75
  end
78
76
  end
@@ -2,8 +2,6 @@
2
2
 
3
3
  module Blacklight
4
4
  class ConstraintsComponent < Blacklight::Component
5
- include Blacklight::ContentAreasShim
6
-
7
5
  renders_many :query_constraints_area
8
6
  renders_many :facet_constraints_area
9
7
  renders_many :additional_constraints
@@ -42,60 +40,52 @@ module Blacklight
42
40
  # rubocop:enable Metrics/ParameterLists
43
41
 
44
42
  def query_constraints
45
- Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) do
46
- if @search_state.query_param.present?
47
- helpers.render(
48
- @query_constraint_component.new(
49
- search_state: @search_state,
50
- value: @search_state.query_param,
51
- label: label,
52
- remove_path: helpers.remove_constraint_url(@search_state),
53
- classes: 'query',
54
- **@query_constraint_component_options
55
- )
43
+ if @search_state.query_param.present?
44
+ helpers.render(
45
+ @query_constraint_component.new(
46
+ search_state: @search_state,
47
+ value: @search_state.query_param,
48
+ label: label,
49
+ remove_path: remove_path,
50
+ classes: 'query',
51
+ **@query_constraint_component_options
56
52
  )
57
- else
58
- ''.html_safe
59
- end
53
+ )
54
+ else
55
+ ''.html_safe
60
56
  end + helpers.render(@facet_constraint_component.with_collection(clause_presenters.to_a, **@facet_constraint_component_options))
61
57
  end
62
58
 
59
+ def remove_path
60
+ helpers.search_action_path(@search_state.remove_query_params)
61
+ end
62
+
63
63
  def facet_constraints
64
64
  helpers.render(@facet_constraint_component.with_collection(facet_item_presenters.to_a, **@facet_constraint_component_options))
65
65
  end
66
66
 
67
67
  def render?
68
- Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) { helpers.query_has_constraints?(@search_state.params) }
68
+ @search_state.has_constraints?
69
69
  end
70
70
 
71
71
  private
72
72
 
73
- # @deprecated
74
- def start_over_path
75
- Deprecation.silence(Blacklight::UrlHelperBehavior) do
76
- helpers.start_over_path
77
- end
78
- end
79
-
80
73
  def label
81
- Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
82
- helpers.constraint_query_label(@search_state.params)
83
- end
74
+ search_field = @search_state.params[:search_field]
75
+ helpers.label_for_search_field(search_field) unless helpers.default_search_field?(search_field)
84
76
  end
85
77
 
86
78
  def facet_item_presenters
87
79
  return to_enum(:facet_item_presenters) unless block_given?
88
80
 
89
- Deprecation.silence(Blacklight::SearchState) do
90
- @search_state.filters.map do |facet|
91
- facet.values.map do |val|
92
- next if val.blank?
81
+ @search_state.filters.map do |facet|
82
+ facet.each_value do |val|
83
+ next if val.blank?
93
84
 
94
- if val.is_a?(Array)
95
- yield inclusive_facet_item_presenter(facet.config, val, facet.key) if val.any?(&:present?)
96
- else
97
- yield facet_item_presenter(facet.config, val, facet.key)
98
- end
85
+ if val.is_a?(Array)
86
+ yield inclusive_facet_item_presenter(facet.config, val, facet.key) if val.any?(&:present?)
87
+ else
88
+ yield facet_item_presenter(facet.config, val, facet.key)
99
89
  end
100
90
  end
101
91
  end
@@ -111,7 +101,7 @@ module Blacklight
111
101
  end
112
102
 
113
103
  def facet_item_presenter(facet_config, facet_item, facet_field)
114
- (facet_config.item_presenter || Blacklight::FacetItemPresenter).new(facet_item, facet_config, helpers, facet_field)
104
+ facet_config.item_presenter.new(facet_item, facet_config, helpers, facet_field)
115
105
  end
116
106
 
117
107
  def inclusive_facet_item_presenter(facet_config, facet_item, facet_field)
@@ -23,10 +23,7 @@ module Blacklight
23
23
  end
24
24
 
25
25
  def using_default_document_action?
26
- return true if @action.component
27
- return false unless @action.partial == 'document_action'
28
-
29
- helpers.partial_from_blacklight?(@action.partial)
26
+ @action.component || @action.partial == 'document_action'
30
27
  end
31
28
 
32
29
  def link_to_modal_control
@@ -42,9 +39,7 @@ module Blacklight
42
39
  end
43
40
 
44
41
  def label
45
- Deprecation.silence(Blacklight::ComponentHelperBehavior) do
46
- helpers.document_action_label(@action.name, @action)
47
- end
42
+ t("blacklight.tools.#{@action.name}", default: @action.label || @action.name.to_s.humanize)
48
43
  end
49
44
 
50
45
  # Action buttons get their URLs in one of three ways:
@@ -55,12 +50,19 @@ module Blacklight
55
50
  # default Rails routing behavior)
56
51
  # - calling out to an implicit helper method with a conventional name (unlikely)
57
52
  def url
58
- Deprecation.silence(Blacklight::ComponentHelperBehavior) do
59
- helpers.document_action_path(@action, @url_opts.merge(({ id: @document } if @document) || {}))
53
+ url_opts = @url_opts.merge(({ id: @document } if @document) || {})
54
+ if @action.path
55
+ helpers.public_send(@action.path, url_opts)
56
+ elsif url_opts[:id].class.respond_to?(:model_name)
57
+ helpers.url_for([@action.key.to_sym, url_opts[:id]])
58
+ else
59
+ helpers.public_send("#{@action.key}_#{helpers.controller_name}_path", url_opts)
60
60
  end
61
61
  end
62
62
 
63
- delegate :key, to: :@action
63
+ def key
64
+ @action.key
65
+ end
64
66
  end
65
67
  end
66
68
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Blacklight
4
4
  module Document
5
- # Render a bookmark widget to bookmark / unbookmark a document
5
+ # Render a the set of actions for a document. One of the default actions is the bookmark control.
6
6
  class ActionsComponent < Blacklight::Component
7
7
  renders_many :actions, (lambda do |action:, component: nil, **kwargs|
8
8
  component ||= action.component || Blacklight::Document::ActionComponent
@@ -28,7 +28,7 @@ module Blacklight
28
28
  return if actions.present?
29
29
 
30
30
  @actions.each do |a|
31
- with_action(component: a.component, action: a)
31
+ action(component: a.component, action: a)
32
32
  end
33
33
  end
34
34
 
@@ -1,7 +1,9 @@
1
1
  <%-
2
2
  # the data-doc-id attribute is used by our JS that converts to a checkbox/label.
3
+ # we don't use the per-form csrf token
3
4
  -%>
4
5
  <%= form_tag(bookmark_path,
6
+ authenticity_token: false,
5
7
  method: bookmarked? ? :delete : :put,
6
8
  class: "bookmark-toggle",
7
9
  data: {
@@ -10,6 +12,13 @@
10
12
  absent: t('blacklight.search.bookmarks.absent'),
11
13
  inprogress: t('blacklight.search.bookmarks.inprogress')
12
14
  }) do %>
15
+ <div class="checkbox toggle-bookmark">
16
+ <label class="toggle-bookmark" data-checkboxsubmit-target="label">
17
+ <input type="checkbox" class="toggle-bookmark" data-checkboxsubmit-target="checkbox" <%= 'checked="checked"' if bookmarked? %>>
18
+ <span data-checkboxsubmit-target="span"><%= bookmarked? ? t('blacklight.search.bookmarks.present') : t('blacklight.search.bookmarks.absent') %></span>
19
+ </label>
20
+ </div>
21
+
13
22
  <%= submit_tag(t(bookmarked? ? 'remove.button' : 'add.button', scope: 'blacklight.bookmarks'),
14
23
  id: "bookmark_toggle_#{@document.id.to_s.parameterize}",
15
24
  class: "bookmark-#{bookmarked? ? 'remove' : 'add'} btn btn-outline-secondary") %>
@@ -3,14 +3,16 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render a bookmark widget to bookmark / unbookmark a document
6
- class BookmarkComponent < Blacklight::Component
6
+ class BookmarkComponent < Blacklight::Document::ActionComponent
7
7
  # @param [Blacklight::Document] document
8
+ # @param [Blacklight::Configuration::ToolConfig] action
8
9
  # @param [Boolean] checked
9
10
  # @param [Object] bookmark_path the rails route to use for bookmarks
10
- def initialize(document:, checked: nil, bookmark_path: nil)
11
+ def initialize(document:, action: nil, checked: nil, bookmark_path: nil, **kwargs)
11
12
  @document = document
12
13
  @checked = checked
13
14
  @bookmark_path = bookmark_path
15
+ super(document: document, action: action, **kwargs)
14
16
  end
15
17
 
16
18
  def bookmarked?
@@ -22,9 +22,11 @@ module Blacklight
22
22
 
23
23
  # @return [String]
24
24
  def title
25
- Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
26
- helpers.document_heading(@document)
27
- end
25
+ presenter.heading
26
+ end
27
+
28
+ def presenter
29
+ helpers.document_presenter(@document)
28
30
  end
29
31
  end
30
32
  end
@@ -17,10 +17,14 @@ module Blacklight
17
17
  helpers.render_document_index @group.docs
18
18
  end
19
19
 
20
+ # Get path to a search within a grouped result set
21
+ #
22
+ # @param [Blacklight::Solr::Response::Group] group
23
+ # @return [Hash]
20
24
  def add_group_facet_params_and_redirect(group)
21
- Deprecation.silence(Blacklight::UrlHelperBehavior) do
22
- helpers.search_action_path(helpers.add_group_facet_params_and_redirect(group))
23
- end
25
+ helpers.search_action_path(
26
+ helpers.search_state.add_facet_params_and_redirect(group.field, group.key)
27
+ )
24
28
  end
25
29
  end
26
30
  end
@@ -0,0 +1,2 @@
1
+ <%= render 'show_tools', document: document %>
2
+ <%= render(Blacklight::Document::MoreLikeThisComponent.new(document: document)) %>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Document
5
+ # Render the sidebar on the show view
6
+ class SidebarComponent < Blacklight::Component
7
+ # @param [Blacklight::DocumentPresenter] presenter
8
+ def initialize(presenter:)
9
+ @presenter = presenter
10
+ @document = presenter.document
11
+ end
12
+
13
+ attr_reader :document
14
+ end
15
+ end
16
+ end
@@ -1,12 +1,7 @@
1
- <% value = use_thumbnail_tag_behavior? ? presenter.thumbnail.thumbnail_tag(@image_options, 'aria-hidden': true, tabindex: -1, counter: @counter) : presenter.thumbnail.render(@image_options) %>
1
+ <% value = presenter.thumbnail.render(@image_options) %>
2
2
 
3
3
  <% if value %>
4
4
  <div class="document-thumbnail">
5
- <% if use_thumbnail_tag_behavior? %>
6
- <% warn_about_deprecated_behavior %>
7
- <%= value %>
8
- <% else %>
9
- <%= helpers.link_to_document(presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
10
- <% end %>
5
+ <%= helpers.link_to_document(presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
11
6
  </div>
12
7
  <% end %>
@@ -9,7 +9,7 @@ module Blacklight
9
9
  # @param [Blacklight::DocumentPresenter] presenter
10
10
  # @param [Integer] counter
11
11
  # @param [Hash] image_options options for the thumbnail presenter's image tag
12
- def initialize(presenter: nil, document: nil, counter:, image_options: {})
12
+ def initialize(counter:, presenter: nil, document: nil, image_options: {})
13
13
  @presenter = presenter
14
14
  @document = presenter&.document || document
15
15
  @counter = counter
@@ -20,14 +20,6 @@ module Blacklight
20
20
  presenter.thumbnail.exists?
21
21
  end
22
22
 
23
- def use_thumbnail_tag_behavior?
24
- !presenter.thumbnail.instance_of?(Blacklight::ThumbnailPresenter)
25
- end
26
-
27
- def warn_about_deprecated_behavior
28
- Deprecation.warn(Blacklight::Document::ThumbnailComponent, 'Detected as custom thumbnail presenter; make sure it has a #render method that returns just the thumbnail image tag')
29
- end
30
-
31
23
  def presenter
32
24
  @presenter ||= helpers.document_presenter(@document)
33
25
  end
@@ -22,7 +22,7 @@
22
22
 
23
23
  <% partials.each do |partial| %>
24
24
  <%= partial %>
25
- <% end if render_partials? %>
25
+ <% end %>
26
26
  </div>
27
27
 
28
28
  <%= thumbnail %>
@@ -1,32 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'view_component/version'
4
-
5
3
  module Blacklight
6
- ##
7
- # A component for rendering a single document
8
- #
9
- # @note when subclassing this component, if you override the initializer,
10
- # you must explicitly specify the counter variable `document_counter` even if you don't use it.
11
- # Otherwise view_component will not provide the count value when calling the component.
12
- #
13
- # @see https://viewcomponent.org/guide/collections.html#collection-counter
14
- #
15
- # @example
16
- # class MyDocumentComponent < Blacklight::DocumentComponent
17
- # def initialize(document_counter: nil, **kwargs)
18
- # super
19
- # ... custom code ...
20
- # end
21
- # end
22
4
  class DocumentComponent < Blacklight::Component
23
- include Blacklight::ContentAreasShim
24
-
25
- with_collection_parameter :document
26
-
27
- # ViewComponent 3 changes iteration counters to begin at 0 rather than 1
28
- COLLECTION_INDEX_OFFSET = ViewComponent::VERSION::MAJOR < 3 ? 0 : 1
29
-
30
5
  # Content appearing before the document
31
6
  renders_one :header
32
7
 
@@ -39,16 +14,17 @@ module Blacklight
39
14
 
40
15
  # The document title with some reasonable default behavior
41
16
  renders_one :title, (lambda do |*args, component: nil, **kwargs|
42
- component ||= @presenter&.view_config&.title_component || Blacklight::DocumentTitleComponent
17
+ component ||= Blacklight::DocumentTitleComponent
43
18
 
44
- component.new(*args, counter: @counter, document: @document, presenter: @presenter, as: @title_component, link_to_document: !@show, document_component: self, **kwargs)
19
+ component.new(*args, counter: @counter, document: @document, presenter: @presenter, as: @title_component, actions: !@show, link_to_document: !@show, document_component: self, **kwargs)
45
20
  end)
46
21
 
47
22
  renders_one :embed, (lambda do |static_content = nil, *args, component: nil, **kwargs|
48
23
  next static_content if static_content.present?
49
- next unless component
50
24
 
51
- Deprecation.warn(Blacklight::DocumentComponent, 'Pass the presenter to the DocumentComponent') if @presenter.nil?
25
+ component ||= @presenter.view_config&.embed_component
26
+
27
+ next unless component
52
28
 
53
29
  component.new(*args, document: @document, presenter: @presenter, document_counter: @document_counter, **kwargs)
54
30
  end)
@@ -57,9 +33,7 @@ module Blacklight
57
33
  renders_one :metadata, (lambda do |static_content = nil, *args, component: nil, fields: nil, **kwargs|
58
34
  next static_content if static_content.present?
59
35
 
60
- Deprecation.warn(Blacklight::DocumentComponent, 'Pass the presenter to the DocumentComponent') if !fields && @presenter.nil?
61
-
62
- component ||= presenter&.view_config&.metadata_component || Blacklight::DocumentMetadataComponent
36
+ component ||= Blacklight::DocumentMetadataComponent
63
37
 
64
38
  component.new(*args, fields: fields || @presenter&.field_presenters || [], **kwargs)
65
39
  end)
@@ -70,8 +44,7 @@ module Blacklight
70
44
  renders_one :thumbnail, (lambda do |image_options_or_static_content = {}, *args, component: nil, **kwargs|
71
45
  next image_options_or_static_content if image_options_or_static_content.is_a? String
72
46
 
73
- component ||= presenter&.view_config&.thumbnail_component || Blacklight::Document::ThumbnailComponent
74
- Deprecation.warn(Blacklight::DocumentComponent, 'Pass the presenter to the DocumentComponent') if !component && @presenter.nil?
47
+ component ||= @presenter&.view_config&.thumbnail_component || Blacklight::Document::ThumbnailComponent
75
48
 
76
49
  component.new(*args, document: @document, presenter: @presenter, counter: @counter, image_options: image_options_or_static_content, **kwargs)
77
50
  end)
@@ -88,7 +61,6 @@ module Blacklight
88
61
  # rubocop:disable Metrics/ParameterLists
89
62
  # @param document [Blacklight::Document]
90
63
  # @param presenter [Blacklight::DocumentPresenter]
91
- # @param partials [Array, nil] view partial names that should be used to provide content for the `partials` slot
92
64
  # @param id [String] HTML id for the root element
93
65
  # @param classes [Array, String] additional HTML classes for the root element
94
66
  # @param component [Symbol, String] HTML tag type to use for the root element
@@ -97,45 +69,27 @@ module Blacklight
97
69
  # @param document_counter [Number, nil] alternatively, the document's position in a collection and,
98
70
  # @param counter_offset [Number] with `document_counter`, the offset of the start of that collection counter to the overall result set
99
71
  # @param show [Boolean] are we showing only a single document (vs a list of search results); used for backwards-compatibility
100
- def initialize(document: nil, presenter: nil, partials: nil,
72
+ def initialize(document: nil, presenter: nil,
101
73
  id: nil, classes: [], component: :article, title_component: nil,
102
- metadata_component: nil,
103
- embed_component: nil,
104
- thumbnail_component: nil,
105
74
  counter: nil, document_counter: nil, counter_offset: 0,
106
- show: false, **args)
75
+ show: false)
107
76
  if presenter.nil? && document.nil?
108
77
  raise ArgumentError, 'missing keyword: :document or :presenter'
109
78
  end
110
79
 
111
- if document.is_a?(Blacklight::DocumentPresenter) && presenter.nil?
112
- @presenter = document
113
- @document = @presenter.document || args[self.class.collection_parameter]
114
- else
115
- @document = document || presenter&.document || args[self.class.collection_parameter]
116
- @presenter = presenter
117
- end
80
+ @document = document || presenter&.document
81
+ @presenter = presenter
118
82
 
119
83
  @component = component
120
84
  @title_component = title_component
121
85
  @id = id || ('document' if show)
122
86
  @classes = classes
123
87
 
124
- Deprecation.warn(Blacklight::DocumentComponent, 'Passing embed_component is deprecated') if @embed_component.present?
125
- @embed_component = embed_component
126
-
127
- Deprecation.warn(Blacklight::DocumentComponent, 'Passing metadata_component is deprecated') if @metadata_component.present?
128
- @metadata_component = metadata_component
129
-
130
- Deprecation.warn(Blacklight::DocumentComponent, 'Passing thumbnail_component is deprecated') if @thumbnail_component.present?
131
- @thumbnail_component = thumbnail_component
132
-
88
+ @document_counter = document_counter
133
89
  @counter = counter
134
- @document_counter = document_counter || args.fetch(self.class.collection_counter_parameter, nil)
135
- @counter ||= @document_counter + COLLECTION_INDEX_OFFSET + counter_offset if @document_counter.present?
90
+ @counter ||= document_counter + 1 + counter_offset if document_counter.present?
136
91
 
137
92
  @show = show
138
- @view_partials = partials
139
93
  end
140
94
  # rubocop:enable Metrics/ParameterLists
141
95
 
@@ -151,29 +105,13 @@ module Blacklight
151
105
 
152
106
  def before_render
153
107
  set_slot(:title, nil) unless title
154
- set_slot(:thumbnail, nil, component: @thumbnail_component || presenter.view_config&.thumbnail_component) unless thumbnail || show?
155
- set_slot(:metadata, nil, component: @metadata_component || presenter&.view_config&.metadata_component, fields: presenter.field_presenters, show: @show) unless metadata
156
- set_slot(:embed, nil, component: @embed_component || presenter.view_config&.embed_component) unless embed
157
-
158
- # Blacklight 8 allows applications to pass in the partials to render instead of requiring the template to render the slots.
159
- if partials.empty? && view_partials.present? # rubocop:disable Style/GuardClause
160
- @render_partials = true
161
- view_partials.each do |view_partial|
162
- with_partial(view_partial) do
163
- helpers.render_document_partial @document, view_partial, component: self, document_counter: @counter
164
- end
165
- end
166
- end
167
- end
168
-
169
- def render_partials?
170
- @render_partials || presenter.view_config&.render_partials_in_component?
108
+ set_slot(:thumbnail, nil) unless thumbnail || show?
109
+ set_slot(:metadata, nil, fields: presenter.field_presenters) unless metadata
110
+ set_slot(:embed, nil) unless embed
171
111
  end
172
112
 
173
113
  private
174
114
 
175
- attr_reader :view_partials
176
-
177
115
  def presenter
178
116
  @presenter ||= helpers.document_presenter(@document)
179
117
  end
@@ -1,7 +1,5 @@
1
- <% content = capture do %>
1
+ <dl class="document-metadata dl-invert row">
2
2
  <% fields.each do |field| -%>
3
3
  <%= field %>
4
4
  <% end -%>
5
- <% end %>
6
-
7
- <%= @tag.nil? ? content : tag.public_send(@tag, content, class: @classes, **@component_args) %>
5
+ </dl>
@@ -3,25 +3,22 @@
3
3
  module Blacklight
4
4
  class DocumentMetadataComponent < Blacklight::Component
5
5
  renders_many :fields, (lambda do |component: nil, **kwargs|
6
- (component || Blacklight::MetadataFieldComponent).new(**kwargs)
6
+ component.new(**kwargs)
7
7
  end)
8
8
  with_collection_parameter :fields
9
9
 
10
10
  # @param fields [Enumerable<Blacklight::FieldPresenter>] Document field presenters
11
- def initialize(fields: [], tag: 'dl', classes: %w[document-metadata dl-invert row], show: false, field_layout: nil, **component_args)
11
+ def initialize(fields: [], show: false, view_type: nil)
12
12
  @fields = fields
13
- @tag = tag
14
- @classes = classes
15
13
  @show = show
16
- @field_layout = field_layout
17
- @component_args = component_args
14
+ @view_type = view_type
18
15
  end
19
16
 
20
17
  def before_render
21
18
  return unless fields
22
19
 
23
20
  @fields.each do |field|
24
- with_field(component: field_component(field), field: field, show: @show, layout: @field_layout)
21
+ field(component: field.component, field: field, show: @show, view_type: @view_type)
25
22
  end
26
23
  end
27
24
 
@@ -29,8 +26,6 @@ module Blacklight
29
26
  fields.present?
30
27
  end
31
28
 
32
- def field_component(field)
33
- field&.component || Blacklight::MetadataFieldComponent
34
- end
29
+ attr_reader :view_type
35
30
  end
36
31
  end