blacklight 8.11.0 → 9.0.0.beta2

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 (288) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -3
  3. data/.github/matrix.json +11 -42
  4. data/.github/pull_request_template.md +7 -0
  5. data/.github/workflows/main.yml +0 -2
  6. data/.github/workflows/release_7_x_scheduled.yml +39 -0
  7. data/.github/workflows/release_8_x_scheduled.yml +39 -0
  8. data/.github/workflows/test.yml +0 -5
  9. data/.rubocop.yml +71 -3
  10. data/.rubocop_todo.yml +43 -76
  11. data/.solr_wrapper.yml +2 -0
  12. data/README.md +30 -8
  13. data/VERSION +1 -1
  14. data/app/assets/builds/blacklight.css +452 -0
  15. data/app/assets/javascripts/blacklight/blacklight.esm.js +6 -76
  16. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  17. data/app/assets/javascripts/blacklight/blacklight.js +6 -76
  18. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  19. data/app/assets/stylesheets/blacklight/_balanced_list.scss +1 -4
  20. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -3
  21. data/app/assets/stylesheets/blacklight/_bookmark.scss +44 -41
  22. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +0 -25
  23. data/app/assets/stylesheets/blacklight/_constraints.scss +15 -24
  24. data/app/assets/stylesheets/blacklight/_controls.scss +2 -18
  25. data/app/assets/stylesheets/blacklight/_facets.scss +17 -84
  26. data/app/assets/stylesheets/blacklight/_group.scss +2 -5
  27. data/app/assets/stylesheets/blacklight/_header.scss +8 -11
  28. data/app/assets/stylesheets/blacklight/_icons.scss +0 -8
  29. data/app/assets/stylesheets/blacklight/_modal.scss +1 -1
  30. data/app/assets/stylesheets/blacklight/_pagination.scss +0 -4
  31. data/app/assets/stylesheets/blacklight/_search_form.scss +0 -1
  32. data/app/assets/stylesheets/blacklight/_search_history.scss +0 -8
  33. data/app/assets/stylesheets/blacklight/_search_results.scss +1 -15
  34. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +9 -14
  35. data/app/assets/stylesheets/blacklight/build.scss +4 -0
  36. data/app/components/blacklight/advanced_search_form_component.rb +3 -3
  37. data/app/components/blacklight/constraint_component.rb +1 -1
  38. data/app/components/blacklight/constraint_layout_component.html.erb +2 -2
  39. data/app/components/blacklight/constraints_component.html.erb +2 -2
  40. data/app/components/blacklight/constraints_component.rb +3 -3
  41. data/app/components/blacklight/document/bookmark_component.html.erb +3 -3
  42. data/app/components/blacklight/document/bookmark_component.rb +2 -2
  43. data/app/components/blacklight/document/group_component.html.erb +1 -1
  44. data/app/components/blacklight/document/more_like_this_component.rb +2 -2
  45. data/app/components/blacklight/document/page_header_component.rb +1 -1
  46. data/app/components/blacklight/document/sidebar_component.rb +5 -5
  47. data/app/components/blacklight/document/thumbnail_component.html.erb +3 -7
  48. data/app/components/blacklight/document/thumbnail_component.rb +7 -6
  49. data/app/components/blacklight/document_component.rb +12 -16
  50. data/app/components/blacklight/document_title_component.rb +5 -11
  51. data/app/components/blacklight/facet_field_checkboxes_component.rb +2 -20
  52. data/app/components/blacklight/facet_field_component.rb +2 -17
  53. data/app/components/blacklight/facet_field_filter_component.rb +2 -21
  54. data/app/components/blacklight/facet_field_inclusive_constraint_component.rb +4 -25
  55. data/app/components/blacklight/facet_field_list_component.rb +2 -50
  56. data/app/components/blacklight/facet_field_no_layout_component.rb +2 -10
  57. data/app/components/blacklight/facet_item_component.rb +2 -74
  58. data/app/components/blacklight/facet_item_pivot_component.rb +3 -3
  59. data/app/components/blacklight/facets/checkboxes_component.rb +26 -0
  60. data/app/components/blacklight/facets/count_component.rb +23 -0
  61. data/app/components/blacklight/{facet_field_component.html.erb → facets/field_component.html.erb} +4 -4
  62. data/app/components/blacklight/facets/field_component.rb +23 -0
  63. data/app/components/blacklight/facets/filters_component.html.erb +4 -0
  64. data/app/components/blacklight/facets/filters_component.rb +27 -0
  65. data/app/components/blacklight/{facet_field_inclusive_constraint_component.html.erb → facets/inclusive_constraint_component.html.erb} +1 -1
  66. data/app/components/blacklight/facets/inclusive_constraint_component.rb +31 -0
  67. data/app/components/blacklight/{facet_field_filter_component.html.erb → facets/index_navigation_component.html.erb} +1 -1
  68. data/app/components/blacklight/facets/index_navigation_component.rb +32 -0
  69. data/app/components/blacklight/facets/item_component.rb +73 -0
  70. data/app/components/blacklight/facets/list_component.html.erb +11 -0
  71. data/app/components/blacklight/facets/list_component.rb +38 -0
  72. data/app/components/blacklight/facets/no_layout_component.rb +16 -0
  73. data/app/components/blacklight/facets/selected_value_component.rb +29 -0
  74. data/app/components/blacklight/facets/suggest_component.html.erb +12 -0
  75. data/app/components/blacklight/facets/suggest_component.rb +22 -0
  76. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +2 -2
  77. data/app/components/blacklight/response/facet_group_component.html.erb +3 -18
  78. data/app/components/blacklight/response/facet_group_component.rb +11 -23
  79. data/app/components/blacklight/response/facet_toggle_button_component.html.erb +16 -0
  80. data/app/components/blacklight/response/facet_toggle_button_component.rb +14 -0
  81. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  82. data/app/components/blacklight/response/pagination_component.rb +2 -1
  83. data/app/components/blacklight/response/sort_component.rb +1 -0
  84. data/app/components/blacklight/response/view_type_button_component.html.erb +1 -1
  85. data/app/components/blacklight/response/view_type_component.html.erb +1 -1
  86. data/app/components/blacklight/search/per_page_component.html.erb +1 -1
  87. data/app/components/blacklight/search/per_page_component.rb +1 -0
  88. data/app/components/blacklight/search/sidebar_component.html.erb +1 -1
  89. data/app/components/blacklight/search/sidebar_component.rb +1 -1
  90. data/app/components/blacklight/search_bar_component.html.erb +3 -3
  91. data/app/components/blacklight/search_bar_component.rb +2 -2
  92. data/app/components/blacklight/search_button_component.rb +2 -2
  93. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +2 -2
  94. data/app/components/blacklight/search_context/server_applied_params_component.rb +9 -0
  95. data/app/components/blacklight/skip_link_component.html.erb +1 -1
  96. data/app/components/blacklight/skip_link_component.rb +2 -1
  97. data/app/components/blacklight/top_navbar_component.html.erb +2 -2
  98. data/app/controllers/concerns/blacklight/bookmarks.rb +3 -3
  99. data/app/controllers/concerns/blacklight/catalog.rb +9 -23
  100. data/app/controllers/concerns/blacklight/controller.rb +1 -1
  101. data/app/controllers/concerns/blacklight/facetable.rb +34 -0
  102. data/app/controllers/concerns/blacklight/search_context.rb +0 -12
  103. data/app/controllers/concerns/blacklight/searchable.rb +1 -1
  104. data/app/helpers/blacklight/blacklight_helper_behavior.rb +0 -6
  105. data/app/helpers/blacklight/catalog_helper_behavior.rb +0 -10
  106. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -14
  107. data/app/helpers/blacklight/document_helper_behavior.rb +3 -27
  108. data/app/helpers/blacklight/facets_helper_behavior.rb +9 -0
  109. data/app/helpers/blacklight/icon_helper_behavior.rb +3 -11
  110. data/app/helpers/blacklight/layout_helper_behavior.rb +2 -2
  111. data/app/helpers/blacklight/render_partials_helper_behavior.rb +0 -14
  112. data/app/helpers/blacklight/url_helper_behavior.rb +1 -1
  113. data/app/javascript/{blacklight → blacklight-frontend}/bookmark_toggle.js +1 -1
  114. data/app/javascript/{blacklight → blacklight-frontend}/checkbox_submit.js +3 -0
  115. data/app/javascript/{blacklight → blacklight-frontend}/core.js +2 -10
  116. data/app/javascript/{blacklight → blacklight-frontend}/facet_suggest.js +1 -3
  117. data/app/javascript/blacklight-frontend/index.js +16 -0
  118. data/app/javascript/{blacklight → blacklight-frontend}/modal.js +1 -5
  119. data/app/models/concerns/blacklight/document.rb +0 -11
  120. data/app/models/concerns/blacklight/user.rb +1 -1
  121. data/app/models/facet_search_builder.rb +5 -0
  122. data/app/presenters/blacklight/facet_field_presenter.rb +3 -3
  123. data/app/presenters/blacklight/rendering/helper_method.rb +4 -4
  124. data/app/presenters/blacklight/rendering/join.rb +2 -2
  125. data/app/services/blacklight/facet_search_service.rb +44 -0
  126. data/app/services/blacklight/field_retriever.rb +1 -1
  127. data/app/services/blacklight/search_params_yaml_coder.rb +0 -2
  128. data/app/services/blacklight/search_service.rb +6 -6
  129. data/app/values/blacklight/types.rb +2 -2
  130. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +0 -2
  131. data/app/views/bookmarks/index.html.erb +1 -1
  132. data/app/views/catalog/_facet_pivot.html.erb +1 -1
  133. data/app/views/catalog/_home_text.html.erb +2 -2
  134. data/app/views/catalog/_results_pagination.html.erb +2 -5
  135. data/app/views/catalog/_search_results.html.erb +3 -3
  136. data/app/views/catalog/_search_results_header.html.erb +1 -1
  137. data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
  138. data/app/views/catalog/_sort_widget.html.erb +1 -0
  139. data/app/views/catalog/facet.html.erb +4 -6
  140. data/app/views/catalog/show.html.erb +2 -3
  141. data/app/views/kaminari/blacklight/_paginator.html.erb +1 -2
  142. data/app/views/layouts/blacklight/base.html.erb +3 -7
  143. data/app/views/search_history/index.html.erb +0 -2
  144. data/blacklight.gemspec +4 -4
  145. data/config/importmap.rb +1 -1
  146. data/config/locales/blacklight.ar.yml +2 -2
  147. data/config/locales/blacklight.ca.yml +124 -124
  148. data/config/locales/blacklight.de.yml +2 -2
  149. data/config/locales/blacklight.en.yml +14 -14
  150. data/config/locales/blacklight.es.yml +2 -2
  151. data/config/locales/blacklight.fr.yml +2 -2
  152. data/config/locales/blacklight.hu.yml +2 -2
  153. data/config/locales/blacklight.it.yml +1 -1
  154. data/config/locales/blacklight.nl.yml +2 -2
  155. data/config/locales/blacklight.pt-BR.yml +1 -1
  156. data/config/locales/blacklight.sq.yml +2 -2
  157. data/config/locales/blacklight.zh.yml +2 -2
  158. data/lib/blacklight/abstract_repository.rb +2 -2
  159. data/lib/blacklight/abstract_search_builder.rb +154 -0
  160. data/lib/blacklight/configuration/context.rb +3 -3
  161. data/lib/blacklight/configuration/display_field.rb +1 -1
  162. data/lib/blacklight/configuration/facet_field.rb +6 -6
  163. data/lib/blacklight/configuration/field.rb +4 -4
  164. data/lib/blacklight/configuration/fields.rb +3 -4
  165. data/lib/blacklight/configuration/search_field.rb +1 -1
  166. data/lib/blacklight/configuration/view_config.rb +2 -4
  167. data/lib/blacklight/configuration.rb +11 -18
  168. data/lib/blacklight/engine.rb +0 -6
  169. data/lib/blacklight/facet_search_builder.rb +18 -0
  170. data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -1
  171. data/lib/blacklight/open_struct_with_hash_access.rb +5 -5
  172. data/lib/blacklight/search_builder.rb +1 -159
  173. data/lib/blacklight/search_state/filter_field.rb +2 -2
  174. data/lib/blacklight/search_state/pivot_filter_field.rb +4 -4
  175. data/lib/blacklight/solr/abstract_filter_query_builder.rb +77 -0
  176. data/lib/blacklight/solr/default_filter_query_builder.rb +20 -0
  177. data/lib/blacklight/solr/facet_search_builder_behavior.rb +62 -0
  178. data/lib/blacklight/solr/repository.rb +8 -9
  179. data/lib/blacklight/solr/request.rb +1 -7
  180. data/lib/blacklight/solr/response/facets.rb +2 -2
  181. data/lib/blacklight/solr/response/group_response.rb +2 -2
  182. data/lib/blacklight/solr/response/params.rb +0 -4
  183. data/lib/blacklight/solr/response.rb +5 -1
  184. data/lib/blacklight/solr/search_builder_behavior.rb +17 -132
  185. data/lib/blacklight.rb +2 -2
  186. data/lib/generators/blacklight/assets/importmap_generator.rb +6 -24
  187. data/lib/generators/blacklight/assets/propshaft_generator.rb +1 -1
  188. data/lib/generators/blacklight/assets_generator.rb +3 -3
  189. data/lib/generators/blacklight/controller_generator.rb +3 -3
  190. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  191. data/lib/generators/blacklight/templates/.solr_wrapper.yml +2 -0
  192. data/lib/generators/blacklight/templates/catalog_controller.rb +3 -1
  193. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +0 -4
  194. data/lib/generators/blacklight/user_generator.rb +9 -10
  195. data/package.json +15 -5
  196. data/rollup.config.js +1 -1
  197. data/spec/components/blacklight/advanced_search_form_component_spec.rb +18 -22
  198. data/spec/components/blacklight/constraint_layout_component_spec.rb +8 -8
  199. data/spec/components/blacklight/constraints_component_spec.rb +11 -11
  200. data/spec/components/blacklight/document/action_component_spec.rb +21 -17
  201. data/spec/components/blacklight/document/group_component_spec.rb +10 -15
  202. data/spec/components/blacklight/document/page_header_component_spec.rb +35 -28
  203. data/spec/components/blacklight/document/sidebar_component_spec.rb +9 -30
  204. data/spec/components/blacklight/document_component_spec.rb +98 -65
  205. data/spec/components/blacklight/facet_component_spec.rb +12 -8
  206. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +12 -12
  207. data/spec/components/blacklight/{facet_field_checkboxes_component_spec.rb → facets/checkboxes_component_spec.rb} +14 -14
  208. data/spec/components/blacklight/facets/filters_component_spec.rb +36 -0
  209. data/spec/components/blacklight/facets/index_navigation_component_spec.rb +40 -0
  210. data/spec/components/blacklight/{facet_item_component_spec.rb → facets/item_component_spec.rb} +10 -10
  211. data/spec/components/blacklight/{facet_field_list_component_spec.rb → facets/list_component_spec.rb} +24 -24
  212. data/spec/components/blacklight/facets/suggest_component_spec.rb +68 -0
  213. data/spec/components/blacklight/header_component_spec.rb +2 -4
  214. data/spec/components/blacklight/hidden_search_state_component_spec.rb +7 -7
  215. data/spec/components/blacklight/metadata_field_component_spec.rb +17 -15
  216. data/spec/components/blacklight/response/facet_group_component_spec.rb +37 -0
  217. data/spec/components/blacklight/response/pagination_component_spec.rb +1 -1
  218. data/spec/components/blacklight/response/spellcheck_component_spec.rb +1 -1
  219. data/spec/components/blacklight/search_bar_component_spec.rb +5 -5
  220. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +2 -2
  221. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +3 -5
  222. data/spec/components/blacklight/skip_link_component_spec.rb +8 -11
  223. data/spec/components/blacklight/start_over_button_component_spec.rb +4 -4
  224. data/spec/components/blacklight/system/flash_message_component_spec.rb +7 -11
  225. data/spec/controllers/catalog_controller_spec.rb +11 -19
  226. data/spec/features/axe_spec.rb +6 -11
  227. data/spec/features/bookmarks_spec.rb +48 -11
  228. data/spec/features/facets_spec.rb +58 -63
  229. data/spec/features/search_context_spec.rb +1 -2
  230. data/spec/features/search_filters_spec.rb +6 -6
  231. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +0 -9
  232. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +10 -0
  233. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +1 -1
  234. data/spec/lib/blacklight/configuration/facet_field_spec.rb +2 -2
  235. data/spec/models/blacklight/configuration_spec.rb +32 -28
  236. data/spec/models/blacklight/facet_search_builder_spec.rb +19 -0
  237. data/spec/models/blacklight/search_builder_spec.rb +1 -11
  238. data/spec/models/blacklight/solr/default_filter_query_builder_spec.rb +72 -0
  239. data/spec/models/blacklight/solr/document_spec.rb +0 -4
  240. data/spec/models/blacklight/solr/facet_search_builder_behavior_spec.rb +929 -0
  241. data/spec/models/blacklight/solr/repository_spec.rb +31 -29
  242. data/spec/models/blacklight/solr/request_spec.rb +7 -0
  243. data/spec/models/blacklight/solr/response/facets_spec.rb +86 -40
  244. data/spec/models/blacklight/solr/response/group_response_spec.rb +8 -5
  245. data/spec/models/blacklight/solr/response/group_spec.rb +9 -5
  246. data/spec/models/blacklight/solr/response_spec.rb +96 -64
  247. data/spec/models/blacklight/solr/search_builder_behavior_spec.rb +2 -227
  248. data/spec/models/solr_document_spec.rb +5 -1
  249. data/spec/services/blacklight/search_service_spec.rb +5 -26
  250. data/spec/spec_helper.rb +0 -1
  251. data/spec/support/view_component_test_helpers.rb +0 -18
  252. data/spec/views/catalog/facet.html.erb_spec.rb +10 -11
  253. data/spec/views/catalog/index.atom.builder_spec.rb +6 -3
  254. data/spec/views/catalog/index.html.erb_spec.rb +8 -3
  255. data/spec/views/catalog/show.html.erb_spec.rb +1 -0
  256. data/tasks/blacklight.rake +8 -5
  257. metadata +76 -81
  258. data/app/assets/stylesheets/blacklight/_autocomplete.scss +0 -25
  259. data/app/assets/stylesheets/blacklight/_mixins.scss +0 -20
  260. data/app/components/blacklight/facet_field_list_component.html.erb +0 -19
  261. data/app/components/blacklight/icons/legacy_icon_component.rb +0 -30
  262. data/app/components/blacklight/search/facet_suggest_input.html.erb +0 -12
  263. data/app/components/blacklight/search/facet_suggest_input.rb +0 -20
  264. data/app/javascript/blacklight/index.js +0 -18
  265. data/app/javascript/blacklight/modalForm.js +0 -60
  266. data/app/views/catalog/_constraints.html.erb +0 -1
  267. data/app/views/catalog/_facet_index_navigation.html.erb +0 -1
  268. data/app/views/catalog/_facet_layout.html.erb +0 -8
  269. data/app/views/catalog/_facet_pagination.html.erb +0 -1
  270. data/app/views/catalog/_facets.html.erb +0 -5
  271. data/app/views/catalog/_search_form.html.erb +0 -7
  272. data/app/views/catalog/_search_header.html.erb +0 -1
  273. data/app/views/catalog/_show_sidebar.html.erb +0 -3
  274. data/app/views/catalog/_show_tools.html.erb +0 -2
  275. data/app/views/catalog/_start_over.html.erb +0 -1
  276. data/app/views/shared/_header_navbar.html.erb +0 -1
  277. data/lib/generators/blacklight/assets/sprockets_generator.rb +0 -68
  278. data/spec/components/blacklight/document_metadata_component_spec.rb +0 -0
  279. data/spec/components/blacklight/search/facet_suggest_input_spec.rb +0 -57
  280. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +0 -43
  281. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +0 -41
  282. data/spec/views/catalog/_search_header.erb_spec.rb +0 -14
  283. data/spec/views/catalog/_show_sidebar.erb_spec.rb +0 -24
  284. data/spec/views/catalog/_show_tools.html.erb_spec.rb +0 -37
  285. /data/app/components/blacklight/{facet_field_checkboxes_component.html.erb → facets/checkboxes_component.html.erb} +0 -0
  286. /data/app/javascript/{blacklight → blacklight-frontend}/button_focus.js +0 -0
  287. /data/app/javascript/{blacklight → blacklight-frontend}/debounce.js +0 -0
  288. /data/app/javascript/{blacklight → blacklight-frontend}/search_context.js +0 -0
