blacklight 7.7.0 → 7.8.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.docker/app/Dockerfile +26 -0
  3. data/.docker/app/entrypoint.sh +6 -0
  4. data/.env +5 -0
  5. data/.rubocop_todo.yml +13 -13
  6. data/.travis.yml +15 -23
  7. data/Gemfile +4 -1
  8. data/README.md +4 -0
  9. data/VERSION +1 -1
  10. data/app/assets/stylesheets/blacklight/_pagination.scss +4 -0
  11. data/app/components/blacklight/constraint_layout_component.html.erb +21 -0
  12. data/app/components/blacklight/constraint_layout_component.rb +16 -0
  13. data/app/components/blacklight/facet_field_component.html.erb +25 -0
  14. data/app/components/blacklight/facet_field_component.rb +11 -0
  15. data/app/components/blacklight/facet_field_list_component.html.erb +18 -0
  16. data/app/components/blacklight/facet_field_list_component.rb +22 -0
  17. data/app/components/blacklight/facet_field_no_layout_component.rb +13 -0
  18. data/app/components/blacklight/facet_item_component.rb +120 -0
  19. data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -2
  20. data/app/helpers/blacklight/facets_helper_behavior.rb +84 -48
  21. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +64 -33
  22. data/app/javascript/blacklight/modal.js +1 -1
  23. data/app/models/concerns/blacklight/document/extensions.rb +3 -0
  24. data/app/models/concerns/blacklight/document/semantic_fields.rb +0 -4
  25. data/app/presenters/blacklight/facet_field_presenter.rb +57 -0
  26. data/app/presenters/blacklight/facet_item_presenter.rb +81 -0
  27. data/app/views/catalog/_citation.html.erb +1 -1
  28. data/app/views/catalog/_constraints.html.erb +1 -1
  29. data/app/views/catalog/_constraints_element.html.erb +5 -24
  30. data/app/views/catalog/_email_form.html.erb +1 -1
  31. data/app/views/catalog/_facet_layout.html.erb +8 -17
  32. data/app/views/catalog/_facet_limit.html.erb +3 -12
  33. data/app/views/catalog/_facet_pagination.html.erb +2 -2
  34. data/app/views/catalog/_facet_pivot.html.erb +4 -4
  35. data/app/views/catalog/_sms_form.html.erb +1 -1
  36. data/blacklight.gemspec +1 -0
  37. data/config/locales/blacklight.ar.yml +29 -25
  38. data/docker-compose.yml +35 -0
  39. data/lib/blacklight/engine.rb +2 -6
  40. data/lib/blacklight/search_state.rb +32 -0
  41. data/lib/blacklight/solr/response/facets.rb +2 -0
  42. data/lib/generators/blacklight/assets_generator.rb +10 -0
  43. data/spec/{views/catalog/_constraints_element.html.erb_spec.rb → components/blacklight/constraint_layout_component_spec.rb} +21 -11
  44. data/spec/components/blacklight/facet_field_list_component_spec.rb +108 -0
  45. data/spec/components/blacklight/facet_item_component_spec.rb +50 -0
  46. data/spec/features/facets_spec.rb +1 -1
  47. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +24 -12
  48. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +4 -23
  49. data/spec/lib/blacklight/search_state_spec.rb +38 -0
  50. data/spec/models/blacklight/solr/response/facets_spec.rb +30 -1
  51. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +109 -0
  52. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +92 -0
  53. data/spec/spec_helper.rb +2 -0
  54. data/spec/support/presenter_test_helpers.rb +11 -0
  55. data/spec/views/catalog/_facet_group.html.erb_spec.rb +1 -0
  56. data/tasks/blacklight.rake +30 -23
  57. metadata +43 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25f35365c3e8f37c1a405aa2c3ed398c82643f275ba6326dd678ad39edb3c101
4
- data.tar.gz: a55e315a722c78ceed677a739d2dd3debd6f332849e50c7ecb9e269bbf83449e
3
+ metadata.gz: 103d3b133711969469b938bec955df2f26e460762dd4734574bd1aecc4fb6451
4
+ data.tar.gz: b483715ad76633f2cccdca1292a035a7f8714d00acd8b1f6f1a14b6f63e7cfe5
5
5
  SHA512:
6
- metadata.gz: a7df6ed0d222bbeff7e710066370d8e298bdec544663fb486c72a20b5a7ec85868d29e984982f1bb2a61e2e0ed2bd17ce9880debf1df9e155d075e49fb284ad5
7
- data.tar.gz: b04f3d9435d93a6bf144eba9b942b747d4632dd577916f62273813611688c6f02d5faf9263cd84219389609fe2dd687aef91c1b0d4ba5e46b8122a595f3e3f25
6
+ metadata.gz: 1216b0bc9e7824cd19ac8503932f28de07a7fa9c058b762d90cf479c9c792070ccea3b48c38676d4da54b95681ff52c848a886011a86c6743bf526f74dcb4ba8
7
+ data.tar.gz: 92ed30878b6bd680f5ea8c8ea8e49f170aace6615f56645feae0ab383a7334d6b0a8a5a539634547f9e967b90007e28e7dbdde5712b64006e06e4ca5f64de776
@@ -0,0 +1,26 @@
1
+ ARG ALPINE_RUBY_VERSION
2
+
3
+ FROM ruby:${ALPINE_RUBY_VERSION}-alpine
4
+
5
+ RUN apk add --update --no-cache \
6
+ bash \
7
+ build-base \
8
+ git \
9
+ libxml2-dev \
10
+ libxslt-dev \
11
+ nodejs \
12
+ sqlite-dev \
13
+ tzdata
14
+
15
+ RUN mkdir /app
16
+ WORKDIR /app
17
+
18
+ RUN gem update --system && \
19
+ gem install bundler && \
20
+ bundle config build.nokogiri --use-system-libraries
21
+
22
+ COPY . .
23
+
24
+ EXPOSE 3000
25
+
26
+ CMD [".docker/app/entrypoint.sh"]
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ rm -f /app/.internal_test_app/tmp/pids/server.pid
5
+ bundle install
6
+ exec bundle exec rake blacklight:server["-p 3000 -b 0.0.0.0"]
data/.env ADDED
@@ -0,0 +1,5 @@
1
+ ALPINE_RUBY_VERSION=2.6.5
2
+ RAILS_VERSION=5.2.4.1
3
+ SOLR_PORT=8983
4
+ SOLR_URL=http://solr:8983/solr/blacklight-core
5
+ SOLR_VERSION=latest
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-02-03 11:07:48 -0800 using RuboCop version 0.63.1.
3
+ # on 2020-03-30 10:03:33 -0700 using RuboCop version 0.63.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -177,7 +177,7 @@ Lint/UselessComparison:
177
177
  Exclude:
178
178
  - 'spec/models/blacklight/document/active_model_shim_spec.rb'
179
179
 
180
- # Offense count: 59
180
+ # Offense count: 60
181
181
  Metrics/AbcSize:
182
182
  Max: 49
183
183
 
@@ -201,20 +201,20 @@ Metrics/ClassLength:
201
201
  Metrics/CyclomaticComplexity:
202
202
  Max: 11
203
203
 
204
- # Offense count: 54
204
+ # Offense count: 56
205
205
  # Configuration parameters: CountComments, ExcludedMethods.
206
206
  Metrics/MethodLength:
207
- Max: 31
207
+ Max: 30
208
208
 
209
209
  # Offense count: 8
210
210
  # Configuration parameters: CountComments.
211
211
  Metrics/ModuleLength:
212
212
  Max: 212
213
213
 
214
- # Offense count: 2
214
+ # Offense count: 5
215
215
  # Configuration parameters: CountKeywordArgs.
216
216
  Metrics/ParameterLists:
217
- Max: 6
217
+ Max: 7
218
218
 
219
219
  # Offense count: 16
220
220
  Metrics/PerceivedComplexity:
@@ -287,7 +287,7 @@ RSpec/BeforeAfterAll:
287
287
  RSpec/ContextWording:
288
288
  Enabled: false
289
289
 
290
- # Offense count: 55
290
+ # Offense count: 56
291
291
  RSpec/DescribeClass:
292
292
  Enabled: false
293
293
 
@@ -297,7 +297,7 @@ RSpec/EmptyExampleGroup:
297
297
  Exclude:
298
298
  - 'spec/models/blacklight/solr/search_builder_spec.rb'
299
299
 
300
- # Offense count: 129
300
+ # Offense count: 130
301
301
  # Configuration parameters: Max.
302
302
  RSpec/ExampleLength:
303
303
  Enabled: false
@@ -321,7 +321,7 @@ RSpec/FilePath:
321
321
  - 'spec/presenters/pipeline_spec.rb'
322
322
  - 'spec/presenters/thumbnail_presenter_spec.rb'
323
323
 
324
- # Offense count: 192
324
+ # Offense count: 191
325
325
  # Configuration parameters: AssignmentOnly.
326
326
  RSpec/InstanceVariable:
327
327
  Enabled: false
@@ -371,12 +371,12 @@ RSpec/MessageSpies:
371
371
  - 'spec/presenters/blacklight/field_presenter_spec.rb'
372
372
  - 'spec/presenters/thumbnail_presenter_spec.rb'
373
373
 
374
- # Offense count: 340
374
+ # Offense count: 343
375
375
  # Configuration parameters: AggregateFailuresByDefault.
376
376
  RSpec/MultipleExpectations:
377
377
  Max: 16
378
378
 
379
- # Offense count: 337
379
+ # Offense count: 341
380
380
  # Configuration parameters: IgnoreSharedExamples.
381
381
  RSpec/NamedSubject:
382
382
  Enabled: false
@@ -412,7 +412,7 @@ RSpec/SubjectStub:
412
412
  - 'spec/models/blacklight/search_builder_spec.rb'
413
413
  - 'spec/services/blacklight/search_service_spec.rb'
414
414
 
415
- # Offense count: 120
415
+ # Offense count: 118
416
416
  # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
417
417
  RSpec/VerifiedDoubles:
418
418
  Enabled: false
@@ -497,7 +497,7 @@ Style/ConditionalAssignment:
497
497
  Exclude:
498
498
  - 'lib/blacklight/solr/response/spelling.rb'
499
499
 
500
- # Offense count: 94
500
+ # Offense count: 99
501
501
  Style/Documentation:
502
502
  Enabled: false
503
503
 
@@ -1,50 +1,42 @@
1
1
  dist: bionic
2
+
2
3
  addons:
3
4
  chrome: stable
4
- language: ruby
5
5
 
6
- notifications:
7
- email: false
6
+ language: ruby
8
7
 
9
8
  matrix:
10
9
  include:
11
10
  - rvm: 2.7.0
12
- env: "RAILS_VERSION=6.0.2.1"
11
+ env: "RAILS_VERSION=6.0.2.2"
13
12
  - rvm: 2.6.5
14
- env: "RAILS_VERSION=6.0.2.1 ENGINE_CART_RAILS_OPTIONS=\"--skip-webpack-install\""
13
+ env: "RAILS_VERSION=6.0.2.2"
15
14
  - rvm: 2.6.5
16
- env: "RAILS_VERSION=5.2.4.1"
15
+ env: "RAILS_VERSION=5.2.4.2"
17
16
  - rvm: 2.5.7
18
- env: "RAILS_VERSION=5.2.4.1 BLACKLIGHT_API_TEST=true ENGINE_CART_RAILS_OPTIONS=\"--api --skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-action-cable --skip-coffee --skip-test\""
17
+ env: "RAILS_VERSION=5.2.4.2 BLACKLIGHT_API_TEST=true ENGINE_CART_RAILS_OPTIONS=\"--api --skip-git --skip-bundle --skip-listen --skip-spring --skip-yarn --skip-keeps --skip-action-cable --skip-coffee --skip-test\""
19
18
  - rvm: 2.4.9
20
- env: "RAILS_VERSION=5.2.4.1"
19
+ env: "RAILS_VERSION=5.2.4.2"
21
20
  - rvm: jruby-9.2.8.0
22
- env: "RAILS_VERSION=5.2.4.1 JRUBY_OPTS=\"-J-Xms512m -J-Xmx1024m\""
21
+ env: "RAILS_VERSION=5.2.4.2 JRUBY_OPTS=\"-J-Xms512m -J-Xmx1024m\""
23
22
  allow_failures:
24
23
  - rvm: jruby-9.2.8.0
25
24
  fast_finish: true
26
25
 
27
26
  before_install:
28
- - docker pull solr:7
29
- - docker run -d -p 8983:8983 -v $PWD/lib/generators/blacklight/templates/solr/conf:/myconfig solr:7 solr-create -c blacklight-core -d /myconfig
30
- - docker ps -a
31
27
  - google-chrome-stable --headless --disable-gpu --no-sandbox --remote-debugging-port=9222 http://localhost &
32
28
 
33
- notifications:
34
- irc: "irc.freenode.org#blacklight"
35
- email:
36
- - blacklight-commits@googlegroups.com
37
-
38
- global_env:
39
- - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
40
- - ENGINE_CART_RAILS_OPTIONS='--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test'
41
- - CC_TEST_REPORTER_ID=5042c7358c96b0b926088a4cda3e132fffe7a66ce8047cdb1dc6f0b4b6676b79
42
-
43
- jdk: openjdk11
29
+ env:
30
+ global:
31
+ - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
32
+ - ENGINE_CART_RAILS_OPTIONS='--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test'
33
+ - CC_TEST_REPORTER_ID=5042c7358c96b0b926088a4cda3e132fffe7a66ce8047cdb1dc6f0b4b6676b79
44
34
 
45
35
  before_script:
46
36
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
47
37
  - chmod +x ./cc-test-reporter
48
38
  - ./cc-test-reporter before-build
39
+
49
40
  after_script:
50
41
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
42
+ - docker-compose build app || travis_terminate 1 # validates application Dockerfile
data/Gemfile CHANGED
@@ -34,7 +34,10 @@ else
34
34
  end
35
35
 
36
36
  case ENV['RAILS_VERSION']
37
- when /^5.[12]/, /^6.0/
37
+ when /^6.0/
38
+ gem 'sass-rails', '>= 6'
39
+ gem 'webpacker', '~> 4.0'
40
+ when /^5.[12]/
38
41
  gem 'sass-rails', '~> 5.0'
39
42
  when /^4.2/
40
43
  gem 'responders', '~> 2.0'
data/README.md CHANGED
@@ -38,6 +38,10 @@ rails generate blacklight:install
38
38
  * Bundler
39
39
  * Rails 5.1+
40
40
 
41
+ ## Contributing Code
42
+
43
+ Code contributions are always welcome, instructions for contributing can be found at [CONTRIBUTING.md](https://github.com/projectblacklight/blacklight/blob/master/CONTRIBUTING.md).
44
+
41
45
  ## Configuring Apache Solr
42
46
  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)
43
47
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.7.0
1
+ 7.8.0
@@ -5,6 +5,10 @@
5
5
  padding-left: 0;
6
6
  }
7
7
 
