blacklight 7.33.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. checksums.yaml +4 -4
  2. data/.env +3 -2
  3. data/.github/workflows/ruby.yml +38 -107
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +243 -2
  6. data/.rubocop_todo.yml +216 -270
  7. data/Gemfile +7 -6
  8. data/README.md +12 -4
  9. data/Rakefile +18 -0
  10. data/VERSION +1 -1
  11. data/app/assets/config/blacklight/manifest.js +3 -0
  12. data/app/assets/javascripts/blacklight/blacklight.esm.js +376 -0
  13. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +332 -485
  15. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  16. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  20. data/app/assets/stylesheets/blacklight/_facets.scss +104 -49
  21. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  22. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  23. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  24. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  25. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  26. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  27. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  28. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  29. data/app/builders/blacklight/action_builder.rb +18 -9
  30. data/app/components/blacklight/advanced_search_form_component.html.erb +1 -1
  31. data/app/components/blacklight/advanced_search_form_component.rb +7 -9
  32. data/app/components/blacklight/constraints_component.rb +27 -37
  33. data/app/components/blacklight/document/action_component.html.erb +2 -9
  34. data/app/components/blacklight/document/action_component.rb +26 -8
  35. data/app/components/blacklight/document/actions_component.rb +2 -2
  36. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  37. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  38. data/app/components/blacklight/document/citation_component.rb +5 -3
  39. data/app/components/blacklight/document/group_component.rb +7 -3
  40. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  41. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  42. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  43. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  44. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  45. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  46. data/app/components/blacklight/document_component.html.erb +4 -0
  47. data/app/components/blacklight/document_component.rb +54 -42
  48. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  49. data/app/components/blacklight/document_metadata_component.rb +11 -6
  50. data/app/components/blacklight/document_title_component.rb +4 -1
  51. data/app/components/blacklight/facet_component.rb +1 -1
  52. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +3 -3
  53. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  54. data/app/components/blacklight/facet_field_component.html.erb +5 -5
  55. data/app/components/blacklight/facet_field_component.rb +9 -2
  56. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  57. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  58. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  59. data/app/components/blacklight/facet_item_component.rb +1 -43
  60. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  61. data/app/components/blacklight/header_component.html.erb +2 -0
  62. data/app/components/blacklight/header_component.rb +26 -0
  63. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  64. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  65. data/app/components/blacklight/icons/list_component.rb +16 -0
  66. data/app/components/blacklight/icons/search_component.rb +16 -0
  67. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  68. data/app/components/blacklight/metadata_field_component.rb +24 -8
  69. data/app/components/blacklight/metadata_field_layout_component.rb +7 -22
  70. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  71. data/app/components/blacklight/response/facet_group_component.html.erb +5 -6
  72. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  73. data/app/components/blacklight/response/sort_component.rb +2 -2
  74. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  75. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  76. data/app/components/blacklight/response/view_type_component.rb +4 -6
  77. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  78. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  79. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  80. data/app/components/blacklight/search_bar_component.rb +2 -16
  81. data/app/components/blacklight/search_button_component.rb +3 -3
  82. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  83. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  84. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  85. data/app/components/blacklight/search_header_component.html.erb +2 -0
  86. data/app/components/blacklight/search_header_component.rb +6 -0
  87. data/app/components/blacklight/search_navbar_component.html.erb +5 -0
  88. data/app/components/blacklight/search_navbar_component.rb +34 -0
  89. data/app/components/blacklight/start_over_button_component.rb +5 -3
  90. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  91. data/app/components/blacklight/system/flash_message_component.html.erb +3 -1
  92. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  93. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  94. data/app/components/blacklight/system/modal_component.rb +1 -3
  95. data/app/components/blacklight/top_navbar_component.html.erb +12 -0
  96. data/app/components/blacklight/top_navbar_component.rb +17 -0
  97. data/app/controllers/bookmarks_controller.rb +1 -0
  98. data/app/controllers/catalog_controller.rb +1 -0
  99. data/app/controllers/concerns/blacklight/bookmarks.rb +11 -6
  100. data/app/controllers/concerns/blacklight/catalog.rb +21 -72
  101. data/app/controllers/concerns/blacklight/controller.rb +6 -43
  102. data/app/controllers/concerns/blacklight/search_context.rb +71 -13
  103. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  104. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  105. data/app/controllers/concerns/blacklight/token_based_user.rb +1 -0
  106. data/app/controllers/search_history_controller.rb +1 -0
  107. data/app/helpers/blacklight/blacklight_helper_behavior.rb +1 -400
  108. data/app/helpers/blacklight/catalog_helper_behavior.rb +40 -182
  109. data/app/helpers/blacklight/component_helper_behavior.rb +1 -63
  110. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -117
  111. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  112. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  113. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -4
  114. data/app/helpers/blacklight/layout_helper_behavior.rb +60 -0
  115. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -30
  116. data/app/helpers/blacklight/url_helper_behavior.rb +21 -97
  117. data/app/helpers/blacklight_helper.rb +1 -0
  118. data/app/helpers/catalog_helper.rb +1 -0
  119. data/app/javascript/blacklight/bookmark_toggle.js +9 -22
  120. data/app/javascript/blacklight/button_focus.js +9 -7
  121. data/app/javascript/blacklight/checkbox_submit.js +68 -122
  122. data/app/javascript/blacklight/core.js +6 -5
  123. data/app/javascript/blacklight/index.js +14 -0
  124. data/app/javascript/blacklight/modal.js +100 -165
  125. data/app/javascript/blacklight/modalForm.js +60 -0
  126. data/app/javascript/blacklight/search_context.js +13 -29
  127. data/app/models/blacklight/facet_paginator.rb +3 -2
  128. data/app/models/blacklight/icon.rb +4 -2
  129. data/app/models/bookmark.rb +0 -2
  130. data/app/models/concerns/blacklight/configurable.rb +5 -4
  131. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -0
  132. data/app/models/concerns/blacklight/document/attributes.rb +50 -0
  133. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  134. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  135. data/app/models/concerns/blacklight/document/export.rb +2 -1
  136. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  137. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  138. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -0
  139. data/app/models/concerns/blacklight/document.rb +23 -20
  140. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  141. data/app/models/concerns/blacklight/user.rb +17 -8
  142. data/app/models/record_mailer.rb +23 -18
  143. data/app/models/search.rb +0 -1
  144. data/app/models/solr_document.rb +1 -0
  145. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  146. data/app/presenters/blacklight/document_presenter.rb +24 -30
  147. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  148. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  149. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  150. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  151. data/app/presenters/blacklight/field_presenter.rb +1 -0
  152. data/app/presenters/blacklight/index_presenter.rb +2 -40
  153. data/app/presenters/blacklight/json_presenter.rb +7 -5
  154. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  155. data/app/presenters/blacklight/rendering/join.rb +7 -1
  156. data/app/presenters/blacklight/rendering/link_to_facet.rb +3 -6
  157. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  158. data/app/presenters/blacklight/show_presenter.rb +1 -9
  159. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  160. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  161. data/app/services/blacklight/field_retriever.rb +1 -8
  162. data/app/services/blacklight/search_service.rb +9 -7
  163. data/app/values/blacklight/types.rb +95 -11
  164. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  165. data/app/views/bookmarks/_tools.html.erb +7 -12
  166. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  167. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  168. data/app/views/catalog/_constraints.html.erb +1 -14
  169. data/app/views/catalog/_document.atom.builder +12 -14
  170. data/app/views/catalog/_document.html.erb +3 -6
  171. data/app/views/catalog/_document.rss.builder +2 -4
  172. data/app/views/catalog/_document_list.html.erb +2 -1
  173. data/app/views/catalog/_facet_layout.html.erb +2 -2
  174. data/app/views/catalog/_facets.html.erb +5 -4
  175. data/app/views/catalog/_home_text.html.erb +2 -14
  176. data/app/views/catalog/_search_form.html.erb +3 -3
  177. data/app/views/catalog/_search_header.html.erb +1 -2
  178. data/app/views/catalog/_search_results.html.erb +2 -2
  179. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  180. data/app/views/catalog/_show_main_content.html.erb +8 -19
  181. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  182. data/app/views/catalog/_show_tools.html.erb +1 -19
  183. data/app/views/catalog/_view_type_group.html.erb +1 -1
  184. data/app/views/catalog/email_success.html.erb +5 -6
  185. data/app/views/catalog/facet.html.erb +7 -5
  186. data/app/views/catalog/index.atom.builder +12 -14
  187. data/app/views/catalog/index.html.erb +7 -1
  188. data/app/views/catalog/index.json.jbuilder +19 -19
  189. data/app/views/catalog/index.rss.builder +1 -1
  190. data/app/views/catalog/opensearch.xml.builder +1 -1
  191. data/app/views/catalog/show.html.erb +1 -6
  192. data/app/views/catalog/sms_success.html.erb +5 -6
  193. data/app/views/catalog/suggest.html.erb +3 -0
  194. data/app/views/layouts/blacklight/base.html.erb +19 -9
  195. data/app/views/record_mailer/email_record.text.erb +4 -3
  196. data/app/views/record_mailer/sms_record.text.erb +4 -4
  197. data/app/views/search_history/index.html.erb +6 -2
  198. data/app/views/shared/_header_navbar.html.erb +1 -22
  199. data/app/views/shared/_modal.html.erb +3 -3
  200. data/blacklight.gemspec +8 -10
  201. data/config/importmap.rb +3 -0
  202. data/config/locales/blacklight.ar.yml +209 -233
  203. data/config/locales/blacklight.ca.yml +0 -7
  204. data/config/locales/blacklight.de.yml +197 -216
  205. data/config/locales/blacklight.en.yml +2 -7
  206. data/config/locales/blacklight.es.yml +196 -216
  207. data/config/locales/blacklight.fr.yml +196 -220
  208. data/config/locales/blacklight.hu.yml +193 -213
  209. data/config/locales/blacklight.it.yml +197 -216
  210. data/config/locales/blacklight.nl.yml +193 -213
  211. data/config/locales/blacklight.pt-BR.yml +195 -216
  212. data/config/locales/blacklight.sq.yml +193 -213
  213. data/config/locales/blacklight.zh.yml +194 -214
  214. data/config/routes.rb +3 -2
  215. data/db/migrate/20140202020201_create_searches.rb +1 -0
  216. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  217. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  218. data/docker-compose.yml +1 -0
  219. data/lib/blacklight/abstract_repository.rb +1 -0
  220. data/lib/blacklight/configuration/context.rb +4 -4
  221. data/lib/blacklight/configuration/display_field.rb +7 -9
  222. data/lib/blacklight/configuration/facet_field.rb +17 -11
  223. data/lib/blacklight/configuration/field.rb +1 -0
  224. data/lib/blacklight/configuration/fields.rb +12 -15
  225. data/lib/blacklight/configuration/index_field.rb +1 -0
  226. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  227. data/lib/blacklight/configuration/search_field.rb +1 -0
  228. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  229. data/lib/blacklight/configuration/show_field.rb +1 -0
  230. data/lib/blacklight/configuration/sort_field.rb +1 -0
  231. data/lib/blacklight/configuration/tool_config.rb +1 -0
  232. data/lib/blacklight/configuration/view_config.rb +16 -10
  233. data/lib/blacklight/configuration.rb +322 -341
  234. data/lib/blacklight/engine.rb +13 -15
  235. data/lib/blacklight/exceptions.rb +2 -2
  236. data/lib/blacklight/nested_open_struct_with_hash_access.rb +6 -12
  237. data/lib/blacklight/open_struct_with_hash_access.rb +19 -17
  238. data/lib/blacklight/parameters.rb +7 -21
  239. data/lib/blacklight/routes/exportable.rb +1 -0
  240. data/lib/blacklight/routes/searchable.rb +3 -1
  241. data/lib/blacklight/routes.rb +1 -0
  242. data/lib/blacklight/search_builder.rb +10 -10
  243. data/lib/blacklight/search_state/filter_field.rb +8 -25
  244. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  245. data/lib/blacklight/search_state.rb +23 -79
  246. data/lib/blacklight/solr/document.rb +1 -0
  247. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  248. data/lib/blacklight/solr/repository.rb +1 -0
  249. data/lib/blacklight/solr/request.rb +3 -0
  250. data/lib/blacklight/solr/response/facets.rb +21 -5
  251. data/lib/blacklight/solr/response/group.rb +1 -0
  252. data/lib/blacklight/solr/response/group_response.rb +1 -0
  253. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  254. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  255. data/lib/blacklight/solr/response/params.rb +5 -4
  256. data/lib/blacklight/solr/response/response.rb +1 -0
  257. data/lib/blacklight/solr/response/spelling.rb +1 -0
  258. data/lib/blacklight/solr/response.rb +4 -3
  259. data/lib/blacklight/solr/search_builder_behavior.rb +16 -32
  260. data/lib/blacklight/solr.rb +1 -0
  261. data/lib/blacklight/version.rb +1 -0
  262. data/lib/blacklight.rb +8 -11
  263. data/lib/generators/blacklight/assets/importmap_generator.rb +56 -0
  264. data/lib/generators/blacklight/assets/propshaft_generator.rb +34 -0
  265. data/lib/generators/blacklight/assets/sprockets_generator.rb +68 -0
  266. data/lib/generators/blacklight/assets_generator.rb +14 -88
  267. data/lib/generators/blacklight/controller_generator.rb +3 -2
  268. data/lib/generators/blacklight/document_generator.rb +1 -0
  269. data/lib/generators/blacklight/install_generator.rb +7 -4
  270. data/lib/generators/blacklight/models_generator.rb +1 -0
  271. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  272. data/lib/generators/blacklight/solr_generator.rb +1 -1
  273. data/lib/generators/blacklight/templates/catalog_controller.rb +37 -7
  274. data/lib/generators/blacklight/templates/solr_document.rb +1 -7
  275. data/lib/generators/blacklight/test_support_generator.rb +4 -2
  276. data/lib/generators/blacklight/user_generator.rb +7 -9
  277. data/lib/railties/blacklight.rake +2 -3
  278. data/package.json +10 -10
  279. data/rollup.config.js +37 -0
  280. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  281. data/spec/components/blacklight/document_component_spec.rb +74 -33
  282. data/spec/components/blacklight/facet_component_spec.rb +2 -7
  283. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  284. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  285. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +9 -7
  286. data/spec/components/blacklight/header_component_spec.rb +20 -0
  287. data/spec/components/blacklight/response/view_type_component_spec.rb +83 -0
  288. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  289. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  290. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +51 -0
  291. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  292. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  293. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  294. data/spec/controllers/catalog_controller_spec.rb +24 -126
  295. data/spec/features/autocomplete_spec.rb +1 -1
  296. data/spec/features/axe_spec.rb +1 -1
  297. data/spec/features/bookmarks_spec.rb +1 -1
  298. data/spec/features/component_template_override_spec.rb +8 -0
  299. data/spec/features/facets_spec.rb +1 -1
  300. data/spec/features/modal_spec.rb +12 -0
  301. data/spec/features/search_context_spec.rb +4 -10
  302. data/spec/features/search_results_spec.rb +0 -33
  303. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  304. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  305. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  306. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  307. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  308. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +10 -132
  309. data/spec/helpers/blacklight_helper_spec.rb +3 -298
  310. data/spec/helpers/catalog_helper_spec.rb +60 -115
  311. data/spec/i18n_spec.rb +1 -0
  312. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  313. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  314. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  315. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  316. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  317. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +4 -4
  318. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  319. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  320. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  321. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  322. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  323. data/spec/models/blacklight/configuration_spec.rb +41 -53
  324. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  325. data/spec/models/blacklight/icon_spec.rb +29 -15
  326. data/spec/models/blacklight/search_builder_spec.rb +12 -12
  327. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  328. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  329. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  330. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  331. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  332. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  333. data/spec/models/blacklight/solr/search_builder_spec.rb +32 -23
  334. data/spec/models/blacklight/user_spec.rb +22 -0
  335. data/spec/models/record_mailer_spec.rb +36 -23
  336. data/spec/models/solr_document_spec.rb +21 -3
  337. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  338. data/spec/presenters/blacklight/document_presenter_spec.rb +3 -2
  339. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  340. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  341. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  342. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -16
  343. data/spec/presenters/blacklight/index_presenter_spec.rb +3 -4
  344. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  345. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  346. data/spec/presenters/blacklight/show_presenter_spec.rb +11 -25
  347. data/spec/presenters/pipeline_spec.rb +13 -2
  348. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  349. data/spec/requests/load_suggestions_spec.rb +16 -0
  350. data/spec/routing/catalog_routing_spec.rb +6 -1
  351. data/spec/services/blacklight/search_service_spec.rb +31 -68
  352. data/spec/spec_helper.rb +4 -3
  353. data/spec/support/controller_level_helpers.rb +1 -2
  354. data/spec/support/features/search_helpers.rb +39 -0
  355. data/spec/support/features/session_helpers.rb +1 -0
  356. data/spec/support/features.rb +3 -0
  357. data/spec/support/view_component_test_helpers.rb +21 -0
  358. data/spec/test_app_templates/Gemfile.extra +4 -0
  359. data/spec/test_app_templates/lib/generators/test_app_generator.rb +17 -2
  360. data/spec/views/catalog/_document.html.erb_spec.rb +23 -33
  361. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  362. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  363. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  364. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  365. data/spec/views/catalog/_show_tools.html.erb_spec.rb +7 -54
  366. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  367. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  368. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  369. data/spec/views/catalog/index.atom.builder_spec.rb +18 -11
  370. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  371. data/spec/views/catalog/index.json.jbuilder_spec.rb +3 -3
  372. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  373. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  374. data/tasks/blacklight.rake +7 -5
  375. metadata +95 -123
  376. data/.babelrc +0 -11
  377. data/app/assets/images/blacklight/list.svg +0 -1
  378. data/app/assets/images/blacklight/search.svg +0 -1
  379. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  380. data/app/components/blacklight/content_areas_shim.rb +0 -13
  381. data/app/components/blacklight/search_context_component.rb +0 -34
  382. data/app/controllers/concerns/blacklight/base.rb +0 -7
  383. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  384. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  385. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  386. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  387. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  388. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  389. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  390. data/app/javascript/blacklight/autocomplete.js +0 -36
  391. data/app/javascript/blacklight/facet_load.js +0 -22
  392. data/app/models/concerns/blacklight/document/email.rb +0 -26
  393. data/app/models/concerns/blacklight/document/sms.rb +0 -24
  394. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  395. data/app/views/catalog/_constraints_element.html.erb +0 -14
  396. data/app/views/catalog/_document_action.html.erb +0 -5
  397. data/app/views/catalog/_facet_group.html.erb +0 -5
  398. data/app/views/catalog/_facet_limit.html.erb +0 -3
  399. data/app/views/catalog/_index.html.erb +0 -1
  400. data/app/views/catalog/_index_header.html.erb +0 -22
  401. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  402. data/app/views/catalog/_show.html.erb +0 -6
  403. data/app/views/catalog/_show_header.html.erb +0 -2
  404. data/app/views/catalog/_thumbnail.html.erb +0 -1
  405. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  406. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  407. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  408. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  409. data/spec/features/sitelinks_search_box.rb +0 -13
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -108
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/models/blacklight/document/email_spec.rb +0 -57
  416. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  417. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  418. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  419. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  420. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  421. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  422. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  423. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  424. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  425. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  426. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
  427. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Assets
