blacklight 7.33.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -2
  3. data/.github/workflows/ruby.yml +38 -107
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +243 -2
  6. data/.rubocop_todo.yml +216 -270
  7. data/Gemfile +7 -6
  8. data/README.md +12 -4
  9. data/Rakefile +18 -0
  10. data/VERSION +1 -1
  11. data/app/assets/config/blacklight/manifest.js +3 -0
  12. data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
  13. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +332 -485
  15. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  16. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  20. data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
  21. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  22. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  23. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  24. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  25. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  26. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  27. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  28. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  29. data/app/builders/blacklight/action_builder.rb +18 -9
  30. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  31. data/app/components/blacklight/advanced_search_form_component.rb +7 -9
  32. data/app/components/blacklight/constraints_component.rb +27 -37
  33. data/app/components/blacklight/document/action_component.html.erb +2 -9
  34. data/app/components/blacklight/document/action_component.rb +26 -8
  35. data/app/components/blacklight/document/actions_component.rb +2 -2
  36. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  37. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  38. data/app/components/blacklight/document/citation_component.rb +5 -3
  39. data/app/components/blacklight/document/group_component.rb +7 -3
  40. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  41. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  42. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  43. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  44. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  45. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  46. data/app/components/blacklight/document_component.html.erb +4 -0
  47. data/app/components/blacklight/document_component.rb +54 -42
  48. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  49. data/app/components/blacklight/document_metadata_component.rb +11 -6
  50. data/app/components/blacklight/document_title_component.rb +4 -1
  51. data/app/components/blacklight/facet_component.rb +1 -1
  52. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
  53. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  54. data/app/components/blacklight/facet_field_component.html.erb +5 -5
  55. data/app/components/blacklight/facet_field_component.rb +9 -2
  56. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  57. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  58. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  59. data/app/components/blacklight/facet_item_component.rb +1 -43
  60. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  61. data/app/components/blacklight/header_component.html.erb +2 -0
  62. data/app/components/blacklight/header_component.rb +26 -0
  63. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  64. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  65. data/app/components/blacklight/icons/list_component.rb +16 -0
  66. data/app/components/blacklight/icons/search_component.rb +16 -0
  67. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  68. data/app/components/blacklight/metadata_field_component.rb +24 -8
  69. data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
  70. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  71. data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
  72. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  73. data/app/components/blacklight/response/sort_component.rb +2 -2
  74. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  75. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  76. data/app/components/blacklight/response/view_type_component.rb +4 -6
  77. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  78. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  79. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  80. data/app/components/blacklight/search_bar_component.rb +2 -16
  81. data/app/components/blacklight/search_button_component.rb +3 -3
  82. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  83. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  84. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  85. data/app/components/blacklight/search_header_component.html.erb +2 -0
  86. data/app/components/blacklight/search_header_component.rb +6 -0
  87. data/app/components/blacklight/search_navbar_component.html.erb +5 -0
  88. data/app/components/blacklight/search_navbar_component.rb +34 -0
  89. data/app/components/blacklight/start_over_button_component.rb +5 -3
  90. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  91. data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
  92. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  93. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  94. data/app/components/blacklight/system/modal_component.rb +1 -3
  95. data/app/components/blacklight/top_navbar_component.html.erb +12 -0
  96. data/app/components/blacklight/top_navbar_component.rb +17 -0
  97. data/app/controllers/bookmarks_controller.rb +1 -0
  98. data/app/controllers/catalog_controller.rb +1 -0
  99. data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
  100. data/app/controllers/concerns/blacklight/catalog.rb +21 -72
  101. data/app/controllers/concerns/blacklight/controller.rb +6 -43
  102. data/app/controllers/concerns/blacklight/search_context.rb +71 -13
  103. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  104. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  105. data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
  106. data/app/controllers/search_history_controller.rb +1 -0
  107. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
  108. data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
  109. data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
  110. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
  111. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  112. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  113. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
  114. data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
  115. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
  116. data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
  117. data/app/helpers/blacklight_helper.rb +1 -0
  118. data/app/helpers/catalog_helper.rb +1 -0
  119. data/app/javascript/blacklight/bookmark_toggle.js +9 -22
  120. data/app/javascript/blacklight/button_focus.js +9 -7
  121. data/app/javascript/blacklight/checkbox_submit.js +68 -122
  122. data/app/javascript/blacklight/core.js +6 -5
  123. data/app/javascript/blacklight/index.js +14 -0
  124. data/app/javascript/blacklight/modal.js +100 -165
  125. data/app/javascript/blacklight/modalForm.js +60 -0
  126. data/app/javascript/blacklight/search_context.js +13 -29
  127. data/app/models/blacklight/facet_paginator.rb +3 -2
  128. data/app/models/blacklight/icon.rb +4 -2
  129. data/app/models/bookmark.rb +0 -2
  130. data/app/models/concerns/blacklight/configurable.rb +5 -4
  131. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
  132. data/app/models/concerns/blacklight/document/attributes.rb +50 -0
  133. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  134. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  135. data/app/models/concerns/blacklight/document/export.rb +2 -1
  136. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  137. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  138. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
  139. data/app/models/concerns/blacklight/document.rb +23 -20
  140. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  141. data/app/models/concerns/blacklight/user.rb +17 -8
  142. data/app/models/record_mailer.rb +23 -18
  143. data/app/models/search.rb +0 -1
  144. data/app/models/solr_document.rb +1 -0
  145. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  146. data/app/presenters/blacklight/document_presenter.rb +24 -30
  147. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  148. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  149. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  150. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  151. data/app/presenters/blacklight/field_presenter.rb +1 -0
  152. data/app/presenters/blacklight/index_presenter.rb +2 -40
  153. data/app/presenters/blacklight/json_presenter.rb +7 -5
  154. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  155. data/app/presenters/blacklight/rendering/join.rb +7 -1
  156. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
  157. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  158. data/app/presenters/blacklight/show_presenter.rb +1 -9
  159. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  160. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  161. data/app/services/blacklight/field_retriever.rb +1 -8
  162. data/app/services/blacklight/search_service.rb +9 -7
  163. data/app/values/blacklight/types.rb +95 -11
  164. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  165. data/app/views/bookmarks/_tools.html.erb +7 -12
  166. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  167. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  168. data/app/views/catalog/_constraints.html.erb +1 -14
  169. data/app/views/catalog/_document.atom.builder +12 -14
  170. data/app/views/catalog/_document.html.erb +3 -6
  171. data/app/views/catalog/_document.rss.builder +2 -4
  172. data/app/views/catalog/_document_list.html.erb +2 -1
  173. data/app/views/catalog/_facet_layout.html.erb +2 -2
  174. data/app/views/catalog/_facets.html.erb +5 -4
  175. data/app/views/catalog/_home_text.html.erb +2 -14
  176. data/app/views/catalog/_search_form.html.erb +3 -3
  177. data/app/views/catalog/_search_header.html.erb +1 -2
  178. data/app/views/catalog/_search_results.html.erb +2 -2
  179. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  180. data/app/views/catalog/_show_main_content.html.erb +8 -19
  181. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  182. data/app/views/catalog/_show_tools.html.erb +1 -19
  183. data/app/views/catalog/_view_type_group.html.erb +1 -1
  184. data/app/views/catalog/email_success.html.erb +5 -6
  185. data/app/views/catalog/facet.html.erb +7 -5
  186. data/app/views/catalog/index.atom.builder +12 -14
  187. data/app/views/catalog/index.html.erb +7 -1
  188. data/app/views/catalog/index.json.jbuilder +19 -19
  189. data/app/views/catalog/index.rss.builder +1 -1
  190. data/app/views/catalog/opensearch.xml.builder +1 -1
  191. data/app/views/catalog/show.html.erb +1 -6
  192. data/app/views/catalog/sms_success.html.erb +5 -6
  193. data/app/views/catalog/suggest.html.erb +3 -0
  194. data/app/views/layouts/blacklight/base.html.erb +19 -9
  195. data/app/views/record_mailer/email_record.text.erb +4 -3
  196. data/app/views/record_mailer/sms_record.text.erb +4 -4
  197. data/app/views/search_history/index.html.erb +6 -2
  198. data/app/views/shared/_header_navbar.html.erb +1 -22
  199. data/app/views/shared/_modal.html.erb +3 -3
  200. data/blacklight.gemspec +8 -10
  201. data/config/importmap.rb +3 -0
  202. data/config/locales/blacklight.ar.yml +209 -233
  203. data/config/locales/blacklight.ca.yml +0 -7
  204. data/config/locales/blacklight.de.yml +197 -216
  205. data/config/locales/blacklight.en.yml +2 -7
  206. data/config/locales/blacklight.es.yml +196 -216
  207. data/config/locales/blacklight.fr.yml +196 -220
  208. data/config/locales/blacklight.hu.yml +193 -213
  209. data/config/locales/blacklight.it.yml +197 -216
  210. data/config/locales/blacklight.nl.yml +193 -213
  211. data/config/locales/blacklight.pt-BR.yml +195 -216
  212. data/config/locales/blacklight.sq.yml +193 -213
  213. data/config/locales/blacklight.zh.yml +194 -214
  214. data/config/routes.rb +3 -2
  215. data/db/migrate/20140202020201_create_searches.rb +1 -0
  216. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  217. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  218. data/docker-compose.yml +1 -0
  219. data/lib/blacklight/abstract_repository.rb +1 -0
  220. data/lib/blacklight/configuration/context.rb +4 -4
  221. data/lib/blacklight/configuration/display_field.rb +7 -9
  222. data/lib/blacklight/configuration/facet_field.rb +17 -11
  223. data/lib/blacklight/configuration/field.rb +1 -0
  224. data/lib/blacklight/configuration/fields.rb +12 -15
  225. data/lib/blacklight/configuration/index_field.rb +1 -0
  226. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  227. data/lib/blacklight/configuration/search_field.rb +1 -0
  228. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  229. data/lib/blacklight/configuration/show_field.rb +1 -0
  230. data/lib/blacklight/configuration/sort_field.rb +1 -0
  231. data/lib/blacklight/configuration/tool_config.rb +1 -0
  232. data/lib/blacklight/configuration/view_config.rb +16 -10
  233. data/lib/blacklight/configuration.rb +322 -341
  234. data/lib/blacklight/engine.rb +13 -15
  235. data/lib/blacklight/exceptions.rb +2 -2
  236. data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
  237. data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
  238. data/lib/blacklight/parameters.rb +7 -21
  239. data/lib/blacklight/routes/exportable.rb +1 -0
  240. data/lib/blacklight/routes/searchable.rb +3 -1
  241. data/lib/blacklight/routes.rb +1 -0
  242. data/lib/blacklight/search_builder.rb +10 -10
  243. data/lib/blacklight/search_state/filter_field.rb +8 -25
  244. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  245. data/lib/blacklight/search_state.rb +23 -79
  246. data/lib/blacklight/solr/document.rb +1 -0
  247. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  248. data/lib/blacklight/solr/repository.rb +1 -0
  249. data/lib/blacklight/solr/request.rb +3 -0
  250. data/lib/blacklight/solr/response/facets.rb +21 -5
  251. data/lib/blacklight/solr/response/group.rb +1 -0
  252. data/lib/blacklight/solr/response/group_response.rb +1 -0
  253. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  254. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  255. data/lib/blacklight/solr/response/params.rb +5 -4
  256. data/lib/blacklight/solr/response/response.rb +1 -0
  257. data/lib/blacklight/solr/response/spelling.rb +1 -0
  258. data/lib/blacklight/solr/response.rb +4 -3
  259. data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
  260. data/lib/blacklight/solr.rb +1 -0
  261. data/lib/blacklight/version.rb +1 -0
  262. data/lib/blacklight.rb +8 -11
  263. data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
  264. data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
  265. data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
  266. data/lib/generators/blacklight/assets_generator.rb +14 -88
  267. data/lib/generators/blacklight/controller_generator.rb +3 -2
  268. data/lib/generators/blacklight/document_generator.rb +1 -0
  269. data/lib/generators/blacklight/install_generator.rb +7 -4
  270. data/lib/generators/blacklight/models_generator.rb +1 -0
  271. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  272. data/lib/generators/blacklight/solr_generator.rb +1 -1
  273. data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
  274. data/lib/generators/blacklight/templates/solr_document.rb +1 -7
  275. data/lib/generators/blacklight/test_support_generator.rb +4 -2
  276. data/lib/generators/blacklight/user_generator.rb +7 -9
  277. data/lib/railties/blacklight.rake +2 -3
  278. data/package.json +10 -10
  279. data/rollup.config.js +37 -0
  280. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  281. data/spec/components/blacklight/document_component_spec.rb +74 -33
  282. data/spec/components/blacklight/facet_component_spec.rb +2 -7
  283. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  284. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  285. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
  286. data/spec/components/blacklight/header_component_spec.rb +20 -0
  287. data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
  288. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  289. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  290. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
  291. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  292. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  293. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  294. data/spec/controllers/catalog_controller_spec.rb +24 -126
  295. data/spec/features/autocomplete_spec.rb +1 -1
  296. data/spec/features/axe_spec.rb +1 -1
  297. data/spec/features/bookmarks_spec.rb +1 -1
  298. data/spec/features/component_template_override_spec.rb +8 -0
  299. data/spec/features/facets_spec.rb +1 -1
  300. data/spec/features/modal_spec.rb +12 -0
  301. data/spec/features/search_context_spec.rb +4 -10
  302. data/spec/features/search_results_spec.rb +0 -33
  303. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  304. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  305. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  306. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  307. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  308. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
  309. data/spec/helpers/blacklight_helper_spec.rb +3 -298
  310. data/spec/helpers/catalog_helper_spec.rb +60 -115
  311. data/spec/i18n_spec.rb +1 -0
  312. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  313. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  314. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  315. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  316. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  317. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
  318. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  319. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  320. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  321. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  322. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  323. data/spec/models/blacklight/configuration_spec.rb +41 -53
  324. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  325. data/spec/models/blacklight/icon_spec.rb +29 -15
  326. data/spec/models/blacklight/search_builder_spec.rb +12 -12
  327. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  328. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  329. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  330. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  331. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  332. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  333. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
  334. data/spec/models/blacklight/user_spec.rb +22 -0
  335. data/spec/models/record_mailer_spec.rb +36 -23
  336. data/spec/models/solr_document_spec.rb +21 -3
  337. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  338. data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
  339. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  340. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  341. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  342. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
  343. data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
  344. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  345. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  346. data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
  347. data/spec/presenters/pipeline_spec.rb +13 -2
  348. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  349. data/spec/requests/load_suggestions_spec.rb +16 -0
  350. data/spec/routing/catalog_routing_spec.rb +6 -1
  351. data/spec/services/blacklight/search_service_spec.rb +31 -68
  352. data/spec/spec_helper.rb +4 -3
  353. data/spec/support/controller_level_helpers.rb +1 -2
  354. data/spec/support/features/search_helpers.rb +39 -0
  355. data/spec/support/features/session_helpers.rb +1 -0
  356. data/spec/support/features.rb +3 -0
  357. data/spec/support/view_component_test_helpers.rb +21 -0
  358. data/spec/test_app_templates/Gemfile.extra +4 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
  360. data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
  361. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  362. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  363. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
  366. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  367. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  368. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  369. data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
  370. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  371. data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
  372. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  373. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  374. data/tasks/blacklight.rake +7 -5
  375. metadata +95 -123
  376. data/.babelrc +0 -11
  377. data/app/assets/images/blacklight/list.svg +0 -1
  378. data/app/assets/images/blacklight/search.svg +0 -1
  379. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  380. data/app/components/blacklight/content_areas_shim.rb +0 -13
  381. data/app/components/blacklight/search_context_component.rb +0 -34
  382. data/app/controllers/concerns/blacklight/base.rb +0 -7
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/models/concerns/blacklight/document/email.rb +0 -26
  393. data/app/models/concerns/blacklight/document/sms.rb +0 -24
  394. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  395. data/app/views/catalog/_constraints_element.html.erb +0 -14
  396. data/app/views/catalog/_document_action.html.erb +0 -5
  397. data/app/views/catalog/_facet_group.html.erb +0 -5
  398. data/app/views/catalog/_facet_limit.html.erb +0 -3
  399. data/app/views/catalog/_index.html.erb +0 -1
  400. data/app/views/catalog/_index_header.html.erb +0 -22
  401. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  402. data/app/views/catalog/_show.html.erb +0 -6
  403. data/app/views/catalog/_show_header.html.erb +0 -2
  404. data/app/views/catalog/_thumbnail.html.erb +0 -1
  405. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  406. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  407. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  408. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  409. data/spec/features/sitelinks_search_box.rb +0 -13
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -108
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/models/blacklight/document/email_spec.rb +0 -57
  416. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  417. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  418. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  419. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  420. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  421. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  422. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  423. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  424. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  425. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  426. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
  427. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -72,7 +72,7 @@ module Blacklight