@@ -1,41 +1,32 @@
1
1
  .constraints-container {
2
- @extend .mb-2;
3
2
  display: flex;
4
3
  flex-wrap: wrap;
5
4
  gap: 0.5rem 0.25rem;
6
5
  }
7
6
 
8
7
  .applied-filter {
9
- @extend .mx-1;
8
+ --separator-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'%3e%3cpath fill-rule='evenodd' d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e");
10
9
 
11
10
  .constraint-value {
12
11
  cursor: default;
13
12
  text-overflow: ellipsis;
14
13
  overflow: hidden;
15
14
  white-space: nowrap;
16
-
17
- @media (max-width: breakpoint-min(sm)) {
18
- max-width: breakpoint-min(sm) * 0.5;
19
- }
20
-
21
- @media (min-width: breakpoint-min(sm)) and (max-width: breakpoint-max(sm)) {
22
- max-width: breakpoint-min(sm) * 0.5;
23
- }
24
-
25
- @media (min-width: breakpoint-min(md)) and (max-width: breakpoint-max(md)) {
26
- max-width: breakpoint-min(md) * 0.5;
15
+ max-width: clamp(288px, calc(30vw), 500px);
16
+
17
+ .filter-name:after {
18
+ background-color: var(--bs-btn-color);
19
+ content: "";
20
+ mask: var(--separator-icon);
21
+ mask-repeat: no-repeat;
22
+ display: inline-block;
23
+ height: 1.1rem;
24
+ width: 1.25rem;
25
+ vertical-align: text-bottom;
26
+ margin-right: -0.2rem;
27
+ margin-left: 0.25rem;
28
+ transition: background-color 0.15s ease-in-out;
27
29
  }
28
-
29
- @media (min-width: breakpoint-min(lg)) {
30
- max-width: breakpoint-min(lg) * 0.5;
31
- }
32
- }
33
-
34
- .filter-name:after {
35
- color: $gray-500;
36
- content: "❯";
37
- font-size: 90%;
38
- padding-left: $caret-width;
39
30
  }
40
31
 
41
32
  .remove {
@@ -1,21 +1,10 @@
1
1
  .search-widgets {
2
2
  display: flex;
3
-
4
- > * {
5
- @extend .mx-1;
6
- }
7
3
  }
8
4
 
9
5
  .sort-pagination,
10
6
  .pagination-search-widgets {
11
- border-bottom: $pagination-border-width solid $pagination-border-color;
12
- margin-bottom: 1em;
13
- padding-bottom: 1em;
14
- }
15
-
16
- .pagination-search-widgets {
17
- padding-top: 1px;
18
- padding-bottom: $spacer;
7
+ border-bottom: var(--bs-border-width) solid var(--bs-border-color);
19
8
  }
20
9
 
21
10
  .sort-pagination .dropdown-toggle {
@@ -25,18 +14,13 @@
25
14
  .no-js {
26
15
  .btn-group:focus-within {
27
16
  .dropdown-menu {
28
- @extend .show;
17
+ display: block; /* show menu when tabbing to it, without Javascript */
29
18
  }
30
19
  }
31
20
  }
32
21
 
33
22
  .view-type {
34
23
  display: inline-block;
35
-
36
- .caption {
37
- @extend .sr-only !optional;
38
- @extend .visually-hidden !optional;
39
- }
40
24
  }
41
25
 
42
26
  .modal_form {
@@ -1,18 +1,12 @@
1
1
  .sidenav {
2
- --bl-facet-active-bg: #{$facet-active-bg};
3
- --bl-facet-active-item-color: #{$facet-active-item-color};
4
- --bl-facet-margin-bottom: #{$spacer};
2
+ --bl-facet-active-bg: var(--bs-success);
3
+ --bl-facet-active-item-color: var(--bs-success);
5
4
  --bl-facet-remove-color: var(--bs-secondary-color);
5
+ --bl-facet-remove-hover-color: var(--bs-danger);
6
6
  --bl-facet-label-indent: -15px;
7
7
  --bl-facet-label-padding-left: 15px;
8
-
9
- --bl-facet-limit-body-padding: #{$spacer};
10
-
11
- --bl-facets-smallish-padding: 0.25rem;
12
- --bl-facets-smallish-border: var(--bs-border-width) solid
13
- var(--bs-border-color);
14
- --bl-facets-smallish-margin-bottom: #{$spacer};
15
- --bl-facets-smallish-border-radius: #{$border-radius};
8
+ --bl-facet-header-padding-y: 0.5rem;
9
+ --bl-facet-value-padding-y: 0.2rem;
16
10
 
17
11
  .facet-toggle-button {
18
12
  [data-hide-label] {
@@ -33,34 +27,6 @@
33
27
  }
34
28
  }
35
29
 
36
- .facets-toggleable {
37
- @each $breakpoint in map-keys($grid-breakpoints) {
38
- $next: breakpoint-next($breakpoint, $grid-breakpoints);
39
- $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
40
-
41
- &#{$infix} {
42
- @include media-breakpoint-down($next) {
43
- border: var(--bl-facets-smallish-border);
44
- padding: var(--bl-facets-smallish-padding);
45
- margin-bottom: var(--bl-facets-smallish-margin-bottom);
46
- border-radius: var(--bl-facets-smallish-border-radius);
47
- }
48
- @include media-breakpoint-up($next) {
49
- // scss-lint:disable ImportantRule
50
- .facets-collapse {
51
- display: block !important;
52
- width: 100%;
53
- }
54
- // scss-lint:enable ImportantRule
55
-
56
- .navbar-toggler {
57
- display: none;
58
- }
59
- }
60
- }
61
- }
62
- }
63
-
64
30
  .no-js {
65
31
  @include media-breakpoint-down(lg) {
66
32
  #sidebar {
@@ -88,49 +54,25 @@
88
54
  .facets-header {
89
55
  display: flex;
90
56
  justify-content: space-between;
91
- padding-bottom: 0.5rem;
92
- padding-top: 0.5rem;
57
+ padding-block: var(--bl-facet-header-padding-y);
93
58
  }
94
59
 
95
60
  .facets-heading {
96
- @extend .h4;
97
61
  line-height: inherit;
98
62
  }
99
63
 
100
64
  .facet-limit {
101
- margin-bottom: var(--bl-facet-margin-bottom);
102
-
103
- .card-body {
104
- padding: var(--bl-facet-limit-body-padding);
105
- }
106
-
107
- /* Provide a focus ring on the expand/collapse button */
108
- .btn {
109
- --bs-btn-focus-shadow-rgb: 50, 50, 50;
110
- &:focus-visible {
111
- border-color: var(--bs-btn-hover-border-color);
112
- outline: 0;
113
- box-shadow: var(--bs-btn-focus-box-shadow);
114
- }
115
- }
65
+ --bs-accordion-btn-bg: var(--bs-gray-100);
66
+ --bs-btn-hover-bg: var(--bs-gray-200);
67
+ --bs-accordion-active-bg: var(--bs-accordion-btn-bg);
116
68
  }
117
69
 
118
70
  .facet-limit-active {
119
- border-color: $facet-active-border;
120
-
121
- .card-header {
122
- background-color: var(--bl-facet-active-bg);
123
-
124
- .btn {
125
- @if function-exists(color-contrast) {
126
- color: color-contrast($facet-active-bg);
127
- }
128
-
129
- @if function-exists(color-yiq) {
130
- color: color-yiq($facet-active-bg);
131
- }
132
- }
133
- }
71
+ --bs-accordion-btn-bg: var(--bl-facet-active-bg);
72
+ --bs-btn-hover-bg: var(--bs-accordion-btn-bg);
73
+ --bs-accordion-btn-color: var(--bs-light);
74
+ --bs-btn-hover-color: var(--bs-accordion-btn-color);
75
+ --bs-accordion-active-color: var(--bs-accordion-btn-color);
134
76
  }
135
77
 
136
78
  .facet-values {
@@ -143,9 +85,9 @@
143
85
  li {
144
86
  display: flex;
145
87
  align-items: flex-start;
146
- padding: 3px 0;
88
+ padding-block: var(--bl-facet-value-padding-y);
147
89
 
148
- &[role="treeitem"] {
90
+ &.treeitem {
149
91
  display: block;
150
92
  }
151
93
 
@@ -157,11 +99,10 @@
157
99
  .remove {
158
100
  color: var(--bl-facet-remove-color);
159
101
  font-weight: bold;
160
- padding-left: $spacer * 0.5;
161
102
  text-decoration: none;
162
103
 
163
104
  &:hover {
164
- color: $danger;
105
+ color: var(--bl-facet-remove-hover-color);
165
106
  text-decoration: none;
166
107
  }
167
108
  }
@@ -194,8 +135,6 @@
194
135
  }
195
136
 
196
137
  .facet-field-heading {
197
- @extend .h6;
198
-
199
138
  a {
200
139
  color: inherit;
201
140
  }
@@ -266,9 +205,3 @@ $facet-toggle-height: $facet-toggle-width !default;
266
205
  $facet-toggle-width auto no-repeat;
267
206
  }
268
207
  }
269
-
270
- /* Facet browse pages & modals
271
- -------------------------------------------------- */
272
- .facet-filters:not(:has(*)) {
273
- display: none !important;
274
- }
@@ -1,5 +1,6 @@
1
1
  .group-key {
2
- border-bottom: 1px solid darken($border-color, 60%);
2
+ --bl-border-color: var(--bs-gray-600);
3
+ border-bottom: 1px solid var(--bl-border-color);
3
4
  clear: right;
4
5
  }
5
6
 
@@ -8,7 +9,3 @@
8
9
  border-bottom: 0;
9
10
  }
10
11
  }
11
-
12
- .more-in-group {
13
- float: right;
14
- }
@@ -2,17 +2,19 @@
2
2
  Header bar at top (Bootstrap nav-bar)
3
3
  */
4
4
 
5
+ .navbar.bg-dark {
6
+ --bs-emphasis-color-rgb: 255, 255, 255;
7
+ }
8
+
5
9
  .navbar-logo {
6
10
  /* The main logo image for the Blacklight instance */
7
- @if $logo-image {
8
- background: transparent $logo-image no-repeat top left;
9
- background-size: $logo-width $logo-height;
10
- }
11
- height: $logo-height;
11
+ background: transparent var(--bl-logo-image) no-repeat top left;
12
+ background-size: var(--bl-logo-width) var(--bl-logo-height);
13
+ height: var(--bl-logo-height);
12
14
  overflow: hidden;
13
15
  text-indent: 100%;
14
16
  white-space: nowrap;
15
- width: $logo-width;
17
+ width: var(--bl-logo-width);
16
18
  }
17
19
 
18
20
  .navbar-search {
@@ -26,9 +28,4 @@
26
28
  // This prevents the widget from being squished so the text overflows
27
29
  min-width: 7em;
28
30
  }
29
-
30
- .search-query-form {
31
- @extend .col-md-12;
32
- @extend .col-lg-8;
33
- }
34
31
  }
@@ -1,11 +1,3 @@
1
- .btn.btn-icon {
2
- padding: $btn-padding-y;
3
-
4
- &.btn-sm {
5
- padding: $btn-padding-y-sm;
6
- }
7
- }
8
-
9
1
  .remove .bi {
10
2
  height: 1em;
11
3
  width: 1em;
@@ -15,7 +15,7 @@
15
15
  // app/views/catalog/facet.html.erb may be rendered as a modal or a whole page.
16
16
  // When it's a whole page, don't show the close button.
17
17
  .blacklight-modal-close {
18
- display: none;
18
+ display: none;
19
19
  }
20
20
 
21
21
  // When modal content is rendered outside of a modal, Bootstrap css variables like
@@ -5,10 +5,6 @@
5
5
  padding-left: 0;
6
6
  }
7
7
 
8
- .record-padding {
9
- margin-top: $spacer * .5;
10
- }
11
-
12
8
  .pagination {
13
9
  flex-wrap: wrap;
14
10
  }
@@ -5,7 +5,6 @@
5
5
  }
6
6
 
7
7
  .input-group > .search-autocomplete-wrapper {
8
- @extend .form-control;
9
8
  display: inline-block;
10
9
  flex-grow: 4;
11
10
  padding: 0;
@@ -2,14 +2,6 @@
2
2
  .search-history {
3
3
  --bl-history-filter-name-color: var(--bs-secondary-color);
4
4
 
5
- td {
6
- padding: $spacer;
7
- }
8
-
9
- .constraints-container {
10
- @extend .mb-0;
11
- }
12
-
13
5
  .constraint {
14
6
  padding-inline-end: $spacer;
15
7
  display: block;
@@ -5,28 +5,14 @@
5
5
 
6
6
  .document {
7
7
  display: flex;
8
- border-bottom: 1px dotted $table-border-color;
8
+ border-bottom: 1px dotted var(--bs-border-color);
9
9
  margin-top: var(--bl-results-document-margin-top);
10
10
  padding-top: var(--bl-results-document-padding-top);
11
11
 
12
- .document-title-heading {
13
- @extend h5;
14
- }
15
-
16
12
  .document-main-section {
17
13
  flex-grow: 1;
18
14
  }
19
15
 
20
- // bookmarks checkbox on index, give it some
21
- // lower margin when it collapses
22
- .index-document-functions {
23
- margin-bottom: ($spacer * 1.5);
24
-
25
- @media (min-width: breakpoint-min(sm)) {
26
- margin-bottom: 0;
27
- }
28
- }
29
-
30
16
  .document-thumbnail {
31
17
  flex-grow: 0;
32
18
  margin-bottom: ($spacer * 3);
@@ -1,18 +1,13 @@
1
- /* Warning! If you want to change these, just copy them into your own theme css. But you want to remove the !default, which only will set them if not already set. */
2
-
3
- $logo-image: image_url("blacklight/logo.png") !default;
4
- $logo-width: 150px !default;
5
- $logo-height: 50px !default;
6
-
7
- $facet-active-border: $success !default;
8
- $facet-active-bg: $success !default;
9
- $facet-active-item-color: $success !default;
10
-
11
- /* for compatability with BS < 5.3 */
12
- $body-secondary-color: rgba($body-color, 0.75) !default;
13
-
14
1
  :root {
15
- --bs-secondary-color: #{$body-secondary-color}; /* for compatability with BS < 5.3 */
2
+ --bl-logo-image: url("blacklight/logo.png");
3
+ --bl-logo-width: 150px;
4
+ --bl-logo-height: 50px;
5
+ --bs-secondary-color: rgba(
6
+ 33,
7
+ 37,
8
+ 41,
9
+ 0.75
10
+ ); /* for compatability with BS < 5.3 */
16
11
 
17
12
  --bl-main-padding-y: 0.5rem;
18
13
 
@@ -0,0 +1,4 @@
1
+ @import "bootstrap/scss/functions";
2
+ @import "bootstrap/scss/mixins/breakpoints";
3
+ @import "bootstrap/scss/variables";
4
+ @import "blacklight";
@@ -11,8 +11,8 @@ module Blacklight
11
11
  component.new(facet_field: presenter, **kwargs)
12
12
  end)
13
13
 
14
- def initialize(response:, **options)
15
- super(**options)
14
+ def initialize(response:, **)
15
+ super(**)
16
16
  @response = response
17
17
  end
18
18
 
@@ -24,7 +24,7 @@ module Blacklight
24
24
 
25
25
  def default_operator_menu
26
26
  options_with_labels = [:must, :should].index_by { |op| t(op, scope: 'blacklight.advanced_search.op') }
27
- label_tag(:op, t('blacklight.advanced_search.op.label'), class: 'sr-only visually-hidden') + select_tag(:op, options_for_select(options_with_labels, params[:op]), class: 'input-small')
27
+ label_tag(:op, t('blacklight.advanced_search.op.label'), class: 'visually-hidden') + select_tag(:op, options_for_select(options_with_labels, params[:op]), class: 'input-small')
28
28
  end
29
29
 
30
30
  def sort_fields_select
@@ -4,7 +4,7 @@ module Blacklight
4
4
  class ConstraintComponent < Blacklight::Component
5
5
  with_collection_parameter :facet_item_presenter
6
6
 
7
- def initialize(facet_item_presenter:, classes: 'filter', layout: Blacklight::ConstraintLayoutComponent)
7
+ def initialize(facet_item_presenter:, classes: %w[filter mx-1], layout: Blacklight::ConstraintLayoutComponent)
8
8
  @facet_item_presenter = facet_item_presenter
9
9
  @classes = classes
10
10
  @layout = layout
@@ -9,8 +9,8 @@
9
9
  </span>
10
10
  <% if @remove_path.present? %>
11
11
  <%= link_to(@remove_path, class: 'btn btn-outline-secondary remove') do %>
12
- <%= render Blacklight::Icons::RemoveComponent.new %>
13
- <span class="sr-only visually-hidden"><%= remove_aria_label %></span>
12
+ <%= render Blacklight::Icons::RemoveComponent.new(aria_hidden: true) %>
13
+ <span class="visually-hidden"><%= remove_aria_label %></span>
14
14
  <% end %>
15
15
  <% end %>
16
16
  </span>
@@ -1,12 +1,12 @@
1
1
  <%= content_tag @tag || :div, id: @id, class: @classes do %>
2
2
  <% if @render_headers %>
3
- <h2 class="sr-only visually-hidden"><%= t('blacklight.search.search_constraints_header') %></h2>
3
+ <h2 class="visually-hidden"><%= t('blacklight.search.search_constraints_header') %></h2>
4
4
  <% end %>
5
5
 
6
6
  <%= render @start_over_component.new if @start_over_component %>
7
7
 
8
8
  <% if @render_headers %>
9
- <span class="constraints-label sr-only visually-hidden"><%= t('blacklight.search.filters.title') %></span>
9
+ <span class="constraints-label visually-hidden"><%= t('blacklight.search.filters.title') %></span>
10
10
  <% end %>
11
11
  <% if query_constraints_area.present? %>
12
12
  <% query_constraints_area.each do |constraint| %>
@@ -6,21 +6,21 @@ module Blacklight
6
6
  renders_many :facet_constraints_area
7
7
  renders_many :additional_constraints
8
8
 
9
- def self.for_search_history(**kwargs)
9
+ def self.for_search_history(**)
10
10
  new(tag: :span,
11
11
  render_headers: false,
12
12
  id: nil,
13
13
  query_constraint_component: Blacklight::SearchHistoryConstraintLayoutComponent,
14
14
  facet_constraint_component_options: { layout: Blacklight::SearchHistoryConstraintLayoutComponent },
15
15
  start_over_component: nil,
16
- **kwargs)
16
+ **)
17
17
  end
18
18
 
19
19
  # rubocop:disable Metrics/ParameterLists
20
20
  def initialize(search_state:,
21
21
  tag: :div,
22
22
  render_headers: true,
23
- id: 'appliedParams', classes: 'clearfix constraints-container',
23
+ id: 'appliedParams', classes: 'clearfix constraints-container mb-2',
24
24
  query_constraint_component: Blacklight::ConstraintLayoutComponent,
25
25
  query_constraint_component_options: {},
26
26
  facet_constraint_component: Blacklight::ConstraintComponent,
@@ -8,9 +8,9 @@
8
8
  absent: t('blacklight.search.bookmarks.absent'),
9
9
  inprogress: t('blacklight.search.bookmarks.inprogress')
10
10
  }) do %>
11
- <div class="checkbox toggle-bookmark">
12
- <label class="toggle-bookmark" data-checkboxsubmit-target="label">
13
- <input type="checkbox" class="toggle-bookmark <%= bookmark_icon ? 'd-none' : '' %>" data-checkboxsubmit-target="checkbox" <%= 'checked="checked"' if bookmarked? %>>
11
+ <div class="toggle-bookmark">
12
+ <label class="toggle-bookmark-label" data-checkboxsubmit-target="label">
13
+ <input type="checkbox" class="toggle-bookmark-input <%= bookmark_icon ? 'd-none' : '' %>" data-checkboxsubmit-target="checkbox" <%= 'checked="checked"' if bookmarked? %>>
14
14
  <%= bookmark_icon %>
15
15
  <span data-checkboxsubmit-target="span"><%= bookmarked? ? t('blacklight.search.bookmarks.present') : t('blacklight.search.bookmarks.absent') %></span>
16
16
  </label>
@@ -8,11 +8,11 @@ module Blacklight
8
8
  # @param [Blacklight::Configuration::ToolConfig] action
9
9
  # @param [Boolean] checked
10
10
  # @param [Object] bookmark_path the rails route to use for bookmarks
11
- def initialize(document:, action: nil, checked: nil, bookmark_path: nil, **kwargs)
11
+ def initialize(document:, action: nil, checked: nil, bookmark_path: nil, **)
12
12
  @document = document
13
13
  @checked = checked
14
14
  @bookmark_path = bookmark_path
15
- super(document: document, action: action, **kwargs)
15
+ super(document: document, action: action, **)
16
16
  end
17
17
 
18
18
  def bookmarked?
@@ -4,6 +4,6 @@
4
4
  <%= grouped_documents %>
5
5
  </div>
6
6
  <%- if @group_limit > 0 && @group.total > @group_limit %>
7
- <%= helpers.link_to t('blacklight.search.group.more'), add_group_facet_params_and_redirect(@group), class: 'more-in-group' %>
7
+ <%= helpers.link_to t('blacklight.search.group.more'), add_group_facet_params_and_redirect(@group), class: 'more-in-group float-right' %>
8
8
  <%- end %>
9
9
  </div>
@@ -15,8 +15,8 @@ module Blacklight
15
15
  @document.more_like_this.present?
16
16
  end
17
17
 
18
- def link_to_document(*args)
19
- helpers.link_to_document(*args)
18
+ def link_to_document(*)
19
+ helpers.link_to_document(*)
20
20
  end
21
21
  end
22
22
  end
@@ -40,7 +40,7 @@ module Blacklight
40
40
  end
41
41
 
42
42
  def header_container_classes
43
- has_header_tools? ? 'row pagination-search-widgets pb-2' : 'pagination-search-widgets'
43
+ has_header_tools? ? 'row pagination-search-widgets pb-3 mb-3' : 'pagination-search-widgets pb-3 mb-3'
44
44
  end
45
45
 
46
46
  def header_actions
@@ -16,12 +16,12 @@ module Blacklight
16
16
 
17
17
  private
18
18
 
19
- def render_show_tools
20
- blacklight_config.view_config(:show).show_tools_component&.tap do |show_tools_component_class|
21
- return render show_tools_component_class.new(document: document)
22
- end
19
+ def show_tools_component_class
20
+ blacklight_config.view_config(:show).show_tools_component
21
+ end
23
22
 
24
- render 'show_tools', document: document, silence_deprecation: helpers.partial_from_blacklight?('show_tools')
23
+ def render_show_tools
24
+ render show_tools_component_class.new(document: document)
25
25
  end
26
26
  end
27
27
  end
@@ -1,7 +1,3 @@
1
- <% value = presenter.thumbnail.render(@image_options) %>
2
-
3
- <% if value %>
4
- <div class="document-thumbnail">
5
- <%= helpers.link_to_document(presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
6
- </div>
7
- <% end %>
1
+ <div class="document-thumbnail">
2
+ <%= helpers.link_to_document(presenter.document, thumbnail_value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
3
+ </div>
@@ -9,19 +9,20 @@ module Blacklight
9
9
  # @param [Blacklight::DocumentPresenter] presenter
10
10
  # @param [Integer] counter
11
11
  # @param [Hash] image_options options for the thumbnail presenter's image tag
12
- def initialize(counter:, presenter: nil, document: nil, image_options: {})
12
+ def initialize(counter:, presenter: nil, image_options: {})
13
13
  @presenter = presenter
14
- @document = presenter&.document || document
15
14
  @counter = counter
16
15
  @image_options = { alt: '' }.merge(image_options)
17
16
  end
18
17
 
19
- def render?
20
- presenter.thumbnail.exists?
18
+ attr_accessor :presenter
19
+
20
+ def thumbnail_value
21
+ @thumbnail_value ||= presenter.thumbnail.render(@image_options)
21
22
  end
22
23
 
23
- def presenter
24
- @presenter ||= helpers.document_presenter(@document)
24
+ def render?
25
+ presenter.thumbnail && thumbnail_value
25
26
  end
26
27
  end
27
28
  end