Module: Blacklight::CatalogHelperBehavior

Includes:
ComponentHelperBehavior, ConfigurationHelperBehavior, DocumentHelperBehavior, FacetsHelperBehavior, RenderPartialsHelperBehavior
Included in:
CatalogHelper
Defined in:
app/helpers/blacklight/catalog_helper_behavior.rb

Overview

Helper methods for catalog-like controllers

Instance Method Summary collapse

Methods included from RenderPartialsHelperBehavior

#document_index_path_templates, #render_document_index, #render_document_index_with_view, #render_document_partial, #render_document_partials, #render_xml_partials

Methods included from FacetsHelperBehavior

#facet_field_presenter

Methods included from DocumentHelperBehavior

#bookmarked?, #document_class_prefix, #document_presenter, #document_presenter_class, #render_document_class, #render_document_sidebar_partial

Methods included from ComponentHelperBehavior

#document_actions, #render_index_doc_actions, #render_results_collection_tools, #show_doc_actions?

Methods included from ConfigurationHelperBehavior

#active_sort_fields, #default_document_index_view_type, #default_search_field?, #default_sort_field, #document_index_view_controls, #document_index_views, #facet_field_label, #field_label, #label_for_search_field, #per_page_options_for_select, #should_render_field?, #sort_field_label

Instance Method Details

Parameters:

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

Options Hash (options):

  • :route_set (Object)

    the route scope to use when constructing the link

Returns:

  • (String)


21
22
23
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 21

def atom_feed_link_tag(options = {})
  auto_discovery_link_tag(:atom, feed_link_url('atom', options), title: t('blacklight.search.atom_feed'))
end

#current_per_pageInteger

Look up the current per page value, or the default if none if set

Returns:

  • (Integer)


113
114
115
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 113

def current_per_page
  (@response.rows if @response && @response.rows > 0) || params.fetch(:per_page, blacklight_config.default_per_page).to_i
end

#current_sort_fieldBlacklight::Configuration::SortField

Look up the current sort field, or provide the default if none is set



105
106
107
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 105

def current_sort_field
  (blacklight_config.sort_fields.values.find { |f| f.sort == @response.sort } if @response && @response.sort.present?) || blacklight_config.sort_fields[params[:sort]] || default_sort_field
end

#document_counter_with_offset(idx, offset = nil) ⇒ Integer

Get the offset counter for a document

Parameters:

  • idx (Integer)

    document index

  • offset (Integer) (defaults to: nil)

    additional offset to incremenet the counter by

Returns:

  • (Integer)


84
85
86
87
88
89
90
91
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 84

def document_counter_with_offset idx, offset = nil
  offset ||= @response.start if @response
  offset ||= 0

  unless render_grouped_response?
    idx + 1 + offset
  end
end

#document_index_view_type(query_params = params || {}) ⇒ Symbol

Get the current “view type” (and ensure it is a valid type)

Parameters:

  • query_params (Hash) (defaults to: params || {})

    the query parameters to check

Returns:

  • (Symbol)


199
200
201
202
203
204
205
206
207
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 199

def document_index_view_type query_params = params || {}
  view_param = query_params[:view]
  view_param ||= session[:preferred_view] if respond_to?(:session)
  if view_param && document_index_views.key?(view_param.to_sym)
    view_param.to_sym
  else
    default_document_index_view_type
  end
end

Parameters:

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

Options Hash (options):

  • :route_set (Object)

    the route scope to use when constructing the link

Returns:

  • (String)


28
29
30
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 28

def json_api_link_tag(options = {})
  auto_discovery_link_tag(:json, feed_link_url('json', options), type: 'application/json')
end

#page_entries_info(collection, entry_name: nil) ⇒ String

Override the Kaminari page_entries_info helper with our own, blacklight-aware implementation. Why do we have to do this?

- We need custom counting information for grouped results
- We need to provide number_with_delimiter strings to i18n keys

If we didn’t have to do either one of these, we could get away with removing this entirely.

Parameters:

  • collection (RSolr::Resource)

    (or other Kaminari-compatible objects)

Returns:

  • (String)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 42