72
72
  end
73
73
 
74
74
  def thumbnail_value_from_document
75
- Array(thumbnail_field).lazy.map { |field| retrieve_values(field_config(field)).first }.reject(&:blank?).first
75
+ Array(thumbnail_field).lazy.map { |field| retrieve_values(field_config(field)).first }.compact_blank.first
76
76
  end
77
77
 
78
78
  def retrieve_values(field_config)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ # Extends the search Builders to add bookmarks
5
+ class BookmarksSearchBuilder < ::SearchBuilder
6
+ ##
7
+ # Filters the query to only include the bookmarked items
8
+ #
9
+ # @param [Hash] solr_parameters
10
+ #
11
+ # @return [void]
12
+ def bookmarked(solr_parameters)
13
+ solr_parameters[:fq] ||= []
14
+ bookmarks = @scope.context.fetch(:bookmarks)
15
+ return unless bookmarks
16
+
17
+ document_ids = bookmarks.collect { |b| b.document_id.to_s }
18
+ solr_parameters[:fq] += ["{!terms f=id}#{document_ids.join(',')}"]
19
+ end
20
+ self.default_processor_chain += [:bookmarked]
21
+ end
22
+ end
@@ -67,14 +67,7 @@ module Blacklight
67
67
  end
68
68
 
