blacklight 7.22.0 → 7.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +29 -8
  3. data/VERSION +1 -1
  4. data/app/assets/javascripts/blacklight/blacklight.js +2 -2
  5. data/app/assets/stylesheets/blacklight/_facets.scss +6 -0
  6. data/app/components/blacklight/advanced_search_form_component.rb +5 -5
  7. data/app/components/blacklight/constraints_component.html.erb +8 -4
  8. data/app/components/blacklight/constraints_component.rb +43 -18
  9. data/app/components/blacklight/document/action_component.html.erb +1 -1
  10. data/app/components/blacklight/document/action_component.rb +10 -3
  11. data/app/components/blacklight/document/bookmark_component.rb +2 -2
  12. data/app/components/blacklight/document/citation_component.rb +1 -1
  13. data/app/components/blacklight/document/group_component.html.erb +1 -1
  14. data/app/components/blacklight/document/group_component.rb +2 -2
  15. data/app/components/blacklight/document/more_like_this_component.html.erb +1 -1
  16. data/app/components/blacklight/document/more_like_this_component.rb +1 -1
  17. data/app/components/blacklight/document/thumbnail_component.rb +1 -1
  18. data/app/components/blacklight/document_component.rb +2 -2
  19. data/app/components/blacklight/document_title_component.rb +3 -3
  20. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  21. data/app/components/blacklight/facet_field_inclusive_constraint_component.html.erb +1 -1
  22. data/app/components/blacklight/facet_field_inclusive_constraint_component.rb +1 -1
  23. data/app/components/blacklight/facet_field_list_component.html.erb +1 -1
  24. data/app/components/blacklight/facet_field_list_component.rb +1 -1
  25. data/app/components/blacklight/facet_field_pagination_component.html.erb +4 -4
  26. data/app/components/blacklight/facet_field_pagination_component.rb +4 -0
  27. data/app/components/blacklight/facet_item_component.rb +2 -2
  28. data/app/components/blacklight/facet_item_pivot_component.rb +2 -2
  29. data/app/components/blacklight/metadata_field_component.rb +2 -2
  30. data/app/components/blacklight/response/facet_group_component.html.erb +1 -1
  31. data/app/components/blacklight/response/facet_group_component.rb +1 -1
  32. data/app/components/blacklight/response/pagination_component.rb +1 -1
  33. data/app/components/blacklight/response/sort_component.html.erb +1 -1
  34. data/app/components/blacklight/response/spellcheck_component.rb +14 -3
  35. data/app/components/blacklight/response/view_type_button_component.rb +3 -3
  36. data/app/components/blacklight/response/view_type_component.rb +1 -1
  37. data/app/components/blacklight/search_bar_component.rb +2 -2
  38. data/app/components/blacklight/search_context_component.rb +3 -3
  39. data/app/components/blacklight/search_history_constraint_layout_component.rb +14 -0
  40. data/app/components/blacklight/start_over_button_component.rb +20 -0
  41. data/app/components/blacklight/system/dropdown_component.rb +1 -1
  42. data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
  43. data/app/controllers/concerns/blacklight/bookmarks.rb +1 -1
  44. data/app/controllers/concerns/blacklight/catalog.rb +2 -2
  45. data/app/controllers/concerns/blacklight/search_context.rb +1 -1
  46. data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -4
  47. data/app/helpers/blacklight/catalog_helper_behavior.rb +18 -7
  48. data/app/helpers/blacklight/render_partials_helper_behavior.rb +12 -1
  49. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +30 -2
  50. data/app/helpers/blacklight/url_helper_behavior.rb +3 -1
  51. data/app/javascript/blacklight/modal.js +4 -4
  52. data/app/models/concerns/blacklight/configurable.rb +1 -1
  53. data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -1
  54. data/app/models/concerns/blacklight/document/extensions.rb +1 -1
  55. data/app/models/concerns/blacklight/document/semantic_fields.rb +1 -1
  56. data/app/models/concerns/blacklight/document.rb +1 -1
  57. data/app/views/catalog/_email_form.html.erb +1 -1
  58. data/app/views/catalog/_search_results.html.erb +1 -1
  59. data/app/views/catalog/_sms_form.html.erb +3 -3
  60. data/app/views/catalog/_start_over.html.erb +1 -1
  61. data/app/views/layouts/blacklight/base.html.erb +1 -0
  62. data/blacklight.gemspec +3 -4
  63. data/lib/blacklight/configuration/fields.rb +1 -1
  64. data/lib/blacklight/configuration.rb +2 -1
  65. data/lib/blacklight/deprecations/engine_configuration.rb +66 -0
  66. data/lib/blacklight/engine.rb +21 -10
  67. data/lib/blacklight/exceptions.rb +3 -0
  68. data/lib/blacklight/search_state/filter_field.rb +4 -4
  69. data/lib/blacklight/solr/repository.rb +36 -12
  70. data/lib/blacklight/solr/search_builder_behavior.rb +1 -4
  71. data/lib/generators/blacklight/assets_generator.rb +14 -10
  72. data/package.json +1 -1
  73. data/spec/components/blacklight/constraints_component_spec.rb +68 -0
  74. data/spec/components/blacklight/document/action_component_spec.rb +2 -1
  75. data/spec/components/blacklight/document_component_spec.rb +1 -1
  76. data/spec/components/blacklight/response/spellcheck_component_spec.rb +73 -0
  77. data/spec/components/blacklight/start_over_button_component_spec.rb +38 -0
  78. data/spec/controllers/catalog_controller_spec.rb +1 -1
  79. data/spec/features/did_you_mean_spec.rb +21 -0
  80. data/spec/features/search_context_spec.rb +3 -1
  81. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +2 -0
  82. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +3 -3
  83. data/spec/helpers/blacklight_helper_spec.rb +8 -3
  84. data/spec/helpers/catalog_helper_spec.rb +6 -2
  85. data/spec/lib/blacklight/engine_spec.rb +41 -0
  86. data/spec/models/blacklight/facet_paginator_spec.rb +60 -15
  87. data/spec/models/blacklight/solr/repository_spec.rb +29 -21
  88. data/spec/models/blacklight/solr/response/facets_spec.rb +48 -10
  89. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +1 -1
  90. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -2
  91. data/spec/routing/search_history_spec.rb +9 -0
  92. data/spec/services/blacklight/search_service_spec.rb +8 -0
  93. data/spec/spec_helper.rb +2 -3
  94. data/spec/support/controller_level_helpers.rb +8 -0
  95. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -1
  96. data/spec/views/catalog/_index.html.erb_spec.rb +1 -1
  97. data/spec/views/catalog/_show.html.erb_spec.rb +1 -1
  98. data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -1
  99. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  100. data/spec/views/catalog/index.atom.builder_spec.rb +1 -0
  101. data/spec/views/catalog/index.html.erb_spec.rb +1 -0
  102. data/spec/views/catalog/index.json.jbuilder_spec.rb +1 -1
  103. data/spec/views/catalog/show.json.jbuilder_spec.rb +1 -1
  104. metadata +22 -23
