blacklight 7.41.0 → 8.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/.env +2 -3
  3. data/.github/workflows/ruby.yml +81 -0
  4. data/.rubocop.yml +243 -14
  5. data/.rubocop_todo.yml +137 -429
  6. data/Gemfile +11 -6
  7. data/README.md +11 -3
  8. data/VERSION +1 -1
  9. data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
  11. data/app/assets/javascripts/blacklight/blacklight.js +374 -493
  12. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
  13. data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
  16. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
  17. data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
  18. data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
  19. data/app/assets/stylesheets/blacklight/_header.scss +0 -15
  20. data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
  21. data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
  22. data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
  23. data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
  24. data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
  25. data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
  26. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
  27. data/app/builders/blacklight/action_builder.rb +18 -9
  28. data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
  29. data/app/components/blacklight/advanced_search_form_component.rb +8 -10
  30. data/app/components/blacklight/constraints_component.rb +27 -37
  31. data/app/components/blacklight/document/action_component.rb +12 -10
  32. data/app/components/blacklight/document/actions_component.rb +2 -2
  33. data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
  34. data/app/components/blacklight/document/bookmark_component.rb +4 -2
  35. data/app/components/blacklight/document/citation_component.rb +5 -3
  36. data/app/components/blacklight/document/group_component.rb +7 -3
  37. data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
  38. data/app/components/blacklight/document/sidebar_component.rb +16 -0
  39. data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
  40. data/app/components/blacklight/document/thumbnail_component.rb +1 -9
  41. data/app/components/blacklight/document_component.html.erb +1 -1
  42. data/app/components/blacklight/document_component.rb +16 -78
  43. data/app/components/blacklight/document_metadata_component.html.erb +2 -4
  44. data/app/components/blacklight/document_metadata_component.rb +5 -10
  45. data/app/components/blacklight/facet_component.rb +3 -3
  46. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
  47. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  48. data/app/components/blacklight/facet_field_component.html.erb +4 -5
  49. data/app/components/blacklight/facet_field_component.rb +9 -2
  50. data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
  51. data/app/components/blacklight/facet_field_list_component.rb +37 -5
  52. data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
  53. data/app/components/blacklight/facet_item_component.rb +1 -43
  54. data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
  55. data/app/components/blacklight/header_component.rb +1 -1
  56. data/app/components/blacklight/hidden_search_state_component.rb +1 -2
  57. data/app/components/blacklight/icons/icon_component.rb +4 -9
  58. data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
  59. data/app/components/blacklight/icons/list_component.rb +16 -0
  60. data/app/components/blacklight/icons/search_component.rb +16 -0
  61. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  62. data/app/components/blacklight/metadata_field_component.rb +24 -8
  63. data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
  64. data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
  65. data/app/components/blacklight/response/facet_group_component.rb +29 -8
  66. data/app/components/blacklight/response/pagination_component.html.erb +1 -1
  67. data/app/components/blacklight/response/pagination_component.rb +2 -11
  68. data/app/components/blacklight/response/sort_component.html.erb +6 -1
  69. data/app/components/blacklight/response/sort_component.rb +1 -16
  70. data/app/components/blacklight/response/spellcheck_component.rb +18 -7
  71. data/app/components/blacklight/response/view_type_button_component.rb +3 -7
  72. data/app/components/blacklight/response/view_type_component.rb +4 -6
  73. data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
  74. data/app/components/blacklight/search/sidebar_component.rb +17 -0
  75. data/app/components/blacklight/search_bar_component.html.erb +20 -15
  76. data/app/components/blacklight/search_bar_component.rb +2 -16
  77. data/app/components/blacklight/search_button_component.rb +3 -3
  78. data/app/components/blacklight/search_context_component.rb +43 -10
  79. data/app/components/blacklight/search_header_component.html.erb +2 -0
  80. data/app/components/blacklight/search_header_component.rb +6 -0
  81. data/app/components/blacklight/start_over_button_component.rb +5 -3
  82. data/app/components/blacklight/system/dropdown_component.rb +8 -5
  83. data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
  84. data/app/components/blacklight/system/flash_message_component.rb +12 -3
  85. data/app/components/blacklight/system/modal_component.html.erb +1 -1
  86. data/app/components/blacklight/system/modal_component.rb +1 -3
  87. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  88. data/app/components/blacklight/top_navbar_component.rb +0 -4
  89. data/app/controllers/bookmarks_controller.rb +1 -0
  90. data/app/controllers/catalog_controller.rb +1 -0
  91. data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
  92. data/app/controllers/concerns/blacklight/catalog.rb +21 -83
  93. data/app/controllers/concerns/blacklight/controller.rb +3 -41
  94. data/app/controllers/concerns/blacklight/search_context.rb +25 -7
  95. data/app/controllers/concerns/blacklight/search_history.rb +2 -0
  96. data/app/controllers/concerns/blacklight/searchable.rb +12 -1
  97. data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
  98. data/app/controllers/search_history_controller.rb +1 -0
  99. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
  100. data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
  101. data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
  102. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
  103. data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
  104. data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
  105. data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
  106. data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
  107. data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
  108. data/app/helpers/blacklight_helper.rb +1 -0
  109. data/app/helpers/catalog_helper.rb +1 -0
  110. data/app/javascript/blacklight/bookmark_toggle.js +13 -19
  111. data/app/javascript/blacklight/button_focus.js +12 -10
  112. data/app/javascript/blacklight/checkbox_submit.js +68 -123
  113. data/app/javascript/blacklight/core.js +5 -7
  114. data/app/javascript/blacklight/index.js +13 -0
  115. data/app/javascript/blacklight/modal.js +99 -164
  116. data/app/javascript/blacklight/modalForm.js +60 -0
  117. data/app/javascript/blacklight/search_context.js +46 -54
  118. data/app/models/blacklight/facet_paginator.rb +3 -2
  119. data/app/models/blacklight/icon.rb +4 -2
  120. data/app/models/bookmark.rb +0 -2
  121. data/app/models/concerns/blacklight/configurable.rb +5 -4
  122. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
  123. data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
  124. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
  125. data/app/models/concerns/blacklight/document/email.rb +1 -0
  126. data/app/models/concerns/blacklight/document/export.rb +2 -1
  127. data/app/models/concerns/blacklight/document/extensions.rb +1 -0
  128. data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
  129. data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
  130. data/app/models/concerns/blacklight/document/sms.rb +1 -0
  131. data/app/models/concerns/blacklight/suggest/response.rb +1 -0
  132. data/app/models/concerns/blacklight/user.rb +17 -8
  133. data/app/models/record_mailer.rb +13 -12
  134. data/app/models/search.rb +1 -7
  135. data/app/models/solr_document.rb +1 -0
  136. data/app/presenters/blacklight/clause_presenter.rb +1 -1
  137. data/app/presenters/blacklight/document_presenter.rb +23 -50
  138. data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
  139. data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
  140. data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
  141. data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
  142. data/app/presenters/blacklight/field_presenter.rb +1 -0
  143. data/app/presenters/blacklight/index_presenter.rb +2 -40
  144. data/app/presenters/blacklight/json_presenter.rb +10 -6
  145. data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
  146. data/app/presenters/blacklight/show_presenter.rb +1 -9
  147. data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
  148. data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
  149. data/app/services/blacklight/field_retriever.rb +12 -21
  150. data/app/services/blacklight/search_service.rb +10 -17
  151. data/app/values/blacklight/types.rb +0 -18
  152. data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
  153. data/app/views/bookmarks/_tools.html.erb +7 -12
  154. data/app/views/catalog/_advanced_search_form.html.erb +0 -1
  155. data/app/views/catalog/_bookmark_control.html.erb +1 -1
  156. data/app/views/catalog/_citation.html.erb +1 -1
  157. data/app/views/catalog/_constraints.html.erb +1 -14
  158. data/app/views/catalog/_document.atom.builder +12 -14
  159. data/app/views/catalog/_document.html.erb +5 -3
  160. data/app/views/catalog/_document.rss.builder +2 -4
  161. data/app/views/catalog/_facet_layout.html.erb +2 -2
  162. data/app/views/catalog/_facets.html.erb +5 -4
  163. data/app/views/catalog/_home_text.html.erb +2 -14
  164. data/app/views/catalog/_per_page_widget.html.erb +10 -1
  165. data/app/views/catalog/_search_form.html.erb +2 -2
  166. data/app/views/catalog/_search_header.html.erb +1 -2
  167. data/app/views/catalog/_search_results.html.erb +2 -2
  168. data/app/views/catalog/_search_sidebar.html.erb +5 -1
  169. data/app/views/catalog/_show_main_content.html.erb +11 -16
  170. data/app/views/catalog/_show_sidebar.html.erb +2 -2
  171. data/app/views/catalog/_show_tools.html.erb +8 -14
  172. data/app/views/catalog/_view_type_group.html.erb +1 -1
  173. data/app/views/catalog/email.html.erb +2 -2
  174. data/app/views/catalog/email_success.html.erb +5 -6
  175. data/app/views/catalog/facet.html.erb +7 -5
  176. data/app/views/catalog/index.atom.builder +12 -14
  177. data/app/views/catalog/index.html.erb +4 -1
  178. data/app/views/catalog/index.json.jbuilder +19 -19
  179. data/app/views/catalog/index.rss.builder +1 -1
  180. data/app/views/catalog/opensearch.xml.builder +1 -1
  181. data/app/views/catalog/sms.html.erb +2 -2
  182. data/app/views/catalog/sms_success.html.erb +5 -6
  183. data/app/views/catalog/suggest.html.erb +3 -0
  184. data/app/views/kaminari/blacklight/_page.html.erb +2 -1
  185. data/app/views/layouts/blacklight/base.html.erb +13 -2
  186. data/app/views/search_history/index.html.erb +6 -2
  187. data/app/views/shared/_flash_messages.html.erb +1 -1
  188. data/app/views/shared/_modal.html.erb +3 -3
  189. data/blacklight.gemspec +7 -11
  190. data/config/importmap.rb +3 -0
  191. data/config/locales/blacklight.ar.yml +0 -1
  192. data/config/locales/blacklight.ca.yml +0 -1
  193. data/config/locales/blacklight.de.yml +0 -1
  194. data/config/locales/blacklight.en.yml +0 -2
  195. data/config/locales/blacklight.es.yml +0 -1
  196. data/config/locales/blacklight.fr.yml +0 -1
  197. data/config/locales/blacklight.hu.yml +0 -1
  198. data/config/locales/blacklight.it.yml +0 -1
  199. data/config/locales/blacklight.nl.yml +0 -1
  200. data/config/locales/blacklight.pt-BR.yml +0 -1
  201. data/config/locales/blacklight.sq.yml +0 -1
  202. data/config/locales/blacklight.zh.yml +0 -1
  203. data/config/routes.rb +3 -2
  204. data/db/migrate/20140202020201_create_searches.rb +1 -0
  205. data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
  206. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
  207. data/docker-compose.yml +3 -3
  208. data/lib/blacklight/abstract_repository.rb +1 -6
  209. data/lib/blacklight/component.rb +47 -10
  210. data/lib/blacklight/configuration/context.rb +4 -4
  211. data/lib/blacklight/configuration/display_field.rb +7 -9
  212. data/lib/blacklight/configuration/facet_field.rb +17 -11
  213. data/lib/blacklight/configuration/field.rb +1 -0
  214. data/lib/blacklight/configuration/fields.rb +12 -15
  215. data/lib/blacklight/configuration/index_field.rb +1 -0
  216. data/lib/blacklight/configuration/null_display_field.rb +17 -0
  217. data/lib/blacklight/configuration/search_field.rb +1 -0
  218. data/lib/blacklight/configuration/show_field.rb +1 -0
  219. data/lib/blacklight/configuration/sort_field.rb +1 -0
  220. data/lib/blacklight/configuration/tool_config.rb +1 -0
  221. data/lib/blacklight/configuration/view_config.rb +14 -10
  222. data/lib/blacklight/configuration.rb +310 -365
  223. data/lib/blacklight/engine.rb +8 -24
  224. data/lib/blacklight/exceptions.rb +2 -2
  225. data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
  226. data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
  227. data/lib/blacklight/parameters.rb +7 -21
  228. data/lib/blacklight/routes/exportable.rb +1 -0
  229. data/lib/blacklight/routes/searchable.rb +2 -1
  230. data/lib/blacklight/routes.rb +1 -0
  231. data/lib/blacklight/search_builder.rb +10 -10
  232. data/lib/blacklight/search_state/filter_field.rb +8 -25
  233. data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
  234. data/lib/blacklight/search_state.rb +23 -79
  235. data/lib/blacklight/solr/document.rb +1 -0
  236. data/lib/blacklight/solr/facet_paginator.rb +1 -0
  237. data/lib/blacklight/solr/repository.rb +4 -24
  238. data/lib/blacklight/solr/request.rb +1 -0
  239. data/lib/blacklight/solr/response/facets.rb +21 -5
  240. data/lib/blacklight/solr/response/group.rb +1 -0
  241. data/lib/blacklight/solr/response/group_response.rb +1 -0
  242. data/lib/blacklight/solr/response/more_like_this.rb +1 -0
  243. data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
  244. data/lib/blacklight/solr/response/params.rb +5 -4
  245. data/lib/blacklight/solr/response/response.rb +1 -0
  246. data/lib/blacklight/solr/response/spelling.rb +1 -0
  247. data/lib/blacklight/solr/response.rb +16 -3
  248. data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
  249. data/lib/blacklight/solr.rb +7 -0
  250. data/lib/blacklight/version.rb +1 -0
  251. data/lib/blacklight.rb +26 -14
  252. data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
  253. data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
  254. data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
  255. data/lib/generators/blacklight/assets_generator.rb +13 -86
  256. data/lib/generators/blacklight/controller_generator.rb +4 -3
  257. data/lib/generators/blacklight/document_generator.rb +1 -0
  258. data/lib/generators/blacklight/install_generator.rb +4 -3
  259. data/lib/generators/blacklight/models_generator.rb +1 -0
  260. data/lib/generators/blacklight/search_builder_generator.rb +1 -0
  261. data/lib/generators/blacklight/solr_generator.rb +1 -1
  262. data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
  263. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
  264. data/lib/generators/blacklight/test_support_generator.rb +5 -3
  265. data/lib/generators/blacklight/user_generator.rb +7 -9
  266. data/lib/railties/blacklight.rake +6 -7
  267. data/package.json +10 -13
  268. data/rollup.config.js +27 -0
  269. data/spec/components/blacklight/constraints_component_spec.rb +17 -13
  270. data/spec/components/blacklight/document/action_component_spec.rb +6 -1
  271. data/spec/components/blacklight/document_component_spec.rb +22 -131
  272. data/spec/components/blacklight/facet_component_spec.rb +3 -18
  273. data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
  274. data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
  275. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
  276. data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
  277. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  278. data/spec/components/blacklight/search_context_component_spec.rb +17 -8
  279. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
  280. data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
  281. data/spec/controllers/bookmarks_controller_spec.rb +2 -3
  282. data/spec/controllers/catalog_controller_spec.rb +13 -135
  283. data/spec/features/advanced_search_spec.rb +0 -56
  284. data/spec/features/autocomplete_spec.rb +1 -1
  285. data/spec/features/axe_spec.rb +1 -6
  286. data/spec/features/bookmarks_spec.rb +1 -1
  287. data/spec/features/facets_spec.rb +6 -4
  288. data/spec/features/search_context_spec.rb +5 -11
  289. data/spec/features/search_results_spec.rb +0 -33
  290. data/spec/features/sitelinks_search_box.rb +13 -0
  291. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
  292. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
  293. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  294. data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
  295. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
  296. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
  297. data/spec/helpers/blacklight_helper_spec.rb +8 -252
  298. data/spec/helpers/catalog_helper_spec.rb +7 -118
  299. data/spec/i18n_spec.rb +1 -0
  300. data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
  301. data/spec/lib/blacklight/component_spec.rb +27 -32
  302. data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
  303. data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
  304. data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
  305. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  306. data/spec/lib/blacklight/parameters_spec.rb +1 -4
  307. data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
  308. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
  309. data/spec/lib/blacklight/search_state_spec.rb +80 -198
  310. data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  311. data/spec/models/blacklight/configuration_spec.rb +17 -51
  312. data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
  313. data/spec/models/blacklight/icon_spec.rb +31 -15
  314. data/spec/models/blacklight/search_builder_spec.rb +9 -9
  315. data/spec/models/blacklight/solr/document_spec.rb +3 -3
  316. data/spec/models/blacklight/solr/repository_spec.rb +0 -45
  317. data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
  318. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
  319. data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
  320. data/spec/models/blacklight/solr/response_spec.rb +9 -2
  321. data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
  322. data/spec/models/blacklight/user_spec.rb +22 -0
  323. data/spec/models/solr_document_spec.rb +3 -9
  324. data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
  325. data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
  326. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
  327. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
  328. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
  329. data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
  330. data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
  331. data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
  332. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
  333. data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
  334. data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
  335. data/spec/requests/load_suggestions_spec.rb +16 -0
  336. data/spec/routing/catalog_routing_spec.rb +2 -1
  337. data/spec/services/blacklight/search_service_spec.rb +39 -76
  338. data/spec/spec_helper.rb +8 -9
  339. data/spec/support/controller_level_helpers.rb +1 -2
  340. data/spec/support/features/search_helpers.rb +39 -0
  341. data/spec/support/features/session_helpers.rb +1 -0
  342. data/spec/support/features.rb +3 -0
  343. data/spec/support/view_component_capybara_test_helpers.rb +8 -0
  344. data/spec/test_app_templates/Gemfile.extra +1 -0
  345. data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
  346. data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
  347. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  348. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
  349. data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
  350. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
  351. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
  352. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
  353. data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
  354. data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
  355. data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
  356. data/spec/views/catalog/index.html.erb_spec.rb +5 -6
  357. data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
  358. data/spec/views/catalog/show.html.erb_spec.rb +3 -25
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
  360. data/tasks/blacklight.rake +11 -9
  361. data/template.demo.rb +7 -7
  362. metadata +77 -189
  363. data/.babelrc +0 -11
  364. data/.github/matrix.json +0 -62
  365. data/.github/workflows/build.yml +0 -16
  366. data/.github/workflows/lint.yml +0 -23
  367. data/.github/workflows/main.yml +0 -23
  368. data/.github/workflows/test.yml +0 -53
  369. data/app/assets/images/blacklight/list.svg +0 -1
  370. data/app/assets/images/blacklight/search.svg +0 -1
  371. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
  372. data/app/components/blacklight/content_areas_shim.rb +0 -13
  373. data/app/components/blacklight/search/per_page_component.html.erb +0 -2
  374. data/app/components/blacklight/search/per_page_component.rb +0 -50
  375. data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
  376. data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
  377. data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
  378. data/app/controllers/concerns/blacklight/base.rb +0 -12
  379. data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
  380. data/app/controllers/concerns/blacklight/facet.rb +0 -69
  381. data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
  382. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
  383. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
  384. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
  385. data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
  386. data/app/javascript/blacklight/autocomplete.js +0 -36
  387. data/app/javascript/blacklight/facet_load.js +0 -22
  388. data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
  389. data/app/views/catalog/_constraints_element.html.erb +0 -14
  390. data/app/views/catalog/_document_action.html.erb +0 -5
  391. data/app/views/catalog/_facet_group.html.erb +0 -5
  392. data/app/views/catalog/_facet_limit.html.erb +0 -3
  393. data/app/views/catalog/_index.html.erb +0 -1
  394. data/app/views/catalog/_index_header.html.erb +0 -22
  395. data/app/views/catalog/_previous_next_doc.html.erb +0 -2
  396. data/app/views/catalog/_show.html.erb +0 -6
  397. data/app/views/catalog/_show_header.html.erb +0 -2
  398. data/app/views/catalog/_thumbnail.html.erb +0 -1
  399. data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
  400. data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
  401. data/spec/components/blacklight/header_component_spec.rb +0 -20
  402. data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
  403. data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
  404. data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
  405. data/spec/controllers/blacklight/facet_spec.rb +0 -33
  406. data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
  407. data/spec/features/citation_spec.rb +0 -10
  408. data/spec/features/sitelinks_search_box_spec.rb +0 -13
  409. data/spec/features/sms_spec.rb +0 -12
  410. data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
  411. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
  412. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
  413. data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
  414. data/spec/lib/blacklight/engine_spec.rb +0 -41
  415. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
  416. data/spec/services/blacklight/field_retriever_spec.rb +0 -17
  417. data/spec/support/view_component_test_helpers.rb +0 -35
  418. data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
  419. data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
  420. data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
  421. data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
  422. data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
  423. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
  424. data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
  425. data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -1,15 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # URL helper methods