5
+ class PropshaftGenerator < Rails::Generators::Base
6
+ def add_package
7
+ if ENV['CI']
8
+ run "yarn add blacklight-frontend:#{Blacklight::Engine.root}"
9
+ else
10
+ run 'yarn add blacklight-frontend'
11
+ end
12
+ end
13
+
14
+ def add_third_party_packages
15
+ run 'yarn add @github/auto-complete-element'
16
+ end
17
+
18
+ def add_package_assets
19
+ append_to_file 'app/assets/stylesheets/application.bootstrap.scss' do
20
+ <<~CONTENT
21
+ @import "blacklight-frontend/app/assets/stylesheets/blacklight/blacklight";
22
+ CONTENT
23
+ end
24
+
25
+ append_to_file 'app/javascript/application.js' do
26
+ <<~CONTENT
27
+ import Blacklight from "blacklight-frontend";
28
+ import githubAutoCompleteElement from "@github/auto-complete-element";
29
+ CONTENT
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Assets
5
+ class SprocketsGenerator < Rails::Generators::Base
6
+ class_option :'bootstrap-version', type: :string, default: ENV.fetch('BOOTSTRAP_VERSION', '~> 5.1'), desc: "Set the generated app's bootstrap version"
7
+
8
+ # This could be skipped if you want to use webpacker
9
+ def add_javascript_dependencies
10
+ gem 'bootstrap', options[:'bootstrap-version'].presence
11
+ gem 'jquery-rails' if bootstrap_4? # Bootstrap 4 has a dependency on jquery
12
+ end
13
+
14
+ ##
15
+ # Remove the empty generated app/assets/images directory. Without doing this,
16
+ # the default Sprockets 4 manifest will raise an exception.
17
+ def appease_sprockets4
18
+ return if Rails.version > '7' || Sprockets::VERSION < '4'
19
+
20
+ append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
21
+ append_to_file 'app/assets/config/manifest.js', "\n//= link blacklight/manifest.js"
22
+ empty_directory 'app/assets/images'
23
+ end
24
+
25
+ def assets
26
+ create_file 'app/assets/stylesheets/blacklight.scss' do
27
+ <<~CONTENT
28
+ @import 'bootstrap';
29
+ @import 'blacklight/blacklight';
30
+ CONTENT
31
+ end
32
+
33
+ gem "sassc-rails", "~> 2.1" if Rails.version > '7'
34
+
35
+ # Ensure this method is idempotent
36
+ return if has_blacklight_assets?
37
+
38
+ create_file 'app/assets/javascripts/application.js' do
39
+ <<~CONTENT
40
+ //= require rails-ujs
41
+ #{'//= require jquery3' if bootstrap_4?}
42
+
43
+ // Required by Blacklight
44
+ //= require popper
45
+ //= require bootstrap
46
+ //= require blacklight/blacklight
47
+ CONTENT
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def bootstrap_4?
54
+ options[:'bootstrap-version'].match?(/\A[^0-9]*4\./)
55
+ end
56
+
57
+ def has_blacklight_assets?
58
+ application_js.include?('blacklight/blacklight')
59
+ end
60
+
61
+ def application_js
62
+ path = File.expand_path("app/assets/javascripts/application.js", destination_root)
63
+
64
+ File.exist?(path) ? File.read(path) : ''
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,97 +1,23 @@
1
1
  # frozen_string_literal: true