@@ -8,18 +8,29 @@ module Blacklight
8
8
  # @param [Array<String>] options explicit spellcheck options to render
9
9
  def initialize(response:, options: nil)
10
10
  @response = response
11
- @options = options || @response&.spelling&.words
11
+ @options = options
12
+ @options ||= options_from_response(@response)
12
13
  end
13
14
 
14
15
  def link_to_query(query)
15
16
  Deprecation.silence(Blacklight::UrlHelperBehavior) do
16
- @view_context.link_to_query(query)
17
+ helpers.link_to_query(query)
17
18
  end
18
19
  end
19
20
 
20
21
  def render?
21
22
  Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
22
- @options.any? && @view_context.should_show_spellcheck_suggestions?(@response)
23
+ @options&.any? && helpers.should_show_spellcheck_suggestions?(@response)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def options_from_response(response)
30
+ if response&.spelling&.collation
31
+ [response.spelling.collation]
32
+ elsif response&.spelling&.words
33
+ response.spelling.words
23
34
  end
24
35
  end
25
36
  end
@@ -16,18 +16,18 @@ module Blacklight
16
16
 
17
17
  def icon
18
18
  Deprecation.silence(Blacklight::CatalogHelperBehavior) do
19
- @view_context.render_view_type_group_icon(@view.icon || @key)
19
+ helpers.render_view_type_group_icon(@view.icon || @key)
20
20
  end
21
21
  end
22
22
 
23
23
  def label
24
24
  Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
25
- @view_context.view_label(@key)
25
+ helpers.view_label(@key)
26
26
  end
27
27
  end