4
5
  module Blacklight::UrlHelperBehavior
5
- extend Deprecation
6
-
7
- # @deprecated
8
- def url_for_document(doc, options = {})
9
- search_state.url_for_document(doc, options)
10
- end
11
- deprecation_deprecate url_for_document: 'Use SearchState#url_for_document directly'
12
-
13
6
  # Uses the catalog_path route to create a link to the show page for an item.
14
7
  # catalog_path accepts a hash. The solr query params are stored in the session,
15
8
  # so we only need the +counter+ param here. We also need to know if we are viewing to document as part of search results.
@@ -19,9 +12,9 @@ module Blacklight::UrlHelperBehavior
19
12
  # @param opts [Hash] the options to create the link with
20
13
  # @option opts [Number] :counter (nil) the count to set in the session (for paging through a query result)
21
14
  # @example Passing in an image
22
- # link_to_document(doc, '<img src="thumbnail.png">', counter: 3) #=> "<a href=\"catalog/123\" data-tracker-href=\"/catalog/123/track?counter=3&search_id=999\"><img src="thumbnail.png"></a>
15
+ # link_to_document(doc, '<img src="thumbnail.png">', counter: 3) #=> "<a href=\"catalog/123\" data-context-href=\"/catalog/123/track?counter=3&search_id=999\"><img src="thumbnail.png"></a>
23
16
  # @example With the default document link field
