blacklight 7.28.0 → 7.30.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7e57b2c0a5ca770fa8fbc0560072609b5db93d10c952d33af0db3d69ae2dfc6
4
- data.tar.gz: 231146a7df38ba031b116075b75bf9abe7f91e760485524fb8678a624d9be893
3
+ metadata.gz: d3f2833ee33fe1cc1d37ef72206820efdd9bbdd4c39f14783c08bfba4c7b9dd8
4
+ data.tar.gz: 3f9cbc91061f1a1b68bd25aab95c518f134c7a497566241691a8aee63cc6b752
5
5
  SHA512:
6
- metadata.gz: 95bc567df4947b3a11b37749c0c9a123da3c5a20552e78195a77775638bc5075d1db2c6d11d8158864346a1346a29a296a3ce8a873b497a9946eb011cd53843f
7
- data.tar.gz: 28efc83fd658e1e43a3f85c8bea5ec389ee913b540b413ce967925b98b48a5d4d9422a2df1fcbf14d905ba0e31cba3fe9267a3cee38e6371adaf83b963183f41
6
+ metadata.gz: 5b6500ea3048765a8e9d78425eb6f14d7a7edcb6cd17c1ddcc91c88edc7e09353672f0aa7ff29e1e85fbe238508066f9221b652c48cacbfe947e636dbac13a27
7
+ data.tar.gz: 5da051e3b7d496204d5e8752c09d346e39c0a94d917539155e60d0a2488ee3a32770bdbf205d11d9fff9da0f107c8d01b8786749ad9e9272b4b9933f46b6815e
@@ -23,6 +23,7 @@ jobs:
23
23
  uses: ruby/setup-ruby@v1
24
24
  with:
25
25
  ruby-version: 2.7
26
+ bundler: 'latest'
26
27
  - name: Install dependencies
27
28
  run: bundle install
28
29
  - name: Run linter
@@ -38,12 +39,13 @@ jobs:
38
39
  uses: ruby/setup-ruby@v1
39
40
  with:
40
41
  ruby-version: ${{ matrix.ruby }}
42
+ bundler: 'latest'
41
43
  - name: Install dependencies
42
44
  run: bundle install
43
45
  - name: Run tests
44
46
  run: bundle exec rake ci
45
47
  env:
46
- ENGINE_CART_RAILS_OPTIONS: '-a propshaft --skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test'
48
+ ENGINE_CART_RAILS_OPTIONS: '--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test'
47
49
  test_bootstrap5:
48
50
  runs-on: ubuntu-latest
49
51
  strategy:
@@ -55,6 +57,7 @@ jobs:
55
57
  uses: ruby/setup-ruby@v1
56
58
  with:
57
59
  ruby-version: ${{ matrix.ruby }}
60
+ bundler: 'latest'
58
61
  - name: Install dependencies
59
62
  run: bundle install
60
63
  - name: Run tests
@@ -73,6 +76,7 @@ jobs:
73
76
  uses: ruby/setup-ruby@v1
74
77
  with:
75
78
  ruby-version: ${{ matrix.ruby }}
79
+ bundler: 'latest'
76
80
  - name: Install dependencies
77
81
  run: bundle install
78
82
  env:
@@ -93,6 +97,7 @@ jobs:
93
97
  uses: ruby/setup-ruby@v1
94
98
  with:
95
99
  ruby-version: ${{ matrix.ruby }}
100
+ bundler: 'latest'
96
101
  - name: Install dependencies
97
102
  run: bundle install
98
103
  env:
@@ -114,6 +119,7 @@ jobs:
114
119
  uses: ruby/setup-ruby@v1
115
120
  with:
116
121
  ruby-version: ${{ matrix.ruby }}
122
+ bundler: 'latest'
117
123
  - name: Install dependencies
118
124
  run: bundle install
119
125
  env:
@@ -133,6 +139,7 @@ jobs:
133
139
  - name: Set up Ruby
134
140
  uses: ruby/setup-ruby@v1
135
141
  with:
142
+ bundler: 'latest'
136
143
  ruby-version: ${{ matrix.ruby }}
137
144
  - name: Install dependencies
138
145
  run: bundle install
@@ -140,7 +147,7 @@ jobs:
140
147
  run: bundle exec rake ci
141
148
  env:
142
149
  BLACKLIGHT_API_TEST: true
143
- ENGINE_CART_RAILS_OPTIONS: '--api --skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-action-cable --skip-coffee --skip-test'
150
+ ENGINE_CART_RAILS_OPTIONS: '-a propshaft --api --skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-action-cable --skip-coffee --skip-test'
144
151
  docker_build:
145
152
  runs-on: ubuntu-latest
146
153
  steps:
data/README.md CHANGED
@@ -42,7 +42,7 @@ rails generate blacklight:install
42
42
  Code contributions are always welcome, instructions for contributing can be found at [CONTRIBUTING.md](https://github.com/projectblacklight/blacklight/blob/main/CONTRIBUTING.md).
43
43
 
44
44
  ## Configuring Apache Solr
45
- You'll also want some information about how Blacklight expects [Apache Solr](http://lucene.apache.org/solr ) to run, which you can find in [README_SOLR](https://github.com/projectblacklight/blacklight/wiki/README_SOLR)
45
+ You'll also want some information about how Blacklight expects [Apache Solr](http://lucene.apache.org/solr ) to run, which you can find in [Solr Configuration](https://github.com/projectblacklight/blacklight/wiki/Solr-Configuration#solr-configuration)
46
46
 
47
47
  ## Building the javascript
48
48
  The javascript is built by npm from sources in `app/javascript` into a bundle
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.28.0
1
+ 7.30.0
@@ -1,5 +1,5 @@
1
1
  .group-key {
2
- border-bottom: 1px solid darken($table-border-color, 60%);
2
+ border-bottom: 1px solid darken($border-color, 60%);
3
3
  clear: right;
4
4
  }
5
5
 
@@ -11,4 +11,4 @@
11
11
 
12
12
  .more-in-group {
13
13
  float: right;
14
- }
14
+ }
@@ -9,6 +9,7 @@
9
9
 
10
10
  input.tt-hint.form-control {
11
11
  width: 100%;
12
+ filter: opacity(0.33);
12
13
  }
13
14
 
14
15
  .tt-menu {
@@ -27,4 +28,10 @@
27
28
  font-size: 14px;
28
29
  padding: 5px 5px 5px 10px;
29
30
  }
31
+
32
+ .tt-suggestion:hover {
33
+ background-color: $dropdown-link-hover-bg;
34
+ color: $dropdown-link-hover-color;
35
+ cursor: pointer;
36
+ }
30
37
  }
@@ -1,12 +1,12 @@
1
1
  <header class="documentHeader row">
2
2
  <%= content_tag @as, class: @classes do %>
3
- <% before_title.each do |t| %>
3
+ <% before_titles.each do |t| %>
4
4
  <%= t %>
5
5
  <% end %>
6
6
 
7
7
  <%= counter -%><%= title -%>
8
8
 
9
- <% after_title.each do |t| %>
9
+ <% after_titles.each do |t| %>
10
10
  <%= t %>
11
11
  <% end %>
12
12
  <% end %>
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Blacklight
4
4
  class DocumentTitleComponent < Blacklight::Component
5
- renders_many :before_title
6
- renders_many :after_title
5
+ renders_many :before_titles
6
+ renders_many :after_titles
7
7
  renders_many :actions
8
8
 
9
9
  # rubocop:disable Metrics/ParameterLists
@@ -11,8 +11,8 @@ module Blacklight
11
11
  # @param [Blacklight::Solr::Response::Facets::FacetField] display_facet
12
12
  # @param [Blacklight::Configuration] blacklight_config
13
13
  # @param [Boolean] layout
14
- # rubocop:disable Metrics/CyclomaticComplexity
15
- def initialize(display_facet_or_field_config: nil, display_facet: nil, field_config: nil, response: nil, blacklight_config: nil, **component_args)
14
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/ParameterLists
15
+ def initialize(display_facet_or_field_config: nil, display_facet: nil, field_config: nil, response: nil, blacklight_config: nil, component: nil, **component_args)
16
16
  if display_facet_or_field_config.is_a? Blacklight::FacetFieldPresenter
17
17
  @facet_field_presenter = display_facet_or_field_config
18
18
  @field_config = @facet_field_presenter.facet_field
@@ -30,9 +30,10 @@ module Blacklight
30
30
  raise ArgumentError, 'You must provide one of display_facet or field_config' unless @field_config
31
31
  end
32
32
 
33
+ @component = component || (@field_config.component == true ? Blacklight::FacetFieldListComponent : @field_config.component)
33
34
  @component_args = component_args
34
35
  end
35
- # rubocop:enable Metrics/CyclomaticComplexity
36
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/ParameterLists
36
37
 
37
38
  def render?
38
39
  helpers.should_render_field?(@field_config, @display_facet)