28
28
 
29
29
  def url
30
- @view_context.url_for(@search_state.to_h.merge(view: @key))
30
+ helpers.url_for(@search_state.to_h.merge(view: @key))
31
31
  end
32
32
 
33
33
  def selected?
@@ -24,7 +24,7 @@ module Blacklight
24
24
 
25
25
  def render?
26
26
  Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
27
- @view_context.has_alternative_views?
27
+ helpers.has_alternative_views?
28
28
  end
29
29
  end
30
30
  end
@@ -57,12 +57,12 @@ module Blacklight
57
57
  end
58
58
 
59
59
  def blacklight_config
60
- @view_context.blacklight_config
60
+ helpers.blacklight_config
61
61
  end
62
62
 
63
63
  def render_hash_as_hidden_fields(*args)
64
64
  Deprecation.silence(Blacklight::HashAsHiddenFieldsHelperBehavior) do
65
- @view_context.render_hash_as_hidden_fields(*args)
65
+ helpers.render_hash_as_hidden_fields(*args)
66
66
  end
67
67
  end
68
68
 
@@ -15,19 +15,19 @@ module Blacklight
15
15
 
16
16
  def item_page_entry_info
17
17
  Deprecation.silence(Blacklight::CatalogHelperBehavior) do
18
- @view_context.item_page_entry_info
18
+ helpers.item_page_entry_info
19
19
  end
20
20
  end
21
21
 
22
22
  def link_to_previous_document(*args)
23
23
  Deprecation.silence(Blacklight::UrlHelperBehavior) do
24
- @view_context.link_to_previous_document(*args)
24
+ helpers.link_to_previous_document(*args)
25
25
  end
26
26
  end
27
27
 
28
28
  def link_to_next_document(*args)
29
29
  Deprecation.silence(Blacklight::UrlHelperBehavior) do
30
- @view_context.link_to_next_document(*args)
30
+ helpers.link_to_next_document(*args)
31
31
  end
32
32
  end
33
33
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ # Override the regular constraint layout to remove any interactive features so this can
5
+ # be treated as quasi-plain text
6
+ class SearchHistoryConstraintLayoutComponent < Blacklight::ConstraintLayoutComponent
7
+ def call
8
+ label = tag.span(t('blacklight.search.filters.label', label: @label), class: 'filter-name') if @label.present?
9
+ value = tag.span(@value, class: 'filter-values')
10
+
11
+ tag.span(safe_join([label, value].compact), class: 'constraint')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class StartOverButtonComponent < ::ViewComponent::Base
5
+ def call
6
+ link_to t('blacklight.search.start_over'), start_over_path, class: 'catalog_startOverLink btn btn-primary'
7
+ end
8
+
9
+ private
10
+
11
+ ##
12
+ # Get the path to the search action with any parameters (e.g. view type)
13
+ # that should be persisted across search sessions.
14
+ def start_over_path query_params = params
15
+ Deprecation.silence(Blacklight::UrlHelperBehavior) do
16
+ helpers.start_over_path(query_params)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -35,7 +35,7 @@ module Blacklight
35
35
 
36
36
  options(@choices.map do |option|
37
37
  text, value = option_text_and_value(option)
38
- { text: text, url: @view_context.url_for(@search_state.params_for_search(@param => value)), selected: @selected == value }
38
+ { text: text, url: helpers.url_for(@search_state.params_for_search(@param => value)), selected: @selected == value }
39
39
  end)
40
40
  end
41
41
 
@@ -1,4 +1,4 @@
1
1
  <div class="alert <%= @classes %>">
2
2
  <%= message %>
3
- <a class="btn-close close" data-dismiss="alert" href="#">&times;</a>
3
+ <a class="btn-close close" data-dismiss="alert" data-bs-dismiss="alert" href="#">&times;</a>
4
4
  </div>
@@ -15,7 +15,7 @@ module Blacklight::Bookmarks
15
15
  before_action :verify_user
16
16
 
17
17
  blacklight_config.track_search_session = false
18
- blacklight_config.http_method = Blacklight::Engine.config.bookmarks_http_method
18
+ blacklight_config.http_method = Blacklight::Engine.config.blacklight.bookmarks_http_method
19
19
  blacklight_config.add_results_collection_tool(:clear_bookmarks_widget)
20
20
 
