blacklight 7.3.0 → 7.4.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 +4 -4
 - data/VERSION +1 -1
 - data/app/helpers/blacklight/blacklight_helper_behavior.rb +2 -1
 - data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -3
 - data/app/helpers/blacklight/configuration_helper_behavior.rb +3 -2
 - data/app/helpers/blacklight/layout_helper_behavior.rb +7 -0
 - data/app/helpers/blacklight/render_partials_helper_behavior.rb +1 -9
 - data/app/helpers/blacklight/url_helper_behavior.rb +2 -2
 - data/app/presenters/blacklight/document_presenter.rb +74 -4
 - data/app/presenters/blacklight/field_presenter.rb +22 -11
 - data/app/presenters/blacklight/index_presenter.rb +9 -50
 - data/app/presenters/blacklight/show_presenter.rb +6 -53
 - data/app/presenters/blacklight/thumbnail_presenter.rb +14 -4
 - data/app/services/blacklight/field_retriever.rb +7 -1
 - data/app/views/catalog/_document.atom.builder +1 -1
 - data/app/views/catalog/_document.rss.builder +2 -2
 - data/app/views/catalog/_facet_layout.html.erb +3 -3
 - data/app/views/catalog/_opensearch_response_metadata.html.erb +3 -3
 - data/app/views/catalog/_search_results.html.erb +1 -1
 - data/app/views/catalog/index.json.jbuilder +2 -3
 - data/app/views/catalog/show.json.jbuilder +3 -3
 - data/app/views/layouts/blacklight/base.html.erb +2 -2
 - data/config/i18n-tasks.yml +1 -1
 - data/config/locales/blacklight.ar.yml +250 -0
 - data/config/locales/blacklight.hu.yml +8 -0
 - data/config/locales/blacklight.nl.yml +8 -0
 - data/config/locales/blacklight.sq.yml +9 -0
 - data/config/locales/blacklight.zh.yml +8 -0
 - data/lib/blacklight/configuration.rb +16 -4
 - data/spec/features/search_spec.rb +5 -0
 - data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +4 -0
 - data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +10 -0
 - data/spec/helpers/blacklight/url_helper_behavior_spec.rb +5 -5
 - data/spec/helpers/catalog_helper_spec.rb +9 -0
 - data/spec/models/blacklight/configuration_spec.rb +32 -10
 - data/spec/presenters/blacklight/document_presenter_spec.rb +9 -14
 - data/spec/presenters/blacklight/show_presenter_spec.rb +23 -6
 - data/spec/presenters/thumbnail_presenter_spec.rb +1 -2
 - data/spec/views/catalog/_facet_layout.html.erb_spec.rb +3 -2
 - data/spec/views/catalog/index.html.erb_spec.rb +1 -1
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 05d5576219e73622cf05af970590c5492d1e7f18a2b1a3654fb26de71d424b64
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 94a2e2b0b64d07b4fe0083df1e7658130c6d9dfba7c3acae4ee5b930a1ceb74c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9d8fbf65bfad8b2d4dfac62bb3048dfdebca06f4752b6b66bfbfce218afa1b5deef6b7865896056760c1f7265e7d5968ffa3d52511ce49d54004a118191261b9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f1921d4f36915aa5761788ae8a80ddb1836777c2a6db8613d01987930af30ac8d2a273ccea62ecdbcb502c3716747a4ea551a64cc02b3cda7e1ade71067ddbb2
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            7. 
     | 
| 
      
 1 
     | 
    
         
            +
            7.4.0
         
     | 
| 
         @@ -50,8 +50,9 @@ module Blacklight::BlacklightHelperBehavior 
     | 
|
| 
       50 
50 
     | 
    
         
             
              # Render OpenSearch headers for this search
         
     | 
| 
       51 
51 
     | 
    
         
             
              # @return [String]
         
     | 
| 
       52 
52 
     | 
    
         
             
              def render_opensearch_response_metadata
         
     | 
| 
       53 
     | 
    
         
            -
                render partial: 'catalog/opensearch_response_metadata'
         
     | 
| 
      
 53 
     | 
    
         
            +
                render partial: 'catalog/opensearch_response_metadata', locals: { response: @response }
         
     | 
| 
       54 
54 
     | 
    
         
             
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
              deprecation_deprecate render_opensearch_response_metadata: 'Use `render "catalog/opensearch_response_metadata"\' instead'
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
              ##
         
     | 
| 
       57 
58 
     | 
    
         
             
              # Render classes for the <body> element
         
     | 
| 
         @@ -45,7 +45,7 @@ module Blacklight::CatalogHelperBehavior 
     | 
|
| 
       45 
45 
     | 
    
         
             
                entry_name = if entry_name
         
     | 
| 
       46 