69
69
  def retrieve_values
70
- values_method = field_config.values
71
-
72
- if values_method.respond_to?(:arity) && values_method.arity.abs == 2
73
- Deprecation.warn(self, ":values parameter for field #{field_config.key} only accepts 2 arguments; should accept 3")
74
- values_method.call(field_config, document)
75
- else
76
- values_method.call(field_config, document, view_context)
77
- end
70
+ field_config.values.call(field_config, document, view_context)
78
71
  end
79
72
  end
80
73
  end
@@ -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,18 @@ 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 document (or array of
48
+ # documents if an array of ids was given)
47
49
  def fetch(id = nil, extra_controller_params = {})
48
50
  if id.is_a? Array
49
51
  fetch_many(id, extra_controller_params)
@@ -123,7 +125,7 @@ module Blacklight
123
125
 
124
126
  if index > 0
125
127
  solr_params[:start] = index - window # get one before
126
- solr_params[:rows] = 2 * window + 1 # and one after
128
+ solr_params[:rows] = (2 * window) + 1 # and one after
127
129
  else
128
130
  solr_params[:start] = 0 # there is no previous doc
129
131
  solr_params[:rows] = 2 * window # but there should be one after
@@ -148,12 +150,12 @@ module Blacklight
148
150
 
149
151
  solr_response = repository.search(query)
150
152
 
151
- [solr_response, solr_response.documents]
153
+ solr_response.documents
152
154
  end
153
155
 
154
156
  def fetch_one(id, extra_controller_params)
155
157
  solr_response = repository.find id, extra_controller_params
156
- [solr_response, solr_response.documents.first]
158
+ solr_response.documents.first
157
159
  end
158
160
  end
159
161
  end
@@ -1,31 +1,115 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_model"
4
+
3
5
  module Blacklight
4
6
  # These are data types that blacklight can use to coerce values from the index
5
7
  module Types
6
- class Array
8
+ @registry = ActiveModel::Type::Registry.new
9
+
10
+ class << self
11
+ delegate :lookup, :register, to: :@registry
12
+ end
13
+
14
+ class Value
7
15
  def self.coerce(input)
8
- ::Array.wrap(input)
16
+ new.cast(input)
17
+ end
18
+
19
+ def cast(input)
20
+ if input.is_a?(::Array)
21
+ input.first
22
+ else
23
+ input
24
+ end
9
25
  end
10
26
  end
11
27
 
12
- class String
13
- def self.coerce(input)
14
- ::Array.wrap(input).first
28
+ class Array < Value
29
+ def initialize(of: nil, **kwargs)
30
+ @of = of
31
+ @kwargs = kwargs
32
+ end
33
+
34
+ def cast(input)
35
+ ::Array.wrap(input).map do |value|
36
+ lookup_type.cast(value)
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def lookup_type
43
+ return Blacklight::Types::Value.new(**@kwargs) if @of.nil?
44
+
45
+ @lookup_type ||= Blacklight::Types.lookup(@of, **@kwargs)
15
46
  end
16
47
  end
17
48
 
18
- class Date
19
- def self.coerce(input)
20
- field = String.coerce(input)
21
- return if field.blank?
49
+ class String < Value
50
+ def cast(input)
51
+ super&.to_s
52
+ end
53
+ end
54
+
55
+ class Date < Value
56
+ def cast(input)
57
+ value = super
58
+ return if value.blank?
22
59
 
23
60
  begin
24
- ::Date.parse(field)
61
+ ::Date.parse(value.to_s)
25
62
  rescue ArgumentError
26
- Rails.logger&.info "Unable to parse date: #{field.first.inspect}"
63
+ Rails.logger&.info "Unable to parse date: #{value.inspect}"
27
64
  end
28
65
  end
29
66
  end
67
+
68
+ class Boolean < Value
69
+ def cast(input)
70
+ ActiveModel::Type::Boolean.new.cast(super)
71
+ end
72
+ end
73
+
74
+ class JsonValue < Value
75
+ def cast(input)
76
+ value = super
77
+
78
+ return value unless value.is_a?(String)
79
+
80
+ JSON.parse(value)
81
+ end
82
+ end
83
+
84
+ class Selector < Array
85
+ def initialize(by: nil, block: nil, **kwargs)
86
+ super(**kwargs)
87
+ @by = by
88
+ @block = block
89
+ end
90
+
91
+ def cast(input)
92
+ return super.public_send(@by) unless @block
93
+
94
+ super.public_send(@by, &@block)
95
+ end
96
+ end
97
+
98
+ # rubocop:disable Rails/OutputSafety
99
+ class Html < String
100
+ def cast(input)
101
+ super&.html_safe
102
+ end
103
+ end
104
+ # rubocop:enable Rails/OutputSafety
105
+
106
+ register :boolean, Boolean
107
+ register :string, String
108
+ register :date, Date
109
+ register :array, Array
110
+ register :json, JsonValue
111
+ register :html, Html
112
+ register :select, Selector
113
+ register :value, Value
30
114
  end
31
115
  end
@@ -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,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(document_component.collection_parameter => 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,4 @@
1
1
  <% # container for a single doc -%>
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? ? :body : :partial) do %>
5
- <%= render_document_partials document, view_config.partials, component: component, document_counter: document_counter %>
6
- <% end %>
7
- <% end %>
2
+ <% view_config = local_assigns[:view_config] || blacklight_config.view_config(document_index_view_type, action_name: action_name) %>
3
+ <% document_component = view_config.document_component -%>
4
+ <%= render document_component.new(document_component.collection_parameter => document_presenter(document), counter: document_counter_with_offset(document_counter), partials: view_config&.partials) %>
@@ -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,5 +1,6 @@
1
1
  <% # container for all documents in index list view -%>
2
2
  <% view_config = local_assigns[:view_config] || blacklight_config&.view_config(document_index_view_type) %>
3
3
  <div id="documents" class="documents-<%= view_config&.key || document_index_view_type %>">
4
- <%= render documents, as: :document, view_config: view_config %>
4
+ <% document_presenters = documents.map { |doc| document_presenter(doc) } -%>
5
+ <%= render view_config.document_component.with_collection(document_presenters, partials: view_config.partials, counter_offset: @response&.start || 0) %>
5
6
  </div>
@@ -1,8 +1,8 @@
1
1
  <%= render(Blacklight::FacetFieldComponent.new(facet_field: facet_field_presenter(facet_field, nil))) do |component| %>
2
- <% component.label do %>
2
+ <% component.with_label do %>
3
3
  <%= facet_field_label(facet_field.key) %>
4
4
  <% end %>
5
- <% component.body do %>
5
+ <% component.with_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,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 },
7
- autocomplete_path: search_action_path(action: :suggest))) %>
6
+ presenter: presenter,
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,14 @@
1
- <%= render(Blacklight::SearchContextComponent.new(search_context: @search_context, search_session: search_session)) if search_session['document_id'] == @document.id %>
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 %>
1
+ <%= render blacklight_config.track_search_session.item_pagination_component.new(search_context: @search_context, search_session: search_session, current_document: @document) if blacklight_config.track_search_session.item_pagination_component %>
2
+ <% @page_title = t('blacklight.search.show.title', document_title: document_presenter(@document).html_title, application_name: application_name).html_safe %>
4
3
  <% content_for(:head) { render_link_rel_alternates } %>