24
- # link_to_document(doc, counter: 3) #=> "<a href=\"catalog/123\" data-tracker-href=\"/catalog/123/track?counter=3&search_id=999\">My Title</a>
17
+ # link_to_document(doc, counter: 3) #=> "<a href=\"catalog/123\" data-context-href=\"/catalog/123/track?counter=3&search_id=999\">My Title</a>
25
18
  def link_to_document(doc, field_or_opts = nil, opts = { counter: nil })
26
19
  label = case field_or_opts
27
20
  when NilClass
@@ -29,18 +22,11 @@ module Blacklight::UrlHelperBehavior
29
22
  when Hash
30
23
  opts = field_or_opts
31
24
  document_presenter(doc).heading
32
- when Proc, Symbol
33
- Deprecation.warn(self, "passing a #{field_or_opts.class} to link_to_document is deprecated and will be removed in Blacklight 8")
34
- Deprecation.silence(Blacklight::IndexPresenter) do
35
- index_presenter(doc).label field_or_opts, opts
36
- end
37
25
  else # String
38
26
  field_or_opts
39
27
  end
40
28
 
41
- Deprecation.silence(Blacklight::UrlHelperBehavior) do
42
- link_to label, url_for_document(doc), document_link_params(doc, opts)
43
- end
29
+ link_to label, search_state.url_for_document(doc), document_link_params(doc, opts)
44
30
  end