46 
     | 
    
         
             
                               entry_name.pluralize(collection.size, I18n.locale)
         
     | 
| 
       47 
47 
     | 
    
         
             
                             else
         
     | 
| 
       48 
     | 
    
         
            -
                               collection.entry_name(count: collection.size).downcase
         
     | 
| 
      
 48 
     | 
    
         
            +
                               collection.entry_name(count: collection.size).to_s.downcase
         
     | 
| 
       49 
49 
     | 
    
         
             
                             end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
                entry_name = entry_name.pluralize unless collection.total_count == 1
         
     | 
| 
         @@ -134,8 +134,7 @@ module Blacklight::CatalogHelperBehavior 
     | 
|
| 
       134 
134 
     | 
    
         
             
              #
         
     | 
| 
       135 
135 
     | 
    
         
             
              # @return [String]
         
     | 
| 
       136 
136 
     | 
    
         
             
              def render_document_class(document = @document)
         
     | 
| 
       137 
     | 
    
         
            -
                types = document 
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
      
 137 
     | 
    
         
            +
                types = presenter(document).display_type
         
     | 
| 
       139 
138 
     | 
    
         
             
                return if types.blank?
         
     | 
| 
       140 
139 
     | 
    
         | 
| 
       141 
140 
     | 
    
         
             
                Array(types).compact.map do |t|
         
     | 
| 
         @@ -55,7 +55,7 @@ module Blacklight::ConfigurationHelperBehavior 
     | 
|
| 
       55 
55 
     | 
    
         
             
              ##
         
     | 
| 
       56 
56 
     | 
    
         
             
              # Look up the label for the index field
         
     | 
| 
       57 
57 
     | 
    
         
             
              def index_field_label document, field
         
     | 
| 
       58 
     | 
    
         
            -
                field_config = blacklight_config.index_fields_for(document)[field]
         
     | 
| 
      
 58 
     | 
    
         
            +
                field_config = blacklight_config.index_fields_for(index_presenter(document).display_type)[field]
         
     | 
| 
       59 
59 
     | 
    
         
             
                field_config ||= Blacklight::Configuration::NullField.new(key: field)
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                field_config.display_label('index')
         
     | 
| 
         @@ -64,7 +64,7 @@ module Blacklight::ConfigurationHelperBehavior 
     | 
|
| 
       64 
64 
     | 
    
         
             
              ##
         
     | 
| 
       65 
65 
     | 
    
         
             
              # Look up the label for the show field
         
     | 
| 
       66 
66 
     | 
    
         
             
              def document_show_field_label document, field
         
     | 
| 
       67 
     | 
    
         
            -
                field_config = blacklight_config.show_fields_for(document)[field]
         
     | 
| 
      
 67 
     | 
    
         
            +
                field_config = blacklight_config.show_fields_for(show_presenter(document).display_type)[field]
         
     | 
| 
       68 
68 
     | 
    
         
             
                field_config ||= Blacklight::Configuration::NullField.new(key: field)
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
70 
     | 
    
         
             
                field_config.display_label('show')
         
     | 
| 
         @@ -166,6 +166,7 @@ module Blacklight::ConfigurationHelperBehavior 
     | 
|
| 
       166 
166 
     | 
    
         | 
| 
       167 
167 
     | 
    
         
             
                field
         
     | 
| 
       168 
168 
     | 
    
         
             
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
              deprecation_deprecate document_show_link_field: 'Deprecated without replacement'
         
     | 
| 
       169 
170 
     | 
    
         | 
| 
       170 
171 
     | 
    
         
             
              ##
         
     | 
| 
       171 
172 
     | 
    
         
             
              # Default sort field
         
     | 
| 
         @@ -11,6 +11,13 @@ module Blacklight 
     | 
|
| 
       11 
11 
     | 
    
         
             
                  "#{main_content_classes} show-document"
         
     | 
| 
       12 
12 
     | 
    
         
             
                end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
                ##
         
     | 
| 
      
 15 
     | 
    
         
            +
                # Attributes to add to the <html> tag (e.g. lang and dir)
         
     | 
| 
      
 16 
     | 
    
         
            +
                # @return [Hash]
         
     | 
| 
      
 17 
     | 
    
         
            +
                def html_tag_attributes
         
     | 
| 
      
 18 
     | 
    
         
            +
                  { lang: I18n.locale }
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       14 
21 
     | 
    
         
             
                ##
         
     | 
| 
       15 
22 
     | 
    
         
             
                # Classes added to a document's sidebar div
         
     | 
| 
       16 
23 
     | 
    
         
             
                # @return [String]
         
     | 
| 
         @@ -115,15 +115,7 @@ module Blacklight::RenderPartialsHelperBehavior 
     | 
|
| 
       115 
115 
     | 
    
         
             
              # @param [Symbol] base_name base name for the partial
         
     | 