2
- module Blacklight
3
- class Assets < Rails::Generators::Base
4
- source_root File.expand_path('../templates', __FILE__)
5
-
6
- class_option :'bootstrap-version', type: :string, default: ENV.fetch('BOOTSTRAP_VERSION', '~> 4.0'), desc: "Set the generated app's bootstrap version"
7
-
8
- # This could be skipped if you want to use webpacker
9
- def add_javascript_dependencies
10
- gem 'bootstrap', options[:'bootstrap-version']
11
- gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
12
- end
13
-
14
- def appease_rails7
15
- return unless Rails.version > '7'
16
-
17
- gem "sassc-rails", "~> 2.1"
18
- end
19
-
20
- # Add sprockets javascript if needed
21
- def create_sprockets_javascript
22
- # Rails 5 already has an application.js file
23
- return if Rails.version < '6'
24
-
25
- create_file 'app/assets/javascripts/application.js' do
26
- <<~CONTENT
27
- //= require jquery3
28
- //= require rails-ujs
29
- #{'//= require turbolinks' if Rails.version < '7'}
30
- CONTENT
31
- end
32
- end
33
-
34
- ##
35
- # Remove the empty generated app/assets/images directory. Without doing this,
36
- # the default Sprockets 4 manifest will raise an exception.
37
- def appease_sprockets4
38
- return if !defined?(Sprockets::VERSION) || Sprockets::VERSION < '4' || using_importmap?
39
-
40
- append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
41
- empty_directory 'app/assets/images'
42
- end
43
-
44
- def assets
45
- copy_file "blacklight.scss", "app/assets/stylesheets/blacklight.scss"
46
2
 