45
31
 
46
32
  # @private
@@ -49,47 +35,19 @@ module Blacklight::UrlHelperBehavior
49
35
  end
50
36
  private :document_link_params
51
37
 
52
- ##
53
- # Link to the previous document in the current search context
54
- # @deprecated
55
- def link_to_previous_document(previous_document, classes: 'previous', **addl_link_opts)
56
- link_opts = session_tracking_params(previous_document, search_session['counter'].to_i - 1).merge(class: classes, rel: 'prev').merge(addl_link_opts)
57
- link_to_unless previous_document.nil?, raw(t('views.pagination.previous')), url_for_document(previous_document), link_opts do
58
- tag.span raw(t('views.pagination.previous')), class: 'previous'
59
- end
60
- end
61
- deprecation_deprecate link_to_previous_document: 'Moving to Blacklight::SearchContext::ServerItemPaginationComponent'
62
-
63
- ##
64
- # Link to the next document in the current search context
65
- # @deprecated
66
- def link_to_next_document(next_document, classes: 'next', **addl_link_opts)
67
- link_opts = session_tracking_params(next_document, search_session['counter'].to_i + 1).merge(class: classes, rel: 'next').merge(addl_link_opts)
68
- link_to_unless next_document.nil?, raw(t('views.pagination.next')), url_for_document(next_document), link_opts do
69
- tag.span raw(t('views.pagination.next')), class: 'next'
70
- end
71
- end
72
- deprecation_deprecate link_to_previous_document: 'Moving to Blacklight::SearchContext::ServerItemPaginationComponent'
73
-
74
38
  ##