| 
       116 
116 
     | 
    
         
             
              # @return [String]
         
     | 
| 
       117 
117 
     | 
    
         
             
              def document_partial_name(document, base_name = nil)
         
     | 
| 
       118 
     | 
    
         
            -
                 
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                display_type = if base_name && view_config.key?(:"#{base_name}_display_type_field")
         
     | 
| 
       121 
     | 
    
         
            -
                                 document[view_config[:"#{base_name}_display_type_field"]]
         
     | 
| 
       122 
     | 
    
         
            -
                               end
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                display_type ||= document[view_config.display_type_field]
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                display_type ||= 'default'
         
     | 
| 
      
 118 
     | 
    
         
            +
                display_type = show_presenter(document).display_type(base_name, default: 'default')
         
     | 
| 
       127 
119 
     | 
    
         | 
| 
       128 
120 
     | 
    
         
             
                type_field_to_partial_name(document, display_type)
         
     | 
| 
       129 
121 
     | 
    
         
             
              end
         
     | 
| 
         @@ -21,10 +21,10 @@ module Blacklight::UrlHelperBehavior 
     | 
|
| 
       21 
21 
     | 
    
         
             
              def link_to_document(doc, field_or_opts = nil, opts = { counter: nil })
         
     | 
| 
       22 
22 
     | 
    
         
             
                label = case field_or_opts
         
     | 
| 
       23 
23 
     | 
    
         
             
                        when NilClass
         
     | 
| 
       24 
     | 
    
         
            -
                          index_presenter(doc). 
     | 
| 
      
 24 
     | 
    
         
            +
                          index_presenter(doc).heading
         
     | 
| 
       25 
25 
     | 
    
         
             
                        when Hash
         
     | 
| 
       26 
26 
     | 
    
         
             
                          opts = field_or_opts
         
     | 
| 
       27 
     | 
    
         
            -
                          index_presenter(doc). 
     | 
| 
      
 27 
     | 
    
         
            +
                          index_presenter(doc).heading
         
     | 
| 
       28 
28 
     | 
    
         
             
                        when Proc, Symbol
         
     | 
| 
       29 
29 
     | 
    
         
             
                          Deprecation.warn(self, "passing a #{field_or_opts.class} to link_to_document is deprecated and will be removed in Blacklight 8")
         
     | 
| 
       30 
30 
     | 
    
         
             
                          Deprecation.silence(Blacklight::IndexPresenter) do
         
     | 
| 
         @@ -5,6 +5,18 @@ module Blacklight 
     | 
|
| 
       5 
5 
     | 
    
         
             
              class DocumentPresenter
         
     | 
| 
       6 
6 
     | 
    
         
             
                attr_reader :document, :configuration, :view_context
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
                class_attribute :thumbnail_presenter
         
     | 
| 
      
 9 
     | 
    
         
            +
                self.thumbnail_presenter = ThumbnailPresenter
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                # @param [SolrDocument] document
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @param [ActionView::Base] view_context scope for linking and generating urls
         
     | 
| 
      
 13 
     | 
    
         
            +
                # @param [Blacklight::Configuration] configuration
         
     | 
| 
      
 14 
     | 
    
         
            +
                def initialize(document, view_context, configuration = view_context.blacklight_config)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @document = document
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @view_context = view_context
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @configuration = configuration
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       8 
20 
     | 
    
         
             
                # @return [Hash<String,Configuration::Field>]  all the fields for this index view that should be rendered
         
     | 
| 
       9 
21 
     | 
    
         
             
                def fields_to_render
         
     | 
| 
       10 
22 
     | 
    
         
             
                  fields.select do |_name, field_config|
         
     | 
| 
         @@ -14,6 +26,46 @@ module Blacklight 
     | 
|
| 
       14 
26 
     | 
    
         
             
                  end
         
     | 
| 
       15 
27 
     | 
    
         
             
                end
         
     | 
| 
       16 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                ##
         
     | 
| 
      
 30 
     | 
    
         
            +
                # Get the value of the document's "title" field, or a placeholder
         
     | 
| 
      
 31 
     | 
    
         
            +
                # value (if empty)
         
     | 
| 
      
 32 
     | 
    
         
            +
                #
         
     | 
| 
      
 33 
     | 
    
         
            +
                # @return [String]
         
     | 
| 
      
 34 
     | 
    
         
            +
                def heading
         
     | 
| 
      
 35 
     | 
    
         
            +
                  return field_values(view_config.title_field) if view_config.title_field.is_a? Blacklight::Configuration::Field
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  fields = Array.wrap(view_config.title_field) + [configuration.document_model.unique_key]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  f = fields.lazy.map { |field| field_config(field) }.detect { |field_config| retrieve_values(field_config).any? }
         
     | 