21
21
  blacklight_config.show.document_actions[:bookmark].if = false if blacklight_config.show.document_actions[:bookmark]
@@ -294,13 +294,13 @@ module Blacklight::Catalog
294
294
  end
295
295
 
296
296
  def sms_mappings
297
- Blacklight::Engine.config.sms_mappings
297
+ Blacklight::Engine.config.blacklight.sms_mappings
298
298
  end
299
299
 
300
300
  def validate_email_params
301
301
  if params[:to].blank?
302
302
  flash[:error] = I18n.t('blacklight.email.errors.to.blank')
303
- elsif !params[:to].match(Blacklight::Engine.config.email_regexp)
303
+ elsif !params[:to].match(Blacklight::Engine.config.blacklight.email_regexp)
304
304
  flash[:error] = I18n.t('blacklight.email.errors.to.invalid', to: params[:to])
305
305
  end
306
306
 
@@ -10,7 +10,7 @@ module Blacklight::SearchContext
10
10
  end
11
11
  end
12
12
 
13
- module ClassMethods
13
+ class_methods do
14
14
  # Save the submitted search parameters in the search session
15
15
  def record_search_parameters opts = { only: :index }
16
16
  before_action :set_current_search_session, opts
@@ -139,8 +139,7 @@ module Blacklight::BlacklightHelperBehavior
139
139
  Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
140
140
  # The spelling response field may be missing from non solr repositories.
141
141
  response.total <= spell_check_max &&
142
- !response.spelling.nil? &&
143
- response.spelling.words.any?
142
+ (response.spelling&.words&.any? || response.spelling&.collation&.present? || false)
144
143
  end
145
144
  end
146
145
  deprecation_deprecate should_show_spellcheck_suggestions?: 'moving into a private method of Blacklight::Response::SpellcheckComponent'
@@ -362,7 +361,8 @@ module Blacklight::BlacklightHelperBehavior
362
361
 
363
362
  ##
364
363
  # Override this method if you want to use a differnet presenter for your documents
365
- def document_presenter_class(document)
364
+ # @param [Blacklight::Document] optional, here for extension + backwards compatibility only
365
+ def document_presenter_class(document = nil)
366
366
  Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
367
367
  case action_name
368
368
  when 'show', 'citation'
@@ -411,7 +411,15 @@ module Blacklight::BlacklightHelperBehavior
411
411
  end
412
412
 
413
413
  def partial_from_blacklight?(partial)
414
- path = lookup_context.find_all(partial, lookup_context.prefixes + [""], true).first&.identifier
414
+ path = if Rails::VERSION::MAJOR >= 6
415
+ name = partial.split('/').last
416
+ prefix = partial.split('/').first if partial.include?('/')
417
+ logger&.debug "Looking for document index partial #{partial}"
418
+ prefixes = lookup_context.prefixes + [prefix, ""].compact
419
+ lookup_context.find_all(name, prefixes, true).first&.identifier
420
+ else
421
+ lookup_context.find_all(partial, lookup_context.prefixes + [""], true).first&.identifier
422
+ end
415
423
 
416
424
  path&.starts_with?(Blacklight::BlacklightHelperBehavior.blacklight_path)
417
425
  end
@@ -156,6 +156,9 @@ module Blacklight::CatalogHelperBehavior
156
156
 
157
157
  ##
158
158
  # Render the sidebar partial for a document
159
+ # This is used as an integration point by downstream apps to add to the
160
+ # default sidebar.
161
+ # See: https://github.com/geoblacklight/geoblacklight/blob/7d3c31c7af3362879b97e2c1351a2496c728c59c/app/helpers/blacklight_helper.rb#L7
159
162
  #
160
163
  # @param [SolrDocument] document
161
164
  # @return [String]
@@ -170,6 +173,8 @@ module Blacklight::CatalogHelperBehavior
170
173
 
171
174
  ##
172
175
  # Render the main content partial for a document
176
+ # This is widely used as by downstream apps when they override their show view.
177
+ # See https://github.com/search?q=render_document_main_content_partial&type=Code
173
178
  #
174
179
  # @param [SolrDocument] _document
175
180
  # @return [String]
@@ -316,21 +321,27 @@ module Blacklight::CatalogHelperBehavior
316
321
  # Render an html <title> appropriate string for a set of search parameters
317
322
  # @param [ActionController::Parameters] params2
318
323
  # @return [String]