47
- # Ensure this method is idempotent
48
- return if has_blacklight_assets?
3
+ require 'shellwords'
49
4
 
50
- gem 'jquery-rails'
51
- contents = "\n//\n// Required by Blacklight\n"
52
- contents += "//= require popper\n"
53
- contents += "// Twitter Typeahead for autocomplete\n"
54
- contents += "//= require twitter/typeahead\n"
55
- contents += "//= require bootstrap\n"
56
- contents += "//= require blacklight/blacklight\n"
57
-
58
- marker = if turbolinks?
59
- '//= require turbolinks'
60
- else
61
- '//= require rails-ujs'
62
- end
63
-
64
- insert_into_file "app/assets/javascripts/application.js", after: marker do
65
- contents
66
- end
67
-
68
- insert_into_file "app/assets/javascripts/application.js", before: '//= require rails-ujs' do
69
- "//= require jquery3\n"
70
- end
71
- end
72
-
73
- private
74
-
75
- def root
76
- @root ||= Pathname(destination_root)
77
- end
78
-
79
- def using_importmap?
80
- @using_importmap ||= root.join('config/importmap.rb').exist?
81
- end
82
-
83
- def turbolinks?
84
- @turbolinks ||= application_js.include?('turbolinks')
85
- end
5
+ module Blacklight
6
+ class AssetsGenerator < Rails::Generators::Base
7
+ class_option :'bootstrap-version', type: :string, default: ENV.fetch('BOOTSTRAP_VERSION', '~> 5.1'), desc: "Set the generated app's bootstrap version"
86
8
 