| 
      
 39 
     | 
    
         
            +
                  field_values(f, except_operations: [Rendering::HelperMethod])
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                def display_type(base_name = nil, default: nil)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  fields = []
         
     | 
| 
      
 44 
     | 
    
         
            +
                  fields += Array.wrap(view_config[:"#{base_name}_display_type_field"]) if base_name && view_config.key?(:"#{base_name}_display_type_field")
         
     | 
| 
      
 45 
     | 
    
         
            +
                  fields += Array.wrap(view_config.display_type_field)
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  display_type = fields.lazy.map { |field| retrieve_values(field_config(field)) }.detect(&:any?)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  display_type ||= Array(default) if default
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  display_type
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                ##
         
     | 
| 
      
 54 
     | 
    
         
            +
                # Render the field label for a document
         
     | 
| 
      
 55 
     | 
    
         
            +
                #
         
     | 
| 
      
 56 
     | 
    
         
            +
                # Allow an extention point where information in the document
         
     | 
| 
      
 57 
     | 
    
         
            +
                # may drive the value of the field
         
     | 
| 
      
 58 
     | 
    
         
            +
                # @param [Configuration::Field] field
         
     | 
| 
      
 59 
     | 
    
         
            +
                # @param [Hash] options
         
     | 
| 
      
 60 
     | 
    
         
            +
                # @option options [String] :value
         
     | 
| 
      
 61 
     | 
    
         
            +
                def field_value field, options = {}
         
     | 
| 
      
 62 
     | 
    
         
            +
                  field_values(field, options)
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def thumbnail
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @thumbnail ||= thumbnail_presenter.new(document, view_context, view_config)
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       17 
69 
     | 
    
         
             
                private
         
     | 
| 
       18 
70 
     | 
    
         | 
| 
       19 
71 
     | 
    
         
             
                ##
         
     | 
| 
         @@ -29,10 +81,28 @@ module Blacklight 
     | 
|
| 
       29 
81 
     | 
    
         
             
                # the given solr field
         
     | 
| 
       30 
82 
     | 
    
         
             
                # @param [Blacklight::Configuration::Field] field_config
         
     | 
| 
       31 
83 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
       32 
     | 
    
         
            -
                def has_value? 
     | 
| 
       33 
     | 
    
         
            -
                   
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 84 
     | 
    
         
            +
                def has_value?(field_config)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  retrieve_values(field_config).present?
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                ##
         
     | 
| 
      
 89 
     | 
    
         
            +
                # Get the value for a document's field, and prepare to render it.
         
     | 
| 
      
 90 
     | 
    
         
            +
                # - highlight_field
         
     | 
| 
      
 91 
     | 
    
         
            +
                # - accessor
         
     | 
| 
      
 92 
     | 
    
         
            +
                # - solr field
         
     | 
| 
      
 93 
     | 
    
         
            +
                #
         
     | 
| 
      
 94 
     | 
    
         
            +
                # Rendering:
         
     | 
| 
      
 95 
     | 
    
         
            +
                #   - helper_method
         
     | 
| 
      
 96 
     | 
    
         
            +
                #   - link_to_facet
         
     | 
| 
      
 97 
     | 
    
         
            +
                # @param [Blacklight::Configuration::Field] field_config solr field configuration
         
     | 
| 
      
 98 
     | 
    
         
            +
                # @param [Hash] options additional options to pass to the rendering helpers
         
     | 
| 
      
 99 
     | 
    
         
            +
                def field_values(field_config, options = {})
         
     | 
| 
      
 100 
     | 
    
         
            +
                  options[:values] ||= retrieve_values(field_config) unless options.key? :value
         
     | 
| 
      
 101 
     | 
    
         
            +
                  FieldPresenter.new(view_context, document, field_config, options).render
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                def retrieve_values(field_config)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  FieldRetriever.new(document, field_config).fetch
         
     | 
| 
       36 
106 
     | 
    
         
             
                end
         
     | 
| 
       37 
107 
     | 
    
         
             
              end
         
     | 
| 
       38 
108 
     | 
    
         
             
            end
         
     | 
| 
         @@ -7,29 +7,40 @@ module Blacklight 
     | 
|
| 
       7 
7 
     | 
    
         
             
                # @param document [SolrDocument] the document
         
     | 
| 
       8 
8 
     | 
    
         
             
                # @param field_config [Blacklight::Configuration::Field] the field's configuration
         
     | 
| 
       9 
9 
     | 
    
         
             
                # @param options [Hash]
         
     | 
| 
       10 
     | 
    
         
            -
                # @option options [Object] : 
     | 
| 
       11 
     | 
    
         
            -
                # 
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 10 
     | 
    
         
            +
                # @option options [Object] :values
         
     | 
