Class: Blacklight::DocumentComponent

Inherits:
Component
  • Object
show all
Defined in:
app/components/blacklight/document_component.rb

Constant Summary

Constants inherited from Component

Component::EXCLUDE_VARIABLES

Instance Method Summary collapse

Methods inherited from Component

compiler, config, #inspect

Constructor Details

#initialize(document: nil, presenter: nil, id: nil, classes: [], component: :article, title_component: nil, counter: nil, document_counter: nil, counter_offset: 0, show: false) ⇒ DocumentComponent

rubocop:disable Metrics/ParameterLists

Parameters:

  • document (Blacklight::Document) (defaults to: nil)
  • presenter (Blacklight::DocumentPresenter) (defaults to: nil)
  • id (String) (defaults to: nil)

    HTML id for the root element

  • classes (Array, String) (defaults to: [])

    additional HTML classes for the root element

  • component (Symbol, String) (defaults to: :article)

    HTML tag type to use for the root element

  • title_component (Symbol, String) (defaults to: nil)

    HTML tag type to use for the title element

  • counter (Number, nil) (defaults to: nil)

    a pre-computed counter for the position of this document in a search result set

  • document_counter (Number, nil) (defaults to: nil)

    alternatively, the document’s position in a collection and,

  • counter_offset (Number) (defaults to: 0)

    with ‘document_counter`, the offset of the start of that collection counter to the overall result set

  • show (Boolean) (defaults to: false)

    are we showing only a single document (vs a list of search results); used for backwards-compatibility



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'app/components/blacklight/document_component.rb', line 72

def initialize(document: nil, presenter: nil,
               id: nil, classes: [], component: :article, title_component: nil,
               counter: nil, document_counter: nil, counter_offset: 0,
               show: false)
  if presenter.nil? && document.nil?
    raise ArgumentError, 'missing keyword: :document or :presenter'
  end

  @document = document || presenter&.document
  @presenter = presenter

  @component = component
  @title_component = title_component
  @id = id || ('document' if show)
  @classes = classes

  @document_counter = document_counter
  @counter = counter
  @counter ||= document_counter + 1 + counter_offset if document_counter.present?

  @show = show
end

Instance Method Details

#before_renderObject



106
107
108
109
110
111
# File 'app/components/blacklight/document_component.rb', line 106

def before_render
  set_slot(:title, nil) unless title
  set_slot(:thumbnail, nil) unless thumbnail || show?
  set_slot(:metadata, nil, fields: presenter.field_presenters) unless 
  set_slot(:embed, nil) unless embed
end

#classesObject

HTML classes to apply to the root element



97
98
99
100
101
102
103
104
# File 'app/components/blacklight/document_component.rb', line 97

def classes
  [
    @classes,
    helpers.render_document_class(@document),
    'document',
    ("document-position-#{@counter}" if @counter)
  ].compact.flatten
end