75
39
  # Attributes for a link that gives a URL we can use to track clicks for the current search session
76
- # We disable turbo prefetch (InstantClick), because since we replace the link with a form, it's just wasted.
77
- # @private
78
40
  # @param [SolrDocument] document
79
41
  # @param [Integer] counter
80
42
  # @example
81
43
  # session_tracking_params(SolrDocument.new(id: 123), 7)
82
44
  # => { data: { context_href: '/catalog/123/track?counter=7&search_id=999' } }
83
- def session_tracking_params document, counter
84
- path = session_tracking_path(document, per_page: params.fetch(:per_page, search_session['per_page']), counter: counter, search_id: current_search_session.try(:id), document_id: document&.id)
85
-
86
- if path.nil?
87
- return {}
88
- end
45
+ def session_tracking_params document, counter, per_page: search_session['per_page'], search_id: current_search_session&.id
46
+ path = session_tracking_path(document, per_page: params.fetch(:per_page, per_page), counter: counter, search_id: search_id, document_id: document&.id)
47
+ return {} if path.nil?
89
48
 
90
- { data: { context_href: path, turbo_prefetch: false } }
49
+ { data: { context_href: path } }
91
50
  end
92
- private :session_tracking_params
93
51
 
94
52
  ##
95
53
  # Get the URL for tracking search sessions across pages using polymorphic routing
