blacklight 7.24.0 → 7.25.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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +4 -4
  3. data/VERSION +1 -1
  4. data/app/assets/javascripts/blacklight/blacklight.js +2 -2
  5. data/app/components/blacklight/constraint_component.rb +1 -1
  6. data/app/components/blacklight/constraint_layout_component.rb +1 -1
  7. data/app/components/blacklight/constraints_component.rb +1 -1
  8. data/app/components/blacklight/document/action_component.rb +1 -1
  9. data/app/components/blacklight/document/actions_component.rb +1 -1
  10. data/app/components/blacklight/document/bookmark_component.rb +1 -1
  11. data/app/components/blacklight/document/citation_component.rb +2 -2
  12. data/app/components/blacklight/document/group_component.rb +3 -2
  13. data/app/components/blacklight/document/more_like_this_component.rb +1 -1
  14. data/app/components/blacklight/document/thumbnail_component.rb +1 -1
  15. data/app/components/blacklight/document_component.rb +1 -2
  16. data/app/components/blacklight/document_metadata_component.rb +1 -1
  17. data/app/components/blacklight/document_title_component.rb +1 -1
  18. data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
  19. data/app/components/blacklight/facet_field_component.rb +1 -1
  20. data/app/components/blacklight/facet_field_filter_component.rb +1 -1
  21. data/app/components/blacklight/facet_field_inclusive_constraint_component.rb +1 -1
  22. data/app/components/blacklight/facet_field_list_component.rb +1 -1
  23. data/app/components/blacklight/facet_field_no_layout_component.rb +1 -1
  24. data/app/components/blacklight/facet_field_pagination_component.rb +1 -1
  25. data/app/components/blacklight/facet_item_component.rb +1 -1
  26. data/app/components/blacklight/facet_item_pivot_component.rb +1 -1
  27. data/app/components/blacklight/hidden_search_state_component.rb +2 -2
  28. data/app/components/blacklight/metadata_field_component.rb +1 -1
  29. data/app/components/blacklight/metadata_field_layout_component.rb +1 -1
  30. data/app/components/blacklight/response/facet_group_component.rb +1 -1
  31. data/app/components/blacklight/response/pagination_component.rb +1 -1
  32. data/app/components/blacklight/search_bar_component.html.erb +7 -7
  33. data/app/components/blacklight/search_bar_component.rb +18 -13
  34. data/app/components/blacklight/search_context_component.rb +1 -1
  35. data/app/components/blacklight/start_over_button_component.rb +1 -1
  36. data/app/helpers/blacklight/blacklight_helper_behavior.rb +3 -1
  37. data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -1
  38. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +5 -7
  39. data/app/javascript/blacklight/modal.js +2 -2
  40. data/app/presenters/blacklight/search_bar_presenter.rb +2 -0
  41. data/app/services/blacklight/field_retriever.rb +1 -1
  42. data/app/views/catalog/_constraints.html.erb +2 -2
  43. data/app/views/catalog/_facet_group.html.erb +1 -1
  44. data/app/views/catalog/_search_form.html.erb +2 -2
  45. data/app/views/shared/_header_navbar.html.erb +5 -1
  46. data/lib/blacklight/component.rb +40 -0
  47. data/lib/blacklight/configuration/facet_field.rb +1 -1
  48. data/lib/blacklight/configuration/fields.rb +10 -11
  49. data/lib/blacklight/configuration/view_config.rb +6 -0
  50. data/lib/blacklight/configuration.rb +320 -179
  51. data/lib/blacklight/deprecations/search_state_normalization.rb +52 -0
  52. data/lib/blacklight/search_state/filter_field.rb +44 -16
  53. data/lib/blacklight/search_state.rb +55 -31
  54. data/lib/blacklight/solr/search_builder_behavior.rb +3 -1
  55. data/lib/blacklight.rb +1 -0
  56. data/package.json +1 -1
  57. data/spec/components/blacklight/constraints_component_spec.rb +14 -1
  58. data/spec/components/blacklight/facet_field_list_component_spec.rb +6 -1
  59. data/spec/components/blacklight/facet_item_pivot_component_spec.rb +7 -1
  60. data/spec/controllers/blacklight/base_spec.rb +4 -1
  61. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +23 -6
  62. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +7 -0
  63. data/spec/lib/blacklight/component_spec.rb +43 -0
  64. data/spec/lib/blacklight/search_state/filter_field_spec.rb +12 -1
  65. data/spec/lib/blacklight/search_state_spec.rb +17 -3
  66. data/spec/models/blacklight/configuration_spec.rb +2 -2
  67. data/spec/models/blacklight/solr/search_builder_spec.rb +15 -0
  68. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +10 -4
  69. data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +6 -1
  70. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -0
  71. data/spec/views/catalog/index.json.jbuilder_spec.rb +1 -0
  72. metadata +7 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6488b7d6a423e0f783458e7398cce167abd6638fe4b75765dc02480ef5906394