87
- def has_blacklight_assets?
88
- application_js.include?('blacklight/blacklight')
89
- end
9
+ def run_asset_pipeline_specific_generator
10
+ generated_options = "--bootstrap-version='#{Shellwords.escape(options[:'bootstrap-version'])}'" if options[:'bootstrap-version']
90
11
 
91
- def application_js
92
- path = File.expand_path("app/assets/javascripts/application.js", destination_root)
12
+ generator = if defined?(Propshaft)
13
+ 'blacklight:assets:propshaft'
14
+ elsif defined?(Importmap)
15
+ 'blacklight:assets:importmap'
16
+ elsif defined?(Sprockets)
17
+ 'blacklight:assets:sprockets'
18
+ end
93
19
 
94
- File.exist?(path) ? File.read(path) : ''
20
+ generate generator, generated_options if generator
95
21
  end
96
22
  end
97
23
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class ControllerGenerator < Rails::Generators::Base
4
5
  source_root File.expand_path('../templates', __FILE__)
@@ -16,8 +17,8 @@ module Blacklight
16
17
  def inject_blacklight_controller_behavior
17
18
  inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
18
19
  " # Adds a few additional behaviors into the application controller\n" \
19
- " include Blacklight::Controller\n" \
20
- " layout :determine_layout if respond_to? :layout\n\n"
20
+ " include Blacklight::Controller\n" \
21
+ " layout :determine_layout if respond_to? :layout\n\n"
21
22
  end
22
23
  end
23
24
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rails/generators'
3
4
 
4
5
  module Blacklight
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require 'shellwords'
4
+
2
5
  module Blacklight
3
6
  class Install < Rails::Generators::Base
4
7
  source_root File.expand_path('../templates', __FILE__)
@@ -11,7 +14,7 @@ module Blacklight
11
14
  class_option :devise, type: :boolean, default: false, aliases: "-d", desc: "Use Devise as authentication logic."
12
15
  class_option :marc, type: :boolean, default: false, aliases: "-m", desc: "Generate MARC-based demo."
13
16
  class_option :'bootstrap-version', type: :string, default: nil, desc: "Set the generated app's bootstrap version"