8
+ .record-padding {
9
+ margin-top: $spacer / 2;
10
+ }
11
+
8
12
  .pagination {
9
13
  @media (max-width: breakpoint-max(sm)) {
10
14
  flex-wrap: wrap;
@@ -0,0 +1,21 @@
1
+ <span class="btn-group applied-filter constraint <%= @classes %>">
2
+ <span class="constraint-value btn btn-outline-secondary">
3
+ <% if @label.present? %>
4
+ <span class="filter-name"><%= @label %></span>
5
+ <% end %>
6
+ <% if @value.present? %>
7
+ <%= content_tag :span, @value, class: 'filter-value', title: strip_tags(@value) %>
8
+ <% end %>
9
+ </span>
10
+ <% if @remove_path.present? %>
11
+ <%= link_to(@remove_path, class: 'btn btn-outline-secondary remove') do %>
12
+ <span class="remove-icon">✖</span>
13
+ <%= if @label.blank?
14
+ t('blacklight.search.filters.remove.value', value: @value)
15
+ else
16
+ t('blacklight.search.filters.remove.label_value', label: @label, value: @value)
17
+ end
18
+ %>
19
+ <% end %>
20
+ <% end %>
21
+ </span>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class ConstraintLayoutComponent < ::ViewComponent::Base
5
+ def initialize(value:, label: nil, remove_path: nil, classes: nil)
6
+ @value = value
7
+ @label = label
8
+ @remove_path = remove_path
9
+ @classes = Array(classes).join(' ')
10
+ end
11
+
12
+ def render?
13
+ @value.present?
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ <div class="card facet-limit blacklight-<%= @facet_field.key %> <%= 'facet-limit-active' if @facet_field.active? %>">
2
+ <h3 class="card-header p-0 facet-field-heading" id="<%= @facet_field.html_id %>-header">
3
+ <button
4
+ class="btn btn-block p-2 text-left collapse-toggle <%= "collapsed" if @facet_field.collapsed? %>"
5
+ data-toggle="collapse"
6
+ data-target="#<%= @facet_field.html_id %>"
7
+ aria-expanded="<%= @facet_field.collapsed? ? 'false' : 'true' %>"
8
+ >
9
+ <%= label %>
10
+ </button>
11
+ </h3>
12
+ <div id="<%= @facet_field.html_id %>" aria-labelledby="<%= @facet_field.html_id %>-header" class="panel-collapse facet-content collapse <%= "show" unless @facet_field.collapsed? %>">
13
+ <div class="card-body">
14
+ <%= body %>
15
+
16
+ <% if @facet_field.modal_path %>
17
+ <div class="more_facets">
18
+ <%= link_to t("more_#{@facet_field.key}_html", scope: 'blacklight.search.facets', default: :more_html, field_name: @facet_field.label),
19
+ @facet_field.modal_path,
20
+ data: { blacklight_modal: 'trigger' } %>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+ </div>
25
+ </div>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetFieldComponent < ::ViewComponent::Base
5
+ with_content_areas :label, :body
6
+
7
+ def initialize(facet_field:)
8
+ @facet_field = facet_field
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ <%= render(@layout.new(facet_field: @facet_field)) do |component| %>
2
+ <% component.with(:label) do %>
3
+ <%= @facet_field.label %>
4
+ <% end %>
5
+ <% component.with(:body) do %>
6
+ <ul class="facet-values list-unstyled">
7
+ <%= render_facet_limit_list @facet_field.paginator, @facet_field.key %>
8
+ </ul>
9
+ <%# backwards compatibility, ugh %>
10
+ <% if @layout == Blacklight::FacetFieldNoLayoutComponent && !@facet_field.in_modal? && @facet_field.modal_path %>
11
+ <div class="more_facets">
12
+ <%= link_to t("more_#{@facet_field.key}_html", scope: 'blacklight.search.facets', default: :more_html, field_name: @facet_field.label),
13
+ @facet_field.modal_path,
14
+ data: { blacklight_modal: 'trigger' } %>
15
+ </div>
16
+ <% end %>
17
+ <% end %>
18
+ <% end %>
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetFieldListComponent < ::ViewComponent::Base
5
+ def initialize(facet_field:, layout: nil)
6
+ @facet_field = facet_field
7
+ @layout = layout == false ? FacetFieldNoLayoutComponent : Blacklight::FacetFieldComponent
8
+ end
9
+
10
+ # Here for backwards compatibility only.
11
+ # @private
12
+ def render_facet_limit_list(*args)
13
+ Deprecation.silence(Blacklight::FacetsHelperBehavior) do
14
+ @view_context.render_facet_limit_list(*args)
15
+ end
16
+ end
17
+
18
+ def render?
19
+ @facet_field.paginator.items.any?
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetFieldNoLayoutComponent < ::ViewComponent::Base
5
+ with_content_areas :label, :body
6
+
7
+ def initialize(**); end
8
+
9
+ def call
10
+ body
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetItemComponent < ::ViewComponent::Base
5
+ with_collection_parameter :facet_item
6
+
7
+ def initialize(facet_item:, wrapping_element: 'li', suppress_link: false)
8
+ @facet_item = facet_item
9
+ @label = facet_item.label
10
+ @hits = facet_item.hits
11
+ @href = facet_item.href
12
+ @selected = facet_item.selected?
13
+ @wrapping_element = wrapping_element
14
+ @suppress_link = suppress_link
15
+ end
16
+
17
+ def call
18
+ # if the downstream app has overridden the helper methods we'd usually call,
19
+ # use the helpers to preserve compatibility
20
+ content = if overridden_helper_methods?
21
+ content_from_legacy_view_helper
22
+ elsif @selected
23
+ render_selected_facet_value
24
+ else
25
+ render_facet_value
26
+ end
27
+
28
+ return if content.blank?
29
+ return content unless @wrapping_element
30
+
31
+ content_tag @wrapping_element, content
32
+ end
33
+
34
+ # This is a little shim to let us call the render methods below outside the
35
+ # usual component rendering cycle (for backward compatibility)
36
+ # @private
37
+ # @deprecated
38
+ def with_view_context(view_context)
39
+ @view_context = view_context
40
+ self
41
+ end
42
+
43
+ # Check if the downstream application has overridden these methods
44
+ # @deprecated
45
+ # @private
46
+ def overridden_helper_methods?
47
+ return false if explicit_component_configuration?
48
+
49
+ @view_context.method(:render_facet_item).owner != Blacklight::FacetsHelperBehavior ||
50
+ @view_context.method(:render_facet_value).owner != Blacklight::FacetsHelperBehavior ||
51
+ @view_context.method(:render_selected_facet_value).owner != Blacklight::FacetsHelperBehavior
52
+ end
53
+
54
+ # Call out to the helper method equivalent of this component
55
+ # @deprecated
56
+ # @private
57
+ def content_from_legacy_view_helper
58
+ Deprecation.warn('Calling out to the #render_facet_item helper for backwards compatibility.')
59
+ Deprecation.silence(Blacklight::FacetsHelperBehavior) do
60
+ @view_context.render_facet_item(@facet_item.facet_field, @facet_item.facet_item)
61
+ end
62
+ end
63
+
64
+ ##
65
+ # Standard display of a facet value in a list. Used in both _facets sidebar
66
+ # partial and catalog/facet expanded list. Will output facet value name as
67
+ # a link to add that to your restrictions, with count in parens.
68
+ #
69
+ # @param [Blacklight::Solr::Response::Facets::FacetField] facet_field
70
+ # @param [Blacklight::Solr::Response::Facets::FacetItem] item
71
+ # @param [Hash] options
72
+ # @option options [Boolean] :suppress_link display the facet, but don't link to it
73
+ # @return [String]
74
+ # @private
75
+ def render_facet_value
76
+ content_tag(:span, class: "facet-label") do
77
+ link_to_unless(@suppress_link, @label, @href, class: "facet-select")
78
+ end + render_facet_count
79
+ end
80
+
81
+ ##
82
+ # Standard display of a SELECTED facet value (e.g. without a link and with a remove button)
83
+ # @see #render_facet_value
84
+ # @param [Blacklight::Solr::Response::Facets::FacetField] facet_field
85
+ # @param [String] item
86
+ # @private
87
+ def render_selected_facet_value
88
+ content_tag(:span, class: "facet-label") do
89
+ content_tag(:span, @label, class: "selected") +
90
+ # remove link
91
+ link_to(@href, class: "remove") do
92
+ content_tag(:span, '✖', class: "remove-icon") +
93
+ content_tag(:span, '[remove]', class: 'sr-only')
94
+ end
95
+ end + render_facet_count(classes: ["selected"])
96
+ end
97
+
98
+ ##
99
+ # Renders a count value for facet limits. Can be over-ridden locally
100
+ # to change style. And can be called by plugins to get consistent display.
101
+ #
102
+ # @param [Integer] num number of facet results
103
+ # @param [Hash] options
104
+ # @option options [Array<String>] an array of classes to add to count span.
105
+ # @return [String]
106
+ # @private
107
+ def render_facet_count(options = {})
108
+ return @view_context.render_facet_count(@hits, options) unless @view_context.method(:render_facet_count).owner == Blacklight::FacetsHelperBehavior || explicit_component_configuration?
109
+
110
+ classes = (options[:classes] || []) << "facet-count"
111
+ content_tag("span", t('blacklight.search.facets.count', number: number_with_delimiter(@hits)), class: classes)
112
+ end
113
+
114
+ private
115
+
116
+ def explicit_component_configuration?
117
+ @facet_item.facet_config.item_component.present?
118
+ end
119
+ end
120
+ end