blacklight 7.11.1 → 7.12.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/.rubocop.yml +8 -0
- data/.solr_wrapper.yml +5 -0
- data/VERSION +1 -1
- data/app/builders/blacklight/action_builder.rb +6 -0
- data/app/components/blacklight/constraint_component.html.erb +5 -0
- data/app/components/blacklight/constraint_component.rb +13 -0
- data/app/components/blacklight/constraint_layout_component.rb +2 -1
- data/app/components/blacklight/constraints_component.html.erb +10 -0
- data/app/components/blacklight/constraints_component.rb +65 -0
- data/app/components/blacklight/document/action_component.html.erb +9 -0
- data/app/components/blacklight/document/action_component.rb +38 -0
- data/app/components/blacklight/document/actions_component.html.erb +13 -0
- data/app/components/blacklight/document/actions_component.rb +26 -0
- data/app/components/blacklight/document/bookmark_component.html.erb +1 -1
- data/app/components/blacklight/document/bookmark_component.rb +8 -0
- data/app/components/blacklight/document/citation_component.html.erb +4 -2
- data/app/components/blacklight/document/citation_component.rb +8 -1
- data/app/components/blacklight/document/group_component.html.erb +9 -0
- data/app/components/blacklight/document/group_component.rb +26 -0
- data/app/components/blacklight/document/more_like_this_component.rb +2 -0
- data/app/components/blacklight/document/thumbnail_component.html.erb +12 -0
- data/app/components/blacklight/document/thumbnail_component.rb +25 -0
- data/app/components/blacklight/document_component.rb +27 -26
- data/app/components/blacklight/facet_field_filter_component.html.erb +12 -0
- data/app/components/blacklight/facet_field_filter_component.rb +25 -0
- data/app/components/blacklight/facet_field_pagination_component.html.erb +19 -0
- data/app/components/blacklight/facet_field_pagination_component.rb +21 -0
- data/app/components/blacklight/facet_item_component.rb +4 -8
- data/app/components/blacklight/response/facet_group_component.html.erb +3 -1
- data/app/components/blacklight/response/facet_group_component.rb +8 -1
- data/app/components/blacklight/response/pagination_component.rb +3 -0
- data/app/components/blacklight/response/sort_component.html.erb +1 -1
- data/app/components/blacklight/response/spellcheck_component.rb +9 -2
- data/app/components/blacklight/response/view_type_component.html.erb +11 -0
- data/app/components/blacklight/response/view_type_component.rb +36 -0
- data/app/components/blacklight/search_bar_component.html.erb +1 -1
- data/app/components/blacklight/search_bar_component.rb +6 -0
- data/app/components/blacklight/search_context_component.rb +6 -2
- data/app/components/blacklight/system/dropdown_component.html.erb +1 -1
- data/app/components/blacklight/system/flash_message_component.html.erb +4 -0
- data/app/components/blacklight/system/flash_message_component.rb +24 -0
- data/app/controllers/concerns/blacklight/catalog.rb +7 -1
- data/app/controllers/concerns/blacklight/controller.rb +12 -3
- data/app/controllers/concerns/blacklight/facet.rb +19 -5
- data/app/controllers/concerns/blacklight/search_fields.rb +7 -1
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +127 -17
- data/app/helpers/blacklight/catalog_helper_behavior.rb +36 -5
- data/app/helpers/blacklight/component_helper_behavior.rb +36 -6
- data/app/helpers/blacklight/configuration_helper_behavior.rb +32 -4
- data/app/helpers/blacklight/facets_helper_behavior.rb +31 -8
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +5 -0
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +28 -11
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +8 -3
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +4 -2
- data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
- data/app/helpers/blacklight/url_helper_behavior.rb +23 -3
- data/app/models/blacklight/icon.rb +0 -1
- data/app/models/concerns/blacklight/document.rb +1 -1
- data/app/models/concerns/blacklight/suggest/response.rb +1 -1
- data/app/models/record_mailer.rb +1 -1
- data/app/presenters/blacklight/document_presenter.rb +42 -1
- data/app/presenters/blacklight/facet_field_presenter.rb +3 -1
- data/app/presenters/blacklight/facet_item_presenter.rb +8 -0
- data/app/presenters/blacklight/field_presenter.rb +9 -6
- data/app/presenters/blacklight/json_presenter.rb +3 -1
- data/app/presenters/blacklight/show_presenter.rb +4 -30
- data/app/presenters/blacklight/thumbnail_presenter.rb +5 -1
- data/app/services/blacklight/document_factory.rb +3 -0
- data/app/services/blacklight/field_retriever.rb +18 -4
- data/app/services/blacklight/search_service.rb +0 -1
- data/app/views/bookmarks/_tools.html.erb +12 -7
- data/app/views/catalog/_bookmark_control.html.erb +1 -1
- data/app/views/catalog/_constraints.html.erb +12 -7
- data/app/views/catalog/_document.atom.builder +9 -6
- data/app/views/catalog/_document.rss.builder +4 -2
- data/app/views/catalog/_facet_index_navigation.html.erb +1 -10
- data/app/views/catalog/_facet_pagination.html.erb +1 -19
- data/app/views/catalog/_facets.html.erb +1 -1
- data/app/views/catalog/_group.html.erb +1 -9
- data/app/views/catalog/_index.html.erb +1 -1
- data/app/views/catalog/_search_results.html.erb +1 -1
- data/app/views/catalog/_show.html.erb +1 -1
- data/app/views/catalog/_show_header.html.erb +1 -1
- data/app/views/catalog/_show_main_content.html.erb +2 -2
- data/app/views/catalog/_show_tools.html.erb +12 -8
- data/app/views/catalog/_start_over.html.erb +1 -1
- data/app/views/catalog/_thumbnail.html.erb +1 -5
- data/app/views/catalog/_view_type_group.html.erb +5 -13
- data/app/views/catalog/index.json.jbuilder +8 -6
- data/app/views/catalog/show.json.jbuilder +1 -1
- data/app/views/shared/_flash_msg.html.erb +1 -15
- data/blacklight.gemspec +1 -0
- data/config/locales/blacklight.ca.yml +241 -0
- data/lib/blacklight/abstract_repository.rb +13 -4
- data/lib/blacklight/configuration.rb +11 -5
- data/lib/blacklight/configuration/display_field.rb +50 -0
- data/lib/blacklight/configuration/facet_field.rb +58 -1
- data/lib/blacklight/configuration/field.rb +13 -0
- data/lib/blacklight/configuration/index_field.rb +5 -0
- data/lib/blacklight/configuration/search_field.rb +3 -0
- data/lib/blacklight/configuration/show_field.rb +5 -0
- data/lib/blacklight/configuration/sort_field.rb +3 -0
- data/lib/blacklight/configuration/tool_config.rb +1 -0
- data/lib/blacklight/configuration/view_config.rb +25 -0
- data/lib/blacklight/search_state.rb +4 -2
- data/lib/blacklight/solr/repository.rb +1 -1
- data/lib/generators/blacklight/templates/catalog_controller.rb +8 -7
- data/spec/components/blacklight/document/action_component_spec.rb +43 -0
- data/spec/components/blacklight/document/group_component_spec.rb +45 -0
- data/spec/components/blacklight/document_component_spec.rb +8 -0
- data/spec/components/blacklight/facet_item_pivot_component_spec.rb +0 -1
- data/spec/components/blacklight/system/flash_message_component_spec.rb +54 -0
- data/spec/controllers/blacklight/search_fields_spec.rb +2 -0
- data/spec/controllers/catalog_controller_spec.rb +2 -0
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +6 -1
- data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +2 -0
- data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +2 -0
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +3 -1
- data/spec/helpers/blacklight/url_helper_behavior_spec.rb +2 -0
- data/spec/helpers/blacklight_helper_spec.rb +10 -0
- data/spec/helpers/catalog_helper_spec.rb +4 -4
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +17 -0
- data/spec/models/blacklight/search_builder_spec.rb +1 -1
- data/spec/models/blacklight/solr/search_builder_spec.rb +8 -0
- data/spec/presenters/blacklight/field_presenter_spec.rb +30 -5
- data/spec/services/blacklight/search_service_spec.rb +1 -5
- data/spec/views/catalog/_constraints.html.erb_spec.rb +2 -1
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +4 -2
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +8 -8
- data/spec/views/catalog/show.json.jbuilder_spec.rb +1 -0
- data/tasks/blacklight.rake +27 -12
- metadata +47 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 795afb3fdb4a13aa033d1b37180537e51ebfd53ab8f0ef894d05b6370b1c1238
|
|
4
|
+
data.tar.gz: 003ccd0c42c44636d463df31c141a7b9b6ab1276bab6d771d1637d2eb7ff17fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e9cdd317ae4535217bc98930c09095ca8aaebe01124863b6a507a2c9bfbd4851a18d72f139bbb6c2f152094e1cb3cf3462eea26747f3212dc484c24603f6ec4
|
|
7
|
+
data.tar.gz: a7f142dbaaabff9a9477d116ccd283ab67b2e72fb6d5f0c0482b495ed57f69486aa73f3ef6f67b31f0d00316d1dfb0b61fffaae08ebd1208aebae18a495c9746
|
data/.rubocop.yml
CHANGED
|
@@ -29,6 +29,7 @@ Layout/IndentationConsistency:
|
|
|
29
29
|
Metrics/BlockLength:
|
|
30
30
|
Exclude:
|
|
31
31
|
- "app/views/catalog/index.json.jbuilder"
|
|
32
|
+
- "app/views/catalog/_document.atom.builder"
|
|
32
33
|
- "lib/railties/blacklight.rake"
|
|
33
34
|
- "tasks/blacklight.rake"
|
|
34
35
|
- "spec/**/*"
|
|
@@ -42,6 +43,10 @@ Layout/LineLength:
|
|
|
42
43
|
Exclude:
|
|
43
44
|
- 'spec/**/*'
|
|
44
45
|
|
|
46
|
+
Metrics/ModuleLength:
|
|
47
|
+
Exclude:
|
|
48
|
+
- 'app/controllers/concerns/blacklight/catalog.rb'
|
|
49
|
+
|
|
45
50
|
Naming/HeredocDelimiterNaming:
|
|
46
51
|
Enabled: false
|
|
47
52
|
|
|
@@ -57,6 +62,9 @@ Naming/PredicateName:
|
|
|
57
62
|
Rails:
|
|
58
63
|
Enabled: true
|
|
59
64
|
|
|
65
|
+
Rails/ApplicationMailer:
|
|
66
|
+
Enabled: false
|
|
67
|
+
|
|
60
68
|
# https://github.com/rubocop-hq/rubocop/issues/6439
|
|
61
69
|
Style/AccessModifierDeclarations:
|
|
62
70
|
Enabled: false
|
data/.solr_wrapper.yml
ADDED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
7.
|
|
1
|
+
7.12.0
|
|
@@ -4,6 +4,12 @@ module Blacklight
|
|
|
4
4
|
# Dynamically creates methods on the given controller (typically CatalogController)
|
|
5
5
|
# for handling configured show tools
|
|
6
6
|
class ActionBuilder
|
|
7
|
+
# @param [Object] klass
|
|
8
|
+
# @param [String] name
|
|
9
|
+
# @param [Hash] opts
|
|
10
|
+
# @option opts [Symbol] callback
|
|
11
|
+
# @option opts [Symbol] validator
|
|
12
|
+
# @option opts [Boolean] define_method
|
|
7
13
|
def initialize(klass, name, opts)
|
|
8
14
|
@klass = klass
|
|
9
15
|
@name = name
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
class ConstraintComponent < ::ViewComponent::Base
|
|
5
|
+
with_collection_parameter :facet_item_presenter
|
|
6
|
+
|
|
7
|
+
def initialize(facet_item_presenter:, classes: 'filter', layout: Blacklight::ConstraintLayoutComponent)
|
|
8
|
+
@facet_item_presenter = facet_item_presenter
|
|
9
|
+
@classes = classes
|
|
10
|
+
@layout = layout
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
4
|
class ConstraintLayoutComponent < ::ViewComponent::Base
|
|
5
|
-
def initialize(value:, label: nil, remove_path: nil, classes: nil)
|
|
5
|
+
def initialize(value:, label: nil, remove_path: nil, classes: nil, search_state: nil)
|
|
6
6
|
@value = value
|
|
7
7
|
@label = label
|
|
8
8
|
@remove_path = remove_path
|
|
9
9
|
@classes = Array(classes).join(' ')
|
|
10
|
+
@search_state = search_state
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def render?
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%= content_tag :div, id: @id, class: @classes do %>
|
|
2
|
+
<h2 class="sr-only"><%= t('blacklight.search.search_constraints_header') %></h2>
|
|
3
|
+
|
|
4
|
+
<%= link_to t('blacklight.search.start_over'), start_over_path, class: "catalog_startOverLink btn btn-primary" %>
|
|
5
|
+
|
|
6
|
+
<span class="constraints-label sr-only"><%= t('blacklight.search.filters.title') %></span>
|
|
7
|
+
<%= query_constraints_area || query_constraints %>
|
|
8
|
+
<%= facet_constraints_area || facet_constraints %>
|
|
9
|
+
<%= additional_constraints %>
|
|
10
|
+
<% end %>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
class ConstraintsComponent < ::ViewComponent::Base
|
|
5
|
+
with_content_areas :query_constraints_area, :facet_constraints_area, :additional_constraints
|
|
6
|
+
|
|
7
|
+
def initialize(search_state:,
|
|
8
|
+
id: 'appliedParams', classes: 'clearfix constraints-container',
|
|
9
|
+
query_constraint_component: Blacklight::ConstraintLayoutComponent, facet_constraint_component: Blacklight::ConstraintComponent)
|
|
10
|
+
@search_state = search_state
|
|
11
|
+
@query_constraint_component = query_constraint_component
|
|
12
|
+
@facet_constraint_component = facet_constraint_component
|
|
13
|
+
@id = id
|
|
14
|
+
@classes = classes
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def query_constraints
|
|
18
|
+
return if @search_state.query_param.blank?
|
|
19
|
+
|
|
20
|
+
Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) do
|
|
21
|
+
@view_context.render(
|
|
22
|
+
@query_constraint_component.new(
|
|
23
|
+
search_state: @search_state,
|
|
24
|
+
value: @search_state.query_param,
|
|
25
|
+
label: @view_context.constraint_query_label(@search_state.params),
|
|
26
|
+
remove_path: @view_context.remove_constraint_url(@search_state),
|
|
27
|
+
classes: 'query'
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def facet_constraints
|
|
34
|
+
@view_context.render(@facet_constraint_component.with_collection(facet_item_presenters))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def start_over_path
|
|
38
|
+
Deprecation.silence(Blacklight::UrlHelperBehavior) do
|
|
39
|
+
@view_context.start_over_path
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def render?
|
|
44
|
+
Deprecation.silence(Blacklight::RenderConstraintsHelperBehavior) { @view_context.query_has_constraints? }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def facet_item_presenters
|
|
50
|
+
@search_state.filter_params.each_pair.flat_map do |facet, values|
|
|
51
|
+
facet_config = @view_context.facet_configuration_for_field(facet)
|
|
52
|
+
|
|
53
|
+
Array(values).map do |val|
|
|
54
|
+
next if val.blank? # skip empty string
|
|
55
|
+
|
|
56
|
+
facet_item_presenter(facet_config, val, facet)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def facet_item_presenter(facet_config, facet_item, facet_field)
|
|
62
|
+
Blacklight::FacetItemPresenter.new(facet_item, facet_config, @view_context, facet_field)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<% if using_default_document_action? %>
|
|
2
|
+
<%= link_to label,
|
|
3
|
+
url,
|
|
4
|
+
id: @id,
|
|
5
|
+
class: 'nav-link',
|
|
6
|
+
data: {}.merge(({ blacklight_modal: "trigger" } if @action.modal != false) || {}) %>
|
|
7
|
+
<% else %>
|
|
8
|
+
<%= @view_context.render(partial: @action.partial || @action.name.to_s, locals: { document: @document, document_action_config: @action }.merge(@options)) %>
|
|
9
|
+
<% end %>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Document
|
|
5
|
+
# Render a bookmark widget to bookmark / unbookmark a document
|
|
6
|
+
class ActionComponent < ::ViewComponent::Base
|
|
7
|
+
with_collection_parameter :action
|
|
8
|
+
|
|
9
|
+
# @param [Blacklight::Document] document
|
|
10
|
+
def initialize(document:, action:, options: {}, url_opts: {}, id: nil)
|
|
11
|
+
@document = document
|
|
12
|
+
@action = action
|
|
13
|
+
@options = options
|
|
14
|
+
@url_opts = url_opts
|
|
15
|
+
@id = id || @action.fetch(:id, "#{@action.name}Link")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def using_default_document_action?
|
|
19
|
+
return true if @action.component
|
|
20
|
+
return false unless @action.partial == 'document_action'
|
|
21
|
+
|
|
22
|
+
@view_context.partial_from_blacklight?(@action.partial)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def label
|
|
26
|
+
Deprecation.silence(Blacklight::ComponentHelperBehavior) do
|
|
27
|
+
@view_context.document_action_label(@action.name, @action)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def url
|
|
32
|
+
Deprecation.silence(Blacklight::ComponentHelperBehavior) do
|
|
33
|
+
@view_context.document_action_path(@action, @url_opts.merge(({ id: @document } if @document) || {}))
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<%= content_tag @tag, class: @classes do %>
|
|
2
|
+
<% @actions.each do |action| %>
|
|
3
|
+
<% result = capture { @view_context.render((action.component || Blacklight::Document::ActionComponent).new(action: action, document: @document, options: @options, url_opts: @url_opts)) } %>
|
|
4
|
+
|
|
5
|
+
<% if @wrapping_tag %>
|
|
6
|
+
<%= content_tag(@wrapping_tag, class: Array(@wrapping_classes) + [action.key]) do %>
|
|
7
|
+
<%= result %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% else %>
|
|
10
|
+
<%= result %>
|
|
11
|
+
<% end %>
|
|
12
|
+
<% end %>
|
|
13
|
+
<% end %>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Document
|
|
5
|
+
# Render a bookmark widget to bookmark / unbookmark a document
|
|
6
|
+
class ActionsComponent < ::ViewComponent::Base
|
|
7
|
+
# @param [Blacklight::Document] document
|
|
8
|
+
# rubocop:disable Metrics/ParameterLists
|
|
9
|
+
def initialize(document: nil, actions: [], options: {}, url_opts: nil, tag: :div, classes: 'index-document-functions', wrapping_tag: nil, wrapping_classes: nil)
|
|
10
|
+
@document = document
|
|
11
|
+
@actions = actions
|
|
12
|
+
@tag = tag
|
|
13
|
+
@classes = classes
|
|
14
|
+
@options = options
|
|
15
|
+
@url_opts = url_opts
|
|
16
|
+
@wrapping_tag = wrapping_tag
|
|
17
|
+
@wrapping_classes = wrapping_classes
|
|
18
|
+
end
|
|
19
|
+
# rubocop:enable Metrics/ParameterLists
|
|
20
|
+
|
|
21
|
+
def render?
|
|
22
|
+
@actions.any?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
4
|
module Document
|
|
5
|
+
# Render a bookmark widget to bookmark / unbookmark a document
|
|
5
6
|
class BookmarkComponent < ::ViewComponent::Base
|
|
7
|
+
# @param [Blacklight::Document] document
|
|
8
|
+
# @param [Boolean] checked
|
|
9
|
+
# @param [Object] bookmark_path the rails route to use for bookmarks
|
|
6
10
|
def initialize(document:, checked: nil, bookmark_path: nil)
|
|
7
11
|
@document = document
|
|
8
12
|
@checked = checked
|
|
@@ -14,6 +18,10 @@ module Blacklight
|
|
|
14
18
|
|
|
15
19
|
@view_context.bookmarked? @document
|
|
16
20
|
end
|
|
21
|
+
|
|
22
|
+
def bookmark_path
|
|
23
|
+
@bookmark_path || @view_context.bookmark_path(@document)
|
|
24
|
+
end
|
|
17
25
|
end
|
|
18
26
|
end
|
|
19
27
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<div>
|
|
2
2
|
<h1 class="modal-title"><%= title %></h1>
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
<% @formats.each do |i18n_key, citation_method| %>
|
|
5
5
|
<h2><%= t(i18n_key) %></h2>
|
|
6
6
|
<%= @document.send(citation_method).html_safe %>
|
|
7
|
-
<% unless @formats.keys.last === i18n_key
|
|
7
|
+
<% unless @formats.keys.last === i18n_key %>
|
|
8
|
+
<br/><br/>
|
|
9
|
+
<% end %>
|
|
8
10
|
<% end %>
|
|
9
11
|
</div>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
4
|
module Document
|
|
5
|
+
# Render citations for the document
|
|
5
6
|
class CitationComponent < ::ViewComponent::Base
|
|
6
7
|
DEFAULT_FORMATS = {
|
|
7
8
|
'blacklight.citation.mla': :export_as_mla_citation_txt,
|
|
@@ -11,13 +12,19 @@ module Blacklight
|
|
|
11
12
|
|
|
12
13
|
with_collection_parameter :document
|
|
13
14
|
|
|
15
|
+
# @param [Blacklight::Document] document
|
|
16
|
+
# @param [Hash<String => Symbol>] map of citation format names (suspiciously, i18n keys
|
|
17
|
+
# for them) to document methods that return the formatted citation.
|
|
14
18
|
def initialize(document:, formats: DEFAULT_FORMATS)
|
|
15
19
|
@document = document
|
|
16
20
|
@formats = formats.select { |_k, v| @document.respond_to?(v) }
|
|
17
21
|
end
|
|
18
22
|
|
|
23
|
+
# @return [String]
|
|
19
24
|
def title
|
|
20
|
-
|
|
25
|
+
Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
|
|
26
|
+
@view_context.document_heading(@document)
|
|
27
|
+
end
|
|
21
28
|
end
|
|
22
29
|
end
|
|
23
30
|
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class="group">
|
|
2
|
+
<h2 class="group-key"><%= @group.key %></h2>
|
|
3
|
+
<div class="grouped-documents">
|
|
4
|
+
<%= grouped_documents %>
|
|
5
|
+
</div>
|
|
6
|
+
<%- if @group_limit > 0 && @group.total > @group_limit %>
|
|
7
|
+
<%= @view_context.link_to t('blacklight.search.group.more'), add_group_facet_params_and_redirect(@group), class: 'more-in-group' %>
|
|
8
|
+
<%- end %>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Document
|
|
5
|
+
# Render the 'more like this' results from the response
|
|
6
|
+
class GroupComponent < ::ViewComponent::Base
|
|
7
|
+
with_collection_parameter :group
|
|
8
|
+
|
|
9
|
+
# @param [Blacklight::Document] document
|
|
10
|
+
def initialize(group:, group_limit: -1)
|
|
11
|
+
@group = group
|
|
12
|
+
@group_limit = group_limit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def grouped_documents
|
|
16
|
+
@view_context.render_document_index @group.docs
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def add_group_facet_params_and_redirect(group)
|
|
20
|
+
Deprecation.silence(Blacklight::UrlHelperBehavior) do
|
|
21
|
+
@view_context.search_action_path(@view_context.add_group_facet_params_and_redirect(group))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module Blacklight
|
|
4
4
|
module Document
|
|
5
|
+
# Render the 'more like this' results from the response
|
|
5
6
|
class MoreLikeThisComponent < ::ViewComponent::Base
|
|
6
7
|
with_collection_parameter :document
|
|
7
8
|
|
|
9
|
+
# @param [Blacklight::Document] document
|
|
8
10
|
def initialize(document:)
|
|
9
11
|
@document = document
|
|
10
12
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<% value = @use_thumbnail_tag ? @presenter.thumbnail.thumbnail_tag({ alt: '' }, 'aria-hidden': true, tabindex: -1, counter: @counter) : @presenter.thumbnail.render({ alt: '' }) %>
|
|
2
|
+
|
|
3
|
+
<% if value %>
|
|
4
|
+
<div class="document-thumbnail">
|
|
5
|
+
<% if @use_thumbnail_tag %>
|
|
6
|
+
<% warn_about_deprecated_behavior %>
|
|
7
|
+
<%= value %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= @view_context.link_to_document(@presenter.document, value, 'aria-hidden': true, tabindex: -1, counter: @counter) %>
|
|
10
|
+
<% end %>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Blacklight
|
|
4
|
+
module Document
|
|
5
|
+
# Render the thumbnail for the document
|
|
6
|
+
class ThumbnailComponent < ::ViewComponent::Base
|
|
7
|
+
with_collection_parameter :presenter
|
|
8
|
+
|
|
9
|
+
# @param [Blacklight::DocumentPresenter] presenter
|
|
10
|
+
def initialize(presenter:, counter:)
|
|
11
|
+
@presenter = presenter
|
|
12
|
+
@counter = counter
|
|
13
|
+
@use_thumbnail_tag = @presenter.thumbnail != Blacklight::ThumbnailPresenter
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def render?
|
|
17
|
+
@presenter.thumbnail.exists?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def warn_about_deprecated_behavior
|
|
21
|
+
Deprecation.warn(Blacklight::Document::ThumbnailComponent, 'Detected as custom thumbnail presenter; make sure it has a #render method that returns just the thumbnail image tag')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -18,9 +18,15 @@ module Blacklight
|
|
|
18
18
|
# @param component [Symbol, String] HTML tag type to use for the root element
|
|
19
19
|
# @param title_component [Symbol, String] HTML tag type to use for the title element
|
|
20
20
|
# @param metadata_component [Blacklight::DocumentMetadataComponent]
|
|
21
|
-
# @param counter [Number, nil]
|
|
21
|
+
# @param counter [Number, nil] a pre-computed counter for the position of this document in a search result set
|
|
22
|
+
# @param document_counter [Number, nil] alternatively, the document's position in a collection and,
|
|
23
|
+
# @param counter_offset [Number] with `document_counter`, the offset of the start of that collection counter to the overall result set
|
|
22
24
|
# @param show [Boolean] are we showing only a single document (vs a list of search results); used for backwards-compatibility
|
|
23
|
-
def initialize(document: nil, presenter: nil,
|
|
25
|
+
def initialize(document: nil, presenter: nil,
|
|
26
|
+
id: nil, classes: [], component: :article, title_component: :h4,
|
|
27
|
+
metadata_component: Blacklight::DocumentMetadataComponent,
|
|
28
|
+
counter: nil, document_counter: nil, counter_offset: 0,
|
|
29
|
+
show: false)
|
|
24
30
|
if presenter.nil? && document.nil?
|
|
25
31
|
raise ArgumentError, 'missing keyword: :document or :presenter'
|
|
26
32
|
end
|
|
@@ -36,6 +42,7 @@ module Blacklight
|
|
|
36
42
|
@metadata_component = metadata_component
|
|
37
43
|
|
|
38
44
|
@counter = counter
|
|
45
|
+
@counter ||= document_counter + 1 + counter_offset if document_counter.present?
|
|
39
46
|
|
|
40
47
|
@show = show
|
|
41
48
|
end
|
|
@@ -53,44 +60,44 @@ module Blacklight
|
|
|
53
60
|
|
|
54
61
|
# Content for the document title area; should be an inline element
|
|
55
62
|
def title
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
return super if block_given?
|
|
64
|
+
|
|
65
|
+
@title || if show?
|
|
66
|
+
content_tag('span', presenter.heading, itemprop: "name")
|
|
67
|
+
else
|
|
68
|
+
@view_context.link_to_document @document, counter: @counter, itemprop: 'name'
|
|
69
|
+
end
|
|
63
70
|
end
|
|
64
71
|
|
|
65
72
|
# Content for the document actions area
|
|
66
73
|
def actions
|
|
74
|
+
return super if block_given?
|
|
75
|
+
|
|
67
76
|
return if @show
|
|
68
77
|
|
|
69
|
-
@actions ||
|
|
70
|
-
@view_context.render_index_doc_actions
|
|
71
|
-
end
|
|
78
|
+
@actions ||
|
|
79
|
+
@view_context.render_index_doc_actions(@document, wrapping_class: "index-document-functions col-sm-3 col-lg-2")
|
|
72
80
|
end
|
|
73
81
|
|
|
74
82
|
# Content for the document thumbnail area
|
|
75
83
|
def thumbnail
|
|
84
|
+
return super if block_given?
|
|
76
85
|
return if @show
|
|
77
86
|
|
|
78
|
-
@thumbnail ||
|
|
79
|
-
return unless presenter.thumbnail.exists?
|
|
80
|
-
|
|
81
|
-
content_tag :div, class: "document-thumbnail" do
|
|
82
|
-
presenter.thumbnail.thumbnail_tag({ alt: '' }, 'aria-hidden': true, tabindex: -1, counter: @counter)
|
|
83
|
-
end
|
|
84
|
-
end
|
|
87
|
+
@thumbnail || render(Blacklight::Document::ThumbnailComponent.new(presenter: presenter, counter: @counter))
|
|
85
88
|
end
|
|
86
89
|
|
|
87
90
|
# Content for the document metadata area
|
|
88
91
|
def metadata
|
|
92
|
+
return super if block_given?
|
|
93
|
+
|
|
89
94
|
@metadata || @view_context.render(@metadata_component.new(fields: presenter.field_presenters, show: show?))
|
|
90
95
|
end
|
|
91
96
|
|
|
92
97
|
# Content that goes before the document title (e.g. the counter)
|
|
93
98
|
def before_title
|
|
99
|
+
return super if block_given?
|
|
100
|
+
|
|
94
101
|
@before_title || counter
|
|
95
102
|
end
|
|
96
103
|
|
|
@@ -105,13 +112,7 @@ module Blacklight
|
|
|
105
112
|
end
|
|
106
113
|
|
|
107
114
|
def presenter
|
|
108
|
-
@presenter ||=
|
|
109
|
-
if show?
|
|
110
|
-
@view_context.presenter(@document)
|
|
111
|
-
else
|
|
112
|
-
@view_context.index_presenter(@document)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
+
@presenter ||= @view_context.document_presenter(@document)
|
|
115
116
|
end
|
|
116
117
|
|
|
117
118
|
def show?
|