Module: Spotlight::ApplicationHelper

Includes:
CropHelper, CrudLinkHelpers, LanguagesHelper, MetaHelper, TitleHelper
Defined in:
app/helpers/spotlight/application_helper.rb

Overview

General spotlight application helpers

Instance Method Summary collapse

Methods included from LanguagesHelper

#add_exhibit_language_dropdown_options, #default_language?, #locale_selecter_dropown_options

Methods included from CropHelper

#form_prefix, #iiif_cropper_tag, #iiif_cropper_tags, #iiif_upload_tag

Methods included from MetaHelper

#add_browse_meta_content, #add_document_meta_content, #add_exhibit_meta_content, #add_page_meta_content, #browse_opengraph_content, #browse_twitter_card_content, #document_opengraph_content, #document_twitter_card_content, #exhibit_opengraph_content, #exhibit_twitter_card_content, #meta_image, #page_opengraph_content, #page_twitter_card_content

Methods included from TitleHelper

#configuration_page_title, #curation_page_title, #page_title, #set_html_page_title

Methods included from CrudLinkHelpers

#action_label, #cancel_link, #create_link, #delete_link, #edit_link, #exhibit_create_link, #exhibit_delete_link, #exhibit_edit_link, #exhibit_view_link, #nav_link, #view_link

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

Can search for named routes directly in the main app, omitting the “main_app.” prefix



54
55
56
57
58
59
60
# File 'app/helpers/spotlight/application_helper.rb', line 54

def method_missing(method, *args, &block)
  if main_app_url_helper?(method)
    main_app.send(method, *args)
  else
    super
  end
end

Instance Method Details

#additional_locale_routing_scopesObject



48
49
50
# File 'app/helpers/spotlight/application_helper.rb', line 48

def additional_locale_routing_scopes
  [spotlight, main_app]
end

#application_nameObject

Give the application name a chance to include the exhibit title



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/helpers/spotlight/application_helper.rb', line 15

def application_name
  name = site_title
  name ||= super

  if current_exhibit
    t :'spotlight.application_name',
      exhibit: current_exhibit.title,
      application_name: name,
      default: t('spotlight.application_name', locale: I18n.default_locale, exhibit: current_exhibit.title, application_name: name)
  else
    name
  end
end

#available_view_fieldsObject



157
158
159
# File 'app/helpers/spotlight/application_helper.rb', line 157

def available_view_fields
  current_exhibit.blacklight_configuration.default_blacklight_config.view.to_h.reject { |_k, v| v.if == false }
end

#blacklight_view_config_for_search_block(block) ⇒ Object

Return a copy of the blacklight configuration that only includes views conifgured by our block



112
113
114
115
116
117
118
119
# File 'app/helpers/spotlight/application_helper.rb', line 112

def blacklight_view_config_for_search_block(block)
  return {} unless block.view.present?

  # Reject any views that aren't configured to display for this block
  blacklight_config.view.select do |view, _|
    block.view.include? view.to_s
  end
end

#block_document_index_view_type(block) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
# File 'app/helpers/spotlight/application_helper.rb', line 121

def block_document_index_view_type(block)
  views = blacklight_view_config_for_search_block(block)

  selected_view = if views.key? document_index_view_type
                    document_index_view_type
                  else
                    views.keys.first
                  end

  selected_view || default_document_index_view_type
end

#current_exhibit_themeObject



170
171
172
# File 'app/helpers/spotlight/application_helper.rb', line 170

def current_exhibit_theme
  current_exhibit.theme if current_exhibit && current_exhibit.theme.present? && current_exhibit.themes.include?(current_exhibit.theme)
end

#current_page_for_locale(locale) ⇒ Object