| 
      
 11 
     | 
    
         
            +
                # @option options [Array] :except_operations
         
     | 
| 
      
 12 
     | 
    
         
            +
                # @option options [Object] :value
         
     | 
| 
      
 13 
     | 
    
         
            +
                # @option options [Array] :steps
         
     | 
| 
      
 14 
     | 
    
         
            +
                def initialize(controller, document, field_config, options = {})
         
     | 
| 
       13 
15 
     | 
    
         
             
                  @controller = controller
         
     | 
| 
       14 
16 
     | 
    
         
             
                  @document = document
         
     | 
| 
       15 
17 
     | 
    
         
             
                  @field_config = field_config
         
     | 
| 
       16 
18 
     | 
    
         
             
                  @options = options
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  @values = if options.key?(:value)
         
     | 
| 
      
 21 
     | 
    
         
            +
                              Array.wrap(options[:value])
         
     | 
| 
      
 22 
     | 
    
         
            +
                            else
         
     | 
| 
      
 23 
     | 
    
         
            +
                              options[:values]
         
     | 
| 
      
 24 
     | 
    
         
            +
                            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  @except_operations = options[:except_operations] || []
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # Implicitly prevent helper methods from drawing when drawing the label for the document
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @except_operations += [Rendering::HelperMethod] if options.key? :value
         
     | 
| 
       17 
29 
     | 
    
         
             
                end
         
     | 
| 
       18 
30 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                attr_reader :controller, :document, :field_config, :options
         
     | 
| 
      
 31 
     | 
    
         
            +
                attr_reader :controller, :document, :field_config, :values, :except_operations, :options
         
     | 
| 
       20 
32 
     | 
    
         | 
| 
       21 
33 
     | 
    
         
             
                def render
         
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  values = Array.wrap(options[:value])
         
     | 
| 
       25 
     | 
    
         
            -
                  # Prevents helper methods from drawing.
         
     | 
| 
       26 
     | 
    
         
            -
                  steps = Rendering::Pipeline.operations - [Rendering::HelperMethod]
         
     | 
| 
       27 
     | 
    
         
            -
                  Rendering::Pipeline.new(values, field_config, document, controller, steps, options).render
         
     | 
| 
      
 34 
     | 
    
         
            +
                  Rendering::Pipeline.new(values || retrieve_values, field_config, document, controller, pipeline_steps, options).render
         
     | 
| 
       28 
35 
     | 
    
         
             
                end
         
     | 
| 
       29 
36 
     | 
    
         | 
| 
       30 
37 
     | 
    
         
             
                private
         
     | 
| 
       31 
38 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                def  
     | 
| 
      
 39 
     | 
    
         
            +
                def pipeline_steps
         
     | 
| 
      
 40 
     | 
    
         
            +
                  (options[:steps] || Rendering::Pipeline.operations) - except_operations
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def retrieve_values(field_config)
         
     | 
| 
       33 
44 
     | 
    
         
             
                  FieldRetriever.new(document, field_config).fetch
         
     | 
| 
       34 
45 
     | 
    
         
             
                end
         
     | 
| 
       35 
46 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1,34 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         
             
            module Blacklight
         
     | 
| 
       3 
3 
     | 
    
         
             
              class IndexPresenter < DocumentPresenter
         
     | 
| 
       4 
     | 
    
         
            -
                class_attribute :thumbnail_presenter
         
     | 
| 
       5 
     | 
    
         
            -
                self.thumbnail_presenter = ThumbnailPresenter
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                attr_reader :view_config
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                # @param [SolrDocument] document
         
     | 
| 
       10 
     | 
    
         
            -
                # @param [ActionView::Base] view_context scope for linking and generating urls
         
     | 
| 
       11 
     | 
    
         
            -
                # @param [Blacklight::Configuration] configuration
         
     | 
| 
       12 
     | 
    
         
            -
                def initialize(document, view_context, configuration = view_context.blacklight_config)
         
     | 
| 
       13 
     | 
    
         
            -
                  @document = document
         
     | 
| 
       14 
     | 
    
         
            -
                  @view_context = view_context
         
     | 
| 
       15 
     | 
    
         
            -
                  @configuration = configuration
         
     | 
| 
       16 
     | 
    
         
            -
                  @view_config = configuration.view_config(view_context.document_index_view_type)
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
4 
     | 
    
         
             
                ##
         
     | 
| 
       20 
5 
     | 
    
         
             
                # Render the document index heading. This is used when making a link to a
         
     | 
| 
       21 
6 
     | 
    
         
             
                # document, where we don't want any HTML markup added from the pipeline.
         
     | 
| 
       22 
7 
     | 
    
         
             
                #
         
     | 
| 
       23 
8 
     | 
    
         
             
                # @param [Symbol, Proc, String] field_or_string_or_proc Render the given field or evaluate the proc or render the given string
         
     | 
