blacklight 7.41.0 → 8.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +243 -14
  5. data/.rubocop_todo.yml +137 -429
  6. data/Gemfile +11 -6
  7. data/README.md +11 -3
  8. data/VERSION +1 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  11. data/app/assets/javascripts/blacklight/blacklight.js +374 -493
  12. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  13. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  16. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  17. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  18. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  19. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  20. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  22. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  23. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  24. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  25. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  26. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  27. data/app/builders/blacklight/action_builder.rb +18 -9
  28. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  29. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  30. data/app/components/blacklight/constraints_component.rb +27 -37
  31. data/app/components/blacklight/document/action_component.rb +12 -10
  32. data/app/components/blacklight/document/actions_component.rb +2 -2
  33. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  34. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  35. data/app/components/blacklight/document/citation_component.rb +5 -3
  36. data/app/components/blacklight/document/group_component.rb +7 -3
  37. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  38. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  39. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  40. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  41. data/app/components/blacklight/document_component.html.erb +1 -1
  42. data/app/components/blacklight/document_component.rb +16 -78
  43. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  44. data/app/components/blacklight/document_metadata_component.rb +5 -10
  45. data/app/components/blacklight/facet_component.rb +3 -3
  46. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  47. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  48. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  49. data/app/components/blacklight/facet_field_component.rb +9 -2
  50. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  51. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  52. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  53. data/app/components/blacklight/facet_item_component.rb +1 -43
  54. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  55. data/app/components/blacklight/header_component.rb +1 -1
  56. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  57. data/app/components/blacklight/icons/icon_component.rb +4 -9
  58. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  59. data/app/components/blacklight/icons/list_component.rb +16 -0
  60. data/app/components/blacklight/icons/search_component.rb +16 -0
  61. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  62. data/app/components/blacklight/metadata_field_component.rb +24 -8
  63. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  64. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  65. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  66. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  67. data/app/components/blacklight/response/pagination_component.rb +2 -11
  68. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  69. data/app/components/blacklight/response/sort_component.rb +1 -16
  70. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  71. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  72. data/app/components/blacklight/response/view_type_component.rb +4 -6
  73. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  74. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  75. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  76. data/app/components/blacklight/search_bar_component.rb +2 -16
  77. data/app/components/blacklight/search_button_component.rb +3 -3
  78. data/app/components/blacklight/search_context_component.rb +43 -10
  79. data/app/components/blacklight/search_header_component.html.erb +2 -0
  80. data/app/components/blacklight/search_header_component.rb +6 -0
  81. data/app/components/blacklight/start_over_button_component.rb +5 -3
  82. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  83. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  84. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  85. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  86. data/app/components/blacklight/system/modal_component.rb +1 -3
  87. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  88. data/app/components/blacklight/top_navbar_component.rb +0 -4
  89. data/app/controllers/bookmarks_controller.rb +1 -0
  90. data/app/controllers/catalog_controller.rb +1 -0
  91. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  92. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  93. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  94. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  95. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  96. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  97. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  98. data/app/controllers/search_history_controller.rb +1 -0
  99. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  100. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  101. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  102. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  103. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  104. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  105. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  106. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  107. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  108. data/app/helpers/blacklight_helper.rb +1 -0
  109. data/app/helpers/catalog_helper.rb +1 -0
  110. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  111. data/app/javascript/blacklight/button_focus.js +12 -10
  112. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  113. data/app/javascript/blacklight/core.js +5 -7
  114. data/app/javascript/blacklight/index.js +13 -0
  115. data/app/javascript/blacklight/modal.js +99 -164
  116. data/app/javascript/blacklight/modalForm.js +60 -0
  117. data/app/javascript/blacklight/search_context.js +46 -54
  118. data/app/models/blacklight/facet_paginator.rb +3 -2
  119. data/app/models/blacklight/icon.rb +4 -2
  120. data/app/models/bookmark.rb +0 -2
  121. data/app/models/concerns/blacklight/configurable.rb +5 -4
  122. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  123. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  124. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  125. data/app/models/concerns/blacklight/document/email.rb +1 -0
  126. data/app/models/concerns/blacklight/document/export.rb +2 -1
  127. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  128. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  129. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  130. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  131. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  132. data/app/models/concerns/blacklight/user.rb +17 -8
  133. data/app/models/record_mailer.rb +13 -12
  134. data/app/models/search.rb +1 -7
  135. data/app/models/solr_document.rb +1 -0
  136. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  137. data/app/presenters/blacklight/document_presenter.rb +23 -50
  138. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  139. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  140. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  141. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  142. data/app/presenters/blacklight/field_presenter.rb +1 -0
  143. data/app/presenters/blacklight/index_presenter.rb +2 -40
  144. data/app/presenters/blacklight/json_presenter.rb +10 -6
  145. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  146. data/app/presenters/blacklight/show_presenter.rb +1 -9
  147. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  148. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  149. data/app/services/blacklight/field_retriever.rb +12 -21
  150. data/app/services/blacklight/search_service.rb +10 -17
  151. data/app/values/blacklight/types.rb +0 -18
  152. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  153. data/app/views/bookmarks/_tools.html.erb +7 -12
  154. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  155. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  156. data/app/views/catalog/_citation.html.erb +1 -1
  157. data/app/views/catalog/_constraints.html.erb +1 -14
  158. data/app/views/catalog/_document.atom.builder +12 -14
  159. data/app/views/catalog/_document.html.erb +5 -3
  160. data/app/views/catalog/_document.rss.builder +2 -4
  161. data/app/views/catalog/_facet_layout.html.erb +2 -2
  162. data/app/views/catalog/_facets.html.erb +5 -4
  163. data/app/views/catalog/_home_text.html.erb +2 -14
  164. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  165. data/app/views/catalog/_search_form.html.erb +2 -2
  166. data/app/views/catalog/_search_header.html.erb +1 -2
  167. data/app/views/catalog/_search_results.html.erb +2 -2
  168. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  169. data/app/views/catalog/_show_main_content.html.erb +11 -16
  170. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  171. data/app/views/catalog/_show_tools.html.erb +8 -14
  172. data/app/views/catalog/_view_type_group.html.erb +1 -1
  173. data/app/views/catalog/email.html.erb +2 -2
  174. data/app/views/catalog/email_success.html.erb +5 -6
  175. data/app/views/catalog/facet.html.erb +7 -5
  176. data/app/views/catalog/index.atom.builder +12 -14
  177. data/app/views/catalog/index.html.erb +4 -1
  178. data/app/views/catalog/index.json.jbuilder +19 -19
  179. data/app/views/catalog/index.rss.builder +1 -1
  180. data/app/views/catalog/opensearch.xml.builder +1 -1
  181. data/app/views/catalog/sms.html.erb +2 -2
  182. data/app/views/catalog/sms_success.html.erb +5 -6
  183. data/app/views/catalog/suggest.html.erb +3 -0
  184. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  185. data/app/views/layouts/blacklight/base.html.erb +13 -2
  186. data/app/views/search_history/index.html.erb +6 -2
  187. data/app/views/shared/_flash_messages.html.erb +1 -1
  188. data/app/views/shared/_modal.html.erb +3 -3
  189. data/blacklight.gemspec +7 -11
  190. data/config/importmap.rb +3 -0
  191. data/config/locales/blacklight.ar.yml +0 -1
  192. data/config/locales/blacklight.ca.yml +0 -1
  193. data/config/locales/blacklight.de.yml +0 -1
  194. data/config/locales/blacklight.en.yml +0 -2
  195. data/config/locales/blacklight.es.yml +0 -1
  196. data/config/locales/blacklight.fr.yml +0 -1
  197. data/config/locales/blacklight.hu.yml +0 -1
  198. data/config/locales/blacklight.it.yml +0 -1
  199. data/config/locales/blacklight.nl.yml +0 -1
  200. data/config/locales/blacklight.pt-BR.yml +0 -1
  201. data/config/locales/blacklight.sq.yml +0 -1
  202. data/config/locales/blacklight.zh.yml +0 -1
  203. data/config/routes.rb +3 -2
  204. data/db/migrate/20140202020201_create_searches.rb +1 -0
  205. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  206. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  207. data/docker-compose.yml +3 -3
  208. data/lib/blacklight/abstract_repository.rb +1 -6
  209. data/lib/blacklight/component.rb +47 -10
  210. data/lib/blacklight/configuration/context.rb +4 -4
  211. data/lib/blacklight/configuration/display_field.rb +7 -9
  212. data/lib/blacklight/configuration/facet_field.rb +17 -11
  213. data/lib/blacklight/configuration/field.rb +1 -0
  214. data/lib/blacklight/configuration/fields.rb +12 -15
  215. data/lib/blacklight/configuration/index_field.rb +1 -0
  216. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  217. data/lib/blacklight/configuration/search_field.rb +1 -0
  218. data/lib/blacklight/configuration/show_field.rb +1 -0
  219. data/lib/blacklight/configuration/sort_field.rb +1 -0
  220. data/lib/blacklight/configuration/tool_config.rb +1 -0
  221. data/lib/blacklight/configuration/view_config.rb +14 -10
  222. data/lib/blacklight/configuration.rb +310 -365
  223. data/lib/blacklight/engine.rb +8 -24
  224. data/lib/blacklight/exceptions.rb +2 -2
  225. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  226. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  227. data/lib/blacklight/parameters.rb +7 -21
  228. data/lib/blacklight/routes/exportable.rb +1 -0
  229. data/lib/blacklight/routes/searchable.rb +2 -1
  230. data/lib/blacklight/routes.rb +1 -0
  231. data/lib/blacklight/search_builder.rb +10 -10
  232. data/lib/blacklight/search_state/filter_field.rb +8 -25
  233. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  234. data/lib/blacklight/search_state.rb +23 -79
  235. data/lib/blacklight/solr/document.rb +1 -0
  236. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  237. data/lib/blacklight/solr/repository.rb +4 -24
  238. data/lib/blacklight/solr/request.rb +1 -0
  239. data/lib/blacklight/solr/response/facets.rb +21 -5
  240. data/lib/blacklight/solr/response/group.rb +1 -0
  241. data/lib/blacklight/solr/response/group_response.rb +1 -0
  242. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  243. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  244. data/lib/blacklight/solr/response/params.rb +5 -4
  245. data/lib/blacklight/solr/response/response.rb +1 -0
  246. data/lib/blacklight/solr/response/spelling.rb +1 -0
  247. data/lib/blacklight/solr/response.rb +16 -3
  248. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  249. data/lib/blacklight/solr.rb +7 -0
  250. data/lib/blacklight/version.rb +1 -0
  251. data/lib/blacklight.rb +26 -14
  252. data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
  253. data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
  254. data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
  255. data/lib/generators/blacklight/assets_generator.rb +13 -86
  256. data/lib/generators/blacklight/controller_generator.rb +4 -3
  257. data/lib/generators/blacklight/document_generator.rb +1 -0
  258. data/lib/generators/blacklight/install_generator.rb +4 -3
  259. data/lib/generators/blacklight/models_generator.rb +1 -0
  260. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  261. data/lib/generators/blacklight/solr_generator.rb +1 -1
  262. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  263. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
  264. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  265. data/lib/generators/blacklight/user_generator.rb +7 -9
  266. data/lib/railties/blacklight.rake +6 -7
  267. data/package.json +10 -13
  268. data/rollup.config.js +27 -0
  269. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  270. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  271. data/spec/components/blacklight/document_component_spec.rb +22 -131
  272. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  273. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  274. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  275. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  276. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  277. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  278. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  279. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  280. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  281. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  282. data/spec/controllers/catalog_controller_spec.rb +13 -135
  283. data/spec/features/advanced_search_spec.rb +0 -56
  284. data/spec/features/autocomplete_spec.rb +1 -1
  285. data/spec/features/axe_spec.rb +1 -6
  286. data/spec/features/bookmarks_spec.rb +1 -1
  287. data/spec/features/facets_spec.rb +6 -4
  288. data/spec/features/search_context_spec.rb +5 -11
  289. data/spec/features/search_results_spec.rb +0 -33
  290. data/spec/features/sitelinks_search_box.rb +13 -0
  291. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  292. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  293. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  294. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  295. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  296. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  297. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  298. data/spec/helpers/catalog_helper_spec.rb +7 -118
  299. data/spec/i18n_spec.rb +1 -0
  300. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  301. data/spec/lib/blacklight/component_spec.rb +27 -32
  302. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  303. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  304. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  305. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  306. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  307. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  308. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  309. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  310. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  311. data/spec/models/blacklight/configuration_spec.rb +17 -51
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  313. data/spec/models/blacklight/icon_spec.rb +31 -15
  314. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  315. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  316. data/spec/models/blacklight/solr/repository_spec.rb +0 -45
  317. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  318. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  319. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  320. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  321. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  322. data/spec/models/blacklight/user_spec.rb +22 -0
  323. data/spec/models/solr_document_spec.rb +3 -9
  324. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  325. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  326. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  327. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  328. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  329. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  330. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  331. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  333. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  334. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  335. data/spec/requests/load_suggestions_spec.rb +16 -0
  336. data/spec/routing/catalog_routing_spec.rb +2 -1
  337. data/spec/services/blacklight/search_service_spec.rb +39 -76
  338. data/spec/spec_helper.rb +8 -9
  339. data/spec/support/controller_level_helpers.rb +1 -2
  340. data/spec/support/features/search_helpers.rb +39 -0
  341. data/spec/support/features/session_helpers.rb +1 -0
  342. data/spec/support/features.rb +3 -0
  343. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  344. data/spec/test_app_templates/Gemfile.extra +1 -0
  345. data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
  346. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  347. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  348. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  349. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  350. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  351. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  352. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  353. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  354. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  355. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  356. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  357. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  358. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  360. data/tasks/blacklight.rake +11 -9
  361. data/template.demo.rb +7 -7
  362. metadata +77 -189
  363. data/.babelrc +0 -11
  364. data/.github/matrix.json +0 -62
  365. data/.github/workflows/build.yml +0 -16
  366. data/.github/workflows/lint.yml +0 -23
  367. data/.github/workflows/main.yml +0 -23
  368. data/.github/workflows/test.yml +0 -53
  369. data/app/assets/images/blacklight/list.svg +0 -1
  370. data/app/assets/images/blacklight/search.svg +0 -1
  371. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  372. data/app/components/blacklight/content_areas_shim.rb +0 -13
  373. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  374. data/app/components/blacklight/search/per_page_component.rb +0 -50
  375. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  376. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  377. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  378. data/app/controllers/concerns/blacklight/base.rb +0 -12
  379. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  380. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  381. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  382. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  383. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  384. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  385. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  386. data/app/javascript/blacklight/autocomplete.js +0 -36
  387. data/app/javascript/blacklight/facet_load.js +0 -22
  388. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  389. data/app/views/catalog/_constraints_element.html.erb +0 -14
  390. data/app/views/catalog/_document_action.html.erb +0 -5
  391. data/app/views/catalog/_facet_group.html.erb +0 -5
  392. data/app/views/catalog/_facet_limit.html.erb +0 -3
  393. data/app/views/catalog/_index.html.erb +0 -1
  394. data/app/views/catalog/_index_header.html.erb +0 -22
  395. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  396. data/app/views/catalog/_show.html.erb +0 -6
  397. data/app/views/catalog/_show_header.html.erb +0 -2
  398. data/app/views/catalog/_thumbnail.html.erb +0 -1
  399. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  400. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  401. data/spec/components/blacklight/header_component_spec.rb +0 -20
  402. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  403. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  404. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  405. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  406. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  407. data/spec/features/citation_spec.rb +0 -10
  408. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  409. data/spec/features/sms_spec.rb +0 -12
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  416. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  417. data/spec/support/view_component_test_helpers.rb +0 -35
  418. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  419. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  420. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  421. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  422. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  423. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  424. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  425. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -4,7 +4,7 @@ xml.instruct! :xml, version: "1.0"