14
- class_option :'skip-assets', type: :boolean, default: !defined?(Sprockets), desc: "Skip generating javascript and css assets into the application"
17
+ class_option :'skip-assets', type: :boolean, default: false, desc: "Skip generating javascript and css assets into the application"
15
18
  class_option :'skip-solr', type: :boolean, default: false, desc: "Skip generating solr configurations."
16
19
 
17
20
  desc <<-EOS
@@ -34,14 +37,14 @@ module Blacklight
34
37
  # Call external generator in AssetsGenerator, so we can
35
38
  # leave that callable seperately too.
36
39
  def copy_public_assets
37
- generated_options = "--bootstrap-version #{options[:'bootstrap-version']}" if options[:'bootstrap-version']
40
+ generated_options = "--bootstrap-version='#{Shellwords.escape(options[:'bootstrap-version'])}'" if options[:'bootstrap-version']
38
41
 
39
42
  generate "blacklight:assets", generated_options unless options[:'skip-assets']
40
43
  end
41
44
 
42
45
  def bundle_install
43
46
  inside destination_root do
44
- Bundler.with_clean_env do
47
+ Bundler.with_unbundled_env do
45
48
  run "bundle install"
46
49
  end
47
50
  end
@@ -84,7 +87,7 @@ module Blacklight
84
87
  return unless options[:marc]
85
88
 
86
89
  blacklight_marc = String.new('blacklight-marc')
87
- gem blacklight_marc, '>= 7.0.0.rc1', '< 8'
90
+ gem blacklight_marc, '~> 8.0'
88
91
 
89
92
  bundle_install
90
93
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rails/generators'
3
4
  require 'rails/generators/migration'
4
5
  require 'blacklight/version'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rails/generators'
3
4
 
4
5
  module Blacklight
@@ -36,7 +36,7 @@ module Blacklight
36
36
 
37
37
  def bundle_install
38
38
  inside destination_root do
39
- Bundler.with_clean_env do
39
+ Bundler.with_unbundled_env do
40
40
  run "bundle install"
41
41
  end
42
42
  end
@@ -5,7 +5,16 @@ class <%= controller_name.classify %>Controller < ApplicationController
5
5
 
6
6
  include Blacklight::Catalog
7
7
 
8
+ # If you'd like to handle errors returned by Solr in a certain way,
9
+ # you can use Rails rescue_from with a method you define in this controller,
10
+ # uncomment:
11
+ #
12
+ # rescue_from Blacklight::Exceptions::InvalidRequest, with: :my_handling_method
13
+
8
14
  configure_blacklight do |config|
15
+ ## Specify the style of markup to be generated (may be 4 or 5)
16
+ # config.bootstrap_version = 5
17
+ #
9
18
  ## Class for sending and receiving requests from a search index
10
19
  # config.repository_class = Blacklight::Solr::Repository
11
20
  #
@@ -15,6 +24,9 @@ class <%= controller_name.classify %>Controller < ApplicationController
15
24
  ## Model that maps search index responses to the blacklight response model
16
25
  # config.response_model = Blacklight::Solr::Response
17
26
  #
27
+ ## The destination for the link around the logo in the header
28
+ # config.logo_link = root_path
29
+ #
18
30
  ## Should the raw solr document endpoint (e.g. /catalog/:id/raw) be enabled
19
31
  # config.raw_endpoint.enabled = false
20
32
 
@@ -32,16 +44,26 @@ class <%= controller_name.classify %>Controller < ApplicationController
32
44
 
33
45
  # solr field configuration for search results/index views
34
46
  config.index.title_field = 'title_tsim'
35
- #config.index.display_type_field = 'format'
36
- #config.index.thumbnail_field = 'thumbnail_path_ss'
47
+ # config.index.display_type_field = 'format'
48
+ # config.index.thumbnail_field = 'thumbnail_path_ss'
49
+
50
+ # The presenter is the view-model class for the page
51
+ # config.index.document_presenter_class = MyApp::IndexPresenter
37
52
 
38
- config.add_results_document_tool(:bookmark, partial: 'bookmark_control', if: :render_bookmarks_control?)
53
+ # Some components can be configured
54
+ # config.index.document_component = MyApp::SearchResultComponent
55
+ # config.index.constraints_component = MyApp::ConstraintsComponent
56
+ # config.index.search_bar_component = MyApp::SearchBarComponent
57
+ # config.index.search_header_component = MyApp::SearchHeaderComponent
58
+ # config.index.document_actions.delete(:bookmark)
59
+
60
+ config.add_results_document_tool(:bookmark, component: Blacklight::Document::BookmarkComponent, if: :render_bookmarks_control?)
39
61
 
40
62
  config.add_results_collection_tool(:sort_widget)
41
63
  config.add_results_collection_tool(:per_page_widget)
42
64
  config.add_results_collection_tool(:view_type_group)
43
65
 
44
- config.add_show_tools_partial(:bookmark, partial: 'bookmark_control', if: :render_bookmarks_control?)
66
+ config.add_show_tools_partial(:bookmark, component: Blacklight::Document::BookmarkComponent, if: :render_bookmarks_control?)
45
67
  config.add_show_tools_partial(:email, callback: :email_action, validator: :validate_email_params)
46
68
  config.add_show_tools_partial(:sms, if: :render_sms_action?, callback: :sms_action, validator: :validate_sms_params)
47
69
  config.add_show_tools_partial(:citation)
@@ -50,9 +72,17 @@ class <%= controller_name.classify %>Controller < ApplicationController
50
72
  config.add_nav_action(:search_history, partial: 'blacklight/nav/search_history')
51
73
 
52
74
  # solr field configuration for document/show views