| 
       24 
9 
     | 
    
         
             
                # @param [Hash] opts
         
     | 
| 
       25 
     | 
    
         
            -
                # TODO: the default field should be `document_show_link_field(doc)'
         
     | 
| 
       26 
10 
     | 
    
         
             
                def label(field_or_string_or_proc, opts = {})
         
     | 
| 
       27 
11 
     | 
    
         
             
                  config = Configuration::NullField.new
         
     | 
| 
       28 
12 
     | 
    
         
             
                  value = case field_or_string_or_proc
         
     | 
| 
       29 
13 
     | 
    
         
             
                            when Symbol
         
     | 
| 
       30 
14 
     | 
    
         
             
                              config = field_config(field_or_string_or_proc)
         
     | 
| 
       31 
     | 
    
         
            -
                               
     | 
| 
      
 15 
     | 
    
         
            +
                              retrieve_values(config)
         
     | 
| 
       32 
16 
     | 
    
         
             
                            when Proc
         
     | 
| 
       33 
17 
     | 
    
         
             
                              Deprecation.warn(self, "calling IndexPresenter.label with a Proc is deprecated. " \
         
     | 
| 
       34 
18 
     | 
    
         
             
                                                     "First argument must be a symbol. This will be removed in Blacklight 8")
         
     | 
| 
         @@ -39,46 +23,21 @@ module Blacklight 
     | 
|
| 
       39 
23 
     | 
    
         
             
                              field_or_string_or_proc
         
     | 
| 
       40 
24 
     | 
    
         
             
                          end
         
     | 
| 
       41 
25 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                  value  
     | 