319
- def render_search_to_page_title(params)
324
+ def render_search_to_page_title(search_state_or_params)
325
+ search_state = if search_state_or_params.is_a? Blacklight::SearchState
326
+ search_state_or_params
327
+ else
328
+ controller.search_state_class.new(params, blacklight_config, self)
329
+ end
330
+
320
331
  constraints = []
321
332
 
322
- if params['q'].present?
323
- q_label = label_for_search_field(params[:search_field]) unless default_search_field?(params[:search_field])
333
+ if search_state.query_param.present?
334
+ q_label = label_for_search_field(search_state.search_field.key) unless search_state.search_field&.key.blank? || default_search_field?(search_state.search_field.key)
324
335
 
325
336
  constraints += if q_label.present?
326
- [t('blacklight.search.page_title.constraint', label: q_label, value: params['q'])]
337
+ [t('blacklight.search.page_title.constraint', label: q_label, value: search_state.query_param)]
327
338
  else
328
- [params['q']]
339
+ [search_state.query_param]
329
340
  end
330
341
  end
331
342
 
332
- if params['f'].present?
333
- constraints += params['f'].to_unsafe_h.collect { |key, value| render_search_to_page_title_filter(key, Array(value)) }
343
+ if search_state.filters.any?
344
+ constraints += search_state.filters.collect { |filter| render_search_to_page_title_filter(filter.key, filter.values) }
334
345
  end
335
346
 
336
347
  constraints.join(' / ')
@@ -191,9 +191,20 @@ module Blacklight::RenderPartialsHelperBehavior
191
191
  document_index_path_templates.each do |str|
192
192
  partial = format(str, index_view_type: view_type)
193
193
  logger&.debug "Looking for document index partial #{partial}"
194
- template = lookup_context.find_all(partial, lookup_context.prefixes + [""], true, locals.keys + [:documents], {}).first
194
+
195
+ template = if Rails::VERSION::MAJOR >= 6
196
+ name = partial.split('/').last
197
+ prefix = partial.split('/').first if partial.include?('/')
198
+
199
+ prefixes = lookup_context.prefixes + [prefix, ""].compact
200
+ lookup_context.find_all(name, prefixes, true, locals.keys + [:documents], {}).first
201
+ else
202
+ lookup_context.find_all(partial, lookup_context.prefixes + [""], true, locals.keys + [:documents], {}).first
203
+ end
204
+
195
205
  return template if template
196
206
  end
207
+
197
208
  nil
198
209
  end
199
210
 
@@ -6,18 +6,29 @@
6
6
  # Includes methods for rendering more textually on Search History page
7
7
  # (render_search_to_s(_*))
8
8
  module Blacklight::SearchHistoryConstraintsHelperBehavior
9
+ extend Deprecation
10
+ self.deprecation_horizon = '8.0'
11
+
9
12
  # Simpler textual version of constraints, used on Search History page.
10
13
  # Theoretically can may be DRY'd up with results page render_constraints,
11
14
  # maybe even using the very same HTML with different CSS?
12
15
  # But too tricky for now, too many changes to existing CSS. TODO.
13
16
  def render_search_to_s(params)
14
- render_search_to_s_q(params) +
15
- render_search_to_s_filters(params)
17
+ return render(Blacklight::ConstraintsComponent.for_search_history(search_state: convert_to_search_state(params))) unless overridden_search_history_constraints_helper_methods?
18
+
19
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, 'Calling out to potentially overridden helpers for backwards compatibility.')
20
+
21
+ Deprecation.silence(Blacklight::SearchHistoryConstraintsHelperBehavior) do
22
+ render_search_to_s_q(params) +
23
+ render_search_to_s_filters(params)
24
+ end
16
25
  end
26
+ deprecation_deprecate render_search_to_s: 'Use Blacklight::ConstraintsComponent.for_search_history instead'
17
27
 
18
28
  ##
19
29
  # Render the search query constraint
20
30
  def render_search_to_s_q(params)
31
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, '#render_search_to_s_q is deprecated without replacement')
21
32
  return "".html_safe if params['q'].blank?
22
33
 
23
34
  label = label_for_search_field(params[:search_field]) unless default_search_field?(params[:search_field])
@@ -28,6 +39,7 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
28
39
  ##
29
40
  # Render the search facet constraints
30
41
  def render_search_to_s_filters(params)
