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
data/VERSION CHANGED
@@ -1 +1 @@
1
- 8.11.0
1
+ 9.0.0.beta2
@@ -0,0 +1,452 @@
1
+ /* This is the default blacklight theme. */
2
+ /* This file is generated by Blacklight. You probably don't want to edit
3
+ this file directly, or you'll have to manually merge your changes if later
4
+ versions of Blacklight change this file. Instead, use your own CSS file
5
+ which over-rides things in this file. Or of course you can choose
6
+ not to use the Blacklight CSS file at all in your local app. */
7
+ :root {
8
+ --bl-logo-image: url("blacklight/logo.png");
9
+ --bl-logo-width: 150px;
10
+ --bl-logo-height: 50px;
11
+ --bs-secondary-color: rgba(
12
+ 33,
13
+ 37,
14
+ 41,
15
+ 0.75
16
+ ); /* for compatability with BS < 5.3 */
17
+ --bl-main-padding-y: 0.5rem;
18
+ --bl-constraint-remove-hover-bg: #bb2d3b;
19
+ --bl-constraint-remove-hover-border-color: #bb2d3b;
20
+ --bl-field-name-color: var(--bs-secondary-color);
21
+ /* emulate Bootstrap backdrop bg & opacity */
22
+ --bl-modal-backdrop-bg: rgba(0, 0, 0, 0.5);
23
+ }
24
+
25
+ .page-link {
26
+ white-space: nowrap;
27
+ }
28
+
29
+ dialog.modal[open] {
30
+ display: block;
31
+ background: none;
32
+ border: none;
33
+ max-height: unset;
34
+ max-width: unset;
35
+ }
36
+ dialog.modal[open]::backdrop {
37
+ background-color: var(--bl-modal-backdrop-bg);
38
+ }
39
+
40
+ /* Generic layout stuff */
41
+ main {
42
+ padding-block: var(--bl-main-padding-y);
43
+ }
44
+
45
+ /*
46
+ Header bar at top (Bootstrap nav-bar)
47
+ */
48
+ .navbar.bg-dark {
49
+ --bs-emphasis-color-rgb: 255, 255, 255;
50
+ }
51
+
52
+ .navbar-logo {
53
+ /* The main logo image for the Blacklight instance */
54
+ background: transparent var(--bl-logo-image) no-repeat top left;
55
+ background-size: var(--bl-logo-width) var(--bl-logo-height);
56
+ height: var(--bl-logo-height);
57
+ overflow: hidden;
58
+ text-indent: 100%;
59
+ white-space: nowrap;
60
+ width: var(--bl-logo-width);
61
+ }
62
+
63
+ .navbar-search {
64
+ z-index: 1;
65
+ }
66
+ .navbar-search search {
67
+ display: contents;
68
+ }
69
+ .navbar-search .search-field {
70
+ min-width: 7em;
71
+ }
72
+
73
+ .constraints-container {
74
+ display: flex;
75
+ flex-wrap: wrap;
76
+ gap: 0.5rem 0.25rem;
77
+ }
78
+
79
+ .applied-filter {
80
+ --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");
81
+ }
82
+ .applied-filter .constraint-value {
83
+ cursor: default;
84
+ text-overflow: ellipsis;
85
+ overflow: hidden;
86
+ white-space: nowrap;
87
+ max-width: clamp(288px, 30vw, 500px);
88
+ }
89
+ .applied-filter .constraint-value .filter-name:after {
90
+ background-color: var(--bs-btn-color);
91
+ content: "";
92
+ mask: var(--separator-icon);
93
+ mask-repeat: no-repeat;
94
+ display: inline-block;
95
+ height: 1.1rem;
96
+ width: 1.25rem;
97
+ vertical-align: text-bottom;
98
+ margin-right: -0.2rem;
99
+ margin-left: 0.25rem;
100
+ transition: background-color 0.15s ease-in-out;
101
+ }
102
+ .applied-filter .remove {
103
+ --bs-btn-hover-bg: var(--bl-constraint-remove-hover-bg);
104
+ --bs-btn-hover-border-color: var(--bl-constraint-remove-hover-border-color);
105
+ --bs-btn-active-bg: var(--bl-constraint-remove-hover-bg);
106
+ --bs-btn-active-border-color: var(
107
+ --bl-constraint-remove-hover-border-color
108
+ );
109
+ }
110
+
111
+ .search-widgets {
112
+ display: flex;
113
+ }
114
+
115
+ .sort-pagination,
116
+ .pagination-search-widgets {
117
+ border-bottom: var(--bs-border-width) solid var(--bs-border-color);
118
+ }
119
+
120
+ .sort-pagination .dropdown-toggle {
121
+ cursor: pointer;
122
+ }
123
+
124
+ .no-js .btn-group:focus-within .dropdown-menu {
125
+ display: block; /* show menu when tabbing to it, without Javascript */
126
+ }
127
+
128
+ .view-type {
129
+ display: inline-block;
130
+ }
131
+
132
+ .modal_form {
133
+ margin-bottom: 0;
134
+ }
135
+
136
+ .input-group > .search-q {
137
+ flex-grow: 4;
138
+ }
139
+
140
+ .input-group > .search-autocomplete-wrapper {
141
+ display: inline-block;
142
+ flex-grow: 4;
143
+ padding: 0;
144
+ position: relative;
145
+ }
146
+ .input-group > .search-autocomplete-wrapper .search-q {
147
+ border: 0;
148
+ height: 100%;
149
+ width: 100%;
150
+ }
151
+ .input-group > .search-autocomplete-wrapper ul {
152
+ display: block;
153
+ }
154
+
155
+ .search-btn {
156
+ border-top-left-radius: 0;
157
+ border-bottom-left-radius: 0;
158
+ display: flex;
159
+ }
160
+
161
+ .search-field,
162
+ .search-q {
163
+ scroll-margin: 5rem;
164
+ }
165
+
166
+ .documents-list {
167
+ --bl-results-document-margin-top: 1rem;
168
+ --bl-results-document-padding-top: 1rem;
169
+ }
170
+ .documents-list .document {
171
+ display: flex;
172
+ border-bottom: 1px dotted var(--bs-border-color);
173
+ margin-top: var(--bl-results-document-margin-top);
174
+ padding-top: var(--bl-results-document-padding-top);
175
+ }
176
+ .documents-list .document .document-main-section {
177
+ flex-grow: 1;
178
+ }
179
+ .documents-list .document .document-thumbnail {
180
+ flex-grow: 0;
181
+ margin-bottom: 3rem;
182
+ padding-left: 3rem;
183
+ }
184
+
185
+ .page-links {
186
+ display: inline-block;
187
+ border: 1px solid transparent;
188
+ padding: 0.375rem 0.75rem;
189
+ padding-left: 0;
190
+ }
191
+
192
+ .pagination {
193
+ flex-wrap: wrap;
194
+ }
195
+
196
+ .group-key {
197
+ --bl-border-color: var(--bs-gray-600);
198
+ border-bottom: 1px solid var(--bl-border-color);
199
+ clear: right;
200
+ }
201
+
202
+ .grouped-documents .document {
203
+ border-bottom: 0;
204
+ }
205
+
206
+ .bookmark-toggle {
207
+ --bl-icon-color: var(--bs-primary);
208
+ /* override for line 21.
209
+ Creates weird spacing in toolbar when min-width is set to 8rem */
210
+ }
211
+ .no-js .bookmark-toggle input[type=submit] {
212
+ display: inline;
213
+ }
214
+ .no-js .bookmark-toggle .toggle-bookmark {
215
+ display: none;
216
+ }
217
+ .bookmark-toggle input[type=submit] {
218
+ display: none;
219
+ }
220
+ .bookmark-toggle .toggle-bookmark {
221
+ cursor: pointer;
222
+ }
223
+ .bookmark-toggle .toggle-bookmark .toggle-bookmark-label {
224
+ font-weight: inherit;
225
+ min-width: 8.5em;
226
+ }
227
+ .bookmark-toggle .toggle-bookmark .toggle-bookmark-label .blacklight-icons svg {
228
+ height: 1.25rem;
229
+ width: 1.25rem;
230
+ overflow: visible;
231
+ fill: var(--bl-icon-color);
232
+ }
233
+ .bookmark-toggle .toggle-bookmark .toggle-bookmark-label .blacklight-icons svg.bookmark-checked {
234
+ display: none;
235
+ }
236
+ .bookmark-toggle .toggle-bookmark .toggle-bookmark-input:checked + span svg.bookmark-checked {
237
+ display: inherit;
238
+ }
239
+ .bookmark-toggle .toggle-bookmark .toggle-bookmark-input:checked + span svg.bookmark-unchecked {
240
+ display: none;
241
+ }
242
+ .bookmark-toggle .header-tools .toggle-bookmark-label {
243
+ min-width: 2rem;
244
+ }
245
+
246
+ .dl-invert dt {
247
+ font-weight: normal;
248
+ color: var(--bl-field-name-color);
249
+ }
250
+ @media (min-width: 768px) {
251
+ .dl-invert dt {
252
+ text-align: end;
253
+ }
254
+ }
255
+
256
+ .sidenav {
257
+ --bl-facet-active-bg: var(--bs-success);
258
+ --bl-facet-active-item-color: var(--bs-success);
259
+ --bl-facet-remove-color: var(--bs-secondary-color);
260
+ --bl-facet-remove-hover-color: var(--bs-danger);
261
+ --bl-facet-label-indent: -15px;
262
+ --bl-facet-label-padding-left: 15px;
263
+ --bl-facet-header-padding-y: 0.5rem;
264
+ --bl-facet-value-padding-y: 0.2rem;
265
+ }
266
+ .sidenav .facet-toggle-button [data-hide-label] {
267
+ display: inline;
268
+ }
269
+ .sidenav .facet-toggle-button [data-show-label] {
270
+ display: none;
271
+ }
272
+ .sidenav .facet-toggle-button[aria-expanded=false] [data-hide-label] {
273
+ display: none;
274
+ }
275
+ .sidenav .facet-toggle-button[aria-expanded=false] [data-show-label] {
276
+ display: inline;
277
+ }
278
+
279
+ @media (max-width: 991.98px) {
280
+ .no-js #sidebar {
281
+ order: 6 !important;
282
+ }
283
+ }
284
+ .no-js .facet-content.collapse {
285
+ display: block;
286
+ }
287
+ .no-js .facet-toggle-handle {
288
+ display: none;
289
+ }
290
+ .no-js .pivot-facet.collapse {
291
+ display: block;
292
+ }
293
+ .no-js .facets-collapse.collapse {
294
+ display: block;
295
+ }
296
+
297
+ .facets-header {
298
+ display: flex;
299
+ justify-content: space-between;
300
+ padding-block: var(--bl-facet-header-padding-y);
301
+ }
302
+
303
+ .facets-heading {
304
+ line-height: inherit;
305
+ }
306
+
307
+ .facet-limit {
308
+ --bs-accordion-btn-bg: var(--bs-gray-100);
309
+ --bs-btn-hover-bg: var(--bs-gray-200);
310
+ --bs-accordion-active-bg: var(--bs-accordion-btn-bg);
311
+ }
312
+
313
+ .facet-limit-active {
314
+ --bs-accordion-btn-bg: var(--bl-facet-active-bg);
315
+ --bs-btn-hover-bg: var(--bs-accordion-btn-bg);
316
+ --bs-accordion-btn-color: var(--bs-light);
317
+ --bs-btn-hover-color: var(--bs-accordion-btn-color);
318
+ --bs-accordion-active-color: var(--bs-accordion-btn-color);
319
+ }
320
+
321
+ .facet-values {
322
+ margin-bottom: 0;
323
+ }
324
+ .facet-values a {
325
+ text-decoration: none;
326
+ }
327
+ .facet-values li {
328
+ display: flex;
329
+ align-items: flex-start;
330
+ padding-block: var(--bl-facet-value-padding-y);
331
+ }
332
+ .facet-values li.treeitem {
333
+ display: block;
334
+ }
335
+ .facet-values li .selected {
336
+ color: var(--bl-facet-active-item-color);
337
+ }
338
+ .facet-values .remove {
339
+ color: var(--bl-facet-remove-color);
340
+ font-weight: bold;
341
+ text-decoration: none;
342
+ }
343
+ .facet-values .remove:hover {
344
+ color: var(--bl-facet-remove-hover-color);
345
+ text-decoration: none;
346
+ }
347
+ .facet-values .facet-label {
348
+ hyphens: auto;
349
+ overflow-wrap: break-word;
350
+ padding-left: var(--bl-facet-label-padding-left);
351
+ padding-right: 1em;
352
+ text-indent: var(--bl-facet-label-indent);
353
+ }
354
+ .facet-values .facet-count {
355
+ margin-left: auto;
356
+ }
357
+ .facet-values .facet-checkbox {
358
+ width: 1.25rem;
359
+ }
360
+
361
+ .facet-extended-list .sort-options {
362
+ text-align: right;
363
+ }
364
+ .facet-extended-list .prev-next-links {
365
+ float: left;
366
+ }
367
+
368
+ .facet-field-heading {
369
+ /* This prevents the contained stretch link from covering the panel body */
370
+ position: relative;
371
+ }
372
+ .facet-field-heading a {
373
+ color: inherit;
374
+ }
375
+
376
+ /* Sidenav
377
+ -------------------------------------------------- */
378
+ .pivot-facet.show {
379
+ display: flex;
380
+ }
381
+
382
+ .facet-toggle-handle {
383
+ margin-block: 0;
384
+ padding-block: 0;
385
+ padding-inline: 0.5rem;
386
+ margin-inline-start: -0.75rem;
387
+ }
388
+ .pivot-facet .facet-toggle-handle {
389
+ margin-inline-start: -1.5rem;
390
+ }
391
+ .facet-toggle-handle.collapsed .show {
392
+ display: flex;
393
+ }
394
+ .facet-toggle-handle.collapsed .hide {
395
+ display: none;
396
+ }
397
+ .facet-toggle-handle .show {
398
+ display: none;
399
+ }
400
+ .facet-toggle-handle .hide {
401
+ display: flex;
402
+ }
403
+ .facet-toggle-handle .show .icon,
404
+ .facet-toggle-handle .hide .icon {
405
+ width: 1em;
406
+ height: 1em;
407
+ padding: 0.375rem 0.75rem;
408
+ }
409
+ .facet-toggle-handle .show .icon {
410
+ background: transparent url('data:image/svg+xml,%3csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-square" viewBox="0 0 16 16"%3e%3cpath d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z" /%3e%3cpath d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" /%3e%3c/svg%3e') center/1em auto no-repeat;
411
+ }
412
+ .facet-toggle-handle .hide .icon {
413
+ background: transparent url('data:image/svg+xml,%3csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-dash-square" viewBox="0 0 16 16"%3e%3cpath d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z" /%3e%3cpath d="M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z" /%3e%3c/svg%3e') center/1em auto no-repeat;
414
+ }
415
+
416
+ /* Search History */
417
+ .search-history {
418
+ --bl-history-filter-name-color: var(--bs-secondary-color);
419
+ }
420
+ .search-history .constraint {
421
+ padding-inline-end: 1rem;
422
+ display: block;
423
+ }
424
+ .search-history .filter-name {
425
+ color: var(--bl-history-filter-name-color);
426
+ }
427
+
428
+ .modal-dialog {
429
+ border-radius: 5px;
430
+ }
431
+
432
+ .modal-content .page-sidebar {
433
+ display: none;
434
+ }
435
+ .modal-content .blacklight-modal-close {
436
+ display: block;
437
+ }
438
+
439
+ .blacklight-modal-close {
440
+ display: none;
441
+ }
442
+
443
+ .modal-footer:not(.modal .modal-footer) {
444
+ border-top: var(--bs-border-width) solid var(--bs-border-color);
445
+ padding-top: 1rem;
446
+ margin-top: 1rem;
447
+ }
448
+
449
+ .remove .bi {
450
+ height: 1em;
451
+ width: 1em;
452
+ }
@@ -36,6 +36,9 @@ class CheckboxSubmit {
36
36
  }).then((json) => {
37
37
  this.labelTarget.removeAttribute('disabled');
38
38
  this.checkboxTarget.removeAttribute('disabled');
39
+ // For accessibility return keyboard focus
40
+ // back to the checkbox after form submission
41
+ this.checkboxTarget.focus();
39
42
  this.updateStateFor(!this.checked);
40
43
  this.bookmarksCounter().forEach(counter => {
41
44
  counter.innerHTML = json.bookmarks.count;
@@ -151,8 +154,6 @@ const FacetSuggest = async (e) => {
151
154
  const blob = await response.blob();
152
155
  const text = await blob.text();
153
156
 
154
- const facetArea = document.querySelector('.facet-extended-list');
155
-
156
157
  if (text && facetArea) {
157
158
  facetArea.innerHTML = text;
158
159
  }
@@ -283,7 +284,7 @@ const Modal = (() => {
283
284
  }
284
285
  elements.forEach((el) => frag.appendChild(el));
285
286
  modal.activateScripts(frag);
286
-
287
+
287
288
  modal.target().querySelector('.modal-content').replaceChildren(frag);
288
289
 
289
290
  // send custom event with the modal dialog div as the target
@@ -292,7 +293,6 @@ const Modal = (() => {
292
293
 
293
294
  // if they did preventDefault, don't show the dialog
294
295
  if (e.defaultPrevented) return;
295
-
296
296
  modal.show();
297
297
  };
298
298
 
@@ -377,67 +377,6 @@ const Modal = (() => {
377
377
  return modal;
378
378
  })();
379
379
 
380
- // The email and sms forms are displayed inside a modal. When the form is submitted,
381
- // this script closes the modal and puts the output on the main part of the page.
382
- // By default it is rendering catalog/sms_success and catalog/email_succcess.
383
- // These templates deliver a payload of the format used by turbo-streams.
384
- // See https://turbo.hotwired.dev/handbook/streams
385
- // That format allows a downstream application to override the template to define
386
- // multiple customizable areas of the page to get updated.
387
- class ModalForm {
388
- constructor(errorHandler, badRequestHandler, hideModal) {
389
- this.errorHandler = errorHandler;
390
- this.badRequestHandler = badRequestHandler;
391
- this.hideModal = hideModal;
392
- }
393
-
394
- get triggerFormSelector() {
395
- return 'form[data-blacklight-modal~=trigger]'
396
- }
397
-
398
- bind() {
399
- document.addEventListener('submit', (e) => {
400
- if (e.target.matches(this.triggerFormSelector))
401
- this.onSubmit(e);
402
- });
403
- }
404
-
405
- // This is like a light-weight version of turbo that only supports append presently.
406
- updateTurboStream(data) {
407
- this.hideModal();
408
- const domparser = new DOMParser();
409
- const dom = domparser.parseFromString(data, "text/html");
410
- dom.querySelectorAll("turbo-stream[action='append']").forEach((node) => {
411
- const target = node.getAttribute('target');
412
- const element = document.getElementById(target);
413
- if (element)
414
- element.append(node.querySelector('template').content.cloneNode(true));
415
- else
416
- console.error(`Unable to find an element on the page with and ID of "${target}""`);
417
- });
418
- }
419
-
420
- onSubmit(e) {
421
- e.preventDefault();
422
- const form = e.target;
423
- fetch(form.action, {
424
- body: new FormData(form),
425
- headers: { "X-Requested-With": "XMLHttpRequest" }, // Ensures rails will return true when checking request.xhr?
426
- method: form.method,
427
- })
428
- .then(response => {
429
- if (response.status === 422) {
430
- return response.text().then(content => this.badRequestHandler(content) )
431
- }
432
- if (!response.ok) {
433
- throw new TypeError("Request failed");
434
- }
435
- response.text().then(content => this.updateTurboStream(content));
436
- })
437
- .catch(error => this.errorHandler(error));
438
- }
439
- }
440
-
441
380
  const SearchContext = (e) => {
442
381
  const contextLink = e.target.closest('[data-context-href]');
443
382
  if (contextLink) {
@@ -509,14 +448,6 @@ const Core = function() {
509
448
  const listeners = [];
510
449
  if (typeof Turbo !== 'undefined') {
511
450
  listeners.push('turbo:load', 'turbo:frame-load');
512
- } else if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
513
- // Turbolinks 5
514
- if (Turbolinks.BrowserAdapter) {
515
- listeners.push('turbolinks:load');
516
- } else {
517
- // Turbolinks < 5
518
- listeners.push('page:load', 'DOMContentLoaded');
519
- }
520
451
  } else {
521
452
  listeners.push('DOMContentLoaded');
522
453
  }
@@ -526,8 +457,8 @@ const Core = function() {
526
457
  };
527
458
  }();
528
459
 
529
- // turbolinks triggers page:load events on page transition
530
- // If app isn't using turbolinks, this event will never be triggered, no prob.
460
+ // turbo triggers turbo:load events on page transition
461
+ // If app isn't using turbo, this event will never be triggered, no prob.
531
462
  Core.listeners().forEach(function(listener) {
532
463
  document.addEventListener(listener, function() {
533
464
  Core.activate();
@@ -550,7 +481,6 @@ const index = {
550
481
  ButtonFocus,
551
482
  FacetSuggest,
552
483
  Modal,
553
- ModalForm,
554
484
  SearchContext,
555
485
  Core,
556
486
  onLoad: Core.onLoad