| 
       43 
     | 
    
         
            -
                  field_values(config,  
     | 
| 
      
 26 
     | 
    
         
            +
                  value = document.id if value.blank?
         
     | 
| 
      
 27 
     | 
    
         
            +
                  field_values(config, values: Array.wrap(value), except_operations: [Rendering::HelperMethod])
         
     | 
| 
       44 
28 
     | 
    
         
             
                end
         
     | 
| 
       45 
29 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                 
     | 
| 
       47 
     | 
    
         
            -
                # Render the index field label for a document
         
     | 
| 
       48 
     | 
    
         
            -
                #
         
     | 
| 
       49 
     | 
    
         
            -
                # Allow an extention point where information in the document
         
     | 
| 
       50 
     | 
    
         
            -
                # may drive the value of the field
         
     | 
| 
       51 
     | 
    
         
            -
                # @param [Configuration::Field] field
         
     | 
| 
       52 
     | 
    
         
            -
                # @param [Hash] options
         
     | 
| 
       53 
     | 
    
         
            -
                # @option options [String] :value
         
     | 
| 
       54 
     | 
    
         
            -
                def field_value field, options = {}
         
     | 
| 
       55 
     | 
    
         
            -
                  field_values(field, options)
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                def thumbnail
         
     | 
| 
       59 
     | 
    
         
            -
                  @thumbnail ||= thumbnail_presenter.new(document, view_context, view_config)
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                deprecation_deprecate label: 'Use #heading'
         
     | 
| 
       61 
31 
     | 
    
         | 
| 
       62 
32 
     | 
    
         
             
                private
         
     | 
| 
       63 
33 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                 
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                  configuration.index_fields_for(document)
         
     | 
| 
      
 34 
     | 
    
         
            +
                def view_config
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @view_config ||= configuration.view_config(view_context.document_index_view_type)
         
     | 
| 
       67 
36 
     | 
    
         
             
                end
         
     | 
| 
       68 
37 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
                 
     | 
| 
       70 
     | 
    
         
            -
                 
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                # - accessor
         
     | 
| 
       73 
     | 
    
         
            -
                # - solr field
         
     | 
| 
       74 
     | 
    
         
            -
                #
         
     | 
| 
       75 
     | 
    
         
            -
                # Rendering:
         
     | 
| 
       76 
     | 
    
         
            -
                #   - helper_method
         
     | 
| 
       77 
     | 
    
         
            -
                #   - link_to_facet
         
     | 
| 
       78 
     | 
    
         
            -
                # @param [Blacklight::Configuration::Field] field_config solr field configuration
         
     | 
| 
       79 
     | 
    
         
            -
                # @param [Hash] options additional options to pass to the rendering helpers
         
     | 
| 
       80 
     | 
    
         
            -
                def field_values(field_config, options = {})
         
     | 
| 
       81 
     | 
    
         
            -
                  FieldPresenter.new(view_context, document, field_config, options).render
         
     | 
| 
      
 38 
     | 
    
         
            +
                # @return [Hash<String,Configuration::Field>] all the fields for this index view
         
     | 
| 
      
 39 
     | 
    
         
            +
                def fields
         
     | 
| 
      
 40 
     | 
    
         
            +
                  configuration.index_fields_for(display_type)
         
     | 
| 
       82 
41 
     | 
    
         
             
                end
         
     | 
| 
       83 
42 
     | 
    
         | 
| 
       84 
43 
     | 
    
         
             
                def field_config(field)
         
     | 
| 
         @@ -1,15 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         
             
            module Blacklight
         
     | 
| 
       3 
3 
     | 
    
         
             
              class ShowPresenter < DocumentPresenter
         
     | 
| 
       4 
     | 
    
         
            -
                # @param [SolrDocument] document
         
     | 
| 
       5 
     | 
    
         
            -
                # @param [ActionView::Base] view_context scope for linking and generating urls
         
     | 
| 
       6 
     | 
    
         
            -
                # @param [Blacklight::Configuration] configuration
         
     | 
| 
       7 
     | 
    
         
            -
                def initialize(document, view_context, configuration = view_context.blacklight_config)
         
     | 
| 
       8 
     | 
    
         
            -
                  @document = document
         
     | 
| 
       9 
     | 
    
         
            -
                  @view_context = view_context
         
     | 
| 
       10 
     | 
    
         
            -
                  @configuration = configuration
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
4 
     | 
    
         
             
                ##
         
     | 
| 
       14 
5 
     | 
    
         
             
                # Create <link rel="alternate"> links from a documents dynamically
         
     | 
| 
       15 
6 
     | 
    
         
             
                # provided export formats. Returns empty string if no links available.
         
     | 
| 
         @@ -29,60 +20,22 @@ module Blacklight 
     | 
|
| 
       29 
20 
     | 
    
         
             
                # @see #document_heading
         
     | 
| 
       30 
21 
     | 
    
         
             
                # @return [String]
         
     | 
| 
       31 
22 
     | 
    
         
             
                def html_title
         
     | 
| 
      
 23 
     | 
    
         
            +
                  return field_values(view_config.html_title_field) if view_config.html_title_field.is_a? Blacklight::Configuration::Field
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       32 
25 
     | 
    
         
             
                  if view_config.html_title_field
         
     | 
| 
       33 
     | 
    
         
            -
                    fields = Array.wrap(view_config.html_title_field)
         
     | 
| 
       34 
     | 
    
         
            -
                    f = fields. 
     | 
| 
       35 
     | 
    
         
            -
                    f 
     | 
| 
       36 
     | 
    
         
            -
                    field_values(field_config(f))
         
     | 
| 
      
 26 
     | 
    
         
            +
                    fields = Array.wrap(view_config.html_title_field) + [configuration.document_model.unique_key]
         
     | 
| 
      
 27 
     | 
    
         
            +
                    f = fields.lazy.map { |field| field_config(field) }.detect { |field_config| retrieve_values(field_config).any? }
         
     | 
| 
      
 28 
     | 
    
         
            +
                    field_values(f)
         
     | 
| 
       37 
29 
     | 
    
         
             
                  else
         
     | 
| 
       38 
30 
     | 
    
         
             
                    heading
         
     | 
| 
       39 
31 
     | 
    
         
             
                  end
         
     | 
| 
       40 
32 
     | 
    
         
             
                end
         
     | 
| 
       41 
33 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                ##
         
     | 
| 
       43 
     | 
    
         
            -
                # Get the value of the document's "title" field, or a placeholder
         
     | 
| 
       44 
     | 
    
         
            -
                # value (if empty)
         
     | 
| 
       45 
     | 
    
         
            -
                #
         
     | 
| 
       46 
     | 
    
         
            -
                # @return [String]
         
     | 
| 
       47 
     | 
    
         
            -
                def heading
         
     | 
| 
       48 
     | 
    
         
            -
                  fields = Array.wrap(view_config.title_field)
         
     | 
| 
       49 
     | 
    
         
            -
                  f = fields.detect { |field| document.has? field }
         
     | 
| 
       50 
     | 
    
         
            -
                  f ||= configuration.document_model.unique_key
         
     | 
| 
       51 
     | 
    
         
            -
                  field_values(field_config(f), value: document[f])
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                ##
         
     | 
| 
       55 
     | 
    
         
            -
                # Render the show field value for a document
         
     | 
| 
       56 
     | 
    
         
            -
                #
         
     | 
| 
       57 
     | 
    
         
            -
                # Allow an extention point where information in the document
         
     | 
| 
       58 
     | 
    
         
            -
                # may drive the value of the field
         
     | 
| 
       59 
     | 
    
         
            -
                # @param [Configuration::Field] field
         
     | 
| 
       60 
     | 
    
         
            -
                # @param [Hash] options
         
     | 
| 
       61 
     | 
    
         
            -
                # @option options [String] :value
         
     | 
| 
       62 
     | 
    
         
            -
                def field_value field, options = {}
         
     | 
| 
       63 
     | 
    
         
            -
                  field_values(field, options)
         
     | 
| 
       64 
     | 
    
         
            -
                end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
34 
     | 
    
         
             
                private
         
     | 
| 
       67 
35 
     | 
    
         | 
| 
       68 
36 
     | 
    
         
             
                # @return [Hash<String,Configuration::Field>]
         
     | 
| 
       69 
37 
     | 
    
         
             
                def fields
         
     | 
| 
       70 
     | 
    
         
            -
                  configuration.show_fields_for( 
     | 
| 
       71 
     | 
    
         
            -
                end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                ##
         
     | 
| 
       74 
     | 
    
         
            -
                # Get the value for a document's field, and prepare to render it.
         
     | 
| 
       75 
     | 
    
         
            -
                # - highlight_field
         
     | 
| 
       76 
     | 
    
         
            -
                # - accessor
         
     | 
| 
       77 
     | 
    
         
            -
                # - solr field
         
     | 
| 
       78 
     | 
    
         
            -
                #
         
     | 
| 
       79 
     | 
    
         
            -
                # Rendering:
         
     | 
| 
       80 
     | 
    
         
            -
                #   - helper_method
         
     | 
| 
       81 
     | 
    
         
            -
                #   - link_to_facet
         
     | 
| 
       82 
     | 
    
         
            -
                # @param [Blacklight::Configuration::Field] field_config solr field configuration
         
     | 
| 
       83 
     | 
    
         
            -
                # @param [Hash] options additional options to pass to the rendering helpers
         
     | 
| 
       84 
     | 
    
         
            -
                def field_values(field_config, options = {})
         
     | 
| 
       85 
     | 
    
         
            -
                  FieldPresenter.new(view_context, document, field_config, options).render
         
     | 
| 
      
 38 
     | 
    
         
            +
                  configuration.show_fields_for(display_type)
         
     | 
| 
       86 
39 
     | 
    
         
             
                end
         
     | 
| 
       87 
40 
     | 
    
         | 
| 
       88 
41 
     | 
    
         
             
                def view_config
         
     | 
| 
         @@ -20,7 +20,7 @@ module Blacklight 
     | 
|
| 
       20 
20 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
       21 
21 
     | 
    
         
             
                def exists?
         
     | 
| 
       22 
22 
     | 
    
         
             
                  thumbnail_method.present? ||
         
     | 
| 
       23 
     | 
    
         
            -
                    (thumbnail_field && thumbnail_value_from_document 
     | 
| 
      
 23 
     | 
    
         
            +
                    (thumbnail_field && thumbnail_value_from_document.present?) ||
         
     | 
| 
       24 
24 
     | 
    
         
             
                    default_thumbnail.present?
         
     | 
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
         @@ -47,7 +47,7 @@ module Blacklight 
     | 
|
| 
       47 
47 
     | 
    
         
             
                  value = if thumbnail_method
         
     | 
| 
       48 
48 
     | 
    
         
             
                            view_context.send(thumbnail_method, document, image_options)
         
     | 
| 
       49 
49 
     | 
    
         
             
                          elsif thumbnail_field
         
     | 
| 
       50 
     | 
    
         
            -
                            image_url = thumbnail_value_from_document 
     | 
| 
      
 50 
     | 
    
         
            +
                            image_url = thumbnail_value_from_document
         
     | 
| 
       51 
51 
     | 
    
         
             
                            view_context.image_tag image_url, image_options if image_url.present?
         
     | 
| 
       52 
52 
     | 
    
         
             
                          end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
         @@ -67,8 +67,18 @@ module Blacklight 
     | 
|
| 
       67 
67 
     | 
    
         
             
                  end
         
     | 
| 
       68 
68 
     | 
    
         
             
                end
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                def thumbnail_value_from_document 
     | 
| 
       71 
     | 
    
         
            -
                  Array(thumbnail_field).lazy.map { |field|  
     | 
| 
      
 70 
     | 
    
         
            +
                def thumbnail_value_from_document
         
     | 
| 
      
 71 
     | 
    
         
            +
                  Array(thumbnail_field).lazy.map { |field| retrieve_values(field_config(field)).first }.reject(&:blank?).first
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                def retrieve_values(field_config)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  FieldRetriever.new(document, field_config).fetch
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                def field_config(field)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  return field if field.is_a? Blacklight::Configuration::Field
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  Configuration::NullField.new(field)
         
     | 
| 
       72 
82 
     | 
    
         
             
                end
         
     | 
| 
       73 
83 
     | 
    
         
             
              end
         
     | 
| 
       74 
84 
     | 
    
         
             
            end
         
     |