@@ -101,7 +59,7 @@ module Blacklight::UrlHelperBehavior
101
59
  end
102
60
 
103
61
  raise "Unable to find #{controller_tracking_method} route helper. " \
104
- "Did you add `concerns :searchable` routing mixin to your `config/routes.rb`?"
62
+ "Did you add `concerns :searchable` routing mixin to your `config/routes.rb`?"
105
63
  end
106
64
 
107
65
  def controller_tracking_method
@@ -112,28 +70,6 @@ module Blacklight::UrlHelperBehavior
112
70
  # link based helpers ->
113
71
  #
114
72
 
115
- # create link to query (e.g. spelling suggestion)
116
- # @deprecated
117
- def link_to_query(query)
118
- p = search_state.to_h.except(:page, :action)
119
- p[:q] = query
120
- link_to(query, search_action_path(p))
121
- end
122
- deprecation_deprecate link_to_query: 'Removed without replacement'
123
-
124
- ##
125
- # Get the path to the search action with any parameters (e.g. view type)
126
- # that should be persisted across search sessions.
127
- # @deprecated
128
- def start_over_path query_params = params
129
- h = {}
130
- current_index_view_type = document_index_view_type(query_params)
131
- h[:view] = current_index_view_type unless current_index_view_type == default_document_index_view_type
132
-
133
- search_action_path(h)
134
- end
135
- deprecation_deprecate start_over_path: 'Removed without replacement'
136
-
137
73
  # Create a link back to the index screen, keeping the user's facet, query and paging choices intact by using session.
138
74
  # @example
139
75
  # link_back_to_catalog(label: 'Back to Search')
@@ -166,30 +102,9 @@ module Blacklight::UrlHelperBehavior
166
102
  link_to label, link_url, opts
167
103
  end
168
104
 
169
- # Search History and Saved Searches display
105
+ # Use in e.g. the search history display, where we want something more like text instead of the normal constraints
170
106
  def link_to_previous_search(params)
171
- Deprecation.silence(Blacklight::SearchHistoryConstraintsHelperBehavior) do
172
- link_to(render_search_to_s(params), search_action_path(params))
173
- end
174
- end
175
-
176
- # Get url parameters to a search within a grouped result set
177
- #
178
- # @deprecated
179
- # @param [Blacklight::Solr::Response::Group] group
180
- # @return [Hash]
181
- def add_group_facet_params_and_redirect group
182
- search_state.add_facet_params_and_redirect(group.field, group.key)
183
- end
184
- deprecation_deprecate add_group_facet_params_and_redirect: 'Removed without replacement'
185
-
186
- # A URL to refworks export, with an embedded callback URL to this app.
187
- # the callback URL is to bookmarks#export, which delivers a list of
188
- # user's bookmarks in 'refworks marc txt' format -- we tell refworks
189
- # to expect that format.
190
- # @deprecated
191
- def bookmarks_export_url(format, params = {})
192
- bookmarks_url(params.merge(format: format, encrypted_user_id: encrypt_user_id(current_or_guest_user.id)))
107
+ search_state = controller.search_state_class.new(params, blacklight_config, self)
108
+ link_to(render(Blacklight::ConstraintsComponent.for_search_history(search_state: search_state)), search_action_path(params))
193
109
  end
194
- deprecation_deprecate bookmarks_export_url: 'Removed without replacement'
195
110
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module BlacklightHelper
3
4
  include Blacklight::BlacklightHelperBehavior
4
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module CatalogHelper
3
4
  include Blacklight::CatalogHelperBehavior
4
5
  end