53
- #config.show.title_field = 'title_tsim'
54
- #config.show.display_type_field = 'format'
55
- #config.show.thumbnail_field = 'thumbnail_path_ss'
75
+ # config.show.title_field = 'title_tsim'
76
+ # config.show.display_type_field = 'format'
77
+ # config.show.thumbnail_field = 'thumbnail_path_ss'
78
+ #
79
+ # The presenter is a view-model class for the page
80
+ # config.show.document_presenter_class = MyApp::ShowPresenter
81
+ #
82
+ # These components can be configured
83
+ # config.show.document_component = MyApp::DocumentComponent
84
+ # config.show.sidebar_component = MyApp::SidebarComponent
85
+ # config.show.embed_component = MyApp::EmbedComponent
56
86
 
57
87
  # solr fields that will be treated as facets by the blacklight application
58
88
  # The ordering of the field names is the order of the display
@@ -1,17 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Represent a single document returned from Solr
3
+ # Represents a single document returned from Solr
4
4
  class <%= model_name.classify %>
5
5
  include Blacklight::Solr::Document
6
6
 
7
7
  # self.unique_key = 'id'
8
8
 
9
- # Email uses the semantic field mappings below to generate the body of an email.
10
- SolrDocument.use_extension(Blacklight::Document::Email)
11
-
12
- # SMS uses the semantic field mappings below to generate the body of an SMS email.
13
- SolrDocument.use_extension(Blacklight::Document::Sms)
14
-
15
9
  # DublinCore uses the semantic field mappings below to assemble an OAI-compliant Dublin Core document
16
10
  # Semantic mappings of solr stored fields. Fields may be multi or
17
11
  # single valued. See Blacklight::Document::SemanticFields#field_semantics
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Copy Blacklight test support material in place
3
4
 
4
5
  # Need the requires here so we can call the generator from environment.rb
@@ -41,9 +42,10 @@ module Blacklight
41
42
  end
42
43
 
43
44
  def configure_action_mailer
44
- insert_into_file "config/environments/test.rb", after: "config.action_mailer.delivery_method = :test\n" do <<-EOF
45
+ insert_into_file "config/environments/test.rb", after: "config.action_mailer.delivery_method = :test\n" do
46
+ <<-EOF
45
47
  config.action_mailer.default_options = {from: 'no-reply@example.org'}
46
- EOF
48
+ EOF
47
49
  end
48
50
  end
49
51
  end
@@ -25,7 +25,7 @@ module Blacklight
25
25
  gem "devise-guests", "~> 0.8"
26
26
 
27
27
  inside destination_root do
28
- Bundler.with_clean_env do
28
+ Bundler.with_unbundled_env do
29
29
  run "bundle install"
30
30
  end
31
31
  end
@@ -36,12 +36,10 @@ module Blacklight
36
36
 
37
37
  # add the #to_s to the model.
38
38
  insert_into_file("app/models/#{model_name}.rb", before: /end(\n| )*$/) do
39
- "\n # Method added by Blacklight; Blacklight uses #to_s on your\n" \
40
- " # user class to get a user-displayable login/identifier for\n" \
41
- " # the account.\n" \
42
- " def to_s\n" \
43
- " email\n" \
44
- " end\n"
39
+ "\n # Configuration added by Blacklight; Blacklight::User uses a method key on your\n" \
40
+ " # user class to get a user-displayable login/identifier for\n" \
41
+ " # the account.\n" \
42
+ " self.string_display_key ||= :email\n"
45
43
  end
46
44
  gsub_file("config/initializers/devise.rb", "config.sign_out_via = :delete", "config.sign_out_via = :get")
47
45
  end
@@ -52,10 +50,10 @@ module Blacklight
52
50
  if File.exist?(File.expand_path(file_path, destination_root))
53
51
  inject_into_class file_path, model_name.classify do
54
52
  "\n # Connects this user object to Blacklights Bookmarks." \
55
- "\n include Blacklight::User\n"
53
+ "\n include Blacklight::User\n"
56
54
  end
57
55
  else
58
- say_status "warning", <<-EOS.strip_heredoc, :yellow
56
+ say_status "warning", <<~EOS, :yellow
59
57
  Blacklight authenticated user functionality not installed, as a user model
60
58
  could not be found at /app/models/user.rb. If you used a different name,
61
59
  please re-run the migration and provide that name as an argument. E.g.:
@@ -19,9 +19,8 @@ namespace :blacklight do
19
19
  task seed: [:environment] do
20
20
  require 'yaml'
21
21
 
22
- app_file = Rails.root && Rails.root + 'spec/fixtures/sample_solr_documents.yml'
23
- file = ENV['FILE'] ||
24
- (app_file && File.exist?(app_file) && app_file) ||
22
+ app_file = Rails.root && "#{Rails.root}spec/fixtures/sample_solr_documents.yml"
23
+ file = ENV.fetch('FILE') { (app_file && File.exist?(app_file) && app_file) } ||
25
24
  File.join(Blacklight.root, 'spec', 'fixtures', 'sample_solr_documents.yml')
26
25
  docs = YAML.safe_load(File.open(file))
27
26
  conn = Blacklight.default_index.connection
data/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "blacklight-frontend",
3
- "version": "7.32.0",
3
+ "version": "8.0.0",
4
4
  "description": "[![Build Status](https://travis-ci.com/projectblacklight/blacklight.png?branch=main)](https://travis-ci.com/projectblacklight/blacklight) [![Gem Version](https://badge.fury.io/rb/blacklight.png)](http://badge.fury.io/rb/blacklight) [![Coverage Status](https://coveralls.io/repos/github/projectblacklight/blacklight/badge.svg?branch=main)](https://coveralls.io/github/projectblacklight/blacklight?branch=main)",
