blacklight 7.15.1 → 7.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/VERSION +1 -1
- data/app/components/blacklight/advanced_search_form_component.html.erb +9 -3
- data/app/components/blacklight/advanced_search_form_component.rb +48 -35
- data/app/components/blacklight/constraints_component.html.erb +19 -3
- data/app/components/blacklight/constraints_component.rb +5 -1
- data/app/components/blacklight/content_areas_shim.rb +12 -0
- data/app/components/blacklight/document/action_component.html.erb +1 -1
- data/app/components/blacklight/document/action_component.rb +6 -1
- data/app/components/blacklight/document/actions_component.html.erb +3 -5
- data/app/components/blacklight/document/actions_component.rb +16 -2
- data/app/components/blacklight/document_component.html.erb +4 -7
- data/app/components/blacklight/document_component.rb +73 -73
- data/app/components/blacklight/document_metadata_component.html.erb +2 -2
- data/app/components/blacklight/document_metadata_component.rb +13 -2
- data/app/components/blacklight/document_title_component.html.erb +17 -0
- data/app/components/blacklight/document_title_component.rb +59 -0
- data/app/components/blacklight/facet_field_checkboxes_component.html.erb +2 -2
- data/app/components/blacklight/facet_field_component.rb +4 -1
- data/app/components/blacklight/facet_field_list_component.html.erb +2 -2
- data/app/components/blacklight/facet_field_no_layout_component.rb +4 -1
- data/app/components/blacklight/metadata_field_component.html.erb +2 -2
- data/app/components/blacklight/metadata_field_layout_component.html.erb +3 -1
- data/app/components/blacklight/metadata_field_layout_component.rb +26 -1
- data/app/components/blacklight/response/view_type_button_component.html.erb +4 -0
- data/app/components/blacklight/response/view_type_button_component.rb +38 -0
- data/app/components/blacklight/response/view_type_component.html.erb +2 -5
- data/app/components/blacklight/response/view_type_component.rb +9 -13
- data/app/components/blacklight/search_bar_component.rb +9 -2
- data/app/components/blacklight/system/dropdown_component.html.erb +4 -7
- data/app/components/blacklight/system/dropdown_component.rb +24 -0
- data/app/components/blacklight/system/flash_message_component.html.erb +1 -1
- data/app/components/blacklight/system/flash_message_component.rb +7 -1
- data/app/components/blacklight/system/modal_component.rb +7 -1
- data/app/controllers/concerns/blacklight/catalog.rb +1 -1
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +3 -4
- data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -0
- data/app/helpers/blacklight/component_helper_behavior.rb +2 -2
- data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -2
- data/app/presenters/blacklight/document_presenter.rb +8 -4
- data/app/services/blacklight/search_service.rb +1 -1
- data/app/views/bookmarks/_tools.html.erb +1 -1
- data/app/views/catalog/_citation.html.erb +1 -1
- data/app/views/catalog/_document.html.erb +2 -2
- data/app/views/catalog/_facet_layout.html.erb +2 -2
- data/app/views/catalog/_show_main_content.html.erb +3 -3
- data/app/views/catalog/email.html.erb +2 -2
- data/app/views/catalog/email_success.html.erb +1 -1
- data/app/views/catalog/facet.html.erb +3 -3
- data/app/views/catalog/sms.html.erb +2 -2
- data/app/views/catalog/sms_success.html.erb +1 -1
- data/blacklight.gemspec +1 -1
- data/config/locales/blacklight.de.yml +2 -2
- data/lib/blacklight/configuration.rb +50 -5
- data/lib/blacklight/configuration/view_config.rb +18 -5
- data/lib/blacklight/engine.rb +3 -1
- data/lib/blacklight/open_struct_with_hash_access.rb +22 -1
- data/lib/blacklight/search_state.rb +2 -2
- data/lib/blacklight/solr/facet_paginator.rb +2 -0
- data/lib/blacklight/solr/request.rb +31 -0
- data/lib/blacklight/solr/response.rb +2 -16
- data/lib/blacklight/solr/response/facets.rb +76 -22
- data/lib/blacklight/solr/response/params.rb +104 -0
- data/lib/blacklight/solr/search_builder_behavior.rb +57 -27
- data/lib/generators/blacklight/assets_generator.rb +6 -2
- data/lib/generators/blacklight/user_generator.rb +1 -1
- data/spec/components/blacklight/document_component_spec.rb +3 -3
- data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
- data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +20 -0
- data/spec/models/blacklight/configuration_spec.rb +64 -0
- data/spec/models/blacklight/solr/facet_paginator_spec.rb +4 -0
- data/spec/models/blacklight/solr/request_spec.rb +62 -29
- data/spec/models/blacklight/solr/response/facets_spec.rb +109 -0
- data/spec/models/blacklight/solr/response_spec.rb +10 -0
- data/spec/models/blacklight/solr/search_builder_spec.rb +49 -0
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +8 -9
- data/spec/views/catalog/index.atom.builder_spec.rb +1 -1
- metadata +10 -4
@@ -3,7 +3,13 @@
|
|
3
3
|
module Blacklight
|
4
4
|
module System
|
5
5
|
class ModalComponent < ViewComponent::Base
|
6
|
-
|
6
|
+
include Blacklight::ContentAreasShim
|
7
|
+
|
8
|
+
renders_one :prefix
|
9
|
+
renders_one :header
|
10
|
+
renders_one :title
|
11
|
+
renders_one :body
|
12
|
+
renders_one :footer
|
7
13
|
end
|
8
14
|
end
|
9
15
|
end
|
@@ -198,7 +198,7 @@ module Blacklight::Catalog
|
|
198
198
|
# @example
|
199
199
|
# config.index.respond_to.txt = Proc.new { render plain: "A list of docs." }
|
200
200
|
def additional_response_formats(format)
|
201
|
-
blacklight_config.index.respond_to.each do |key, config|
|
201
|
+
blacklight_config.view_config(action_name: :index).respond_to.each do |key, config|
|
202
202
|
format.send key do
|
203
203
|
case config
|
204
204
|
when false
|
@@ -380,7 +380,7 @@ module Blacklight::BlacklightHelperBehavior
|
|
380
380
|
def show_presenter_class(_document)
|
381
381
|
Deprecation.warn(Blacklight::BlacklightHelperBehavior, '#show_presenter_class is deprecated; use #document_presenter_class instead')
|
382
382
|
|
383
|
-
blacklight_config.show.document_presenter_class
|
383
|
+
blacklight_config.view_config(:show, action_name: action_name).document_presenter_class
|
384
384
|
end
|
385
385
|
|
386
386
|
# @deprecated
|
@@ -388,13 +388,12 @@ module Blacklight::BlacklightHelperBehavior
|
|
388
388
|
def index_presenter_class(_document)
|
389
389
|
Deprecation.warn(Blacklight::BlacklightHelperBehavior, '#index_presenter_class is deprecated; use #document_presenter_class instead')
|
390
390
|
|
391
|
-
|
392
|
-
blacklight_config.index.document_presenter_class
|
391
|
+
blacklight_config.view_config(document_index_view_type, action_name: action_name).document_presenter_class
|
393
392
|
end
|
394
393
|
|
395
394
|
# @return [Class]
|
396
395
|
def search_bar_presenter_class
|
397
|
-
blacklight_config.index.search_bar_presenter_class
|
396
|
+
blacklight_config.view_config(action_name: :index).search_bar_presenter_class
|
398
397
|
end
|
399
398
|
|
400
399
|
# @!group Layout helpers
|
@@ -253,11 +253,13 @@ module Blacklight::CatalogHelperBehavior
|
|
253
253
|
##
|
254
254
|
# Render the view type icon for the results view picker
|
255
255
|
#
|
256
|
+
# @deprecated
|
256
257
|
# @param [String] view
|
257
258
|
# @return [String]
|
258
259
|
def render_view_type_group_icon view
|
259
260
|
blacklight_icon(view)
|
260
261
|
end
|
262
|
+
deprecation_deprecate render_view_type_group_icon: 'call blacklight_icon instead'
|
261
263
|
|
262
264
|
##
|
263
265
|
# Get the default view type classes for a view in the results view picker
|
@@ -94,11 +94,11 @@ module Blacklight
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def show_doc_actions?(document = @document, options = {})
|
97
|
-
filter_partials(blacklight_config.show.document_actions, { document: document }.merge(options)).any?
|
97
|
+
filter_partials(blacklight_config.view_config(:show).document_actions, { document: document }.merge(options)).any?
|
98
98
|
end
|
99
99
|
|
100
100
|
def document_actions(document, options: {})
|
101
|
-
filter_partials(blacklight_config.show.document_actions, { document: document }.merge(options)).map { |_k, v| v }
|
101
|
+
filter_partials(blacklight_config.view_config(:show).document_actions, { document: document }.merge(options)).map { |_k, v| v }
|
102
102
|
end
|
103
103
|
|
104
104
|
private
|
@@ -101,9 +101,9 @@ module Blacklight::ConfigurationHelperBehavior
|
|
101
101
|
|
102
102
|
# Return the label for a search view
|
103
103
|
# @return [String]
|
104
|
-
def view_label
|
104
|
+
def view_label(view)
|
105
105
|
view_config = blacklight_config.view[view]
|
106
|
-
view_config.display_label
|
106
|
+
view_config.display_label
|
107
107
|
end
|
108
108
|
deprecation_deprecate view_label: 'Moving to ViewConfig#display_label and Blacklight::Response::ViewTypeComponent'
|
109
109
|
|
@@ -72,9 +72,9 @@ module Blacklight
|
|
72
72
|
fields += Array.wrap(view_config[:"#{base_name}_display_type_field"]) if base_name && view_config.key?(:"#{base_name}_display_type_field")
|
73
73
|
fields += Array.wrap(view_config.display_type_field)
|
74
74
|
|
75
|
-
if fields.empty?
|
76
|
-
fields += Array.wrap(
|
77
|
-
fields += Array.wrap(
|
75
|
+
if fields.empty? && show_view_config != view_config
|
76
|
+
fields += Array.wrap(show_view_config[:"#{base_name}_display_type_field"]) if base_name && show_view_config.key?(:"#{base_name}_display_type_field")
|
77
|
+
fields += Array.wrap(show_view_config.display_type_field)
|
78
78
|
end
|
79
79
|
|
80
80
|
fields += ['format'] if fields.empty? # backwards compatibility with the old default value for display_type_field
|
@@ -118,7 +118,11 @@ module Blacklight
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def view_config
|
121
|
-
@view_config ||=
|
121
|
+
@view_config ||= show_view_config
|
122
|
+
end
|
123
|
+
|
124
|
+
def show_view_config
|
125
|
+
configuration.view_config(:show)
|
122
126
|
end
|
123
127
|
|
124
128
|
private
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if render_show_doc_actions_method_from_blacklight? %>
|
2
|
-
<%= render(Blacklight::Document::ActionsComponent.new(document: nil, tag: '
|
2
|
+
<%= render(Blacklight::Document::ActionsComponent.new(document: nil, tag: 'div', classes: "#{controller_name}Tools", wrapping_tag: 'span', wrapping_classes: 'btn btn-outline-primary', link_classes: '', actions: document_actions(document_list, options: { document: nil }), options: { document_list: @response.documents }, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h))) %>
|
3
3
|
<% else %>
|
4
4
|
<% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %>
|
5
5
|
<ul class="<%= controller_name %>Tools nav nav-pills">
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.title { t('blacklight.tools.citation') } %>
|
3
3
|
|
4
4
|
<%= render Blacklight::Document::CitationComponent.with_collection(@documents) if @documents.present? %>
|
5
5
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% # container for a single doc -%>
|
2
|
-
<%= render (blacklight_config.view_config(document_index_view_type).document_component || Blacklight::DocumentComponent).new(
|
3
|
-
<% component.
|
2
|
+
<%= render (blacklight_config.view_config(document_index_view_type).document_component || Blacklight::DocumentComponent).new(presenter: document_presenter(document), counter: document_counter_with_offset(document_counter)) do |component| %>
|
3
|
+
<% component.public_send(blacklight_config.view_config(document_index_view_type).document_component.blank? && blacklight_config.view_config(document_index_view_type).partials.any? ? :body : :partial) do %>
|
4
4
|
<%= render_document_partials document, blacklight_config.view_config(document_index_view_type).partials, component: component, document_counter: document_counter %>
|
5
5
|
<% end %>
|
6
6
|
<% end %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<%= render(Blacklight::FacetFieldComponent.new(facet_field: facet_field_presenter(facet_field, nil))) do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.label do %>
|
3
3
|
<%= facet_field_label(facet_field.key) %>
|
4
4
|
<% end %>
|
5
|
-
<% component.
|
5
|
+
<% component.body do %>
|
6
6
|
<%= yield %>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<% @page_title = t('blacklight.search.show.title', document_title: Deprecation.silence(Blacklight::BlacklightHelperBehavior) { document_show_html_title }, application_name: application_name).html_safe %>
|
4
4
|
<% content_for(:head) { render_link_rel_alternates } %>
|
5
5
|
|
6
|
-
<%= render (blacklight_config.show.document_component || Blacklight::DocumentComponent).new(
|
7
|
-
<% component.
|
6
|
+
<%= render (blacklight_config.view_config(:show).document_component || Blacklight::DocumentComponent).new(presenter: document_presenter(@document), component: :div, title_component: :h1, show: true) do |component| %>
|
7
|
+
<% component.footer do %>
|
8
8
|
<% if @document.respond_to?(:export_as_openurl_ctx_kev) %>
|
9
9
|
<!--
|
10
10
|
// COinS, for Zotero among others.
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
<%# Use :body for complete backwards compatibility (overriding the component body markup),
|
19
19
|
but if the app explicitly opted-in to components, make the partials data available as :partials to ease migrations pain %>
|
20
|
-
<% component.
|
20
|
+
<% component.public_send(blacklight_config.view_config(:show).document_component.blank? && blacklight_config.view_config(:show).partials.any? ? :body : :partial) do %>
|
21
21
|
<div id="doc_<%= @document.id.to_s.parameterize %>">
|
22
22
|
<%= render_document_partials @document, blacklight_config.view_config(:show).partials, component: component %>
|
23
23
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.title { t('blacklight.email.form.title') } %>
|
3
3
|
|
4
|
-
<% component.
|
4
|
+
<% component.body do %>
|
5
5
|
<%= render 'email_form' %>
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.title { t('blacklight.email.form.title') } %>
|
3
3
|
|
4
4
|
<%= render partial: '/shared/flash_msg' %>
|
5
5
|
<span data-blacklight-modal="close"></span>
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.prefix do %>
|
3
3
|
<div class="facet-pagination top row justify-content-between">
|
4
4
|
<%= render :partial=>'facet_pagination' %>
|
5
5
|
</div>
|
6
6
|
<% end %>
|
7
7
|
|
8
|
-
<% component.
|
8
|
+
<% component.title { facet_field_label(@facet.key) } %>
|
9
9
|
|
10
10
|
<%= render partial: 'facet_index_navigation' if @facet.index_range && @display_facet.index? %>
|
11
11
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<%= render_facet_limit(@display_facet, layout: false) %>
|
14
14
|
</div>
|
15
15
|
|
16
|
-
<% component.
|
16
|
+
<% component.footer do %>
|
17
17
|
<div class="facet-pagination bottom row justify-content-between">
|
18
18
|
<%= render :partial=>'facet_pagination' %>
|
19
19
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.title { t('blacklight.sms.form.title') } %>
|
3
3
|
|
4
|
-
<% component.
|
4
|
+
<% component.body do %>
|
5
5
|
<%= render 'sms_form' %>
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= render Blacklight::System::ModalComponent.new do |component| %>
|
2
|
-
<% component.
|
2
|
+
<% component.title { t('blacklight.sms.form.title') } %>
|
3
3
|
|
4
4
|
<%= render partial: '/shared/flash_msg' %>
|
5
5
|
<span data-blacklight-modal="close"></span>
|
data/blacklight.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_dependency "deprecation"
|
33
33
|
s.add_dependency "i18n", '>= 1.7.0' # added named parameters
|
34
34
|
s.add_dependency "ostruct", '>= 0.3.2'
|
35
|
-
s.add_dependency "view_component", '>= 2.
|
35
|
+
s.add_dependency "view_component", '>= 2.28.0'
|
36
36
|
|
37
37
|
s.add_development_dependency "rsolr", ">= 1.0.6", "< 3" # Library for interacting with rSolr.
|
38
38
|
s.add_development_dependency "rspec-rails", "~> 4.0.0.beta2"
|
@@ -3,7 +3,7 @@ de:
|
|
3
3
|
pagination:
|
4
4
|
first: '« Erste'
|
5
5
|
last: 'Letzte »'
|
6
|
-
previous: '«
|
6
|
+
previous: '« Vorherige'
|
7
7
|
next: 'Nächste »'
|
8
8
|
truncate: '…'
|
9
9
|
aria:
|
@@ -16,7 +16,7 @@ de:
|
|
16
16
|
go_to_previous_page: Zurück zur letzten Seite
|
17
17
|
|
18
18
|
pagination_compact:
|
19
|
-
previous: '«
|
19
|
+
previous: '« Vorherige'
|
20
20
|
next: 'Nächste »'
|
21
21
|
|
22
22
|
blacklight:
|
@@ -95,6 +95,12 @@ module Blacklight
|
|
95
95
|
partials: [:show_header, :show],
|
96
96
|
document_actions: NestedOpenStructWithHashAccess.new(ToolConfig)
|
97
97
|
),
|
98
|
+
action_mapping: NestedOpenStructWithHashAccess.new(
|
99
|
+
ViewConfig,
|
100
|
+
default: { top_level_config: :index },
|
101
|
+
show: { top_level_config: :show },
|
102
|
+
citation: { parent_config: :show }
|
103
|
+
),
|
98
104
|
# Configurations for specific types of index views
|
99
105
|
view: NestedOpenStructWithHashAccess.new(ViewConfig,
|
100
106
|
list: {},
|
@@ -307,13 +313,35 @@ module Blacklight
|
|
307
313
|
end
|
308
314
|
alias_method :inheritable_copy, :build
|
309
315
|
|
310
|
-
# Get a view configuration for the given view type
|
311
|
-
#
|
316
|
+
# Get a view configuration for the given view type + action. The effective
|
317
|
+
# view configuration is inherited from:
|
318
|
+
# - the configuration from blacklight_config.view with the key `view_type`
|
319
|
+
# - the configuration from blacklight_config.action_mapping with the key `action_name`
|
320
|
+
# - any parent config for the action map result above
|
321
|
+
# - the action_mapping default configuration
|
322
|
+
# - the top-level index/show view configuration
|
323
|
+
#
|
312
324
|
# @param [Symbol,#to_sym] view_type
|
313
325
|
# @return [Blacklight::Configuration::ViewConfig]
|
314
|
-
def view_config(view_type)
|
315
|
-
view_type
|
316
|
-
|
326
|
+
def view_config(view_type = nil, action_name: :index)
|
327
|
+
view_type &&= view_type.to_sym
|
328
|
+
action_name &&= action_name.to_sym
|
329
|
+
action_name ||= :index
|
330
|
+
|
331
|
+
if view_type == :show
|
332
|
+
action_name = view_type
|
333
|
+
view_type = nil
|
334
|
+
end
|
335
|
+
|
336
|
+
@view_config ||= {}
|
337
|
+
@view_config[[view_type, action_name]] ||= begin
|
338
|
+
if view_type.nil?
|
339
|
+
action_config(action_name)
|
340
|
+
else
|
341
|
+
base_config = action_config(action_name)
|
342
|
+
base_config.merge(view.fetch(view_type, {}))
|
343
|
+
end
|
344
|
+
end
|
317
345
|
end
|
318
346
|
|
319
347
|
# YARD will include inline disabling as docs, cannot do multiline inside @!macro. AND this must be separate from doc block.
|
@@ -441,5 +469,22 @@ module Blacklight
|
|
441
469
|
yield(object)
|
442
470
|
end
|
443
471
|
end
|
472
|
+
|
473
|
+
def action_config(action, default: :index)
|
474
|
+
action_config = action_mapping[action]
|
475
|
+
action_config ||= action_mapping[:default]
|
476
|
+
|
477
|
+
if action_config.parent_config && action_config.parent_config != :default
|
478
|
+
parent_config = action_mapping[action_config.parent_config]
|
479
|
+
raise "View configuration error: the parent configuration of #{action_config.key}, #{parent_config.key}, must not specific its own parent configuration" if parent_config.parent_config
|
480
|
+
|
481
|
+
action_config = action_config.reverse_merge(parent_config)
|
482
|
+
end
|
483
|
+
action_config = action_config.reverse_merge(action_mapping[:default]) if action_config != action_mapping[:default]
|
484
|
+
|
485
|
+
action_config = action_config.reverse_merge(self[action_config.top_level_config]) if action_config.top_level_config
|
486
|
+
action_config = action_config.reverse_merge(show) if default == :show && action_config.top_level_config != :show
|
487
|
+
action_config.reverse_merge(index)
|
488
|
+
end
|
444
489
|
end
|
445
490
|
end
|
@@ -11,21 +11,26 @@ class Blacklight::Configuration
|
|
11
11
|
# @return [String, Symbol] solr field to use to render a document title
|
12
12
|
# @!attribute display_type_field
|
13
13
|
# @return [String, Symbol] solr field to use to render format-specific partials
|
14
|
+
# @!attribute icon
|
15
|
+
# @return [String, Symbol] icon file to use in the view picker
|
14
16
|
# @!attribute document_actions
|
15
17
|
# @return [NestedOpenStructWithHashAccess{Symbol => Blacklight::Configuration::ToolConfig}] 'tools' to render for each document
|
16
18
|
def search_bar_presenter_class
|
17
19
|
super || Blacklight::SearchBarPresenter
|
18
20
|
end
|
19
21
|
|
20
|
-
def display_label(
|
22
|
+
def display_label(deprecated_key = nil, **options)
|
23
|
+
Deprecation.warn('Passing the key argument to ViewConfig#display_label is deprecated') if deprecated_key.present?
|
24
|
+
|
21
25
|
I18n.t(
|
22
|
-
:"blacklight.search.view_title.#{key}",
|
26
|
+
:"blacklight.search.view_title.#{deprecated_key || key}",
|
23
27
|
default: [
|
24
|
-
:"blacklight.search.view.#{key}",
|
28
|
+
:"blacklight.search.view.#{deprecated_key || key}",
|
25
29
|
label,
|
26
30
|
title,
|
27
|
-
key.to_s.humanize
|
28
|
-
]
|
31
|
+
(deprecated_key || key).to_s.humanize
|
32
|
+
],
|
33
|
+
**options
|
29
34
|
)
|
30
35
|
end
|
31
36
|
|
@@ -38,6 +43,10 @@ class Blacklight::Configuration
|
|
38
43
|
def document_presenter_class
|
39
44
|
super || Blacklight::ShowPresenter
|
40
45
|
end
|
46
|
+
|
47
|
+
def to_h
|
48
|
+
super.merge(document_presenter_class: document_presenter_class)
|
49
|
+
end
|
41
50
|
end
|
42
51
|
|
43
52
|
class Index < ViewConfig
|
@@ -52,6 +61,10 @@ class Blacklight::Configuration
|
|
52
61
|
def document_presenter_class
|
53
62
|
super || Blacklight::IndexPresenter
|
54
63
|
end
|
64
|
+
|
65
|
+
def to_h
|
66
|
+
super.merge(document_presenter_class: document_presenter_class)
|
67
|
+
end
|
55
68
|
end
|
56
69
|
end
|
57
70
|
end
|
data/lib/blacklight/engine.rb
CHANGED
@@ -8,7 +8,9 @@ module Blacklight
|
|
8
8
|
# BlacklightHelper is needed by all helpers, so we inject it
|
9
9
|
# into action view base here.
|
10
10
|
initializer 'blacklight.helpers' do
|
11
|
-
|
11
|
+
config.after_initialize do
|
12
|
+
ActionView::Base.include BlacklightHelper
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
# This makes our rake tasks visible.
|
@@ -4,7 +4,9 @@ module Blacklight
|
|
4
4
|
##
|
5
5
|
# An OpenStruct that responds to common Hash methods
|
6
6
|
class OpenStructWithHashAccess < OpenStruct
|
7
|
-
delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?,
|
7
|
+
delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?,
|
8
|
+
:length, :delete, :delete_if, :keep_if, :clear, :reject!, :select!,
|
9
|
+
:replace, :fetch, :to_json, :as_json, :any?, to: :to_h
|
8
10
|
|
9
11
|
##
|
10
12
|
# Expose the internal hash
|
@@ -42,8 +44,27 @@ module Blacklight
|
|
42
44
|
@table.merge!((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
43
45
|
end
|
44
46
|
|
47
|
+
def reverse_merge(other_hash)
|
48
|
+
self.class.new to_h.reverse_merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
49
|
+
end
|
50
|
+
|
45
51
|
def deep_dup
|
46
52
|
self.class.new @table.deep_dup
|
47
53
|
end
|
54
|
+
|
55
|
+
if Rails.version < '6'
|
56
|
+
# Ported from Rails 6 to fix an incompatibility with ostruct
|
57
|
+
def try(method_name = nil, *args, &block)
|
58
|
+
if method_name.nil? && block_given?
|
59
|
+
if b.arity.zero?
|
60
|
+
instance_eval(&block)
|
61
|
+
else
|
62
|
+
yield self
|
63
|
+
end
|
64
|
+
elsif respond_to?(method_name)
|
65
|
+
public_send(method_name, *args, &b)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
48
69
|
end
|
49
70
|
end
|