@@ -1,25 +1,19 @@
1
- (function($) {
2
- //change form submit toggle to checkbox
1
+ import Blacklight from './core'
2
+ import CheckboxSubmit from './checkbox_submit'
3
+
4
+ const BookmarkToggle = (() => {
5
+ // change form submit toggle to checkbox
3
6
  Blacklight.doBookmarkToggleBehavior = function() {
4
- if (typeof Blacklight.do_bookmark_toggle_behavior == 'function') {
5
- console.warn("do_bookmark_toggle_behavior is deprecated. Use doBookmarkToggleBehavior instead.");
6
- return Blacklight.do_bookmark_toggle_behavior();
7
- }
8
- $(Blacklight.doBookmarkToggleBehavior.selector).blCheckboxSubmit({
9
- // cssClass is added to elements added, plus used for id base
10
- cssClass: 'toggle-bookmark',
11
- success: function(checked, response) {
12
- if (response.bookmarks) {
13
- $('[data-role=bookmark-counter]').text(response.bookmarks.count);
14
- }
15
- }
7
+ document.addEventListener('click', (e) => {
8
+ if (e.target.matches('[data-checkboxsubmit-target="checkbox"]')) {
9
+ const form = e.target.closest('form')
10
+ if (form) new CheckboxSubmit(form).clicked(e);
11
+ }
16
12
  });
17
13
  };
18
14
  Blacklight.doBookmarkToggleBehavior.selector = 'form.bookmark-toggle';
19
15
 
20
- Blacklight.onLoad(function() {
21
- Blacklight.doBookmarkToggleBehavior();
22
- });
23
-
16
+ Blacklight.doBookmarkToggleBehavior();
17
+ })()
24
18
 
25
- })(jQuery);
19
+ export default BookmarkToggle
@@ -1,10 +1,12 @@
1
- Blacklight.onLoad(function() {
2
- // Button clicks should change focus. As of 10/3/19, Firefox for Mac and
3
- // Safari both do not set focus to a button on button click.
4
- // See https://zellwk.com/blog/inconsistent-button-behavior/ for background information
5
- document.querySelectorAll('button.collapse-toggle').forEach((button) => {
6
- button.addEventListener('click', () => {
7
- event.target.focus();
8
- });
9
- });
10
- });
1
+ const ButtonFocus = (() => {
2
+ document.addEventListener('click', (e) => {
3
+ // Button clicks should change focus. As of 10/3/19, Firefox for Mac and
4
+ // Safari both do not set focus to a button on button click.
5
+ // See https://zellwk.com/blog/inconsistent-button-behavior/ for background information
6
+ if (e.target.matches('[data-toggle="collapse"]') || e.target.matches('[data-bs-toggle="collapse"]')) {
7
+ e.target.focus()
8
+ }
9
+ })
10
+ })()
11
+
12
+ export default ButtonFocus
@@ -1,135 +1,80 @@
1
- /* A JQuery plugin (should this be implemented as a widget instead? not sure)
2
- that will convert a "toggle" form, with single submit button to add/remove
1
+ /* Converts a "toggle" form, with single submit button to add/remove
3
2
  something, like used for Bookmarks, into an AJAXy checkbox instead.
4
-
5
3
  Apply to a form. Does require certain assumption about the form:
6
4
  1) The same form 'action' href must be used for both ADD and REMOVE
7
5
  actions, with the different being the hidden input name="_method"
8
6
  being set to "put" or "delete" -- that's the Rails method to pretend
9
7
  to be doing a certain HTTP verb. So same URL, PUT to add, DELETE
10
8
  to remove. This plugin assumes that.
11
-
12
9
  Plus, the form this is applied to should provide a data-doc-id
13
10
  attribute (HTML5-style doc-*) that contains the id/primary key
14
11
  of the object in question -- used by plugin for a unique value for
15
12
  DOM id's.
16
-
17
- Uses HTML for a checkbox compatible with Bootstrap 3.
18
-
19
- Pass in options for your class name and labels:
20
- $("form.something").blCheckboxSubmit({
21
- //cssClass is added to elements added, plus used for id base
22
- cssClass: "toggle_my_kinda_form",
23
- error: function() {
24
- #optional callback
25
- },
26
- success: function(after_success_check_state) {
27
- #optional callback
28
- }
29
- });
13
+ Uses HTML for a checkbox compatible with Bootstrap 4.
14
+ new CheckboxSubmit(document.querySelector('form.something')).render()
30
15
  */
31
- (function($) {
32
- $.fn.blCheckboxSubmit = function(argOpts) {
33
- this.each(function() {
34
- var options = $.extend({}, $.fn.blCheckboxSubmit.defaults, argOpts);
35
-
36
-
37
- var form = $(this);
38
- form.children().hide();
39
- //We're going to use the existing form to actually send our add/removes
40
- //This works conveneintly because the exact same action href is used
41
- //for both bookmarks/$doc_id. But let's take out the irrelevant parts
42
- //of the form to avoid any future confusion.
43
- form.find('input[type=submit]').remove();
44
-
45
- //View needs to set data-doc-id so we know a unique value
46
- //for making DOM id
47
- var uniqueId = form.attr('data-doc-id') || Math.random();
48
- // if form is currently using method delete to change state,
49
- // then checkbox is currently checked
50
- var checked = (form.find('input[name=_method][value=delete]').length != 0);
51
-
52
- var checkbox = $('<input type="checkbox">')
53
- .addClass( options.cssClass )
54
- .attr('id', options.cssClass + '_' + uniqueId);
55
- var label = $('<label>')
56
- .addClass( options.cssClass )
57
- .attr('for', options.cssClass + '_' + uniqueId)
58
- .attr('title', form.attr('title') || '');
59
- var span = $('<span>');
60
-
61
- label.append(checkbox);
62
- label.append(' ');
63
- label.append(span);
64
-
65
- var checkboxDiv = $('<div class="checkbox" />')
66
- .addClass(options.cssClass)
67
- .append(label);
68
-
69
- function updateStateFor(state) {
70
- checkbox.prop('checked', state);
71
- label.toggleClass('checked', state);
72
- if (state) {
73
- //Set the Rails hidden field that fakes an HTTP verb
74
- //properly for current state action.
75
- form.find('input[name=_method]').val('delete');
76
- span.html(form.attr('data-present'));
77
- } else {
78
- form.find('input[name=_method]').val('put');
79
- span.html(form.attr('data-absent'));
80
- }
81
- }
82
-
83
- form.append(checkboxDiv);
84
- updateStateFor(checked);
85
-
86
- checkbox.click(function() {
87
- span.html(form.attr('data-inprogress'));
88
- label.attr('disabled', 'disabled');
89
- checkbox.attr('disabled', 'disabled');
90
-
91
- $.ajax({
92
- url: form.attr('action'),
93
- beforeSend: function(xhr) { xhr.setRequestHeader('X-CSRF-Token', Blacklight.csrfToken()) },
94
- dataType: 'json',
95
- type: form.attr('method').toUpperCase(),
96
- data: form.serialize(),
97
- error: function() {
98
- label.removeAttr('disabled');
99
- checkbox.removeAttr('disabled');
100
- options.error.call();
101
- },
102
- success: function(data, status, xhr) {
103
- //if app isn't running at all, xhr annoyingly
104
- //reports success with status 0.
105
- if (xhr.status != 0) {
106
- checked = ! checked;
107
- updateStateFor(checked);
108
- label.removeAttr('disabled');
109
- checkbox.removeAttr('disabled');
110
- options.success.call(form, checked, xhr.responseJSON);
111
- } else {
112
- label.removeAttr('disabled');
113
- checkbox.removeAttr('disabled');
114
- options.error.call();
115
- }
116
- }
117
- });
118
-
119
- return false;
120
- }); //checkbox.click
121
-
122
-
123
- }); //this.each
124
- return this;
125
- };
126
-
127
- $.fn.blCheckboxSubmit.defaults = {
128
- //cssClass is added to elements added, plus used for id base
129
- cssClass: 'blCheckboxSubmit',
130
- error: function() {
131
- alert("Error");
132
- },
133
- success: function() {} //callback
134
- };
135
- })(jQuery);
16
+ export default class CheckboxSubmit {
17
+ constructor(form) {
18
+ this.form = form
19
+ }
20
+
21
+ async clicked(evt) {
22
+ this.spanTarget.innerHTML = this.form.getAttribute('data-inprogress')
23
+ this.labelTarget.setAttribute('disabled', 'disabled');
24
+ this.checkboxTarget.setAttribute('disabled', 'disabled');
25
+ const response = await fetch(this.formTarget.getAttribute('action'), {
26
+ body: new FormData(this.formTarget),
27
+ method: this.formTarget.getAttribute('method').toUpperCase(),
28
+ headers: {
29
+ 'Accept': 'application/json',
30
+ 'X-Requested-With': 'XMLHttpRequest',
31
+ 'X-CSRF-Token': document.querySelector('meta[name=csrf-token]')?.content
32
+ }
33
+ })
34
+ this.labelTarget.removeAttribute('disabled')
35
+ this.checkboxTarget.removeAttribute('disabled')
36
+ if (response.ok) {
37
+ const json = await response.json()
38
+ this.updateStateFor(!this.checked)
39
+ document.querySelector('[data-role=bookmark-counter]').innerHTML = json.bookmarks.count
40
+ } else {
41
+ alert('Error')
42
+ }
43
+ }
44
+
45
+ get checked() {
46
+ return (this.form.querySelectorAll('input[name=_method][value=delete]').length != 0)
47
+ }
48
+
49
+ get formTarget() {
50
+ return this.form
51
+ }
52
+
53
+ get labelTarget() {
54
+ return this.form.querySelector('[data-checkboxsubmit-target="label"]')
55
+ }
56
+
57
+ get checkboxTarget() {
58
+ return this.form.querySelector('[data-checkboxsubmit-target="checkbox"]')
59
+ }
60
+
61
+ get spanTarget() {
62
+ return this.form.querySelector('[data-checkboxsubmit-target="span"]')
63
+ }
64
+
65
+ updateStateFor(state) {
66
+ this.checkboxTarget.checked = state
67
+
68
+ if (state) {
69
+ this.labelTarget.classList.add('checked')
70
+ //Set the Rails hidden field that fakes an HTTP verb
71
+ //properly for current state action.
72
+ this.formTarget.querySelector('input[name=_method]').value = 'delete'
73
+ this.spanTarget.innerHTML = this.form.getAttribute('data-present')
74
+ } else {
75
+ this.labelTarget.classList.remove('checked')
76
+ this.formTarget.querySelector('input[name=_method]').value = 'put'
77
+ this.spanTarget.innerHTML = this.form.getAttribute('data-absent')
78
+ }
79
+ }
80
+ }
@@ -1,20 +1,20 @@
1
1
  const Blacklight = function() {
2
- var buffer = new Array;
2
+ const buffer = new Array;
3
3
  return {
4
4
  onLoad: function(func) {
5
5
  buffer.push(func);
6
6
  },
7
7
 
8
8
  activate: function() {
9
- for(var i = 0; i < buffer.length; i++) {
9
+ for(let i = 0; i < buffer.length; i++) {
10
10
  buffer[i].call();
11
11
  }
12
12
  },
13
13
 
14
14
  listeners: function () {
15
- var listeners = [];
15
+ const listeners = [];
16
16
  if (typeof Turbo !== 'undefined') {
17
- listeners.push('turbo:load');
17
+ listeners.push('turbo:load', 'turbo:frame-load');
18
18
  } else if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
19
19
  // Turbolinks 5
20
20
  if (Turbolinks.BrowserAdapter) {
@@ -51,7 +51,5 @@ Blacklight.onLoad(function () {
51
51
  elem.classList.add('js')
52
52
  })
53
53
 
54
- Blacklight.csrfToken = () => document.querySelector('meta[name=csrf-token]')?.content
55
- Blacklight.csrfParam = () => document.querySelector('meta[name=csrf-param]')?.content
56
54
 
57
- window.Blacklight = Blacklight
55
+ export default Blacklight
@@ -0,0 +1,13 @@
1
+ import BookmarkToggle from './bookmark_toggle'
2
+ import ButtonFocus from './button_focus'
3
+ import Modal from './modal'
4
+ import SearchContext from './search_context'
5
+ import Core from './core'
6
+
7
+ export default {
8
+ BookmarkToggle,
9
+ ButtonFocus,
10
+ Modal,
11
+ SearchContext,
12
+ onLoad: Core.onLoad
13
+ }