def page_entries_info(collection, entry_name: nil)
  entry_name = if entry_name
                 entry_name.pluralize(collection.size, I18n.locale)
               else
                 collection.entry_name(count: collection.size).to_s
               end

  # grouped response objects need special handling
  end_num = if collection.respond_to?(:groups) && render_grouped_response?(collection)
              collection.groups.length
            else
              collection.limit_value
            end

  end_num = if collection.offset_value + end_num <= collection.total_count
              collection.offset_value + end_num
            else
              collection.total_count
            end

  case collection.total_count
  when 0
    t('blacklight.search.pagination_info.no_items_found', entry_name: entry_name).html_safe
  when 1
    t('blacklight.search.pagination_info.single_item_found', entry_name: entry_name).html_safe
  else
    t('blacklight.search.pagination_info.pages', entry_name: entry_name,
                                                 current_page: collection.current_page,
                                                 num_pages: collection.total_pages,
                                                 start_num: number_with_delimiter(collection.offset_value + 1),
                                                 end_num: number_with_delimiter(end_num),
                                                 total_num: number_with_delimiter(collection.total_count),
                                                 count: collection.total_pages).html_safe
  end
end

#render_grouped_response?(response = @response) ⇒ Boolean

Should we render a grouped response (because the response contains a grouped response instead of the normal response)

Default to false if there’s no response object available (sometimes the case

for tests, but might happen in other circumstances too..)

Returns:

  • (Boolean)


190
191
192
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 190

def render_grouped_response? response = @response
  response&.grouped?
end

#render_search_to_page_title(search_state_or_params) ⇒ String

Render an html <title> appropriate string for a set of search parameters

Parameters:

  • params (ActionController::Parameters)

Returns:

  • (String)


157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 157

def render_search_to_page_title(search_state_or_params)
  search_state = if search_state_or_params.is_a? Blacklight::SearchState
                   search_state_or_params
                 else
                   controller.search_state_class.new(params, blacklight_config, self)
                 end

  constraints = []

  if search_state.query_param.present?
    q_label = label_for_search_field(search_state.search_field.key) unless search_state.search_field&.key.blank? || default_search_field?(search_state.search_field.key)

    constraints += if q_label.present?
                     [t('blacklight.search.page_title.constraint', label: q_label, value: search_state.query_param)]
                   else
                     [search_state.query_param]
                   end
  end

  if search_state.filters.any?
    constraints += search_state.filters.collect { |filter| render_search_to_page_title_filter(filter.key, filter.values) }
  end

  constraints.join(' / ')
end

#render_search_to_page_title_filter(facet, values) ⇒ String

Render an html <title> appropriate string for a selected facet field and values

Parameters:

  • facet (Symbol)

    the facet field

  • values (Array<String>)

    the selected facet values

Returns:

  • (String)

See Also:



143
144
145
146
147
148
149
150
151
152
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 143

def render_search_to_page_title_filter(facet, values)
  facet_config = facet_configuration_for_field(facet)
  filter_label = facet_field_label(facet_config.key)
  filter_value = if values.size < 3
                   values.map { |value| facet_item_presenter(facet_config, value, facet).label }.to_sentence
                 else
                   t('blacklight.search.page_title.many_constraint_values', values: values.size)
                 end
  t('blacklight.search.page_title.constraint', label: filter_label, value: filter_value)
end

Parameters:

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

Options Hash (options):

  • :route_set (Object)

    the route scope to use when constructing the link

Returns:

  • (String)


14
15
16
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 14

def rss_feed_link_tag(options = {})
  auto_discovery_link_tag(:rss, feed_link_url('rss', options), title: t('blacklight.search.rss_feed'))
end

#search_field_label(params) ⇒ String

Look up search field user-displayable label based on params and blacklight_configuration.

Returns:

  • (String)


97
98
99
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 97

def search_field_label(params)
  h(label_for_search_field(params[:search_field]))
end

#show_pagination?(response = nil) ⇒ Boolean

Should we display the pagination controls?

Parameters:

Returns:

  • (Boolean)


132
133
134
135
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 132

def show_pagination? response = nil
  response ||= @response
  response.limit_value > 0
end

#show_sort_and_per_page?(response = nil) ⇒ Boolean

Should we display the sort and per page widget?

Parameters:

Returns:

  • (Boolean)


122
123
124
125
# File 'app/helpers/blacklight/catalog_helper_behavior.rb', line 122

def show_sort_and_per_page? response = nil
  response ||= @response
  !response.empty?
end