@@ -41,10 +42,8 @@ module Blacklight
41
42
  def call
42
43
  return render_partial if @field_config.partial
43
44
 
44
- component = @field_config.component == true ? Blacklight::FacetFieldListComponent : @field_config.component
45
-
46
45
  render(
47
- component.new(
46
+ @component.new(
48
47
  facet_field: @facet_field_presenter || helpers.facet_field_presenter(@field_config, @display_facet),
49
48
  **@component_args
50
49
  )
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Icons
5
+ # This is the list icon for the search button.
6
+ # You can override the default svg by setting:
7
+ # Blacklight::Icons::ListComponent.svg = '<svg>your SVG here</svg>'
8
+ class IconComponent < ::ViewComponent::Base
9
+ def initialize(svg: nil)
10
+ self.svg = svg if svg
11
+ end
12
+
13
+ def call
14
+ svg&.html_safe # rubocop:disable Rails/OutputSafety
15
+ end
16
+
17
+ class_attribute :svg
18
+ end
19
+ end
20
+ end
@@ -15,6 +15,9 @@ module Blacklight
15
15
  end
16
16
 
17
17
  def icon
18
+ return render(@view.icon.new) if @view.icon.is_a?(Class)
19
+ return render(@view.icon) if @view.icon.is_a?(ViewComponent::Base)
20
+
18
21
  Deprecation.silence(Blacklight::CatalogHelperBehavior) do
19
22
  helpers.render_view_type_group_icon(@view.icon || @key)
20
23
  end
@@ -67,14 +67,16 @@ json.included do
67
67
  end
68
68
  end
69
69
 
70
- json.array! search_fields do |(label, key)|
71
- json.type 'search_field'
72
- json.id key
73
- json.attributes do
74
- json.label label
75
- end
76
- json.links do
77
- json.self url_for(search_state.to_h.merge(search_field: key, only_path: false))
70
+ Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do
71
+ json.array! search_fields do |(label, key)|
72
+ json.type 'search_field'
73
+ json.id key
74
+ json.attributes do
75
+ json.label label
76
+ end
77
+ json.links do
78
+ json.self url_for(search_state.to_h.merge(search_field: key, only_path: false))
79
+ end
78
80
  end
79
81
  end
80
82
 
@@ -8,6 +8,8 @@ module Blacklight
8
8
  @__vc_compiler ||= EngineCompiler.new(self)
9
9
  end
10
10
  # rubocop:enable Naming/MemoizedInstanceVariableName
11
+
12
+ alias sidecar_files _sidecar_files unless ViewComponent::Base.respond_to? :sidecar_files
11
13
  end
12
14
 
13
15
  class EngineCompiler < ::ViewComponent::Compiler
@@ -23,7 +25,7 @@ module Blacklight
23
25
  @templates ||= begin
24
26
  extensions = ActionView::Template.template_handler_extensions
25
27
 
26
- component_class._sidecar_files(extensions).each_with_object([]) do |path, memo|
28
+ component_class.sidecar_files(extensions).each_with_object([]) do |path, memo|
27
29
  pieces = File.basename(path).split(".")
28
30
  app_path = "#{Rails.root}/#{path.slice(path.index(component_class.view_component_path)..-1)}"
29
31
 
@@ -13,7 +13,7 @@ module Blacklight
13
13
  def define_field_access(key, base_class_name = nil, class: nil)
14
14
  key = key.to_s if respond_to? :to_s
15
15
 
16
- default_values[key.pluralize.to_sym] = ActiveSupport::OrderedHash.new
16
+ default_values[key.pluralize.to_sym] = ActiveSupport::HashWithIndifferentAccess.new
17
17
 
18
18
  @field_type_for_class ||= {}
19
19
  @field_type_for_class[key] = binding.local_variable_get(:class) || base_class_name
@@ -14,7 +14,7 @@ class Blacklight::Configuration
14
14
  # @!attribute display_type_field
15
15
  # @return [String, Symbol] solr field to use to render format-specific partials
16
16
  # @!attribute icon
17
- # @return [String, Symbol] icon file to use in the view picker
17
+ # @return [String, Symbol, Blacklight::Icons::IconComponent] icon file to use in the view picker
18
18
  # @!attribute document_actions
19
19
  # @return [NestedOpenStructWithHashAccess{Symbol => Blacklight::Configuration::ToolConfig}] 'tools' to render for each document
20
20
  # @!attribute facet_group_component
@@ -27,7 +27,7 @@ module Blacklight
27
27
  end
28
28
 
29
29
  @blacklight_params = {}
30
- search_state_class = @scope&.search_state_class || Blacklight::SearchState
30
+ search_state_class = @scope.try(:search_state_class) || Blacklight::SearchState
31
31
  @search_state = search_state_class.new(@blacklight_params, @scope&.blacklight_config, @scope)
32
32
  @additional_filters = {}
33
33
  @merged_params = {}
@@ -45,6 +45,9 @@ module Blacklight
45
45
 
46
46
  ##
47
47
  # Update the :q (query) parameter
48
+ # @param [Hash<Symbol,Object>] conditions the field and values to query on
49
+ # @example
50
+ # search_builder.where(id: [1,2,3]) # produces: q:"{!lucene}id:(1 OR 2 OR 3)"
48
51
  def where(conditions)
49
52
  Deprecation.warn(Blacklight::SearchBuilder, "SearchBuilder#where must be called with a hash, received #{conditions.inspect}.") unless conditions.is_a? Hash
50
53
  params_will_change!
@@ -166,4 +166,18 @@ RSpec.describe Blacklight::DocumentComponent, type: :component do
166
166
  expect(rendered).to have_content 'Thumb!'
167
167
  end
168
168
  end
169
+
170
+ context 'with before_title' do
171
+ let(:render) do
172
+ component.render_in(view_context) do
173
+ component.title do |c|
174
+ c.before_title { 'Prefix!' }
175
+ end
176
+ end
177
+ end
178
+
179
+ it 'shows the prefix' do
180
+ expect(rendered).to have_content "Prefix!"
181
+ end
182
+ end
169
183
  end
@@ -26,6 +26,25 @@ RSpec.describe Blacklight::FacetComponent, type: :component do
26
26
  expect(rendered).to have_selector 'ul.facet-values'
27
27
  end
28
28
 
29
+ context 'with a provided component' do
30
+ let(:component_kwargs) { { field_config: facet_config, display_facet: display_facet, component: component_class } }
31
+ let(:component_class) do
32
+ Class.new(Blacklight::FacetFieldListComponent) do
33
+ def self.name
34
+ 'CustomFacetComponent'
35
+ end
36
+
37
+ def call
38
+ 'Custom facet rendering'
39
+ end
40
+ end
41
+ end
42
+
43
+ it 'renders the provided component' do
44
+ expect(rendered).to have_content 'Custom facet rendering'
45
+ end
46
+ end
47
+
29
48
  context 'with a facet configured to use a partial' do
30
49
  let(:facet_config) do
31
50
  Blacklight::Configuration::FacetField.new(key: 'field', partial: 'catalog/facet_partial').normalize!
@@ -39,13 +39,13 @@ RSpec.describe "Blacklight::Configuration", api: true do
39
39
  end
40
40
 
41
41
  it "has ordered hashes for field configuration" do
42
- expect(config.facet_fields).to be_a_kind_of ActiveSupport::OrderedHash
43
- expect(config.index_fields).to be_a_kind_of ActiveSupport::OrderedHash
44
- expect(config.show_fields).to be_a_kind_of ActiveSupport::OrderedHash
45
- expect(config.search_fields).to be_a_kind_of ActiveSupport::OrderedHash
46
- expect(config.show_fields).to be_a_kind_of ActiveSupport::OrderedHash
47
- expect(config.search_fields).to be_a_kind_of ActiveSupport::OrderedHash
48
- expect(config.sort_fields).to be_a_kind_of ActiveSupport::OrderedHash
42
+ expect(config.facet_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
43
+ expect(config.index_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
44
+ expect(config.show_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
45
+ expect(config.search_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
46
+ expect(config.show_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
47
+ expect(config.search_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
48
+ expect(config.sort_fields).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
49
49
  end
50
50
  end
51
51
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.28.0
4
+ version: 7.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: exe
19
19
  cert_chain: []
20
- date: 2022-07-13 00:00:00.000000000 Z
20
+ date: 2022-10-03 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -470,6 +470,7 @@ files:
470
470
  - app/components/blacklight/facet_item_component.rb
471
471
  - app/components/blacklight/facet_item_pivot_component.rb
472
472
  - app/components/blacklight/hidden_search_state_component.rb
473
+ - app/components/blacklight/icons/icon_component.rb
473
474
  - app/components/blacklight/metadata_field_component.html.erb
474
475
  - app/components/blacklight/metadata_field_component.rb
475
476
  - app/components/blacklight/metadata_field_layout_component.html.erb