4
4
  xml.rss(version: "2.0") {
5
5
  xml.channel {
6
6
  xml.title(t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name))
7
- xml.link(search_action_url(params.to_unsafe_h))
7
+ xml.link(search_action_url(search_state.to_h.merge(only_path: false)))
8
8
  xml.description(t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name))
9
9
  xml.language('en-us')
10
10
  @response.documents.each_with_index do |document, document_counter|
@@ -8,5 +8,5 @@ xml.OpenSearchDescription(xmlns: 'http://a9.com/-/spec/opensearch/1.1/') {
8
8
  xml.Contact
9
9
  xml.Url type: 'text/html', method: 'get', template: "#{url_for controller: 'catalog', only_path: false}?q={searchTerms}&page={startPage?}"
10
10
  xml.Url type: 'application/rss+xml', method: 'get', template: "#{url_for controller: 'catalog', only_path: false}.rss?q={searchTerms}&page={startPage?}"
11
- xml.Url type: 'application/x-suggestions+json', method: 'get', template: "#{url_for controller: 'catalog',action: 'opensearch', format: 'json', only_path: false}?q={searchTerms}"
11
+ xml.Url type: 'application/x-suggestions+json', method: 'get', template: "#{url_for controller: 'catalog', action: 'opensearch', format: 'json', only_path: false}?q={searchTerms}"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.with_title { t('blacklight.sms.form.title') } %>
2
+ <% component.title { t('blacklight.sms.form.title') } %>
3
3
 
4
- <% component.with_body do %>
4
+ <% component.body do %>
5
5
  <%= render 'sms_form' %>
6
6
  <% end %>
7
7
  <% end %>
@@ -1,6 +1,5 @@
1
- <%= render Blacklight::System::ModalComponent.new do |component| %>
2
- <% component.title { t('blacklight.sms.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>
@@ -0,0 +1,3 @@
1
+ <% @suggestions.each do |suggestion| %>
2
+ <li role="option"><span><%= suggestion['term'] %></span></li>
3
+ <% end %>
@@ -11,8 +11,9 @@
11
11
 
12
12
  <li class="page-item <%= 'active' if page.current? %>">
13
13
  <% if page.current? %>
14
- <span class="page-link" aria-current="page"><%= page_display %><span class="sr-only visually-hidden"> <%= t('views.pagination.aria.current_page', page: page_display) %></span></span>
14
+ <span class="page-link" aria-label="<%= t('views.pagination.aria.current_page', page: page_display) %>" aria-current="true"><%= page_display %></span>
15
15
  <% else %>
16
16
  <%= link_to page_display, url, :remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil, class: 'page-link', aria: { label: t('views.pagination.aria.go_to_page', page: page_display) } %>
17
17
  <% end %>
18
18
  </li>
19
+
@@ -14,11 +14,22 @@
14
14
  </script>
15
15
  <%= opensearch_description_tag application_name, opensearch_catalog_url(format: 'xml') %>
16
16
  <%= favicon_link_tag %>
17
- <%= stylesheet_link_tag "application", media: "all", "data-turbo-track": "reload" %>
18
- <%= javascript_include_tag "application", "data-turbo-track": "reload" %>
17
+ <%= stylesheet_link_tag "application", media: "all", "data-turbo-track": "reload" %>
18
+ <%= stylesheet_link_tag "https://ga.jspm.io/npm:dialog-polyfill@0.5.6/dist/dialog-polyfill.css" %>
19
+ <% if defined? Importmap %>
20
+ <%= javascript_importmap_tags %>
21
+ <% elsif defined? Propshaft %>
22
+ <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
23
+ <% else %>
24
+ <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
25
+ <%= javascript_include_tag "blacklight/blacklight", type: 'module' %>
26
+ <% end %>
19
27
 
20
28
  <%= csrf_meta_tags %>
21
29
  <%= content_for(:head) %>
30
+ <script type="module">
31
+ import githubAutoCompleteElement from 'https://cdn.skypack.dev/@github/auto-complete-element';
32
+ </script>
22
33
  </head>
23
34
  <body class="<%= render_body_class %>">
24
35
  <nav id="skip-link" role="navigation" aria-label="<%= t('blacklight.skip_links.label') %>">
@@ -7,8 +7,12 @@
7
7
  <% else %>
8
8
  <%= link_to t('blacklight.search_history.clear.action_title'),
9
9
  blacklight.clear_search_history_path,
10
- method: :delete,
11
- data: { confirm: t('blacklight.search_history.clear.action_confirm') },
10
+ method: :delete, # for rails-ujs
11
+ data: {
12
+ confirm: t('blacklight.search_history.clear.action_confirm'), # for rails-ujs
13
+ turbo_confirm: t('blacklight.search_history.clear.action_confirm'),
14
+ turbo_method: :delete
15
+ },
12
16
  class: 'btn btn-danger float-md-right float-md-end' %>
13
17
  <h2 class='section-heading'><%= t('blacklight.search_history.recent') %></h2>
14
18
  <table class="table table-striped search-history">
@@ -1,6 +1,6 @@
1
1
  <div class="row">
2
2
  <div class="col-md-12">
3
- <div id="main-flashes" class="<%= class_names(container: blacklight_config&.full_width_layout) %>">
3
+ <div id="main-flashes">
4
4
  <%= yield %>
5
5
  </div>
6
6
  </div>
@@ -1,6 +1,6 @@
1
- <div id="blacklight-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true" data-turbo="false">
2
- <div class="modal-dialog modal-lg" role="document">
1
+ <dialog id="blacklight-modal" class="modal" data-turbo="false">
2
+ <div class="modal-dialog modal-lg">
3
3
  <div class="modal-content">
4
4
  </div>
5
5
  </div>
6
- </div>
6
+ </dialog>
data/blacklight.gemspec CHANGED
@@ -25,31 +25,27 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.required_ruby_version = '>= 2.7'
27
27
 
28
- s.add_dependency "rails", '>= 6.1', '< 8.1'
28
+ s.add_dependency "rails", '>= 6.1', '< 8'
29
29
  s.add_dependency "globalid"
30
30
  s.add_dependency "jbuilder", '~> 2.7'
31
31
  s.add_dependency "kaminari", ">= 0.15" # the pagination (page 1,2,3, etc..) of our search results
32
- s.add_dependency "deprecation"
33
32
  s.add_dependency "i18n", '>= 1.7.0' # added named parameters
34
33
  s.add_dependency "ostruct", '>= 0.3.2'
35
- s.add_dependency "view_component", '>= 2.74', '< 4'
36
- s.add_dependency 'hashdiff'
37
- s.add_dependency "zeitwerk"
34
+ s.add_dependency "view_component", '~> 2.66'
38
35
 
39
36
  s.add_development_dependency "rsolr", ">= 1.0.6", "< 3" # Library for interacting with rSolr.
40
- s.add_development_dependency "rspec-rails", ">= 6.0" # some versions tested need >= 6.0
37
+ s.add_development_dependency "rspec-rails", "~> 6.0"
41
38
  s.add_development_dependency "rspec-collection_matchers", ">= 1.0"
42
39
  s.add_development_dependency 'axe-core-rspec'
43
40
  s.add_development_dependency "capybara", '~> 3'
41
+ s.add_development_dependency 'webdrivers'
44
42
  s.add_development_dependency 'selenium-webdriver'
45
43
  s.add_development_dependency 'engine_cart', '~> 2.1'
46
44
  s.add_development_dependency "equivalent-xml"
47
45
  s.add_development_dependency "simplecov"
48
- s.add_development_dependency "rubocop", '~> 1.66'
49
- s.add_development_dependency "rubocop-capybara", '~> 2.21'
50
- s.add_development_dependency "rubocop-rails", '~> 2.6'
51
- s.add_development_dependency "rubocop-rspec", '~> 3.0'
52
- s.add_development_dependency "rubocop-rspec_rails", '~> 2.30'
46
+ s.add_development_dependency "rubocop", '~> 1.0'
47
+ s.add_development_dependency "rubocop-rails"
48
+ s.add_development_dependency "rubocop-rspec"
53
49
  s.add_development_dependency "i18n-tasks"
54
50
  s.add_development_dependency "solr_wrapper"
55
51
  end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ pin_all_from File.expand_path("../app/javascript/blacklight", __dir__)
@@ -154,7 +154,6 @@ ar:
154
154
  search_constraints_header: 'قيود البحث'
155
155
  search_results: 'نتائج البحث'
156
156
  errors:
157
- request_error: "معذرة، لم أفهم ما تبحث عنه."
158
157
  invalid_solr_id: "معذرة! لقد طلبت سجلًا غير موجود."
159
158
  per_page:
160
159
  label: '%{count}<span class="sr-only visually-hidden"> لكل صفحة</span>'
@@ -144,7 +144,6 @@ ca:
144
144
  search_constraints_header: 'Filtres de la cerca'
145
145
  search_results: 'Resultats de la cerca'
146
146
  errors:
147
- request_error: "No ha estat possible entendre la cerca"
148
147
  invalid_solr_id: "El registre que heu sol·licitat no existeix."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> per pàgina</span>'
@@ -144,7 +144,6 @@ de:
144
144
  search_constraints_header: 'Suchen'
145
145
  search_results: 'Suchergebnisse'
146
146
  errors:
147
- request_error: "Entschuldigung, ich habe Ihre Suche nicht verstanden."
148
147
  invalid_solr_id: "Entschuldigung, Sie haben einen nicht vorhandenen Datensatz angefordert."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> pro Seite</span>'
@@ -144,7 +144,6 @@ en:
144
144
  search_constraints_header: 'Search Constraints'
145
145
  search_results: 'Search Results'
146
146
  errors:
147
- request_error: "Sorry, I don't understand your search."
148
147
  invalid_solr_id: "Sorry, you have requested a record that doesn't exist."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> per page</span>'
@@ -249,7 +248,6 @@ en:
249
248
  more_options: More options
250
249
  any_of: 'Any of:'
251
250
  op:
252
- label: search operator
253
251
  must: all
254
252
  should: any
255
253
  page_title: Advanced search - %{application_name}
@@ -144,7 +144,6 @@ es:
144
144
  search_constraints_header: 'Buscar'
145
145
  search_results: 'Resultados de la búsqueda'
146
146
  errors:
147
- request_error: "Lo siento, no entiendo esta búsqueda"
148
147
  invalid_solr_id: "Lo sentimos, usted ha solicitado un registro que no existe."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> por página</span>'
@@ -147,7 +147,6 @@ fr:
147
147
  search_constraints_header: 'Recherche'
148
148
  search_results: 'Résultats de recherche'
149
149
  errors:
150
- request_error: "Pardon, nous n'avons pas compris votre recherche."
151
150
  invalid_solr_id: "Vous avez demandé une notice qui n'existe pas."
152
151
  per_page:
153
152
  label: '%{count}<span class="sr-only visually-hidden"> par page</span>'
@@ -144,7 +144,6 @@ hu:
144
144
  search_constraints_header: 'Keresés feltételei'
145
145
  search_results: 'Keresés eredményei'
146
146
  errors:
147
- request_error: "Elnézést, nem tudom értelmezni a keresést."
148
147
  invalid_solr_id: "Elnézést, de az Ön által kért rekord nem létezik."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> oldalanként</span>'
@@ -144,7 +144,6 @@ it:
144
144
  search_constraints_header: 'Ricerca'
145
145
  search_results: 'Risultati della ricerca'
146
146
  errors:
147
- request_error: "La richiesta non è comprensibile."
148
147
  invalid_solr_id: "Il numero di scheda richiesto non esiste."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> per pagina</span>'
@@ -144,7 +144,6 @@ nl:
144
144
  search_constraints_header: 'Zoek filters'
145
145
  search_results: 'Zoek resultaten'
146
146
  errors:
147
- request_error: "Sorry, ik kon uw zoekopdracht niet begrijpen."
148
147
  invalid_solr_id: "Sorry, u vroeg een onbestaande record op."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> per pagina</span>'
@@ -145,7 +145,6 @@ pt-BR:
145
145
  search_constraints_header: 'Busca'
146
146
  search_results: 'Resultados da Busca'
147
147
  errors:
148
- request_error: "Desculpe, Eu não compreendi sua busca."
149
148
  invalid_solr_id: "Desculpe, você solicitou um cadastro que não existe."
150
149
  per_page:
151
150
  label: '%{count}<span class="hide-text"> por página</span>'
@@ -144,7 +144,6 @@ sq:
144
144
  search_constraints_header: 'Kufizimet e kërkimit'
145
145
  search_results: 'Rezultatet e kërkimit'
146
146
  errors:
147
- request_error: "Na vjen keq, unë nuk e kuptoj kërkimin tuaj."
148
147
  invalid_solr_id: "Na vjen keq, ju keni kërkuar një të dhënë që nuk ekziston."
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> për faqe</span>'
@@ -144,7 +144,6 @@ zh:
144
144
  search_constraints_header: '搜索条件'
145
145
  search_results: '搜索结果'
146
146
  errors:
147
- request_error: "抱歉,我不明白你要找什么。"
148
147
  invalid_solr_id: "抱歉,你要找的结果不存在。"
149
148
  per_page:
150
149
  label: '%{count}<span class="sr-only visually-hidden"> 每页</span>'
data/config/routes.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Blacklight::Engine.routes.draw do
3
- get "search_history", to: "search_history#index", as: "search_history"
4
- delete "search_history/clear", to: "search_history#clear", as: "clear_search_history"
4
+ get "search_history", to: "search_history#index", as: "search_history"
5
+ delete "search_history/clear", to: "search_history#clear", as: "clear_search_history"
5
6
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class CreateSearches < ActiveRecord::Migration[4.2]
3
4
  def self.up
4
5
  create_table :searches do |t|
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class CreateBookmarks < ActiveRecord::Migration[4.2]
3
4
  def self.up
4
5
  create_table :bookmarks do |t|
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  class AddPolymorphicTypeToBookmarks < ActiveRecord::Migration[4.2]
3
4
  def change
4
5
  add_column(:bookmarks, :document_type, :string) unless Bookmark.connection.column_exists? :bookmarks, :document_type
data/docker-compose.yml CHANGED
@@ -1,3 +1,5 @@
1
+ version: "3.7"
2
+
1
3
  services:
2
4
  app:
3
5
  build:
@@ -7,7 +9,7 @@ services:
7
9
  - ALPINE_RUBY_VERSION
8
10
  # mounting . is causing seg-fault on macosx
9
11
  #volumes:
10
- #- .:/app
12
+ #- .:/app
11
13
  depends_on:
12
14
  - solr
13
15
  ports:
@@ -15,7 +17,6 @@ services:
15
17
  environment:
16
18
  - SOLR_URL # Set via environment variable or use default defined in .env file
17
19
  - RAILS_VERSION # Set via environment variable or use default defined in .env file
18
- - VIEW_COMPONENT_VERSION # Set via environment variable or use default defined in .env file
19
20
  - SOLR_ENV=docker-compose
20
21
  - ENGINE_CART_RAILS_OPTIONS=--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test --skip-solr
21
22
 
@@ -23,7 +24,6 @@ services:
23
24
  environment:
24
25
  - SOLR_PORT # Set via environment variable or use default defined in .env file
25
26
  - SOLR_VERSION # Set via environment variable or use default defined in .env file
26
- - SOLR_MODULES=analysis-extras
27
27
  image: "solr:${SOLR_VERSION}"
28
28
  volumes:
29
29
  - $PWD/lib/generators/blacklight/templates/solr/conf:/opt/solr/conf
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  # Base class for Blacklight repository adapters
4
5
  class AbstractRepository
@@ -34,12 +35,6 @@ module Blacklight
34
35
  raise NotImplementedError
35
36
  end
36
37
 
37
- # Find multiple documents by their ids
38
- # @param [Hash] _params query parameters
39
- def find_many(params, **kwargs)
40
- search(params, **kwargs)
41
- end
42
-
43
38
  ##
44
39
  # Execute a search query against a search index
45
40
  # @param [Hash] _params query parameters
@@ -3,20 +3,57 @@
3
3
  module Blacklight
4
4
  class Component < ViewComponent::Base
5
5
  class << self
6
- alias upstream_sidecar_files sidecar_files
6
+ # Workaround for https://github.com/ViewComponent/view_component/issues/1565
7
+ def config
8
+ @config ||= ViewComponent::Config.defaults.merge(ViewComponent::Base.config)
9
+ end
7
10
 
8
- def reset_compiler!
9
- @__vc_compiler = nil
11
+ # rubocop:disable Naming/MemoizedInstanceVariableName
12
+ def compiler
13
+ @__vc_compiler ||= EngineCompiler.new(self)
10
14
  end
15
+ # rubocop:enable Naming/MemoizedInstanceVariableName
16
+
17
+ alias sidecar_files _sidecar_files unless ViewComponent::Base.respond_to? :sidecar_files
18
+ end
19
+
20
+ EXCLUDE_VARIABLES = [
21
+ :@lookup_context, :@view_renderer, :@view_flow, :@view_context,
22
+ :@tag_builder, :@current_template,
23
+ :@__vc_set_slots, :@__vc_original_view_context,
24
+ :@__vc_variant, :@__vc_content_evaluated,
25
+ :@__vc_render_in_block, :@__vc_content, :@__vc_helpers
26
+ ].freeze
27
+
28
+ def inspect
29
+ # Exclude variables added by render_in
30
+ render_variables = instance_variables - EXCLUDE_VARIABLES
31
+ fields = render_variables.map { |ivar| "#{ivar}:#{instance_variable_get(ivar).inspect}" }.join(', ')
32
+ "#<#{self.class.name}:#{object_id} #{fields}>"
33
+ end
34
+
35
+ class EngineCompiler < ::ViewComponent::Compiler
36
+ # ViewComponent::Compiler locates and caches templates from sidecar files to the component source file.
37
+ # While this is sensible in a Rails application, it prevents component templates defined in an Engine
38
+ # from being overridden by an installing application without subclassing the component, which may also
39
+ # require modifying any partials rendering the component. This subclass of compiler overrides the template
40
+ # location algorithm to take the sidecar file names from the Engine, but look to see if a file of the
41
+ # same name existing in the installing application (ie, under Rails.root). If the latter exists, this
42
+ # compiler will cache that template instead of the engine-defined file; if not, the compiler will fall
43
+ # back to the engine-defined file.
44
+ def templates
45
+ @templates ||= begin
46
+ extensions = ActionView::Template.template_handler_extensions
11
47
 
12
- def sidecar_files(*args, **kwargs)
13
- upstream_sidecar_files(*args, **kwargs).map do |path|
14
- app_path = Rails.root.join(path.slice(path.index(view_component_path)..-1).to_s).to_s
48
+ component_class.sidecar_files(extensions).each_with_object([]) do |path, memo|
49
+ pieces = File.basename(path).split(".")
50
+ app_path = "#{Rails.root}/#{path.slice(path.index(component_class.view_component_path)..-1)}"
15
51
 
16
- if File.exist?(app_path)
17
- app_path
18
- else
19
- path
52
+ memo << {
53
+ path: File.exist?(app_path) ? app_path : path,
54
+ variant: pieces.second.split("+").second&.to_sym,
55
+ handler: pieces.last
56
+ }
20
57
  end
21
58
  end
22
59
  end
@@ -28,12 +28,12 @@ module Blacklight
28
28
  return config if config == true || config == false
29
29
 
30
30
  if_value = !config.respond_to?(:if) ||
31
- config.if.nil? ||
32
- evaluate_configuration_conditional(config.if, config, *args)
31
+ config.if.nil? ||
32
+ evaluate_configuration_conditional(config.if, config, *args)
33
33
 
34
34
  unless_value = !config.respond_to?(:unless) ||
35
- config.unless.nil? ||
36
- !evaluate_configuration_conditional(config.unless, config, *args)
35
+ config.unless.nil? ||
36
+ !evaluate_configuration_conditional(config.unless, config, *args)
37
37
 
38
38
  if_value && unless_value
39
39
  end
@@ -1,6 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class Configuration::DisplayField < Blacklight::Configuration::Field
5
+ def initialize(*args, **kwargs, &block)
6
+ super
7
+
8
+ self.presenter ||= Blacklight::FieldPresenter
9
+ self.component ||= Blacklight::MetadataFieldComponent
10
+ end
4
11
  ##
5
12
  # The following is a non-exhaustive list of display field config parameters that are used
6
13
  # by Blacklight directly. Application-specific code or plugins may add or replace
@@ -33,18 +40,9 @@ module Blacklight
33
40
  # Default rendering pipeline:
34
41
  # @!attribute link_to_facet
35
42
  # @return [Boolean]
36
- # @!attribute link_to_search
37
- # @deprecated use link_to_facet instead.
38
- # @return [Boolean]
39
43
  # @!attribute itemprop
40
44
  # @return [String]
41
45
  # @!attribute separator_options
42
46
  # @return [Hash]
43
-
44
- # @param [Blacklight::Configuration] _blacklight_config
45
- def normalize! _blacklight_config = nil
46
- super
47
- self.presenter ||= Blacklight::FieldPresenter
48
- end
49
47
  end
50
48
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class Configuration::FacetField < Blacklight::Configuration::Field
4
5
  ##
@@ -19,9 +20,6 @@ module Blacklight
19
20
  # @return [Symbol|Hash] the i18n localization option for a date or time value; used as the second parameter for the I18n.l method
20
21
  # @!attribute link_to_facet
21
22
  # @return [Boolean]
22
- # @!attribute link_to_search
23
- # @deprecated use link_to_facet instead.
24
- # @return [Boolean]
25
23
  # @!attribute helper_method
26
24
  # @return [Symbol] the name of a helper method used to display the facet's value to the user; it receives the facet value.
27
25
  # @!attribute url_method
@@ -67,22 +65,20 @@ module Blacklight
67
65
  # @!attribute partial
68
66
  # @return [String] Rails view partial used to render the facet field
69
67
 
70
- extend Deprecation
71
-
68
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
72
69
  def normalize! blacklight_config = nil
73
70
  query.stringify_keys! if query
74
71
 
72
+ normalize_pivot_config! if pivot
75
73
  self.collapse = true if collapse.nil?
76
74
  self.show = true if show.nil?
77
75
  self.if = show if self.if.nil?
78
76
  self.index_range = 'A'..'Z' if index_range == true
79
77
  self.presenter ||= Blacklight::FacetFieldPresenter
80
-
81
- if link_to_search
82
- Deprecation.warn(Blacklight::Configuration::FacetField, '`link_to_search:` is deprecated, use `link_to_facet:` instead')
83
- self.link_to_facet = link_to_search if link_to_facet.nil?
84
- end
85
-
78
+ self.item_presenter ||= Blacklight::FacetItemPresenter
79
+ self.component = Blacklight::FacetFieldListComponent if component.nil? || component == true
80
+ self.advanced_search_component ||= Blacklight::FacetFieldCheckboxesComponent
81
+ self.item_component ||= Blacklight::FacetItemComponent
86
82
  super
87
83
 
88
84
  if single && tag.blank? && ex.blank?
@@ -92,5 +88,15 @@ module Blacklight
92
88
 
93
89
  self
94
90
  end
91
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
92
+
93
+ private
94
+
95
+ def normalize_pivot_config!
96
+ self.item_presenter ||= Blacklight::FacetItemPivotPresenter
97
+ self.item_component ||= Blacklight::FacetItemPivotComponent
98
+ self.filter_class ||= Blacklight::SearchState::PivotFilterField
99
+ self.filter_query_builder ||= Blacklight::SearchState::PivotFilterField::QueryBuilder
100
+ end
95
101
  end
96
102
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class Configuration::Field < OpenStructWithHashAccess
4
5
  # @!attribute field
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class Configuration
4
5
  # This mixin provides Blacklight::Configuration with generic
5
6
  # solr fields configuration
6
7
  module Fields
7
8
  extend ActiveSupport::Concern
8
- extend Deprecation
9
- self.deprecation_horizon = 'blacklight version 8.0.0'
10
9
 
11
10
  class_methods do
12
11
  # Add a configuration block for a collection of solr fields
@@ -84,20 +83,20 @@ module Blacklight
84
83
  #
85
84
  def add_blacklight_field config_key, *args, &block
86
85
  field_config = case args.first
87
- when String
88
- field_config_from_key_and_hash(config_key, *args)
89
- when Symbol
90
- args[0] = args[0].to_s
91
- field_config_from_key_and_hash(config_key, *args)
92
- when Array
93
- field_config_from_array(config_key, *args, &block)
94
- return # we've iterated over the array above.
95
- else
96
- field_config_from_field_or_hash(config_key, *args)
86
+ when String
87
+ field_config_from_key_and_hash(config_key, *args)
88
+ when Symbol
89
+ args[0] = args[0].to_s
90
+ field_config_from_key_and_hash(config_key, *args)
91
+ when Array
92
+ field_config_from_array(config_key, *args, &block)
93
+ return # we've iterated over the array above.
94
+ else
95
+ field_config_from_field_or_hash(config_key, *args)
97
96
  end
98
97
 
99
98
  if (field_config.field || field_config.key).to_s =~ /\*/
100
- field_config.match = Regexp.new("^" + (field_config.field || field_config.key).to_s.gsub('*', '.+') + "$")
99
+ field_config.match = Regexp.new("^#{(field_config.field || field_config.key).to_s.gsub('*', '.+')}$")
101
100
  end
102
101
 
103
102
  # look up any dynamic fields
@@ -155,8 +154,6 @@ module Blacklight
155
154
 
156
155
  @table[:reflected_fields] || {}
157
156
  end
158
- alias luke_fields reflected_fields
159
- deprecation_deprecate luke_fields: 'use reflected_fields instead'
160
157
 
161
158
  # Add a solr field by a solr field name and hash
162
159
  def field_config_from_key_and_hash config_key, field_name, field_or_hash = {}
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class Configuration::IndexField < Blacklight::Configuration::DisplayField
4
5
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ # Returned if no config is defined for a display field in the Blacklight::Configuration
5
+ class Configuration::NullDisplayField < Blacklight::Configuration::DisplayField
6
+ def initialize(field_or_hash = nil)
7
+ case field_or_hash
8
+ when String, Symbol
9
+ super(field: field_or_hash)
10
+ else
11
+ super
12
+ end
13
+
14
+ normalize!
15
+ end
16
+ end
17
+ end