42
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, '#render_search_to_s_filters is deprecated without replacement')
31
43
  return "".html_safe unless params[:f]
32
44
 
33
45
  safe_join(params[:f].collect do |facet_field, value_list|
@@ -43,6 +55,7 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
43
55
  # 'and'. Pass in option :escape_value => false to pass in pre-rendered
44
56
  # html for value. key with escape_key if needed.
45
57
  def render_search_to_s_element(key, value, _options = {})
58
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, '#render_search_to_s_element is deprecated without replacement')
46
59
  tag.span(render_filter_name(key) + tag.span(value, class: 'filter-values'),
47
60
  class: 'constraint')
48
61
  end
@@ -50,6 +63,7 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
50
63
  ##
51
64
  # Render the name of the facet
52
65
  def render_filter_name name
66
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, '#render_filter_name is deprecated without replacement')
53
67
  return "".html_safe if name.blank?
54
68
 
55
69
  tag.span(t('blacklight.search.filters.label', label: name),
@@ -59,6 +73,7 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
59
73
  ##
60
74
  # Render the value of the facet
61
75
  def render_filter_value value, key = nil
76
+ Deprecation.warn(Blacklight::SearchHistoryConstraintsHelperBehavior, '#render_filter_value is deprecated without replacement')
62
77
  display_value = value
63
78
  Deprecation.silence(Blacklight::FacetsHelperBehavior) do
64
79
  display_value = facet_display_value(key, value) if key
@@ -66,4 +81,17 @@ module Blacklight::SearchHistoryConstraintsHelperBehavior
66
81
  tag.span(h(display_value),
67
82
  class: 'filter-value')
68
83
  end
84
+
85
+ private
86
+
87
+ # Check if the downstream application has overridden these methods
88
+ # @deprecated
89
+ # @private
90
+ def overridden_search_history_constraints_helper_methods?
91
+ method(:render_search_to_s_q).owner != Blacklight::FacetsHelperBehavior ||
92
+ method(:render_search_to_s_filters).owner != Blacklight::FacetsHelperBehavior ||
93
+ method(:render_search_to_s_element).owner != Blacklight::FacetsHelperBehavior ||
94
+ method(:render_filter_name).owner != Blacklight::FacetsHelperBehavior ||
95
+ method(:render_filter_value).owner != Blacklight::FacetsHelperBehavior
96
+ end
69
97
  end
@@ -167,7 +167,9 @@ module Blacklight::UrlHelperBehavior
167
167
 
168
168
  # Search History and Saved Searches display
169
169
  def link_to_previous_search(params)
170
- link_to(render_search_to_s(params), search_action_path(params))
170
+ Deprecation.silence(Blacklight::SearchHistoryConstraintsHelperBehavior) do
171
+ link_to(render_search_to_s(params), search_action_path(params))
172
+ end
171
173
  end
172
174
 
173
175
  # Get url parameters to a search within a grouped result set
@@ -206,16 +206,16 @@ Blacklight.modal.checkCloseModal = function(event) {
206
206
  }
207
207
 
208
208
  Blacklight.modal.hide = function(el) {
209
- if (bootstrap.Modal.VERSION >= "5") {
210
- bootstrap.Modal.getOrCreateInstance(el).hide();
209
+ if (bootstrap && bootstrap.Modal && bootstrap.Modal.VERSION >= "5") {
210
+ bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).hide();
211
211
  } else {
212
212
  $(el || Blacklight.modal.modalSelector).modal('hide');
213
213
  }
214
214
  }
215
215
 
216
216
  Blacklight.modal.show = function(el) {
217
- if (bootstrap.Modal.VERSION >= "5") {
218
- bootstrap.Modal.getOrCreateInstance(el).show();
217
+ if (bootstrap && bootstrap.Modal && bootstrap.Modal.VERSION >= "5") {
218
+ bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).show();
219
219
  } else {
220
220
  $(el || Blacklight.modal.modalSelector).modal('show');
221
221
  }
@@ -12,7 +12,7 @@ module Blacklight::Configurable
12
12
  end
13
13
  attr_writer :blacklight_config
14
14
 
15
- module ClassMethods
15
+ class_methods do
16
16
  def copy_blacklight_config_from(other_class)
17
17
  self.blacklight_config = other_class.blacklight_config.inheritable_copy(self)
18
18
  end
@@ -7,7 +7,7 @@ module Blacklight::Document
7
7
 
8
8
  include ::ActiveModel::Conversion
9
9
 
10
- module ClassMethods
10
+ class_methods do
11
11
  # This is actually an ActiveRecord method starting in Rails 5.2
12
12
  def polymorphic_name
13
13
  base_class.name
@@ -29,7 +29,7 @@ module Blacklight::Document::Extensions
29
29
  end
30
30
  end
31
31
 
32
- module ClassMethods
32
+ class_methods do
33
33
  attr_writer :registered_extensions
34
34
 
35
35
  # Returns array of hashes of registered extensions. Each hash
@@ -3,7 +3,7 @@ module Blacklight::Document
3
3
  module SemanticFields
4
4
  extend ActiveSupport::Concern
5
5
 
6
- module ClassMethods
6
+ class_methods do
7
7
  # Class-level method for accessing/setting semantic mappings
8
8
  # for solr stored fields. Can be set by local app, key is
9
9
  # a symbol for a semantic, value is a solr _stored_ field.
@@ -103,7 +103,7 @@ module Blacklight::Document
103
103
 
104
104
  # Certain class-level methods needed for the document-specific
105
105
  # extendability architecture
106
- module ClassMethods
106
+ class_methods do
107
107
  attr_writer :unique_key
108
108
 
109
109
  def unique_key
@@ -11,7 +11,7 @@
11
11
  <%= t('blacklight.email.form.to') %>
12
12
  </label>
13
13
  <div class="col-sm-10">
14
- <%= email_field_tag :to, params[:to], class: 'form-control' %>
14
+ <%= email_field_tag :to, params[:to], class: 'form-control', required: true %>
15
15
  </div>
16
16
  </div>
17
17
 
@@ -1,4 +1,4 @@
1
- <% @page_title = t('blacklight.search.page_title.title', :constraints => render_search_to_page_title(params), :application_name => application_name) %>
1
+ <% @page_title = t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name) %>
2
2
 
3
3
  <% content_for(:head) do -%>
4
4
  <%= render 'catalog/opensearch_response_metadata', response: @response %>
@@ -6,16 +6,16 @@
6
6
  <div class="modal-body">
7
7
  <%= render '/shared/flash_msg' %>
8
8
  <div class="form-group row">
9
- <label class="control-label col-sm-2" for="to">
9
+ <label class="control-label col-sm-2" for="to">
10
10
  <%= t('blacklight.sms.form.to') %>
11
11
  </label>
12
12
  <div class="col-sm-10">
13
- <%= telephone_field_tag :to, params[:to], class: 'form-control' %>
13
+ <%= telephone_field_tag :to, params[:to], class: 'form-control', required: true %>
14
14
  </div>
15
15
  </div>
16
16
  <div class="form-group row">
17
17
  <label class="control-label col-sm-2" for="carrier">
18
- <%= t('blacklight.sms.form.carrier') %>
18
+ <%= t('blacklight.sms.form.carrier') %>
19
19
  </label>
20
20
  <div class="col-sm-10">
21
21
  <%= select_tag(:carrier, options_for_select(sms_mappings.to_a.sort.unshift([t('blacklight.sms.form.carrier_prompt'),'']), params[:carrier]), class: 'form-control') %><br/>
@@ -1 +1 @@
1
- <%= link_to t('blacklight.search.start_over'), (Deprecation.silence(Blacklight::UrlHelperBehavior) { start_over_path }), class: "catalog_startOverLink btn btn-primary" %>
1
+ <%= render Blacklight::StartOverButtonComponent.new %>
@@ -13,6 +13,7 @@
13
13
  <%= favicon_link_tag %>
14
14
  <%= stylesheet_link_tag "application", media: "all" %>
15
15
  <%= javascript_include_tag "application" %>
16
+
16
17
  <%= csrf_meta_tags %>
17
18
  <%= content_for(:head) %>
18
19
  </head>
data/blacklight.gemspec CHANGED
@@ -25,18 +25,17 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.required_ruby_version = '>= 2.5'
27
27
 
28
- s.add_dependency "rails", '>= 5.1', '< 7'
28
+ s.add_dependency "rails", '>= 5.1', '< 7.1'
29
29
  s.add_dependency "globalid"
30
30
  s.add_dependency "jbuilder", '~> 2.7'
31
31
  s.add_dependency "kaminari", ">= 0.15" # the pagination (page 1,2,3, etc..) of our search results
32
32
  s.add_dependency "deprecation"
33
33
  s.add_dependency "i18n", '>= 1.7.0' # added named parameters
34
34
  s.add_dependency "ostruct", '>= 0.3.2'
35
- s.add_dependency "view_component", '~> 2.42'
35
+ s.add_dependency "view_component", '~> 2.43'
36
36
 
37
37
  s.add_development_dependency "rsolr", ">= 1.0.6", "< 3" # Library for interacting with rSolr.
38
- s.add_development_dependency "rspec-rails", "~> 4.0.0.beta2"
39
- s.add_development_dependency "rspec-its"
38
+ s.add_development_dependency "rspec-rails", "~> 5.0"
40
39
  s.add_development_dependency "rspec-collection_matchers", ">= 1.0"
41
40
  s.add_development_dependency 'axe-core-rspec'
42
41
  s.add_development_dependency "capybara", '~> 3'
@@ -8,7 +8,7 @@ module Blacklight
8
8
  extend Deprecation
9
9
  self.deprecation_horizon = 'blacklight version 8.0.0'
10
10
 
11
- module ClassMethods
11
+ class_methods do
12
12
  # Add a configuration block for a collection of solr fields
13
13
  def define_field_access(key, options = {})
14
14
  key = key.to_s if respond_to? :to_s
@@ -142,7 +142,8 @@ module Blacklight
142
142
  autocomplete_suggester: 'mySuggester',
143
143
  raw_endpoint: OpenStructWithHashAccess.new(enabled: false),
144
144
  track_search_session: true,
145
- advanced_search: OpenStruct.new(enabled: false)
145
+ advanced_search: OpenStruct.new(enabled: false),
146
+ enable_search_bar_autofocus: false
146
147
  }