Returns the url for the current page in the new locale. This may be overridden in downstream applications where our naive use of ‘url_for` is insufficient to generate the expected routes



36
37
38
39
40
41
42
43
44
45
46
# File 'app/helpers/spotlight/application_helper.rb', line 36

def current_page_for_locale(locale)
  initial_exception = nil

  ([self] + additional_locale_routing_scopes).each do |scope|
    return scope.public_send(:url_for, params.to_unsafe_h.merge(locale: locale))
  rescue ActionController::UrlGenerationError => e
    initial_exception ||= e
  end

  raise initial_exception
end

#document_action_path(action_opts, url_opts = nil) ⇒ Object

Override Blacklight’s #document_action_path helper to add the current exhibit context



82
83
84
85
86
87
88
89
# File 'app/helpers/spotlight/application_helper.rb', line 82

def document_action_path(action_opts, url_opts = nil)
  if current_exhibit
    model_name = current_exhibit.blacklight_config.document_model.model_name
    spotlight.send(action_opts.path || "#{action_opts.key}_exhibit_#{model_name.collection}_path", url_opts)
  else
    super
  end
end


161
162
163
164
165
166
167
168
# File 'app/helpers/spotlight/application_helper.rb', line 161

def exhibit_stylesheet_link_tag(tag)
  if current_exhibit_theme && current_exhibit.theme != 'default'
    stylesheet_link_tag "#{tag}_#{current_exhibit_theme}"
  else
    Rails.logger.warn "Exhibit theme '#{current_exhibit_theme}' not in the list of available themes: #{current_exhibit.themes}"
    stylesheet_link_tag(tag)
  end
end

#render_document_class(document = @document) ⇒ Object

Override Blacklight’s #render_document_class to inject a private class



103
104
105
106
107
108
# File 'app/helpers/spotlight/application_helper.rb', line 103

def render_document_class(document = @document)
  [
    super,
    ("#{document_class_prefix}private" if document.private?(current_exhibit))
  ].join(' ')
end

#respond_to_missing?(method, *args) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
# File 'app/helpers/spotlight/application_helper.rb', line 62

def respond_to_missing?(method, *args)
  main_app_url_helper?(method) || super
end

#select_deselect_buttonObject



140
141
142
143
144
145
146
147
148
149
150
# File 'app/helpers/spotlight/application_helper.rb', line 140

def select_deselect_button
  button_tag(
    t(:".deselect_all"),
    class: 'btn btn-secondary btn-sm metadata-select',
    data: {
      behavior: 'metadata-select',
      'deselect-text' => t(:".deselect_all"),
      'select-text' => t(:".select_all")
    }
  )
end

#selected_search_block_views(block) ⇒ Object

Return the list of views that are configured to display for a block



134
135
136
137
138
# File 'app/helpers/spotlight/application_helper.rb', line 134

def selected_search_block_views(block)
  block.as_json[:data].select do |_key, value|
    value == 'on'
  end.keys.map(&:to_s)
end

#site_titleObject



29
30
31
# File 'app/helpers/spotlight/application_helper.rb', line 29

def site_title
  current_site.title if current_site.title.present?
end

#uploaded_field_label(config) ⇒ Object



152
153
154
155
# File 'app/helpers/spotlight/application_helper.rb', line 152

def uploaded_field_label(config)
  solr_field = Array(config.solr_field || config.field_name).first.to_s
  blacklight_config.index_fields[solr_field]&.label || config.label || t(".#{solr_field}")
end

#url_for_document(document) ⇒ Object

Override the Blacklight #url_for_document helper to add the current exhibit context



69
70
71
72
73
74
75
76
77
# File 'app/helpers/spotlight/application_helper.rb', line 69

def url_for_document(document)
  return nil if document.nil?

  if current_exhibit
    [spotlight, current_exhibit, document]
  else
    document
  end
end

#url_to_tag_facet(tag) ⇒ Object

Helper to turn tag data into facets



93
94
95
96
97
98
99
# File 'app/helpers/spotlight/application_helper.rb', line 93

def url_to_tag_facet(tag)
  if current_exhibit
    search_action_url(search_state.reset.filter(:exhibit_tags).add(tag).params)
  else
    search_action_url(q: tag)
  end
end