5
4
 
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.footer do %>
5
+ <% document_component = blacklight_config.view_config(:show).document_component -%>
6
+ <%= render (document_component).new(document_component.collection_parameter => document_presenter(@document), component: :div, show: true, partials: blacklight_config.view_config(:show).partials) do |component| %>
7
+ <% component.with_title(as: 'h1', classes: '', link_to_document: false, actions: false) %>
8
+ <% component.with_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 %>
17
-
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? ? :body : :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>
24
13
  <% end %>
25
14
  <% end %>
@@ -1,2 +1,2 @@
1
- <%= render 'show_tools' %>
2
- <%= render(Blacklight::Document::MoreLikeThisComponent.new(document: document)) %>
1
+ <% presenter = document_presenter(document) %>
2
+ <%= render presenter.view_config.sidebar_component.new(presenter: presenter) %>
@@ -1,19 +1 @@
1
- <% if show_doc_actions? %>
2
- <div class="card show-tools">
3
- <div class="card-header">
4
- <h2 class="mb-0 h6"><%= t('blacklight.tools.title') %></h2>
5
- </div>
6
- <% if render_show_doc_actions_method_from_blacklight? %>
7
- <%= 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))) %>
8
- <% else %>
9
- <% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %>
10
- <ul class="list-group list-group-flush">
11
- <%= render_show_doc_actions @document do |config, inner| %>
12
- <li class="list-group-item <%= config.key %>">
13
- <%= inner %>
14
- </li>
15
- <% end %>
16
- </ul>
17
- <% end %>
18
- </div>
19
- <% end %>
1
+ <%= render Blacklight::Document::ShowToolsComponent.new(document: document) %>
@@ -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,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.prefix do %>
2
+ <% component.with_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.title { facet_field_label(@facet.key) } %>
8
+ <% component.with_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.footer do %>
17
- <div class="facet-pagination bottom row justify-content-between">
18
+ <% component.with_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