5
5
  "main": "app/assets/javascripts/blacklight",
6
+ "module": "app/assets/javascripts/blacklight/blacklight.esm.js",
6
7
  "scripts": {
7
- "js-compile-bundle": "shx cat app/javascript/blacklight/core.js app/javascript/blacklight/autocomplete.js app/javascript/blacklight/bookmark_toggle.js app/javascript/blacklight/button_focus.js app/javascript/blacklight/checkbox_submit.js app/javascript/blacklight/facet_load.js app/javascript/blacklight/modal.js app/javascript/blacklight/search_context.js | shx sed \"s/^(import|export).*//\" | babel --filename app/javascript/blacklight/blacklight.js > app/assets/javascripts/blacklight/blacklight.js"
8
+ "prepare": "rollup --config rollup.config.js --sourcemap && ESM=true rollup --config rollup.config.js --sourcemap"
8
9
  },
9
10
  "repository": {
10
11
  "type": "git",
@@ -21,15 +22,14 @@
21
22
  },
22
23
  "homepage": "https://github.com/projectblacklight/blacklight#readme",
23
24
  "devDependencies": {
24
- "@babel/cli": "^7.2.3",
25
- "@babel/core": "^7.2.3",
26
- "@babel/preset-env": "^7.16.0",
27
- "shx": "^0.3.2"
25
+ "rollup": "^2.60.0",
26
+ "rollup-plugin-includepaths": "^0.2.4"
28
27
  },
29
- "browserslist": "> 0.25%, not dead",
28
+ "browserslist": [
29
+ "defaults",
30
+ "not IE 11"
31
+ ],
30
32
  "dependencies": {
31
- "bootstrap": ">=4.3.1 <6.0.0",
32
- "jquery": "^3.5.1",
33
- "typeahead.js": "^0.11.1"
33
+ "bootstrap": ">=4.3.1 <6.0.0"
34
34
  }
35
35
  }
data/rollup.config.js ADDED
@@ -0,0 +1,37 @@
1
+ 'use strict'
2
+
3
+ import includePaths from 'rollup-plugin-includepaths';
4
+
5
+ const path = require('path')
6
+
7
+ const BUNDLE = process.env.BUNDLE === 'true'
8
+ const ESM = process.env.ESM === 'true'
9
+
10
+ const fileDest = `blacklight${ESM ? '.esm' : ''}`
11
+ const external = []
12
+ const globals = {}
13
+
14
+ let includePathOptions = {
15
+ include: {},
16
+ paths: ['app/javascript'],
17
+ external: [],
18
+ extensions: ['.js']
19
+ };
20
+
21
+ const rollupConfig = {
22
+ input: path.resolve(__dirname, `app/javascript/blacklight/index.js`),
23
+ output: {
24
+ file: path.resolve(__dirname, `app/assets/javascripts/blacklight/${fileDest}.js`),
25
+ format: ESM ? 'esm' : 'umd',
26
+ globals,
27
+ generatedCode: 'es2015'
28
+ },
29
+ external,
30
+ plugins: [includePaths(includePathOptions)]
31
+ }
32
+
33
+ if (!ESM) {
34
+ rollupConfig.output.name = 'Blacklight'
35
+ }
36
+
37
+ module.exports = rollupConfig
@@ -13,13 +13,21 @@ RSpec.describe Blacklight::ConstraintsComponent, type: :component do
13
13
 
14
14
  let(:blacklight_config) do
15
15
  Blacklight::Configuration.new.configure do |config|
16
- config.add_facet_field 'some_facet'
16
+ config.add_facet_field :some_facet
17
17
  end
18
18
  end
19
19
 
20
20
  let(:search_state) { Blacklight::SearchState.new(query_params.with_indifferent_access, blacklight_config) }
21
21
  let(:query_params) { {} }
22
22
 
23
+ context 'with no constraints' do
24
+ describe '#render?' do
25
+ it 'is false' do
26
+ expect(component.render?).to be false
27
+ end
28
+ end
29
+ end
30
+
23
31
  context 'with a query' do
24
32
  let(:query_params) { { q: 'some query' } }
25
33
 
@@ -43,21 +51,17 @@ RSpec.describe Blacklight::ConstraintsComponent, type: :component do
43
51
  context 'with a facet' do
44
52
  let(:query_params) { { f: { some_facet: ['some value'] } } }
45
53
 
46
- before do
47
- controller.blacklight_config.configure do |config|
48
- config.add_facet_field :some_facet
49
- end
54
+ it 'renders the query' do
55
+ expect(rendered).to have_selector('.constraint-value > .filter-name', text: 'Some Facet').and(have_selector('.constraint-value > .filter-value', text: 'some value'))
50
56
  end
51
57
 
52
- # this has to be cleaned up to prevent leaking class configuration
53
- after do
54
- controller.blacklight_config.configure do |config|
55
- config['facet_fields'].delete('some_facet')
56
- end
57
- end
58
+ context 'that is not configured' do
59
+ let(:query_params) { { f: { some_facet: ['some value'], missing: ['another value'] } } }
58
60
 
59
- it 'renders the query' do
60
- expect(rendered).to have_selector('.constraint-value > .filter-name', text: 'Some Facet').and(have_selector('.constraint-value > .filter-value', text: 'some value'))
61
+ it 'renders only the configured constraints' do
62
+ expect(rendered).to have_selector('.constraint-value > .filter-name', text: 'Some Facet').and(have_selector('.constraint-value > .filter-value', text: 'some value'))
63
+ expect(rendered).not_to have_selector('.constraint-value > .filter-name', text: 'Missing')
64
+ end
61
65
  end
62
66
  end
63
67