Class: Blacklight::FacetItemComponent

Inherits:
Component
  • Object
show all
Extended by:
Deprecation
Defined in:
app/components/blacklight/facet_item_component.rb

Instance Method Summary collapse

Methods inherited from Component

compiler

Constructor Details

#initialize(facet_item:, wrapping_element: 'li', suppress_link: false) ⇒ FacetItemComponent

Returns a new instance of FacetItemComponent.



9
10
11
12
13
14
15
16
17
# File 'app/components/blacklight/facet_item_component.rb', line 9

def initialize(facet_item:, wrapping_element: 'li', suppress_link: false)
  @facet_item = facet_item
  @label = facet_item.label
  @hits = facet_item.hits
  @href = facet_item.href
  @selected = facet_item.selected?
  @wrapping_element = wrapping_element
  @suppress_link = suppress_link
end

Instance Method Details

#callObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/components/blacklight/facet_item_component.rb', line 19

def call
  # if the downstream app has overridden the helper methods we'd usually call,
  # use the helpers to preserve compatibility
  content = if overridden_helper_methods?
              content_from_legacy_view_helper
            elsif @selected
              render_selected_facet_value
            else
              render_facet_value
            end

  return '' if content.blank?
  return content unless @wrapping_element

   @wrapping_element, content
end

#content_from_legacy_view_helperObject

Deprecated.

Call out to the helper method equivalent of this component



59
60
61
62
63
64
# File 'app/components/blacklight/facet_item_component.rb', line 59

def content_from_legacy_view_helper
  Deprecation.warn(self.class, 'Calling out to the #render_facet_item helper for backwards compatibility.')
  Deprecation.silence(Blacklight::FacetsHelperBehavior) do
    @view_context.render_facet_item(@facet_item.facet_field, @facet_item.facet_item)
  end
end

#overridden_helper_methods?Boolean

Deprecated.

Check if the downstream application has overridden these methods

Returns:

  • (Boolean)


48
49
50
51
52
53
54
# File 'app/components/blacklight/facet_item_component.rb', line 48

def overridden_helper_methods?
  return false if explicit_component_configuration?

  @view_context.method(:render_facet_item).owner != Blacklight::FacetsHelperBehavior ||
    @view_context.method(:render_facet_value).owner != Blacklight::FacetsHelperBehavior ||
    @view_context.method(:render_selected_facet_value).owner != Blacklight::FacetsHelperBehavior
end

#render_facet_count(options = {}) ⇒ String

Renders a count value for facet limits. Can be over-ridden locally to change style. And can be called by plugins to get consistent display.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • an (Array<String>)

    array of classes to add to count span.

Returns:

  • (String)


103
104
105
106
107
108
109
110
# File 'app/components/blacklight/facet_item_component.rb', line 103

def render_facet_count(options = {})
  return helpers.render_facet_count(@hits, options) unless helpers.method(:render_facet_count).owner == Blacklight::FacetsHelperBehavior || explicit_component_configuration?

  return '' if @hits.blank?

  classes = (options[:classes] || []) << "facet-count"
  tag.span(t('blacklight.search.facets.count', number: number_with_delimiter(@hits)), class: classes)
end

#render_facet_valueString

Standard display of a facet value in a list. Used in both _facets sidebar partial and catalog/facet expanded list. Will output facet value name as a link to add that to your restrictions, with count in parens.

Returns:

  • (String)


73
74
75
76
77
# File 'app/components/blacklight/facet_item_component.rb', line 73

def render_facet_value
  tag.span(class: "facet-label") do
    link_to_unless(@suppress_link, @label, @href, class: "facet-select", rel: "nofollow")
  end + render_facet_count
end

#render_selected_facet_valueObject

Standard display of a SELECTED facet value (e.g. without a link and with a remove button)



84
85
86
87
88
89
90
91
92
93
# File 'app/components/blacklight/facet_item_component.rb', line 84

def render_selected_facet_value
  tag.span(class: "facet-label") do
    tag.span(@label, class: "selected") +
      # remove link
      link_to(@href, class: "remove", rel: "nofollow") do
        tag.span('', class: "remove-icon", aria: { hidden: true }) +
          tag.span(helpers.t(:'blacklight.search.facets.selected.remove'), class: 'sr-only visually-hidden')
      end
  end + render_facet_count(classes: ["selected"])
end

#with_view_context(view_context) ⇒ Object

Deprecated.

This is a little shim to let us call the render methods below outside the usual component rendering cycle (for backward compatibility)



40
41
42
43
# File 'app/components/blacklight/facet_item_component.rb', line 40

def with_view_context(view_context)
  @view_context = view_context
  self
end