147
148
  end
148
149
  # rubocop:enable Metrics/MethodLength
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Deprecations
5
+ module EngineConfiguration
6
+ # rubocop:disable Style/RedundantSelf, Style/HashSyntax
7
+ # @deprecated
8
+ def bookmarks_http_method
9
+ self.blacklight.bookmarks_http_method
10
+ end
11
+ deprecation_deprecate bookmarks_http_method: 'Moved to `blacklight.bookmarks_http_method`'
12
+
13
+ # @deprecated
14
+ def bookmarks_http_method=(val)
15
+ self.blacklight.bookmarks_http_method = val
16
+ end
17
+ deprecation_deprecate :'bookmarks_http_method=' => 'Moved to `blacklight.bookmarks_http_method=`'
18
+
19
+ # @deprecated
20
+ def email_regexp
21
+ self.blacklight.email_regexp
22
+ end
23
+ deprecation_deprecate email_regexp: 'Moved to `blacklight.email_regexp`'
24
+
25
+ # @deprecated
26
+ def email_regexp=(val)
27
+ self.blacklight.email_regexp = val
28
+ end
29
+ deprecation_deprecate :'email_regexp=' => 'Moved to `blacklight.email_regexp=`'
30
+
31
+ # @deprecated
32
+ def facet_missing_param
33
+ self.blacklight.facet_missing_param
34
+ end
35
+ deprecation_deprecate facet_missing_param: 'Moved to `blacklight.facet_missing_param`'
36
+
37
+ # @deprecated
38
+ def facet_missing_param=(val)
39
+ self.blacklight.facet_missing_param = val
40
+ end
41
+ deprecation_deprecate :'facet_missing_param=' => 'Moved to `blacklight.facet_missing_param=`'
42
+
43
+ # @deprecated
44
+ def sms_mappings
45
+ self.blacklight.sms_mappings
46
+ end
47
+ deprecation_deprecate sms_mappings: 'Moved to `blacklight.sms_mappings`'
48
+
49
+ # @deprecated
50
+ def sms_mappings=(val)
51
+ self.blacklight.sms_mappings = val
52
+ end
53
+ deprecation_deprecate :'sms_mappings=' => 'Moved to `blacklight.sms_mappings=`'
54
+ # rubocop:enable Style/RedundantSelf, Style/HashSyntax
55
+
56
+ def self.deprecate_in(object)
57
+ class << object
58
+ extend Deprecation
59
+ self.deprecation_horizon = 'blacklight 8.0'
60
+
61
+ include Blacklight::Deprecations::EngineConfiguration
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end