4
- data.tar.gz: 1670c1b8631f8c17738216a734e66046459461462d55e0056be52cb19dad8e86
3
+ metadata.gz: e758c87d1a1961258d284421d258d39a53600da0df9980f294c2174da1a2fe6f
4
+ data.tar.gz: cc0da20194f1a185f3847f724e89677a28ef233d5cc89b7ec73dc55dee4ee6f3
5
5
  SHA512:
6
- metadata.gz: 560fc0c64261c3502a1ca897fdb03d8d242ad08d9619bdc528753f0a39f466f5dd147a21a89baf1779fafc6f0aa84f3f7de12ea51df502a480052686bd5b064f
7
- data.tar.gz: 2eb309a4b911bc60dbaa44e2cb81b1c3703531a15274e8e14b3602081d7856b17b9a321307f5b1778363f63ecf6b7a581eed4f283df68b7467fbf6d7be823095
6
+ metadata.gz: 7b94f8337cb6c1c5cb9747d2a5efe67144dca742418e18e15baa4cb10fcc333608f43d94d25157b2e7be8267a9aa4cef9c8b2544e574745e5c2d1ea6fdf93383
7
+ data.tar.gz: 85db04a2e0ab1e7736e10afa94e8fe007c2c7163dd8ab551827928a0baa5da426d8106d3b075c1e2621c5a6409d6a5c2e403891b497cf30edf497ca3b47e1d2c
@@ -31,7 +31,7 @@ jobs:
31
31
  runs-on: ubuntu-latest
32
32
  strategy:
33
33
  matrix:
34
- ruby: [2.7, '3.0']
34
+ ruby: [2.7, '3.0', 3.1]
35
35
  steps:
36
36
  - uses: actions/checkout@v2
37
37
  - name: Set up Ruby
@@ -103,7 +103,7 @@ jobs:
103
103
  RAILS_VERSION: 5.2.4.6
104
104
  ENGINE_CART_RAILS_OPTIONS: '--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test'
105
105
 
106
- test_rails7_0:
106
+ test_rails6_1:
107
107
  runs-on: ubuntu-latest
108
108
  strategy:
109
109
  matrix:
@@ -117,11 +117,11 @@ jobs:
117
117
  - name: Install dependencies
118
118
  run: bundle install
119
119
  env:
120
- RAILS_VERSION: 7.0.0
120
+ RAILS_VERSION: 6.1.5
121
121
  - name: Run tests
122
122
  run: bundle exec rake ci
123
123
  env:
124
- RAILS_VERSION: 7.0.0
124
+ RAILS_VERSION: 6.1.5
125
125
  ENGINE_CART_RAILS_OPTIONS: '--skip-git --skip-keeps --skip-action-cable --skip-test'
126
126
  api_test:
127
127
  runs-on: ubuntu-latest
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.24.0
1
+ 7.25.0
@@ -441,7 +441,7 @@ Blacklight.modal.checkCloseModal = function (event) {
441
441
  };
442
442
 
443
443
  Blacklight.modal.hide = function (el) {
444
- if (bootstrap.Modal.VERSION >= "5") {
444
+ if (typeof bootstrap !== 'undefined' && typeof bootstrap.Modal !== 'undefined' && bootstrap.Modal.VERSION >= "5") {
445
445
  bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).hide();
446
446
  } else {
447
447
  $(el || Blacklight.modal.modalSelector).modal('hide');
@@ -449,7 +449,7 @@ Blacklight.modal.hide = function (el) {
449
449
  };
450
450
 
451
451
  Blacklight.modal.show = function (el) {
452
- if (bootstrap.Modal.VERSION >= "5") {
452
+ if (typeof bootstrap !== 'undefined' && typeof bootstrap.Modal !== 'undefined' && bootstrap.Modal.VERSION >= "5") {
453
453
  bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).show();
454
454
  } else {
455
455
  $(el || Blacklight.modal.modalSelector).modal('show');
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class ConstraintComponent < ::ViewComponent::Base
4
+ class ConstraintComponent < Blacklight::Component
5
5
  with_collection_parameter :facet_item_presenter
6
6
 
7
7
  def initialize(facet_item_presenter:, classes: 'filter', layout: Blacklight::ConstraintLayoutComponent)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class ConstraintLayoutComponent < ::ViewComponent::Base
4
+ class ConstraintLayoutComponent < Blacklight::Component
5
5
  def initialize(value:, label: nil, remove_path: nil, classes: nil, search_state: nil)
6
6
  @value = value
7
7
  @label = label
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class ConstraintsComponent < ::ViewComponent::Base
4
+ class ConstraintsComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  renders_many :query_constraints_area
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render a bookmark widget to bookmark / unbookmark a document
6
- class ActionComponent < ::ViewComponent::Base
6
+ class ActionComponent < Blacklight::Component
7
7
  with_collection_parameter :action
8
8
 
9
9
  # @param [Blacklight::Document] document
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render a bookmark widget to bookmark / unbookmark a document
6
- class ActionsComponent < ::ViewComponent::Base
6
+ class ActionsComponent < Blacklight::Component
7
7
  renders_many :actions, (lambda do |action:, component: nil, **kwargs|
8
8
  component ||= action.component || Blacklight::Document::ActionComponent
9
9
  component.new(action: action, document: @document, options: @options, url_opts: @url_opts, link_classes: @link_classes, **kwargs)
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render a bookmark widget to bookmark / unbookmark a document
6
- class BookmarkComponent < ::ViewComponent::Base
6
+ class BookmarkComponent < Blacklight::Component
7
7
  # @param [Blacklight::Document] document
8
8
  # @param [Boolean] checked
9
9
  # @param [Object] bookmark_path the rails route to use for bookmarks
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render citations for the document
6
- class CitationComponent < ::ViewComponent::Base
6
+ class CitationComponent < Blacklight::Component
7
7
  DEFAULT_FORMATS = {
8
8
  'blacklight.citation.mla': :export_as_mla_citation_txt,
9
9
  'blacklight.citation.apa': :export_as_apa_citation_txt,
@@ -13,7 +13,7 @@ module Blacklight
13
13
  with_collection_parameter :document
14
14
 
15
15
  # @param [Blacklight::Document] document
16
- # @param [Hash<String => Symbol>] map of citation format names (suspiciously, i18n keys
16
+ # @param [Hash<String => Symbol>] formats map of citation format names (suspiciously, i18n keys
17
17
  # for them) to document methods that return the formatted citation.
18
18
  def initialize(document:, formats: DEFAULT_FORMATS)
19
19
  @document = document
@@ -3,10 +3,11 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render the 'more like this' results from the response
6
- class GroupComponent < ::ViewComponent::Base
6
+ class GroupComponent < Blacklight::Component
7
7
  with_collection_parameter :group
8
8
 
9
- # @param [Blacklight::Document] document
9
+ # @param [Blacklight::Solr::Response::Group] group
10
+ # @param [Integer] group_limit
10
11
  def initialize(group:, group_limit: -1)
11
12
  @group = group
12
13
  @group_limit = group_limit
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render the 'more like this' results from the response
6
- class MoreLikeThisComponent < ::ViewComponent::Base
6
+ class MoreLikeThisComponent < Blacklight::Component
7
7
  with_collection_parameter :document
8
8
 
9
9
  # @param [Blacklight::Document] document
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Document
5
5
  # Render the thumbnail for the document
6
- class ThumbnailComponent < ::ViewComponent::Base
6
+ class ThumbnailComponent < Blacklight::Component
7
7
  with_collection_parameter :presenter
8
8
 
9
9
  # @param [Blacklight::DocumentPresenter] presenter
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class DocumentComponent < ::ViewComponent::Base
4
+ class DocumentComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  # Content appearing before the document
@@ -69,7 +69,6 @@ module Blacklight
69
69
  # @param classes [Array, String] additional HTML classes for the root element
70
70
  # @param component [Symbol, String] HTML tag type to use for the root element
71
71
  # @param title_component [Symbol, String] HTML tag type to use for the title element
72
- # @param metadata_component [Blacklight::DocumentMetadataComponent]
73
72
  # @param counter [Number, nil] a pre-computed counter for the position of this document in a search result set
74
73
  # @param document_counter [Number, nil] alternatively, the document's position in a collection and,
75
74
  # @param counter_offset [Number] with `document_counter`, the offset of the start of that collection counter to the overall result set
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class DocumentMetadataComponent < ::ViewComponent::Base
4
+ class DocumentMetadataComponent < Blacklight::Component
5
5
  renders_many :fields, (lambda do |component: nil, **kwargs|
6
6
  (component || Blacklight::MetadataFieldComponent).new(**kwargs)
7
7
  end)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class DocumentTitleComponent < ::ViewComponent::Base
4
+ class DocumentTitleComponent < Blacklight::Component
5
5
  renders_many :before_title
6
6
  renders_many :after_title
7
7
  renders_many :actions
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldCheckboxesComponent < ::ViewComponent::Base
4
+ class FacetFieldCheckboxesComponent < Blacklight::Component
5
5
  def initialize(facet_field:, layout: nil)
6
6
  @facet_field = facet_field
7
7
  @layout = layout == false ? FacetFieldNoLayoutComponent : Blacklight::FacetFieldComponent
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldComponent < ::ViewComponent::Base
4
+ class FacetFieldComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  renders_one :label
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldFilterComponent < ::ViewComponent::Base
4
+ class FacetFieldFilterComponent < Blacklight::Component
5
5
  def initialize(facet_field:)
6
6
  @facet_field = facet_field
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldInclusiveConstraintComponent < ::ViewComponent::Base
4
+ class FacetFieldInclusiveConstraintComponent < Blacklight::Component
5
5
  with_collection_parameter :facet_field
6
6
 
7
7
  def initialize(facet_field:, values: nil)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldListComponent < ::ViewComponent::Base
4
+ class FacetFieldListComponent < Blacklight::Component
5
5
  def initialize(facet_field:, layout: nil)
6
6
  @facet_field = facet_field
7
7
  @layout = layout == false ? FacetFieldNoLayoutComponent : Blacklight::FacetFieldComponent
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldNoLayoutComponent < ::ViewComponent::Base
4
+ class FacetFieldNoLayoutComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  renders_one :label
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetFieldPaginationComponent < ::ViewComponent::Base
4
+ class FacetFieldPaginationComponent < Blacklight::Component
5
5
  def initialize(facet_field:)
6
6
  @facet_field = facet_field
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class FacetItemComponent < ::ViewComponent::Base
4
+ class FacetItemComponent < Blacklight::Component
5
5
  extend Deprecation
6
6
 
7
7
  with_collection_parameter :facet_item
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Blacklight
4
4
  # Render facet items and any subtree
5
- class FacetItemPivotComponent < ::ViewComponent::Base
5
+ class FacetItemPivotComponent < Blacklight::Component
6
6
  # Somewhat arbitrary number; the only important thing is that
7
7
  # it is bigger than the number of leaf nodes in any collapsing
8
8
  # pivot facet on the page.
@@ -4,8 +4,8 @@ module Blacklight
4
4
  # Writes out zero or more <input type="hidden"> elements, completely
5
5
  # representing a hash passed in using Rails-style request parameters
6
6
  # for hashes nested with arrays and other hashes.
7
- class HiddenSearchStateComponent < ::ViewComponent::Base
8
- # @param [Hash] hash
7
+ class HiddenSearchStateComponent < Blacklight::Component
8
+ # @param [Hash] params
9
9
  def initialize(params:)
10
10
  Deprecation.warn(self, "Passing page as a parameter to HiddenSearchStateComponent is deprecated and will not be supported in Blacklight 8") if params.key?(:page)
11
11
  @params = params.except(:utf8)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class MetadataFieldComponent < ::ViewComponent::Base
4
+ class MetadataFieldComponent < Blacklight::Component
5
5
  with_collection_parameter :field
6
6
 
7
7
  # @param field [Blacklight::FieldPresenter]
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class MetadataFieldLayoutComponent < ::ViewComponent::Base
4
+ class MetadataFieldLayoutComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  with_collection_parameter :field
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Response
5
5
  # Render a group of facet fields
6
- class FacetGroupComponent < ::ViewComponent::Base
6
+ class FacetGroupComponent < Blacklight::Component
7
7
  # @param [Blacklight::Response] response
8
8
  # @param [Array<String>] fields facet fields to render
9
9
  # @param [String] title the title of the facet group section
@@ -3,7 +3,7 @@
3
3
  module Blacklight
4
4
  module Response
5
5
  # Render a pagination widget for search results
6
- class PaginationComponent < ::ViewComponent::Base
6
+ class PaginationComponent < Blacklight::Component
7
7
  # @param [Blacklight::Response] response
8
8
  # @param [Hash] html html options for the pagination container
9
9
  def initialize(response:, html: {}, **pagination_args)
@@ -1,23 +1,23 @@
1
1
  <%= form_tag @url, method: @method, class: @classes.join(' '), role: 'search', 'aria-label' => scoped_t('submit') do %>
2
2
  <%= render_hash_as_hidden_fields(@params) %>
3
- <% if @search_fields.length > 1 %>
3
+ <% if search_fields.length > 1 %>
4
4
  <label for="search_field" class="sr-only visually-hidden"><%= scoped_t('search_field.label') %></label>
5
5
  <% end %>
6
6
  <div class="input-group">
7
7
  <%= prepend %>
8
8
 
9
- <% if @search_fields.length > 1 %>
9
+ <% if search_fields.length > 1 %>
10
10
  <%= select_tag(:search_field,
11
- options_for_select(@search_fields, h(@search_field)),
11
+ options_for_select(search_fields, h(@search_field)),
12
12
  title: scoped_t('search_field.title'),
13
13
  id: "#{@prefix}search_field",
14
14
  class: "custom-select form-select search-field") %>
15
- <% elsif @search_fields.length == 1 %>
16
- <%= hidden_field_tag :search_field, @search_fields.first.last %>
15
+ <% elsif search_fields.length == 1 %>
16
+ <%= hidden_field_tag :search_field, search_fields.first.last %>
17
17
  <% end %>
18
18
 
19
19
  <label for="<%= @prefix %><%= @query_param %>" class="sr-only visually-hidden"><%= scoped_t('search.label') %></label>
20
- <%= text_field_tag @query_param, @q, placeholder: scoped_t('search.placeholder'), class: "search-q q form-control rounded-#{@search_fields.length > 1 ? '0' : 'left'}", id: "#{@prefix}q", autocomplete: autocomplete_path.present? ? "off" : "", autofocus: @autofocus, data: { autocomplete_enabled: autocomplete_path.present?, autocomplete_path: autocomplete_path } %>
20
+ <%= text_field_tag @query_param, @q, placeholder: scoped_t('search.placeholder'), class: "search-q q form-control rounded-#{search_fields.length > 1 ? '0' : 'left'}", id: "#{@prefix}q", autocomplete: autocomplete_path.present? ? "off" : "", autofocus: @autofocus, data: { autocomplete_enabled: autocomplete_path.present?, autocomplete_path: autocomplete_path } %>
21
21
 
22
22
  <span class="input-group-append">
23
23
  <%= append %>
@@ -30,6 +30,6 @@
30
30
  </div>
31
31
  <% end %>
32
32
 
33
- <% if presenter.advanced_search_enabled? %>
33
+ <% if advanced_search_enabled? %>
34
34
  <%= link_to t('blacklight.advanced_search.more_options'), @advanced_search_url, class: 'advanced_search btn btn-secondary'%>
35
35
  <% end %>
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class SearchBarComponent < ::ViewComponent::Base
4
+ class SearchBarComponent < Blacklight::Component
5
5
  include Blacklight::ContentAreasShim
6
6
 
7
7
  renders_one :append
@@ -9,10 +9,11 @@ module Blacklight
9
9
 
10
10
  # rubocop:disable Metrics/ParameterLists
11
11
  def initialize(
12
- url:, advanced_search_url: nil, params:,
13
- classes: ['search-query-form'], presenter: nil, prefix: '',
12
+ url:, params:,
13
+ advanced_search_url: nil,
14
+ classes: ['search-query-form'], prefix: nil,
14
15
  method: 'GET', q: nil, query_param: :q,
15
- search_field: nil, search_fields: [], autocomplete_path: nil,
16
+ search_field: nil, search_fields: nil, autocomplete_path: nil,
16
17
  autofocus: nil, i18n: { scope: 'blacklight.search.form' }
17
18
  )
18
19
  @url = url
@@ -23,7 +24,6 @@ module Blacklight
23
24
  @params = params.except(:q, :search_field, :utf8, :page)
24
25
  @prefix = prefix
25
26
  @classes = classes
26
- @presenter = presenter
27
27
  @method = method
28
28
  @autocomplete_path = autocomplete_path
29
29
  @autofocus = autofocus
@@ -33,29 +33,34 @@ module Blacklight
33
33
  # rubocop:enable Metrics/ParameterLists
34
34
 
35
35
  def autocomplete_path
36
- return nil unless presenter.autocomplete_enabled?
36
+ return nil unless blacklight_config.autocomplete_enabled
37
37
 
38
38
  @autocomplete_path
39
39
  end
40
40
 
41
41
  def autofocus
42
42
  if @autofocus.nil?
43
- presenter.autofocus?
43
+ blacklight_config.enable_search_bar_autofocus &&
44
+ controller.is_a?(Blacklight::Catalog) &&
45
+ controller.action_name == "index" &&
46
+ !controller.has_search_parameters?
44
47
  else
45
48
  @autofocus
46
49
  end
47
50
  end
48
51
 
49
- private
50
-
51
- def presenter
52
- @presenter ||= presenter_class.new(controller, blacklight_config)
52
+ def search_fields
53
+ @search_fields ||= blacklight_config.search_fields.values
54
+ .select { |field_def| helpers.should_render_field?(field_def) }
55
+ .collect { |field_def| [helpers.label_for_search_field(field_def.key), field_def.key] }
53
56
  end
54
57
 
55
- def presenter_class
56
- blacklight_config.view_config(action_name: :index).search_bar_presenter_class
58
+ def advanced_search_enabled?
59
+ blacklight_config.advanced_search.enabled
57
60
  end
58
61
 
62
+ private
63
+
59
64
  def blacklight_config
60
65
  helpers.blacklight_config
61
66
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class SearchContextComponent < ::ViewComponent::Base
4
+ class SearchContextComponent < Blacklight::Component
5
5
  with_collection_parameter :search_context
6
6
 
7
7
  def initialize(search_context:, search_session:)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Blacklight
4
- class StartOverButtonComponent < ::ViewComponent::Base
4
+ class StartOverButtonComponent < Blacklight::Component
5
5
  def call
6
6
  link_to t('blacklight.search.start_over'), start_over_path, class: 'catalog_startOverLink btn btn-primary'
7
7
  end
@@ -81,6 +81,7 @@ module Blacklight::BlacklightHelperBehavior
81
81
  def render_search_bar
82
82
  search_bar_presenter.render
83
83
  end
84
+ deprecation_deprecate render_search_bar: "Call `render Blacklight::SearchBarComponent.new' instead"
84
85
 
85
86
  # @!group Presenter extension helpers
86
87
  ##
@@ -88,6 +89,7 @@ module Blacklight::BlacklightHelperBehavior
88
89
  def search_bar_presenter
89
90
  @search_bar ||= search_bar_presenter_class.new(controller, blacklight_config)
90
91
  end
92
+ deprecation_deprecate :search_bar_presenter
91
93
 
92
94
  # @!group Document helpers
93
95
  ##
@@ -361,7 +363,7 @@ module Blacklight::BlacklightHelperBehavior
361
363
 
362
364
  ##
363
365
  # Override this method if you want to use a differnet presenter for your documents
364
- # @param [Blacklight::Document] optional, here for extension + backwards compatibility only
366
+ # @param [Blacklight::Document] document optional, here for extension + backwards compatibility only
365
367
  def document_presenter_class(document = nil)
366
368
  Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
367
369
  case action_name
@@ -319,7 +319,7 @@ module Blacklight::CatalogHelperBehavior
319
319
  end
320
320
 
321
321
  # Render an html <title> appropriate string for a set of search parameters
322
- # @param [ActionController::Parameters] params2
322
+ # @param [ActionController::Parameters] params
323
323
  # @return [String]
324
324
  def render_search_to_page_title(search_state_or_params)
325
325
  search_state = if search_state_or_params.is_a? Blacklight::SearchState
@@ -84,14 +84,12 @@ module Blacklight::RenderConstraintsHelperBehavior
84
84
  Deprecation.warn(Blacklight::RenderConstraintsHelperBehavior, 'render_constraints_filters is deprecated')
85
85
  search_state = convert_to_search_state(params_or_search_state)
86
86
 
87
- Deprecation.silence(Blacklight::SearchState) do
88
- return "".html_safe if search_state.filter_params.blank?
87
+ return "".html_safe unless search_state.filters.any?
89
88
 
90
- Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) do
91
- safe_join(search_state.filters.map do |field|
92
- render_filter_element(field.key, field.values, search_state)
93
- end, "\n")
94
- end
89
+ Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) do
90
+ safe_join(search_state.filters.map do |field|
91
+ render_filter_element(field.key, field.values, search_state)
92
+ end, "\n")
95
93
  end
96
94
  end
97
95
 
@@ -206,7 +206,7 @@ Blacklight.modal.checkCloseModal = function(event) {
206
206
  }
207
207
 
208
208
  Blacklight.modal.hide = function(el) {
209
- if (bootstrap && bootstrap.Modal && bootstrap.Modal.VERSION >= "5") {
209
+ if (typeof bootstrap !== 'undefined' && typeof bootstrap.Modal !== 'undefined' && bootstrap.Modal.VERSION >= "5") {
210
210
  bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).hide();
211
211
  } else {
212
212
  $(el || Blacklight.modal.modalSelector).modal('hide');
@@ -214,7 +214,7 @@ Blacklight.modal.hide = function(el) {
214
214
  }
215
215
 
216
216
  Blacklight.modal.show = function(el) {
217
- if (bootstrap && bootstrap.Modal && bootstrap.Modal.VERSION >= "5") {
217
+ if (typeof bootstrap !== 'undefined' && typeof bootstrap.Modal !== 'undefined' && bootstrap.Modal.VERSION >= "5") {
218
218
  bootstrap.Modal.getOrCreateInstance(el || document.querySelector(Blacklight.modal.modalSelector)).show();
219
219
  } else {
220
220
  $(el || Blacklight.modal.modalSelector).modal('show');
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Blacklight
4
4
  class SearchBarPresenter
5
+ extend Deprecation
5
6
  attr_reader :configuration, :view_context, :controller
6
7
 
7
8
  # Set the partial this presenter draws
@@ -17,6 +18,7 @@ module Blacklight
17
18
  def render
18
19
  view_context.render partial, presenter: self
19
20
  end
21
+ deprecation_deprecate render: "The SearchBarPresenter has been deprecated. Call `render Blacklight::SearchBarComponent.new' instead"
20
22
 
21
23
  ##
22
24
  # @return [Boolean] should autocomplete be enabled in the UI
@@ -4,7 +4,7 @@ module Blacklight
4
4
  class FieldRetriever
5
5
  # @param [Blacklight::Document] document
6
6
  # @param [Blacklight::Configuration::Field] field_config solr field configuration
7
- # @param [ActionView::Base] Rails rendering context
7
+ # @param [ActionView::Base] view_context Rails rendering context
8
8
  def initialize(document, field_config, view_context = nil)
9
9
  @document = document
10
10
  @field_config = field_config
@@ -1,5 +1,5 @@
1
- <% if constraints_helpers_and_partials_from_blacklight? %>
2
- <%= render(Blacklight::ConstraintsComponent.new(search_state: convert_to_search_state(controller.params != params ? params : search_state))) %>
1
+ <% if constraints_helpers_and_partials_from_blacklight? || blacklight_config&.view_config(document_index_view_type)&.constraints_component %>
2
+ <%= render((blacklight_config&.view_config(document_index_view_type)&.constraints_component || Blacklight::ConstraintsComponent).new(search_state: convert_to_search_state(controller.params != params ? params : search_state))) %>
3
3
  <% else %>
4
4
  <% Deprecation.warn(Blacklight::RenderConstraintsHelperBehavior, 'Constraints helpers or partials were overridden; not using components') %>
5
5
  <% if Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) { query_has_constraints? } %>
@@ -1,4 +1,4 @@
1
- <%= render Blacklight::Response::FacetGroupComponent.new(
1
+ <%= render (blacklight_config&.view_config(document_index_view_type)&.facet_group_component || Blacklight::Response::FacetGroupComponent).new(
2
2
  response: @response,
3
3
  id: groupname,
4
4
  fields: facet_field_names(groupname),
@@ -1,7 +1,7 @@
1
- <%= render(Blacklight::SearchBarComponent.new(
1
+ <%= warn "#{__file__} is a deprecated partial." %>
2
+ <%= render((blacklight_config&.view_config(document_index_view_type)&.search_bar_component || Blacklight::SearchBarComponent).new(
2
3
  url: search_action_url,
3
4
  advanced_search_url: search_action_url(action: 'advanced_search'),
4
5
  params: search_state.params_for_search.except(:qt),
5
6
  search_fields: Deprecation.silence(Blacklight::ConfigurationHelperBehavior) { search_fields },
6
- presenter: presenter,
7
7
  autocomplete_path: search_action_path(action: :suggest))) %>